///|
pub(all) struct SummaryConfig {
max_samples : Int
tolerated_error_bp : Int
} derive(Eq, Debug)
///|
pub fn SummaryConfig::new(
max_samples : Int,
tolerated_error_bp : Int,
) -> SummaryConfig {
{
max_samples: if max_samples > 0 {
max_samples
} else {
1
},
tolerated_error_bp: clamp_percentile_bp(tolerated_error_bp),
}
}
///|
pub fn SummaryConfig::default() -> SummaryConfig {
SummaryConfig::new(2048, 100)
}
///|
pub fn SummaryConfig::exact() -> SummaryConfig {
SummaryConfig::new(2147483647, 0)
}
///|
pub fn SummaryConfig::is_exact(self : SummaryConfig) -> Bool {
self.tolerated_error_bp == 0
}
/// Returns the number of centroids retained by a bounded summary. A smaller
/// tolerated error keeps more centroids; `max_samples` is always a hard cap.
/// This is a deterministic compression budget, not a statistical guarantee.
///|
pub fn SummaryConfig::target_centroids(self : SummaryConfig) -> Int {
if self.tolerated_error_bp == 0 {
self.max_samples
} else {
let requested = 10000 / self.tolerated_error_bp
if requested < 1 {
1
} else if requested < self.max_samples {
requested
} else {
self.max_samples
}
}
}