floodmodeller-api 0.5.3.post1__py3-none-any.whl → 0.5.5__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. floodmodeller_api/dat.py +140 -53
  2. floodmodeller_api/hydrology_plus/hydrology_plus_export.py +1 -2
  3. floodmodeller_api/ied.py +1 -1
  4. floodmodeller_api/test/test_dat.py +89 -2
  5. floodmodeller_api/test/test_data/All Units 4_6.DAT +0 -2
  6. floodmodeller_api/test/test_data/All Units 4_6.feb +0 -2
  7. floodmodeller_api/test/test_data/River_Bridge.dat +1453 -0
  8. floodmodeller_api/test/test_data/River_Bridge.gxy +221 -0
  9. floodmodeller_api/test/test_data/River_Bridge_DAT_expected.json +27273 -0
  10. floodmodeller_api/test/test_data/River_Bridge_no_gxy.dat +1453 -0
  11. floodmodeller_api/test/test_data/River_Bridge_no_gxy_DAT_expected.json +26853 -0
  12. floodmodeller_api/test/test_data/duplicate_unit_test.dat +18 -0
  13. floodmodeller_api/test/test_data/duplicate_unit_test_unsupported.dat +28 -0
  14. floodmodeller_api/test/test_data/encoding_test_cp1252.dat +0 -2
  15. floodmodeller_api/test/test_data/encoding_test_utf8.dat +0 -2
  16. floodmodeller_api/test/test_data/remove_dummy_test.dat +19 -0
  17. floodmodeller_api/test/test_gxy.py +98 -0
  18. floodmodeller_api/test/test_json.py +40 -2
  19. floodmodeller_api/test/test_read_file.py +3 -0
  20. floodmodeller_api/test/test_unit.py +12 -0
  21. floodmodeller_api/to_from_json.py +16 -2
  22. floodmodeller_api/toolbox/model_build/structure_log/structure_log.py +8 -8
  23. floodmodeller_api/units/_base.py +30 -0
  24. floodmodeller_api/units/boundaries.py +4 -1
  25. floodmodeller_api/units/conduits.py +1 -1
  26. floodmodeller_api/units/losses.py +2 -2
  27. floodmodeller_api/units/sections.py +36 -0
  28. floodmodeller_api/units/structures.py +60 -13
  29. floodmodeller_api/units/units.py +1 -0
  30. floodmodeller_api/units/unsupported.py +2 -2
  31. floodmodeller_api/validation/validation.py +6 -6
  32. floodmodeller_api/version.py +1 -1
  33. {floodmodeller_api-0.5.3.post1.dist-info → floodmodeller_api-0.5.5.dist-info}/METADATA +1 -1
  34. {floodmodeller_api-0.5.3.post1.dist-info → floodmodeller_api-0.5.5.dist-info}/RECORD +38 -29
  35. {floodmodeller_api-0.5.3.post1.dist-info → floodmodeller_api-0.5.5.dist-info}/WHEEL +0 -0
  36. {floodmodeller_api-0.5.3.post1.dist-info → floodmodeller_api-0.5.5.dist-info}/entry_points.txt +0 -0
  37. {floodmodeller_api-0.5.3.post1.dist-info → floodmodeller_api-0.5.5.dist-info}/licenses/LICENSE.txt +0 -0
  38. {floodmodeller_api-0.5.3.post1.dist-info → floodmodeller_api-0.5.5.dist-info}/top_level.txt +0 -0
@@ -47,6 +47,15 @@ from ._helpers import (
47
47
  )
48
48
 
49
49
 
50
+ def _get_median_coordinate(data):
51
+ # trim rows that have invalid coordinates (0,0)
52
+ data = data[(data["Easting"] != 0) | (data["Northing"] != 0)]
53
+ median_coords = data[["Easting", "Northing"]].median()
54
+ if median_coords.isna().any():
55
+ return None
56
+ return (float(median_coords["Easting"]), float(median_coords["Northing"]))
57
+
58
+
50
59
  class BRIDGE(Unit):
