| Crates.io | amari-probabilistic |
| lib.rs | amari-probabilistic |
| version | 0.17.0 |
| created_at | 2025-12-24 19:39:10.476066+00 |
| updated_at | 2026-01-11 22:44:22.548293+00 |
| description | Probability theory on geometric algebra spaces - distributions, stochastic processes, and Bayesian inference for multivector-valued random variables |
| homepage | https://github.com/justinelliottcobb/Amari |
| repository | https://github.com/justinelliottcobb/Amari |
| max_upload_size | |
| id | 2003754 |
| size | 173,598 |
Probability theory on geometric algebra spaces for the Amari mathematical computing library.
amari-probabilistic provides probability distributions, stochastic processes, MCMC sampling, and Bayesian inference for multivector-valued random variables in Clifford algebras Cl(P,Q,R).
This crate builds on:
amari-measure for measure-theoretic foundationsamari-info-geom for Fisher-Riemannian geometry integrationamari-core for the underlying Multivector typeProbability distributions over multivector spaces:
use amari_probabilistic::distribution::{Distribution, GaussianMultivector};
use amari_core::Multivector;
// Standard Gaussian on Cl(2,0,0)
let gaussian = GaussianMultivector::<2, 0, 0>::standard();
// Sample from the distribution
let mut rng = rand::thread_rng();
let sample: Multivector<2, 0, 0> = gaussian.sample(&mut rng);
// Evaluate log-probability
let log_p = gaussian.log_prob(&sample).unwrap();
Metropolis-Hastings and Hamiltonian Monte Carlo:
use amari_probabilistic::sampling::{MetropolisHastings, Sampler};
// Create sampler with proposal standard deviation
let mut sampler = MetropolisHastings::new(&target_distribution, 0.1);
// Run MCMC with burnin
let samples = sampler.run(&mut rng, 1000, 100)?;
// Check diagnostics
let diag = sampler.diagnostics();
println!("Acceptance rate: {}", diag.acceptance_rate);
SDE solvers for multivector-valued stochastic processes:
use amari_probabilistic::stochastic::{
GeometricBrownianMotion, EulerMaruyama, SDESolver
};
// Geometric Brownian motion: dX = μX dt + σX dW
let gbm = GeometricBrownianMotion::<2, 0, 0>::new(0.05, 0.2)?;
// Solve with Euler-Maruyama
let solver = EulerMaruyama::new();
let initial = Multivector::scalar(1.0);
let path = solver.solve(&gbm, initial, 0.0, 1.0, 100, &mut rng)?;
Bayesian models on geometric algebra spaces:
use amari_probabilistic::bayesian::{BayesianGA, GaussianPrior};
// Define prior
let prior = GaussianPrior::<2, 0, 0>::diffuse();
// Define likelihood function
let likelihood = |theta: &Multivector<2, 0, 0>, data: &[Multivector<2, 0, 0>]| {
// Compute log-likelihood
Ok(log_lik)
};
// Create Bayesian model
let mut model = BayesianGA::new(prior, likelihood);
model.observe(observations);
// Sample from posterior
let posterior_samples = model.sample_posterior(&mut rng, 1000, 100, 0.1)?;
Propagate uncertainty through geometric operations:
use amari_probabilistic::uncertainty::{UncertainMultivector, LinearPropagation};
// Create uncertain multivector with mean and covariance
let um = UncertainMultivector::diagonal(mean, &variances)?;
// Propagate through operations
let prop = LinearPropagation::new();
let result = prop.scalar_multiply(&um, 2.0);
distribution: Core Distribution trait and implementations
GaussianMultivector: Gaussian distribution on multivector spaceUniformMultivector: Uniform distribution on hypercubeGradeProjectedDistribution: Marginal distribution on specific gradesrandom: Random variable traits and moment computation
GeometricRandomVariable: Trait for RVs with computable momentsCovarianceMatrix: Covariance representationMomentComputer: Monte Carlo moment estimationsampling: MCMC and sampling algorithms
MetropolisHastings: Random-walk MetropolisHamiltonianMonteCarlo: HMC with leapfrog integrationRejectionSampling: Accept-reject samplingstochastic: Stochastic processes and SDE solvers
StochasticProcess: Trait for SDEsEulerMaruyama: First-order SDE solverMilstein: Higher-order SDE solverWienerProcess, GeometricBrownianMotion, OrnsteinUhlenbeckbayesian: Bayesian inference
BayesianGA: Bayesian model with prior and likelihoodJeffreysPrior: Non-informative priorGaussianPrior: Conjugate Gaussian priorPosteriorSampler: Posterior analysis utilitiesuncertainty: Uncertainty propagation
LinearPropagation: Jacobian-based propagationUnscentedTransform: Sigma-point propagationmonte_carlo: Monte Carlo integration extensions
phantom: Compile-time distribution property markers
Bounded, LightTailed, RotorValued, etc.The crate uses ProbabilisticError for error handling:
pub enum ProbabilisticError {
NotNormalized { total: f64 },
OutOfSupport { sample: String },
SamplerNotConverged { iterations: usize, reason: String },
SDEInstability { time: f64, details: String },
InvalidParameters { description: String },
// ...
}
std (default): Standard library supportparallel: Parallel sampling with Rayongpu: GPU-accelerated sampling via amari-gpuA probability distribution on the Clifford algebra Cl(P,Q,R) assigns probabilities to multivector-valued events. The dimension of the space is 2^(P+Q+R).
SDEs on multivector spaces take the form:
dX = μ(X,t) dt + σ(X,t) dW
where μ is the drift (a multivector), σ is the diffusion coefficient, and W is a Wiener process.
For a parameter θ (a multivector), data D, prior p(θ), and likelihood p(D|θ):
p(θ|D) ∝ p(D|θ) p(θ)
MIT OR Apache-2.0