
==========================
Archimedes
==========================

**Archimedes** is an open-source Python framework designed to simplify complex modeling
and simulation tasks, with the ultimate goal of making it possible to do practical
hardware engineering with Python. It builds on the powerful symbolic computation
capabilities of `CasADi <https://web.casadi.org/docs/>`_ with an interface designed to
be familiar to NumPy users.

Key features:

* NumPy-compatible array API with automatic dispatch
* Efficient execution of computational graphs in compiled C++
* Automatic differentiation with forward- and reverse-mode sparse autodiff
* Interface to "plugin" solvers for ODE/DAEs, root-finding, and nonlinear programming
* Automated C code generation for embedded applications
* JAX-style function transformations
* PyTorch-style hierarchical data structures for parameters and dynamics modeling


Quick Example
-------------

.. code-block:: python

   import numpy as np
   import archimedes as arc

   def f(x):
       return np.sin(x**2)

   # Use automatic differentiation to compute df/dx
   df = arc.grad(f)
   np.allclose(df(1.0), 2.0 * np.cos(1.0))  # True

   # Automatically generate C code
   template_args = (0.0,)  # Data type for C function
   arc.codegen(df, "grad_f.c", template_args)

Documentation
-------------

.. toctree::
   :maxdepth: 1
   :caption: Getting Started

   quickstart
   about
   getting-started

.. toctree::
   :maxdepth: 1
   :caption: Core Concepts

   under-the-hood
   pytrees
   generated/notebooks/control-flow
   generated/notebooks/modular-design

.. toctree::
   :maxdepth: 1
   :caption: Applications

   notebooks/deployment/deployment00
   generated/notebooks/sysid/parameter-estimation
   notebooks/multirotor/multirotor00

.. toctree::
   :maxdepth: 1
   :caption: Reference

   gotchas
   reference/index

.. toctree::
   :maxdepth: 1
   :caption: Development

   roadmap
   community
   licensing-model


Indices and Tables
-------------------

* :ref:`genindex`
* :ref:`modindex`
* :ref:`search`