Coverage for test/unit/elements/aggregation/test_generator.py: 99%
261 statements
« prev ^ index » next coverage.py v7.6.12, created at 2025-03-12 17:09 +0000
« prev ^ index » next coverage.py v7.6.12, created at 2025-03-12 17:09 +0000
1import unittest
3import bim2sim.elements.aggregation.hvac_aggregations
4from bim2sim.kernel.decision.decisionhandler import DebugDecisionHandler
5from bim2sim.elements import aggregation
6from bim2sim.elements import hvac_elements as hvac
7from bim2sim.elements.graphs.hvac_graph import HvacGraph
8from bim2sim.elements.mapping.units import ureg
9from bim2sim.tasks.hvac import expansiontanks, dead_ends
10from test.unit.elements.helper import SetupHelperHVAC
13class GeneratorHelper(SetupHelperHVAC):
15 def get_setup_boiler_with_bypass(self):
16 """Simple generator system made of boiler, pump, bypass, expansion
17 tank, distributor and pipes"""
18 flags = {}
19 with self.flag_manager(flags):
20 # generator circuit
21 boiler = self.element_generator(hvac.Boiler, rated_power=200)
22 gen_vl_a = [
23 self.element_generator(hvac.Pipe, length=100, diameter=40)
24 for i in range(3)]
25 h_pump = self.element_generator(
26 hvac.Pump, rated_power=2.2, rated_height=12,
27 rated_volume_flow=8)
28 gen_vl_b1 = [
29 self.element_generator(
30 hvac.Pipe, flags=['strand1'], length=100, diameter=40)
31 for i in range(2)]
32 gen_vl_b2 = [
33 self.element_generator(
34 hvac.Pipe, flags=['strand1'], length=100, diameter=40)
35 for i in range(3)]
36 distributor = self.element_generator(
37 hvac.Distributor, flags=['distributor'], n_ports=4) # volume=80
38 gen_rl_a = [
39 self.element_generator(hvac.Pipe, length=100, diameter=40)
40 for i in range(4)]
41 fitting = self.element_generator(
42 hvac.PipeFitting, n_ports=3, diameter=40, length=60)
43 fitting_bp_1 = self.element_generator(
44 hvac.PipeFitting, n_ports=3, diameter=40, length=60)
45 fitting_bp_2 = self.element_generator(
46 hvac.PipeFitting, n_ports=3, diameter=40, length=60)
47 gen_rl_b1 = [
48 self.element_generator(hvac.Pipe, length=100, diameter=40)
49 for i in range(2)]
50 gen_rl_b2 = [
51 self.element_generator(hvac.Pipe, length=100, diameter=40)
52 for i in range(2)]
53 gen_rl_c = [
54 self.element_generator(
55 hvac.Pipe, flags=['strand2'], length=(1 + i) * 40,
56 diameter=15)
57 for i in range(1)]
58 tank = self.element_generator(hvac.Storage, n_ports=1)
59 bypass = [
60 self.element_generator(
61 hvac.Pipe, flags=['bypass'], length=60, diameter=30),
62 self.element_generator(
63 hvac.Valve, flags=['bypass'], length=10, diameter=30),
64 self.element_generator(
65 hvac.Pipe, flags=['bypass'], length=60, diameter=30)]
66 pipe_outer_vl_distr = [
67 self.element_generator(
68 hvac.Pipe, flags=['outer_vl'], length=100, diameter=40)
69 for i in range(2)]
70 pipe_outer_rl_distr = [
71 self.element_generator(
72 hvac.Pipe, flags=['outer_rl'], length=100, diameter=40)
73 for i in range(2)]
75 # connect
76 gen_vl = [boiler, *gen_vl_a, h_pump]
77 self.connect_strait(gen_vl)
78 self.connect_strait([h_pump, *gen_rl_b1, fitting_bp_1])
79 self.connect_strait([fitting_bp_1, *gen_rl_b2, distributor])
80 self.connect_strait([distributor, *gen_rl_a, fitting])
81 self.connect_strait([fitting, *gen_vl_b1, fitting_bp_2])
82 self.connect_strait([fitting_bp_2, *gen_vl_b2, boiler])
83 self.connect_strait([*gen_rl_c, tank])
84 self.connect_strait([*bypass])
85 self.connect_strait([*pipe_outer_rl_distr])
86 self.connect_strait([*pipe_outer_vl_distr])
87 pipe_outer_vl_distr[-1].ports[-1].connect(
88 pipe_outer_rl_distr[0].ports[0])
89 distributor.ports[2].connect(pipe_outer_vl_distr[0].ports[0])
90 distributor.ports[3].connect(pipe_outer_rl_distr[-1].ports[-1])
91 fitting.ports[2].connect(gen_rl_c[0].ports[0])
92 fitting_bp_1.ports[2].connect(bypass[0].ports[0])
93 fitting_bp_2.ports[2].connect(bypass[-1].ports[-1])
95 # full system
96 gen_circuit = [
97 boiler, *gen_vl_a, h_pump, *gen_vl_b1, *gen_vl_b2, distributor,
98 *gen_rl_a, fitting, fitting_bp_1, fitting_bp_2, *bypass, *gen_rl_b1,
99 *gen_rl_b2, *gen_rl_c, tank, *pipe_outer_vl_distr,
100 *pipe_outer_rl_distr
101 ]
103 return HvacGraph(gen_circuit), flags
105 def get_setup_two_seperate_boilers(self):
106 """Simple generator system made of boiler, pump, bypass, expansion
107 tank, distributor and pipes, bufferstorage"""
108 flags = {}
109 with self.flag_manager(flags):
110 # generator circuit 1
111 boiler = self.element_generator(hvac.Boiler, rated_power=200)
112 gen_vl_a = [
113 self.element_generator(hvac.Pipe, length=100, diameter=40)
114 for i in range(3)]
115 h_pump = self.element_generator(
116 hvac.Pump, rated_power=2.2, rated_height=12,
117 rated_volume_flow=8)
118 gen_vl_b1 = [
119 self.element_generator(
120 hvac.Pipe, flags=['strand1'], length=100, diameter=40)
121 for i in range(2)]
122 gen_vl_b2 = [
123 self.element_generator(
124 hvac.Pipe, flags=['strand1'], length=100, diameter=40)
125 for i in range(3)]
126 distributor = self.element_generator(hvac.Distributor, flags=[
127 'distributor'], n_ports=4) # volume=80
128 gen_rl_a = [
129 self.element_generator(hvac.Pipe, length=100, diameter=40)
130 for i in range(4)]
131 fitting = self.element_generator(
132 hvac.PipeFitting, n_ports=3, diameter=40, length=60)
133 fitting_bp_1 = self.element_generator(
134 hvac.PipeFitting, n_ports=3, diameter=40, length=60)
135 fitting_bp_2 = self.element_generator(
136 hvac.PipeFitting, n_ports=3, diameter=40, length=60)
137 gen_rl_b1 = [
138 self.element_generator(hvac.Pipe, length=100, diameter=40)
139 for i in range(2)]
140 gen_rl_b2 = [
141 self.element_generator(hvac.Pipe, length=100, diameter=40)
142 for i in range(2)]
143 gen_rl_c = [
144 self.element_generator(
145 hvac.Pipe, flags=['strand2'], length=(1 + i) * 40,
146 diameter=15)
147 for i in range(3)
148 ]
149 tank = self.element_generator(hvac.Storage, n_ports=1)
150 bypass = [self.element_generator(
151 hvac.Pipe, flags=['bypass'], length=60, diameter=30)
152 for i in range(3)]
153 # connect
154 gen_vl = [boiler, *gen_vl_a, h_pump]
155 self.connect_strait(gen_vl)
156 self.connect_strait([h_pump, *gen_rl_b1, fitting_bp_1])
157 self.connect_strait([fitting_bp_1, *gen_rl_b2, distributor])
158 self.connect_strait([distributor, *gen_rl_a, fitting])
159 self.connect_strait([fitting, *gen_vl_b1, fitting_bp_2])
160 self.connect_strait([fitting_bp_2, *gen_vl_b2, boiler])
161 self.connect_strait([*gen_rl_c, tank])
162 self.connect_strait([*bypass])
163 fitting.ports[2].connect(gen_rl_c[0].ports[0])
164 fitting_bp_1.ports[2].connect(bypass[0].ports[0])
165 fitting_bp_2.ports[2].connect(bypass[-1].ports[-1])
167 # generator circuit 2
168 with self.flag_manager(flags):
169 boiler2 = self.element_generator(hvac.Boiler, rated_power=200)
170 gen_vl_a2 = [
171 self.element_generator(hvac.Pipe, length=100, diameter=40)
172 for i in range(3)]
173 h_pump2 = self.element_generator(
174 hvac.Pump, rated_power=2.2, rated_height=12,
175 rated_volume_flow=8)
176 gen_vl_b12 = [
177 self.element_generator(
178 hvac.Pipe, flags=['strand12'], length=100, diameter=40)
179 for i in range(2)]
180 gen_vl_b22 = [
181 self.element_generator(
182 hvac.Pipe, flags=['strand12'], length=100, diameter=40)
183 for i in range(3)]
184 distributor2 = self.element_generator(hvac.Distributor, flags=[
185 'distributor2'], n_ports=4) # volume=80
186 gen_rl_a2 = [
187 self.element_generator(hvac.Pipe, length=100, diameter=40)
188 for i in range(4)]
189 fitting2 = self.element_generator(
190 hvac.PipeFitting, n_ports=3, diameter=40, length=60)
191 fitting_bp_12 = self.element_generator(
192 hvac.PipeFitting, n_ports=3, diameter=40, length=60)
193 fitting_bp_22 = self.element_generator(
194 hvac.PipeFitting, n_ports=3, diameter=40, length=60)
195 gen_rl_b12 = [
196 self.element_generator(hvac.Pipe, length=100, diameter=40)
197 for i in range(2)]
198 gen_rl_b22 = [
199 self.element_generator(hvac.Pipe, length=100, diameter=40)
200 for i in range(2)]
201 gen_rl_c2 = [
202 self.element_generator(
203 hvac.Pipe, flags=['strand22'], length=(1 + i) * 40,
204 diameter=15)
205 for i in range(3)
206 ]
207 tank2 = self.element_generator(hvac.Storage, n_ports=1)
208 bypass2 = [self.element_generator(
209 hvac.Pipe, flags=['bypass2'], length=60, diameter=30)
210 for i in range(3)]
211 # connect
213 gen_vl2 = [boiler2, *gen_vl_a2, h_pump2]
214 self.connect_strait(gen_vl2)
215 self.connect_strait([h_pump2, *gen_rl_b12, fitting_bp_12])
216 self.connect_strait([fitting_bp_12, *gen_rl_b22, distributor2])
217 self.connect_strait([distributor2, *gen_rl_a2, fitting2])
218 self.connect_strait([fitting2, *gen_vl_b12, fitting_bp_22])
219 self.connect_strait([fitting_bp_22, *gen_vl_b22, boiler2])
220 self.connect_strait([*gen_rl_c2, tank2])
221 self.connect_strait([*bypass2])
222 fitting2.ports[2].connect(gen_rl_c2[0].ports[0])
223 fitting_bp_12.ports[2].connect(bypass2[0].ports[0])
224 fitting_bp_22.ports[2].connect(bypass2[-1].ports[-1])
226 # connection between two systems
227 with self.flag_manager(flags):
228 con_sys_1_vl = [
229 self.element_generator(hvac.Pipe, length=100, diameter=40)
230 for i in range(2)]
231 con_sys_2_vl = [
232 self.element_generator(hvac.Pipe, length=100, diameter=40)
233 for i in range(2)]
234 con_sys_1_rl = [
235 self.element_generator(hvac.Pipe, length=100, diameter=40)
236 for i in range(2)]
237 con_sys_2_rl = [
238 self.element_generator(hvac.Pipe, length=100, diameter=40)
239 for i in range(2)]
240 con_fitting_vl = self.element_generator(
241 hvac.PipeFitting, n_ports=3, diameter=40, length=60)
242 con_fitting_rl = self.element_generator(
243 hvac.PipeFitting, n_ports=3, diameter=40, length=60)
244 dead_end_vl = [
245 self.element_generator(hvac.Pipe, length=100, diameter=40)
246 for i in range(2)]
247 dead_end_rl = [
248 self.element_generator(hvac.Pipe, length=100, diameter=40)
249 for i in range(2)]
250 self.connect_strait([*con_sys_1_vl])
251 self.connect_strait([*con_sys_2_vl])
252 self.connect_strait([*con_sys_1_rl])
253 self.connect_strait([*con_sys_2_rl])
254 self.connect_strait([*dead_end_vl])
255 self.connect_strait([*dead_end_rl])
256 con_fitting_vl.ports[0].connect(con_sys_1_vl[-1].ports[-1])
257 con_fitting_vl.ports[1].connect(con_sys_2_vl[-1].ports[-1])
258 con_fitting_vl.ports[2].connect(dead_end_vl[0].ports[0])
259 con_fitting_rl.ports[0].connect(dead_end_rl[-1].ports[-1])
260 con_fitting_rl.ports[1].connect(con_sys_1_rl[0].ports[0])
261 con_fitting_rl.ports[2].connect(con_sys_2_rl[0].ports[0])
262 distributor.ports[2].connect(con_sys_1_vl[0].ports[0])
263 distributor.ports[3].connect(con_sys_1_rl[-1].ports[-1])
264 distributor2.ports[2].connect(con_sys_2_vl[0].ports[0])
265 distributor2.ports[3].connect(con_sys_2_rl[-1].ports[-1])
267 # full system
268 gen_circuit = [
269 boiler, *gen_vl_a, h_pump, *gen_vl_b1, *gen_vl_b2, distributor,
270 *gen_rl_a, fitting, fitting_bp_1, fitting_bp_2, *bypass, *gen_rl_b1,
271 *gen_rl_b2, *gen_rl_c, tank,
272 boiler2, *gen_vl_a2, h_pump2, *gen_vl_b12, *gen_vl_b22,
273 distributor2,
274 *gen_rl_a2, fitting2, fitting_bp_12, fitting_bp_22, *bypass2,
275 *gen_rl_b12,
276 *gen_rl_b22, *gen_rl_c2, tank2, *con_sys_1_vl, *con_sys_2_vl,
277 *con_sys_1_rl, *con_sys_2_rl, *dead_end_vl, *dead_end_rl,
278 con_fitting_vl, con_fitting_rl,
280 ]
282 return HvacGraph(gen_circuit), flags
284 def setup_get_two_parallel_boilers(self):
285 """Generator system made of two boilers, two pumps, 1 bypass, expansion
286 tank, distributor and pipes.
288 .. image: two_parallel_boilers_test.png
289 """
290 flags = {}
291 with self.flag_manager(flags):
292 # generator circuit
293 boiler1 = self.element_generator(hvac.Boiler, rated_power=200,
294 flags=['boiler200kW'])
295 boiler2 = self.element_generator(hvac.Boiler, rated_power=400,
296 flags=['boiler400kW'])
297 h_pump1 = self.element_generator(hvac.Pump, rated_power=2.2,
298 rated_height=12,
299 rated_volume_flow=8)
300 h_pump2 = self.element_generator(hvac.Pump, rated_power=2.2,
301 rated_height=12,
302 rated_volume_flow=8)
303 gen_strand1 = [self.element_generator(hvac.Pipe, flags=[
304 'strand1'], length=100, diameter=40) for i in range(2)]
305 gen_strand2 = [self.element_generator(hvac.Pipe, flags=[
306 'strand2'], length=100, diameter=40) for i in range(3)]
307 gen_strand3 = [self.element_generator(hvac.Pipe, flags=[
308 'strand3'], length=100, diameter=40) for i in range(2)]
309 gen_strand4 = [self.element_generator(hvac.Pipe, flags=[
310 'strand4'], length=100, diameter=40) for i in range(3)]
311 gen_strand5 = [self.element_generator(hvac.Pipe, flags=[
312 'strand5'], length=100, diameter=40) for i in range(2)]
313 gen_strand6 = [self.element_generator(hvac.Pipe, flags=[
314 'strand6'], length=100, diameter=40) for i in range(1)]
315 gen_strand7 = [self.element_generator(hvac.Pipe, flags=[
316 'strand7'], length=100, diameter=40) for i in range(1)]
317 gen_strand8 = [self.element_generator(hvac.Pipe, flags=[
318 'strand8'], length=100, diameter=40) for i in range(1)]
319 gen_strand9 = [self.element_generator(hvac.Pipe, flags=[
320 'strand9'], length=100, diameter=40) for i in range(1)]
321 gen_strand10 = [self.element_generator(hvac.Pipe, flags=[
322 'strand10'], length=100, diameter=40) for i in range(1)]
323 gen_strand11 = [self.element_generator(hvac.Pipe, flags=[
324 'strand11'], length=100, diameter=40) for i in range(3)]
325 distributor = self.element_generator(
326 hvac.Distributor, flags=['distributor'], n_ports=4)
327 fitting1 = self.element_generator(hvac.PipeFitting, n_ports=3,
328 diameter=40, length=60)
329 fitting2 = self.element_generator(hvac.PipeFitting, n_ports=3,
330 diameter=40, length=60)
331 fitting3 = self.element_generator(hvac.PipeFitting, n_ports=3,
332 diameter=40, length=60)
333 fitting4 = self.element_generator(hvac.PipeFitting, n_ports=3,
334 diameter=40, length=60)
335 pipe_outer_vl_distr = [
336 self.element_generator(
337 hvac.Pipe, flags=['outer_vl'], length=100, diameter=40)
338 for i in range(2)]
339 pipe_outer_rl_distr = [
340 self.element_generator(
341 hvac.Pipe, flags=['outer_rl'], length=100, diameter=40)
342 for i in range(2)]
344 # connect
345 gen_dis = [*gen_strand1, distributor, *gen_strand2]
346 gen_boi1 = [
347 *gen_strand3, h_pump2, *gen_strand4, boiler2, *gen_strand5]
348 gen_boi2_rl = [*gen_strand6, h_pump1, *gen_strand7]
349 gen_boi2 = [*gen_strand8, boiler1, *gen_strand9]
350 self.connect_strait(gen_dis)
351 self.connect_strait(gen_boi1)
352 self.connect_strait(gen_boi2_rl)
353 self.connect_strait(gen_boi2)
354 self.connect_strait([*gen_strand10])
355 self.connect_strait([*gen_strand11])
356 self.connect_strait([*pipe_outer_vl_distr, *pipe_outer_rl_distr])
357 fitting1.ports[0].connect(gen_strand1[0].ports[0])
358 gen_strand2[-1].ports[-1].connect(fitting2.ports[0])
359 fitting2.ports[1].connect(gen_strand3[0].ports[0])
360 gen_strand5[-1].ports[-1].connect(fitting1.ports[1])
361 fitting2.ports[2].connect(gen_strand6[0].ports[0])
362 gen_strand7[-1].ports[-1].connect(fitting3.ports[0])
363 fitting3.ports[1].connect(gen_strand8[0].ports[0])
364 gen_strand9[-1].ports[-1].connect(fitting4.ports[0])
365 fitting4.ports[1].connect(gen_strand10[0].ports[0])
366 gen_strand10[-1].ports[-1].connect(fitting1.ports[2])
367 fitting3.ports[2].connect(gen_strand11[0].ports[0])
368 gen_strand11[-1].ports[-1].connect(fitting4.ports[2])
369 distributor.ports[2].connect(pipe_outer_vl_distr[0].ports[0])
370 distributor.ports[3].connect(pipe_outer_rl_distr[-1].ports[-1])
371 # full system
372 gen_circuit = [
373 distributor, *gen_strand1, *gen_strand2, *gen_strand3, *gen_strand4,
374 *gen_strand5, *gen_strand6, *gen_strand7, *gen_strand8,
375 *gen_strand9, *gen_strand10, *gen_strand11, boiler1, boiler2,
376 fitting1, fitting2, fitting3, fitting4, h_pump1, h_pump2,
377 *pipe_outer_vl_distr, *pipe_outer_rl_distr
378 ]
380 return HvacGraph(gen_circuit), flags
383class TestGeneratorAggregation(unittest.TestCase):
384 helper: GeneratorHelper = None
386 @classmethod
387 def setUpClass(cls):
388 cls.helper = GeneratorHelper()
390 def tearDown(self):
391 self.helper.reset()
393 def test_simple_boiler_with_bypass(self):
394 graph, flags = self.helper.get_setup_boiler_with_bypass()
395 pot_tanks = \
396 expansiontanks.ExpansionTanks.identify_expansion_tanks(graph)
397 handler = DebugDecisionHandler(answers=[])
398 handler.handle(expansiontanks.ExpansionTanks.decide_expansion_tanks(
399 graph, pot_tanks, force=True))
400 graph, n_removed_tanks = handler.return_value
401 dead_ends_found = dead_ends.DeadEnds.identify_dead_ends(graph)
402 handler = DebugDecisionHandler(answers=[])
403 handler.handle(dead_ends.DeadEnds.decide_dead_ends(
404 graph, dead_ends_found, force=True))
405 graph, n_removed_dead_ends = handler.return_value
406 matches, metas = bim2sim.elements.aggregation.hvac_aggregations.GeneratorOneFluid.find_matches(graph)
407 self.assertEqual(
408 len(matches), 1,
409 "There is 1 case for generation cycles but 'find_matches' "
410 "returned %d" % len(matches)
411 )
412 agg_generator = bim2sim.elements.aggregation.hvac_aggregations.GeneratorOneFluid(
413 graph, matches[0], **metas[0])
414 self.assertEqual(agg_generator.rated_power, 200 * ureg.kilowatt)
415 self.assertTrue(agg_generator._calc_has_pump,
416 "No pump was found in generator cycle but there should"
417 " be one existing")
418 self.assertTrue(agg_generator.has_bypass,
419 "No bypass was found in generator cycle but there "
420 "should be one existing")
421 graph.merge(
422 mapping=agg_generator.get_replacement_mapping(),
423 inner_connections=agg_generator.get_inner_connections(),
424 )
426 def test_two_simple_boiler_with_bypass(self):
427 graph, flags = self.helper.get_setup_two_seperate_boilers()
428 pot_tanks = \
429 expansiontanks.ExpansionTanks.identify_expansion_tanks(graph)
430 handler = DebugDecisionHandler(answers=[])
431 handler.handle(expansiontanks.ExpansionTanks.decide_expansion_tanks(
432 graph, pot_tanks, force=True))
433 graph, n_removed_tanks = handler.return_value
434 dead_ends_found = dead_ends.DeadEnds.identify_dead_ends(graph)
435 handler = DebugDecisionHandler(answers=[])
436 handler.handle(dead_ends.DeadEnds.decide_dead_ends(
437 graph, dead_ends_found, force=True))
438 graph, n_removed_dead_ends = handler.return_value
439 matches, metas = bim2sim.elements.aggregation.hvac_aggregations.GeneratorOneFluid.find_matches(graph)
440 agg_generators = []
441 self.assertEqual(
442 len(matches), 2,
443 "There are 2 generation cycles but 'find_matches' "
444 "returned %d" % len(matches)
445 )
447 i = 0
448 for match, meta in zip(matches, metas):
449 agg_generator = bim2sim.elements.aggregation.hvac_aggregations.GeneratorOneFluid(graph, match, **meta)
450 i += 1
451 agg_generators.append(agg_generator)
452 self.assertEqual(agg_generator.rated_power, 200 * ureg.kilowatt)
453 self.assertTrue(agg_generator.has_pump,
454 "No pump was found in generator cycle but there"
455 " should be one existing")
456 self.assertTrue(agg_generator._calc_has_pump,
457 "No pump was found in generator cycle but there"
458 " should be one existing")
460 self.assertEqual(len(matches), 2, f"2 Generator should be created but "
461 f"only {len(matches)} where created ")
463 mappings = []
464 for agg_generator in agg_generators[::-1]:
465 mapping = agg_generator.get_replacement_mapping()
466 mappings.append(mapping)
467 graph.merge(
468 mapping=agg_generator.get_replacement_mapping(),
469 inner_connections=agg_generator.get_inner_connections(),
470 )
472 def test_two_parallel_boilers_with_bypass(self):
473 graph, flags = self.helper.setup_get_two_parallel_boilers()
474 matches, metas = bim2sim.elements.aggregation.hvac_aggregations.GeneratorOneFluid.find_matches(graph)
475 self.assertEqual(
476 len(matches), 2,
477 "There are 2 generation cycles but 'find_matches' returned %d"
478 % len(matches)
479 )
480 i = 0
481 agg_generators = []
482 boiler200kw_guid = [b.guid for b in flags['boiler200kW']]
483 boiler400kw_guid = [b.guid for b in flags['boiler400kW']]
484 for match, meta in zip(matches, metas):
485 agg_generator = bim2sim.elements.aggregation.hvac_aggregations.GeneratorOneFluid(graph, match, **meta)
486 i += 1
487 agg_generators.append(agg_generator)
488 boiler_element = [element for element in agg_generator.elements
489 if isinstance(element, hvac.Boiler)][0]
490 if boiler_element.guid == boiler200kw_guid:
491 self.assertEqual(agg_generator.rated_power, 200 * ureg.kilowatt)
492 if boiler_element.guid == boiler400kw_guid:
493 self.assertEqual(agg_generator.rated_power, 400 * ureg.kilowatt)
494 self.assertTrue(agg_generator._calc_has_pump,
495 "No pump was found in generator cycle but there"
496 " should be one existing")
497 self.assertEqual(len(matches), 2, f"2 Generator should be created but "
498 f"only {len(matches)} where created ")
499 mappings = []
500 for agg_generator in agg_generators[::-1]:
501 mapping = agg_generator.get_replacement_mapping()
502 mappings.append(mapping)
503 graph.merge(
504 mapping=agg_generator.get_replacement_mapping(),
505 inner_connections=agg_generator.get_inner_connections(),
506 )