floodmodeller-api 0.5.3__tar.gz → 0.5.3.post2__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.
- {floodmodeller_api-0.5.3/floodmodeller_api.egg-info → floodmodeller_api-0.5.3.post2}/PKG-INFO +1 -1
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/dat.py +100 -52
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/ied.py +1 -1
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/ief.py +20 -3
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_dat.py +73 -1
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/All Units 4_6.DAT +0 -2
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/All Units 4_6.feb +0 -2
- floodmodeller_api-0.5.3.post2/floodmodeller_api/test/test_data/duplicate_unit_test.dat +18 -0
- floodmodeller_api-0.5.3.post2/floodmodeller_api/test/test_data/duplicate_unit_test_unsupported.dat +28 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/encoding_test_cp1252.dat +0 -2
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/encoding_test_utf8.dat +0 -2
- floodmodeller_api-0.5.3.post2/floodmodeller_api/test/test_data/multievent.ief +43 -0
- floodmodeller_api-0.5.3.post2/floodmodeller_api/test/test_data/remove_dummy_test.dat +19 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_ief.py +67 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_json.py +3 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_read_file.py +3 -0
- floodmodeller_api-0.5.3.post2/floodmodeller_api/test/test_sluice.py +31 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/units/structures.py +1 -1
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/units/units.py +1 -0
- floodmodeller_api-0.5.3.post2/floodmodeller_api/version.py +1 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2/floodmodeller_api.egg-info}/PKG-INFO +1 -1
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api.egg-info/SOURCES.txt +5 -0
- floodmodeller_api-0.5.3/floodmodeller_api/version.py +0 -1
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/LICENSE.txt +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/MANIFEST.in +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/README.md +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/__init__.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/_base.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/backup.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/diff.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/hydrology_plus/__init__.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/hydrology_plus/helper.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/hydrology_plus/hydrology_plus_export.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/ief_flags.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/inp.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/libs/libifcoremd.dll +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/libs/libifcoremt.so.5 +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/libs/libifport.so.5 +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/libs/libimf.so +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/libs/libintlc.so.5 +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/libs/libmmd.dll +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/libs/libsvml.so +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/libs/libzzn_read.so +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/libs/zzn_read.dll +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/logs/__init__.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/logs/lf.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/logs/lf_helpers.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/logs/lf_params.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/mapping.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/__init__.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/conftest.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_backup.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_conveyance.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/7082.ief +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/BRIDGE.DAT +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/BaseModel_2D_Q100.ief +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/Baseline_unchecked.csv +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/Constant QT.ief +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/Culvert_Inlet_Outlet.dat +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/Culvert_Inlet_Outlet.feb +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/DamBreakADI.xml +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/DamBreakFAST.xml +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/DamBreakFAST_dy.xml +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/DamBreakTVD.xml +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/DefenceBreach.xml +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/DefenceBreachFAST.xml +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/DefenceBreachFAST_dy.xml +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/Domain1+2_QH.xml +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/Domain1_H.xml +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/Domain1_Q.xml +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/Domain1_Q_FAST.xml +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/Domain1_Q_FAST_dy.xml +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/Domain1_Q_xml_expected.json +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/Domain1_W.xml +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/EX1.DAT +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/EX1.ext +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/EX1.feb +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/EX1.gxy +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/EX17.DAT +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/EX17.ext +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/EX17.feb +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/EX18.DAT +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/EX18_DAT_expected.json +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/EX2.DAT +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/EX3.DAT +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/EX3_DAT_expected.json +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/EX3_IEF_expected.json +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/EX6.DAT +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/EX6.ext +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/EX6.feb +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/EX6_DAT_expected.json +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/Event Data Example.DAT +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/Event Data Example.ext +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/Event Data Example.feb +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/FEH boundary.ief +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/Linked1D2D.xml +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/Linked1D2DFAST.xml +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/Linked1D2DFAST_dy.xml +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/Linked1D2D_xml_expected.json +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/P3Panels_UNsteady.ief +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/QT in dat file.ief +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/T10.ief +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/T2.ief +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/T5.ief +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/blockage.dat +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/blockage.ext +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/blockage.feb +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/blockage.gxy +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/conveyance_test.dat +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/conveyance_test.feb +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/conveyance_test.gxy +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/defaultUnits.dat +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/defaultUnits.ext +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/defaultUnits.feb +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/defaultUnits.fmpx +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/defaultUnits.gxy +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/df_flows_hplus.csv +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/event_hplus.csv +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/ex3.ief +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/ex3.lf1 +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/ex4.DAT +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/ex4.ief +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/ex4_changed.DAT +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/ex6.ief +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/example1.inp +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/example2.inp +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/example3.inp +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/example4.inp +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/example5.inp +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/example6.inp +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/example_h+_export.csv +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/expected_conveyance.csv +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/floodplain.dat +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/hplus_export_example_1.csv +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/hplus_export_example_10.csv +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/hplus_export_example_2.csv +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/hplus_export_example_3.csv +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/hplus_export_example_4.csv +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/hplus_export_example_5.csv +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/hplus_export_example_6.csv +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/hplus_export_example_7.csv +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/hplus_export_example_8.csv +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/hplus_export_example_9.csv +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/integrated_bridge/AR_NoSP_NoBl_2O_NO_OneFRC.ied +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/integrated_bridge/AR_vSP_25pc_1O.ied +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/integrated_bridge/PL_vSP_25pc_1O.ied +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/integrated_bridge/SBTwoFRCsStaggered.IED +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/integrated_bridge/US_NoSP_NoBl_OR_RN.ied +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/integrated_bridge/US_SP_NoBl_OR_frc_PT2-5_RN.ied +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/integrated_bridge/US_fSP_NoBl_1O.ied +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/integrated_bridge/US_nSP_NoBl_1O.ied +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/integrated_bridge/US_vSP_NoBl_2O_Para.ied +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/integrated_bridge.dat +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/jump.dat +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/lf_complex_ex.lf1 +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/network.dat +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/network.ext +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/network.exy +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/network.feb +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/network.ied +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/network.ief +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/network.inp +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/network.mmm +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/network.pxy +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/network.uic +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/network.zzd +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/network.zzl +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/network.zzn +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/network.zzu +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/network.zzx +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/network_dat_expected.json +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/network_ied_expected.json +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/network_with_comments.ied +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/rnweir.dat +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/rnweir.ext +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/rnweir.feb +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/rnweir.gxy +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/rnweir_default.dat +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/rnweir_default.ext +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/rnweir_default.feb +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/rnweir_default.fmpx +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/rnweir_default.gxy +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/structure_logs/EX17_expected.csv +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/structure_logs/EX17_expected.json +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/structure_logs/EX18_expected.csv +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/structure_logs/EX18_expected.json +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/structure_logs/EX6_expected.csv +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/structure_logs/EX6_expected.json +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/tabular_csv_outputs/network_zzn_flow.csv +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/tabular_csv_outputs/network_zzn_fr.csv +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/tabular_csv_outputs/network_zzn_max.csv +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/tabular_csv_outputs/network_zzn_mode.csv +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/tabular_csv_outputs/network_zzn_stage.csv +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/tabular_csv_outputs/network_zzn_state.csv +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/tabular_csv_outputs/network_zzn_velocity.csv +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/tabular_csv_outputs/network_zzx_left_fp_h.csv +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/tabular_csv_outputs/network_zzx_left_fp_mode.csv +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/tabular_csv_outputs/network_zzx_link_inflow.csv +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/tabular_csv_outputs/network_zzx_max.csv +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/tabular_csv_outputs/network_zzx_right_fp_h.csv +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/tabular_csv_outputs/network_zzx_right_fp_mode.csv +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_data/unit checks.dat +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_flowtimeprofile.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_fmfile.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_hydrology_plus_export.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_ied.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_inp.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_integrated_bridge.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_logs_lf.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_river.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_tool.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_toolbox_structure_log.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_unit.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_xml2d.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_zz.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/to_from_json.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/tool.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/toolbox/__init__.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/toolbox/example_tool.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/toolbox/gui/bg.PNG +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/toolbox/gui/logo.PNG +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/toolbox/model_build/__init__.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/toolbox/model_build/add_siltation_definition.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/toolbox/model_build/structure_log/__init__.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/toolbox/model_build/structure_log/structure_log.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/toolbox/model_build/structure_log_definition.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/toolbox/model_conversion/__init__.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/toolbox/model_review/__init__.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/toolbox/results_analysis/__init__.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/units/__init__.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/units/_base.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/units/_helpers.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/units/boundaries.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/units/comment.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/units/conduits.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/units/connectors.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/units/controls.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/units/conveyance.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/units/iic.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/units/losses.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/units/sections.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/units/unsupported.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/units/variables.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/urban1d/__init__.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/urban1d/_base.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/urban1d/conduits.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/urban1d/general_parameters.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/urban1d/junctions.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/urban1d/losses.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/urban1d/outfalls.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/urban1d/raingauges.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/urban1d/subsections.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/urban1d/xsections.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/util.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/validation/__init__.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/validation/parameters.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/validation/urban_parameters.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/validation/validation.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/xml2d.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/xml2d_template.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/xsd_backup.xml +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/zz.py +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api.egg-info/dependency_links.txt +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api.egg-info/entry_points.txt +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api.egg-info/requires.txt +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api.egg-info/top_level.txt +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/pyproject.toml +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/requirements.txt +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/setup.cfg +0 -0
- {floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/setup.py +0 -0
|
@@ -453,12 +453,14 @@ class DAT(FMFile):
|
|
|
453
453
|
"losses": [],
|
|
454
454
|
"connectors": [],
|
|
455
455
|
"controls": [],
|
|
456
|
+
"_unsupported": [],
|
|
456
457
|
}
|
|
457
458
|
|
|
458
459
|
for block in self._dat_struct:
|
|
459
460
|
# Check for all supported boundary types
|
|
460
|
-
if block["Type"] not in units.
|
|
461
|
+
if block["Type"] not in units.ALL_UNIT_TYPES:
|
|
461
462
|
continue
|
|
463
|
+
unit_type = block["Type"]
|
|
462
464
|
# clause for when unit has been inserted into the dat file
|
|
463
465
|
if "new_insert" in block:
|
|
464
466
|
block["start"] = prev_block_end + 1
|
|
@@ -474,24 +476,26 @@ class DAT(FMFile):
|
|
|
474
476
|
]
|
|
475
477
|
prev_block_len = len(unit_data)
|
|
476
478
|
|
|
477
|
-
if
|
|
479
|
+
if unit_type == "INITIAL CONDITIONS":
|
|
478
480
|
new_unit_data = self.initial_conditions._write()
|
|
479
|
-
elif
|
|
481
|
+
elif unit_type == "COMMENT":
|
|
480
482
|
comment = comment_units[comment_tracker]
|
|
481
483
|
new_unit_data = comment._write()
|
|
482
484
|
comment_tracker += 1
|
|
483
485
|
|
|
484
|
-
elif
|
|
486
|
+
elif unit_type == "VARIABLES":
|
|
485
487
|
new_unit_data = self.variables._write()
|
|
486
488
|
|
|
487
489
|
else:
|
|
488
|
-
if units.SUPPORTED_UNIT_TYPES
|
|
489
|
-
unit_name =
|
|
490
|
+
if unit_type in units.SUPPORTED_UNIT_TYPES:
|
|
491
|
+
unit_name = self._get_supported_unit_name(unit_type, unit_data)
|
|
492
|
+
unit_group_str = units.SUPPORTED_UNIT_TYPES[unit_type]["group"]
|
|
490
493
|
else:
|
|
491
|
-
unit_name =
|
|
494
|
+
unit_name, _ = self._get_unsupported_unit_name(unit_type, unit_data)
|
|
495
|
+
unit_name = f"{unit_name} ({unit_type})"
|
|
496
|
+
unit_group_str = "_unsupported"
|
|
492
497
|
|
|
493
498
|
# Get unit object
|
|
494
|
-
unit_group_str = units.SUPPORTED_UNIT_TYPES[block["Type"]]["group"]
|
|
495
499
|
unit_group = getattr(self, unit_group_str)
|
|
496
500
|
if unit_name in unit_group:
|
|
497
501
|
# block still exists
|
|
@@ -571,22 +575,31 @@ class DAT(FMFile):
|
|
|
571
575
|
raise Exception(msg)
|
|
572
576
|
# Changes done to account for unit types with spaces/dashes eg Flat-V Weir
|
|
573
577
|
unit_type_safe = unit_type.replace(" ", "_").replace("-", "_")
|
|
574
|
-
unit_group[unit_name] =
|
|
575
|
-
f"units.{unit_type_safe}({unit_data}, {self._label_len})",
|
|
576
|
-
)
|
|
578
|
+
unit_group[unit_name] = getattr(units, unit_type_safe)(unit_data, self._label_len)
|
|
577
579
|
self._all_units.append(unit_group[unit_name])
|
|
578
580
|
|
|
579
581
|
def _process_unsupported_unit(self, unit_type, unit_data) -> None:
|
|
580
582
|
# Check to see whether unit type has associated subtypes so that unit name can be correctly assigned
|
|
581
583
|
unit_name, subtype = self._get_unsupported_unit_name(unit_type, unit_data)
|
|
582
|
-
|
|
584
|
+
unit_name_and_type = f"{unit_name} ({unit_type})"
|
|
585
|
+
if unit_name_and_type in self._unsupported:
|
|
586
|
+
msg = (
|
|
587
|
+
f"Duplicate label ({unit_name_and_type}) encountered within category: _unsupported"
|
|
588
|
+
)
|
|
589
|
+
raise Exception(msg)
|
|
590
|
+
self._unsupported[unit_name_and_type] = units.UNSUPPORTED(
|
|
583
591
|
unit_data,
|
|
584
592
|
self._label_len,
|
|
585
593
|
unit_name=unit_name,
|
|
586
594
|
unit_type=unit_type,
|
|
587
595
|
subtype=subtype,
|
|
588
596
|
)
|
|
589
|
-
self._all_units.append(self._unsupported[
|
|
597
|
+
self._all_units.append(self._unsupported[unit_name_and_type])
|
|
598
|
+
|
|
599
|
+
def _get_supported_unit_name(self, unit_type: str, unit_data: list[str]) -> str:
|
|
600
|
+
if units.SUPPORTED_UNIT_TYPES[unit_type]["has_subtype"]:
|
|
601
|
+
return unit_data[2][: self._label_len].strip()
|
|
602
|
+
return unit_data[1][: self._label_len].strip()
|
|
590
603
|
|
|
591
604
|
def _get_unsupported_unit_name(self, unit_type: str, unit_data: list[str]) -> tuple[str, bool]:
|
|
592
605
|
# Check if the unit type has associated subtypes
|
|
@@ -710,6 +723,19 @@ class DAT(FMFile):
|
|
|
710
723
|
|
|
711
724
|
return unit_block, in_block
|
|
712
725
|
|
|
726
|
+
@property
|
|
727
|
+
def node_labels(self):
|
|
728
|
+
all_labels = set()
|
|
729
|
+
for unit in self._all_units:
|
|
730
|
+
all_labels.update(unit.all_labels)
|
|
731
|
+
return all_labels
|
|
732
|
+
|
|
733
|
+
def _get_unit_group_name(self, unit: Unit) -> str:
|
|
734
|
+
unit_type = unit.unit
|
|
735
|
+
if unit_type in units.SUPPORTED_UNIT_TYPES:
|
|
736
|
+
return units.SUPPORTED_UNIT_TYPES[unit_type]["group"]
|
|
737
|
+
return "_unsupported"
|
|
738
|
+
|
|
713
739
|
@handle_exception(when="remove unit from")
|
|
714
740
|
def remove_unit(self, unit: Unit) -> None:
|
|
715
741
|
"""Remove a unit from the dat file.
|
|
@@ -734,19 +760,23 @@ class DAT(FMFile):
|
|
|
734
760
|
# remove from raw data
|
|
735
761
|
del self._raw_data[dat_struct_unit["start"] : dat_struct_unit["end"] + 1]
|
|
736
762
|
# remove from unit group
|
|
737
|
-
unit_group_name =
|
|
763
|
+
unit_group_name = self._get_unit_group_name(unit)
|
|
738
764
|
unit_group = getattr(self, unit_group_name)
|
|
739
|
-
|
|
740
|
-
|
|
741
|
-
|
|
742
|
-
|
|
743
|
-
|
|
765
|
+
if unit_group_name == "_unsupported":
|
|
766
|
+
del unit_group[f"{unit.name} ({unit.unit})"]
|
|
767
|
+
else:
|
|
768
|
+
del unit_group[unit.name]
|
|
769
|
+
# remove from ICs if no more labels
|
|
770
|
+
if unit.name not in self.node_labels:
|
|
771
|
+
self.initial_conditions.data = self.initial_conditions.data.loc[
|
|
772
|
+
self.initial_conditions.data["label"] != unit.name
|
|
773
|
+
]
|
|
774
|
+
self.general_parameters["Node Count"] -= 1
|
|
744
775
|
|
|
745
776
|
self._update_dat_struct()
|
|
746
|
-
self.general_parameters["Node Count"] -= 1
|
|
747
777
|
|
|
748
778
|
@handle_exception(when="insert unit into")
|
|
749
|
-
def insert_unit(
|
|
779
|
+
def insert_unit(
|
|
750
780
|
self,
|
|
751
781
|
unit: Unit,
|
|
752
782
|
add_before: Unit | None = None,
|
|
@@ -769,6 +799,48 @@ class DAT(FMFile):
|
|
|
769
799
|
NameError: Raised if unit name already appears in unit group.
|
|
770
800
|
"""
|
|
771
801
|
# catch errors
|
|
802
|
+
self._validate_insert_unit_params(unit, add_before, add_after, add_at)
|
|
803
|
+
|
|
804
|
+
unit_class = unit._unit
|
|
805
|
+
if unit_class != "COMMENT":
|
|
806
|
+
_validate_unit(unit)
|
|
807
|
+
unit_group_name = self._get_unit_group_name(unit)
|
|
808
|
+
unit_group = getattr(self, unit_group_name)
|
|
809
|
+
if unit.name in unit_group:
|
|
810
|
+
msg = "Name already appears in unit group. Cannot have two units with same name in same group"
|
|
811
|
+
raise NameError(msg)
|
|
812
|
+
|
|
813
|
+
insert_index = self._get_insert_index(add_before, add_after, add_at)
|
|
814
|
+
|
|
815
|
+
unit_data = unit._write()
|
|
816
|
+
if unit._unit != "COMMENT":
|
|
817
|
+
if unit_group_name == "_unsupported":
|
|
818
|
+
unit_group[f"{unit.name} ({unit.unit})"] = unit
|
|
819
|
+
else:
|
|
820
|
+
unit_group[unit.name] = unit
|
|
821
|
+
self._dat_struct.insert(
|
|
822
|
+
insert_index + 1,
|
|
823
|
+
{"Type": unit_class, "new_insert": unit_data},
|
|
824
|
+
) # add to dat struct without unit.name
|
|
825
|
+
|
|
826
|
+
if unit._unit != "COMMENT" and unit.name not in self.node_labels:
|
|
827
|
+
# update the iic's tables
|
|
828
|
+
iic_data = [unit.name, "y", 00.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
|
829
|
+
self.initial_conditions.data.loc[len(self.initial_conditions.data)] = iic_data # flaged
|
|
830
|
+
self.general_parameters["Node Count"] += 1 # flag no update for comments
|
|
831
|
+
|
|
832
|
+
self._all_units.insert(insert_index, unit)
|
|
833
|
+
if not defer_update:
|
|
834
|
+
self._update_raw_data()
|
|
835
|
+
self._update_dat_struct()
|
|
836
|
+
|
|
837
|
+
def _validate_insert_unit_params(
|
|
838
|
+
self,
|
|
839
|
+
unit: Unit,
|
|
840
|
+
add_before: Unit | None,
|
|
841
|
+
add_after: Unit | None,
|
|
842
|
+
add_at: int | None,
|
|
843
|
+
):
|
|
772
844
|
provided_params = sum(arg is not None for arg in (add_before, add_after, add_at))
|
|
773
845
|
if provided_params == 0:
|
|
774
846
|
msg = "No positional argument given. Please provide either add_before, add_at or add_after"
|
|
@@ -783,15 +855,12 @@ class DAT(FMFile):
|
|
|
783
855
|
msg = "add_before or add_after argument must be a Flood Modeller Unit type"
|
|
784
856
|
raise TypeError(msg)
|
|
785
857
|
|
|
786
|
-
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
790
|
-
|
|
791
|
-
|
|
792
|
-
msg = "Name already appears in unit group. Cannot have two units with same name in same group"
|
|
793
|
-
raise NameError(msg)
|
|
794
|
-
|
|
858
|
+
def _get_insert_index(
|
|
859
|
+
self,
|
|
860
|
+
add_before: Unit | None,
|
|
861
|
+
add_after: Unit | None,
|
|
862
|
+
add_at: int | None,
|
|
863
|
+
) -> int:
|
|
795
864
|
# positional argument
|
|
796
865
|
if add_at is not None:
|
|
797
866
|
insert_index = add_at
|
|
@@ -812,28 +881,7 @@ class DAT(FMFile):
|
|
|
812
881
|
f"{check_unit} not found in dat network, so cannot be used to add before/after"
|
|
813
882
|
)
|
|
814
883
|
raise Exception(msg)
|
|
815
|
-
|
|
816
|
-
unit_data = unit._write()
|
|
817
|
-
self._all_units.insert(insert_index, unit)
|
|
818
|
-
if unit._unit != "COMMENT":
|
|
819
|
-
unit_group[unit.name] = unit
|
|
820
|
-
self._dat_struct.insert(
|
|
821
|
-
insert_index + 1,
|
|
822
|
-
{"Type": unit_class, "new_insert": unit_data},
|
|
823
|
-
) # add to dat struct without unit.name
|
|
824
|
-
|
|
825
|
-
if unit._unit != "COMMENT":
|
|
826
|
-
# update the iic's tables
|
|
827
|
-
iic_data = [unit.name, "y", 00.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
|
|
828
|
-
self.initial_conditions.data.loc[len(self.initial_conditions.data)] = iic_data # flaged
|
|
829
|
-
|
|
830
|
-
# update all
|
|
831
|
-
if unit._unit != "COMMENT":
|
|
832
|
-
self.general_parameters["Node Count"] += 1 # flag no update for comments
|
|
833
|
-
|
|
834
|
-
if not defer_update:
|
|
835
|
-
self._update_raw_data()
|
|
836
|
-
self._update_dat_struct()
|
|
884
|
+
return insert_index
|
|
837
885
|
|
|
838
886
|
def insert_units(
|
|
839
887
|
self,
|
|
@@ -183,7 +183,7 @@ class IED(FMFile):
|
|
|
183
183
|
if unit_name in unit_group:
|
|
184
184
|
msg = f'Duplicate label ({unit_name}) encountered within category: {units.SUPPORTED_UNIT_TYPES[block["Type"]]["group"]}'
|
|
185
185
|
raise Exception(msg)
|
|
186
|
-
unit_group[unit_name] =
|
|
186
|
+
unit_group[unit_name] = getattr(units, block["Type"])(unit_data)
|
|
187
187
|
|
|
188
188
|
self._all_units.append(unit_group[unit_name])
|
|
189
189
|
|
|
@@ -18,6 +18,7 @@ from __future__ import annotations
|
|
|
18
18
|
|
|
19
19
|
import csv
|
|
20
20
|
import logging
|
|
21
|
+
import re
|
|
21
22
|
import subprocess
|
|
22
23
|
import time
|
|
23
24
|
from io import StringIO
|
|
@@ -98,6 +99,8 @@ class IEF(FMFile):
|
|
|
98
99
|
self._ief_properties: list[str] = []
|
|
99
100
|
self.EventData: dict[str, str] = {}
|
|
100
101
|
self.flowtimeprofiles: list[FlowTimeProfile] = []
|
|
102
|
+
|
|
103
|
+
raw_eventdata: list[tuple[str, str]] = []
|
|
101
104
|
for line in raw_data:
|
|
102
105
|
# Handle any comments here (prefixed with ;)
|
|
103
106
|
if line.lstrip().startswith(";"):
|
|
@@ -116,7 +119,7 @@ class IEF(FMFile):
|
|
|
116
119
|
event_data_title = value
|
|
117
120
|
else:
|
|
118
121
|
event_data_title = prev_comment
|
|
119
|
-
|
|
122
|
+
raw_eventdata.append((event_data_title, value))
|
|
120
123
|
self._ief_properties.append("EventData")
|
|
121
124
|
|
|
122
125
|
elif prop.upper().startswith("FLOWTIMEPROFILE"):
|
|
@@ -134,6 +137,7 @@ class IEF(FMFile):
|
|
|
134
137
|
self._ief_properties.append(line)
|
|
135
138
|
prev_comment = None
|
|
136
139
|
|
|
140
|
+
self._eventdata_read_helper(raw_eventdata)
|
|
137
141
|
self._check_formatting(raw_data)
|
|
138
142
|
self._update_ief_properties() # call this here to ensure ief properties is correct
|
|
139
143
|
|
|
@@ -179,7 +183,10 @@ class IEF(FMFile):
|
|
|
179
183
|
# Add multiple EventData if present
|
|
180
184
|
for idx, key in enumerate(event_data):
|
|
181
185
|
if idx == event_index:
|
|
182
|
-
|
|
186
|
+
# we enter this block if we're ready to write the event data
|
|
187
|
+
# scrub off any extra bits we've added as part of the make-unique bit of reading.
|
|
188
|
+
title = re.sub(r"<\d>$", "", key)
|
|
189
|
+
ief_string += f";{title}\nEventData{eq}{event_data[key]!s}\n"
|
|
183
190
|
break
|
|
184
191
|
event_index += 1
|
|
185
192
|
|
|
@@ -328,6 +335,16 @@ class IEF(FMFile):
|
|
|
328
335
|
if removed == to_remove:
|
|
329
336
|
break
|
|
330
337
|
|
|
338
|
+
def _eventdata_read_helper(self, raw_eventdata: list[tuple[str, str]]) -> None:
|
|
339
|
+
# now we deal with the event data, and convert it into the dict-based .eventdata
|
|
340
|
+
for title, ied_path in raw_eventdata:
|
|
341
|
+
n = 0
|
|
342
|
+
new_title = title or "<0>" # set empty string to placeholder
|
|
343
|
+
while new_title in self.eventdata:
|
|
344
|
+
new_title = f"{title}<{n}>"
|
|
345
|
+
n += 1
|
|
346
|
+
self.eventdata[new_title] = ied_path
|
|
347
|
+
|
|
331
348
|
def _update_flowtimeprofile_info(self) -> None:
|
|
332
349
|
"""Update the flowtimeprofile data stored in ief properties"""
|
|
333
350
|
if not hasattr(self, "flowtimeprofiles") or len(self.flowtimeprofiles) == 0:
|
|
@@ -570,7 +587,7 @@ class IEF(FMFile):
|
|
|
570
587
|
|
|
571
588
|
return ZZN(result_path)
|
|
572
589
|
|
|
573
|
-
def get_log(self):
|
|
590
|
+
def get_log(self) -> LF1:
|
|
574
591
|
"""If log files for the simulation exist, this function returns them as a LF1 class object
|
|
575
592
|
|
|
576
593
|
Returns:
|
{floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_dat.py
RENAMED
|
@@ -5,7 +5,7 @@ from unittest.mock import patch
|
|
|
5
5
|
import pytest
|
|
6
6
|
|
|
7
7
|
from floodmodeller_api import DAT
|
|
8
|
-
from floodmodeller_api.units import JUNCTION, LATERAL, QTBDY, RESERVOIR
|
|
8
|
+
from floodmodeller_api.units import JUNCTION, LATERAL, QTBDY, RESERVOIR, UNSUPPORTED
|
|
9
9
|
from floodmodeller_api.util import FloodModellerAPIError
|
|
10
10
|
|
|
11
11
|
|
|
@@ -42,6 +42,28 @@ def dat_ex6(test_workspace):
|
|
|
42
42
|
yield dat
|
|
43
43
|
|
|
44
44
|
|
|
45
|
+
@pytest.fixture()
|
|
46
|
+
def unsupported_dummy_unit():
|
|
47
|
+
data = [
|
|
48
|
+
"APITESTDUMMY Dummy unnsupported unit for testing purposes",
|
|
49
|
+
"LBL001 LBL002",
|
|
50
|
+
"arbitrary data",
|
|
51
|
+
" table01234",
|
|
52
|
+
" -0.500 0.000 0.000 0.000091000000.0",
|
|
53
|
+
" 0.000 1.000 1.000 0.0000 910000000",
|
|
54
|
+
" 1.000 2.000 2.000 0.000091000000.0",
|
|
55
|
+
" 2.000 3.000 3.000 0.000091000000.0",
|
|
56
|
+
" 5.000 3.000 3.000 0.000091000000.0",
|
|
57
|
+
]
|
|
58
|
+
return UNSUPPORTED(
|
|
59
|
+
data,
|
|
60
|
+
12,
|
|
61
|
+
unit_name="LBL001",
|
|
62
|
+
unit_type="APITESTDUMMY",
|
|
63
|
+
subtype=False,
|
|
64
|
+
)
|
|
65
|
+
|
|
66
|
+
|
|
45
67
|
def test_changing_section_and_dist_works(dat_fp, data_before):
|
|
46
68
|
"""DAT: Test changing and reverting section name and dist to next makes no changes"""
|
|
47
69
|
dat = DAT(dat_fp)
|
|
@@ -74,6 +96,9 @@ def test_changing_and_reverting_qtbdy_hydrograph_works(dat_fp, data_before):
|
|
|
74
96
|
def test_dat_read_doesnt_change_data(test_workspace, tmp_path):
|
|
75
97
|
"""DAT: Check all '.dat' files in folder by reading the _write() output into a new DAT instance and checking it stays the same."""
|
|
76
98
|
for datfile in Path(test_workspace).glob("*.dat"):
|
|
99
|
+
if datfile.name.startswith("duplicate_unit_test"):
|
|
100
|
+
# Skipping as invalid DAT (duplicate units)
|
|
101
|
+
continue
|
|
77
102
|
dat = DAT(datfile)
|
|
78
103
|
first_output = dat._write()
|
|
79
104
|
new_path = tmp_path / "tmp.dat"
|
|
@@ -380,3 +405,50 @@ def test_encoding(test_workspace: Path, dat_str: str, label: str, tmp_path: Path
|
|
|
380
405
|
|
|
381
406
|
assert label in dat_read.sections
|
|
382
407
|
assert label in dat_write.sections # remains as \xc3\xa5 even for utf8
|
|
408
|
+
|
|
409
|
+
|
|
410
|
+
def test_insert_unsupported_unit(tmp_path: Path, unsupported_dummy_unit):
|
|
411
|
+
new_dat = DAT()
|
|
412
|
+
new_dat.insert_unit(unsupported_dummy_unit, add_at=-1)
|
|
413
|
+
assert unsupported_dummy_unit in new_dat._unsupported.values()
|
|
414
|
+
assert len(new_dat._all_units) == 1
|
|
415
|
+
filepath = tmp_path / "insert_dummy_test.dat"
|
|
416
|
+
new_dat.save(filepath)
|
|
417
|
+
|
|
418
|
+
dat = DAT(filepath)
|
|
419
|
+
assert unsupported_dummy_unit in dat._unsupported.values()
|
|
420
|
+
assert len(dat._all_units) == 1
|
|
421
|
+
|
|
422
|
+
|
|
423
|
+
def test_remove_unsupported_unit(test_workspace, unsupported_dummy_unit):
|
|
424
|
+
dat = DAT(test_workspace / "remove_dummy_test.dat")
|
|
425
|
+
assert len(dat._all_units) == 1
|
|
426
|
+
assert len(dat._dat_struct) == 3
|
|
427
|
+
assert len(dat.initial_conditions.data) == 1
|
|
428
|
+
assert "LBL001 (APITESTDUMMY)" in dat._unsupported
|
|
429
|
+
dat.remove_unit(unsupported_dummy_unit)
|
|
430
|
+
assert len(dat._all_units) == 0
|
|
431
|
+
assert len(dat._dat_struct) == 2
|
|
432
|
+
assert len(dat.initial_conditions.data) == 0
|
|
433
|
+
assert "LBL001 (APITESTDUMMY)" not in dat._unsupported
|
|
434
|
+
dat._write()
|
|
435
|
+
assert len(dat._all_units) == 0
|
|
436
|
+
assert len(dat._dat_struct) == 2
|
|
437
|
+
assert len(dat.initial_conditions.data) == 0
|
|
438
|
+
assert "LBL001 (APITESTDUMMY)" not in dat._unsupported
|
|
439
|
+
|
|
440
|
+
|
|
441
|
+
def test_duplicate_unit_raises_error(test_workspace):
|
|
442
|
+
msg = (
|
|
443
|
+
r"\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~"
|
|
444
|
+
r"\nAPI Error: Problem encountered when trying to read DAT file .*\."
|
|
445
|
+
r"\n"
|
|
446
|
+
r"\nDetails: .*-floodmodeller_api/dat\.py-\d+"
|
|
447
|
+
r"\nMsg: Duplicate label (.*) encountered within category: .*"
|
|
448
|
+
r"\n"
|
|
449
|
+
r"\nFor additional support, go to: https://github\.com/People-Places-Solutions/floodmodeller-api"
|
|
450
|
+
)
|
|
451
|
+
with pytest.raises(FloodModellerAPIError, match=msg):
|
|
452
|
+
DAT(test_workspace / "duplicate_unit_test.dat")
|
|
453
|
+
with pytest.raises(FloodModellerAPIError, match=msg):
|
|
454
|
+
DAT(test_workspace / "duplicate_unit_test_unsupported.dat")
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
duplicate units for test
|
|
2
|
+
#REVISION#1
|
|
3
|
+
1 0.750 0.900 0.100 0.001 12
|
|
4
|
+
10.000 0.010 0.010 0.700 0.100 0.700 0.000
|
|
5
|
+
RAD FILE
|
|
6
|
+
|
|
7
|
+
END GENERAL
|
|
8
|
+
QTBDY
|
|
9
|
+
qtboundary
|
|
10
|
+
1 0.000 0.000 seconds EXTEND LINEAR 1.000
|
|
11
|
+
20.000 0.000
|
|
12
|
+
QTBDY
|
|
13
|
+
qtboundary
|
|
14
|
+
1 0.000 0.000 seconds EXTEND LINEAR 1.000
|
|
15
|
+
20.000 0.000
|
|
16
|
+
GISINFO
|
|
17
|
+
QTBDY 0 478 986 0 0 1
|
|
18
|
+
0 0 0 0 0 0
|
floodmodeller_api-0.5.3.post2/floodmodeller_api/test/test_data/duplicate_unit_test_unsupported.dat
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
duplicate units for test
|
|
2
|
+
#REVISION#1
|
|
3
|
+
2 0.750 0.900 0.100 0.001 12
|
|
4
|
+
10.000 0.010 0.010 0.700 0.100 0.700 0.000
|
|
5
|
+
RAD FILE
|
|
6
|
+
|
|
7
|
+
END GENERAL
|
|
8
|
+
APITESTDUMMY Dummy unnsupported unit for testing purposes
|
|
9
|
+
LBL001 LBL002
|
|
10
|
+
arbitrary data
|
|
11
|
+
table01234
|
|
12
|
+
-0.500 0.000 0.000 0.000091000000.0
|
|
13
|
+
0.000 1.000 1.000 0.0000 910000000
|
|
14
|
+
1.000 2.000 2.000 0.000091000000.0
|
|
15
|
+
2.000 3.000 3.000 0.000091000000.0
|
|
16
|
+
5.000 3.000 3.000 0.000091000000.0
|
|
17
|
+
APITESTDUMMY Dummy unnsupported unit for testing purposes
|
|
18
|
+
LBL001 LBL002
|
|
19
|
+
arbitrary data
|
|
20
|
+
table01234
|
|
21
|
+
-0.500 0.000 0.000 0.000091000000.0
|
|
22
|
+
0.000 1.000 1.000 0.0000 910000000
|
|
23
|
+
1.000 2.000 2.000 0.000091000000.0
|
|
24
|
+
2.000 3.000 3.000 0.000091000000.0
|
|
25
|
+
5.000 3.000 3.000 0.000091000000.0
|
|
26
|
+
GISINFO
|
|
27
|
+
APITESTDUMMY 0 478 986 0 0 1
|
|
28
|
+
0 0 0 0 0 0
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
[ISIS Event Header]
|
|
2
|
+
Title=Multievent Test IEF
|
|
3
|
+
Datafile=network.dat
|
|
4
|
+
Results=..\Somewhere
|
|
5
|
+
[ISIS Event Details]
|
|
6
|
+
RunType=Unsteady
|
|
7
|
+
InitialConditions=..\initial_conditions.iic
|
|
8
|
+
Start=0
|
|
9
|
+
Finish=360
|
|
10
|
+
InitialTimestep=10
|
|
11
|
+
MinimumTimestep=10
|
|
12
|
+
MaximumTimestep=10
|
|
13
|
+
SaveInterval=900
|
|
14
|
+
;Fluvial Inflow
|
|
15
|
+
EventData=..\network.ied
|
|
16
|
+
;Event Override
|
|
17
|
+
EventData=..\event_override.ied
|
|
18
|
+
;Spill Data
|
|
19
|
+
EventData=..\spill1.ied
|
|
20
|
+
;Spill Data
|
|
21
|
+
EventData=..\spill2.ied
|
|
22
|
+
;
|
|
23
|
+
EventData=..\ied_01.IED
|
|
24
|
+
;
|
|
25
|
+
EventData=..\ied_02.IED
|
|
26
|
+
;
|
|
27
|
+
EventData=..\ied_03.IED
|
|
28
|
+
Dflood=5
|
|
29
|
+
Qtol=0.1
|
|
30
|
+
Minitr=5
|
|
31
|
+
Maxitr=19
|
|
32
|
+
Theta=0.55
|
|
33
|
+
Weight=0.1
|
|
34
|
+
AdaptiveTimestep=1
|
|
35
|
+
RefineBridgeSecProps=0
|
|
36
|
+
SolveDHEqualsZeroAtStart=1
|
|
37
|
+
RulesAtTimeZero=1
|
|
38
|
+
RulesOnFirstIteration=0
|
|
39
|
+
ResetTimesAfterPos=1
|
|
40
|
+
UseFPSModularLimit=1
|
|
41
|
+
LaunchDoublePrecisionVersion=1
|
|
42
|
+
UseRemoteQ=1
|
|
43
|
+
2DFLOW=1
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
|
|
2
|
+
#REVISION#1
|
|
3
|
+
1 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
|
+
APITESTDUMMY Dummy unnsupported unit for testing purposes
|
|
9
|
+
LBL001 LBL002
|
|
10
|
+
arbitrary data
|
|
11
|
+
table01234
|
|
12
|
+
-0.500 0.000 0.000 0.000091000000.0
|
|
13
|
+
0.000 1.000 1.000 0.0000 910000000
|
|
14
|
+
1.000 2.000 2.000 0.000091000000.0
|
|
15
|
+
2.000 3.000 3.000 0.000091000000.0
|
|
16
|
+
5.000 3.000 3.000 0.000091000000.0
|
|
17
|
+
INITIAL CONDITIONS
|
|
18
|
+
label ? flow stage froude no velocity umode ustate z
|
|
19
|
+
LBL001 y 0.000 0.000 0.000 0.000 0.000 0.000 0.000
|
{floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_ief.py
RENAMED
|
@@ -18,6 +18,11 @@ def ief(ief_fp: Path) -> IEF:
|
|
|
18
18
|
return IEF(ief_fp)
|
|
19
19
|
|
|
20
20
|
|
|
21
|
+
@pytest.fixture()
|
|
22
|
+
def multievent_ief(test_workspace: Path) -> IEF:
|
|
23
|
+
return IEF(test_workspace / "multievent.ief")
|
|
24
|
+
|
|
25
|
+
|
|
21
26
|
@pytest.fixture()
|
|
22
27
|
def exe_bin(tmpdir) -> Path:
|
|
23
28
|
for exe in ["ISISf32.exe", "ISISf32_DoubleP.exe"]:
|
|
@@ -40,6 +45,7 @@ def sleep():
|
|
|
40
45
|
|
|
41
46
|
def test_ief_read_doesnt_change_data(test_workspace, tmpdir):
|
|
42
47
|
"""IEF: Check all '.ief' files in folder by reading the _write() output into a new IEF instance and checking it stays the same."""
|
|
48
|
+
# we use this instead of parameterise so it will just automatically test any ief in the test data.
|
|
43
49
|
for ief_file in Path(test_workspace).glob("*.ief"):
|
|
44
50
|
ief = IEF(ief_file)
|
|
45
51
|
first_output = ief._write()
|
|
@@ -182,3 +188,64 @@ def test_datafile_path(test_workspace: Path):
|
|
|
182
188
|
path = Path(ief.Datafile)
|
|
183
189
|
assert path.stem == "UptonP8_Panels"
|
|
184
190
|
assert path.parent == Path("../../networks")
|
|
191
|
+
|
|
192
|
+
|
|
193
|
+
def test_unique_events_retained(multievent_ief: IEF):
|
|
194
|
+
"""Tests that the .eventdata attribute retains the same number of items as the original ief"""
|
|
195
|
+
event_dict = multievent_ief.eventdata
|
|
196
|
+
assert len(event_dict) == 7
|
|
197
|
+
|
|
198
|
+
|
|
199
|
+
@pytest.mark.parametrize(
|
|
200
|
+
("sample_eventdata"),
|
|
201
|
+
[
|
|
202
|
+
({}),
|
|
203
|
+
({"Fluvial Inflow": "..\\network.ied", "Event Override": "..\\event_override.ied"}),
|
|
204
|
+
(
|
|
205
|
+
{
|
|
206
|
+
"Fluvial Inflow": "..\\network.ied",
|
|
207
|
+
"Event Override": "..\\event_override.ied",
|
|
208
|
+
"Spill Data": "..\\spill1.ied",
|
|
209
|
+
"Spill Data<0>": "..\\spill2.ied",
|
|
210
|
+
"<0>": "..\\ied_01.IED",
|
|
211
|
+
"<1>": "..\\ied_02.IED",
|
|
212
|
+
"<2>": "..\\ied_03.IED",
|
|
213
|
+
"Added Event": "../added.ied",
|
|
214
|
+
}
|
|
215
|
+
),
|
|
216
|
+
],
|
|
217
|
+
)
|
|
218
|
+
def test_adding_eventdata(multievent_ief, sample_eventdata, tmpdir):
|
|
219
|
+
"""Tests modifying, saving and reading eventdata dictionary.
|
|
220
|
+
|
|
221
|
+
Compares that the input is equal to the output."""
|
|
222
|
+
multievent_ief.eventdata = sample_eventdata
|
|
223
|
+
new_path = Path(tmpdir) / "tmp.ief"
|
|
224
|
+
multievent_ief.save(new_path)
|
|
225
|
+
|
|
226
|
+
new_ief = IEF(new_path)
|
|
227
|
+
assert new_ief.eventdata == sample_eventdata
|
|
228
|
+
|
|
229
|
+
|
|
230
|
+
def test_renaming_eventdata(multievent_ief, tmpdir):
|
|
231
|
+
"""Tests renaming an event, after it has been substituted for a temporary one."""
|
|
232
|
+
|
|
233
|
+
mapping = {"<1>": "New Title"}
|
|
234
|
+
|
|
235
|
+
multievent_ief.eventdata = {
|
|
236
|
+
mapping.get(key, key): value for key, value in multievent_ief.eventdata.items()
|
|
237
|
+
}
|
|
238
|
+
new_path = Path(tmpdir) / "tmp.ief"
|
|
239
|
+
multievent_ief.save(new_path)
|
|
240
|
+
|
|
241
|
+
new_ief = IEF(new_path)
|
|
242
|
+
|
|
243
|
+
assert new_ief.eventdata == {
|
|
244
|
+
"Fluvial Inflow": "..\\network.ied",
|
|
245
|
+
"Event Override": "..\\event_override.ied",
|
|
246
|
+
"Spill Data": "..\\spill1.ied",
|
|
247
|
+
"Spill Data<0>": "..\\spill2.ied",
|
|
248
|
+
"<0>": "..\\ied_01.IED",
|
|
249
|
+
"New Title": "..\\ied_02.IED",
|
|
250
|
+
"<1>": "..\\ied_03.IED",
|
|
251
|
+
}
|
{floodmodeller_api-0.5.3 → floodmodeller_api-0.5.3.post2}/floodmodeller_api/test/test_json.py
RENAMED
|
@@ -105,6 +105,9 @@ def test_obj_reproduces_from_json_for_all_test_api_files(
|
|
|
105
105
|
):
|
|
106
106
|
"""JSON: To test the from_json function, It should produce the same dat file from a json file"""
|
|
107
107
|
for file in Path(test_workspace).glob(file_extension_glob):
|
|
108
|
+
if file.name.startswith("duplicate_unit_test"):
|
|
109
|
+
# Skipping as invalid DAT (duplicate units)
|
|
110
|
+
continue
|
|
108
111
|
assert api_class(file) == api_class.from_json(api_class(file).to_json())
|
|
109
112
|
|
|
110
113
|
|