Unit-aware, dimension-correct physics computing — from a shared Rust core
The same dimensional analysis and uncertainty engine, exposed as a standalone DSL (phs), this Python library, a Rust crate, and a JVM package — with zero overhead under torch.compile / jax.jit where it matters.
This is the Python package. physure also ships as a standalone CLI/DSL that needs no Python (PHS), a pure Rust crate, and JVM bindings on Maven Central — see the project README for all four and INSTALL.md for every install path.
Why physure?
Most unit libraries make you choose between correctness and speed. physure (physics + measure) refuses the trade-off:
- Correlated uncertainty propagation. Full sparse-covariance tracking between quantities (GUM-style), not just independent error bars. If
xandyshare history,x - yknows it. - Native-speed dimensional analysis. Unit arithmetic runs in Rust (~50 ns per operation) with rational exponents — no floating-point drift in dimensions, zero-copy buffer FFI to NumPy.
- ML-ready.
Quantitywraps NumPy, PyTorch, and JAX arrays. Under@physure.jit, units are validated at trace time and evaporate at runtime: ~1.17× vs. raw compiled PyTorch. - Static unit checking. A mypy plugin narrows
Q_(3, "m/s")toQuantity[..., Literal["m/s"]], so unit mismatches can fail before your code even runs. - Zero runtime dependencies.
pip install physurepulls in nothing else. NumPy/PyTorch/JAX/pandas support activates automatically when those packages are present.
Quick start
from physure import Q_
d = Q_(10, "km")
t = Q_(2, "hr")
print((d / t).to("m/s")) # 1.3888888888888888 m/s
# Uncertainty propagates automatically — correlations included
g = Q_(9.8, "m/s^2", uncertainty=0.02)
m = Q_(2.5, "kg", uncertainty=0.001)
E = m * g * Q_(12, "m")
print(E.to("J")) # (294.0 ± 0.61) J
Or straight from the command line — physure ships a unit-aware calculator and REPL:
$ python -m physure "500 N / 2 m^2 => kPa"
0.25 kPa
Highlights
Units that vanish at compile time
@physure.jit traces your function once, validates every dimension in Rust, then runs on raw tensors — dimensional safety with no per-call cost:
from physure import Q_, jit
@jit
def kinetic_energy(mass, velocity):
return 0.5 * mass * velocity**2
kinetic_energy(Q_(10.0, "kg"), Q_(5.0, "m/s")) # 125.0 kg·m²/s²
kinetic_energy(Q_(1.0, "m"), Q_(1.0, "s")) # raises at trace time: incompatible units
Works with plain floats, NumPy arrays, PyTorch tensors (via __torch_dispatch__ + torch.compile), and JAX (jax.jit).
Uncertainty done properly
Choose the propagation mode globally or per-block:
import physure
physure.propagation_mode("uncorrelated") # independent errors (default: correlated)
with physure.uncertainty_mode("uncorrelated"):
... # scoped override
Backends include Gaussian (first-order), Monte Carlo, and Unscented Transform. Covariance lives in a sparse Rust store, so large lineages stay fast and memory stays flat.
The default is correlated because the alternative is quietly wrong: with independent errors x - x reports σ·√2 instead of zero, which looks plausible enough to publish. [Settings] propagation_mode in physure.conf sets it for a project, and both the core and PHS read it, so they cannot disagree.
Batteries included, loaded lazily
Pandas ExtensionArray, pydantic validation, SymPy symbolic quantities, unit-aware torch.nn layers, and Arrow IPC serialization each activate only when you use them. Cold import stays around 20 ms.
How it compares
| physure | pint | astropy.units | unyt | |
|---|---|---|---|---|
| Correlated uncertainty (covariance) | ✅ | — | — | — |
| Built-in uncertainty propagation | ✅ | via uncertainties |
limited | — |
| Rust-accelerated core | ✅ | — | — | — |
torch.compile / jax.jit compatible |
✅ | — | — | — |
| Static unit checking (mypy) | ✅ | — | — | — |
| Standalone CLI/DSL, no Python required | ✅ | — | — | — |
| Runtime dependencies | none | none | astropy stack | numpy |
| Ecosystem maturity | new | ✅ mature | ✅ mature | mature |
If you need a battle-tested converter with a decade of integrations, pint and astropy are excellent. physure is for when you also need uncertainty you can defend and units inside compiled ML code.
Performance
| Benchmark | Result |
|---|---|
| Cold import | ~21 ms |
| Unit multiply/divide (Rust core) | ~54 ns |
| Scalar add with dimension check | ~40 ns |
10⁶-element tensor op, @torch.compile |
1.17× vs. pure PyTorch |
| Covariance propagation (sparse blocks) | ~7 µs |
Full methodology and reproduction steps: BENCHMARKS.md.
Installation
pip install physure # Rust-compiled wheel, no other dependencies
pip install "physure[numpy]" # + NumPy/SciPy/Numba acceleration
pip install "physure[torch]" # + PyTorch backend
pip install "physure[jax]" # + JAX backend
pip install "physure[all]" # everything
From source
git clone https://github.com/Alexisrx96/physure
cd physure
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh # Rust, if needed
cd physure-python
maturin develop --release
uv sync --group dev
Architecture
physure/ # Cargo workspace root
├── physure-core/ # 🦀 Pure Rust physics engine — no FFI deps
│ └── src/ # units, quantity, covariance, uncertainty,
│ # symbolic, Arrow serialization
└── physure-python/ # 🐍 PyO3 bindings + Python application layer (this package)
└── physure/
├── domain/ # Quantity, units, dimensions, uncertainty
├── application/ # Q_ factory, unit-system context, startup
├── backends/ # NumPy / PyTorch / JAX adapters
├── _jit/ # tracing + compile-time dimension checks
├── ext/ # IO, pandas, numba, chemistry, symbolic regression,
│ # AOT compiler, PHS plugin loader
└── nn/ # unit-aware neural network layers
The rule: physure-core is the single source of truth. All math lives in Rust; Python is a thin, zero-copy translation layer.
Documentation
- Unit reference — every unit, prefix, and constant
- Tutorials and examples — including a unit-checked PINN notebook
- torch.compile integration
Contributing
Issues and PRs are welcome. The quality bar is enforced in CI: ruff clean, tests green on Python 3.11–3.14 with ≥ 80 % coverage, and zero new SonarQube violations. See CLAUDE.md for the full development guide.
License
MIT — Irvin Torres
Metadata
Release files for physure 0.2.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| physure-0.2.4.tar.gz | 1.4 MB | Details |
Built distributions (wheels)
| File | Reset | |||
|---|---|---|---|---|
| physure-0.2.4-cp311-abi3-win_amd64.whl | CPython 3.11 | abi3 | Windows x86-64 | Details |
| physure-0.2.4-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl | CPython 3.11 | abi3 | Linux glibc 2.17+ x86-64 | Details |
| physure-0.2.4-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl | CPython 3.11 | abi3 | Linux glibc 2.17+ ARM64 | Details |
| physure-0.2.4-cp311-abi3-macosx_11_0_arm64.whl | CPython 3.11 | abi3 | macOS 11.0+ ARM64 | Details |
| physure-0.2.4-cp311-abi3-macosx_10_12_x86_64.whl | CPython 3.11 | abi3 | macOS 10.12+ x86-64 | Details |
Total release size: 11.8 MB
Release files / physure-0.2.4.tar.gz
| Download URL | physure-0.2.4.tar.gz |
|---|---|
| Size | 1.4 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
f036f485b88049390ae274102d07b45f046a136176d4067e88bed24cd0c87c8a
|
|
BLAKE2b-256 checksum How to use checksums |
58329cc4177241b26aa17ccc7425a8b8c1c6b3a67cd509c0c2a6c1efc4054023
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
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 29, 2026.
Transparency logRelease files / physure-0.2.4-cp311-abi3-win_amd64.whl
| Download URL | physure-0.2.4-cp311-abi3-win_amd64.whl |
|---|---|
| Size | 2.1 MB |
| Tags | CPython 3.11 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
80647519dac9c0dca67457e6aaf351b3bc0375f8fc8a3498c85c0c6d010ab69e
|
|
BLAKE2b-256 checksum How to use checksums |
26fb3f757a4069ce7b1031d2dc66b2ca21a946ab689266e813522d8ffe6b89c4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
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 29, 2026.
Transparency logRelease files / physure-0.2.4-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | physure-0.2.4-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 2.1 MB |
| Tags | CPython 3.11 Linux glibc 2.17+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
26ef4483a3df84d11c9fdb7f0c3ba8ee182f06d66a909b10adcde6c8cc1373c3
|
|
BLAKE2b-256 checksum How to use checksums |
a441b96ce165af60f741c47d40fd464767c78a0f2333994039410d91b1353eb7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
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 29, 2026.
Transparency logRelease files / physure-0.2.4-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | physure-0.2.4-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 2.1 MB |
| Tags | CPython 3.11 Linux glibc 2.17+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
eb1ab7e646887b75d43554222aa8ff0956210521cb9a34f84fd839ec3fee4394
|
|
BLAKE2b-256 checksum How to use checksums |
5fce7ba640649fc68b8614fba30129170dbec64032c14069c54a653fb2d2aa21
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
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 29, 2026.
Transparency logRelease files / physure-0.2.4-cp311-abi3-macosx_11_0_arm64.whl
| Download URL | physure-0.2.4-cp311-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 2.0 MB |
| Tags | CPython 3.11 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
7d3d089e4ec0d6886fc4953c235a8c4ff35a4fe637ae463af956e7db0240ce2c
|
|
BLAKE2b-256 checksum How to use checksums |
da238d582792f374d944c8e8bdfc4c1a27b9881e0319ae24925a491adffc12db
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
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 29, 2026.
Transparency logRelease files / physure-0.2.4-cp311-abi3-macosx_10_12_x86_64.whl
| Download URL | physure-0.2.4-cp311-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 2.1 MB |
| Tags | CPython 3.11 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
f3276c909fe75ab20e2f0572675d96ee3619942ed7ad9fcb7743f79ec794977a
|
|
BLAKE2b-256 checksum How to use checksums |
92643115cde514eb2c658ad16acd6cf26f671dfa48587d0dad59b9207da81ad2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
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 29, 2026.
Transparency log