Metadata-Version: 2.4
Name: crosszip
Version: 1.5.0
Summary: Apply a given function to all combinations of elements from multiple iterables
Keywords: iterables
Author: Indrajeet Patil
Author-email: Indrajeet Patil <patilindrajeet.science@gmail.com>
License-Expression: MIT
License-File: LICENSE.md
Classifier: Development Status :: 5 - Production/Stable
Classifier: Intended Audience :: Developers
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Requires-Dist: pytest>=9.1.1
Requires-Python: >=3.12
Project-URL: Homepage, https://github.com/IndrajeetPatil/crosszip
Project-URL: Documentation, https://www.indrapatil.com/crosszip/
Project-URL: Repository, https://github.com/IndrajeetPatil/crosszip
Project-URL: Issues, https://github.com/IndrajeetPatil/crosszip/issues
Project-URL: Changelog, https://github.com/IndrajeetPatil/crosszip/blob/main/CHANGELOG.md
Description-Content-Type: text/markdown

# crosszip <img src="https://raw.githubusercontent.com/IndrajeetPatil/crosszip/main/docs/assets/logo.png" align="right" width="240" />

[![PyPI
version](https://img.shields.io/pypi/v/crosszip.png)](https://pypi.org/project/crosszip/)
![Python versions](https://img.shields.io/pypi/pyversions/crosszip.png)

`crosszip` is a Python utility that makes it easy to apply a function to all possible combinations of elements from multiple iterables.
It combines the power of the Cartesian product and functional programming into a single, intuitive tool.

Additionally, `@pytest.mark.crosszip_parametrize` is a `pytest` marker that simplifies running tests with all possible combinations of parameter values.

## Installation

```bash
uv add crosszip
```

## Usage

Example of using `crosszip`:

```python
# @pyodide
# Label Generation for Machine Learning

from crosszip import crosszip


def create_label(category, subcategory, version):
    return f"{category}_{subcategory}_v{version}"


categories = ["cat", "dog"]
subcategories = ["small", "large"]
versions = ["1.0", "2.0"]

labels = crosszip(create_label, categories, subcategories, versions)
print(labels)
```

<!--pytest-codeblocks:expected-output-->

```text
['cat_small_v1.0', 'cat_small_v2.0', 'cat_large_v1.0', 'cat_large_v2.0', 'dog_small_v1.0', 'dog_small_v2.0', 'dog_large_v1.0', 'dog_large_v2.0']
```

Example of using `pytest` marker `crosszip_parametrize`:

```python
# @pyodide
# Testing Power Function

import math
import crosszip
import pytest


@pytest.mark.crosszip_parametrize(
    "base",
    [2, 10],
    "exponent",
    [-1, 0, 1],
)
def test_power_function(base, exponent):
    result = math.pow(base, exponent)
    assert result == base**exponent


print("Tests executed successfully.")
```

<!--pytest-codeblocks:expected-output-->

```text
Tests executed successfully.
```

For more examples, check out the package documentation at:
<https://www.indrapatil.com/crosszip/>

## Key Features

- **Flexible Input**: Works with any iterables, including lists, tuples, sets, and generators.
- **pytest Plugin**: Provides a `crosszip_parametrize` marker for running tests with all possible combinations of parameter values.
- **Simple API**: Minimalist, intuitive design for quick integration into your projects.
- **Advanced patterns**: See the [Advanced Usage](https://www.indrapatil.com/crosszip/advanced/) guide for memory efficiency strategies, managing test explosion, and testing validation functions across input types and edge cases.

## License

This project is licensed under the MIT License.

## Code of Conduct

Please note that the crosszip project is released with a
[Contributor Code of Conduct](https://www.contributor-covenant.org/version/3/0/code_of_conduct/).
By contributing to this project, you agree to abide by its terms.

## Acknowledgements

Hex sticker font is `Rubik`, and the image is taken from icon made by Freepik and available at flaticon.com.
