Unified liNe Integration Turbo Engine
Project description
unite — Unified liNe Integration Turbo Engine
unite is a Python package for fast, Bayesian inference of emission lines from astronomical spectra. It is built on JAX, NumPyro, and Astropy, and supports fitting multiple spectra simultaneously with shared kinematics, calibration tokens, and flexible priors.
Originally designed for JWST/NIRSpec but extensible to any spectrograph.
What it does
- Exact pixel integration of line profiles — fast, memory-efficient, and correct even for undersampled data
- Simultaneous multi-spectrum fitting across gratings and instruments with shared kinematic parameters (redshift, FWHM)
- Multiple line profiles: Gaussian, Voigt, Cauchy, Pseudo-Voigt, Laplace, Gauss-Hermite, Split-Normal
- Flexible continuum models: Linear, Power-Law, Polynomial — auto-generated from line configurations
- Calibration tokens (flux scale, resolution scale, pixel offset) with free or fixed priors, shared across spectra
- YAML serialization for reproducible, human-editable configurations
- User-controlled sampler —
ModelBuilderreturns(model_fn, model_args)for use with any NumPyro backend (NUTS, SVI, nested sampling, ...) - Instrument support for JWST/NIRSpec (all gratings + PRISM), SDSS, and any custom spectrograph via generic dispersers
Installation
pip install unite
Or with Pixi:
pixi add unite
Quick Start
import jax
import astropy.units as u
from numpyro import infer
from unite import line, model, prior
from unite.continuum import ContinuumConfiguration, Linear
from unite.instrument import Spectra, nirspec
from unite.results import make_parameter_table, make_spectra_tables
# 1. Configure lines with shared kinematics
z = line.Redshift('z', prior=prior.Uniform(-0.005, 0.005))
fwhm = line.FWHM('narrow', prior=prior.Uniform(100, 1000))
lc = line.LineConfiguration()
lc.add_line('H_alpha', 6563.0 * u.AA, redshift=z, fwhm_gauss=fwhm,
flux=line.Flux('Ha_flux', prior=prior.Uniform(0, 10)))
lc.add_line('NII_6585', 6585.0 * u.AA, redshift=z, fwhm_gauss=fwhm,
flux=line.Flux('NII_flux', prior=prior.Uniform(0, 10)))
cc = ContinuumConfiguration.from_lines(lc.centers, pad=0.05, form=Linear())
# 2. Load spectra (NIRSpec example; any instrument works)
g395m = nirspec.G395M()
spectrum = nirspec.NIRSpecSpectrum.from_DJA('spectrum.fits', disperser=g395m)
spectra = Spectra([spectrum], redshift=5.28)
filtered_lines, filtered_cont = spectra.prepare(lc, cc)
spectra.compute_scales(filtered_lines, filtered_cont, error_scale=True)
# 3. Build and run with any NumPyro sampler
builder = model.ModelBuilder(filtered_lines, filtered_cont, spectra)
model_fn, model_args = builder.build()
mcmc = infer.MCMC(infer.NUTS(model_fn), num_warmup=500, num_samples=1000)
mcmc.run(jax.random.PRNGKey(0), model_args)
# 4. Extract results
param_table = make_parameter_table(mcmc.get_samples(), model_args)
spectra_tables = make_spectra_tables(mcmc.get_samples(), model_args, summary=True)
Contributing
Bug reports, feature requests, and pull requests are welcome on GitHub. If you find a bug or have an idea for an improvement, please open an issue — even a brief description is helpful.
Documentation
Full documentation, tutorials, and API reference at unite.readthedocs.io.
Citing
If you use unite in your research, please cite the Zenodo software release. Each versioned release has a unique DOI minted automatically when a GitHub release is created.
See CITATION.md for BibTeX and details. The Zenodo record lists all releases — visit the link to cite a specific version. GitHub's "Cite this repository" button (top-right of the repo page) also generates citation text directly from CITATION.cff.
License
GPL v3 or later. See LICENSE for details.
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 unite-2.0.0.tar.gz.
File metadata
- Download URL: unite-2.0.0.tar.gz
- Upload date:
- Size: 340.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a595d229f89701c990123ccc5e74d71f75beda08be1f1c4adf39d2c1af40854d
|
|
| MD5 |
1c8352027077391d65fd16d8eed04b33
|
|
| BLAKE2b-256 |
0179c4fd1a19ae05290e75788ce82732a2adf52f185a69f1a3a5a743619f0975
|
Provenance
The following attestation bundles were made for unite-2.0.0.tar.gz:
Publisher:
publish.yml on TheSkyentist/unite
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
unite-2.0.0.tar.gz -
Subject digest:
a595d229f89701c990123ccc5e74d71f75beda08be1f1c4adf39d2c1af40854d - Sigstore transparency entry: 1141578719
- Sigstore integration time:
-
Permalink:
TheSkyentist/unite@8f05af05e13e2560f204ecfc54b12ec0ff36b28a -
Branch / Tag:
refs/tags/v2.0.0 - Owner: https://github.com/TheSkyentist
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@8f05af05e13e2560f204ecfc54b12ec0ff36b28a -
Trigger Event:
release
-
Statement type:
File details
Details for the file unite-2.0.0-py3-none-any.whl.
File metadata
- Download URL: unite-2.0.0-py3-none-any.whl
- Upload date:
- Size: 196.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
d08a904262aaab0c8cad71de88a3331238d0e281c6ce146fcf9d59b4fbe72352
|
|
| MD5 |
e6628c6aa4ece7ec95536d4663418a86
|
|
| BLAKE2b-256 |
b648c9f39482e89385abe1ec12b18c1e1aac3bc905cc1da5f79d5fd4fd2ff049
|
Provenance
The following attestation bundles were made for unite-2.0.0-py3-none-any.whl:
Publisher:
publish.yml on TheSkyentist/unite
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
unite-2.0.0-py3-none-any.whl -
Subject digest:
d08a904262aaab0c8cad71de88a3331238d0e281c6ce146fcf9d59b4fbe72352 - Sigstore transparency entry: 1141578765
- Sigstore integration time:
-
Permalink:
TheSkyentist/unite@8f05af05e13e2560f204ecfc54b12ec0ff36b28a -
Branch / Tag:
refs/tags/v2.0.0 - Owner: https://github.com/TheSkyentist
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@8f05af05e13e2560f204ecfc54b12ec0ff36b28a -
Trigger Event:
release
-
Statement type: