Quantities in JAX
Project description
unxt
Unitful Quantities in JAX
Unxt is unitful quantities and calculations in JAX, built on Equinox and Quax.
Yes, it supports auto-differentiation (grad
, jacobian
, hessian
) and
vectorization (vmap
, etc).
Installation
pip install unxt
Documentation
Quick example
from unxt import Quantity
x = Quantity(jnp.arange(1, 5, dtype=float), "kpc")
print(x)
# Quantity['length'](Array([1., 2., 3., 4.], dtype=float64), unit='kpc')
# Addition / Subtraction
print(x + x)
# Quantity['length'](Array([2., 4., 6., 8.], dtype=float64), unit='kpc')
# Multiplication / Division
print(2 * x)
# Quantity['length'](Array([2., 4., 6., 8.], dtype=float64), unit='kpc')
y = Quantity(jnp.arange(4, 8, dtype=float), "Gyr")
print(x / y)
# Quantity['speed'](Array([0.25 , 0.4 , 0.5 , 0.57142857], dtype=float64), unit='kpc / Gyr')
# Exponentiation
print(x**2)
# Quantity['area'](Array([0., 1., 4., 9.], dtype=float64), unit='kpc2')
# Unit Checking on operations
try:
x + y
except Exception as e:
print(e)
# 'Gyr' (time) and 'kpc' (length) are not convertible
unxt
is built on quax
, which
enables custom array-ish objects in JAX. For convenience we use the
quaxed
library, which is just a
quax.quaxify
wrapper around jax
to avoid boilerplate code.
from quaxed import grad, vmap
import quaxed.numpy as jnp
print(jnp.square(x))
# Quantity['area'](Array([ 1., 4., 9., 16.], dtype=float64), unit='kpc2')
print(qnp.power(x, 3))
# Quantity['volume'](Array([ 1., 8., 27., 64.], dtype=float64), unit='kpc3')
print(vmap(grad(lambda x: x**3))(x))
# Quantity['area'](Array([ 3., 12., 27., 48.], dtype=float64), unit='kpc2')
Since Quantity
is parametric, it can do runtime dimension checking!
LengthQuantity = Quantity["length"]
print(LengthQuantity(2, "km"))
# Quantity['length'](Array(2, dtype=int64, weak_type=True), unit='km')
try:
LengthQuantity(2, "s")
except ValueError as e:
print(e)
# Physical type mismatch.
Citation
If you found this library to be useful and want to support the development and maintenance of lower-level code libraries for the scientific community, please consider citing this work.
Development
We welcome contributions!
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
File details
Details for the file unxt-0.20.4.tar.gz
.
File metadata
- Download URL: unxt-0.20.4.tar.gz
- Upload date:
- Size: 658.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | f5d1e534847aec0cbd10748639c3aa339ca7a7700ca60c8a6976f546884473fc |
|
MD5 | ddf6dcd37c50e12f72134fb2f5c90a8c |
|
BLAKE2b-256 | 085d27ce9eb9aa10b65e833ad8ac1ebe6b9c07818f1a58b653a791be6a344b1e |
Provenance
The following attestation bundles were made for unxt-0.20.4.tar.gz
:
Publisher:
cd.yml
on GalacticDynamics/unxt
-
Statement type:
https://in-toto.io/Statement/v1
- Predicate type:
https://docs.pypi.org/attestations/publish/v1
- Subject name:
unxt-0.20.4.tar.gz
- Subject digest:
f5d1e534847aec0cbd10748639c3aa339ca7a7700ca60c8a6976f546884473fc
- Sigstore transparency entry: 147645772
- Sigstore integration time:
- Predicate type:
File details
Details for the file unxt-0.20.4-py3-none-any.whl
.
File metadata
- Download URL: unxt-0.20.4-py3-none-any.whl
- Upload date:
- Size: 55.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.1 CPython/3.12.7
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 94eeb1e65f51512de476fdf6b4689aa97ad60177f265af56a9b77da5a1ea6c08 |
|
MD5 | 88f7f42b3be3672e3a0cfee1ac8ba9a8 |
|
BLAKE2b-256 | 508f9cf074b12d94d5e7eb510d9e70b390b20dc28dbd2eb37bf137a3b38a3951 |
Provenance
The following attestation bundles were made for unxt-0.20.4-py3-none-any.whl
:
Publisher:
cd.yml
on GalacticDynamics/unxt
-
Statement type:
https://in-toto.io/Statement/v1
- Predicate type:
https://docs.pypi.org/attestations/publish/v1
- Subject name:
unxt-0.20.4-py3-none-any.whl
- Subject digest:
94eeb1e65f51512de476fdf6b4689aa97ad60177f265af56a9b77da5a1ea6c08
- Sigstore transparency entry: 147645774
- Sigstore integration time:
- Predicate type: