Skip to content

Commit 9145c58

Browse files
committed
Inline all uses of fallback_expr
The `fallback_expr` function was supposed to be a easy to use constructor for the FallbackExpr and a call to `generate` on it. But creating the struct directly specifying the field names makes it easier to read. Signed-off-by: Sahas Subramanian <[email protected]>
1 parent 816d558 commit 9145c58

File tree

8 files changed

+161
-46
lines changed

8 files changed

+161
-46
lines changed

src/graph/formulas/fallback.rs

Lines changed: 108 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -30,13 +30,13 @@ where
3030
}
3131
}
3232

33-
struct FallbackExpr {
33+
pub(crate) struct FallbackExpr {
3434
pub(crate) prefer_meters: bool,
3535
pub(crate) meter_fallback_for_meters: bool,
3636
}
3737

3838
impl FallbackExpr {
39-
fn generate<N: Node, E: Edge>(
39+
pub(crate) fn generate<N: Node, E: Edge>(
4040
&self,
4141
graph: &ComponentGraph<N, E>,
4242
mut component_ids: BTreeSet<u64>,
@@ -198,7 +198,12 @@ impl FallbackExpr {
198198

199199
#[cfg(test)]
200200
mod tests {
201-
use crate::{graph::test_utils::ComponentGraphBuilder, ComponentGraphConfig, Error};
201+
use std::collections::BTreeSet;
202+
203+
use crate::{
204+
graph::{formulas::fallback::FallbackExpr, test_utils::ComponentGraphBuilder},
205+
ComponentGraphConfig, Error,
206+
};
202207

203208
#[test]
204209
fn test_meter_fallback() -> Result<(), Error> {
@@ -217,36 +222,76 @@ mod tests {
217222
assert_eq!(meter_bat_chain.component_id(), 2);
218223

219224
let graph = builder.build(None)?;
220-
let expr = graph.fallback_expr(vec![1], true, true)?;
225+
let expr = FallbackExpr {
226+
prefer_meters: true,
227+
meter_fallback_for_meters: true,
228+
}
229+
.generate(&graph, BTreeSet::from([1]))?;
221230
assert_eq!(expr.to_string(), "COALESCE(#1, #2)");
222231

223-
let expr = graph.fallback_expr(vec![1, 2], true, true)?;
232+
let expr = FallbackExpr {
233+
prefer_meters: true,
234+
meter_fallback_for_meters: true,
235+
}
236+
.generate(&graph, BTreeSet::from([1, 2]))?;
224237
assert_eq!(expr.to_string(), "COALESCE(#1, #2) + COALESCE(#2, #3, 0.0)");
225238

226-
let expr = graph.fallback_expr(vec![1, 2], false, false)?;
239+
let expr = FallbackExpr {
240+
prefer_meters: false,
241+
meter_fallback_for_meters: false,
242+
}
243+
.generate(&graph, BTreeSet::from([1, 2]))?;
227244
assert_eq!(expr.to_string(), "#1 + COALESCE(#3, #2, 0.0)");
228245

229-
let expr = graph.fallback_expr(vec![1, 2], true, false)?;
246+
let expr = FallbackExpr {
247+
prefer_meters: true,
248+
meter_fallback_for_meters: false,
249+
}
250+
.generate(&graph, BTreeSet::from([1, 2]))?;
230251
assert_eq!(expr.to_string(), "#1 + COALESCE(#2, #3, 0.0)");
231252

232-
let expr = graph.fallback_expr(vec![3], true, false)?;
253+
let expr = FallbackExpr {
254+
prefer_meters: true,
255+
meter_fallback_for_meters: false,
256+
}
257+
.generate(&graph, BTreeSet::from([3]))?;
233258
assert_eq!(expr.to_string(), "COALESCE(#2, #3, 0.0)");
234-
let expr = graph.fallback_expr(vec![3], true, true)?;
259+
let expr = FallbackExpr {
260+
prefer_meters: true,
261+
meter_fallback_for_meters: true,
262+
}
263+
.generate(&graph, BTreeSet::from([3]))?;
235264
assert_eq!(expr.to_string(), "COALESCE(#2, #3, 0.0)");
236-
let expr = graph.fallback_expr(vec![2], true, true)?;
265+
let expr = FallbackExpr {
266+
prefer_meters: true,
267+
meter_fallback_for_meters: true,
268+
}
269+
.generate(&graph, BTreeSet::from([2]))?;
237270
assert_eq!(expr.to_string(), "COALESCE(#2, #3, 0.0)");
238271

239272
let graph = builder.build(Some(ComponentGraphConfig {
240273
disable_fallback_components: true,
241274
..Default::default()
242275
}))?;
243-
let expr = graph.fallback_expr(vec![1, 2], false, false)?;
276+
let expr = FallbackExpr {
277+
prefer_meters: false,
278+
meter_fallback_for_meters: false,
279+
}
280+
.generate(&graph, BTreeSet::from([1, 2]))?;
244281
assert_eq!(expr.to_string(), "#1 + #2");
245282

246-
let expr = graph.fallback_expr(vec![1, 2], true, false)?;
283+
let expr = FallbackExpr {
284+
prefer_meters: true,
285+
meter_fallback_for_meters: false,
286+
}
287+
.generate(&graph, BTreeSet::from([1, 2]))?;
247288
assert_eq!(expr.to_string(), "#1 + #2");
248289

249-
let expr = graph.fallback_expr(vec![3], true, false)?;
290+
let expr = FallbackExpr {
291+
prefer_meters: true,
292+
meter_fallback_for_meters: false,
293+
}
294+
.generate(&graph, BTreeSet::from([3]))?;
250295
assert_eq!(expr.to_string(), "#3");
251296

252297
// Add a battery meter with three inverter and three batteries
@@ -256,7 +301,11 @@ mod tests {
256301
assert_eq!(meter_bat_chain.component_id(), 5);
257302

258303
let graph = builder.build(None)?;
259-
let expr = graph.fallback_expr(vec![3, 5], false, false)?;
304+
let expr = FallbackExpr {
305+
prefer_meters: false,
306+
meter_fallback_for_meters: false,
307+
}
308+
.generate(&graph, BTreeSet::from([3, 5]))?;
260309
assert_eq!(
261310
expr.to_string(),
262311
concat!(
@@ -269,7 +318,11 @@ mod tests {
269318
)
270319
);
271320

272-
let expr = graph.fallback_expr(vec![2, 5], true, false)?;
321+
let expr = FallbackExpr {
322+
prefer_meters: true,
323+
meter_fallback_for_meters: false,
324+
}
325+
.generate(&graph, BTreeSet::from([2, 5]))?;
273326
assert_eq!(
274327
expr.to_string(),
275328
concat!(
@@ -278,7 +331,11 @@ mod tests {
278331
)
279332
);
280333

281-
let expr = graph.fallback_expr(vec![2, 6, 7, 8], true, false)?;
334+
let expr = FallbackExpr {
335+
prefer_meters: true,
336+
meter_fallback_for_meters: false,
337+
}
338+
.generate(&graph, BTreeSet::from([2, 6, 7, 8]))?;
282339
assert_eq!(
283340
expr.to_string(),
284341
concat!(
@@ -287,7 +344,11 @@ mod tests {
287344
)
288345
);
289346

290-
let expr = graph.fallback_expr(vec![2, 7, 8], true, false)?;
347+
let expr = FallbackExpr {
348+
prefer_meters: true,
349+
meter_fallback_for_meters: false,
350+
}
351+
.generate(&graph, BTreeSet::from([2, 7, 8]))?;
291352
assert_eq!(
292353
expr.to_string(),
293354
"COALESCE(#2, #3, 0.0) + COALESCE(#7, 0.0) + COALESCE(#8, 0.0)"
@@ -297,16 +358,32 @@ mod tests {
297358
disable_fallback_components: true,
298359
..Default::default()
299360
}))?;
300-
let expr = graph.fallback_expr(vec![3, 5], false, false)?;
361+
let expr = FallbackExpr {
362+
prefer_meters: false,
363+
meter_fallback_for_meters: false,
364+
}
365+
.generate(&graph, BTreeSet::from([3, 5]))?;
301366
assert_eq!(expr.to_string(), "#3 + #5");
302367

303-
let expr = graph.fallback_expr(vec![2, 5], true, false)?;
368+
let expr = FallbackExpr {
369+
prefer_meters: true,
370+
meter_fallback_for_meters: false,
371+
}
372+
.generate(&graph, BTreeSet::from([2, 5]))?;
304373
assert_eq!(expr.to_string(), "#2 + #5");
305374

306-
let expr = graph.fallback_expr(vec![2, 6, 7, 8], true, false)?;
375+
let expr = FallbackExpr {
376+
prefer_meters: true,
377+
meter_fallback_for_meters: false,
378+
}
379+
.generate(&graph, BTreeSet::from([2, 6, 7, 8]))?;
307380
assert_eq!(expr.to_string(), "#2 + #6 + #7 + #8");
308381

309-
let expr = graph.fallback_expr(vec![2, 7, 8], true, false)?;
382+
let expr = FallbackExpr {
383+
prefer_meters: true,
384+
meter_fallback_for_meters: false,
385+
}
386+
.generate(&graph, BTreeSet::from([2, 7, 8]))?;
310387
assert_eq!(expr.to_string(), "#2 + #7 + #8");
311388

312389
let meter = builder.meter();
@@ -321,7 +398,11 @@ mod tests {
321398
assert_eq!(pv_inverter.component_id(), 14);
322399

323400
let graph = builder.build(None)?;
324-
let expr = graph.fallback_expr(vec![5, 12], true, false)?;
401+
let expr = FallbackExpr {
402+
prefer_meters: true,
403+
meter_fallback_for_meters: false,
404+
}
405+
.generate(&graph, BTreeSet::from([5, 12]))?;
325406
assert_eq!(
326407
expr.to_string(),
327408
concat!(
@@ -330,7 +411,11 @@ mod tests {
330411
)
331412
);
332413

333-
let expr = graph.fallback_expr(vec![7, 14], false, false)?;
414+
let expr = FallbackExpr {
415+
prefer_meters: false,
416+
meter_fallback_for_meters: false,
417+
}
418+
.generate(&graph, BTreeSet::from([7, 14]))?;
334419
assert_eq!(expr.to_string(), "COALESCE(#7, 0.0) + COALESCE(#14, 0.0)");
335420

336421
Ok(())

src/graph/formulas/generators/battery.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use std::collections::BTreeSet;
77

88
use crate::component_category::CategoryPredicates;
99
use crate::graph::formulas::expr::Expr;
10+
use crate::graph::formulas::fallback::FallbackExpr;
1011
use crate::graph::formulas::AggregationFormula;
1112
use crate::{ComponentGraph, Edge, Error, Node};
1213

@@ -54,9 +55,12 @@ where
5455
return Ok(AggregationFormula::new(Expr::number(0.0)));
5556
}
5657

57-
self.graph
58-
.fallback_expr(self.inverter_ids, false, false)
59-
.map(AggregationFormula::new)
58+
FallbackExpr {
59+
prefer_meters: false,
60+
meter_fallback_for_meters: false,
61+
}
62+
.generate(self.graph, self.inverter_ids.clone())
63+
.map(AggregationFormula::new)
6064
}
6165

6266
pub(super) fn find_inverter_ids(

src/graph/formulas/generators/chp.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use std::collections::BTreeSet;
77

88
use crate::component_category::CategoryPredicates;
99
use crate::graph::formulas::expr::Expr;
10+
use crate::graph::formulas::fallback::FallbackExpr;
1011
use crate::graph::formulas::AggregationFormula;
1112
use crate::{ComponentGraph, Edge, Error, Node};
1213

@@ -58,9 +59,12 @@ where
5859
}
5960
}
6061

61-
self.graph
62-
.fallback_expr(self.chp_ids, false, false)
63-
.map(AggregationFormula::new)
62+
FallbackExpr {
63+
prefer_meters: false,
64+
meter_fallback_for_meters: false,
65+
}
66+
.generate(self.graph, self.chp_ids.clone())
67+
.map(AggregationFormula::new)
6468
}
6569
}
6670

src/graph/formulas/generators/consumer.rs

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,9 @@ use std::collections::{BTreeMap, BTreeSet};
77

88
use super::super::expr::Expr;
99
use crate::{
10-
component_category::CategoryPredicates, graph::formulas::AggregationFormula, ComponentGraph,
11-
Edge, Error, Node,
10+
component_category::CategoryPredicates,
11+
graph::formulas::{fallback::FallbackExpr, AggregationFormula},
12+
ComponentGraph, Edge, Error, Node,
1213
};
1314

1415
pub(crate) struct ConsumerFormulaBuilder<'a, N, E>
@@ -95,7 +96,11 @@ where
9596
// Subtract each successor from the expression.
9697
for successor in successors {
9798
let successor_expr = if successor.1.is_meter() {
98-
self.graph.fallback_expr([successor.0], true, false)?
99+
FallbackExpr {
100+
prefer_meters: true,
101+
meter_fallback_for_meters: false,
102+
}
103+
.generate(self.graph, BTreeSet::from([successor.0]))?
99104
} else {
100105
Expr::from(successor.1)
101106
};

src/graph/formulas/generators/ev_charger.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ use std::collections::BTreeSet;
77

88
use crate::component_category::CategoryPredicates;
99
use crate::graph::formulas::expr::Expr;
10+
use crate::graph::formulas::fallback::FallbackExpr;
1011
use crate::graph::formulas::AggregationFormula;
1112
use crate::{ComponentGraph, Edge, Error, Node};
1213

@@ -61,9 +62,12 @@ where
6162
}
6263
}
6364

64-
self.graph
65-
.fallback_expr(self.ev_charger_ids, false, false)
66-
.map(AggregationFormula::new)
65+
FallbackExpr {
66+
prefer_meters: false,
67+
meter_fallback_for_meters: false,
68+
}
69+
.generate(self.graph, self.ev_charger_ids.clone())
70+
.map(AggregationFormula::new)
6771
}
6872
}
6973

src/graph/formulas/generators/grid.rs

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,10 @@
33

44
//! This module contains the methods for generating grid formulas.
55
6+
use std::collections::BTreeSet;
7+
68
use crate::{
7-
graph::formulas::{expr::Expr, AggregationFormula},
9+
graph::formulas::{expr::Expr, fallback::FallbackExpr, AggregationFormula},
810
ComponentGraph, Edge, Error, Node,
911
};
1012

@@ -33,9 +35,11 @@ where
3335
pub fn build(self) -> Result<AggregationFormula, Error> {
3436
let mut expr = None;
3537
for comp in self.graph.successors(self.graph.root_id)? {
36-
let comp = self
37-
.graph
38-
.fallback_expr([comp.component_id()], true, true)?;
38+
let comp = FallbackExpr {
39+
prefer_meters: true,
40+
meter_fallback_for_meters: true,
41+
}
42+
.generate(self.graph, BTreeSet::from([comp.component_id()]))?;
3943
expr = match expr {
4044
None => Some(comp),
4145
Some(e) => Some(comp + e),

src/graph/formulas/generators/producer.rs

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,11 @@
33

44
//! This module contains the methods for generating producer formulas.
55
6+
use std::collections::BTreeSet;
7+
68
use super::super::expr::Expr;
79
use crate::component_category::CategoryPredicates;
10+
use crate::graph::formulas::fallback::FallbackExpr;
811
use crate::graph::formulas::AggregationFormula;
912
use crate::{ComponentGraph, Edge, Error, Node};
1013

@@ -45,10 +48,12 @@ where
4548
petgraph::Direction::Outgoing,
4649
false,
4750
)? {
48-
let comp_expr = self
49-
.graph
50-
.fallback_expr([component_id], false, false)?
51-
.min(Expr::number(0.0));
51+
let comp_expr = FallbackExpr {
52+
prefer_meters: false,
53+
meter_fallback_for_meters: false,
54+
}
55+
.generate(self.graph, BTreeSet::from([component_id]))?
56+
.min(Expr::number(0.0));
5257
expr = match expr {
5358
None => Some(comp_expr),
5459
Some(e) => Some(e + comp_expr),

0 commit comments

Comments
 (0)