Skip to main content

Torch-based Python bindings for the minichem Fortran chemistry solver.

Project description

pyminichem

pyminichem is a standalone Python package and Torch-based C++ wrapper around the Fortran mini_chem code base. The repository follows the same broad layout used by pydisort, pyharp, and kintera:

  • src/: native C, C++, and wrapper code
  • python/: Python package, pybind11 bindings, and packaged resources
  • patches/: upstream minichem patch set
  • tests/: C++ and Python validation

The build flow is:

  1. Fetch upstream mini_chem with CMake.
  2. Apply the same mini_ch_i_dlsode.f90 patch used by canoe.
  3. Link the patched Fortran implementation into a thin C shim.
  4. Wrap that shim in a Torch-based C++ API.
  5. Expose the C++ API to Python with pybind11.

Build

CPU build

Use the default GNU toolchain for the CPU-only path:

cmake -S . -B build-cpu -DBUILD_TESTS=ON
cmake --build build-cpu -j
ctest --test-dir build-cpu -R '^test_minichem.release$' --output-on-failure

If you want the editable Python package to use the CPU build, copy the native library into the package locations and reinstall:

cp build-cpu/lib/libpyminichem_release.so build/lib/libpyminichem_release.so
cp build-cpu/lib/libpyminichem_release.so python/lib/libpyminichem_release.so
python -m pip install -e .

CUDA/OpenACC build with NVHPC

The working CUDA path in this repo uses the NVIDIA HPC SDK toolchain:

cmake -S . -B build-nvhpc \
  -DBUILD_TESTS=OFF \
  -DCUDA=ON \
  -DCMAKE_C_COMPILER=nvc \
  -DCMAKE_CXX_COMPILER=nvc++ \
  -DCMAKE_Fortran_COMPILER=nvfortran

cmake --build build-nvhpc -j

To make the editable Python package use the NVHPC/CUDA build:

cp build-nvhpc/lib/libpyminichem_release.so build/lib/libpyminichem_release.so
cp build-nvhpc/lib/libpyminichem_release.so python/lib/libpyminichem_release.so
python -m pip install -e .

Test

Python tests

After installing the editable package:

pytest tests

GPU smoke test

Run the live CUDA test from a directory outside the repo root, so Python imports the editable package instead of treating the top-level pyminichem/ repo directory as a namespace package:

cd /tmp
python - <<'PY'
import torch
import pyminichem

print('cuda_enabled', pyminichem.cuda_enabled())
print('torch_cuda_available', torch.cuda.is_available())
print('device_count', torch.cuda.device_count())

base_vmr = torch.tensor(
    [[0.0, 0.9975, 0.001074, 0.0, 0.0, 0.0, 0.0, 0.00059024, 0.0, 0.00014159, 0.0, 0.0]],
    dtype=torch.float64,
)

outputs = []
for dev in [0, 1]:
    device = f'cuda:{dev}'
    mc = pyminichem.MiniChem()
    mc.initialize()
    temp = torch.tensor([1500.0], dtype=torch.float64, device=device)
    pres = torch.tensor([1.0e5], dtype=torch.float64, device=device)
    vmr = base_vmr.to(device)
    out = mc.forward(temp, pres, vmr, 60.0)
    torch.cuda.synchronize(dev)
    out_cpu = out.detach().cpu()
    outputs.append(out_cpu)
    print('device', dev, 'out_device', out.device, 'shape', tuple(out.shape))
    print('finite', bool(torch.isfinite(out).all().item()), 'sum', float(out_cpu.sum().item()))

if len(outputs) == 2:
    diff = (outputs[0] - outputs[1]).abs().max().item()
    print('max_abs_diff_between_gpu0_gpu1', diff)
PY

Expected behavior for the current working NVHPC build:

  • cuda_enabled True
  • torch_cuda_available True
  • device_count 2 on this machine
  • finite output tensors on both cuda:0 and cuda:1
  • max_abs_diff_between_gpu0_gpu1 0.0 for the smoke test above

NVIDIA HPC SDK

For the CUDA/OpenACC build, install the NVIDIA HPC SDK from NVIDIA's official Linux x86_64 packages:

  1. Download the SDK tarball from the NVIDIA HPC SDK download page.
  2. Extract the archive.
  3. Run the installer.
  4. Add the compiler bin directory to PATH.

Official references:

  • OpenACC getting started guide: https://docs.nvidia.com/hpc-sdk/archive/25.3/compilers/openacc-gs/index.html
  • NVIDIA HPC SDK download page: https://developer.nvidia.com/hpc-sdk

Typical installation flow:

wget <official-nvhpc-tarball-url>
tar -xpf nvhpc_<version>_Linux_x86_64_cuda_multi.tar.gz
cd nvhpc_<version>_Linux_x86_64_cuda_multi
sudo ./install

The default install location is typically:

/opt/nvidia/hpc_sdk/Linux_x86_64/<version>/compilers/bin

Add the compilers to your shell environment:

export NVHPC=/opt/nvidia/hpc_sdk
export PATH=$NVHPC/Linux_x86_64/<version>/compilers/bin:$PATH

