ensures
ensures is a simple Python package that implements the idea of Design by Contract described in the Pragmatic Paranoia chapter of The Pragmatic Programmer. That's the chapter where they say you should trust nobody, not even yourself.
Main Features
- Verification of lists of pre/post condition and invariant functions.
- Usage of arbitrary functions for such verification.
- Result-type return values.
Installation
pip install ensures
Usage
precondition / require
Runs a list of functions on all args.
Returns Error if any of them fails.
from ensures import precondition
def is_positive(x):
"""Check if a number is positive."""
return x > 0
@precondition(is_positive)
def square_root(x):
"""Calculate square root with precondition that x must be positive."""
return x**0.5
postcondition / ensure
Runs a list of functions on the result.
Returns Error if any of them fails.
from ensures import ensure
def result_is_even(result):
"""Check if result is even."""
return result % 2 == 0
@ensure(result_is_even) # Using the alias
def double_number(x):
"""Double a number with postcondition that result is even."""
return x * 2
invariant
Runs a list of functions on all args.
Returns Error if any of them fails.
from ensures import invariant
@invariant(lambda x: x >= 0) # Simple lambda invariant
def increment_counter(x):
"""Increment a counter with invariant that it stays non-negative."""
return x + 1
Result Handling
Pattern matching is supported to unpack the Return value.
from ensures import Error, Success
result1 = square_root(1)
result2 = square_root(-1) # This will return an Error instance
def handle_result(res):
match res:
case Success(value):
print(f"Square root calculated: {value}")
case Error(func, args):
print(f"Precondition failed in {func.__name__} with args {args}")
handle_result(result1)
handle_result(result2)
More examples
Check examples.py
📊 Performance
Contract validation adds minimal overhead:
- Precondition: ~7x baseline function call
- Postcondition: ~8x baseline function call
- Memory: Constant memory usage, no leaks
See performance benchmarks for detailed analysis.
🤝 Contributing
We welcome contributions! Please see our Contributing Guide for details.
📝 Changelog
See CHANGELOG.md for a list of changes in each version.
📄 License
This project is licensed under the GPL-3.0-or-later License - see the LICENSE file for details.
Metadata
Release files for ensures 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| ensures-0.3.0.tar.gz | 28.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| ensures-0.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 57.7 kB
Release files / ensures-0.3.0.tar.gz
| Download URL | ensures-0.3.0.tar.gz |
|---|---|
| Size | 28.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
57620b48bc2a6e91d1ac766a82bb1df89cfa82830b7a6442845aa6f19737dd37
|
|
BLAKE2b-256 checksum How to use checksums |
f28ab0a59612bc6765df516939ff80453e7ef1c4530d3e199d4ef7f1d71720c0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
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 Sep 10, 2025.
Transparency logRelease files / ensures-0.3.0-py3-none-any.whl
| Download URL | ensures-0.3.0-py3-none-any.whl |
|---|---|
| Size | 29.7 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
510c32145fe2ee7f25bac8d7c9c6e2123c24c381dacf84c2aed9144b8ac069ca
|
|
BLAKE2b-256 checksum How to use checksums |
73c63c3b7edf647732849de54d1dc2629a80423c2441f7451a9773594f286a87
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.7
|
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 Sep 10, 2025.
Transparency log