From 5b2a03d416a7bd709680a1adf52013e3eadc199a Mon Sep 17 00:00:00 2001 From: boris Date: Sat, 5 Sep 2026 01:00:33 +0800 Subject: [PATCH] revert: remove unproven duplicate rolling reuse --- crates/fidc-core/src/data.rs | 140 +---------------------------------- 1 file changed, 1 insertion(+), 139 deletions(-) diff --git a/crates/fidc-core/src/data.rs b/crates/fidc-core/src/data.rs index 52a0c0d..a699e37 100644 --- a/crates/fidc-core/src/data.rs +++ b/crates/fidc-core/src/data.rs @@ -688,17 +688,7 @@ impl AdjustedCloseSeries { end: usize, lookbacks: &[usize; N], ) -> [Option; N] { - let mut values = [None; N]; - for index in 0..N { - if let Some(previous) = - (0..index).find(|previous| lookbacks[*previous] == lookbacks[index]) - { - values[index] = values[previous]; - } else { - values[index] = self.moving_average_at_end(end, lookbacks[index]); - } - } - values + std::array::from_fn(|index| self.moving_average_at_end(end, lookbacks[index])) } fn moving_average_at_end(&self, end: usize, lookback: usize) -> Option { @@ -5409,82 +5399,6 @@ mod tests { ); } - #[test] - #[ignore = "manual release-mode duplicate rolling lookback benchmark"] - fn benchmark_adjusted_close_reuses_duplicate_lookbacks() { - use std::hint::black_box; - use std::time::Instant; - - let data = adjusted_close_benchmark_data(); - let symbol_id = data.symbol_id("000001.SZ").expect("symbol id"); - let series = data - .adjusted_close_series_by_symbol_id(symbol_id) - .expect("adjusted close series"); - let lookbacks = [1usize, 2, 3, 1, 2, 3, 1]; - let end = 3usize; - let iterations = 3_000_000usize; - let mut repeated_nanos = 0u128; - let mut reused_nanos = 0u128; - let mut repeated_checksum = 0.0; - let mut reused_checksum = 0.0; - - for sample in 0..6 { - let measure_repeated = || { - let started = Instant::now(); - let mut checksum = 0.0; - for _ in 0..iterations { - let values = std::array::from_fn::<_, 7, _>(|index| { - series.moving_average_at_end(black_box(end), black_box(lookbacks[index])) - }); - checksum += black_box(values).into_iter().flatten().sum::(); - } - (started.elapsed().as_nanos(), checksum) - }; - let measure_reused = || { - let started = Instant::now(); - let mut checksum = 0.0; - for _ in 0..iterations { - checksum += black_box( - series.moving_averages_at_end(black_box(end), black_box(&lookbacks)), - ) - .into_iter() - .flatten() - .sum::(); - } - (started.elapsed().as_nanos(), checksum) - }; - let (baseline, candidate) = if sample % 2 == 0 { - (measure_repeated(), measure_reused()) - } else { - let candidate = measure_reused(); - let baseline = measure_repeated(); - (baseline, candidate) - }; - repeated_nanos += baseline.0; - repeated_checksum += baseline.1; - reused_nanos += candidate.0; - reused_checksum += candidate.1; - } - - assert_eq!(repeated_checksum, reused_checksum); - assert!(repeated_checksum > 0.0); - let repeated_seconds = repeated_nanos as f64 / 1_000_000_000.0; - let reused_seconds = reused_nanos as f64 / 1_000_000_000.0; - eprintln!( - "{}", - serde_json::json!({ - "schemaVersion": "fidc-adjusted-close-duplicate-lookback-benchmark/v1", - "samples": 6, - "iterationsPerSample": iterations, - "lookbacks": lookbacks, - "repeatedSeconds": repeated_seconds, - "reusedSeconds": reused_seconds, - "speedup": repeated_seconds / reused_seconds, - "checksum": repeated_checksum, - }) - ); - } - #[test] #[ignore = "manual component benchmark"] fn benchmark_daily_snapshot_view_lookup() { @@ -5876,58 +5790,6 @@ mod tests { ); } - fn adjusted_close_benchmark_data() -> DataSet { - let dates = [ - NaiveDate::from_ymd_opt(2025, 1, 2).unwrap(), - NaiveDate::from_ymd_opt(2025, 1, 3).unwrap(), - NaiveDate::from_ymd_opt(2025, 1, 6).unwrap(), - ]; - DataSet::from_components( - vec![Instrument { - symbol: "000001.SZ".to_string(), - name: "000001.SZ".to_string(), - board: "SZ".to_string(), - round_lot: 100, - listed_at: None, - delisted_at: None, - status: "active".to_string(), - }], - dates - .iter() - .enumerate() - .map(|(index, date)| { - market_row( - &date.format("%Y-%m-%d").to_string(), - 10.0 + index as f64, - 100_000, - ) - }) - .collect(), - dates - .iter() - .map(|date| DailyFactorSnapshot { - date: *date, - symbol: "000001.SZ".to_string(), - market_cap_bn: 10.0, - free_float_cap_bn: 8.0, - pe_ttm: 10.0, - turnover_ratio: None, - effective_turnover_ratio: None, - extra_factors: NumericFactorMap::from([( - Cow::Borrowed(BACKWARD_ADJUSTMENT_FACTOR_FIELD), - 1.0, - )]), - }) - .collect(), - Vec::new(), - dates - .iter() - .map(|date| benchmark_row(&date.format("%Y-%m-%d").to_string(), 1_000.0)) - .collect(), - ) - .expect("adjusted close benchmark dataset") - } - fn volume_contract_data(availability: Option<[f64; 3]>) -> DataSet { let dates = [ NaiveDate::parse_from_str("2025-01-02", "%Y-%m-%d").unwrap(),