# ProDeF - Probability Density Functions
A simple Rust crate for handling probability distributions.
## Core Traits
All probability density functions (PDFs) implement the [`Density`], providing common operations like:
- Evaluation: Compute probability density (non-normalized) at a given point
- Sampling: Generate random samples from the distribution
- Domain queries: Checking valid input ranges
The [`Domain`](domain::Domain) trait represents the valid input space for a PDF. A domain may be bounded, unbounded, or have a special structure.
Available domain types:
- [`MDomain`](domain::MDomain) - Bounded multivariate domains (hypercubes)
- [`UDomain`](domain::UDomain) - Unbounded multivariate domains
- [`SDomain`](domain::SDomain) - Special univariate domains (for the use of uni dimensional PDFs)
## Distribution Types
### Multivariate Distributions
- [`MultivariateDensity`](multivariate::MultivariateDensity)
Combines multiple independent univariate distributions into a multivariate density. Use when dimensions are statistically independent.
- [`MultiNormalDensity`](multinormal::MultiNormalDensity)
A full multivariate normal (Gaussian) distribution with arbitrary covariance. Use when modeling correlated multi-dimensional data.
- [`ParticleDensity`](particle::ParticleDensity)
A non-parametric density represented by weighted particles/samples. Use for complex distributions that can't be expressed analytically or for particle filter applications.
### Univariate Distributions
For one-dimensional cases, use these directly:
- [`ConstantDensity`](multivariate::ConstantDensity) - A degenerate distribution at a fixed value
- [`CosineDensity`](multivariate::CosineDensity) - Cosine distribution
- [`LogUniformDensity`](multivariate::LogUniformDensity) - Uniform in log-space (for positive values)
- [`NormalDensity`](multivariate::NormalDensity) - Nnormal distribution
- [`UniformDensity`](multivariate::UniformDensity) - Uniform distribution over an interval