_images/SHIFT_logo_large_white.jpg _images/SHIFT_logo_large_black.jpg

Python Tests Python Version Support Version PyPI version Documentation Status GitHub repository github: stars github: forks License: MIT Code style: black zenodo: DOI

Scalable Helper Interface for Fourier Transforms

Introduction

SHIFT is a scalable interface library for computing FFTs in scipy. The library wraps scipy FFT routines and makes it easy to keep track of corresponding Fourier modes in Fourier space. The package can be scaled using MPI (using the mpi4py library), using a slab decomposition to perform distributed FFTs.

Note

SHIFT was originally designed to be a Spherical/Polar Fourier Transform library. However, the package has developed into being predominanty a helper and MPI interface for FFTs in 1D/2D/3D cartesian grids. The development of the Polar and Spherical Bessel transforms is still ongoing but is no longer the focus – functions in shift.polar and shift.sphere should be used with extreme caution and are only available from the sphere branch of the code.

Contents

Dependencies

Installation

SHIFT can be installed via pip:

pip install shift-fft

Or by cloning the github repository:

git clone https://github.com/knaidoo29/SHIFT.git
cd SHIFT
pip install .

The latter of which can be used to install specific branches.

Once this is done you should be able to call SHIFT from python:

import shift

To use the MPI functionality please take a look at the documentation which instructs users how to use the SHIFT MPI object and how to run these distributed jobs successfully without errors or MPI related hanging.

Citation

If you use SHIFT in your work, please cite:

https://zenodo.org/badge/DOI/10.5281/zenodo.17093446.svg
@software{naidoo_shift_2025,
  author       = {Naidoo, Krishna},
  title        = {SHIFT: a scalable MPI library for computing fast Fourier transforms in python},
  year         = 2025,
  publisher    = {Zenodo},
  doi          = {10.5281/zenodo.17093446},
  url          = {https://doi.org/10.5281/zenodo.17093446}
}

Support

If you have any issues with the code or want to suggest ways to improve it please open a new issue (here) or (if you don’t have a github account) email krishna.naidoo.11@ucl.ac.uk.