Skip to main content

ensures

CI PyPI version PyPI - Downloads codecov Python 3.10+ PyPI - Status Code style: ruff Type checked: mypy License: GPL v3

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)

Source distribution for ensures 0.3.0
File Size Uploaded
ensures-0.3.0.tar.gz 28.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ensures 0.3.0
File Interpreter ABI Platform
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 log

Release 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

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 release files

0.2.0

2 release files

0.1.3

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page