Skip to main content

Fast calculation of spherical harmonics

Project description

sphericart

Test

This is sphericart, a multi-language library for the efficient calculation of real spherical harmonics and their derivatives in Cartesian coordinates.

For instructions and examples on the usage of the library, please refer to our documentation.

A plot of the +-1 isosurfaces of the Y^0\_3 solid harmonic, including also gradients.

If you are using sphericart for your academic work, you can cite it as

@article{sphericart,
    title={Fast evaluation of spherical harmonics with sphericart},
    author={Bigi, Filippo and Fraux, Guillaume and Browning, Nicholas J. and Ceriotti, Michele},
    journal={J. Chem. Phys.},
    year={2023},
    number={159},
    pages={064802},
}

This library is dual-licensed under the Apache License 2.0 and the MIT license. You can use to use it under either of the two licenses.

Installation

Python

Pre-built (https://pypi.org/project/sphericart/).

pip install sphericart             # numpy interface, CPU only
pip install sphericart[torch]      # Torch (and TorchScript) interface, CPU and GPU
pip install sphericart[jax]        # JAX interface, CPU and GPU

Note that the pre-built packages are compiled for a generic CPU, and might be less performant than they could be on a specific processor. To generate libraries that are optimized for the target system, you can build from source:

git clone https://github.com/lab-cosmo/sphericart
pip install .

# if you also want the torch bindings (CPU and GPU)
pip install .[torch]

# torch bindings, CPU-only version
pip install --extra-index-url https://download.pytorch.org/whl/cpu .[torch]

If you want to enable the CUDA version of the code when builing from source, you'll need to set the CUDA_HOME environement variable. You can build a CUDA enabled sphericart, but the calculations though numpy will only run on CPU.

Julia

A native Julia implementation of sphericart is provided, called SpheriCart. Install the package by opening a REPL, switch to the package manager by typing ] and then add SpheriCart. See julia/README.md for usage. SpheriCart.jl is compatible with ChainRules.jl and Lux.jl and provides GPU kernels via KernelAbstractions.jl.

C and C++

From source

git clone https://github.com/lab-cosmo/sphericart
cd sphericart

mkdir build && cd build

cmake .. <cmake configuration options>
cmake --build . --target install

The following cmake configuration options are available:

  • -DSPHERICART_BUILD_TORCH=ON/OFF: build the torch bindings in addition to the main library
  • -DSPHERICART_BUILD_TESTS=ON/OFF: build C++ unit tests
  • -DSPHERICART_BUILD_EXAMPLES=ON/OFF: build C++ examples and benchmarks
  • -DSPHERICART_OPENMP=ON/OFF: enable OpenMP parallelism
  • -DCMAKE_INSTALL_PREFIX=<where/you/want/to/install> set the root path for installation

GPU Support

The support for GPU offload could be controled with the following CMake variables at configuration:

  • -DSPHERICART_ENABLE_CUDA=ON/OFF: build with CUDA support also set CUDA_HOME environement variable.
  • -DSPHERICART_ENABLE_SYCL=ON/OFF: build with SYCL support, configure tool will search for sycl/sycl.h header.
  • -DSPHERICART_SYCL_DEVICE=all/cpu/gpu: target architecute for SYCL support, check which devices are available with sycl-ls, for all (default) is possible to control at execution with export ONEAPI_DEVICE_SELECTOR=opencl:gpu or export ONEAPI_DEVICE_SELECTOR=opencl:cpu.

The following flags have been tested with Intel OneAPI 2025.3 for enabling SYCL support:

  • -DCMAKE_CXX_COMPILER=icpx
  • -DCMAKE_C_COMPILER=icx
  • -DCMAKE_CXX_FLAGS=" -qopenmp --intel -fsycl -fsycl-targets=spir64 -Wno-deprecated-declarations -Wno-macro-redefined -Wno-unused-parameter -w"

Note: Only tested in C++, python/JAX/Torch support is in progress.

Running tests and documentation

Tests and the local build of the documentation can be run with tox. The default tests, which are also run on the CI, can be executed by simply running

tox

in the main folder of the repository.

To run tests in a CPU-only environment you can set the environment variable PIP_EXTRA_INDEX_URL before calling tox, e.g.

PIP_EXTRA_INDEX_URL=https://download.pytorch.org/whl/cpu tox -e docs

will build the documentation in a CPU-only environment.

Other flavors of spherical harmonics

Although sphericart natively calculates real solid and spherical harmonics from Cartesian positions, it is easy to manipulate its output it to calculate complex spherical harmonics and/or to accept spherical coordinates as inputs. You can see examples here.

