Skip to main content

invar-runtime

Lightweight runtime contracts for Python projects using Invar.

Installation

pip install invar-runtime

Usage

from invar_runtime import pre, post, Contract, NonEmpty, Positive

# Use built-in contracts
@pre(NonEmpty)
def first(xs: list) -> int:
    return xs[0]

# Create custom contracts
Even = Contract(lambda x: x % 2 == 0, "even")

@pre(Positive & Even)
def half(n: int) -> int:
    return n // 2

# Compose contracts
@post(NonEmpty)
def get_items() -> list:
    return [1, 2, 3]

Available Contracts

Collections

  • NonEmpty - Collection has at least one element
  • Sorted - Elements are in sorted order
  • Unique - No duplicate elements
  • SortedNonEmpty - Both sorted and non-empty

Numbers

  • Positive - Greater than zero
  • NonNegative - Greater than or equal to zero
  • Negative - Less than zero
  • InRange(lo, hi) - Value in [lo, hi]
  • Percentage - Value in [0, 100]

Strings

  • NonBlank - Non-empty and not just whitespace

List Elements

  • AllPositive - All elements > 0
  • AllNonNegative - All elements >= 0
  • NoNone - No None values

Decorators

  • @must_use(reason) - Mark return value as must-use
  • @must_close - Mark class as requiring explicit cleanup
  • @strategy(**params) - Specify Hypothesis strategies
  • @skip_property_test(reason) - Skip property-based testing (reason required)

Skip Property Test Usage

The @skip_property_test decorator requires a reason explaining why the function cannot be property-tested. Guard warns if used without justification.

# ✅ Good - with reason
@skip_property_test("no_params: Zero-parameter function, no inputs to vary")
def get_version() -> str:
    return "1.0.0"

# ❌ Bad - Guard warns about missing reason
@skip_property_test
def my_func(): ...

Valid reason categories:

  • no_params: - Function has no parameters to test
  • strategy_factory: - Returns Hypothesis strategy, not testable data
  • external_io: - Requires database/network/filesystem
  • non_deterministic: - Output depends on time/random state

Loop Invariants

from invar_runtime import invariant

while lo < hi:
    invariant(0 <= lo <= hi <= len(arr), "bounds check")
    mid = (lo + hi) // 2
    ...

Development Tools

For static analysis and verification tools, install invar-tools:

pip install invar-tools
# or use without installing:
uvx invar-tools guard

License

Apache-2.0

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

invar_runtime-1.3.0.tar.gz (12.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

invar_runtime-1.3.0-py3-none-any.whl (14.9 kB view details)

Uploaded Python 3

File details

Details for the file invar_runtime-1.3.0.tar.gz.

File metadata

  • Download URL: invar_runtime-1.3.0.tar.gz
  • Upload date:
  • Size: 12.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for invar_runtime-1.3.0.tar.gz
Algorithm Hash digest
SHA256 b9a770174b087749005ba1177f4ef967603b6dfd5f19e3dce17dc3642939c708
MD5 a888253fc040c07d231ee456d3378078
BLAKE2b-256 58d7f0a39b4a3d1276bf93eb9cb9e25e993a14bc8683a513b3250538daf3917a

See more details on using hashes here.

Provenance

The following attestation bundles were made for invar_runtime-1.3.0.tar.gz:

Publisher: publish.yml on Tefx/Invar

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file invar_runtime-1.3.0-py3-none-any.whl.

File metadata

  • Download URL: invar_runtime-1.3.0-py3-none-any.whl
  • Upload date:
  • Size: 14.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for invar_runtime-1.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a0a7733e6ba0d221461a2dd761f9afc65e1dddd07f92f0c943fe9cde764d0147
MD5 8eb751d7df231e60a513dd82fcbe17cb
BLAKE2b-256 7c655d65258ce16eb37c7c27f415bf910950cf048f8016970fae96ec01f64e31

See more details on using hashes here.

Provenance

The following attestation bundles were made for invar_runtime-1.3.0-py3-none-any.whl:

Publisher: publish.yml on Tefx/Invar

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

This release

1.3.0 This release

2 files

1.2.0

2 files

1.0.0

2 files

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page