fugue/
lib.rs

1// Copyright (c) 2025 Alex Nodeland
2// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0>
3// or the MIT license <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your option.
4// This file may not be copied, modified, or distributed except according to those terms.
5
6#![doc = include_str!("../README.md")]
7// Allow large error types for rich error context
8#![allow(clippy::result_large_err)]
9
10pub mod core;
11pub mod error;
12pub mod inference;
13pub mod macros;
14pub mod runtime;
15
16pub use core::address::Address;
17// `addr!` macro is exported at the crate root via #[macro_export]
18pub use core::distribution::{
19    Bernoulli, Beta, Binomial, Categorical, Distribution, Exponential, Gamma, LogNormal, Normal,
20    Poisson, Uniform,
21};
22pub use core::model::{
23    factor, guard, observe, pure, sample, sample_bool, sample_f64, sample_u64, sample_usize,
24    sequence_vec, traverse_vec, zip, Model, ModelExt, SampleType,
25};
26pub use runtime::handler::Handler;
27pub use runtime::interpreters::{
28    PriorHandler, ReplayHandler, SafeReplayHandler, SafeScoreGivenTrace, ScoreGivenTrace,
29};
30pub use runtime::trace::{Choice, ChoiceValue, Trace};
31
32// Re-export key inference methods
33pub use core::numerical::{log1p_exp, log_sum_exp, normalize_log_probs, safe_ln};
34pub use error::{ErrorCategory, ErrorCode, ErrorContext, FugueError, FugueResult, Validate};
35pub use inference::abc::{
36    abc_rejection, abc_scalar_summary, abc_smc, DistanceFunction, EuclideanDistance,
37};
38pub use inference::diagnostics::{
39    extract_bool_values, extract_f64_values, extract_i64_values, extract_u64_values,
40    extract_usize_values, print_diagnostics, r_hat_f64, summarize_f64_parameter, Diagnostics,
41    ParameterSummary,
42};
43pub use inference::mcmc_utils::{
44    effective_sample_size_mcmc, geweke_diagnostic, DiminishingAdaptation,
45};
46pub use inference::mh::{adaptive_mcmc_chain, adaptive_single_site_mh};
47pub use inference::smc::{
48    adaptive_smc, effective_sample_size, Particle, ResamplingMethod, SMCConfig,
49};
50pub use inference::validation::{
51    ks_test_distribution, test_conjugate_normal_model, ValidationResult,
52};
53pub use inference::vi::{elbo_with_guide, optimize_meanfield_vi, MeanFieldGuide, VariationalParam};
54pub use runtime::memory::{CowTrace, PooledPriorHandler, TraceBuilder, TracePool};