tensorflow-nufft 0.12.0
A fast, native non-uniform FFT op for TensorFlow.
License: Apache 2.0
Keywords: tensorflow,nufft,ml

# TensorFlow NUFFT

[![PyPI](https://badge.fury.io/py/tensorflow-nufft.svg)](https://badge.fury.io/py/tensorflow-nufft)
[![Build](https://github.com/mrphys/tensorflow-nufft/actions/workflows/build-package.yml/badge.svg)](https://github.com/mrphys/tensorflow-nufft/actions/workflows/build-package.yml)
[![Docs](https://img.shields.io/badge/api-reference-blue.svg)](https://mrphys.github.io/tensorflow-nufft)
[![DOI](https://zenodo.org/badge/382718757.svg)](https://zenodo.org/badge/latestdoi/382718757)

<!-- start-intro -->

TensorFlow NUFFT is a fast, native non-uniform fast Fourier transform op for
TensorFlow. It provides:

- Fast CPU/GPU kernels. The TensorFlow framework automatically handles device
  placement as usual.
- A simple, well-documented Python interface.
- Gradient definitions for automatic differentiation.
- Shape functions to support static shape inference.

The underlying algorithm is based on the NUFFT implementation by the Flatiron
Institute. Please refer to
[FINUFFT](https://github.com/flatironinstitute/finufft/) and
[cuFINUFFT](https://github.com/flatironinstitute/cufinufft/) for more details.

<!-- end-intro -->

<!-- start-install -->

## Installation

You can install TensorFlow NUFFT with ``pip``:

```
pip install tensorflow-nufft
```

Note that only Linux wheels are currently being provided.

### TensorFlow compatibility

Each TensorFlow NUFFT release is compiled against a specific version of
TensorFlow. To ensure compatibility, it is recommended to install matching
versions of TensorFlow and TensorFlow NUFFT according to the table below.

| TensorFlow NUFFT Version | TensorFlow Compatibility | Release Date |
| ------------------------ | ------------------------ | ------------ |
| v0.12.0                  | v2.11.x                  | Nov 27, 2022 |
| v0.11.0                  | v2.10.x                  | Oct 12, 2022 |
| v0.10.1                  | v2.10.x                  | Sep 26, 2022 |
| v0.10.0                  | v2.10.x                  | Sep 7, 2022  |
| v0.9.0                   | v2.9.x                   | Sep 5, 2022  |
| v0.8.1                   | v2.9.x                   | Jun 23, 2022 |
| v0.8.0                   | v2.9.x                   | May 20, 2022 |
| v0.7.3                   | v2.8.x                   | May 4, 2022  |
| v0.7.2                   | v2.8.x                   | Apr 29, 2022 |
| v0.7.1                   | v2.8.x                   | Apr 6, 2022  |
| v0.7.0                   | v2.8.x                   | Feb 8, 2022  |
| v0.6.0                   | v2.7.x                   | Jan 27, 2022 |
| v0.5.0                   | v2.7.x                   | Dec 12, 2021 |
| v0.4.0                   | v2.7.x                   | Nov 8, 2021  |
| v0.3.2                   | v2.6.x                   | Aug 18, 2021 |
| v0.3.1                   | v2.6.x                   | Aug 18, 2021 |
| v0.3.0                   | v2.6.x                   | Aug 13, 2021 |

<!-- end-install -->

<!-- start-usage -->

## Usage

Once installed, you can perform NUFFTs in your TensorFlow code simply as:

```python
import tensorflow_nufft as tfft

outputs = tfft.nufft(inputs, points)
```

See the documentation for the
[`tfft.nufft`](https://mrphys.github.io/tensorflow-nufft/api_docs/tfft/nufft)
function to learn more about the different parameters.

<!-- end-usage -->

## Documentation

Visit the [docs](https://mrphys.github.io/tensorflow-nufft/) for the API
reference and examples of usage.

## Issues

If you use this package and something does not work as you expected, please
[file an issue](https://github.com/mrphys/tensorflow-nufft/issues/new)
describing your problem. We're here to help!

## Credits

If you find this software useful in your research, please
[cite us](https://doi.org/10.5281/zenodo.5198288).

## Contributors

See CONTRIBUTORS for a list of people who have contributed to this project.
Thank you!

All contributions are welcome. If there is an issue you would like to address
or a feature you would like to add, you might want to begin by commenting on
the corresponding issue (or if it doesn't exist yet, by creating a new issue).