51
60
  """Class to hold and process BRIDGE unit type. The Bridge class supports the three main bridge sub-types in
52
61
  Flood Modeller: Arch, USBPR1978 and Pierloss. Each of these sub-types forms a unique instance of the class
@@ -163,7 +172,7 @@ class BRIDGE(Unit):
163
172
  self.comment = self._remove_unit_name(br_block[0])
164
173
  self._subtype = self._get_first_word(br_block[1])
165
174
  # Extends label line to be correct length before splitting to pick up blank labels
166
- labels = split_n_char(f"{br_block[2]:<{4*self._label_len}}", self._label_len)
175
+ labels = split_n_char(f"{br_block[2]:<{4 * self._label_len}}", self._label_len)
167
176
  self.name = labels[0]
168
177
  self.ds_label = labels[1]
169
178
  self.us_remote_label = labels[2]
@@ -374,7 +383,7 @@ class BRIDGE(Unit):
374
383
  )
375
384
  if self.specify_piers:
376
385
  if self.pier_use_calibration_coeff:
377
- pier_params = f'{self.npiers:>10}{"COEFF":<10}{"":>10}{self.pier_calibration_coeff:>10.3f}'
386
+ pier_params = f"{self.npiers:>10}{'COEFF':<10}{'':>10}{self.pier_calibration_coeff:>10.3f}"
378
387
  else:
379
388
  pier_params = f"{self.npiers:>10}{self.pier_shape:<10}{self.pier_faces:<10}"
380
389
  else:
@@ -589,7 +598,7 @@ class SLUICE(Unit):
589
598
  self._subtype = self._get_first_word(block[1])
590
599
 
591
600
  # Extends label line to be correct length before splitting to pick up blank labels
592
- labels = split_n_char(f"{block[2]:<{3*self._label_len}}", self._label_len)
601
+ labels = split_n_char(f"{block[2]:<{3 * self._label_len}}", self._label_len)
593
602
  self.name = labels[0]
594
603
  self.ds_label = labels[1]
595
604
  self.remote_label = labels[2]
@@ -675,8 +684,8 @@ class SLUICE(Unit):
675
684
  self.weir_length,
676
685
  )
677
686
  if self.subtype == "RADIAL":
678
- params1 += f'{"DEGREES":<10}' if self.use_degrees else f'{"":<10}'
679
- params1 += "FREESLUICE" if self.allow_free_flow_under else f'{"":<10}'
687
+ params1 += f"{'DEGREES':<10}" if self.use_degrees else f"{'':<10}"
688
+ params1 += "FREESLUICE" if self.allow_free_flow_under else f"{'':<10}"
680
689
 
681
690
  # Second parameter line
682
691
  params2 = join_10_char(
@@ -726,7 +735,7 @@ class SLUICE(Unit):
726
735
  # ADD GATES
727
736
  block.append(
728
737
  join_10_char(
729
- f'{"LOGICAL":<10}',
738
+ f"{'LOGICAL':<10}",
730
739
  self.max_movement_rate,
731
740
  self.max_setting,
732
741
  self.min_setting,
@@ -827,7 +836,7 @@ class ORIFICE(Unit):
827
836
  self.flapped = self.subtype == "FLAPPED"
828
837
 
829
838
  # Extends label line to be correct length before splitting to pick up blank labels
830
- labels = split_n_char(f"{block[2]:<{2*self._label_len}}", self._label_len)
839
+ labels = split_n_char(f"{block[2]:<{2 * self._label_len}}", self._label_len)
831
840
  self.name = labels[0]
832
841
  self.ds_label = labels[1]
833
842
  self.comment = self._remove_unit_name(block[0])
@@ -928,7 +937,7 @@ class SPILL(Unit):
928
937
  def _read(self, block):
929
938
  """Function to read a given SPILL block and store data as class attributes"""
930
939
  # Extends label line to be correct length before splitting to pick up blank labels
931
- labels = split_n_char(f"{block[1]:<{2*self._label_len}}", self._label_len)
940
+ labels = split_n_char(f"{block[1]:<{2 * self._label_len}}", self._label_len)
932
941
  self.name = labels[0]
933
942
  self.ds_label = labels[1]
934
943
  self.comment = self._remove_unit_name(block[0])
@@ -984,6 +993,25 @@ class SPILL(Unit):
984
993
  else pd.DataFrame([[0.0, 0.0, 0.0, 0.0]], columns=["X", "Y", "Easting", "Northing"])
985
994
  )
986
995
 
996
+ @property
997
+ def location(self) -> tuple[float, float] | None:
998
+ # for SPILL units, source priority is as follows:
999
+ # 1. GXY location if defined
1000
+ # 2. median location if not (0,0)
1001
+ # 3. None
1002
+ if self._location is not None:
1003
+ return self._location
1004
+
1005
+ try:
1006
+ return _get_median_coordinate(self.data)
1007
+ except (ValueError, IndexError):
1008
+ return None
1009
+
1010
+ @location.setter
1011
+ def location(self, new_value: tuple[float, float] | None) -> None:
1012
+ msg = "Currently unit location is read-only."
1013
+ raise NotImplementedError(msg)
1014
+
987
1015
 
988
1016
  class RNWEIR(Unit):
989
1017
  """Class to hold and process RNWEIR unit type
@@ -1009,7 +1037,7 @@ class RNWEIR(Unit):
1009
1037
  def _read(self, block):
1010
1038
  """Function to read a given RNWEIR block and store data as class attributes"""
1011
1039
  # Extends label line to be correct length before splitting to pick up blank labels
1012
- labels = split_n_char(f"{block[1]:<{2*self._label_len}}", self._label_len)
1040
+ labels = split_n_char(f"{block[1]:<{2 * self._label_len}}", self._label_len)
1013
1041
  self.name = labels[0]
1014
1042
  self.ds_label = labels[1]
1015
1043
  self.comment = self._remove_unit_name(block[0])
@@ -1110,7 +1138,7 @@ class WEIR(Unit):
1110
1138
  def _read(self, block):
1111
1139
  """Function to read a given WEIR block and store data as class attributes"""
1112
1140
  # Extends label line to be correct length before splitting to pick up blank labels
1113
- labels = split_n_char(f"{block[1]:<{2*self._label_len}}", self._label_len)
1141
+ labels = split_n_char(f"{block[1]:<{2 * self._label_len}}", self._label_len)
1114
1142
  self.name = labels[0]
1115
1143
  self.ds_label = labels[1]
1116
1144
  self.comment = self._remove_unit_name(block[0])
@@ -1202,7 +1230,7 @@ class CRUMP(Unit):
1202
1230
  def _read(self, block):
1203
1231
  """Function to read a given CRUMP block and store data as class attributes"""
1204
1232
  # Extends label line to be correct length before splitting to pick up blank labels
1205
- labels = split_n_char(f"{block[1]:<{4*self._label_len}}", self._label_len)
1233
+ labels = split_n_char(f"{block[1]:<{4 * self._label_len}}", self._label_len)
1206
1234
  self.name = labels[0]
1207
1235
  self.ds_label = labels[1]
1208
1236
  self.us_remote_label = labels[2]
