Differentiable ARPES simulations in JAX
Project description
diffpes
JAX-based ARPES simulation toolkit with Python-native APIs.
Expanded-input workflows
The package includes expanded-input wrappers that let you call the simulator with plain arrays/scalars while still running JAX kernels.
Function mapping
ARPES_simulation_Novice->diffpes.simul.simulate_novice_expandedARPES_simulation_Basic->diffpes.simul.simulate_basic_expandedARPES_simulation_Basicplus->diffpes.simul.simulate_basicplus_expandedARPES_simulation_Advanced->diffpes.simul.simulate_advanced_expandedARPES_simulation_Expert->diffpes.simul.simulate_expert_expandedARPES_simulation_SOC->diffpes.simul.simulate_soc_expanded- Dynamic dispatch by level ->
diffpes.simul.simulate_expanded(uselevel="soc"withsurface_spinfor SOC)
Notes
- Default energy-axis padding behavior:
min(eigenbands)-1tomax(eigenbands)+1. - Incident angles for expanded wrappers are interpreted in degrees.
- Wrappers return the standard
ArpesSpectrumPyTree.
Python indexing conventions
Use standard Python/NumPy indexing everywhere (zero-based, end-exclusive).
- Non-s orbitals:
slice(1, 9)-> indices 1..8 - p orbitals:
slice(1, 4)-> indices 1..3 - d orbitals:
slice(4, 9)-> indices 4..8
Do not use MATLAB-style indexing notation in Python code.
Example
import jax.numpy as jnp
from diffpes.simul import simulate_expanded
# [nkpt, nband]
eigenbands = jnp.linspace(-2.0, 0.5, 100).reshape(20, 5)
# [nkpt, nband, natom, 9]
surface_orb = jnp.ones((20, 5, 2, 9)) * 0.1
spectrum = simulate_expanded(
level="advanced",
eigenbands=eigenbands,
surface_orb=surface_orb,
ef=0.0,
sigma=0.04,
fidelity=2500,
temperature=15.0,
photon_energy=11.0,
polarization="unpolarized",
incident_theta=45.0,
incident_phi=0.0,
polarization_angle=0.0,
)
Test coverage
Test coverage measures which lines of source code are executed during tests. Run it with:
source .venv/bin/activate
pytest tests/ --cov=src/diffpes --cov-report=term-missing
To get as close to 100% as possible:
- Simul and types — Already well covered. Any new branch (e.g. new polarization or dispatch level) should have a corresponding test.
- Expanded dispatch — Test every
simulate_expanded(level=...)branch (novice, basic, basicplus, advanced, expert, soc) and the unknown-levelValueError. - HDF5 — Round-trip all PyTree types; test error paths (unknown type on load, missing group, unsupported type on save).
- VASP file readers (
read_doscar,read_eigenval,read_kpoints,read_poscar,read_procar) — Add tests that call each reader on minimal in-repo fixture files (e.g. undertests/fixtures/) so the parsing code paths are executed. - Plotting — Exercise the public plotting API in tests (or accept lower coverage for GUI-oriented code).
- Edge branches — Cover optional arguments (e.g.
make_band_structure(..., kpoint_weights=...)) and error messages so one-off branches are hit.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file diffpes-2026.3.1.tar.gz.
File metadata
- Download URL: diffpes-2026.3.1.tar.gz
- Upload date:
- Size: 131.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ede6e932ca585f0cb97034e785f1010130ee73205a2019c6dfb3e6bb84087385
|
|
| MD5 |
e428641b03286817ee1d0c7991d15a8f
|
|
| BLAKE2b-256 |
41c8df2041a3012855cc939b51c0e1e69c9b24a2f98f1cfe0ca05dfde1d96e51
|
File details
Details for the file diffpes-2026.3.1-py3-none-any.whl.
File metadata
- Download URL: diffpes-2026.3.1-py3-none-any.whl
- Upload date:
- Size: 165.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.9
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ddf766fe3432ab5f2736b1b3600588a70308cf0eb406c67a3e1f828a1f593b6d
|
|
| MD5 |
4ef8e7bfe748b71feccc55816a18358a
|
|
| BLAKE2b-256 |
b3a479dae68a2261cc8debed92a989f38be86f851bd1899c92b6c3b6da6a9cee
|