rsomics_popgen_core/
lib.rs1#![allow(
2 clippy::cast_precision_loss,
3 clippy::cast_possible_truncation,
4 clippy::cast_sign_loss,
5 clippy::missing_errors_doc,
6 clippy::similar_names,
7 clippy::many_single_char_names,
8 clippy::float_cmp
9)]
10
11pub mod diversity;
12pub mod hw;
13pub mod ld;
14
15pub use diversity::{tajimas_d, theta_pi, watterson_theta};
16pub use hw::hwe_exact;
17pub use ld::r_squared;
18
19#[derive(Debug, thiserror::Error)]
20#[non_exhaustive]
21pub enum PopgenError {
22 #[error("empty input")]
23 Empty,
24 #[error("sample size too small (n={n}, need ≥ {required})")]
25 SampleTooSmall { n: usize, required: usize },
26 #[error("invalid allele count: observed={observed}, expected ≤ {max}")]
27 InvalidAlleleCount { observed: u64, max: u64 },
28 #[error("no segregating sites — statistic undefined")]
29 NoSegregating,
30}
31
32pub type Result<T> = std::result::Result<T, PopgenError>;