@@ -1311,7 +1339,7 @@ class FLAT_V_WEIR(Unit): # noqa: N801
1311
1339
  def _read(self, block):
1312
1340
  """Function to read a given FLAT-V WEIR block and store data as class attributes"""
1313
1341
  # Extends label line to be correct length before splitting to pick up blank labels
1314
- labels = split_n_char(f"{block[1]:<{4*self._label_len}}", self._label_len)
1342
+ labels = split_n_char(f"{block[1]:<{4 * self._label_len}}", self._label_len)
1315
1343
  self.name = labels[0]
1316
1344
  self.ds_label = labels[1]
1317
1345
  self.us_remote_label = labels[2]
@@ -1440,7 +1468,7 @@ class OUTFALL(Unit):
1440
1468
  self.flapped = self.subtype == "FLAPPED"
1441
1469
 
1442
1470
  # Extends label line to be correct length before splitting to pick up blank labels
1443
- labels = split_n_char(f"{block[2]:<{2*self._label_len}}", self._label_len)
1471
+ labels = split_n_char(f"{block[2]:<{2 * self._label_len}}", self._label_len)
1444
1472
  self.name = labels[0]
1445
1473
  self.ds_label = labels[1]
1446
1474
  self.comment = self._remove_unit_name(block[0])
@@ -1660,3 +1688,22 @@ class FLOODPLAIN(Unit):
1660
1688
  msg = f"The DataFrame must only contain columns: {self._required_columns}"
1661
1689
  raise ValueError(msg)
1662
1690
  self._data = new_df
1691
+
1692
+ @property
1693
+ def location(self) -> tuple[float, float] | None:
1694
+ # for FLOODPLAIN units, source priority is as follows:
1695
+ # 1. GXY location if defined
1696
+ # 2. median location if not (0,0)
1697
+ # 3. None
1698
+ if self._location is not None:
1699
+ return self._location
1700
+
1701
+ try:
1702
+ return _get_median_coordinate(self.data)
1703
+ except (ValueError, IndexError):
1704
+ return None
1705
+
1706
+ @location.setter
1707
+ def location(self, new_value: tuple[float, float] | None) -> None:
1708
+ msg = "Currently unit location is read-only."
1709
+ raise NotImplementedError(msg)
@@ -89,6 +89,7 @@ UNSUPPORTED_UNIT_TYPES: dict[str, UnsupportedUnitTypes] = {
89
89
  "SCWEIR": {"group": "structures", "has_subtype": False}, # sharp crested weir
90
90
  "SYPHON": {"group": "structures", "has_subtype": False}, # syphon unit
91
91
  "TIDBDY": {"group": "boundaries", "has_subtype": False}, # tidal
92
+ "APITESTDUMMY": {"group": None, "has_subtype": False}, # Made up for API testing
92
93
  }
93
94
 
94
95
  ALL_UNIT_TYPES = set(SUPPORTED_UNIT_TYPES.keys()).union(UNSUPPORTED_UNIT_TYPES)
@@ -29,11 +29,11 @@ class UNSUPPORTED(Unit):
29
29
  self.comment = self._remove_unit_name(block[0])
30
30
 
31
31
  if self._subtype is False:
32
- self.labels = split_n_char(f"{block[1]:<{2*self._label_len}}", self._label_len)
32
+ self.labels = split_n_char(f"{block[1]:<{2 * self._label_len}}", self._label_len)
33
33
 
34
34
  else:
35
35
  self._subtype = self._get_first_word(block[1])
36
- self.labels = split_n_char(f"{block[2]:<{2*self._label_len}}", self._label_len)
36
+ self.labels = split_n_char(f"{block[2]:<{2 * self._label_len}}", self._label_len)
37
37
 
38
38
  if self.labels[1] != "":
39
39
  self.ds_label = self.labels[1]
@@ -46,12 +46,12 @@ def _validate_unit(unit, urban=False):
46
46
 
47
47
  def _validate_parameter(param, value): # noqa: C901, PLR0911, PLR0912
48
48
  if param["type"] == "type-match":
49
- return isinstance(value, param["options"]), f'-> Expected: {param["options"]}'
49
+ return isinstance(value, param["options"]), f"-> Expected: {param['options']}"
50
50
 
51
51
  if param["type"] == "value-match":
52
52
  if isinstance(value, str):
53
- return value.upper() in param["options"], f'-> Expected: {param["options"]}'
54
- return value in param["options"], f'-> Expected: {param["options"]}'
53
+ return value.upper() in param["options"], f"-> Expected: {param['options']}"
54
+ return value in param["options"], f"-> Expected: {param['options']}"
55
55
 
56
56
  if param["type"] == "end-value-match":
57
57
  if value.strip().upper().endswith(tuple(param["options"])):
@@ -70,7 +70,7 @@ def _validate_parameter(param, value): # noqa: C901, PLR0911, PLR0912
70
70
 
71
71
  return (
72
72
  type_match_result or value_match_result,
73
- f'-> Expected: Type {param["options"][0]} or Value {param["options"][1]}',
73
+ f"-> Expected: Type {param['options'][0]} or Value {param['options'][1]}",
74
74
  )
75
75
 
76
76
  if param["type"] == "value-range":
@@ -84,13 +84,13 @@ def _validate_parameter(param, value): # noqa: C901, PLR0911, PLR0912
84
84
  if param["type"] == "string-length":
85
85
  return (
86
86
  len(value) <= param["max_length"],
87
- f'-> Exceeds {param["max_length"]} characters',
87
+ f"-> Exceeds {param['max_length']} characters",
88
88
  )
