floodmodeller-api 0.5.2__tar.gz → 0.5.3__tar.gz

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 (265) hide show
  1. {floodmodeller_api-0.5.2/floodmodeller_api.egg-info → floodmodeller_api-0.5.3}/PKG-INFO +5 -3
  2. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/README.md +2 -1
  3. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/_base.py +10 -4
  4. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/dat.py +2 -3
  5. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/logs/lf.py +14 -7
  6. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/logs/lf_helpers.py +2 -0
  7. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/logs/lf_params.py +54 -26
  8. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/mapping.py +2 -0
  9. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_dat.py +13 -1
  10. floodmodeller_api-0.5.3/floodmodeller_api/test/test_data/floodplain.dat +52 -0
  11. floodmodeller_api-0.5.3/floodmodeller_api/test/test_data/lf_complex_ex.lf1 +51499 -0
  12. floodmodeller_api-0.5.3/floodmodeller_api/test/test_fmfile.py +20 -0
  13. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_logs_lf.py +57 -12
  14. floodmodeller_api-0.5.3/floodmodeller_api/test/test_unit.py +57 -0
  15. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/toolbox/model_build/structure_log/structure_log.py +0 -2
  16. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/units/__init__.py +2 -1
  17. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/units/_base.py +19 -7
  18. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/units/sections.py +4 -4
  19. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/units/structures.py +142 -0
  20. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/units/units.py +1 -1
  21. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/validation/parameters.py +16 -0
  22. floodmodeller_api-0.5.3/floodmodeller_api/version.py +1 -0
  23. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/xml2d.py +1 -1
  24. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3/floodmodeller_api.egg-info}/PKG-INFO +5 -3
  25. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api.egg-info/SOURCES.txt +4 -0
  26. floodmodeller_api-0.5.2/floodmodeller_api/version.py +0 -1
  27. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/LICENSE.txt +0 -0
  28. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/MANIFEST.in +0 -0
  29. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/__init__.py +0 -0
  30. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/backup.py +0 -0
  31. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/diff.py +0 -0
  32. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/hydrology_plus/__init__.py +0 -0
  33. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/hydrology_plus/helper.py +0 -0
  34. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/hydrology_plus/hydrology_plus_export.py +0 -0
  35. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/ied.py +0 -0
  36. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/ief.py +0 -0
  37. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/ief_flags.py +0 -0
  38. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/inp.py +0 -0
  39. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/libs/libifcoremd.dll +0 -0
  40. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/libs/libifcoremt.so.5 +0 -0
  41. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/libs/libifport.so.5 +0 -0
  42. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/libs/libimf.so +0 -0
  43. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/libs/libintlc.so.5 +0 -0
  44. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/libs/libmmd.dll +0 -0
  45. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/libs/libsvml.so +0 -0
  46. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/libs/libzzn_read.so +0 -0
  47. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/libs/zzn_read.dll +0 -0
  48. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/logs/__init__.py +0 -0
  49. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/__init__.py +0 -0
  50. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/conftest.py +0 -0
  51. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_backup.py +0 -0
  52. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_conveyance.py +0 -0
  53. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/7082.ief +0 -0
  54. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/All Units 4_6.DAT +0 -0
  55. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/All Units 4_6.feb +0 -0
  56. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/BRIDGE.DAT +0 -0
  57. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/BaseModel_2D_Q100.ief +0 -0
  58. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/Baseline_unchecked.csv +0 -0
  59. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/Constant QT.ief +0 -0
  60. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/Culvert_Inlet_Outlet.dat +0 -0
  61. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/Culvert_Inlet_Outlet.feb +0 -0
  62. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/DamBreakADI.xml +0 -0
  63. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/DamBreakFAST.xml +0 -0
  64. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/DamBreakFAST_dy.xml +0 -0
  65. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/DamBreakTVD.xml +0 -0
  66. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/DefenceBreach.xml +0 -0
  67. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/DefenceBreachFAST.xml +0 -0
  68. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/DefenceBreachFAST_dy.xml +0 -0
  69. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/Domain1+2_QH.xml +0 -0
  70. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/Domain1_H.xml +0 -0
  71. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/Domain1_Q.xml +0 -0
  72. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/Domain1_Q_FAST.xml +0 -0
  73. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/Domain1_Q_FAST_dy.xml +0 -0
  74. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/Domain1_Q_xml_expected.json +0 -0
  75. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/Domain1_W.xml +0 -0
  76. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/EX1.DAT +0 -0
  77. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/EX1.ext +0 -0
  78. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/EX1.feb +0 -0
  79. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/EX1.gxy +0 -0
  80. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/EX17.DAT +0 -0
  81. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/EX17.ext +0 -0
  82. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/EX17.feb +0 -0
  83. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/EX18.DAT +0 -0
  84. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/EX18_DAT_expected.json +0 -0
  85. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/EX2.DAT +0 -0
  86. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/EX3.DAT +0 -0
  87. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/EX3_DAT_expected.json +0 -0
  88. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/EX3_IEF_expected.json +0 -0
  89. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/EX6.DAT +0 -0
  90. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/EX6.ext +0 -0
  91. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/EX6.feb +0 -0
  92. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/EX6_DAT_expected.json +0 -0
  93. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/Event Data Example.DAT +0 -0
  94. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/Event Data Example.ext +0 -0
  95. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/Event Data Example.feb +0 -0
  96. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/FEH boundary.ief +0 -0
  97. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/Linked1D2D.xml +0 -0
  98. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/Linked1D2DFAST.xml +0 -0
  99. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/Linked1D2DFAST_dy.xml +0 -0
  100. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/Linked1D2D_xml_expected.json +0 -0
  101. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/P3Panels_UNsteady.ief +0 -0
  102. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/QT in dat file.ief +0 -0
  103. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/T10.ief +0 -0
  104. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/T2.ief +0 -0
  105. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/T5.ief +0 -0
  106. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/blockage.dat +0 -0
  107. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/blockage.ext +0 -0
  108. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/blockage.feb +0 -0
  109. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/blockage.gxy +0 -0
  110. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/conveyance_test.dat +0 -0
  111. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/conveyance_test.feb +0 -0
  112. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/conveyance_test.gxy +0 -0
  113. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/defaultUnits.dat +0 -0
  114. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/defaultUnits.ext +0 -0
  115. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/defaultUnits.feb +0 -0
  116. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/defaultUnits.fmpx +0 -0
  117. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/defaultUnits.gxy +0 -0
  118. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/df_flows_hplus.csv +0 -0
  119. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/encoding_test_cp1252.dat +0 -0
  120. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/encoding_test_utf8.dat +0 -0
  121. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/event_hplus.csv +0 -0
  122. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/ex3.ief +0 -0
  123. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/ex3.lf1 +0 -0
  124. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/ex4.DAT +0 -0
  125. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/ex4.ief +0 -0
  126. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/ex4_changed.DAT +0 -0
  127. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/ex6.ief +0 -0
  128. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/example1.inp +0 -0
  129. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/example2.inp +0 -0
  130. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/example3.inp +0 -0
  131. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/example4.inp +0 -0
  132. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/example5.inp +0 -0
  133. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/example6.inp +0 -0
  134. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/example_h+_export.csv +0 -0
  135. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/expected_conveyance.csv +0 -0
  136. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/hplus_export_example_1.csv +0 -0
  137. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/hplus_export_example_10.csv +0 -0
  138. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/hplus_export_example_2.csv +0 -0
  139. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/hplus_export_example_3.csv +0 -0
  140. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/hplus_export_example_4.csv +0 -0
  141. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/hplus_export_example_5.csv +0 -0
  142. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/hplus_export_example_6.csv +0 -0
  143. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/hplus_export_example_7.csv +0 -0
  144. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/hplus_export_example_8.csv +0 -0
  145. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/hplus_export_example_9.csv +0 -0
  146. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/integrated_bridge/AR_NoSP_NoBl_2O_NO_OneFRC.ied +0 -0
  147. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/integrated_bridge/AR_vSP_25pc_1O.ied +0 -0
  148. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/integrated_bridge/PL_vSP_25pc_1O.ied +0 -0
  149. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/integrated_bridge/SBTwoFRCsStaggered.IED +0 -0
  150. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/integrated_bridge/US_NoSP_NoBl_OR_RN.ied +0 -0
  151. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/integrated_bridge/US_SP_NoBl_OR_frc_PT2-5_RN.ied +0 -0
  152. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/integrated_bridge/US_fSP_NoBl_1O.ied +0 -0
  153. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/integrated_bridge/US_nSP_NoBl_1O.ied +0 -0
  154. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/integrated_bridge/US_vSP_NoBl_2O_Para.ied +0 -0
  155. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/integrated_bridge.dat +0 -0
  156. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/jump.dat +0 -0
  157. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/network.dat +0 -0
  158. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/network.ext +0 -0
  159. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/network.exy +0 -0
  160. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/network.feb +0 -0
  161. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/network.ied +0 -0
  162. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/network.ief +0 -0
  163. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/network.inp +0 -0
  164. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/network.mmm +0 -0
  165. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/network.pxy +0 -0
  166. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/network.uic +0 -0
  167. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/network.zzd +0 -0
  168. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/network.zzl +0 -0
  169. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/network.zzn +0 -0
  170. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/network.zzu +0 -0
  171. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/network.zzx +0 -0
  172. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/network_dat_expected.json +0 -0
  173. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/network_ied_expected.json +0 -0
  174. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/network_with_comments.ied +0 -0
  175. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/rnweir.dat +0 -0
  176. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/rnweir.ext +0 -0
  177. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/rnweir.feb +0 -0
  178. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/rnweir.gxy +0 -0
  179. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/rnweir_default.dat +0 -0
  180. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/rnweir_default.ext +0 -0
  181. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/rnweir_default.feb +0 -0
  182. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/rnweir_default.fmpx +0 -0
  183. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/rnweir_default.gxy +0 -0
  184. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/structure_logs/EX17_expected.csv +0 -0
  185. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/structure_logs/EX17_expected.json +0 -0
  186. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/structure_logs/EX18_expected.csv +0 -0
  187. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/structure_logs/EX18_expected.json +0 -0
  188. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/structure_logs/EX6_expected.csv +0 -0
  189. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/structure_logs/EX6_expected.json +0 -0
  190. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/tabular_csv_outputs/network_zzn_flow.csv +0 -0
  191. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/tabular_csv_outputs/network_zzn_fr.csv +0 -0
  192. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/tabular_csv_outputs/network_zzn_max.csv +0 -0
  193. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/tabular_csv_outputs/network_zzn_mode.csv +0 -0
  194. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/tabular_csv_outputs/network_zzn_stage.csv +0 -0
  195. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/tabular_csv_outputs/network_zzn_state.csv +0 -0
  196. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/tabular_csv_outputs/network_zzn_velocity.csv +0 -0
  197. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/tabular_csv_outputs/network_zzx_left_fp_h.csv +0 -0
  198. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/tabular_csv_outputs/network_zzx_left_fp_mode.csv +0 -0
  199. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/tabular_csv_outputs/network_zzx_link_inflow.csv +0 -0
  200. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/tabular_csv_outputs/network_zzx_max.csv +0 -0
  201. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/tabular_csv_outputs/network_zzx_right_fp_h.csv +0 -0
  202. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/tabular_csv_outputs/network_zzx_right_fp_mode.csv +0 -0
  203. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_data/unit checks.dat +0 -0
  204. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_flowtimeprofile.py +0 -0
  205. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_hydrology_plus_export.py +0 -0
  206. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_ied.py +0 -0
  207. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_ief.py +0 -0
  208. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_inp.py +0 -0
  209. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_integrated_bridge.py +0 -0
  210. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_json.py +0 -0
  211. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_read_file.py +0 -0
  212. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_river.py +0 -0
  213. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_tool.py +0 -0
  214. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_toolbox_structure_log.py +0 -0
  215. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_xml2d.py +0 -0
  216. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/test/test_zz.py +0 -0
  217. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/to_from_json.py +0 -0
  218. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/tool.py +0 -0
  219. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/toolbox/__init__.py +0 -0
  220. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/toolbox/example_tool.py +0 -0
  221. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/toolbox/gui/bg.PNG +0 -0
  222. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/toolbox/gui/logo.PNG +0 -0
  223. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/toolbox/model_build/__init__.py +0 -0
  224. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/toolbox/model_build/add_siltation_definition.py +0 -0
  225. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/toolbox/model_build/structure_log/__init__.py +0 -0
  226. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/toolbox/model_build/structure_log_definition.py +0 -0
  227. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/toolbox/model_conversion/__init__.py +0 -0
  228. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/toolbox/model_review/__init__.py +0 -0
  229. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/toolbox/results_analysis/__init__.py +0 -0
  230. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/units/_helpers.py +0 -0
  231. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/units/boundaries.py +0 -0
  232. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/units/comment.py +0 -0
  233. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/units/conduits.py +0 -0
  234. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/units/connectors.py +0 -0
  235. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/units/controls.py +0 -0
  236. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/units/conveyance.py +0 -0
  237. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/units/iic.py +0 -0
  238. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/units/losses.py +0 -0
  239. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/units/unsupported.py +0 -0
  240. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/units/variables.py +0 -0
  241. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/urban1d/__init__.py +0 -0
  242. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/urban1d/_base.py +0 -0
  243. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/urban1d/conduits.py +0 -0
  244. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/urban1d/general_parameters.py +0 -0
  245. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/urban1d/junctions.py +0 -0
  246. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/urban1d/losses.py +0 -0
  247. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/urban1d/outfalls.py +0 -0
  248. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/urban1d/raingauges.py +0 -0
  249. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/urban1d/subsections.py +0 -0
  250. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/urban1d/xsections.py +0 -0
  251. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/util.py +0 -0
  252. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/validation/__init__.py +0 -0
  253. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/validation/urban_parameters.py +0 -0
  254. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/validation/validation.py +0 -0
  255. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/xml2d_template.py +0 -0
  256. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/xsd_backup.xml +0 -0
  257. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api/zz.py +0 -0
  258. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api.egg-info/dependency_links.txt +0 -0
  259. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api.egg-info/entry_points.txt +0 -0
  260. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api.egg-info/requires.txt +0 -0
  261. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/floodmodeller_api.egg-info/top_level.txt +0 -0
  262. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/pyproject.toml +0 -0
  263. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/requirements.txt +0 -0
  264. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/setup.cfg +0 -0
  265. {floodmodeller_api-0.5.2 → floodmodeller_api-0.5.3}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.2
