#![doc = include_str!("../README.md")]
#![deny(missing_docs)]
pub mod domain;
pub mod multinormal;
pub mod multivariate;
pub mod particle;
use domain::Domain;
use nalgebra::{DefaultAllocator, Dim, OVector, Scalar, VectorView, allocator::Allocator};
use rand::Rng;
pub trait Density<T, D>: Clone
where
T: PartialOrd + Scalar,
D: Dim,
DefaultAllocator: Allocator<D>,
{
fn density<RStride: Dim, CStride: Dim>(
&self,
sample: &VectorView<T, D, RStride, CStride>,
) -> Option<T>;
fn domain(&self) -> impl Domain<T, D> + 'static;
fn center(&self) -> OVector<T, D>;
fn is_constant(&self) -> OVector<bool, D>;
fn sample(&self, rng: &mut impl Rng, max_attempts: usize) -> Option<OVector<T, D>>;
}