89
89
 
90
90
  if param["type"] == "list-string-length":
91
91
  return (
92
92
  all(len(item) <= param["max_length"] for item in value),
93
- f'-> Contains labels exceeding {param["max_length"]} characters',
93
+ f"-> Contains labels exceeding {param['max_length']} characters",
94
94
  )
95
95
 
96
96
  if param["type"] == "dict-match":
@@ -1 +1 @@
1
- __version__ = "0.5.3.post1"
1
+ __version__ = "0.5.5"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: floodmodeller_api
3
- Version: 0.5.3.post1
3
+ Version: 0.5.5
4
4
  Summary: Extends the functionality of Flood Modeller to python users
5
5
  Author: Jacobs
6
6
  Author-email: joe.pierce@jacobs.com
@@ -1,24 +1,24 @@
1
1
  floodmodeller_api/__init__.py,sha256=gPtU8nKJL-XHb19XuMryUpwlYNA3dlHlxl8xy69KPQA,400
2
2
  floodmodeller_api/_base.py,sha256=XY5bxyGzppQnY1SSL9qqBK0wCmvC9t3lQnj-jfnRLBU,7971
3
3
  floodmodeller_api/backup.py,sha256=Pdqq3VF-aiEuLOGFyoEINLc_vauhUeaNedJTa1cWDLI,11139
4
- floodmodeller_api/dat.py,sha256=S5bH9vxR-yINMpNeLuH1iUe3s_vKfq69TToID13PWRw,40061
4
+ floodmodeller_api/dat.py,sha256=IbW2HQeyF3eAfqdDTTtJYSWozOdNlpSMEbP9j0zZpHs,43155
5
5
  floodmodeller_api/diff.py,sha256=y7W5l-03iYdm-YPcwrbHZMdlXFhBe0JEl-WahWL_pi8,5208
6
- floodmodeller_api/ied.py,sha256=q8FWV2cQso7Tt9m73XGnK_5ZHTfQGW_LLtxwsY2sTus,12313
6
+ floodmodeller_api/ied.py,sha256=vzt5Qt_2Eg_QgXPujBHByyNhr7-DuyIVf0egYc_j11E,12313
7
7
  floodmodeller_api/ief.py,sha256=u_VYIGkBQwHY7nSXVhT0G6-UkWmlpPLzkzodi9OPrIg,31891
8
8
  floodmodeller_api/ief_flags.py,sha256=WFP-mcIFIAf5DRpHH3BuP-zuzoIpm5wGxltTsXm0Wd8,11351
9
9
  floodmodeller_api/inp.py,sha256=o8hh7SmzTfuWWQVYTywIVWtPBCv-VCmrRzjGwwkFPUE,11012
10
10
  floodmodeller_api/mapping.py,sha256=eHbGYd7lFptmRvPYi4PxkvbD72w953RUb6KXKeiHTwg,3798
11
- floodmodeller_api/to_from_json.py,sha256=qyRKRe4mpdNBo6XgXVrP9dI3oqYY8Px5YcGm690F-jg,7427
11
+ floodmodeller_api/to_from_json.py,sha256=ozdRwtmFEYNvH_tiPwhp9jHTHDFZuLT5dCoxfYRshX8,7877
12
12
  floodmodeller_api/tool.py,sha256=Lpx4LiF_OhCqt8KiXNtOrYx1K0tSwxig2ZJcGU3gbM4,11330
13
13
  floodmodeller_api/util.py,sha256=16oY6ia5SJjyjKYIoxa8jMw_sZ828y73NWbpe31ig-w,4590
14
- floodmodeller_api/version.py,sha256=vAhdketIKWmjUuWZ8PfKJlRx4zq5ctgCLf0t58Wuui0,28
14
+ floodmodeller_api/version.py,sha256=78mfpLewKVki6c9UONSUdlVme_JsN9ZwIfp4Hf4jmG0,22
15
15
  floodmodeller_api/xml2d.py,sha256=MvH0oftUAdQRrsvxifXQOFwk0eB3sQOUX3qwU-58W6s,25698
16
16
  floodmodeller_api/xml2d_template.py,sha256=lu0tM7-YysYniqAw331bhvulH0Ha5xKsgtIo9KTnyNw,1806
17
17
  floodmodeller_api/xsd_backup.xml,sha256=hRZYhpNcucT7TgFPhuINMAEJOkds-lg6n7RH3b2jeq4,28430
18
18
  floodmodeller_api/zz.py,sha256=N9KHVPKyveDKG8jxrjuR0abHKbJhrTiKuNZ1kMD4zzs,20739
19
19
  floodmodeller_api/hydrology_plus/__init__.py,sha256=VWXZCEesqplOaj9REiEdtcm1eMIvyl1GU1iH1CnW2qM,106
20
20
  floodmodeller_api/hydrology_plus/helper.py,sha256=8ujBHFGEh1DXBhT8OJPAS-HYp19cP2vnyEkmkpN95rs,645
21
- floodmodeller_api/hydrology_plus/hydrology_plus_export.py,sha256=aTPBc12_cASGeJt4Az0hD57ddLdplA9fp9nIwTcHf84,15072
21
+ floodmodeller_api/hydrology_plus/hydrology_plus_export.py,sha256=ZhETCp1hOAH6cWROIE-rKVIPPR5uESLpzI9J_--hHzc,15057
22
22
  floodmodeller_api/libs/libifcoremd.dll,sha256=kef4LcAB6uORn3tjPwlLngTMQRcJ5gbY2P_U7r29lho,1341056
