Installation & Setup#
AimsPy is a pure-Python package, but it loads a patched libaims.so at runtime. This page covers installing the Python package, patching an FHI-aims source tree, building the patched library, and configuring the environment variables used by tests and examples.
Install UV#
To begin, configure your environment with uv, a fast and versatile Python package manager written in Rust. Please follow the installation instructions on the official uv website.
On Linux or macOS, you can install uv with a single command (requires an internet connection):
curl -LsSf https://astral.sh/uv/install.sh | sh
It is highly recommended that configuring high-performance mirrors based on your IP location. For example, for users in China, you could use the mirror provided by TUNA:
# Add the following lines into ~/.config/uv/uv.toml
[[index]]
url = "https://mirrors.tuna.tsinghua.edu.cn/pypi/web/simple/"
default = true
Create the AimsPy Python virtual environment#
Create a python 3.13 environment with uv:
mkdir ~/.uvenv
cd ~/.uvenv
uv venv aimspy --python=3.13 # Create the `aimspy` venv in the current dir
The uv virtual environment can then be activated with:
source ~/.uvenv/aimspy/bin/activate
All packages installed into the aimspy venv will be located under ~/.uvenv/aimspy/.
AimsPy requires Python 3.12–3.14, numpy>=1.24, h5py>=3.0, mpi4py>=3.0, and click>=8.0.
Prerequisites: Intel OneAPI Environment#
AimsPy requires a patched libaims.so built with an MPI-enabled Fortran compiler and a BLAS/LAPACK math library. The tested configuration uses Intel OneAPI.
Install Intel OneAPI Toolchain#
Download from the Intel OneAPI Toolkit page.
Required components:
Intel Fortran compiler (
ifx/mpiifx)Intel C/C++ compiler (
icx/icpx)Intel MKL (includes BLAS, LAPACK, ScaLAPACK, BLACS)
Intel MPI (
mpiifxis the MPI Fortran wrapper)
After installation, set up the environment:
source /opt/intel/oneapi/setvars.sh
Warning
mpi4py(used by AimsPy) andlibaims.somust use the same MPI backend. Sourcing the Intel OneAPI environment before installing AimsPy and before buildinglibaims.soensuresmpi4pycompiles against the same MPI library thatlibaims.solinks against.Other MPI distributions and math libraries (e.g. OpenMPI + OpenBLAS) can also be used, as long as they support building FHI-aims and
mpi4pywith a consistent MPI backend.
Quick Install (for Common Users)#
Ensure you’ve activated the uv environment as described above, then install AimsPy from PyPI:
uv pip install aimspy
For the development version:
pip install git+https://github.com/kYangLi/aimspy
Note: During installation, an internet connection is required. AimsPy and DeepH-pack can be installed under the same Python venv.
Patching FHI-aims#
AimsPy exchanges matrices with FHI-aims through a callback framework exposed by a small Fortran patch. The patch adds a new src/aimspy_api/ directory to FHI-aims and inserts trigger points inside src/initialize_scf.f90, plus the warmstart short-circuit that calls advance_KS_solution directly on an injected Hamiltonian.
Apply the latest bundled patch to a clean FHI-aims checkout:
cd /path/to/FHI-aims # clean checkout
aimspy patch # applies the latest bundled diff
Common variants:
aimspy patch -v v0.1.0 /path/to/FHI-aims # specific version
aimspy patch --check /path/to/FHI-aims # dry-run
aimspy patch --uninstall /path/to/FHI-aims # reverse the detected patch
aimspy patch --list # show bundled versions
Prerequisites: a clean FHI-aims checkout on the patch’s base branch. The tree must be unpatched; applying on top of an unrelated branch may fail. By default git apply is used on git repos, falling back to patch -p1 otherwise (--no-git forces patch(1)).
Note: The current patch supports FHI-aims versions 250822 and 250822_1 only. Other versions are not compatible. Patches for additional FHI-aims versions will be released in the future.
Full CLI reference:
aimspy patch [SOURCE] [OPTIONS]
Arguments:
SOURCE FHI-aims source directory (default: current dir)
Options:
-v, --patch-version TEXT Patch version to apply (default: latest)
-l, --list List bundled patches and exit
--check, --dry-run Dry-run only; do not modify the tree
--uninstall Reverse the currently-detected patch
--no-git Force patch(1) instead of git apply
-y, --yes Skip confirmation prompts
Building the patched libaims.so#
After patching, build FHI-aims as a shared library (Intel OneAPI for MPI + MKL is the tested configuration):
# Ensure the OneAPI environment is sourced (see Prerequisites above)
ulimit -s unlimited
mkdir build && cd build
# Prepare the Cmake file
cmake -DUSE_MPI=ON -DUSE_LIBXS=OFF -DBUILD_SHARED_LIBS=ON -C initial_cache.cmake ..
make -j 8
Note: shared library is required
AimsPy loads
libaims.soviactypesat runtime, so you must pass-DBUILD_SHARED_LIBS=ONto CMake. Without it, FHI-aims builds a static archive (libaims.aorlibaims.x) which AimsPy cannot load.
The resulting libaims.so is what AimsPy loads. FHI-aims itself is not distributed with AimsPy and remains under its own licence agreement with the aims team, users must obtain the FHI-aims source code independently.
Install from Source (for Developers)#
git clone https://github.com/kYangLi/aimspy.git
# or, after forking:
# git clone https://github.com/<YourAccount>/aimspy.git
cd aimspy
uv pip install -e ".[dev]"
The [dev] extra pulls in pytest, ruff, and black. The [docs] extra (needed to build this documentation locally) pulls in Sphinx and the documentation theme:
uv pip install -e ".[docs]"
Environment Variables#
Integration tests and examples require AIMSPY_TEST_AIMS_LIBPATH to point at your patched libaims.so:
export AIMSPY_TEST_AIMS_LIBPATH=/path/to/FHI-aims-deeph/build/libaims.so
Optional:
AIMSPY_TEST_NPROC: MPI process count for integration tests and examples (default:8).
For example, to run the H₂O baseline SCF example:
export AIMSPY_TEST_AIMS_LIBPATH=/path/to/libaims.so
export AIMSPY_TEST_NPROC=8
make run-from-scratch
Next Steps#
Once AimsPy is installed and libaims.so is patched and built, head to Basic Usage for end-to-end examples covering baseline SCF, DeepH-format export, DeepH warmstart, and error recovery.