coverwise
Combinatorial test coverage for Python. The coverwise package ships the
native C++ CLI plus a Python API that generates, analyzes, and incrementally
extends t-wise test suites — including a pytest decorator that replaces a
hand-written cross-product with a covering suite.
Installation
pip install coverwise
Supported wheels: Linux x86_64, Linux aarch64, and macOS 14+ Apple Silicon. The
package ships a prebuilt executable rather than portable Python code, so other
platforms have to build the CLI from source. There are no Python runtime
dependencies, and the coverwise command is installed directly.
Quick Start
import coverwise
result = coverwise.generate(
parameters={
"os": ["Linux", "macOS", "Windows"],
"browser": ["Chrome", "Firefox", "Safari"],
},
constraints=["IF os = Windows THEN browser != Safari"],
strength=2,
)
result["coverage"] # 1
result["tests"] # [{"os": "Linux", "browser": "Firefox"}, ...]
Every function takes and returns plain dictionaries — the same JSON the CLI reads and writes:
| Function | Purpose |
|---|---|
generate(model, **fields) |
Generate a covering suite |
analyze_coverage(parameters, tests, strength, constraints) |
Measure an existing suite |
extend_tests(existing, model, **fields) |
Extend a suite, keeping existing tests |
estimate_model(model, **fields) |
Model size and validity, without generating |
Invalid models and unparsable constraints raise coverwise.CoverwiseError,
carrying code, exit_code, and the CLI's stderr.
pytest
coverwise.parametrize runs a test once per generated case, passing each
parameter as a same-named argument:
import coverwise
@coverwise.parametrize(
{
"os": ["Windows", "macOS", "Linux"],
"browser": ["Chrome", "Firefox", "Safari"],
"locale": ["en", "ja"],
},
constraints=["IF os = Windows THEN browser != Safari"],
)
def test_login(os, browser, locale):
assert login(os, browser, locale).ok
The full cross-product is 18 cases; the pairwise suite covers every pair in far
fewer. pytest is not a dependency of this package — the decorator only needs it
where tests run, and pip install coverwise[pytest] installs both together.
Command Line
coverwise generate input.json > tests.json
coverwise analyze --params input.json --tests tests.json
coverwise extend --existing tests.json input.json > updated.json
coverwise stats input.json
Any input path may be - to read that JSON from standard input.
python -m coverwise is equivalent to the installed command, and
coverwise --help lists every command with its exit-code contract.
See the Python API reference, the CLI reference, and the full project documentation.
License
Apache-2.0
Release files for coverwise 1.5.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| coverwise-1.5.0-py3-none-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl | Python 3 | none | Linux glibc 2.28+ x86-64, Linux glibc 2.27+ x86-64 | Details |
| coverwise-1.5.0-py3-none-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl | Python 3 | none | Linux glibc 2.28+ ARM64, Linux glibc 2.26+ ARM64 | Details |
| coverwise-1.5.0-py3-none-macosx_14_0_arm64.whl | Python 3 | none | macOS 14.0+ ARM64 | Details |
Total release size: 995.4 kB
Release files / coverwise-1.5.0-py3-none-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | coverwise-1.5.0-py3-none-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 424.3 kB |
| Tags | Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
22934c2e87988ca11aa085f12233140f00146836b54289c5426a88b1f42c652d
|
|
BLAKE2b-256 checksum How to use checksums |
d64bd7996e6eb45aaada6ac7b772b1fe81c86b084e2bae9df1cc94afbd32fc0c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 23, 2026.
Transparency logRelease files / coverwise-1.5.0-py3-none-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
| Download URL | coverwise-1.5.0-py3-none-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 377.0 kB |
| Tags | Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
33b6fa679078127c5cd24fbadd129b58e77256e30a37f430dc8b4e5fa72ed054
|
|
BLAKE2b-256 checksum How to use checksums |
1fd70640a098317e8dd9a2e8e6686cdee43c0b00783c1d9b2e77c6a707aef91a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 23, 2026.
Transparency logRelease files / coverwise-1.5.0-py3-none-macosx_14_0_arm64.whl
| Download URL | coverwise-1.5.0-py3-none-macosx_14_0_arm64.whl |
|---|---|
| Size | 194.1 kB |
| Tags | Python 3 macOS 14.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
4a5fa2745f8314645a39155961d1a73812298dd15919d6366b631b97aa161f3b
|
|
BLAKE2b-256 checksum How to use checksums |
1e75f1f51b237f655ca3f0baaf9e8160e39974080525392481854f5183e6622f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Aug 23, 2026.
Transparency log