23
23
  floodmodeller_api/libs/libifcoremt.so.5,sha256=vKK1nJ9OLlS6qshCh8uoOGdmJdXR1bsxVwJF8BruX-A,1259936
24
24
  floodmodeller_api/libs/libifport.so.5,sha256=ZvM9s0pRqv0KPwTBpUG1YlDHn2DaZ8Hyr2sqdhrEaD8,176840
@@ -36,27 +36,28 @@ floodmodeller_api/test/__init__.py,sha256=H_reXbKdnzqlFWBdfJIPsgtRIXY7BxM1_p4oOv
36
36
  floodmodeller_api/test/conftest.py,sha256=_qZ3fepZ6TM-IbieVDIzHt5R8u-BybUbhGAZgdFKdzA,301
37
37
  floodmodeller_api/test/test_backup.py,sha256=_hGjDladK-EXa9uqzMlW7pJMvCldxiYdJn7dtqVQJq4,4221
38
38
  floodmodeller_api/test/test_conveyance.py,sha256=Urw85ev6aDMfKKwL4qG0pKSutnlPP9ZlXyag538kqQI,4075
39
- floodmodeller_api/test/test_dat.py,sha256=3-uQLydWsakqAZ50xIPvQGfDYlXklqp_8RQTb4TDSnE,14661
39
+ floodmodeller_api/test/test_dat.py,sha256=dJPFT9b3mkFv3lVdwWBBM_1V6OnH4-m9Vwj2HimxTt8,18007
40
40
  floodmodeller_api/test/test_flowtimeprofile.py,sha256=yB70e_1SEjfbk1mmqtGRWHt8KYs_FgFjHfdUiAGWR0g,4114
41
41
  floodmodeller_api/test/test_fmfile.py,sha256=RTe1Rpy1sRK-_QzStrTJe7GNlC0ruURMdkoHZ2kozrY,550
42
+ floodmodeller_api/test/test_gxy.py,sha256=KpQhtPBcJrhxwvEFccigOjq6MXZPscWTsqo8cw0Npzs,3559
42
43
  floodmodeller_api/test/test_hydrology_plus_export.py,sha256=USY-mqqNkmagkd_gfKGGj0ZTASQHQ30LKRBFBKTKKaw,7350
43
44
  floodmodeller_api/test/test_ied.py,sha256=VRscnsFPdYEVHNeJpUZW-ftUKvSBl4y_NjjsLXOJ8Zo,1117
44
45
  floodmodeller_api/test/test_ief.py,sha256=uhcljtMgyW2wAx9T7Ccq37hvQAYVZlTiSVz7kea2cXs,8377
45
46
  floodmodeller_api/test/test_inp.py,sha256=2KYo3cgvngZrXblL8Xtqpl2bJS9nCOog3rDtqHem3gg,1493
46
47
  floodmodeller_api/test/test_integrated_bridge.py,sha256=m81pA5AQpfVPvG8OX9NlsXD_8Z8MIoa8SIGrdmTMV28,5157
47
- floodmodeller_api/test/test_json.py,sha256=EMTOAbBnmGuH8AwLV526dxyhvrcDX1icpv7D6e1uXtI,4247
48
+ floodmodeller_api/test/test_json.py,sha256=wU8DL1Vt9qwa8lxVL9NpcUB7pdMcO6gmKbtAXYfkvac,5276
48
49
  floodmodeller_api/test/test_logs_lf.py,sha256=gODj_Ysm_hf-upScPKpCDkuoTZFUgr5-FdB5hM7Y2iw,5290
49
- floodmodeller_api/test/test_read_file.py,sha256=EcIOf37-1ZGcx5bzUkrAWUkrjrHOoJU-71KqG-UUTwA,778
50
+ floodmodeller_api/test/test_read_file.py,sha256=3gOz7sl1zQUwg6MCBDTFOcZDtldpQbWa0mi51zcFKPQ,911
50
51
  floodmodeller_api/test/test_river.py,sha256=hZXATFm2chYr0OlJQgEsa30o__X-hhGSvKYpV7iWlQU,8620
51
52
  floodmodeller_api/test/test_sluice.py,sha256=-t_3k2QZahJCTG3U60buUfFpUfA0ANngRABhMb8oM1w,1241
52
53
  floodmodeller_api/test/test_tool.py,sha256=izvi9YF4hVqP57uVFkmBMD2wJvd93LeIo7XF-JZ2RZM,4245
53
54
  floodmodeller_api/test/test_toolbox_structure_log.py,sha256=43RUYsmGIyavg5YrmXgaE1iFo35s7iKnp6cK1BzgdsY,6701
54
- floodmodeller_api/test/test_unit.py,sha256=PNyJDwhlVfT0nMWLrhi8HeeM7dstRPRlzse9fZgTl0o,1934
55
+ floodmodeller_api/test/test_unit.py,sha256=JKEQeRcSNOI_ID2J70ggYR1EhrHxIxyD6gAZI5sXABI,2255
55
56
  floodmodeller_api/test/test_xml2d.py,sha256=pMwNySpxuCkidFimdD-0kQSYGc3jJFdak98nUZGwmqo,5149
56
57
  floodmodeller_api/test/test_zz.py,sha256=DVmossrrOI5fnXi8V8KWvzCmgOaZeobxcxT7G7OY53s,4414
57
58
  floodmodeller_api/test/test_data/7082.ief,sha256=IfH9Oybu3Mwemt1WLjLF_B3_7gud4O673R4QajvUIuU,748
