perf(engine): share immutable daily factor schemas and numeric buffers

This commit is contained in:
boris
2026-09-13 13:02:16 +08:00
committed by boris
parent f7f0ff2951
commit 93809eea1b
3 changed files with 388 additions and 45 deletions
+2 -7
View File
@@ -4389,13 +4389,7 @@ fn normalize_factor_snapshots(
value,
});
}
let already_normalized = snapshot.extra_factors.iter().all(|(field, value)| {
let trimmed = field.as_str().trim().trim_matches('"').trim_matches('\'');
!trimmed.is_empty()
&& trimmed == field.as_str()
&& trimmed.bytes().all(|byte| !byte.is_ascii_uppercase())
&& value.is_finite()
});
let already_normalized = snapshot.extra_factors.has_normalized_finite_entries();
if already_normalized {
return Ok(snapshot);
}
@@ -4465,6 +4459,7 @@ fn normalize_daily_snapshot_bundle(
|row| row.symbol.as_str(),
)?;
sort_rows_by_symbol_if_needed(&mut bundle.market, |row| row.symbol.as_str());
NumericFactorMap::share_rows(bundle.factors.iter_mut().map(|row| &mut row.extra_factors));
bundle.factors = normalize_factor_snapshots(bundle.factors)?;
sort_rows_by_symbol_if_needed(&mut bundle.factors, |row| row.symbol.as_str());
sort_rows_by_symbol_if_needed(&mut bundle.candidates, |row| row.symbol.as_str());