1
+ Metadata-Version: 2.4
2
2
  Name: floodmodeller_api
3
- Version: 0.5.2
3
+ Version: 0.5.3
4
4
  Summary: Extends the functionality of Flood Modeller to python users
5
5
  Author: Jacobs
6
6
  Author-email: joe.pierce@jacobs.com
@@ -24,6 +24,7 @@ Dynamic: author-email
24
24
  Dynamic: description
25
25
  Dynamic: description-content-type
26
26
  Dynamic: license
27
+ Dynamic: license-file
27
28
  Dynamic: project-url
28
29
  Dynamic: requires-dist
29
30
  Dynamic: summary
@@ -60,7 +61,8 @@ You can install the floodmodeller_api package from PyPI with the following comma
60
61
  pip install floodmodeller-api
61
62
  ```
62
63
 
63
- Python 3.10 or greater is required.
64
+ Flood Modeller API is regularly tested for all versions of python 3.10 onwards. Although it may work for older versions of python, we recommend using at least v3.10 and ideally the latest
65
+ stable release.
64
66
 
65
67
  Once you have installed floodmodeller_api to your python environment, you can import the package with:
66
68
 
@@ -30,7 +30,8 @@ You can install the floodmodeller_api package from PyPI with the following comma
30
30
  pip install floodmodeller-api
31
31
  ```