58
- floodmodeller_api/test/test_data/All Units 4_6.DAT,sha256=msMjN2BGkekw-fdtZGPE0U4cMwYEZHKoKUNMMFwSY8w,32585
59
- floodmodeller_api/test/test_data/All Units 4_6.feb,sha256=msMjN2BGkekw-fdtZGPE0U4cMwYEZHKoKUNMMFwSY8w,32585
59
+ floodmodeller_api/test/test_data/All Units 4_6.DAT,sha256=udlIuVTtCJXFAFKZwS3AgPjr0EuVVOa9L3sEjWU6604,32569
60
+ floodmodeller_api/test/test_data/All Units 4_6.feb,sha256=udlIuVTtCJXFAFKZwS3AgPjr0EuVVOa9L3sEjWU6604,32569
60
61
  floodmodeller_api/test/test_data/BRIDGE.DAT,sha256=tJZgLmKyzErVpj0rYIQfWBUJHBsGETkMY01CJvEfGJA,31756
61
62
  floodmodeller_api/test/test_data/BaseModel_2D_Q100.ief,sha256=BrotqABIiDabs-DmNwlrjD-u-Twud5Sz2wyArzoVq0Q,660
62
63
  floodmodeller_api/test/test_data/Baseline_unchecked.csv,sha256=uakQjcVVCbafCOAhPuoT-Zgkf-9HyvJ4GHubB-ZzFjs,9049
@@ -104,6 +105,11 @@ floodmodeller_api/test/test_data/Linked1D2DFAST_dy.xml,sha256=Yha3kCmRCMXr7WnK0w
104
105
  floodmodeller_api/test/test_data/Linked1D2D_xml_expected.json,sha256=OO4AmymX-Cx-i4v8jba7I6qlE-_lN1vxmG-NaZzE224,8427
105
106
  floodmodeller_api/test/test_data/P3Panels_UNsteady.ief,sha256=87LgYLT7D5yPjzvSxTyyWksm2WXsfZSaK62nstIgB4g,661
106
107
  floodmodeller_api/test/test_data/QT in dat file.ief,sha256=4v5aGqy07wzPUDWlAJZhke9m6NR_uY1sVG7rAq2U7I0,399
108
+ floodmodeller_api/test/test_data/River_Bridge.dat,sha256=JAPuSD_nx7XBQU6020abtLD7GVPsCm2zGsaFYplVx6Q,98552
109
+ floodmodeller_api/test/test_data/River_Bridge.gxy,sha256=Fdp-EsmNm-LeH6RtlBousbPGxY1Nws4-6_d23ovrWJs,3653
110
+ floodmodeller_api/test/test_data/River_Bridge_DAT_expected.json,sha256=3MR2oh-m1mJ-ijlyP1O738bnJxr2gN3uV-mlDDzh05Q,818759
111
+ floodmodeller_api/test/test_data/River_Bridge_no_gxy.dat,sha256=JAPuSD_nx7XBQU6020abtLD7GVPsCm2zGsaFYplVx6Q,98552
112
+ floodmodeller_api/test/test_data/River_Bridge_no_gxy_DAT_expected.json,sha256=pUINNMWyVsJeTh1jEUc87Ym6pe0VTYt0K8vwBw6QdRg,805961
107
113
  floodmodeller_api/test/test_data/T10.ief,sha256=I9dqmRNSL1A0OC4loNkfpe2D_5Qr8gsI3jiPOUblKQQ,635
108
114
  floodmodeller_api/test/test_data/T2.ief,sha256=JqJ_Z9jw4A8zSypv8RIrLFPjCypZSQTrjhhUMdIUlBQ,632
109
115
  floodmodeller_api/test/test_data/T5.ief,sha256=sT4DQqb_1qjNbbZoi3A4BKPxdJB8QJN0-3n5BqcCrEI,632
@@ -120,8 +126,10 @@ floodmodeller_api/test/test_data/defaultUnits.feb,sha256=GM6Ne-6Ce3tf6BhHJm0XpPA
120
126
  floodmodeller_api/test/test_data/defaultUnits.fmpx,sha256=DF9E6x38IlhwMS2ENva62kwM-kerj9FqVZAT5ozNOB0,2392
121
127
  floodmodeller_api/test/test_data/defaultUnits.gxy,sha256=H4cuPLiGSXxr4OtgK2-q3oRfssa4BPU730hiJd7K1c8,972
122
128
  floodmodeller_api/test/test_data/df_flows_hplus.csv,sha256=1mXiFFjw7aqdd-QsmSH8bKgwCR2hBGxkiyuHyEd97X4,7703
123
- floodmodeller_api/test/test_data/encoding_test_cp1252.dat,sha256=Rpoei0XM1yU48lkw2an2Gt1Ck9zJ8juR9sbNJVMF7bY,32585
124
- floodmodeller_api/test/test_data/encoding_test_utf8.dat,sha256=w3pPk1hoP72WKuBpr2GivzVyyzN6pXKyGz4q8W_yHGQ,32586
129
+ floodmodeller_api/test/test_data/duplicate_unit_test.dat,sha256=62fT73-6hiW9biH-hLQF8Q3d7Eed427O-iilVGs2oRQ,450
130
+ floodmodeller_api/test/test_data/duplicate_unit_test_unsupported.dat,sha256=EWEleUjncQJdBkvFklAoliFfICG3hTwdPrZdKmJJ0F4,971
131
+ floodmodeller_api/test/test_data/encoding_test_cp1252.dat,sha256=fwcE38umUj4cR4vCxfnhxhyxzZurfhtK9ZTWPUfvQGI,32569
132
+ floodmodeller_api/test/test_data/encoding_test_utf8.dat,sha256=XPcvlF6hUwGxL0V1bvME5dFZCpxda4jyNCtXPMlnme4,32570
125
133
  floodmodeller_api/test/test_data/event_hplus.csv,sha256=C2pDyjnQs0pte2Zh6jft00Y5j6qNWzkSKrHd6Yx7iXY,523
