Skip to main content

CI PyPI version PyPI downloads

JAXADI Logo

JaxADi is a Python library designed to bridge the gap between casadi.Function and JAX-compatible functions. By leveraging the strengths of both CasADi and JAX, JAXADI opens up exciting opportunities for building highly efficient, batchable code that can be executed seamlessly across CPUs, GPUs, and TPUs.

JAXADI can be particularly useful in scenarios involving:

  • Robotics simulations
  • Optimal control problems
  • Machine learning models with complex dynamics

Please dive into quick tutorial to get you up to speed in no time

Installation

You can install JAXADI using pip:

pip install jaxadi

For a complete environment setup for examples, we recommend using Conda/Mamba:

mamba env create -f environment.yml

Usage

JAXADI provides a simple and intuitive API:

import casadi as cs
import numpy as np
from jaxadi import translate, convert
from jax import numpy as jnp

x = cs.SX.sym("x", 2, 2)
y = cs.SX.sym("y", 2, 2)
# Define a complex nonlinear function
z = x @ y  # Matrix multiplication
z_squared = z * z  # Element-wise squaring
z_sin = cs.sin(z)  # Element-wise sine
result = z_squared + z_sin  # Element-wise addition
# Create the CasADi function
casadi_fn = cs.Function("complex_nonlinear_func", [x, y], [result])
# Get JAX-compatible function string representation
jax_fn_string = translate(casadi_fn)
print(jax_fn_string)
# Define JAX function from CasADi one
jax_fn = convert(casadi_fn, compile=True)
# Run compiled function
input_x = jnp.array(np.random.rand(2, 2))
input_y = jnp.array(np.random.rand(2, 2))
output = jax_fn(input_x, input_y)

Note: For now translation does not support functions with very large number of operations, due to the translation implementation. Secret component of translation is work-tree expansion, which might lead to large overhead in number of symbols. We are working on finding the compromise in both speed and extensive functions support.

Examples

JAXADI comes with several examples to help you get started:

  1. Basic Translation: Learn how to translate CasADi functions to JAX.

  2. Lowering Operations: Understand the lowering process in JaxADi.

  3. Function Conversion: See how to fully convert CasADi functions to JAX.

  4. Pendulum Rollout: Batched rollout of the nonlinear passive nonlinear pendulum

  5. Pinocchio Integration: Explore how to convert Pinocchio-based CasADi functions to JAX.

  6. MJX Comparison: Compare the transformed Pinnocchio forward kinematics with one provided by Mujoco MJX

Note: To run the Pinocchio and MJX examples, ensure you have them properly installed in your environment.

Performance Benchmarks

speedup

The process of benchmarking and evaluating the performance of Jaxadi is described in the benchmarks directory.

Contributing

We welcome contributions! Please see our Contributing Guide for more details.

Citation

If you use JaxADi in your research, please cite it as follows:

@misc{jaxadi2024,
  title = {JaxADi: Bridging CasADi and JAX for Efficient Numerical Computing},
  author = {Alentev, Igor and Kozlov, Lev and Nedelchev, Simeon},
  year = {2024},
  url = {https://github.com/based-robotics/jaxadi},
  note = {Accessed: [Insert Access Date]}
}

Acknowledgements

This project draws inspiration from cusadi, with a focus on simplicity and JAX integration.

Contact

For questions, issues, or suggestions, please open an issue on our GitHub repository.

We hope JAXADI empowers your numerical computing and optimization tasks! Happy coding!

Metadata

Release files for jaxadi 0.4.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Built distribution (wheel)

Table of built distributions (wheels) for jaxadi 0.4.0
File Interpreter ABI Platform
jaxadi-0.4.0-py3-none-any.whl Python 3 none any Details

Release files / jaxadi-0.4.0-py3-none-any.whl

Download URL jaxadi-0.4.0-py3-none-any.whl
Size 12.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1ca756d67f1b6bbe8e255eca87817d2cde67eaef6d59a132db637ff81bf0dd8a
BLAKE2b-256 checksum
How to use checksums
5d072fd9e0c3856f6d6cbe96ac4ad850bda94ba0bd68c0aa4eb8b40f15b03fc7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.12.8

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 Feb 8, 2025.

Transparency log

Release history Release notifications | RSS feed

This release

0.4.0 This release

1 release file

0.3.0

1 release file

0.2.0

1 release file

0.1.0

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page