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)]
|
#[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],
|
||||||
};
|
};
|
||||||
|
|||||||
Reference in New Issue
Block a user