A library for unit and quantity consistent computations in Rust
Project description
Unitforge
Unitforge is a Python library for working with physical quantities that respect units, dimensional analysis, and arithmetic correctness — powered by high-performance Rust under the hood.
Built for scientific computing, simulation, and engineering workflows where unit safety is non-negotiable.
Features
- Strong unit enforcement: Prevent unit mismatch bugs at runtime.
- Arithmetic support: Add, subtract, multiply, and divide quantities with automatic unit resolution.
- Unit conversion: Convert between compatible units on the fly.
- Scientific formatting: Values display with 4 significant digits and the configured unit.
- 3D Vectors & Matrices: Perform vector/matrix math with quantities and units.
- NumPy integration: Convert to/from NumPy arrays easily.
- Constants: Built-in constants like the speed of light.
- Serialization-ready: Optional serde-based serialization support (if compiled with feature).
Installation
pip install unitforge
Example Usage
from unitforge import Force, ForceUnit, Distance, DistanceUnit
f = Force(12.0, ForceUnit.N)
print(f.to(ForceUnit.mN)) # → 12000.0
d = Distance(2.0, DistanceUnit.m)
work = f * d
print(work) # → 24 Nm
Unit Conversion
f = Force(1.0, ForceUnit.N)
print(f.to(ForceUnit.kN)) # → 0.001
Arithmetic
f1 = Force(5.0, ForceUnit.N)
f2 = Force(3.0, ForceUnit.N)
f_sum = f1 + f2
print(f_sum.to(ForceUnit.N)) # → 8.0
Vector and Matrix Support
from unitforge import Vector3, Distance, DistanceUnit
v = Vector3.from_list([
Distance(3., DistanceUnit.m),
Distance(4., DistanceUnit.m),
Distance(12., DistanceUnit.m)
])
print(v.norm()) # → 13.0 m
NumPy Interoperability
import numpy as np
from unitforge import Vector3, ForceUnit
arr = np.array([1.0, 2.0, 3.0])
vec = Vector3.from_array(arr, ForceUnit.N)
arr_back = vec.to_array(ForceUnit.N)
print(arr_back) # → [1. 2. 3.]
Quantities Available
Examples include:
Acceleration,AreaOfMoment,Density,Stiffness,Time,Volume,Angle,Area,Distance,ForcePerVolume,Strain,Velocity,AngularAcceleration,Charge,ForceArea,Force,Stress,VelocitySquared,AngularVelocity,Compliance,ForceDistance,ForceVolume,Mass,Voltage- Each with associated unit enums (e.g.,
ForceUnit,DistanceUnit, ...)
from math import isclose
from unitforge import Force, ForceUnit
f = Force(12., ForceUnit.N)
assert isclose((f * 2).to(ForceUnit.N), 24.)
Contributing
Contributions are welcome! While the core is implemented in Rust, Python usage feedback, bug reports, and API improvements are highly valued.
Repository
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file unitforge-0.3.0.tar.gz.
File metadata
- Download URL: unitforge-0.3.0.tar.gz
- Upload date:
- Size: 46.8 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.9.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1bf2dfc3b49a328c8d162af54fd7f4fbced62b899ead6915c5f4b0e44ea1a8fd
|
|
| MD5 |
d4391d3f041c9ffc707bd8c67a480841
|
|
| BLAKE2b-256 |
7de558c8f1630706839c8a3a698eee50e0491b5f4d237cbe7b1ab8d882894340
|
File details
Details for the file unitforge-0.3.0-cp312-cp312-manylinux_2_34_x86_64.whl.
File metadata
- Download URL: unitforge-0.3.0-cp312-cp312-manylinux_2_34_x86_64.whl
- Upload date:
- Size: 607.2 kB
- Tags: CPython 3.12, manylinux: glibc 2.34+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.9.4
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f751b5800a25d78227f561219b79b662432f0e3d6a9c0caf5a83184c58563c68
|
|
| MD5 |
a3513331c299bd56506692ccee3e2f04
|
|
| BLAKE2b-256 |
40129393a04da842b650948338bcce2600d262e30fa458b92b8f2465a9b13f3a
|