126
134
  floodmodeller_api/test/test_data/ex3.ief,sha256=fnNuyiIRry7-onvcTkA_IOJF2VHnCzxzB-IMb5vqXtM,361
127
135
  floodmodeller_api/test/test_data/ex3.lf1,sha256=nM6Sh9mw1oo-FVZbqurZu_YSCODlhMGW4mEgXgoSFTg,91578
@@ -170,6 +178,7 @@ floodmodeller_api/test/test_data/network.zzx,sha256=aT1RW2nerZuCOtcvxJ8VJqL-Ly8I
170
178
  floodmodeller_api/test/test_data/network_dat_expected.json,sha256=usRioM5sXeMSgwTfNCKYN4jO3E4uQu69zwBtSmqUXvM,623625
171
179
  floodmodeller_api/test/test_data/network_ied_expected.json,sha256=6ng9RLh4D2--8oxVZBdlJBec2z1W3ZL3FDTvZFMZ8HA,8409
172
180
  floodmodeller_api/test/test_data/network_with_comments.ied,sha256=bIbV_wJ_BDb5Zx2V_w82VtVtmNJYptH9RVF2VTZ7dPE,1003
181
+ floodmodeller_api/test/test_data/remove_dummy_test.dat,sha256=6hZYi7pD_IStMJjhB4XXhwgH0gB8Z__NKIGDjMIjZV8,739
173
182
  floodmodeller_api/test/test_data/rnweir.dat,sha256=GM6Ne-6Ce3tf6BhHJm0XpPA6aRtNTCqhckfkO-UI0Sw,269
174
183
  floodmodeller_api/test/test_data/rnweir.ext,sha256=QW8XUTJuO9SWT6DCkgUvePXIJb2B9vsD4ppo46yywtk,468
175
184
  floodmodeller_api/test/test_data/rnweir.feb,sha256=GM6Ne-6Ce3tf6BhHJm0XpPA6aRtNTCqhckfkO-UI0Sw,269
@@ -216,25 +225,25 @@ floodmodeller_api/toolbox/model_build/__init__.py,sha256=AvtpvGVkBIM88k7mXFA_a3y
216
225
  floodmodeller_api/toolbox/model_build/add_siltation_definition.py,sha256=f4YGdteOgYIT9Pz1fzM7GQzozwSP0F4Juz5_LR2A0cA,3100
217
226
  floodmodeller_api/toolbox/model_build/structure_log_definition.py,sha256=15i17agV9FoupUVIUxK9Z1WQ69_cIzFEHuuOmS4dUnc,1866
218
227
  floodmodeller_api/toolbox/model_build/structure_log/__init__.py,sha256=uIChpuOCUua7vREPLedWwgcRH4ApbheC_GO-Pi8VwV8,47
219
- floodmodeller_api/toolbox/model_build/structure_log/structure_log.py,sha256=7Ny7SLxPDsFx4WYuRPLOwi6X9nXcv9ehpd_t6vt7y10,22837
228
+ floodmodeller_api/toolbox/model_build/structure_log/structure_log.py,sha256=vHqbb4kS5zGgB_lKNgVylUWHVkgNSS-DAm_9ykmmHn8,22839
220
229
  floodmodeller_api/toolbox/model_conversion/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
221
230
  floodmodeller_api/toolbox/model_review/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
222
231
  floodmodeller_api/toolbox/results_analysis/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
223
232
  floodmodeller_api/units/__init__.py,sha256=aoWw79JGXL1Yonz-9HM43CeOV_fGrf6rvd4Rrs5BTAE,1059
224
- floodmodeller_api/units/_base.py,sha256=rIVK-gz1g92njdx52Kt3C-yj--hsqrd2trKkRJfKtWY,11106
233
+ floodmodeller_api/units/_base.py,sha256=QGF17d31yOl6djPQ0jekvSyca9UaTxmsq9XMuvejOTc,12178
225
234
  floodmodeller_api/units/_helpers.py,sha256=KqH9Qn6_mGB-TQBPkObb1_DRGfpvwdKqdA1iYFtAMuc,10918
226
- floodmodeller_api/units/boundaries.py,sha256=YW3Gact2CDvENkmI5ttka_fMJB131stYAoReIF4b3fI,19135
235
+ floodmodeller_api/units/boundaries.py,sha256=DLrIwk8pMu8IUEUOkSWlS_p8I4dMwKeY_ZPkDghVNI8,19262
227
236
  floodmodeller_api/units/comment.py,sha256=KFaPuypi4RfkSPVwFuyLG1AtiBhlcliptWXp7Bo45R0,1864
228
- floodmodeller_api/units/conduits.py,sha256=pmgBxgWeGn96nEPeBq3kL_En0BNUl_UCm2H32CJAOC0,17025
237
+ floodmodeller_api/units/conduits.py,sha256=Y8KRq_foK6hsSdIHlAeiQcl9zl9PqcN1H9Mhs0D8Jp8,17027
229
238
  floodmodeller_api/units/connectors.py,sha256=7z9ImmaLX7wVZTg9Z-sYe5bZwLkejHbFEFgzFMm2LmU,3383
230
239
  floodmodeller_api/units/controls.py,sha256=zwK9qcJex2lcZFbA9XW0ks1-CFn8TGJglpV_q3UCVjw,3549