Maintainers

This project is maintained by @frostedoyster and @Luthaf. The maintainers will reply to issues and pull requests opened on this repository as soon as possible. You can mention them directly if you have not received an answer after a couple of days.

Project details


Download files

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

Source Distribution

sphericart-2.0.2.tar.gz (67.6 kB view details)

Uploaded Source

Built Distributions

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

sphericart-2.0.2-py3-none-win_amd64.whl (233.7 kB view details)

Uploaded Python 3Windows x86-64

sphericart-2.0.2-py3-none-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl (428.9 kB view details)

Uploaded Python 3manylinux: glibc 2.24+ x86-64manylinux: glibc 2.28+ x86-64

sphericart-2.0.2-py3-none-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl (412.4 kB view details)

Uploaded Python 3manylinux: glibc 2.24+ ARM64manylinux: glibc 2.28+ ARM64

sphericart-2.0.2-py3-none-macosx_11_0_x86_64.whl (283.3 kB view details)

Uploaded Python 3macOS 11.0+ x86-64

sphericart-2.0.2-py3-none-macosx_11_0_arm64.whl (158.0 kB view details)

Uploaded Python 3macOS 11.0+ ARM64

File details

Details for the file sphericart-2.0.2.tar.gz.

File metadata

  • Download URL: sphericart-2.0.2.tar.gz
  • Upload date:
  • Size: 67.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for sphericart-2.0.2.tar.gz
Algorithm Hash digest
SHA256 4a207232aca4dbca323cf604326ef4c55a3fc15932a13ba4d11c34c217bf37f4
MD5 ab579fa61ab80ebdcde7f87338fd13d3
BLAKE2b-256 91b9004b1f020bfb3c2d906f2ccd5788090e1dbe1da84a1071342312ca12b380

See more details on using hashes here.

File details

Details for the file sphericart-2.0.2-py3-none-win_amd64.whl.

File metadata

  • Download URL: sphericart-2.0.2-py3-none-win_amd64.whl
  • Upload date:
  • Size: 233.7 kB
  • Tags: Python 3, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.14.4

File hashes

Hashes for sphericart-2.0.2-py3-none-win_amd64.whl
Algorithm Hash digest
SHA256 01b6c8f1c6b5e950e8e7783ae143fb03df01d9a6e88aae992ad93c00f9258119
MD5 fbd7dff2eff173f2ee62f6347af1f89d
BLAKE2b-256 9e931583ad9fd22ce3081e5ee94be6dc0acd2918ab34554e1d81ea7996bdacbe

See more details on using hashes here.

File details

Details for the file sphericart-2.0.2-py3-none-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for sphericart-2.0.2-py3-none-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 d638a7a467fd83871ff170c7d4e73aec12fc5801ac345293f2b7614998e87785
MD5 a72fcab953c22c8ebea11eefb0afdf8a
BLAKE2b-256 0800e60f7645f1a16030b7351489d60c3500fe52bf40aa1819545b1c40735c52

See more details on using hashes here.

File details

Details for the file sphericart-2.0.2-py3-none-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for sphericart-2.0.2-py3-none-manylinux_2_24_aarch64.manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 7ed264a66f72d22c12dee21cd9f19ebbc4585694a3e6f53f13e5ebc1f9a4d81f
MD5 d333ec5a66017542fd80f37f4a6e0547
BLAKE2b-256 b55cb1e3e766f65e78a1815e2553cce5bf33eaea8849802fb3c9d24787136aa5

See more details on using hashes here.

File details

Details for the file sphericart-2.0.2-py3-none-macosx_11_0_x86_64.whl.

File metadata

File hashes

Hashes for sphericart-2.0.2-py3-none-macosx_11_0_x86_64.whl
Algorithm Hash digest
SHA256 0a5dad10a174515dbdd53bd7f306948db8da6a552bb4057414e755b0aa5002c5
MD5 b536cc8ec422e3b705c87b0c24557d0e
BLAKE2b-256 ea16c37578a0b155f496b56db1d68d3605127a88ff20dc83f896d4d5b5c1364f

See more details on using hashes here.

File details

Details for the file sphericart-2.0.2-py3-none-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for sphericart-2.0.2-py3-none-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4a32999f5aa41f585ed2377d0d3cd157ab60c2cce1c443fcc790dc12d0e52a79
MD5 50453e027f204b1e589df7b9b6873ad0
BLAKE2b-256 428d1488cdd031391346104e672a1e864c69f520031c52b42d032e845191fdb6

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