Verify the installation with:

nvfortran --version
nvc++ --version
nvaccelinfo

Notes:

  • Replace <version> with the installed SDK version, for example 25.3.
  • nvaccelinfo is NVIDIA's recommended check that the driver and GPU-facing toolchain are visible.
  • The default /opt installation path usually requires sudo.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

pyminichem-0.1.0-cp313-cp313-manylinux_2_27_x86_64.whl (10.5 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64

pyminichem-0.1.0-cp313-cp313-macosx_15_0_arm64.whl (5.9 MB view details)

Uploaded CPython 3.13macOS 15.0+ ARM64

pyminichem-0.1.0-cp312-cp312-manylinux_2_27_x86_64.whl (10.5 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64

pyminichem-0.1.0-cp312-cp312-macosx_15_0_arm64.whl (5.9 MB view details)

Uploaded CPython 3.12macOS 15.0+ ARM64

pyminichem-0.1.0-cp311-cp311-manylinux_2_27_x86_64.whl (10.5 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64

pyminichem-0.1.0-cp311-cp311-macosx_15_0_arm64.whl (5.9 MB view details)

Uploaded CPython 3.11macOS 15.0+ ARM64

pyminichem-0.1.0-cp310-cp310-manylinux_2_27_x86_64.whl (10.5 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.27+ x86-64

pyminichem-0.1.0-cp310-cp310-macosx_15_0_arm64.whl (5.9 MB view details)

Uploaded CPython 3.10macOS 15.0+ ARM64

File details

Details for the file pyminichem-0.1.0-cp313-cp313-manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for pyminichem-0.1.0-cp313-cp313-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 d8fc2f2c36b8b591ee222468e586fdefae6237d8aa41d23b44a589a229e4763f
MD5 910e6d32389499c2ce6deb31ee9351b1
BLAKE2b-256 95d6c04c488168f09f2e10b09ca307434f594074e1bae0da4685d1d24f10f317

See more details on using hashes here.

File details

Details for the file pyminichem-0.1.0-cp313-cp313-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for pyminichem-0.1.0-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 9496996e994246205a997e9e571e6959584644b939e21b16d6b9bc36837d18c0
MD5 46a7f3157f79bb0e0b32b5428e2d0fbb
BLAKE2b-256 901f43afee424d32e4e7d46d776647d0ed1be955a788630163c45d23aba22022

See more details on using hashes here.

File details

Details for the file pyminichem-0.1.0-cp312-cp312-manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for pyminichem-0.1.0-cp312-cp312-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 ad1185b6e5cf23ffa3bbc2bbd669c3d4226e89895df6f41d0b11e7fe1b498cda
MD5 b6a77f134828ebf3a19ce78737f1d933
BLAKE2b-256 007625bb0c4fcd6a74eabcdee08c11f939b583d860fe2dec650cc2e346e9eedd

See more details on using hashes here.

File details

Details for the file pyminichem-0.1.0-cp312-cp312-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for pyminichem-0.1.0-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 0e21f618ee3a07537d4844d3770d7444f59e5da231e5a01db12faed8f94ef467
MD5 f136adeea391bdaffdb2c78d3e961e99
BLAKE2b-256 e5b14c2a811f6b6168479367fd7f381235e3dfe5737b1b92de0926eec090c4ce

See more details on using hashes here.

File details

Details for the file pyminichem-0.1.0-cp311-cp311-manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for pyminichem-0.1.0-cp311-cp311-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 c625f393860bd92590e9dc1dcd5ae004503f606777471083d7421253a1ea69a7
MD5 6eb9dbbecbe4aa45cfc0961ac9669d47
BLAKE2b-256 85edd3cb06ffe2d309f35aed5fc78123404feaec8f94f6a6cec9fbe277c4e258

See more details on using hashes here.

File details

Details for the file pyminichem-0.1.0-cp311-cp311-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for pyminichem-0.1.0-cp311-cp311-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 6206cfbae0ff5d9c10254f9329e472f491cd213671309ed177dc0dc10e0a5f22
MD5 02d83821533490810a84bd69366c2f94
BLAKE2b-256 6edce804655aaf84295f9b6b34bf7abd414e3bea647011e56fb025b54bac57d3

See more details on using hashes here.

File details

Details for the file pyminichem-0.1.0-cp310-cp310-manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for pyminichem-0.1.0-cp310-cp310-manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 50601a02872eea8cdfaae7d72de3c5353870db894072c6086ad0f715e3471a6c
MD5 02e56ee6e18936c0725564d03e8333e9
BLAKE2b-256 1926bf6f767e8b58a01f90582385368d03851b183cfc0a566be63ae090876d08

See more details on using hashes here.

File details

Details for the file pyminichem-0.1.0-cp310-cp310-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for pyminichem-0.1.0-cp310-cp310-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 db543ed9d8c00326c2f722ce9e48e9e785a40a7261c911af83b11ffb5006affa
MD5 ef2299bb8811b4305c1c01f7ed053485
BLAKE2b-256 3046bdd330d388c25cc2a909bfc47d9ec5ed63f2e284cb42d9c608e2910d958b

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page