Skip to main content

Lates Release License Documentation Documentation Language Language

Fast Fourier transforms on the 3D rotation group $\mathrm{SO}(3)$

PySOFFT provides high performance routines for harmonic analysis on the 3D rotation group written in Fortran and wrapped in Python.

$$ f:\mathrm{SO}(3) \rightarrow \mathbb{C} \quad \overset{\mathrm{PySOFFT}}{\longleftrightarrow} \quad f^l_{m,n} \text{ with } |m|,|n|\leq l<\infty $$

Some applications:

  • Rotational alignment of datasets given by their spherical harmonic coefficients.
  • Statistical analysis over SO(3).
  • X-ray scattering simulations of randomly oriented particles.

Main features:

  • Fast
  • OpenMP routines to speed up single transforms or compute many in parallel.
  • Dedicated faster transforms for real data.
  • Compute rotational cross-correlations.
  • Built in Python wrapper.
  • On-the-fly computation of Wigner matrices: saving memory.
  • Documentation at https://pysofft.readthedocs.io

Origin

PySOFFT started as a partial python port of soft-2.0 released by Peter Kostelec and Daniel Rockmore. Now it is an entire rewrite in Fortran featuring several improvements, e.g higher precission computation of Wigner-D matrices, OpenMP routines and convenient python wrappers.

For details on soft-2.0 see:
FFTs on the Rotation Group
J Fourier Anal Appl (2008) 14: 145–179
DOI 10.1007/s00041-008-9013-5 (pdf)

PySOFT is made available with consent of the original soft-2.0 authors and under the same GPL3 license.

Installation

See the documentation for more details:

You can install PySOFT via

pip install pysofft

The only python dependency is numpy.
Non-python dependencies are: fftw, openmp, meson and gcc/gfortran.
Note: If you don't have some of the non-python dependencies installed the install will fail!

Pixi

If you use pixi you can use the following pixi.toml for installation.
Here you don't have to install the non-python dependencies separately.

[workspace]
channels = ["conda-forge"]
description = "Workspace for pysofft"
name = "temp"
platforms = ["linux-64"]
version = "0.1.0"

[system-requirements]
libc = { family = "glibc", version = "2.34" }

[dependencies]
gfortran = ">=15.2,<15.5.0"
gcc = ">=15.2,<15.5.0"
cpython = ">=3.13.11,<4"
python = ">=3.13.11,<3.14"
pip = ">=26.0.1,<27"
numpy = ">=2.2.6,<2.2.7"
meson = ">=1.8.1,<1.9.0"
meson-python = ">=0.19.0,<0.20"
fftw = ">=3.3.10,<4"
openmp = ">=8.0.1,<9"

[pypi-dependencies]
pysofft = ">=0.9.0, <2.0.0"

Basic Usage Python

Forward and inverse transforms

from pysofft import Soft
bw = 64
s = Soft(bw)

# complex case: inverse then forward 
f_lmn = s.get_coeff(random=True)
f = s.isoft(f_lmn)
f_lmn2 = s.soft(f)

# real case: inverse then forward
g_lmn = s.get_coeff(real=True,random=True)
g = s.irsoft(g_lmn)
g_lmn2 = s.rsoft(g)

Accessing individual harmonic coefficients

from pysofft import Soft
bw = 64
s = Soft(bw)

f_lmn = s.get_coeff(random=True)

l=4
m=-1
n=2

# access single coefficient
print(f_lmn.lmn[l,m,n])

# slicing is also possible
print(f_lmn.lmn[l,m,:])

# as well as value asignment
f_lmn.lmn[l,m,:] = 1 + 1.j

Metadata

Release files for pysofft 0.9.5

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pysofft 0.9.5
File Size Uploaded Provenance Actions
pysofft-0.9.5.tar.gz 2.3 MB Without provenance Details for pysofft-0.9.5.tar.gz

Release files / pysofft-0.9.5.tar.gz

Download URL pysofft-0.9.5.tar.gz
Size 2.3 MB
Tags Source
SHA-256 checksum
How to use checksums
4990967837032937435f739dc5043501aa23bfffa95206f6bee2edc4c5505bb7
BLAKE2b-256 checksum
How to use checksums
3ebe073935ce1267e230f2a2262bd48e97f596765f43bcd1b3a479eb585ce0e6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.13.11

Security for pysofft 0.9.5

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page