Overview#
What is Discovery?#
Discovery is a next-generation pulsar-timing-array data-analysis package, built for speed on a JAX backend that supports GPU execution and autodifferentiation.
Philosophy#
If Enterprise is Spock—logical and elegant—Discovery is all Scotty: fast, efficient, and not above a hack if it gets you to warp speed.
Key Features#
- JAX Backend
Discovery is built on JAX, enabling:
Just-in-time (JIT) compilation for optimized execution
Automatic differentiation for gradient-based inference
Seamless GPU acceleration with CUDA
Efficient vectorization with vmap
- High Performance
Optimized for modern hardware (GPUs, TPUs)
Batched operations for array-level analysis
Minimal overhead for large datasets
- Flexible Modeling
Modular signal and noise components
Support for custom priors and spectra
Deterministic delays and stochastic processes
Global and pulsar-specific models
Requirements#
Discovery needs a modern Python environment with:
numpy- Numerical computingscipy- Scientific computingjax- Autodiff and GPU supportpyarrow- Efficient data storage
Discovery will be happier running on an Nvidia GPU with CUDA-enabled JAX.
Optional Dependencies#
Discovery’s subpackages require additional dependencies:
discovery.flow- Normalizing flow samplersdiscovery.samplers- Various sampling backends (numpyro, etc.)
See Installation for installation instructions.
Next Steps#
Data Model - Understand Discovery’s core abstractions
Pulsar Data - Learn about data handling
Basic Likelihood - Build your first likelihood