Metadata-Version: 2.4
Name: diffaaable
Version: 1.2.1
Summary: JAX-differentiable AAA algorithm
Keywords: python
Author-email: Jan David Fischbach <fischbach@kit.edu>
Requires-Python: >=3.9
Description-Content-Type: text/markdown
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Operating System :: OS Independent
License-File: LICENSE
Requires-Dist: numpy>2
Requires-Dist: jax
Requires-Dist: jaxlib
Requires-Dist: baryrat
Requires-Dist: jaxopt
Requires-Dist: pandas>=2.2.3
Requires-Dist: tbump>=6.11.0 ; extra == "dev"
Requires-Dist: towncrier ; extra == "dev"
Requires-Dist: pre-commit ; extra == "dev"
Requires-Dist: pytest ; extra == "dev"
Requires-Dist: pytest-cov ; extra == "dev"
Requires-Dist: pytest_regressions ; extra == "dev"
Requires-Dist: pytest-benchmark ; extra == "dev"
Requires-Dist: matplotlib ; extra == "dev"
Requires-Dist: jupytext ; extra == "docs"
Requires-Dist: matplotlib ; extra == "docs"
Requires-Dist: jupyter-book<2 ; extra == "docs"
Requires-Dist: sphinx_math_dollar ; extra == "docs"
Provides-Extra: dev
Provides-Extra: docs

# diffaaable 1.2.1

![](docs/assets/diffaaable.png)

`diffaaable` is a JAX differentiable version of the AAA algorithm. The derivatives are implemented as custom Jacobian Vector products in accordance to [^1].
A detailed derivation of the used matrix expressions is provided in the appendix of [^2].
Under the hood `diffaaable` uses the AAA implementation of [`baryrat`](https://github.com/c-f-h/baryrat).
Additionaly the following application specific extensions to the AAA algorithm are included:

- **Adaptive**: Adaptive refinement strategy (called *Iterative Sample Refinement* (ISR) in the corresponding paper) to minimize the number of function evaluation needed to precisely locate poles within some domain
- **Vectorial**: AAA algorithm acting on vector valued functions $\mathbf{f}(z)$ as presented in [^3].
- **Tensor**: Convenience alternative to the vector valued AAA algorithm (`vectorial`) accepting a tensor valued function F_k (so arbitrary dimensionality) instead of the single dimension that `vectorial` requires.
- **Lorentz**: Variant that enforces symmetric poles around the imaginary axis.
- **Selective Refinement**: Use a divide and conquer theme to capture many pole simultaneously and accurately, by limiting the number of poles per AAA solve. Suggested in [^4].

## Installation
to install `diffaaable` run
`pip install diffaaable`

## Usage
Please refer to the [quickstart tutorial](./usage.md)

## Contributing
Feel free to open issues and/or PRs.

## Citation
When using this software package for scientific work please cite the associated publication [^2].

+++

[^1]: https://arxiv.org/pdf/2403.19404
[^2]: "A framework to compute resonances arising from multiple scattering", https://doi.org/10.1002/adts.202400989
[^3]: https://doi.org/10.1093/imanum/draa098
[^4]: https://doi.org/10.48550/arXiv.2405.19582

