formualizer_eval/engine/
pass_planner.rs

1//! Global pass warmup planning (flats removed; masks/index placeholders)
2
3use crate::engine::cache::CriteriaKey;
4use crate::engine::tuning::WarmupConfig;
5use formualizer_parse::ASTNode;
6use formualizer_parse::parser::ReferenceType;
7
8/// Plan for what to warm up before evaluation (flats removed)
9#[derive(Debug, Clone, Default)]
10pub struct PassWarmupPlan {
11    pub masks: Vec<CriteriaKey>,
12    pub eq_indexes: Vec<IndexKey>,
13    pub range_indexes: Vec<IndexKey>,
14}
15
16/// Key for column index (Phase 4/5)
17#[derive(Debug, Clone, Hash, Eq, PartialEq)]
18pub struct IndexKey {
19    pub sheet_id: u32,
20    pub column: u32,
21}
22
23/// Information about hot criteria (placeholder)
24#[derive(Debug, Clone)]
25pub struct HotCriteria {
26    pub key: CriteriaKey,
27    pub count: usize,
28}
29
30/// Global pass planner
31pub struct PassPlanner {
32    config: WarmupConfig,
33}
34
35impl PassPlanner {
36    pub fn new(config: WarmupConfig) -> Self {
37        Self { config }
38    }
39
40    /// Analyze multiple target ASTs for batch evaluation (no flats)
41    pub fn analyze_targets(&self, _targets: &[&ASTNode]) -> PassWarmupPlan {
42        if !self.config.warmup_enabled {
43            return PassWarmupPlan::default();
44        }
45        PassWarmupPlan {
46            masks: Vec::new(),
47            eq_indexes: Vec::new(),
48            range_indexes: Vec::new(),
49        }
50    }
51
52    /// Analyze single AST for single-cell evaluation (no flats)
53    pub fn analyze_single(&self, _ast: &ASTNode) -> PassWarmupPlan {
54        if !self.config.warmup_enabled {
55            return PassWarmupPlan::default();
56        }
57        PassWarmupPlan {
58            masks: Vec::new(),
59            eq_indexes: Vec::new(),
60            range_indexes: Vec::new(),
61        }
62    }
63
64    /// Collect references from an AST (no-op for flats)
65    fn collect_references(
66        &self,
67        _ast: &ASTNode,
68        _counts: &mut std::collections::HashMap<String, (usize, usize)>,
69    ) {
70    }
71
72    /// Recursively walk AST nodes (placeholder)
73    fn walk_ast(
74        &self,
75        _node: &ASTNode,
76        _counts: &mut std::collections::HashMap<String, (usize, usize)>,
77    ) {
78    }
79
80    /// Collect criteria from IFS functions (Phase 3 placeholder)
81    fn collect_criteria_from_ifs(&self, _args: &[ASTNode]) {}
82
83    /// Estimate the cell count for a reference (unused)
84    fn estimate_cell_count(&self, _reference: &ReferenceType) -> Option<usize> {
85        Some(0)
86    }
87}