32
32
 
33
- Python 3.10 or greater is required.
33
+ Flood Modeller API is regularly tested for all versions of python 3.10 onwards. Although it may work for older versions of python, we recommend using at least v3.10 and ideally the latest
34
+ stable release.
34
35
 
35
36
  Once you have installed floodmodeller_api to your python environment, you can import the package with:
36
37
 
@@ -83,18 +83,24 @@ class FMFile(Jsonable):
83
83
  def _read(self):
84
84
  raise NotImplementedError
85
85
 
86
- def _update(self):
86
+ def update(self) -> None:
87
+ raise NotImplementedError
88
+
89
+ def save(self, filepath: str | Path) -> None:
90
+ raise NotImplementedError
91
+
92
+ def _update(self) -> None:
87
93
  """Updates the existing self._filetype based on any altered attributes"""
88
94
  if self._filepath is None:
89
95
  msg = f"{self._filetype} must be saved to a specific filepath before update() can be called."
90
96
  raise UserWarning(msg)
91
97
 
92
98
  string = self._write()
93
- with open(self._filepath, "w", encoding=self.ENCODING) as _file:
99
+ with open(self._filepath, "w", encoding=self.ENCODING, newline="\r\n") as _file:
94
100
  _file.write(string)
95
101
  logging.info("%s File Updated!", self._filepath)
