Revert "perf: compact adjusted close series values"

This reverts commit ab87e18ba5.
This commit is contained in:
boris
2026-09-05 04:24:43 +08:00
parent ab87e18ba5
commit 0c2681e699
+18 -24
View File
@@ -582,8 +582,8 @@ const MAX_SERIES_END_POSITION_INDEX_BYTES: usize = 256 * 1024 * 1024;
#[derive(Debug, Clone)] #[derive(Debug, Clone)]
struct AdjustedCloseSeries { struct AdjustedCloseSeries {
dates: Vec<NaiveDate>, dates: Vec<NaiveDate>,
backward_factors: Vec<f64>, backward_factors: Vec<Option<f64>>,
back_adjusted_closes: Vec<f64>, back_adjusted_closes: Vec<Option<f64>>,
back_adjusted_close_prefix: Vec<f64>, back_adjusted_close_prefix: Vec<f64>,
missing_back_adjusted_close_prefix: Vec<u32>, missing_back_adjusted_close_prefix: Vec<u32>,
} }
@@ -622,8 +622,8 @@ impl AdjustedCloseSeries {
let back_adjusted_close = factor let back_adjusted_close = factor
.filter(|_| close.is_finite() && *close > 0.0) .filter(|_| close.is_finite() && *close > 0.0)
.map(|factor| close * factor); .map(|factor| close * factor);
backward_factors.push(factor.unwrap_or(f64::NAN)); backward_factors.push(factor);
back_adjusted_closes.push(back_adjusted_close.unwrap_or(f64::NAN)); back_adjusted_closes.push(back_adjusted_close);
back_adjusted_close_prefix.push( back_adjusted_close_prefix.push(
back_adjusted_close_prefix back_adjusted_close_prefix
.last() .last()
@@ -693,11 +693,7 @@ impl AdjustedCloseSeries {
if lookback == 0 || end < lookback { if lookback == 0 || end < lookback {
return None; return None;
} }
let base_factor = self let base_factor = self.backward_factors.get(end - 1).copied().flatten()?;
.backward_factors
.get(end - 1)
.copied()
.filter(|factor| factor.is_finite() && *factor > 0.0)?;
let start = end - lookback; let start = end - lookback;
if self.missing_back_adjusted_close_prefix[end] if self.missing_back_adjusted_close_prefix[end]
!= self.missing_back_adjusted_close_prefix[start] != self.missing_back_adjusted_close_prefix[start]
@@ -727,23 +723,20 @@ impl AdjustedCloseSeries {
return Vec::new(); return Vec::new();
} }
let start = end.saturating_sub(lookback); let start = end.saturating_sub(lookback);
let Some(base_factor) = self let Some(base_factor) = self.backward_factors.get(end - 1).copied().flatten() else {
.backward_factors
.get(end - 1)
.copied()
.filter(|factor| factor.is_finite() && *factor > 0.0)
else {
return Vec::new(); return Vec::new();
}; };
if self.missing_back_adjusted_close_prefix[end]
!= self.missing_back_adjusted_close_prefix[start]
{
return Vec::new();
}
self.back_adjusted_closes[start..end] self.back_adjusted_closes[start..end]
.iter() .iter()
.map(|value| normalize_rolling_factor(*value / base_factor, 12)) .copied()
.collect() .collect::<Option<Vec<_>>>()
.map(|values| {
values
.into_iter()
.map(|value| normalize_rolling_factor(value / base_factor, 12))
.collect()
})
.unwrap_or_default()
} }
fn latest_back_adjusted_close(&self, date: NaiveDate) -> Option<f64> { fn latest_back_adjusted_close(&self, date: NaiveDate) -> Option<f64> {
@@ -755,6 +748,7 @@ impl AdjustedCloseSeries {
self.back_adjusted_closes self.back_adjusted_closes
.get(index) .get(index)
.copied() .copied()
.flatten()
.filter(|value| value.is_finite() && *value > 0.0) .filter(|value| value.is_finite() && *value > 0.0)
} }
} }
@@ -6296,8 +6290,8 @@ mod tests {
dates: (0..30) dates: (0..30)
.map(|index| start + chrono::Duration::days(index as i64)) .map(|index| start + chrono::Duration::days(index as i64))
.collect(), .collect(),
backward_factors: vec![1.0; 30], backward_factors: vec![Some(1.0); 30],
back_adjusted_closes: values.clone(), back_adjusted_closes: values.iter().copied().map(Some).collect(),
back_adjusted_close_prefix: prefix_sums(&values), back_adjusted_close_prefix: prefix_sums(&values),
missing_back_adjusted_close_prefix: vec![0; 31], missing_back_adjusted_close_prefix: vec![0; 31],
}; };