CyToolz: High-Performance Functional Utilities for Python

Summary
CyToolz is a high-performance Cython implementation of the popular Toolz library, offering functional utilities for iterables, functions, and dictionaries. It provides significant speed improvements, typically 2-5x faster than its pure Python counterpart, while maintaining the same API. This makes CyToolz an excellent choice for data processing tasks requiring efficiency and low memory usage.
Repository Info
Tags
Click on any tag to explore related repositories
Introduction
CyToolz is a powerful library that provides high-performance functional utilities for Python. It is a Cython implementation of the well-known toolz package, designed to offer significant speed enhancements for common data manipulation tasks involving iterables, functions, and dictionaries. By leveraging Cython, CyToolz delivers a faster alternative, often 2-5 times quicker than the pure Python toolz library, making it ideal for performance-critical applications and large datasets. It seamlessly integrates with other Python libraries like itertools and functools, promoting a functional programming style.
Installation
Getting started with CyToolz is straightforward. You can install it directly from the Python Package Index (PyPI) using pip:
pip install cytoolz
CyToolz supports Python 3.9+ and requires only CPython and a C compiler, making it a lightweight dependency for your projects.
Examples
CyToolz implements the exact same API as the toolz library, meaning any examples or documentation for toolz apply directly to CyToolz. For comprehensive examples and API details, please refer to the official toolz documentation: Toolz API Documentation.
Here's a simple example demonstrating a common functional utility, compose, which combines multiple functions:
from cytoolz import compose, partial
def increment(x):
return x + 1
def double(x):
return x * 2
# Compose functions: double then increment
composed_function = compose(increment, double)
result = composed_function(5) # (5 * 2) + 1 = 11
print(f"Composed result: {result}")
# Using partial application
add_five = partial(lambda x, y: x + y, 5)
print(f"Partial application: {add_five(10)}") # 5 + 10 = 15
Why Use CyToolz?
The primary advantage of CyToolz is its superior performance. By reimplementing core toolz functionalities in Cython, it achieves substantial speedups, typically 2-5 times faster, with some operations showing even more dramatic improvements. This performance boost is crucial when dealing with very large or potentially infinite data streams, where every millisecond counts.
Beyond speed, CyToolz also offers:
- C API: Provides a C API accessible to other Cython projects, enabling deeper integration and further performance optimizations.
- Low Memory Usage: Like
toolz, it leverages the iterator protocol, returning iterators whenever possible to ensure efficient memory usage, especially for large datasets. - Lightweight: Despite its performance benefits, CyToolz remains a minimal dependency, requiring only CPython and a C compiler.
- Free-threading Support: It includes experimental support and wheels for Python free-threading (introduced in Python 3.13), though users should exercise caution regarding thread-safety.
Links
- GitHub Repository: https://github.com/pytoolz/cytoolz
- Official Documentation: https://toolz.readthedocs.io
- API Documentation: https://toolz.readthedocs.io/en/latest/api.html
- Mailing List: https://groups.google.com/forum/#!forum/pytoolz