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.
For AI coding agents
coverwise-mcp exposes the same engine as an MCP server, so a coding agent writing tests for a function with several parameters builds a parameter model instead of picking combinations by eye. It installs as a Claude Code plugin and also runs under any MCP client, including Codex CLI, Cursor and Claude Desktop.
License
Apache-2.0
Metadata
Release files for coverwise 1.6.2
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 | Actions Reset |
|---|---|---|---|---|
| coverwise-1.6.2-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 for coverwise-1.6.2-py3-none-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
| coverwise-1.6.2-py3-none-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl | Python 3 | none | Linux glibc 2.26+ ARM64, Linux glibc 2.28+ ARM64 | Details for coverwise-1.6.2-py3-none-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl |
| coverwise-1.6.2-py3-none-macosx_14_0_arm64.whl | Python 3 | none | macOS 14.0+ ARM64 | Details for coverwise-1.6.2-py3-none-macosx_14_0_arm64.whl |
Total release size: 1.2 MB
Release files / coverwise-1.6.2-py3-none-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
| Download URL | coverwise-1.6.2-py3-none-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl |
|---|---|
| Size | 511.6 kB |
| Tags | Linux glibc 2.27+ x86-64 Linux glibc 2.28+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
584548265ac48a96da893ae1440f243b35fa7b3a7e8b3be9c48d1f1d25e01312
|
|
BLAKE2b-256 checksum How to use checksums |
d78225184ed7491e0acb78df3e1486e76d58307e7a9ddfee3c7bc0179513032f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Oct 29, 2026.
Transparency logRelease files / coverwise-1.6.2-py3-none-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl
| Download URL | coverwise-1.6.2-py3-none-manylinux_2_26_aarch64.manylinux_2_28_aarch64.whl |
|---|---|
| Size | 446.5 kB |
| Tags | Linux glibc 2.26+ ARM64 Linux glibc 2.28+ ARM64 Python 3 |
|
SHA-256 checksum How to use checksums |
40c79a28c444b9c2855bf88a23dee6aef9b8519093b565709fcfd90137c293b6
|
|
BLAKE2b-256 checksum How to use checksums |
88b9319884023aa60e56fece084fe6c72ccd701c296d900664345ea4244ad1db
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Oct 29, 2026.
Transparency logRelease files / coverwise-1.6.2-py3-none-macosx_14_0_arm64.whl
| Download URL | coverwise-1.6.2-py3-none-macosx_14_0_arm64.whl |
|---|---|
| Size | 218.4 kB |
| Tags | Python 3 macOS 14.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
fde98129e0b208e3dfdb29e2320de147925da5218e4af1e5bbe064117a8ae528
|
|
BLAKE2b-256 checksum How to use checksums |
b55f8a205e2b32f6fb0fc14e97ca8cd1079972cf8ae1019522dad902cfdcacc0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.16
|
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 Oct 29, 2026.
Transparency logSecurity for coverwise 1.6.2
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.
Full provenance
All 3 files in this release have been uploaded with provenance metadata.
Attestation for coverwise-1.6.2-py3-none-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl
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 Oct 29, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.