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 computing
- ``scipy`` - Scientific computing
- ``jax`` - Autodiff and GPU support
- ``pyarrow`` - 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 samplers
- ``discovery.samplers`` - Various sampling backends (numpyro, etc.)
See :doc:`/installation` for installation instructions.
Next Steps
----------
- :doc:`/guide/data_model` - Understand Discovery's core abstractions
- :doc:`/guide/pulsar_data` - Learn about data handling
- :doc:`/tutorials/basic_likelihood` - Build your first likelihood