231
240
  floodmodeller_api/units/conveyance.py,sha256=yx-6DZfz4VHPi_ho0ZWkMM4Z79qFwmri1HW-YcxTkE8,6324
232
241
  floodmodeller_api/units/iic.py,sha256=3fl_90HETaIdVSlJexBKiLtJ473sT4UEusS1k5Dd-WY,3408
233
- floodmodeller_api/units/losses.py,sha256=pl5eNKUmnWjmyH03B0A5YhzgLTn1APuXYgr1VIrSut8,11972
234
- floodmodeller_api/units/sections.py,sha256=ntunzD9ePp3z2Qw5XKlwJ468EP7eOPC8ZoGEhpRawIM,19795
235
- floodmodeller_api/units/structures.py,sha256=3KsZs3XX3ztJv_HddONIiEDNdZ0Fp3Pw8kE8RFOuIAg,67375
236
- floodmodeller_api/units/units.py,sha256=WFWD4kvCJNstHeN553zTdDHc_bFgRyHpIDSAd6zv-10,5309
237
- floodmodeller_api/units/unsupported.py,sha256=TtNJjLiJt1dqYmIYxj799TM5HXjN_imR51CkzkK7B9I,1770
242
+ floodmodeller_api/units/losses.py,sha256=jJno9a9xPmptt31GR7Xi0lxurVI2evw5C-PMgHudf6s,11976
243
+ floodmodeller_api/units/sections.py,sha256=3wbEknJk5ZWIhYF5KkYUKm8h0Hbmv76LzsDlqeQj8AE,21069
244
+ floodmodeller_api/units/structures.py,sha256=1M2xyY7WR_KgF4HDLlWRZUq2QxnPonRCNwTNbSvjmfM,68975
245
+ floodmodeller_api/units/units.py,sha256=pKofHXAVClcOsoypPx_sAOwXa6B-Geoz3WT0_fWvL5M,5395
246
+ floodmodeller_api/units/unsupported.py,sha256=Ot8uTBeSCCj_obh_Esnoarqc2wW3YzFoDn3EG7niLdU,1774
238
247
  floodmodeller_api/units/variables.py,sha256=g1VCxgJbd5Tv9Njn4B_UBTo1Sa8eBP3j8Efko8p0lgI,3061
239
248
  floodmodeller_api/urban1d/__init__.py,sha256=7-_TpJTV8N2SoTEOpHUo0pi87ue8BqBii5FldTc_SjA,192
240
249
  floodmodeller_api/urban1d/_base.py,sha256=18nczYWXxNiGRWNauqohM-VOeD3tQwWpYV1yJJ4N6u0,6069
@@ -249,10 +258,10 @@ floodmodeller_api/urban1d/xsections.py,sha256=49n08yE4WfxPzPy72mi0NJWG46p--I2ZmZ
249
258
  floodmodeller_api/validation/__init__.py,sha256=sUMqShUGLnuQjmxKN3wAR7XpDVYsSFn4gWT63awXjOU,39
250
259
  floodmodeller_api/validation/parameters.py,sha256=VG6wlDiA5A5cm3TEhYCJ4dNqzm8Hl1X7CMpohBIdOjQ,16585
251
260
  floodmodeller_api/validation/urban_parameters.py,sha256=tD4ORsexmvvVZhDxbRyDlYyEH4uswySxiTIs2JWZwKs,11391
252
- floodmodeller_api/validation/validation.py,sha256=rwNNmUP2VSfv196Iv6HbGI-PeC_YxTCQM_4stcEB5lk,4665
253
- floodmodeller_api-0.5.3.post1.dist-info/licenses/LICENSE.txt,sha256=las1guEzggQukja_R_nI5E6jGEYEnpQdJoTZvup2e5E,920
254
- floodmodeller_api-0.5.3.post1.dist-info/METADATA,sha256=pl4oOBBBx1iWjPPPntrLJU0-YCyiZ_o5Zihs97aseZo,5794
255
- floodmodeller_api-0.5.3.post1.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
256
- floodmodeller_api-0.5.3.post1.dist-info/entry_points.txt,sha256=RQFzb_zf1hNv2uNRfoCD3nRzyzGi8vPvj7VGOhrOjtI,198
257
- floodmodeller_api-0.5.3.post1.dist-info/top_level.txt,sha256=x10nxct120kv2PpqYA2lhiwrYre3wKyic2wcUyNWWRw,18
258
- floodmodeller_api-0.5.3.post1.dist-info/RECORD,,
261
+ floodmodeller_api/validation/validation.py,sha256=z2l3haf-dfaGvF0l8_JUwj_gnaQx54bi2ZdcyoZypnM,4665
262
+ floodmodeller_api-0.5.5.dist-info/licenses/LICENSE.txt,sha256=las1guEzggQukja_R_nI5E6jGEYEnpQdJoTZvup2e5E,920
263
+ floodmodeller_api-0.5.5.dist-info/METADATA,sha256=zIrFJzbHSfostr6jNAouPBvNPTlxxBExlG4kH9AMejg,5788
264
+ floodmodeller_api-0.5.5.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
265
+ floodmodeller_api-0.5.5.dist-info/entry_points.txt,sha256=RQFzb_zf1hNv2uNRfoCD3nRzyzGi8vPvj7VGOhrOjtI,198
266
+ floodmodeller_api-0.5.5.dist-info/top_level.txt,sha256=x10nxct120kv2PpqYA2lhiwrYre3wKyic2wcUyNWWRw,18
267
+ floodmodeller_api-0.5.5.dist-info/RECORD,,