PyHermes
PyHermes is the Python implementation of Hermes (HypER-speed MultirEsolution cosmic Statistics), an in situ framework for measuring cosmic statistics with reusable multiresolution fields and window operators.
A catalogue is projected once into an SFCField. Smoothing, geometric binning,
multipole decomposition, differentiation, and inverse-Laplacian operations are
then expressed through WindowFunc objects. The same field can therefore feed
counting, 2PCF, conventional 3PCF, 3PCF multipoles, marked statistics, and
derived physical-field calculations without returning to particle-level tuple
counting for every configuration.
- Documentation: pyhermes.astroslacker.com
- Source: SYSUSPA-Projects/PyHermes
- Tutorials:
examples/notebooks/ - Runnable configurations:
examples/configs/andexamples/scripts/
What It Covers
- catalogue-to-field projection with configurable compactly supported scaling
functions and resolution
J; - built-in and user-defined smoothing, binning, multipole, and operator windows;
- one-point counting and field sampling;
- isotropic and anisotropic 2PCF measurements;
- Monte Carlo and spherical-harmonic 3PCF estimators;
- MPI/thread parallelism and CPU or CUDA contraction for 3PCF multipoles;
- weighted fields, velocity derivatives, Poisson potential, acceleration, and density-dependent marks.
Installation
For notebooks, development, and other single-process work, install PyHermes from PyPI:
python -m pip install pyhermes-cosmo
This installs PyHermes and its regular Python dependencies automatically. MPI and CUDA are optional, so neither is required for the default installation.
The Python import name remains unchanged:
import pyhermes
For a ready-to-use MPICH environment on Linux or macOS:
conda create -n pyhermes -c conda-forge python=3.12 mpi4py mpich pip
conda activate pyhermes
python -m pip install pyhermes-cosmo
mpiexec -n 2 python -c "from mpi4py import MPI; print(MPI.COMM_WORLD.rank)"
Here conda provides a mutually compatible MPI runtime and Python binding, while pip installs PyHermes and the remaining Python dependencies. PyHermes does not yet require a separate conda package for this workflow.
Without mpi4py, PyHermes automatically uses its single-process MPI fallback.
Users of an existing cluster MPI should follow the
installation guide for
the matching mpi4py and GPU setup.
Smallest Workflow
The tracked Quick Start configurations use paths relative to examples/:
cd examples
python scripts/run_sfc_projection.py configs/param_sfc_projection.yaml
python scripts/run_2pcf.py configs/param_2pcf.yaml
The first command downloads and caches the original single-file Quijote
group_tab catalogue from the URL in the YAML, verifies its SHA256 digest,
and writes the base SFCField. The second command consumes that exact field
and writes an isotropic Corr2PCFData result. The matching
quick_start.ipynb executes the same configs and plotting code rather than
maintaining a parallel example.
The dedicated particle_io.ipynb reuses that catalogue and shows how the
native FoF reader, an NPZ conversion, and a raw BIN layout all feed the same
projection API. The converted NPZ and BIN files are local teaching products,
not additional public downloads.
sfc_projection.ipynb then builds the J=9, weighted, redshift-space, and
explicit sampled-random fields used by later examples;
scripts/prepare_sfc_fields.py provides the equivalent non-interactive batch
entry point. The optional dark-matter snapshot builder accepts the local
Gadget HDF5 snapshot prefix explicitly; no cluster-specific path is embedded
in the code:
python scripts/build_quijote_dm_sfc_field.py /path/to/snapdir_004/snap_004
from pyhermes.base.sfc_projection import SFCProjection
from pyhermes.io import WindowFunc
from pyhermes.param.parambase import read_param
params = read_param("./configs/param_sfc_projection.yaml")
field = SFCProjection(params).run()
gaussian = WindowFunc(
{"type": "gaussian", "len_args": {"R": 10.0}},
field.sfc_info,
threads=8,
)
smoothed_field = field @ gaussian
This is the core language of PyHermes: field @ window. Statistical tasks build the required window families and normalizations around the same objects.
Start With The Notebooks
The recommended route through
examples/notebooks/
is:
quick_start.ipynbparticle_io.ipynbsfc_projection.ipynbwindow.ipynbphysical_fields.ipynbcounting.ipynbcorr2pcf.ipynbcorr3pcf.ipynb
The first four notebooks establish the common catalogue-to-field-to-window workflow. Continue with physical fields, one-point Counting, or the 2PCF-to-3PCF statistics path according to the calculation you need.
Generated catalogues and estimator products are intentionally not committed. The notebooks state which lightweight cells run locally and which script/YAML pairs are intended for a workstation or cluster.
Documentation
The full guide at pyhermes.astroslacker.com follows the terminology and estimator definitions of the Hermes paper. It covers the mathematical construction, current APIs, window catalogue, parameter mappings, numerical validation, and performance interpretation.
To build the documentation locally:
python -m pip install ".[docs]"
sphinx-build -W -b html docs docs/_build/html
Citing PyHermes
If PyHermes contributes to a publication, please cite the software and, once
available, the accompanying Hermes/PyHermes paper. Citation metadata is
provided in CITATION.cff,
with BibTeX examples in the
citation guide.
The current citation author list is Long-Long Feng, Tengpeng Xu, Tian-Cheng Luan and collaborators. The manuscript entry remains clearly marked as a placeholder until its final title, journal, and identifier are available.
Release files for pyhermes-cosmo 1.1.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| pyhermes_cosmo-1.1.0.tar.gz | 132.0 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pyhermes_cosmo-1.1.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size:274.6 kB
Release files / pyhermes_cosmo-1.1.0.tar.gz
| Download URL | pyhermes_cosmo-1.1.0.tar.gz |
|---|---|
| Size | 132.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
89c9392cac8690581de8f24ba1c6a0b8d66d5eef9e54ab42d3e2ac3ee971fc81
|
|
BLAKE2b-256 checksum How to use checksums |
1c17e73fe6d64ace558bbf76389fbb31f087dd2acce3dec5f52b94727e7c379c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 26, 2026.
Transparency logRelease files / pyhermes_cosmo-1.1.0-py3-none-any.whl
| Download URL | pyhermes_cosmo-1.1.0-py3-none-any.whl |
|---|---|
| Size | 142.5 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
cd0a698fd311788dab17ba1dd9e52601607b59253ec5972e60edfaf7d995e7ef
|
|
BLAKE2b-256 checksum How to use checksums |
669bbc32660e7de15ebf20bdb773c5a25c7a9db3148932ae459d86705a363aa4
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/6.1.0 CPython/3.13.14
|
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.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Jul 26, 2026.
Transparency log