This commit is contained in:
Dominik Werder
2024-11-04 16:35:26 +01:00
parent 5543389c1e
commit 35d15c4694
32 changed files with 268 additions and 220 deletions
+9 -8
View File
@@ -205,6 +205,10 @@ pub enum NetpodError {
MissingBinningScheme,
BadCacheUsage(String),
TimelikeBinWidthImpossibleForPulseRange,
BinCountTooLarge,
BinCountTooSmall,
BinnedNoGridMatch,
NotTimerange,
}
#[derive(Debug, ThisError)]
@@ -2572,20 +2576,17 @@ pub enum BinnedRangeEnum {
}
impl BinnedRangeEnum {
fn covering_range_ty<T>(a: T, b: T, min_bin_count: u32) -> Result<Self, Error>
fn covering_range_ty<T>(a: T, b: T, min_bin_count: u32) -> Result<Self, NetpodError>
where
T: Dim0Index + 'static,
{
let opts = T::binned_bin_len_opts();
if min_bin_count < 1 {
Err(Error::with_msg("min_bin_count < 1"))?;
Err(NetpodError::BinCountTooSmall)?;
}
let bin_count_max = i32::MAX as u32;
if min_bin_count > bin_count_max {
Err(Error::with_msg(format!(
"min_bin_count > {}: {}",
bin_count_max, min_bin_count
)))?;
Err(NetpodError::BinCountTooLarge)?;
}
let du = b.sub(&a);
let max_bin_len = du.div_n(min_bin_count as u64);
@@ -2599,7 +2600,7 @@ impl BinnedRangeEnum {
return Ok(ret);
}
}
Err(Error::with_msg_no_trace("can not find matching binned grid"))
Err(NetpodError::BinnedNoGridMatch)
}
/// Cover at least the given range while selecting the bin width which best fits the requested bin width.
@@ -2611,7 +2612,7 @@ impl BinnedRangeEnum {
}
/// Cover at least the given range with at least as many as the requested number of bins.
pub fn covering_range(range: SeriesRange, min_bin_count: u32) -> Result<Self, Error> {
pub fn covering_range(range: SeriesRange, min_bin_count: u32) -> Result<Self, NetpodError> {
match range {
SeriesRange::TimeRange(k) => Self::covering_range_ty(TsNano(k.beg), TsNano(k.end), min_bin_count),
SeriesRange::PulseRange(k) => Self::covering_range_ty(PulseId(k.beg), PulseId(k.end), min_bin_count),
+2 -2
View File
@@ -102,12 +102,12 @@ impl From<(u64, u64)> for NanoRange {
}
impl TryFrom<&SeriesRange> for NanoRange {
type Error = Error;
type Error = NetpodError;
fn try_from(val: &SeriesRange) -> Result<NanoRange, Self::Error> {
match val {
SeriesRange::TimeRange(x) => Ok(x.clone()),
SeriesRange::PulseRange(_) => Err(Error::with_public_msg_no_trace("given SeriesRange is not a time range")),
SeriesRange::PulseRange(_) => Err(NetpodError::NotTimerange),
}
}
}