96
102
 
97
- def _save(self, filepath):
103
+ def _save(self, filepath: str | Path) -> None:
98
104
  filepath = Path(filepath).absolute()
99
105
  if filepath.suffix.lower() != self._suffix:
100
106
  msg = f'Given filepath does not point to a filepath suffixed "{self._suffix}". Please point to the full path to save the {self._filetype} file'
@@ -104,7 +110,7 @@ class FMFile(Jsonable):
104
110
  Path.mkdir(filepath.parent)
105
111
 
106
112
  string = self._write()
107
- with open(filepath, "w", encoding=self.ENCODING) as _file:
113
+ with open(filepath, "w", encoding=self.ENCODING, newline="\r\n") as _file:
108
114
  _file.write(string)
109
115
  self._filepath = filepath # Updates the filepath attribute to the given path
110
116
 
@@ -88,7 +88,7 @@ class DAT(FMFile):
88
88
  if self._gxy_data is not None:
89
89
  gxy_string = self._gxy_data
90
90
  new_gxy_path = filepath.with_suffix(".gxy")
91
- with open(new_gxy_path, "w") as gxy_file:
91
+ with open(new_gxy_path, "w", encoding=self.ENCODING, newline="\r\n") as gxy_file:
92
92
  gxy_file.write(gxy_string)
