Skip to content

Commit a54e0d1

Browse files
angusmcbangusmcbkbonney
authored
Check value of pump power and tests (#520)
* Check value of pump power and tests * replace power setter code block with checker utility. * fix check function used * move subclass specific attributes out of Pump and into respective subclasses * fix super init bug --------- Co-authored-by: angusmcb <[email protected]> Co-authored-by: kbonney <[email protected]>
1 parent d4a77e0 commit a54e0d1

File tree

2 files changed

+74
-11
lines changed

2 files changed

+74
-11
lines changed

wntr/network/elements.py

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1126,8 +1126,6 @@ class Pump(Link):
11261126
def __init__(self, name, start_node_name, end_node_name, wn):
11271127
super(Pump, self).__init__(wn, name, start_node_name, end_node_name)
11281128
self._speed_timeseries = TimeSeries(wn._pattern_reg, 1.0)
1129-
self._base_power = None
1130-
self._pump_curve_name = None
11311129
self._efficiency_curve_name = None
11321130
self._energy_price = None
11331131
self._energy_pattern = None
@@ -1348,13 +1346,10 @@ class HeadPump(Pump):
13481346
13491347
"""
13501348

1351-
# def __init__(self, name, start_node_name, end_node_name, wn):
1352-
# super(HeadPump,self).__init__(name, start_node_name,
1353-
# end_node_name, wn)
1354-
# self._curve_coeffs = None
1355-
# self._coeffs_curve_points = None # these are used to verify whether
1356-
# # the pump curve was changed since
1357-
# # the _curve_coeffs were calculated
1349+
def __init__(self, name, start_node_name, end_node_name, wn):
1350+
super(HeadPump,self).__init__(name, start_node_name,
1351+
end_node_name, wn)
1352+
self._pump_curve_name = None
13581353

13591354
def __repr__(self):
13601355
return "<Pump '{}' from '{}' to '{}', pump_type='{}', pump_curve={}, speed={}, status={}>".format(self._link_name,
@@ -1568,6 +1563,10 @@ class PowerPump(Pump):
15681563
setting
15691564
15701565
"""
1566+
def __init__(self, name, start_node_name, end_node_name, wn):
1567+
super(PowerPump,self).__init__(name, start_node_name,
1568+
end_node_name, wn)
1569+
self._base_power = None
15711570

15721571
def __repr__(self):
15731572
return "<Pump '{}' from '{}' to '{}', pump_type='{}', power={}, speed={}, status={}>".format(self._link_name,
@@ -1593,8 +1592,8 @@ def power(self):
15931592
return self._base_power
15941593
@power.setter
15951594
def power(self, value):
1596-
self._curve_reg.remove_usage(self._pump_curve_name, (self._link_name, 'Pump'))
1597-
self._base_power = value
1595+
self._base_power = _check_positive_non_zero_float(value, "Pump power")
1596+
15981597

15991598

16001599
class Valve(Link):

wntr/tests/test_network_elements.py

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
"""
22
Test the wntr.network.elements classes
33
"""
4+
5+
import pytest
46
import unittest
57
from os.path import abspath, dirname, join
68
from unittest import SkipTest
@@ -321,5 +323,67 @@ def test_float_or_none_bad_value(value):
321323
_check_float_or_none(value, "test")
322324

323325

326+
def test_pump_power_on_add_float():
327+
wn = wntr.network.WaterNetworkModel()
328+
wn.add_junction("1")
329+
wn.add_junction("2")
330+
331+
wn.add_pump("pump1", "1", "2", pump_type="POWER", pump_parameter=1000.0)
332+
333+
assert wn.links["pump1"].power == 1000.0
334+
335+
336+
def test_pump_power_on_add_int():
337+
wn = wntr.network.WaterNetworkModel()
338+
wn.add_junction("1")
339+
wn.add_junction("2")
340+
341+
wn.add_pump("pump1", "1", "2", pump_type="POWER", pump_parameter=1000)
342+
343+
assert wn.links["pump1"].power == 1000.0
344+
345+
346+
@pytest.fixture
347+
def power_pump():
348+
wn = wntr.network.WaterNetworkModel()
349+
wn.add_junction("1")
350+
wn.add_junction("2")
351+
wn.add_pump("pump1", "1", "2", pump_type="POWER")
352+
return wn.links["pump1"]
353+
354+
355+
def test_pump_power_set_property_float(power_pump):
356+
power_pump.power = 500.0
357+
358+
assert power_pump.power == 500.0
359+
360+
361+
def test_pump_power_set_property_int(power_pump):
362+
power_pump.power = 500
363+
364+
assert power_pump.power == 500.0
365+
366+
367+
def test_pump_power_set_property_string(power_pump):
368+
power_pump.power = "500"
369+
370+
assert power_pump.power == 500.0
371+
372+
373+
def test_pump_power_set_property_negative(power_pump):
374+
with pytest.raises(ValueError):
375+
power_pump.power = -500
376+
377+
378+
def test_pump_power_set_property_zero(power_pump):
379+
with pytest.raises(ValueError):
380+
power_pump.power = 0
381+
382+
383+
def test_pump_power_set_property_invalid_string(power_pump):
384+
with pytest.raises(ValueError):
385+
power_pump.power = "invalid_string"
386+
387+
324388
if __name__ == "__main__":
325389
unittest.main()

0 commit comments

Comments
 (0)