Getting started
Requirements
booz_xform
requires a C++ compiler and python3. The python
interface uses arrays from the numpy
package, and building
booz_xform
requires the pybind11 package. These packages are
installed automatically by the pip install
step described in the
next section.
booz_xform
also requires the NetCDF library. The C++ or fortran
interfaces to NetCDF are not required, only the standard C interface.
OpenMP is an optional dependency. If found, OpenMP is used to parallelize the calculation over magnetic surfaces. MPI is not used.
There are some additional python packages that are optional dependencies.
The Plotting routines require the matplotlib package. The python unit tests require
matplotlib
as well as scipy
. These packages are not needed for
carrying out the coordinate transformation, so they are not
automatically installed by pip
, and you should install them
separately if you want to use these features.
Installation
Before attempting to install booz_xform
, make sure NetCDF
is available on your system. On some HPC systems, this may require
loading the relevant module.
There are several ways you can install booz_xform
, depending on
whether you are a user or developer.
1. Installation from PyPI
If you do not plan to edit the source code, the recommended way to
install booz_xform
is to install the latest release from PyPI using pip
:
pip install -v booz_xform
This command will download and compile the code. At the start of the
compilation step, the cmake
build system will search for the
NetCDF and MPI header files and libraries. Any of the environment
variables NETCDF_DIR
, NETCDF_HOME
, or NETCDFDIR
can be set
to guide cmake
in this search, and it will also look in standard
locations such as /opt/local/include
.
The -v
flag above (for verbose output) is optional, but it is
useful since it allows you to see which compiler, NetCDF, and MPI
libraries were used. This information can be found in the lines
similar to the following in the output:
...
-- The CXX compiler identification is AppleClang 11.0.0.11000033
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Check for working CXX compiler: /Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/c++ - skipped
-- Detecting CXX compile features
-- Detecting CXX compile features - done
CMAKE_MODULE_PATH=
CMAKE_CURRENT_SOURCE_DIR=/private/var/folders/_2/t14gsms50v1dmfz95bz32hk00000gn/T/pip-req-build-0fgxd2du
Hello world from FindNetCDF
-- Found NetCDF: /opt/local/lib/libnetcdf.dylib
NETCDF_INCLUDES=/opt/local/include
NETCDF_LIBRARIES=/opt/local/lib/libnetcdf.dylib
...
To change the compiler that is used to build the code, you can insert
CXX=
followed by the compiler name before pip
. For example, to
use the Intel compiler icpc
, use
CXX=icpc pip install -v booz_xform
If the installation is successful, booz_xform
will be added to
your python environment. You should now be able to import the module
from python:
>>> import booz_xform
On some systems, you may not have permission to install packages to
the default location. In this case, add the --user
flag to pip
so the package can be installed for your user only:
pip install -v --user booz_xform
2. Installation from a local copy of the repository
If you prefer to see or edit the source code, you can first clone the repository using
git clone https://github.com/hiddenSymmetries/booz_xform.git
Then install the package to your local python environment with
cd booz_xform
pip install -v -e .
The -e
flag is not mandatory but it can be helpful during
development. This flag makes the installation editable, in that edits
to the pure python source in src/booz_xform
are immediately
reflected in the package you import into python. Without this flag,
you would need to re-install the package for changes to become active.
The pip install
line can be preceded by CXX=
to select a
specific compiler, as in the PyPI method above.
Again, if you encounter a permissions error trying to install packages
to the default location, add the --user
flag:
pip install -v -e --user .
3. Installation without pip from a local copy of the repository
This option is similar to option 2, and is well suited for code
development. This option gives a somewhat faster installation than
option 2, but you must first manually ensure all the dependencies in
pyproject.toml
are installed.
From a cloned copy of the repository, run
python setup.py develop
This command can be preceded by CXX=
to select a
specific compiler, as in the other methods above.
4. Building outside of the python package system
If you are actively developing the code, you may wish to compile the C++ source without going through the python package system. In this case, you should have a local copy of the repository, obtained with
git clone https://github.com/hiddenSymmetries/booz_xform.git
You must also have the pybind11
python package installed, as well
as cmake
. The code then can be built using the usual approach for
a cmake
project:
cd booz_xform/build
cmake ..
make -j
In this case, the python extension library _booz_xform
(with a
filename usually ending in .so
), the standalone executable
xbooz_xform
, and the library libbooz_xform.a
will all be
created in the build
directory. Note that in this approach, no
python package is installed. You can import only the Booz_xform
class with import _booz_xform
, which loads the compiled extension
without importing the pure python functions.