93
93
  self._gxy_filepath = new_gxy_path
94
94
 
@@ -941,7 +941,6 @@ class DAT(FMFile):
941
941
  in_reach = hasattr(unit, "dist_to_next") and unit.dist_to_next > 0
942
942
  if in_reach: # has implicit downstream labels
943
943
  next_unit = units[idx + 1]
944
- next_next_unit = units[idx + 2]
945
944
 
946
945
  if next_unit.name is None:
947
946
  msg = "Unit has no name."
@@ -950,7 +949,7 @@ class DAT(FMFile):
950
949
  end_of_reach = (
951
950
  (not hasattr(next_unit, "dist_to_next"))
952
951
  or (next_unit.dist_to_next == 0)
953
- or (not hasattr(next_next_unit, "dist_to_next"))
952
+ or (not hasattr(units[idx + 2], "dist_to_next"))
954
953
  )
955
954
 
956
955
  if end_of_reach:
@@ -124,16 +124,23 @@ class LF(FMFile):
124
124
  for key in self._data_to_extract:
125
125
  parser = self._extracted_data[key]
126
126
 
127
- # lines which start with prefix
128
- if raw_line.startswith(parser.prefix):
127
+ if parser.use_regex:
128
+ if not (match := parser.prefix.match(raw_line)):
129
+ continue
130
+ end_of_line = match.group(1).lstrip()
131
+
132
+ elif raw_line.startswith(parser.prefix):
129
133
  # store everything after prefix
130
134
  end_of_line = raw_line.split(parser.prefix)[1].lstrip()
131
- parser.process_line(end_of_line)
132
135
 
133
- # index marks the end of an iteration
134
- if parser.is_index is True:
135
- self._sync_cols()
136
- self._no_iters += 1
136
+ else:
137
+ continue
138
+ parser.process_line(end_of_line)
139
+
140
+ # index marks the end of an iteration
141
+ if parser.is_index is True:
142
+ self._sync_cols()
143
+ self._no_iters += 1
137
144
 
138
145
  # update counter
139
146
  self._no_lines += 1
@@ -171,6 +171,7 @@ class Parser(ABC):
171
171
  exclude: str | None = None,
172
172
  is_index: bool | None = False,
173
173
  before_index: bool | None = False,
174
+ use_regex: bool | None = False,
174
175
  ):
175
176
  self._name = name
176
177
 
@@ -184,6 +185,7 @@ class Parser(ABC):
184
185
 
185
186
  self.data_type = data_type
186
187
  self.data = data_factory(data_type, name)
188
+ self.use_regex = use_regex
187
189
 
188
190
  def process_line(self, raw_line: str) -> None:
189
191
  """self._process_line with exception handling of expected nan values"""
@@ -14,6 +14,8 @@ If you have any query about this program or this License, please contact us at s
14
14
  address: Jacobs UK Limited, Flood Modeller, Cottons Centre, Cottons Lane, London, SE1 2QG, United Kingdom.
