Skip to main content

Unified liNe Integration Turbo Engine

Project description

unite — Unified liNe Integration Turbo Engine

PyPI Python GPLv3 license Tests codecov Documentation

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 samplerModelBuilder returns (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 nirspec
from unite.results import make_parameter_table, make_spectra_tables
from unite.spectrum import Spectra, from_DJA

# 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(prior=prior.Uniform(0, 10))
)
lc.add_line(
    'NII_6585', 
    6585.0 * u.AA, 
    redshift=z, 
    fwhm_gauss=fwhm,
    flux=line.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()
spec = from_DJA('dja-spectrum.fits', disperser=g395m)

spectra = Spectra([spec], 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)

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.

DOI

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

unite-2.2.0.tar.gz (363.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

unite-2.2.0-py3-none-any.whl (208.6 kB view details)

Uploaded Python 3

File details

Details for the file unite-2.2.0.tar.gz.

File metadata

  • Download URL: unite-2.2.0.tar.gz
  • Upload date:
  • Size: 363.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for unite-2.2.0.tar.gz
Algorithm Hash digest
SHA256 45b368b5b7a5d2e2ef43f89d9649334d15fdbeae3e14e8f5903e072d8d934c84
MD5 cdec9ec6901f650a07f40c214a9fe944
BLAKE2b-256 584243dbe052fbd448c358033483bfa35a2d4b8be3f71ea26a36bb0830f6a468

See more details on using hashes here.

Provenance

The following attestation bundles were made for unite-2.2.0.tar.gz:

Publisher: publish.yml on TheSkyentist/unite

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file unite-2.2.0-py3-none-any.whl.

File metadata

  • Download URL: unite-2.2.0-py3-none-any.whl
  • Upload date:
  • Size: 208.6 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for unite-2.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 4e78cadba7496af1bdc644a61d56686accf7fa6b0a2273cf3008d3fbd41e2dae
MD5 dfa689686b7e4d0207ef57b822a882a3
BLAKE2b-256 4a95f397d3ae3d3bb2425c0c4eead2ae2cc61acd3f200e71abe4642e8abc630e

See more details on using hashes here.

Provenance

The following attestation bundles were made for unite-2.2.0-py3-none-any.whl:

Publisher: publish.yml on TheSkyentist/unite

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page