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
Coming soon. In the meantime, if you've used astropy.units
, then unxt
should
be familiar!
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
wrapper around jax
to avoid boilerplate wrappers.
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 in academic work, then please cite.
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.10.8.tar.gz
.
File metadata
- Download URL: unxt-0.10.8.tar.gz
- Upload date:
- Size: 42.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.0 CPython/3.12.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 103afe919e53b65a25a68e0d483a94b11b0b41069e9d5cced3d96a84fe6adb5f |
|
MD5 | 1adac8a1ec20b4b8f208136875885800 |
|
BLAKE2b-256 | dc54149b0b26c2906efa15e7574dd833e89bcd6ece363bc6cbecc486139e0f26 |
File details
Details for the file unxt-0.10.8-py3-none-any.whl
.
File metadata
- Download URL: unxt-0.10.8-py3-none-any.whl
- Upload date:
- Size: 36.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/5.1.0 CPython/3.12.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | a79495a912d3ee8b17b5391593e2162391823b640f30000c357d2a450a45ee51 |
|
MD5 | 5a8a54a60189c25682c4db263f6d492c |
|
BLAKE2b-256 | 6e386d58f01ee92626830503cc323fdcfae32e88e456d0263798478dd8d2a315 |