15
15
  """
16
16
 
17
+ import re
18
+
17
19
  from .lf_helpers import (
18
20
  DateTimeParser,
19
21
  FloatParser,
@@ -185,93 +187,108 @@ lf1_unsteady_data_to_extract = {
185
187
  },
186
188
  "initial_volume": {
187
189
  "class": FloatSplitParser,
188
- "prefix": "!!output1 Initial volume:",
190
+ "prefix": re.compile(r"^!!output1\s+Initial volume\s*:(.*)"),
189
191
  "data_type": "last",
190
192
  "split": "m3",
193
+ "use_regex": True,
191
194
  },
192
195
  "final_volume": {
193
196
  "class": FloatSplitParser,
194
- "prefix": "!!output1 Final volume:",
197
+ "prefix": re.compile(r"^!!output1\s+Final volume\s*:(.*)"),
195
198
  "data_type": "last",
196
199
  "split": "m3",
200
+ "use_regex": True,
197
201
  },
198
202
  "total_boundary_inflow": {
199
203
  "class": FloatSplitParser,
200
- "prefix": "!!output1 Total boundary inflow :",
204
+ "prefix": re.compile(r"^!!output1\s+Total boundary inflow\s*:(.*)"),
201
205
  "data_type": "last",
202
206
  "split": "m3",
207
+ "use_regex": True,
203
208
  },
204
209
  "total_boundary_outflow": {
205
210
  "class": FloatSplitParser,
206
- "prefix": "!!output1 Total boundary outflow:",
211
+ "prefix": re.compile(r"^!!output1\s+Total boundary outflow\s*:(.*)"),
207
212
  "data_type": "last",
208
213
  "split": "m3",
214
+ "use_regex": True,
209
215
  },
210
216
  "total_lat_link_inflow": {
211
217
  "class": FloatSplitParser,
212
- "prefix": "!!output1 Total lat. link inflow:",
218
+ "prefix": re.compile(r"^!!output1\s+Total lat. link inflow\s*:(.*)"),
213
219
  "data_type": "last",
214
220
  "split": "m3",
221
+ "use_regex": True,
215
222
  },
216
223
  "total_lat_link_outflow": {
217
224
  "class": FloatSplitParser,
218
- "prefix": "!!output1 Total lat. link outflow:",
225
+ "prefix": re.compile(r"^!!output1\s+Total lat. link outflow\s*:(.*)"),
219
226
  "data_type": "last",
220
227
  "split": "m3",
228
+ "use_regex": True,
221
229
  },
222
230
  "max_system_volume": {
223
231
  "class": FloatSplitParser,
224
- "prefix": "!!output1 Max. system volume:",
232
+ "prefix": re.compile(r"^!!output1\s+Max. system volume\s*:(.*)"),
225
233
  "data_type": "last",
226
234
  "split": "m3",
235
+ "use_regex": True,
227
236
  },
228
237
  "max_volume_increase": {
229
238
  "class": FloatSplitParser,
230
- "prefix": "!!output1 Max. |volume| increase:",
239
+ "prefix": re.compile(r"^!!output1\s+Max. \|volume\| increase\s*:(.*)"),
231
240
  "data_type": "last",
232
241
  "split": "m3",
242
+ "use_regex": True,
233
243
  },
234
244
  "max_boundary_inflow": {
235
245
  "class": FloatSplitParser,
236
- "prefix": "!!output1 Max. boundary inflow:",
246
+ "prefix": re.compile(r"^!!output1\s+Max. boundary inflow\s*:(.*)"),
237
247
  "data_type": "last",
238
248
  "split": "m3",
249
+ "use_regex": True,
239
250
  },
240
251
  "max_boundary_outflow": {
241
252
  "class": FloatSplitParser,
242
- "prefix": "!!output1 Max. boundary outflow:",
253
+ "prefix": re.compile(r"^!!output1\s+Max. boundary outflow\s*:(.*)"),
243
254
  "data_type": "last",
244
255
  "split": "m3",
256
+ "use_regex": True,
245
257
  },
246
258
  "net_volume_increase": {
247
259
  "class": FloatSplitParser,
248
- "prefix": "!!output1 Net increase in volume:",
260
+ "prefix": re.compile(r"^!!output1\s+Net increase in volume\s*:(.*)"),
249
261
  "data_type": "last",
250
262
  "split": "m3",
263
+ "use_regex": True,
251
264
  },
252
265
  "net_inflow_volume": {
253
266
  "class": FloatSplitParser,
254
- "prefix": "!!output1 Net inflow volume:",
267
+ "prefix": re.compile(r"^!!output1\s+Net inflow volume\s*:(.*)"),
255
268
  "data_type": "last",
256
269
  "split": "m3",
270
+ "use_regex": True,
257
271
  },
258
272
  "volume_discrepancy": {
259
273
  "class": FloatSplitParser,
260
- "prefix": "!!output1 Volume discrepancy:",
274
+ "prefix": re.compile(r"^!!output1\s+Volume discrepancy\s*:(.*)"),
261
275
  "data_type": "last",
262
276
  "split": "m3",
277
+ "use_regex": True,
263
278
  },
264
279
  "mass_balance_error": {
265
280
  "class": FloatSplitParser,
266
- "prefix": "!!output1 Mass balance error:",
281
+ "prefix": re.compile(r"^!!output1\s+Mass balance error\s*:(.*)"),
267
282
  "data_type": "last",
268
283
  "split": "%",
284
+ "use_regex": True,
269
285
  },
270
286
  "mass_balance_error_2": {
271
287
  "class": FloatSplitParser,
272
- "prefix": "!!output1 Mass balance error [2]:",
288
+ "prefix": re.compile(r"^!!output1\s+Mass balance error \[2\]\s*:(.*)"),
273
289
  "data_type": "last",
274
290
  "split": "%",
291
+ "use_regex": True,
275
292
  },
276
293
  "tuflow_start_time": {
277
294
  "class": FloatParser,
@@ -453,43 +470,51 @@ lf2_data_to_extract = {
453
470
  },
454
471
  "timestep": {
455
472
  "class": FloatParser,
456
- "prefix": "!!output2 Model timestep :",
473
+ "prefix": re.compile(r"^!!output2\s+Model timestep\s*:(.*)"),
457
474
  "data_type": "last",
475
+ "use_regex": True,
458
476
  },
459
477
  "wetting_drying_depth": {
460
478
  "class": FloatParser,
461
- "prefix": "!!output2 Wetting/drying depth :",
479
+ "prefix": re.compile(r"^!!output2\s+Wetting/drying depth\s*:(.*)"),
462
480
  "data_type": "last",
481
+ "use_regex": True,
463
482
  },
464
483
  "beta": {
465
484
  "class": FloatParser,
466
- "prefix": "!!output2 Beta :",
485
+ "prefix": re.compile(r"^!!output2\s+Beta\s*:(.*)"),
467
486
  "data_type": "last",
487
+ "use_regex": True,
468
488
  },
469
489
  "number_of_iterations": {
470
490
  "class": FloatParser,
471
- "prefix": "!!output2 Number of iterations :",
491
+ "prefix": re.compile(r"^!!output2\s+Number of iterations\s*:(.*)"),
472
492
  "data_type": "last",
493
+ "use_regex": True,
473
494
  },
474
495
  "calculation_depth": {
475
496
  "class": FloatParser,
476
- "prefix": "!!output2 Calculation depth :",
497
+ "prefix": re.compile(r"^!!output2\s+Calculation depth\s*:(.*)"),
477
498
  "data_type": "last",
499
+ "use_regex": True,
478
500
  },
479
501
  "friction_depth": {
480
502
  "class": FloatParser,
481
- "prefix": "!!output2 Friction depth :",
503
+ "prefix": re.compile(r"^!!output2\s+Friction depth\s*:(.*)"),
482
504
  "data_type": "last",
505
+ "use_regex": True,
483
506
  },
484
507
  "eddy_viscosity": {
485
508
  "class": FloatParser,
486
- "prefix": "!!output2 Eddy Viscosity :",
509
+ "prefix": re.compile(r"^!!output2\s+Eddy Viscosity\s*:(.*)"),
487
510
  "data_type": "last",
511
+ "use_regex": True,
488
512
  },
489
513
  "velocity_head_threshold": {
490
514
  "class": FloatParser,
491
- "prefix": "!!output2 Velocity head threshold :",
515
+ "prefix": re.compile(r"^!!output2\s+Velocity head threshold\s*:(.*)"),
492
516
  "data_type": "last",
517
+ "use_regex": True,
493
518
  },
494
519
  "rainfall_accumulation_depth": {
495
520
  "class": FloatParser,
@@ -498,8 +523,9 @@ lf2_data_to_extract = {
498
523
  },
499
524
  "negative_depth_threshold": {
500
525
  "class": FloatParser,
501
- "prefix": "!!output2 Negative depth threshold :",
526
+ "prefix": re.compile(r"^!!output2\s+Negative depth threshold\s*:(.*)"),
502
527
  "data_type": "last",
528
+ "use_regex": True,
503
529
  },
504
530
  "memory_use_estimate": {
505
531
  "class": FloatSplitParser,
@@ -509,8 +535,9 @@ lf2_data_to_extract = {
509
535
  },
510
536
  "friction_depth_threshold": {
511
537
  "class": FloatParser,
512
- "prefix": "!!output2 Friction depth threshold :",
538
+ "prefix": re.compile(r"^!!output2\s+Friction depth threshold\s*:(.*)"),
513
539
  "data_type": "last",
540
+ "use_regex": True,
514
541
  },
515
542
  "number_of_cells": {
516
543
  "class": FloatParser,
@@ -529,8 +556,9 @@ lf2_data_to_extract = {
529
556
  },
530
557
  "final_mass_error": {
531
558
  "class": FloatSplitParser,
532
- "prefix": "!!output2 Final mass error :",
559
+ "prefix": re.compile(r"^!!output2\s+Final mass error\s*:(.*)"),
533
560
  "data_type": "last",
561
+ "use_regex": True,
534
562
  "split": "%",
535
563
  },
536
564
  "combined_mass_error": {
@@ -13,6 +13,7 @@ from .units import (
13
13
  CRUMP,
14
14
  CULVERT,
15
15
  FLAT_V_WEIR,
16
+ FLOODPLAIN,
16
17
  HTBDY,
17
18
  IIC,
18
19
  INTERPOLATE,
@@ -81,6 +82,7 @@ api_class_mapping: dict[str, Any] = {
81
82
  "floodmodeller_api.units.sections.INTERPOLATE": INTERPOLATE,
82
83
  "floodmodeller_api.units.sections.REPLICATE": REPLICATE,
83
84
  "floodmodeller_api.units.sections.RIVER": RIVER,
85
+ "floodmodeller_api.units.structures.FLOODPLAIN": FLOODPLAIN,
84
86
  "floodmodeller_api.units.structures.BRIDGE": BRIDGE,
85
87
  "floodmodeller_api.units.structures.CRUMP": CRUMP,
86
88
  "floodmodeller_api.units.structures.FLAT_V_WEIR": FLAT_V_WEIR,
@@ -202,7 +202,7 @@ def test_diff(test_workspace, caplog):
202
202
  dat_ex4.diff(dat_ex4_changed)
203
203
 
204
204
  assert caplog.text == (
205
- "INFO root:_base.py:135 Files not equivalent, 12 difference(s) found:\n"
205
+ "INFO root:_base.py:141 Files not equivalent, 12 difference(s) found:\n"
206
206
  " DAT->structures->MILLAu->RNWEIR..MILLAu->upstream_crest_height: 1.07 != 1.37\n"
207
207
  " DAT->structures->MILLBu->RNWEIR..MILLBu->upstream_crest_height: 0.43 != 0.73\n"
208
208
  " DAT->structures->ROAD1->RNWEIR..ROAD1->upstream_crest_height: 2.02 != 2.32\n"
@@ -218,6 +218,18 @@ def test_diff(test_workspace, caplog):
218
218
  )
219
219
 
220
220
 
221
+ def test_diff_active_data(test_workspace):
222
+ dat = DAT(Path(test_workspace, "ex4.DAT"))
223
+ dat_copy = DAT(Path(test_workspace, "ex4.DAT"))
224
+ assert dat == dat_copy
225
+
226
+ for section in dat.sections.values():
227
+ if section.unit == "RIVER":
228
+ _ = section.active_data
229
+
230
+ assert dat == dat_copy
231
+
232
+
221
233
  def test_valid_network(test_workspace: Path):
222
234
  """Test against network derived manually."""
223
235
  dat = DAT(test_workspace / "network.dat")
@@ -0,0 +1,52 @@
1
+
2
+ #REVISION#1
3
+ 4 0.750 0.900 0.100 0.001 12SI
4
+ 10.000 0.010 0.010 0.700 0.100 0.700 0.000
5
+ RAD FILE
6
+
7
+ END GENERAL
8
+ RIVER
9
+ SECTION
10
+ 1
11
+ 5.000 0.0001 1000
12
+ 1
13
+ 0.000 0.000 0.000 1.000 0.000 0.000
14
+ RIVER
15
+ SECTION
16
+ 2
17
+ 5.000 0.0001 1000
18
+ 1
19
+ 0.000 0.000 0.000 1.000 0.000 0.000
20
+ RIVER
21
+ SECTION
22
+ 3
23
+ 0.000 1000.000
24
+ 1
25
+ 0.000 0.000 0.000 1.000
26
+ FLOODPLAIN floodplain comment
27
+ SECTION
28
+ 3 down
29
+ 1.000 0.800 150.000 75.000 FRICTION 0.100
30
+ 3
31
+ 0.000 1.000 0.030 0.00 0.00
32
+ 10.000 1.500 0.030 0.00 0.00
33
+ 90.000 1.800 0.030 0.00 0.00
34
+ RIVER
35
+ SECTION
36
+ down
37
+ 0.000 1000.000
38
+ 1
39
+ 0.000 0.000 0.000 1.000
40
+ INITIAL CONDITIONS
41
+ label ? flow stage froude no velocity umode ustate z
42
+ 3 y 0.000 0.000 0.000 0.000 0.000 0.000 0.000
43
+ 1 y 0.000 0.000 0.000 0.000 0.000 0.000 0.000
44
+ 2 y 0.000 0.000 0.000 0.000 0.000 0.000 0.000
45
+ down y 0.000 0.000 0.000 0.000 0.000 0.000 0.000
46
+ GISINFO
47
+ RIVER SECTION 1 0 0 0 0 0
48
+ RIVER SECTION 2 0 0 0 0 0
49
+ RIVER SECTION 3 0 0 0 0 0
50
+ FLOODPLAIN SECTION 3 0 0 0 0 0
51
+ RIVER SECTION down 0 0 0 0 0
52
+ down 0 0 0 0 0