Software

The Astropy logo: a white spiral on an orange-to-red oval.

Core developer · Coordination Committee · Strategic Planning

Astronomy in Python

The community core package for astronomy in Python. The collaboration received the 2025 AAS Lancelot M. Berkeley Prize, a 2023 IOP Publishing Top Cited Paper Award and the 2022 ADASS software prize.

The galax logo, the GalacticDynamics mark: a painted spiral galaxy with a glowing core on a dark disk, circled by a dark ring, between a teal < and a purple > code bracket.

lead developer

Galactic dynamics in JAX

Orbit integration, potentials and stream generation — GPU-accelerated and fully differentiable.

maintainer

Multiple dispatch in Python

Multiple dispatch for Python, with type-hint-driven method resolution — the dispatch layer under quax and unxt.

The coordinax logo: a ruler crossed with a green arrow on a blue square.

lead developer

Coordinates in JAX

Vectors, frames and transformations — differentiable, and unit-aware via unxt.

The unxt logo: a ruler crossed with a green pencil on a blue square.

lead developer

Units in JAX

Unit-aware quantities that survive jit, grad and vmap.

maintainer

Multiple dispatch in JAX

Custom array-ish types that work with JAX primitives — the substrate the rest of the stack builds on.

Relative likelihood of a halo’s y-axis flattening, q₂, from a Potamides tutorial: a flat plateau from about 0.7 to 1.55 that contains the true value, q₂ = 1, falling to zero on either side.

co-lead developer

Constrain gravitational potentials from stellar stream curvature

A JAX package that fits stream tracks with splines and compares their curvature directly to a potential's accelerations. Co-led with Sirui Wu.

lead developer

A standard interface for cosmology libraries

A standard interface for cosmology libraries

The diffraxtra logo: diffrax's, an integral sign cut out of a black rounded square, with a big plus cut out beside it.

Extras for Diffrax

OOP interfaces and vectorization for Diffrax.

Orbits of a test particle in a Milky Way–LMC system, integrated in the true potential, a near-true analytic model, and three neural-network models. The most complete neural-network models track the true orbit almost exactly, while the near-true analytic model drifts away from it.

Physics-informed neural networks for galactic potentials

Physics-informed neural networks for galactic potentials

The jaxmore logo: JAX's, its letters built from coloured rhombi, with the J's stem crossed by a dark-grey bar of the same rhombi into a big plus.

There's more to JAX

The utilities you keep re-writing, collected in one place.

The macro_lightning logo: a dotted track through a cloud, ending below it in a black macro trailing a blue wake inside a yellow channel.

lead developer

Constrain macroscopic dark matter with lightning

Constraints on macroscopic dark matter from lightning, on Earth and Jupiter. Released with the PRD paper.

The mvgkde logo: a kernel density estimate of points scattered along a slanted, handwritten M, drawn as filled contours from cream through gold and green to deep blue.

Multivariate Gaussian KDE

Kernel density estimation in JAX — differentiable, vectorized, bandwidth-tunable.

The optional_dependencies logo: a package, drawn as a blue isometric cube, with a yellow badge carrying a question mark.

Construct checks for optional dependencies

Construct checks for optional dependencies

The phasecurvefit logo: noisy points along a self-crossing looped curve, coloured by their fitted order from red through yellow to blue, with the learned mean path drawn as a black line.

Paths through phase space

Fit a curve through phase-space points — streams, orbits, trajectories.

The quaxed logo: a black rubber duck, quax's, with a white badge on its body carrying a blue tick.

Pre-quaxed libraries

Drop-in jax.numpy and friends, already wrapped for dispatch over abstract array types.

The spexial logo: a capital Gamma shaded from teal through blue to purple on a dark rounded square.

scipy.special in JAX

Special functions for JAX, following the scipy.special API, filling gaps like zeta at negative integers and the modified Bessel K, Gegenbauer and polylogarithm functions.

A simulated stellar stream from a 47 Tucanae-like progenitor, looping around the Galactic centre in Galactocentric x–y coordinates. Blue and orange lines trace the fitted path of each tidal arm, wrapped in grey uncertainty ellipses that grow largest at the arms’ sparse far ends.

Stellar stream tracks

Characterize a stream's track with minimal prior knowledge. Astropy-powered.

The dataclassish logo: a purple brace opening three fields, each a purple dot and a wavy teal tilde, beside a plain navy box.

dataclasses, for everything

replace, fields and asdict, generalized to any object rather than just dataclasses.

The is_annotated logo: square brackets around a teal block and a purple flag, the shape of Annotated[T, metadata], with a yellow badge carrying a tick.

Check whether a type hint is Annotated

Check whether a type hint is Annotated

The oncequinox logo: Equinox's, a navy circle solid on the left and a checkerboard on the right, with a big 1 cut out of its solid half.

Singletons for Equinox

Singletons for Equinox

author

A LaTeX preamble worth reusing

A LaTeX preamble worth reusing

The quax-blocks logo: a black rubber duck, quax's, with a white badge on its body carrying three blue blocks stacked into a pyramid.

Building blocks for quax classes

Mixins for arithmetic, comparison and array protocols, so a new array type is a few lines.

The xmmutablemap logo: a teal snowflake between a pair of purple dict braces, a frozen mapping.

An immutable mapping, JAX-compatible

An immutable mapping, JAX-compatible

Efficiently get the index-0 element of any iterable

Efficiently get the index-0 element of any iterable

Other Open-Source Contributions43