Skip to main content

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

PyPI version PyPI platforms

pip install unxt

Documentation

Documentation Status

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

DOI

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

codecov Actions Status

We welcome contributions!

Project details


Download files

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

Source Distribution

unxt-0.20.4.tar.gz (658.7 kB view details)

Uploaded Source

Built Distribution

unxt-0.20.4-py3-none-any.whl (55.8 kB view details)

Uploaded Python 3

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

Hashes for unxt-0.20.4.tar.gz
Algorithm Hash digest
SHA256 f5d1e534847aec0cbd10748639c3aa339ca7a7700ca60c8a6976f546884473fc
MD5 ddf6dcd37c50e12f72134fb2f5c90a8c
BLAKE2b-256 085d27ce9eb9aa10b65e833ad8ac1ebe6b9c07818f1a58b653a791be6a344b1e

See more details on using hashes here.

Provenance

The following attestation bundles were made for unxt-0.20.4.tar.gz:

Publisher: cd.yml on GalacticDynamics/unxt

Attestations:

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

Hashes for unxt-0.20.4-py3-none-any.whl
Algorithm Hash digest
SHA256 94eeb1e65f51512de476fdf6b4689aa97ad60177f265af56a9b77da5a1ea6c08
MD5 88f7f42b3be3672e3a0cfee1ac8ba9a8
BLAKE2b-256 508f9cf074b12d94d5e7eb510d9e70b390b20dc28dbd2eb37bf137a3b38a3951

See more details on using hashes here.

Provenance

The following attestation bundles were made for unxt-0.20.4-py3-none-any.whl:

Publisher: cd.yml on GalacticDynamics/unxt

Attestations:

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page