zodi
Zodiacal and exozodiacal light brightness conventions for exoplanet imaging, from a single source that runs on numpy and JAX.
Status: v0.1 core (pre-PyPI). The LBTI HOSTS population distributions land next.
What it owns
- Local zodiacal light surface brightness: the Leinert et al. (1998)
Table 17 position dependence and Table 19 wavelength dependence, with the
interpolation, anchoring, and near-Sun conventions of the production
codes stated explicitly (
zodi.specific_intensity,zodi.zodi_flux_ratio). - The exozodi chain of Stark et al. (2014), anchored at the EEID and
numerically compatible with EXOSIMS
calc_JEZ0, with the radial scaling measured from the EEID (zodi.exozodi_flux_ratio_v,zodi.jez0,zodi.scale_jez), the three published latitudinal models (zodi.latitudinal_factor), and the grey-scatterer band correction in both production flavors: the stellar-color scaling used by pyEDITH (zodi.exozodi_flux_ratio_band) and the scattered-plus-thermal spectrum model used by EXOSIMS, with its calibration as a closed-form least-squares fit (zodi.fit_grey_scatter_constants). - Unit conversions between the dialects in common use: magnitudes per
square arcsecond, flux ratio per square arcsecond, spectral radiance,
photon rates, and MJy per steradian (
zodi.units).
Coming next: the LBTI HOSTS survey n-zodi population distributions as quantile functions (callers supply their own uniform draws).
Documentation and evidence
docs/conventions.md states every model, constant, and known cross-code
difference with sources and measured deltas; docs/evidence.md maps
each claim to an executable check and its kind of evidence. Cross-code
benchmark scripts against
EXOSIMS, skyscapes, and zodipy live in scripts/ and are runnable by
anyone with those packages installed. Current results: exact agreement
with the EXOSIMS closed-form models and magnitude chain, float64
round-off agreement with skyscapes, and 0.95-1.23 brightness ratios
against the independent Kelsall model at 1.25 um.
Design
One implementation serves both backends through the array API standard.
Functions compute in the namespace of their array inputs (via
array-api-compat), so numpy callers get numpy in and numpy out with no JAX
anywhere in their dependency tree, while JAX callers get functions that jit,
vmap, and differentiate natively. Hard dependencies are numpy and
array-api-compat only; the [jax] extra exists so the test suite can run
the JAX side. JAX users should enable float64:
jax.config.update("jax_enable_x64", True)
Random sampling is deliberately absent from the library: distributions ship
as quantile functions (inverse CDFs), and callers bring uniforms from their
own generator, whether that is numpy.random or jax.random.
Not this library
Structured circumstellar disks (rings, gaps, offsets) and scene rendering belong to scene simulators; solar-system ephemerides belong to the caller. For thermal-infrared zodiacal emission modeling, see zodipy; this library covers the reflected-light brightness conventions used in exoplanet direct imaging.
Install
PyPI release pending; for now:
pip install git+https://github.com/CoreySpohn/zodi.git
Metadata
Release files for zodi 1.0.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 | |
|---|---|---|---|
| zodi-1.0.0.tar.gz | 38.5 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| zodi-1.0.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 58.7 kB
Release files / zodi-1.0.0.tar.gz
| Download URL | zodi-1.0.0.tar.gz |
|---|---|
| Size | 38.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7bc119db62f2abde081219a003250127dcf176ff72aef0e16ab3d6076de64342
|
|
BLAKE2b-256 checksum How to use checksums |
e6b3067aa30c7bdbcbe8f878f692e1c127806de7ea02976922481699ab4ac137
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.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 Sep 16, 2026.
Transparency logRelease files / zodi-1.0.0-py3-none-any.whl
| Download URL | zodi-1.0.0-py3-none-any.whl |
|---|---|
| Size | 20.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
20a6f971ce31be6f48342eb0b640ea1f307ca0cf60a64417647ad927c0080a13
|
|
BLAKE2b-256 checksum How to use checksums |
e620e5f8d4b4979d2ea612e1963db906eedc457562edada005a1c3d1dd0ee567
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.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 Sep 16, 2026.
Transparency log