Metadata-Version: 2.1
Name: DiffeRT
Version: 0.0.8
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Topic :: Scientific/Engineering
Classifier: Programming Language :: Rust
Classifier: Programming Language :: Python :: Implementation :: CPython
Classifier: Programming Language :: Python :: Implementation :: PyPy
Requires-Dist: jax >=0.4.20
Requires-Dist: jaxtyping >=0.2.24
Requires-Dist: numpy >=1.26.1
Requires-Dist: optax >=0.1.7
Requires-Dist: typing-extensions >=4.9.0 ; python_version < '3.10'
Requires-Dist: equinox >=0.11.2
Requires-Dist: differt[jupyter,matplotlib,plotly,vispy,vispy-backend] ; extra == 'all'
Requires-Dist: differt[all] ; extra == 'docs'
Requires-Dist: myst-nb >=0.17.2 ; extra == 'docs'
Requires-Dist: pillow >=10.1.0 ; extra == 'docs'
Requires-Dist: sphinx >=6, <7 ; extra == 'docs'
Requires-Dist: sphinx-autodoc-typehints >=1.23 ; extra == 'docs'
Requires-Dist: sphinx-book-theme >=1.0.1 ; extra == 'docs'
Requires-Dist: sphinx-copybutton >=0.5.2 ; extra == 'docs'
Requires-Dist: sphinx-design >=0.5.0 ; extra == 'docs'
Requires-Dist: sphinx-remove-toctrees >=0.0.3 ; extra == 'docs'
Requires-Dist: sphinxext-opengraph >=0.9.0 ; extra == 'docs'
Requires-Dist: sphinxcontrib-apidoc >=0.4.0 ; extra == 'docs'
Requires-Dist: sphinxcontrib-bibtex >=2.5.0 ; extra == 'docs'
Requires-Dist: notebook >=7 ; extra == 'jupyter'
Requires-Dist: jupyter-rfb >=0.4.2 ; extra == 'jupyter'
Requires-Dist: ipympl ; extra == 'jupyter'
Requires-Dist: matplotlib >=3.8.1 ; extra == 'maplotlib'
Requires-Dist: plotly >=5.18.0 ; extra == 'plotly'
Requires-Dist: vispy >=0.14.1 ; extra == 'vispy'
Requires-Dist: PyQt6 >=6.6.1 ; extra == 'vispy-backend'
Provides-Extra: all
Provides-Extra: docs
Provides-Extra: jupyter
Provides-Extra: maplotlib
Provides-Extra: plotly
Provides-Extra: vispy
Provides-Extra: vispy-backend
License-File: LICENSE.md
Summary: Differentiable Ray Tracing Toolbox for Radio Propagation Simulations
Keywords: ray tracing,differentiable,propagation,radio,jax
Author-email: Jérome Eertmans <jeertmans@icloud.com>
Requires-Python: >=3.9
Description-Content-Type: text/markdown; charset=UTF-8; variant=GFM
Project-URL: Changelog, https://github.com/jeertmans/DiffeRT/releases
Project-URL: Documentation, https://eertmans.be/DiffeRT
Project-URL: Founding, https://github.com/sponsors/jeertmans
Project-URL: Homepage, https://github.com/jeertmans/DiffeRT
Project-URL: Repository, https://github.com/jeertmans/DiffeRT

<div align="center">
<img src="https://raw.githubusercontent.com/jeertmans/DiffeRT/main/static/logo_250px.png" alt="DiffeRT logo"></img>
</div>

<div align="center">

# DiffeRT

[![Latest Release][pypi-version-badge]][pypi-version-url]
[![Python version][pypi-python-version-badge]][pypi-version-url]
[![Documentation][documentation-badge]][documentation-url]
[![Codecov][codecov-badge]][codecov-url]
[![PDM][pdm-badge]][pdm-url]

</div>

## Usage

> [!WARNING]
> Until this package reaches version `0.1.x`, breaking changes
> should be expected.
>
> If you have any suggestion regarding the development of this package,
> please open an [issue](https://github.com/jeertmans/DiffeRT/issues).

## Contributing

> [!IMPORTANT]
> The current documentation is very light and a more complete guide for
> new contributors will be written in the near future.
>
> Until then, do not hesitate to reach me for help with
> [GitHub issues](https://github.com/jeertmans/DiffeRT/issues)!

This project is built using both Python and Rust code, to provide an easy-to-use
but performant program. It also heavily uses the capabilities brought by
[JAX](https://github.com/google/jax) for numerical arrays.

### Requirements

To run build this package locally, you need:

- [Python 3.9](https://www.python.org/) or above;
- [Rust](https://www.rust-lang.org/) stable toolchain;
- [Maturin](https://www.maturin.rs/) for building Python bindings from Rust code;
- and [PDM](https://pdm-project.org) to manage all Python dependencies.

### Building locally

You can build the project locally using:

```bash
pdm install
```

### Documentation

To generate the documentation, you first need to install an IPython kernel named
`DiffeRT`:

```bash
pdm run ipython kernel install --user --name=DiffeRT
```

If you want to use another name for your kernel, please also modify the
name in [`docs/source/conf.py`](docs/source/conf.py):

```python
nb_kernel_rgx_aliases = {".*": "DiffeRT"}
```

Then, you can build the docs with:

```bash
cd docs
pdm run make html
```

Finally, you can open `build/html/index.html` to see the generated docs.

### Testing

Both Rust and Python codebases have their own tests and benchmarks.

#### Testing Rust code

You can very easily test you code using Cargo:

```bash
cargo test
```

or benchmark it:

```bash
cargo bench
```

#### Testing Python code

in the same way, you can very test you code with Pytest:

```bash
pdm run pytest
```

or benchmark it:

```bash
pdm run pytest --benchmark-only
```

[pypi-version-badge]: https://img.shields.io/pypi/v/DiffeRT?label=DiffeRT&color=blueviolet
[pypi-version-url]: https://pypi.org/project/DiffeRT/
[pypi-python-version-badge]: https://img.shields.io/pypi/pyversions/DiffeRT?color=orange
[documentation-badge]: https://readthedocs.org/projects/differt/badge/?version=latest
[documentation-url]: https://differt.readthedocs.io/latest/?badge=latest
[codecov-badge]: https://codecov.io/gh/jeertmans/DiffeRT/branch/main/graph/badge.svg?token=8P4DY9JCE4
[codecov-url]: https://codecov.io/gh/jeertmans/DiffeRT
[pdm-badge]: https://img.shields.io/badge/pdm-managed-blueviolet
[pdm-url]: https://pdm-project.org

