sidmkit
A transparent toolkit for self-interacting dark matter (SIDM) micro→macro work:
- Yukawa / dark-photon style self-interaction cross sections (Born / classical / Hulthén / partial-wave)
- Velocity averaging (Maxwellian relative-speed baseline) for ⟨σ/m⟩ and ⟨σ v⟩/m
- Curated summary constraint sets (from reviews) for fast sanity checks
- A simple halo-level mapping via the interaction radius
r1(Γ(r1) t_age = 1) - Lightweight likelihood scaffolds + a tiny Metropolis MCMC for runnable end-to-end demos
- Benchmarks & regression numbers to catch numerical/unit regressions
sidmkit is designed to be easy to audit and extend. The included constraints and likelihoods are starting points, not publication-grade analyses.
Install
git clone
cd sidmkit
python -m venv .venv
source .venv/bin/activate
pip install -U pip
pip install -e .
CLI overview
sidmkit --help
sidmkit sigma --help
sidmkit avg --help
sidmkit constraints --help
sidmkit halo --help
sidmkit likelihood --help
sidmkit infer --help
sidmkit benchmark --help
sidmkit validate --help
End-to-end pipeline
This is the recommended reproducible workflow.
0) Run internal benchmarks (sanity + regression)
sidmkit benchmark
# optional slow partial-wave checks:
sidmkit benchmark --slow
1) Compute σ/m(v) and save a curve
Example model:
- mχ = 10 GeV
- m_med = 0.05 GeV (50 MeV)
- α = 0.01
- attractive Yukawa
sidmkit sigma --mchi 10 --mmed 0.05 --alpha 0.01 --potential attractive \
--vmin 1 --vmax 5000 --n 200 --csv sigma_curve.csv
2) Do the velocity average (this is upgrade #1)
Compute ⟨σ v⟩/m for a Maxwellian relative-speed distribution with σ1D = 50 km/s:
sidmkit avg --mchi 10 --mmed 0.05 --alpha 0.01 --potential attractive \
--sigma1d 50 --moment 1
moment=0→ ⟨σ/m⟩moment=1→ ⟨σ v⟩/m
3) Check curated constraint sets (upgrade #2)
List available sets:
sidmkit constraints --list-sets --mchi 10 --mmed 0.05 --alpha 0.01
Evaluate a modern summary set (example: Adhikari+ review Table I):
sidmkit constraints --set literature_table1_summary --mchi 10 --mmed 0.05 --alpha 0.01
Or evaluate the classic Tulin & Yu Table I set:
sidmkit constraints --set literature_table1_compilation --mchi 10 --mmed 0.05 --alpha 0.01
4) Halo-level mapping: compute r1 for an NFW halo (upgrade #3)
Example: MW-like halo (M200=1e12 Msun, c200=10), age 10 Gyr:
sidmkit halo --mchi 10 --mmed 0.05 --alpha 0.01 \
--m200 1e12 --c200 10 --tage 10 --vmode jeans
This solves for r1 where Γ(r1) t_age = 1 using:
- NFW density profile,
- isotropic Jeans velocity dispersion,
- Maxwellian relative-speed averaging for ⟨σ v⟩/m.
5) Dataset-style likelihood + inference (upgrades #4 and #5)
We ship two “starter” likelihoods:
- Point constraints dataset (JSON): reproducible, auditable, summary-level.
- Toy rotation-curve likelihood (CSV): demonstrates micro→macro → V_circ(r).
5a) Point-constraints likelihood
Example dataset file included:
examples/datasets/kaplinghat2016_summary_plus_bullet.json
Evaluate log-likelihood at a model point:
sidmkit likelihood --kind points --data examples/datasets/kaplinghat2016_summary_plus_bullet.json \
--mchi 15 --mmed 0.017 --alpha 0.00729927 --potential attractive
Run a small Metropolis MCMC:
sidmkit infer --data examples/datasets/kaplinghat2016_summary_plus_bullet.json \
--potential attractive --method auto --n-steps 4000 --seed 0
5b) Toy rotation-curve likelihood (demo)
Example dataset file included:
examples/datasets/toy_rotation_curve.csv
Evaluate the rotation-curve log-likelihood (you must specify a halo M200,c200):
sidmkit likelihood --kind rotation_curve --data examples/datasets/toy_rotation_curve.csv \
--m200 1e11 --c200 12 --tage 10 \
--mchi 10 --mmed 0.05 --alpha 0.01 --potential attractive
Be critical: the rotation-curve model is deliberately simple (isothermal core matched to NFW at r1). It exists to show the mechanics of a forward model, not to replace full analyses.
Validation hooks (upgrade #4)
Validate against an external curve (your digitized data)
If you digitize a paper’s σ/m(v) curve into a CSV with columns:
v_km_s, sigma_over_m_cm2_g, you can compare:
sidmkit validate --target curve --reference your_curve.csv \
--mchi 10 --mmed 0.05 --alpha 0.01 --potential attractive
This is a non-authoritative regression test using a small set of auto-digitized points:
sidmkit validate --target fig13 --mchi 15 --mmed 0.017 --alpha 0.00729927 --potential attractive
SPARC rotation-curve batch fits (phenomenological baseline)
sidmkit also ships a self-contained batch fitter for the SPARC *_rotmod.dat files.
It fits simple halo profiles (NFW, Burkert) plus stellar mass-to-light parameters.
Install plotting extra (recommended):
pip install -e ".[plot]"
1) Batch fit in chunks (recommended)
python -m sidmkit.sparc_batch batch --inputs path/to/Rotmod_LTG path/to/Rotmod_ETG --outdir outputs/sparc_chunks/chunk_0 --skip 0 --limit 25 --plots --plot-format png
Run additional chunks by increasing --skip (e.g. 25, 50, ...). Use --resume
to make reruns idempotent.
2) Merge chunk summaries
python -m sidmkit.sparc_batch merge --inputs outputs/sparc_chunks/chunk_*/summary.json --out outputs/sparc_all_summary.json
3) Population report
python -m sidmkit.sparc_batch report --summary-json outputs/sparc_all_summary.json --outdir outputs/sparc_report
These are halo-profile fits (baseline model comparison), not a full SIDM microphysics → core-size inference of SPARC.
Python quickstart
python examples/quickstart.py
License
MIT
Metadata
Release files for sidmkit 0.3.3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| sidmkit-0.3.3.tar.gz | 50.6 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| sidmkit-0.3.3-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 105.7 kB
Release files / sidmkit-0.3.3.tar.gz
| Download URL | sidmkit-0.3.3.tar.gz |
|---|---|
| Size | 50.6 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
fa4df5500fa7aeb1ead8ef212d3055833b4d4190b38fc23a962fb9772cc2fb2e
|
|
BLAKE2b-256 checksum How to use checksums |
051e5c8e867eafce72ef99128fab6efd1ab62c087da12ee36c95502326b5e212
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.2
|
Release files / sidmkit-0.3.3-py3-none-any.whl
| Download URL | sidmkit-0.3.3-py3-none-any.whl |
|---|---|
| Size | 55.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
23dc3e2e615b1365d10c63304b8f0d958e498460c919594302202dd6fe313793
|
|
BLAKE2b-256 checksum How to use checksums |
c86f7809ba54775c82f2d5cc2887439e83280957b3239c12fe0f02349e797cd8
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.12.2
|