Revert "perf: compact adjusted close series values"
This reverts commit ab87e18ba5.
This commit is contained in:
@@ -582,8 +582,8 @@ const MAX_SERIES_END_POSITION_INDEX_BYTES: usize = 256 * 1024 * 1024;
|
||||
#[derive(Debug, Clone)]
|
||||
struct AdjustedCloseSeries {
|
||||
dates: Vec<NaiveDate>,
|
||||
backward_factors: Vec<f64>,
|
||||
back_adjusted_closes: Vec<f64>,
|
||||
backward_factors: Vec<Option<f64>>,
|
||||
back_adjusted_closes: Vec<Option<f64>>,
|
||||
back_adjusted_close_prefix: Vec<f64>,
|
||||
missing_back_adjusted_close_prefix: Vec<u32>,
|
||||
}
|
||||
@@ -622,8 +622,8 @@ impl AdjustedCloseSeries {
|
||||
let back_adjusted_close = factor
|
||||
.filter(|_| close.is_finite() && *close > 0.0)
|
||||
.map(|factor| close * factor);
|
||||
backward_factors.push(factor.unwrap_or(f64::NAN));
|
||||
back_adjusted_closes.push(back_adjusted_close.unwrap_or(f64::NAN));
|
||||
backward_factors.push(factor);
|
||||
back_adjusted_closes.push(back_adjusted_close);
|
||||
back_adjusted_close_prefix.push(
|
||||
back_adjusted_close_prefix
|
||||
.last()
|
||||
@@ -693,11 +693,7 @@ impl AdjustedCloseSeries {
|
||||
if lookback == 0 || end < lookback {
|
||||
return None;
|
||||
}
|
||||
let base_factor = self
|
||||
.backward_factors
|
||||
.get(end - 1)
|
||||
.copied()
|
||||
.filter(|factor| factor.is_finite() && *factor > 0.0)?;
|
||||
let base_factor = self.backward_factors.get(end - 1).copied().flatten()?;
|
||||
let start = end - lookback;
|
||||
if self.missing_back_adjusted_close_prefix[end]
|
||||
!= self.missing_back_adjusted_close_prefix[start]
|
||||
@@ -727,23 +723,20 @@ impl AdjustedCloseSeries {
|
||||
return Vec::new();
|
||||
}
|
||||
let start = end.saturating_sub(lookback);
|
||||
let Some(base_factor) = self
|
||||
.backward_factors
|
||||
.get(end - 1)
|
||||
.copied()
|
||||
.filter(|factor| factor.is_finite() && *factor > 0.0)
|
||||
else {
|
||||
let Some(base_factor) = self.backward_factors.get(end - 1).copied().flatten() else {
|
||||
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]
|
||||
.iter()
|
||||
.map(|value| normalize_rolling_factor(*value / base_factor, 12))
|
||||
.collect()
|
||||
.copied()
|
||||
.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> {
|
||||
@@ -755,6 +748,7 @@ impl AdjustedCloseSeries {
|
||||
self.back_adjusted_closes
|
||||
.get(index)
|
||||
.copied()
|
||||
.flatten()
|
||||
.filter(|value| value.is_finite() && *value > 0.0)
|
||||
}
|
||||
}
|
||||
@@ -6296,8 +6290,8 @@ mod tests {
|
||||
dates: (0..30)
|
||||
.map(|index| start + chrono::Duration::days(index as i64))
|
||||
.collect(),
|
||||
backward_factors: vec![1.0; 30],
|
||||
back_adjusted_closes: values.clone(),
|
||||
backward_factors: vec![Some(1.0); 30],
|
||||
back_adjusted_closes: values.iter().copied().map(Some).collect(),
|
||||
back_adjusted_close_prefix: prefix_sums(&values),
|
||||
missing_back_adjusted_close_prefix: vec![0; 31],
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user