# Installation

Mpi4py-fft has a few dependencies

> - mpi4py

> - FFTW (serial)

> - numpy

> - cython (build dependency)

> - h5py (runtime dependency, optional)

> - netCDF4 (runtime dependency, optional)

that are mostly straight-forward to install, or already installed in most Python environments. The first two are usually most troublesome. Basically, for mpi4py you need to have a working MPI installation, whereas FFTW is available on most high performance computer systems. If you are using conda, then all you need to install a fully functional mpi4py-fft, with all the above dependencies, is

    conda install -c conda-forge mpi4py-fft h5py=*=mpi*

You probably want to install into a fresh environment, though, which can be achieved with

    conda create --name mpi4py-fft -c conda-forge mpi4py-fft
    conda activate mpi4py-fft

Note that this gives you mpi4py-fft with default settings. This means that you will probably get the openmpi backend. To make a specific choice of backend just specify which, like this

    conda create --name mpi4py-fft -c conda-forge mpi4py-fft mpich

If you do not use conda, then you need to make sure that MPI and FFTW are installed by some other means. You can then install any version of mpi4py-fft hosted on pypi using pip

    pip install mpi4py-fft

whereas the following will install the latest version from github

    pip install git+https://github.com/mpi4py/mpi4py-fft@master

You can also build mpi4py-fft yourselves from the top directory, after cloning or forking

    pip install .

or using conda-build with the recipes in folder `conf/`

    conda build -c conda-forge conf/
    conda create --name mpi4py-fft -c conda-forge mpi4py-fft --use-local
    conda activate mpi4py-fft

## Additional dependencies

For storing and retrieving data you need either HDF5 or netCDF4, compiled with support for MPI. Both are available with parallel support on conda-forge and can be installed into the current conda environment as

    conda install -c conda-forge h5py=*=mpi* netcdf4=*=mpi*

Note that parallel HDF5 and NetCDF4 often are available as optimized modules on supercomputers. Otherwise, see the respective packages for how to install with support for MPI.

## Test installation

After installing (from source) it may be a good idea to run all the tests located in the `tests` folder. A range of tests may be run using the `runtests.sh` script

    conda install scipy, coverage
    cd tests/
    ./runtests.sh

This test-suit is run automatically on every commit to github, see, e.g.,