HydPy 6.2.dev1__cp313-cp313-win_amd64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- hydpy/__init__.py +275 -0
- hydpy/aliases.py +2554 -0
- hydpy/auxs/__init__.py +0 -0
- hydpy/auxs/anntools.py +1305 -0
- hydpy/auxs/armatools.py +883 -0
- hydpy/auxs/calibtools.py +3337 -0
- hydpy/auxs/interptools.py +1094 -0
- hydpy/auxs/iuhtools.py +543 -0
- hydpy/auxs/networktools.py +597 -0
- hydpy/auxs/ppolytools.py +809 -0
- hydpy/auxs/quadtools.py +61 -0
- hydpy/auxs/roottools.py +228 -0
- hydpy/auxs/smoothtools.py +273 -0
- hydpy/auxs/statstools.py +2125 -0
- hydpy/auxs/validtools.py +81 -0
- hydpy/conf/HydPyConfigBase.xsd +68637 -0
- hydpy/conf/HydPyConfigBase.xsdt +358 -0
- hydpy/conf/HydPyConfigMultipleRuns.xsd +25 -0
- hydpy/conf/HydPyConfigSingleRun.xsd +24 -0
- hydpy/conf/__init__.py +0 -0
- hydpy/conf/a_coefficients_explicit_lobatto_sequence.npy +0 -0
- hydpy/conf/support_points_for_smoothpar_logistic2.npy +0 -0
- hydpy/config.py +42 -0
- hydpy/core/__init__.py +0 -0
- hydpy/core/aliastools.py +214 -0
- hydpy/core/autodoctools.py +1947 -0
- hydpy/core/auxfiletools.py +1169 -0
- hydpy/core/devicetools.py +3810 -0
- hydpy/core/exceptiontools.py +269 -0
- hydpy/core/filetools.py +1985 -0
- hydpy/core/hydpytools.py +3089 -0
- hydpy/core/importtools.py +1398 -0
- hydpy/core/indextools.py +345 -0
- hydpy/core/itemtools.py +1849 -0
- hydpy/core/masktools.py +460 -0
- hydpy/core/modeltools.py +4868 -0
- hydpy/core/netcdftools.py +2683 -0
- hydpy/core/objecttools.py +2023 -0
- hydpy/core/optiontools.py +1045 -0
- hydpy/core/parametertools.py +4674 -0
- hydpy/core/printtools.py +222 -0
- hydpy/core/propertytools.py +643 -0
- hydpy/core/pubtools.py +254 -0
- hydpy/core/selectiontools.py +1571 -0
- hydpy/core/sequencetools.py +4476 -0
- hydpy/core/seriestools.py +339 -0
- hydpy/core/testtools.py +2483 -0
- hydpy/core/timetools.py +3567 -0
- hydpy/core/typingtools.py +333 -0
- hydpy/core/variabletools.py +2615 -0
- hydpy/cythons/__init__.py +24 -0
- hydpy/cythons/annutils.pxd +33 -0
- hydpy/cythons/annutils.pyi +25 -0
- hydpy/cythons/annutils.pyx +120 -0
- hydpy/cythons/autogen/__init__.py +0 -0
- hydpy/cythons/autogen/annutils.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/annutils.pxd +42 -0
- hydpy/cythons/autogen/annutils.pyx +129 -0
- hydpy/cythons/autogen/c_arma.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_arma.pxd +179 -0
- hydpy/cythons/autogen/c_arma.pyx +356 -0
- hydpy/cythons/autogen/c_arma_rimorido.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_arma_rimorido.pxd +179 -0
- hydpy/cythons/autogen/c_arma_rimorido.pyx +356 -0
- hydpy/cythons/autogen/c_conv.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_conv.pxd +198 -0
- hydpy/cythons/autogen/c_conv.pyx +491 -0
- hydpy/cythons/autogen/c_conv_idw.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_conv_idw.pxd +124 -0
- hydpy/cythons/autogen/c_conv_idw.pyx +264 -0
- hydpy/cythons/autogen/c_conv_idw_ed.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_conv_idw_ed.pxd +197 -0
- hydpy/cythons/autogen/c_conv_idw_ed.pyx +481 -0
- hydpy/cythons/autogen/c_conv_nn.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_conv_nn.pxd +120 -0
- hydpy/cythons/autogen/c_conv_nn.pyx +224 -0
- hydpy/cythons/autogen/c_dam.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_dam.pxd +805 -0
- hydpy/cythons/autogen/c_dam.pyx +1477 -0
- hydpy/cythons/autogen/c_dam_llake.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_dam_llake.pxd +364 -0
- hydpy/cythons/autogen/c_dam_llake.pyx +705 -0
- hydpy/cythons/autogen/c_dam_lreservoir.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_dam_lreservoir.pxd +365 -0
- hydpy/cythons/autogen/c_dam_lreservoir.pyx +708 -0
- hydpy/cythons/autogen/c_dam_lretention.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_dam_lretention.pxd +340 -0
- hydpy/cythons/autogen/c_dam_lretention.pyx +625 -0
- hydpy/cythons/autogen/c_dam_pump.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_dam_pump.pxd +402 -0
- hydpy/cythons/autogen/c_dam_pump.pyx +724 -0
- hydpy/cythons/autogen/c_dam_pump_sluice.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_dam_pump_sluice.pxd +452 -0
- hydpy/cythons/autogen/c_dam_pump_sluice.pyx +829 -0
- hydpy/cythons/autogen/c_dam_sluice.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_dam_sluice.pxd +404 -0
- hydpy/cythons/autogen/c_dam_sluice.pyx +726 -0
- hydpy/cythons/autogen/c_dam_v001.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_dam_v001.pxd +452 -0
- hydpy/cythons/autogen/c_dam_v001.pyx +816 -0
- hydpy/cythons/autogen/c_dam_v002.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_dam_v002.pxd +394 -0
- hydpy/cythons/autogen/c_dam_v002.pyx +703 -0
- hydpy/cythons/autogen/c_dam_v003.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_dam_v003.pxd +417 -0
- hydpy/cythons/autogen/c_dam_v003.pyx +744 -0
- hydpy/cythons/autogen/c_dam_v004.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_dam_v004.pxd +486 -0
- hydpy/cythons/autogen/c_dam_v004.pyx +891 -0
- hydpy/cythons/autogen/c_dam_v005.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_dam_v005.pxd +524 -0
- hydpy/cythons/autogen/c_dam_v005.pyx +928 -0
- hydpy/cythons/autogen/c_dummy.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_dummy.pxd +151 -0
- hydpy/cythons/autogen/c_dummy.pyx +263 -0
- hydpy/cythons/autogen/c_dummy_interceptedwater.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_dummy_interceptedwater.pxd +69 -0
- hydpy/cythons/autogen/c_dummy_interceptedwater.pyx +104 -0
- hydpy/cythons/autogen/c_dummy_node2node.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_dummy_node2node.pxd +89 -0
- hydpy/cythons/autogen/c_dummy_node2node.pyx +148 -0
- hydpy/cythons/autogen/c_dummy_snowalbedo.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_dummy_snowalbedo.pxd +69 -0
- hydpy/cythons/autogen/c_dummy_snowalbedo.pyx +104 -0
- hydpy/cythons/autogen/c_dummy_snowcover.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_dummy_snowcover.pxd +69 -0
- hydpy/cythons/autogen/c_dummy_snowcover.pyx +104 -0
- hydpy/cythons/autogen/c_dummy_snowycanopy.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_dummy_snowycanopy.pxd +69 -0
- hydpy/cythons/autogen/c_dummy_snowycanopy.pyx +104 -0
- hydpy/cythons/autogen/c_dummy_soilwater.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_dummy_soilwater.pxd +69 -0
- hydpy/cythons/autogen/c_dummy_soilwater.pyx +104 -0
- hydpy/cythons/autogen/c_evap.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_evap.pxd +1029 -0
- hydpy/cythons/autogen/c_evap.pyx +2601 -0
- hydpy/cythons/autogen/c_evap_aet_hbv96.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_evap_aet_hbv96.pxd +227 -0
- hydpy/cythons/autogen/c_evap_aet_hbv96.pyx +584 -0
- hydpy/cythons/autogen/c_evap_aet_minhas.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_evap_aet_minhas.pxd +193 -0
- hydpy/cythons/autogen/c_evap_aet_minhas.pyx +478 -0
- hydpy/cythons/autogen/c_evap_aet_morsim.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_evap_aet_morsim.pxd +681 -0
- hydpy/cythons/autogen/c_evap_aet_morsim.pyx +1642 -0
- hydpy/cythons/autogen/c_evap_pet_ambav1.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_evap_pet_ambav1.pxd +532 -0
- hydpy/cythons/autogen/c_evap_pet_ambav1.pyx +1296 -0
- hydpy/cythons/autogen/c_evap_pet_hbv96.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_evap_pet_hbv96.pxd +179 -0
- hydpy/cythons/autogen/c_evap_pet_hbv96.pyx +328 -0
- hydpy/cythons/autogen/c_evap_pet_m.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_evap_pet_m.pxd +124 -0
- hydpy/cythons/autogen/c_evap_pet_m.pyx +214 -0
- hydpy/cythons/autogen/c_evap_pet_mlc.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_evap_pet_mlc.pxd +126 -0
- hydpy/cythons/autogen/c_evap_pet_mlc.pyx +214 -0
- hydpy/cythons/autogen/c_evap_ret_fao56.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_evap_ret_fao56.pxd +305 -0
- hydpy/cythons/autogen/c_evap_ret_fao56.pyx +624 -0
- hydpy/cythons/autogen/c_evap_ret_io.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_evap_ret_io.pxd +112 -0
- hydpy/cythons/autogen/c_evap_ret_io.pyx +176 -0
- hydpy/cythons/autogen/c_evap_ret_tw2002.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_evap_ret_tw2002.pxd +139 -0
- hydpy/cythons/autogen/c_evap_ret_tw2002.pyx +273 -0
- hydpy/cythons/autogen/c_exch.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_exch.pxd +230 -0
- hydpy/cythons/autogen/c_exch.pyx +462 -0
- hydpy/cythons/autogen/c_exch_branch_hbv96.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_exch_branch_hbv96.pxd +134 -0
- hydpy/cythons/autogen/c_exch_branch_hbv96.pyx +255 -0
- hydpy/cythons/autogen/c_exch_waterlevel.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_exch_waterlevel.pxd +54 -0
- hydpy/cythons/autogen/c_exch_waterlevel.pyx +78 -0
- hydpy/cythons/autogen/c_exch_weir_hbv96.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_exch_weir_hbv96.pxd +156 -0
- hydpy/cythons/autogen/c_exch_weir_hbv96.pyx +282 -0
- hydpy/cythons/autogen/c_ga.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_ga.pxd +353 -0
- hydpy/cythons/autogen/c_ga.pyx +1204 -0
- hydpy/cythons/autogen/c_ga_garto.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_ga_garto.pxd +330 -0
- hydpy/cythons/autogen/c_ga_garto.pyx +1105 -0
- hydpy/cythons/autogen/c_ga_garto_submodel1.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_ga_garto_submodel1.pxd +236 -0
- hydpy/cythons/autogen/c_ga_garto_submodel1.pyx +944 -0
- hydpy/cythons/autogen/c_gland.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_gland.pxd +437 -0
- hydpy/cythons/autogen/c_gland.pyx +726 -0
- hydpy/cythons/autogen/c_gland_gr4.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_gland_gr4.pxd +382 -0
- hydpy/cythons/autogen/c_gland_gr4.pyx +605 -0
- hydpy/cythons/autogen/c_gland_gr5.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_gland_gr5.pxd +368 -0
- hydpy/cythons/autogen/c_gland_gr5.pyx +568 -0
- hydpy/cythons/autogen/c_gland_gr6.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_gland_gr6.pxd +420 -0
- hydpy/cythons/autogen/c_gland_gr6.pyx +673 -0
- hydpy/cythons/autogen/c_hland.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_hland.pxd +855 -0
- hydpy/cythons/autogen/c_hland.pyx +2486 -0
- hydpy/cythons/autogen/c_hland_96.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_hland_96.pxd +631 -0
- hydpy/cythons/autogen/c_hland_96.pyx +1724 -0
- hydpy/cythons/autogen/c_hland_96c.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_hland_96c.pxd +621 -0
- hydpy/cythons/autogen/c_hland_96c.pyx +1822 -0
- hydpy/cythons/autogen/c_hland_96p.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_hland_96p.pxd +683 -0
- hydpy/cythons/autogen/c_hland_96p.pyx +1911 -0
- hydpy/cythons/autogen/c_kinw.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_kinw.pxd +509 -0
- hydpy/cythons/autogen/c_kinw.pyx +965 -0
- hydpy/cythons/autogen/c_kinw_williams.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_kinw_williams.pxd +409 -0
- hydpy/cythons/autogen/c_kinw_williams.pyx +763 -0
- hydpy/cythons/autogen/c_kinw_williams_ext.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_kinw_williams_ext.pxd +220 -0
- hydpy/cythons/autogen/c_kinw_williams_ext.pyx +440 -0
- hydpy/cythons/autogen/c_lland.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_lland.pxd +1386 -0
- hydpy/cythons/autogen/c_lland.pyx +3679 -0
- hydpy/cythons/autogen/c_lland_dd.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_lland_dd.pxd +679 -0
- hydpy/cythons/autogen/c_lland_dd.pyx +1719 -0
- hydpy/cythons/autogen/c_lland_knauf.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_lland_knauf.pxd +1096 -0
- hydpy/cythons/autogen/c_lland_knauf.pyx +2784 -0
- hydpy/cythons/autogen/c_lland_knauf_ic.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_lland_knauf_ic.pxd +1369 -0
- hydpy/cythons/autogen/c_lland_knauf_ic.pyx +3625 -0
- hydpy/cythons/autogen/c_meteo.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_meteo.pxd +469 -0
- hydpy/cythons/autogen/c_meteo.pyx +879 -0
- hydpy/cythons/autogen/c_meteo_clear_glob_io.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_meteo_clear_glob_io.pxd +75 -0
- hydpy/cythons/autogen/c_meteo_clear_glob_io.pyx +107 -0
- hydpy/cythons/autogen/c_meteo_glob_fao56.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_meteo_glob_fao56.pxd +209 -0
- hydpy/cythons/autogen/c_meteo_glob_fao56.pyx +339 -0
- hydpy/cythons/autogen/c_meteo_glob_io.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_meteo_glob_io.pxd +63 -0
- hydpy/cythons/autogen/c_meteo_glob_io.pyx +91 -0
- hydpy/cythons/autogen/c_meteo_glob_morsim.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_meteo_glob_morsim.pxd +289 -0
- hydpy/cythons/autogen/c_meteo_glob_morsim.pyx +527 -0
- hydpy/cythons/autogen/c_meteo_precip_io.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_meteo_precip_io.pxd +112 -0
- hydpy/cythons/autogen/c_meteo_precip_io.pyx +176 -0
- hydpy/cythons/autogen/c_meteo_psun_sun_glob_io.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_meteo_psun_sun_glob_io.pxd +87 -0
- hydpy/cythons/autogen/c_meteo_psun_sun_glob_io.pyx +123 -0
- hydpy/cythons/autogen/c_meteo_sun_fao56.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_meteo_sun_fao56.pxd +209 -0
- hydpy/cythons/autogen/c_meteo_sun_fao56.pyx +343 -0
- hydpy/cythons/autogen/c_meteo_sun_morsim.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_meteo_sun_morsim.pxd +286 -0
- hydpy/cythons/autogen/c_meteo_sun_morsim.pyx +519 -0
- hydpy/cythons/autogen/c_meteo_temp_io.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_meteo_temp_io.pxd +112 -0
- hydpy/cythons/autogen/c_meteo_temp_io.pyx +176 -0
- hydpy/cythons/autogen/c_musk.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_musk.pxd +282 -0
- hydpy/cythons/autogen/c_musk.pyx +605 -0
- hydpy/cythons/autogen/c_musk_classic.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_musk_classic.pxd +138 -0
- hydpy/cythons/autogen/c_musk_classic.pyx +226 -0
- hydpy/cythons/autogen/c_musk_mct.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_musk_mct.pxd +282 -0
- hydpy/cythons/autogen/c_musk_mct.pyx +609 -0
- hydpy/cythons/autogen/c_rconc.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_rconc.pxd +119 -0
- hydpy/cythons/autogen/c_rconc.pyx +174 -0
- hydpy/cythons/autogen/c_rconc_nash.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_rconc_nash.pxd +111 -0
- hydpy/cythons/autogen/c_rconc_nash.pyx +185 -0
- hydpy/cythons/autogen/c_rconc_uh.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_rconc_uh.pxd +92 -0
- hydpy/cythons/autogen/c_rconc_uh.pyx +125 -0
- hydpy/cythons/autogen/c_sw1d.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_sw1d.pxd +511 -0
- hydpy/cythons/autogen/c_sw1d.pyx +1263 -0
- hydpy/cythons/autogen/c_sw1d_channel.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_sw1d_channel.pxd +119 -0
- hydpy/cythons/autogen/c_sw1d_channel.pyx +300 -0
- hydpy/cythons/autogen/c_sw1d_gate_out.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_sw1d_gate_out.pxd +240 -0
- hydpy/cythons/autogen/c_sw1d_gate_out.pyx +476 -0
- hydpy/cythons/autogen/c_sw1d_lias.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_sw1d_lias.pxd +320 -0
- hydpy/cythons/autogen/c_sw1d_lias.pyx +619 -0
- hydpy/cythons/autogen/c_sw1d_lias_sluice.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_sw1d_lias_sluice.pxd +325 -0
- hydpy/cythons/autogen/c_sw1d_lias_sluice.pyx +644 -0
- hydpy/cythons/autogen/c_sw1d_network.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_sw1d_network.pxd +90 -0
- hydpy/cythons/autogen/c_sw1d_network.pyx +246 -0
- hydpy/cythons/autogen/c_sw1d_pump.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_sw1d_pump.pxd +256 -0
- hydpy/cythons/autogen/c_sw1d_pump.pyx +502 -0
- hydpy/cythons/autogen/c_sw1d_q_in.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_sw1d_q_in.pxd +224 -0
- hydpy/cythons/autogen/c_sw1d_q_in.pyx +383 -0
- hydpy/cythons/autogen/c_sw1d_q_out.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_sw1d_q_out.pxd +224 -0
- hydpy/cythons/autogen/c_sw1d_q_out.pyx +383 -0
- hydpy/cythons/autogen/c_sw1d_storage.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_sw1d_storage.pxd +193 -0
- hydpy/cythons/autogen/c_sw1d_storage.pyx +349 -0
- hydpy/cythons/autogen/c_sw1d_weir_out.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_sw1d_weir_out.pxd +212 -0
- hydpy/cythons/autogen/c_sw1d_weir_out.pyx +404 -0
- hydpy/cythons/autogen/c_test.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_test.pxd +175 -0
- hydpy/cythons/autogen/c_test.pyx +348 -0
- hydpy/cythons/autogen/c_test_discontinous.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_test_discontinous.pxd +146 -0
- hydpy/cythons/autogen/c_test_discontinous.pyx +256 -0
- hydpy/cythons/autogen/c_test_stiff0d.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_test_stiff0d.pxd +146 -0
- hydpy/cythons/autogen/c_test_stiff0d.pyx +250 -0
- hydpy/cythons/autogen/c_test_stiff1d.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_test_stiff1d.pxd +145 -0
- hydpy/cythons/autogen/c_test_stiff1d.pyx +294 -0
- hydpy/cythons/autogen/c_whmod.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_whmod.pxd +482 -0
- hydpy/cythons/autogen/c_whmod.pyx +1156 -0
- hydpy/cythons/autogen/c_whmod_rural.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_whmod_rural.pxd +411 -0
- hydpy/cythons/autogen/c_whmod_rural.pyx +982 -0
- hydpy/cythons/autogen/c_whmod_urban.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_whmod_urban.pxd +482 -0
- hydpy/cythons/autogen/c_whmod_urban.pyx +1155 -0
- hydpy/cythons/autogen/c_wland.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_wland.pxd +842 -0
- hydpy/cythons/autogen/c_wland.pyx +1890 -0
- hydpy/cythons/autogen/c_wland_gd.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_wland_gd.pxd +829 -0
- hydpy/cythons/autogen/c_wland_gd.pyx +1847 -0
- hydpy/cythons/autogen/c_wland_wag.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_wland_wag.pxd +810 -0
- hydpy/cythons/autogen/c_wland_wag.pyx +1780 -0
- hydpy/cythons/autogen/c_wq.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_wq.pxd +275 -0
- hydpy/cythons/autogen/c_wq.pyx +652 -0
- hydpy/cythons/autogen/c_wq_trapeze.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_wq_trapeze.pxd +170 -0
- hydpy/cythons/autogen/c_wq_trapeze.pyx +400 -0
- hydpy/cythons/autogen/c_wq_trapeze_strickler.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_wq_trapeze_strickler.pxd +243 -0
- hydpy/cythons/autogen/c_wq_trapeze_strickler.pyx +578 -0
- hydpy/cythons/autogen/c_wq_walrus.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/c_wq_walrus.pxd +61 -0
- hydpy/cythons/autogen/c_wq_walrus.pyx +82 -0
- hydpy/cythons/autogen/configutils.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/configutils.pxd +17 -0
- hydpy/cythons/autogen/configutils.pyx +119 -0
- hydpy/cythons/autogen/interfaceutils.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/interfaceutils.pxd +31 -0
- hydpy/cythons/autogen/interfaceutils.pyx +82 -0
- hydpy/cythons/autogen/interputils.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/interputils.pxd +42 -0
- hydpy/cythons/autogen/interputils.pyx +118 -0
- hydpy/cythons/autogen/masterinterface.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/masterinterface.pxd +153 -0
- hydpy/cythons/autogen/masterinterface.pyx +222 -0
- hydpy/cythons/autogen/pointerutils.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/pointerutils.pxd +31 -0
- hydpy/cythons/autogen/pointerutils.pyx +650 -0
- hydpy/cythons/autogen/ppolyutils.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/ppolyutils.pxd +35 -0
- hydpy/cythons/autogen/ppolyutils.pyx +59 -0
- hydpy/cythons/autogen/quadutils.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/quadutils.pxd +26 -0
- hydpy/cythons/autogen/quadutils.pyx +973 -0
- hydpy/cythons/autogen/rootutils.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/rootutils.pxd +28 -0
- hydpy/cythons/autogen/rootutils.pyx +109 -0
- hydpy/cythons/autogen/sequenceutils.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/sequenceutils.pxd +45 -0
- hydpy/cythons/autogen/sequenceutils.pyx +101 -0
- hydpy/cythons/autogen/smoothutils.cp313-win_amd64.pyd +0 -0
- hydpy/cythons/autogen/smoothutils.pxd +29 -0
- hydpy/cythons/autogen/smoothutils.pyx +833 -0
- hydpy/cythons/configutils.pxd +8 -0
- hydpy/cythons/configutils.pyi +5 -0
- hydpy/cythons/configutils.pyx +110 -0
- hydpy/cythons/interfaceutils.pxd +22 -0
- hydpy/cythons/interfaceutils.pyi +15 -0
- hydpy/cythons/interfaceutils.pyx +73 -0
- hydpy/cythons/interputils.pxd +33 -0
- hydpy/cythons/interputils.pyi +32 -0
- hydpy/cythons/interputils.pyx +109 -0
- hydpy/cythons/modelutils.py +2990 -0
- hydpy/cythons/pointerutils.pxd +22 -0
- hydpy/cythons/pointerutils.pyi +89 -0
- hydpy/cythons/pointerutils.pyx +641 -0
- hydpy/cythons/ppolyutils.pxd +26 -0
- hydpy/cythons/ppolyutils.pyi +21 -0
- hydpy/cythons/ppolyutils.pyx +50 -0
- hydpy/cythons/quadutils.pxd +17 -0
- hydpy/cythons/quadutils.pyi +13 -0
- hydpy/cythons/quadutils.pyx +964 -0
- hydpy/cythons/rootutils.pxd +19 -0
- hydpy/cythons/rootutils.pyi +21 -0
- hydpy/cythons/rootutils.pyx +100 -0
- hydpy/cythons/sequenceutils.pxd +36 -0
- hydpy/cythons/sequenceutils.pyi +7 -0
- hydpy/cythons/sequenceutils.pyx +92 -0
- hydpy/cythons/smoothutils.pxd +20 -0
- hydpy/cythons/smoothutils.pyi +15 -0
- hydpy/cythons/smoothutils.pyx +824 -0
- hydpy/data/HydPy-H-Lahn/conditions/init_1996_01_01_00_00_00/land_dill_assl.py +13 -0
- hydpy/data/HydPy-H-Lahn/conditions/init_1996_01_01_00_00_00/land_lahn_kalk.py +13 -0
- hydpy/data/HydPy-H-Lahn/conditions/init_1996_01_01_00_00_00/land_lahn_leun.py +14 -0
- hydpy/data/HydPy-H-Lahn/conditions/init_1996_01_01_00_00_00/land_lahn_marb.py +13 -0
- hydpy/data/HydPy-H-Lahn/conditions/init_1996_01_01_00_00_00/stream_dill_assl_lahn_leun.py +5 -0
- hydpy/data/HydPy-H-Lahn/conditions/init_1996_01_01_00_00_00/stream_lahn_leun_lahn_kalk.py +5 -0
- hydpy/data/HydPy-H-Lahn/conditions/init_1996_01_01_00_00_00/stream_lahn_marb_lahn_leun.py +5 -0
- hydpy/data/HydPy-H-Lahn/control/default/land.py +9 -0
- hydpy/data/HydPy-H-Lahn/control/default/land_dill_assl.py +57 -0
- hydpy/data/HydPy-H-Lahn/control/default/land_lahn_kalk.py +57 -0
- hydpy/data/HydPy-H-Lahn/control/default/land_lahn_leun.py +56 -0
- hydpy/data/HydPy-H-Lahn/control/default/land_lahn_marb.py +57 -0
- hydpy/data/HydPy-H-Lahn/control/default/stream_dill_assl_lahn_leun.py +7 -0
- hydpy/data/HydPy-H-Lahn/control/default/stream_lahn_leun_lahn_kalk.py +7 -0
- hydpy/data/HydPy-H-Lahn/control/default/stream_lahn_marb_lahn_leun.py +7 -0
- hydpy/data/HydPy-H-Lahn/multiple_runs.xml +309 -0
- hydpy/data/HydPy-H-Lahn/multiple_runs_alpha.xml +71 -0
- hydpy/data/HydPy-H-Lahn/network/default/headwaters.py +11 -0
- hydpy/data/HydPy-H-Lahn/network/default/nonheadwaters.py +11 -0
- hydpy/data/HydPy-H-Lahn/network/default/streams.py +8 -0
- hydpy/data/HydPy-H-Lahn/series/default/dill_assl_obs_q.asc +11387 -0
- hydpy/data/HydPy-H-Lahn/series/default/evap_pet_hbv96_input_normalairtemperature.nc +0 -0
- hydpy/data/HydPy-H-Lahn/series/default/evap_pet_hbv96_input_normalevapotranspiration.nc +0 -0
- hydpy/data/HydPy-H-Lahn/series/default/hland_96_input_p.nc +0 -0
- hydpy/data/HydPy-H-Lahn/series/default/hland_96_input_t.nc +0 -0
- hydpy/data/HydPy-H-Lahn/series/default/lahn_kalk_obs_q.asc +11387 -0
- hydpy/data/HydPy-H-Lahn/series/default/lahn_leun_obs_q.asc +11387 -0
- hydpy/data/HydPy-H-Lahn/series/default/lahn_marb_obs_q.asc +11387 -0
- hydpy/data/HydPy-H-Lahn/series/default/land_dill_assl_evap_pet_hbv96_input_normalairtemperature.asc +11387 -0
- hydpy/data/HydPy-H-Lahn/series/default/land_dill_assl_evap_pet_hbv96_input_normalevapotranspiration.asc +11387 -0
- hydpy/data/HydPy-H-Lahn/series/default/land_dill_assl_hland_96_input_p.asc +11387 -0
- hydpy/data/HydPy-H-Lahn/series/default/land_dill_assl_hland_96_input_t.asc +11387 -0
- hydpy/data/HydPy-H-Lahn/series/default/land_lahn_kalk_evap_pet_hbv96_input_normalairtemperature.asc +11387 -0
- hydpy/data/HydPy-H-Lahn/series/default/land_lahn_kalk_evap_pet_hbv96_input_normalevapotranspiration.asc +11387 -0
- hydpy/data/HydPy-H-Lahn/series/default/land_lahn_kalk_hland_96_input_p.asc +11387 -0
- hydpy/data/HydPy-H-Lahn/series/default/land_lahn_kalk_hland_96_input_t.asc +11387 -0
- hydpy/data/HydPy-H-Lahn/series/default/land_lahn_leun_evap_pet_hbv96_input_normalairtemperature.asc +11387 -0
- hydpy/data/HydPy-H-Lahn/series/default/land_lahn_leun_evap_pet_hbv96_input_normalevapotranspiration.asc +11387 -0
- hydpy/data/HydPy-H-Lahn/series/default/land_lahn_leun_hland_96_input_p.asc +11387 -0
- hydpy/data/HydPy-H-Lahn/series/default/land_lahn_leun_hland_96_input_t.asc +11387 -0
- hydpy/data/HydPy-H-Lahn/series/default/land_lahn_marb_evap_pet_hbv96_input_normalairtemperature.asc +11387 -0
- hydpy/data/HydPy-H-Lahn/series/default/land_lahn_marb_evap_pet_hbv96_input_normalevapotranspiration.asc +11387 -0
- hydpy/data/HydPy-H-Lahn/series/default/land_lahn_marb_hland_96_input_p.asc +11387 -0
- hydpy/data/HydPy-H-Lahn/series/default/land_lahn_marb_hland_96_input_t.asc +11387 -0
- hydpy/data/HydPy-H-Lahn/series/default/obs_q.nc +0 -0
- hydpy/data/HydPy-H-Lahn/single_run.xml +152 -0
- hydpy/data/HydPy-H-Lahn/single_run.xmlt +143 -0
- hydpy/data/__init__.py +17 -0
- hydpy/docs/__init__.py +0 -0
- hydpy/docs/autofigs/__init__.py +0 -0
- hydpy/docs/bib/__init__.py +0 -0
- hydpy/docs/bib/refs.bib +566 -0
- hydpy/docs/combine_docversions.py +133 -0
- hydpy/docs/draw_model_sketches.py +1301 -0
- hydpy/docs/enable_autodoc.py +7 -0
- hydpy/docs/figs/HydPy-G-GR4.png +0 -0
- hydpy/docs/figs/HydPy-G-GR5.png +0 -0
- hydpy/docs/figs/HydPy-G-GR6.png +0 -0
- hydpy/docs/figs/HydPy-H-HBV96-COSERO.png +0 -0
- hydpy/docs/figs/HydPy-H-HBV96-PREVAH.png +0 -0
- hydpy/docs/figs/HydPy-H-HBV96.png +0 -0
- hydpy/docs/figs/HydPy-H-Lahn.png +0 -0
- hydpy/docs/figs/HydPy-KinW-Williams.png +0 -0
- hydpy/docs/figs/HydPy-L-DD.png +0 -0
- hydpy/docs/figs/HydPy-W-Wag.png +0 -0
- hydpy/docs/figs/HydPy_Logo.png +0 -0
- hydpy/docs/figs/HydPy_Logo_Text.png +0 -0
- hydpy/docs/figs/IDLE-editor.png +0 -0
- hydpy/docs/figs/IDLE-shell.png +0 -0
- hydpy/docs/figs/LAWA_river-basin-bumbers.png +0 -0
- hydpy/docs/figs/__init__.py +0 -0
- hydpy/docs/html_/__init__.py +0 -0
- hydpy/docs/polish_html.py +57 -0
- hydpy/docs/prepare.py +224 -0
- hydpy/docs/publish_docs.py +53 -0
- hydpy/docs/rst/HydPy-ARMA.rst +27 -0
- hydpy/docs/rst/HydPy-Conv.rst +22 -0
- hydpy/docs/rst/HydPy-Dam.rst +79 -0
- hydpy/docs/rst/HydPy-Dummy.rst +21 -0
- hydpy/docs/rst/HydPy-Evap.rst +26 -0
- hydpy/docs/rst/HydPy-Exch.rst +36 -0
- hydpy/docs/rst/HydPy-G.rst +40 -0
- hydpy/docs/rst/HydPy-GA.rst +34 -0
- hydpy/docs/rst/HydPy-H.rst +24 -0
- hydpy/docs/rst/HydPy-KinW.rst +32 -0
- hydpy/docs/rst/HydPy-L.rst +42 -0
- hydpy/docs/rst/HydPy-Meteo.rst +28 -0
- hydpy/docs/rst/HydPy-Musk.rst +21 -0
- hydpy/docs/rst/HydPy-Rconc.rst +17 -0
- hydpy/docs/rst/HydPy-SW1D.rst +49 -0
- hydpy/docs/rst/HydPy-Test.rst +19 -0
- hydpy/docs/rst/HydPy-W.rst +20 -0
- hydpy/docs/rst/HydPy-WHMod.rst +19 -0
- hydpy/docs/rst/HydPy-WQ.rst +20 -0
- hydpy/docs/rst/__init__.py +0 -0
- hydpy/docs/rst/additional_repositories.rst +40 -0
- hydpy/docs/rst/auxiliaries.rst +31 -0
- hydpy/docs/rst/continuous_integration.rst +75 -0
- hydpy/docs/rst/core.rst +75 -0
- hydpy/docs/rst/cythons.rst +47 -0
- hydpy/docs/rst/definitions.rst +506 -0
- hydpy/docs/rst/developer_guide.rst +54 -0
- hydpy/docs/rst/example_projects.rst +40 -0
- hydpy/docs/rst/execution.rst +22 -0
- hydpy/docs/rst/framework_tools.rst +56 -0
- hydpy/docs/rst/how_to_read_the_reference_manual.rst +156 -0
- hydpy/docs/rst/hydpydependencies.rst +55 -0
- hydpy/docs/rst/index.rst +125 -0
- hydpy/docs/rst/installation.rst +155 -0
- hydpy/docs/rst/model_families.rst +79 -0
- hydpy/docs/rst/model_overview.rst +291 -0
- hydpy/docs/rst/modelimports.rst +10 -0
- hydpy/docs/rst/options.rst +119 -0
- hydpy/docs/rst/programming_style.rst +572 -0
- hydpy/docs/rst/project_structure.rst +520 -0
- hydpy/docs/rst/quickstart.rst +304 -0
- hydpy/docs/rst/reference_manual.rst +29 -0
- hydpy/docs/rst/required_tools.rst +50 -0
- hydpy/docs/rst/simulation.rst +514 -0
- hydpy/docs/rst/submodel_interfaces.rst +32 -0
- hydpy/docs/rst/tests_and_documentation.rst +85 -0
- hydpy/docs/rst/user_guide.rst +38 -0
- hydpy/docs/rst/version_control.rst +116 -0
- hydpy/docs/rst/zbibliography.rst +8 -0
- hydpy/docs/sphinx/__init__.py +0 -0
- hydpy/docs/sphinx/_themes/basic_hydpy/changes/frameset.html +11 -0
- hydpy/docs/sphinx/_themes/basic_hydpy/changes/rstsource.html +15 -0
- hydpy/docs/sphinx/_themes/basic_hydpy/changes/versionchanges.html +33 -0
- hydpy/docs/sphinx/_themes/basic_hydpy/defindex.html +35 -0
- hydpy/docs/sphinx/_themes/basic_hydpy/domainindex.html +56 -0
- hydpy/docs/sphinx/_themes/basic_hydpy/genindex-single.html +63 -0
- hydpy/docs/sphinx/_themes/basic_hydpy/genindex-split.html +41 -0
- hydpy/docs/sphinx/_themes/basic_hydpy/genindex.html +76 -0
- hydpy/docs/sphinx/_themes/basic_hydpy/globaltoc.html +11 -0
- hydpy/docs/sphinx/_themes/basic_hydpy/layout.html +221 -0
- hydpy/docs/sphinx/_themes/basic_hydpy/localtoc.html +15 -0
- hydpy/docs/sphinx/_themes/basic_hydpy/opensearch.xml +13 -0
- hydpy/docs/sphinx/_themes/basic_hydpy/page.html +13 -0
- hydpy/docs/sphinx/_themes/basic_hydpy/relations.html +23 -0
- hydpy/docs/sphinx/_themes/basic_hydpy/search.html +65 -0
- hydpy/docs/sphinx/_themes/basic_hydpy/searchbox.html +21 -0
- hydpy/docs/sphinx/_themes/basic_hydpy/searchfield.html +23 -0
- hydpy/docs/sphinx/_themes/basic_hydpy/sourcelink.html +18 -0
- hydpy/docs/sphinx/_themes/basic_hydpy/static/basic.css_t +925 -0
- hydpy/docs/sphinx/_themes/basic_hydpy/static/doctools.js +156 -0
- hydpy/docs/sphinx/_themes/basic_hydpy/static/documentation_options.js_t +13 -0
- hydpy/docs/sphinx/_themes/basic_hydpy/static/file.png +0 -0
- hydpy/docs/sphinx/_themes/basic_hydpy/static/language_data.js_t +26 -0
- hydpy/docs/sphinx/_themes/basic_hydpy/static/minus.png +0 -0
- hydpy/docs/sphinx/_themes/basic_hydpy/static/plus.png +0 -0
- hydpy/docs/sphinx/_themes/basic_hydpy/static/searchtools.js +574 -0
- hydpy/docs/sphinx/_themes/basic_hydpy/static/sphinx_highlight.js +154 -0
- hydpy/docs/sphinx/_themes/basic_hydpy/theme.conf +16 -0
- hydpy/docs/sphinx/_themes/classic_hydpy/layout.html +23 -0
- hydpy/docs/sphinx/_themes/classic_hydpy/static/classic.css_t +358 -0
- hydpy/docs/sphinx/_themes/classic_hydpy/static/sidebar.js_t +72 -0
- hydpy/docs/sphinx/_themes/classic_hydpy/theme.conf +32 -0
- hydpy/docs/sphinx/conf.py +398 -0
- hydpy/docs/sphinx/defaultlinks_extension.py +36 -0
- hydpy/docs/sphinx/integrationtest_extension.py +104 -0
- hydpy/docs/sphinx/projectstructure_extension.py +58 -0
- hydpy/docs/sphinx/submodelgraph_extension.py +53 -0
- hydpy/exe/__init__.py +0 -0
- hydpy/exe/commandtools.py +651 -0
- hydpy/exe/hyd.py +277 -0
- hydpy/exe/modelimports.py +41 -0
- hydpy/exe/replacetools.py +216 -0
- hydpy/exe/servertools.py +2348 -0
- hydpy/exe/xmltools.py +3280 -0
- hydpy/interfaces/__init__.py +0 -0
- hydpy/interfaces/aetinterfaces.py +94 -0
- hydpy/interfaces/dischargeinterfaces.py +45 -0
- hydpy/interfaces/petinterfaces.py +117 -0
- hydpy/interfaces/precipinterfaces.py +42 -0
- hydpy/interfaces/radiationinterfaces.py +79 -0
- hydpy/interfaces/rconcinterfaces.py +30 -0
- hydpy/interfaces/routinginterfaces.py +324 -0
- hydpy/interfaces/soilinterfaces.py +96 -0
- hydpy/interfaces/stateinterfaces.py +98 -0
- hydpy/interfaces/tempinterfaces.py +46 -0
- hydpy/models/__init__.py +0 -0
- hydpy/models/arma/__init__.py +14 -0
- hydpy/models/arma/arma_control.py +383 -0
- hydpy/models/arma/arma_derived.py +204 -0
- hydpy/models/arma/arma_fluxes.py +41 -0
- hydpy/models/arma/arma_inlets.py +11 -0
- hydpy/models/arma/arma_logs.py +19 -0
- hydpy/models/arma/arma_model.py +461 -0
- hydpy/models/arma/arma_outlets.py +11 -0
- hydpy/models/arma_rimorido.py +381 -0
- hydpy/models/conv/__init__.py +12 -0
- hydpy/models/conv/conv_control.py +303 -0
- hydpy/models/conv/conv_derived.py +271 -0
- hydpy/models/conv/conv_fluxes.py +54 -0
- hydpy/models/conv/conv_inlets.py +11 -0
- hydpy/models/conv/conv_model.py +687 -0
- hydpy/models/conv/conv_outlets.py +11 -0
- hydpy/models/conv_idw.py +120 -0
- hydpy/models/conv_idw_ed.py +184 -0
- hydpy/models/conv_nn.py +112 -0
- hydpy/models/dam/__init__.py +16 -0
- hydpy/models/dam/dam_aides.py +17 -0
- hydpy/models/dam/dam_control.py +346 -0
- hydpy/models/dam/dam_derived.py +559 -0
- hydpy/models/dam/dam_factors.py +46 -0
- hydpy/models/dam/dam_fluxes.py +179 -0
- hydpy/models/dam/dam_inlets.py +29 -0
- hydpy/models/dam/dam_logs.py +52 -0
- hydpy/models/dam/dam_model.py +5011 -0
- hydpy/models/dam/dam_outlets.py +23 -0
- hydpy/models/dam/dam_receivers.py +41 -0
- hydpy/models/dam/dam_senders.py +23 -0
- hydpy/models/dam/dam_solver.py +75 -0
- hydpy/models/dam/dam_states.py +11 -0
- hydpy/models/dam_llake.py +499 -0
- hydpy/models/dam_lreservoir.py +548 -0
- hydpy/models/dam_lretention.py +343 -0
- hydpy/models/dam_pump.py +278 -0
- hydpy/models/dam_pump_sluice.py +339 -0
- hydpy/models/dam_sluice.py +319 -0
- hydpy/models/dam_v001.py +1127 -0
- hydpy/models/dam_v002.py +381 -0
- hydpy/models/dam_v003.py +422 -0
- hydpy/models/dam_v004.py +665 -0
- hydpy/models/dam_v005.py +479 -0
- hydpy/models/dummy/__init__.py +15 -0
- hydpy/models/dummy/dummy_control.py +22 -0
- hydpy/models/dummy/dummy_fluxes.py +11 -0
- hydpy/models/dummy/dummy_inlets.py +11 -0
- hydpy/models/dummy/dummy_inputs.py +41 -0
- hydpy/models/dummy/dummy_model.py +196 -0
- hydpy/models/dummy/dummy_outlets.py +11 -0
- hydpy/models/dummy_interceptedwater.py +85 -0
- hydpy/models/dummy_node2node.py +83 -0
- hydpy/models/dummy_snowalbedo.py +84 -0
- hydpy/models/dummy_snowcover.py +84 -0
- hydpy/models/dummy_snowycanopy.py +86 -0
- hydpy/models/dummy_soilwater.py +85 -0
- hydpy/models/evap/__init__.py +13 -0
- hydpy/models/evap/evap_control.py +354 -0
- hydpy/models/evap/evap_derived.py +236 -0
- hydpy/models/evap/evap_factors.py +188 -0
- hydpy/models/evap/evap_fixed.py +68 -0
- hydpy/models/evap/evap_fluxes.py +150 -0
- hydpy/models/evap/evap_inputs.py +54 -0
- hydpy/models/evap/evap_logs.py +91 -0
- hydpy/models/evap/evap_masks.py +48 -0
- hydpy/models/evap/evap_model.py +9170 -0
- hydpy/models/evap/evap_parameters.py +149 -0
- hydpy/models/evap/evap_sequences.py +32 -0
- hydpy/models/evap/evap_states.py +18 -0
- hydpy/models/evap_aet_hbv96.py +372 -0
- hydpy/models/evap_aet_minhas.py +331 -0
- hydpy/models/evap_aet_morsim.py +627 -0
- hydpy/models/evap_pet_ambav1.py +483 -0
- hydpy/models/evap_pet_hbv96.py +147 -0
- hydpy/models/evap_pet_m.py +94 -0
- hydpy/models/evap_pet_mlc.py +107 -0
- hydpy/models/evap_ret_fao56.py +265 -0
- hydpy/models/evap_ret_io.py +74 -0
- hydpy/models/evap_ret_tw2002.py +165 -0
- hydpy/models/exch/__init__.py +14 -0
- hydpy/models/exch/exch_control.py +262 -0
- hydpy/models/exch/exch_derived.py +36 -0
- hydpy/models/exch/exch_factors.py +26 -0
- hydpy/models/exch/exch_fluxes.py +48 -0
- hydpy/models/exch/exch_inlets.py +11 -0
- hydpy/models/exch/exch_logs.py +12 -0
- hydpy/models/exch/exch_model.py +451 -0
- hydpy/models/exch/exch_outlets.py +17 -0
- hydpy/models/exch/exch_receivers.py +17 -0
- hydpy/models/exch_branch_hbv96.py +186 -0
- hydpy/models/exch_waterlevel.py +73 -0
- hydpy/models/exch_weir_hbv96.py +609 -0
- hydpy/models/ga/__init__.py +14 -0
- hydpy/models/ga/ga_aides.py +17 -0
- hydpy/models/ga/ga_control.py +208 -0
- hydpy/models/ga/ga_derived.py +77 -0
- hydpy/models/ga/ga_fluxes.py +83 -0
- hydpy/models/ga/ga_inputs.py +26 -0
- hydpy/models/ga/ga_logs.py +17 -0
- hydpy/models/ga/ga_model.py +2952 -0
- hydpy/models/ga/ga_states.py +87 -0
- hydpy/models/ga_garto.py +1001 -0
- hydpy/models/ga_garto_submodel1.py +79 -0
- hydpy/models/gland/__init__.py +14 -0
- hydpy/models/gland/gland_control.py +90 -0
- hydpy/models/gland/gland_derived.py +113 -0
- hydpy/models/gland/gland_fluxes.py +137 -0
- hydpy/models/gland/gland_inputs.py +12 -0
- hydpy/models/gland/gland_model.py +1439 -0
- hydpy/models/gland/gland_outlets.py +11 -0
- hydpy/models/gland/gland_states.py +90 -0
- hydpy/models/gland_gr4.py +501 -0
- hydpy/models/gland_gr5.py +463 -0
- hydpy/models/gland_gr6.py +487 -0
- hydpy/models/hland/__init__.py +20 -0
- hydpy/models/hland/hland_aides.py +19 -0
- hydpy/models/hland/hland_constants.py +37 -0
- hydpy/models/hland/hland_control.py +1530 -0
- hydpy/models/hland/hland_derived.py +683 -0
- hydpy/models/hland/hland_factors.py +57 -0
- hydpy/models/hland/hland_fixed.py +42 -0
- hydpy/models/hland/hland_fluxes.py +279 -0
- hydpy/models/hland/hland_inputs.py +19 -0
- hydpy/models/hland/hland_masks.py +107 -0
- hydpy/models/hland/hland_model.py +4664 -0
- hydpy/models/hland/hland_outlets.py +11 -0
- hydpy/models/hland/hland_parameters.py +227 -0
- hydpy/models/hland/hland_sequences.py +382 -0
- hydpy/models/hland/hland_states.py +236 -0
- hydpy/models/hland_96.py +1812 -0
- hydpy/models/hland_96c.py +1196 -0
- hydpy/models/hland_96p.py +1204 -0
- hydpy/models/kinw/__init__.py +18 -0
- hydpy/models/kinw/kinw_aides.py +306 -0
- hydpy/models/kinw/kinw_control.py +270 -0
- hydpy/models/kinw/kinw_derived.py +197 -0
- hydpy/models/kinw/kinw_fixed.py +33 -0
- hydpy/models/kinw/kinw_fluxes.py +37 -0
- hydpy/models/kinw/kinw_inlets.py +11 -0
- hydpy/models/kinw/kinw_model.py +3026 -0
- hydpy/models/kinw/kinw_outlets.py +11 -0
- hydpy/models/kinw/kinw_solver.py +45 -0
- hydpy/models/kinw/kinw_states.py +17 -0
- hydpy/models/kinw_williams.py +1299 -0
- hydpy/models/kinw_williams_ext.py +768 -0
- hydpy/models/lland/__init__.py +42 -0
- hydpy/models/lland/lland_aides.py +38 -0
- hydpy/models/lland/lland_constants.py +88 -0
- hydpy/models/lland/lland_control.py +1329 -0
- hydpy/models/lland/lland_derived.py +380 -0
- hydpy/models/lland/lland_factors.py +18 -0
- hydpy/models/lland/lland_fixed.py +128 -0
- hydpy/models/lland/lland_fluxes.py +626 -0
- hydpy/models/lland/lland_inlets.py +12 -0
- hydpy/models/lland/lland_inputs.py +33 -0
- hydpy/models/lland/lland_logs.py +17 -0
- hydpy/models/lland/lland_masks.py +212 -0
- hydpy/models/lland/lland_model.py +7690 -0
- hydpy/models/lland/lland_outlets.py +12 -0
- hydpy/models/lland/lland_parameters.py +195 -0
- hydpy/models/lland/lland_sequences.py +67 -0
- hydpy/models/lland/lland_states.py +280 -0
- hydpy/models/lland_dd.py +2270 -0
- hydpy/models/lland_knauf.py +2156 -0
- hydpy/models/lland_knauf_ic.py +1920 -0
- hydpy/models/meteo/__init__.py +12 -0
- hydpy/models/meteo/meteo_control.py +154 -0
- hydpy/models/meteo/meteo_derived.py +159 -0
- hydpy/models/meteo/meteo_factors.py +88 -0
- hydpy/models/meteo/meteo_fixed.py +19 -0
- hydpy/models/meteo/meteo_fluxes.py +46 -0
- hydpy/models/meteo/meteo_inputs.py +47 -0
- hydpy/models/meteo/meteo_logs.py +30 -0
- hydpy/models/meteo/meteo_model.py +2904 -0
- hydpy/models/meteo/meteo_parameters.py +14 -0
- hydpy/models/meteo/meteo_sequences.py +22 -0
- hydpy/models/meteo_clear_glob_io.py +77 -0
- hydpy/models/meteo_glob_fao56.py +217 -0
- hydpy/models/meteo_glob_io.py +68 -0
- hydpy/models/meteo_glob_morsim.py +444 -0
- hydpy/models/meteo_precip_io.py +76 -0
- hydpy/models/meteo_psun_sun_glob_io.py +83 -0
- hydpy/models/meteo_sun_fao56.py +188 -0
- hydpy/models/meteo_sun_morsim.py +466 -0
- hydpy/models/meteo_temp_io.py +76 -0
- hydpy/models/musk/__init__.py +15 -0
- hydpy/models/musk/musk_control.py +328 -0
- hydpy/models/musk/musk_derived.py +32 -0
- hydpy/models/musk/musk_factors.py +53 -0
- hydpy/models/musk/musk_fluxes.py +24 -0
- hydpy/models/musk/musk_inlets.py +11 -0
- hydpy/models/musk/musk_masks.py +15 -0
- hydpy/models/musk/musk_model.py +838 -0
- hydpy/models/musk/musk_outlets.py +11 -0
- hydpy/models/musk/musk_sequences.py +88 -0
- hydpy/models/musk/musk_solver.py +68 -0
- hydpy/models/musk/musk_states.py +64 -0
- hydpy/models/musk_classic.py +228 -0
- hydpy/models/musk_mct.py +1247 -0
- hydpy/models/rconc/__init__.py +12 -0
- hydpy/models/rconc/rconc_control.py +473 -0
- hydpy/models/rconc/rconc_derived.py +76 -0
- hydpy/models/rconc/rconc_fluxes.py +19 -0
- hydpy/models/rconc/rconc_logs.py +74 -0
- hydpy/models/rconc/rconc_model.py +260 -0
- hydpy/models/rconc/rconc_states.py +11 -0
- hydpy/models/rconc_nash.py +48 -0
- hydpy/models/rconc_uh.py +53 -0
- hydpy/models/sw1d/__init__.py +17 -0
- hydpy/models/sw1d/sw1d_control.py +356 -0
- hydpy/models/sw1d/sw1d_derived.py +85 -0
- hydpy/models/sw1d/sw1d_factors.py +78 -0
- hydpy/models/sw1d/sw1d_fixed.py +12 -0
- hydpy/models/sw1d/sw1d_fluxes.py +55 -0
- hydpy/models/sw1d/sw1d_inlets.py +17 -0
- hydpy/models/sw1d/sw1d_model.py +3385 -0
- hydpy/models/sw1d/sw1d_outlets.py +11 -0
- hydpy/models/sw1d/sw1d_receivers.py +11 -0
- hydpy/models/sw1d/sw1d_senders.py +11 -0
- hydpy/models/sw1d/sw1d_states.py +23 -0
- hydpy/models/sw1d_channel.py +2051 -0
- hydpy/models/sw1d_gate_out.py +599 -0
- hydpy/models/sw1d_lias.py +105 -0
- hydpy/models/sw1d_lias_sluice.py +531 -0
- hydpy/models/sw1d_network.py +1219 -0
- hydpy/models/sw1d_pump.py +448 -0
- hydpy/models/sw1d_q_in.py +79 -0
- hydpy/models/sw1d_q_out.py +81 -0
- hydpy/models/sw1d_storage.py +78 -0
- hydpy/models/sw1d_weir_out.py +75 -0
- hydpy/models/test/__init__.py +14 -0
- hydpy/models/test/test_control.py +28 -0
- hydpy/models/test/test_fluxes.py +17 -0
- hydpy/models/test/test_model.py +201 -0
- hydpy/models/test/test_solver.py +48 -0
- hydpy/models/test/test_states.py +17 -0
- hydpy/models/test_discontinous.py +46 -0
- hydpy/models/test_stiff0d.py +47 -0
- hydpy/models/test_stiff1d.py +42 -0
- hydpy/models/whmod/__init__.py +21 -0
- hydpy/models/whmod/whmod_constants.py +77 -0
- hydpy/models/whmod/whmod_control.py +333 -0
- hydpy/models/whmod/whmod_derived.py +210 -0
- hydpy/models/whmod/whmod_factors.py +9 -0
- hydpy/models/whmod/whmod_fluxes.py +105 -0
- hydpy/models/whmod/whmod_inputs.py +15 -0
- hydpy/models/whmod/whmod_masks.py +178 -0
- hydpy/models/whmod/whmod_model.py +2091 -0
- hydpy/models/whmod/whmod_parameters.py +155 -0
- hydpy/models/whmod/whmod_sequences.py +193 -0
- hydpy/models/whmod/whmod_states.py +73 -0
- hydpy/models/whmod_rural.py +794 -0
- hydpy/models/whmod_urban.py +1011 -0
- hydpy/models/wland/__init__.py +43 -0
- hydpy/models/wland/wland_aides.py +55 -0
- hydpy/models/wland/wland_constants.py +103 -0
- hydpy/models/wland/wland_control.py +508 -0
- hydpy/models/wland/wland_derived.py +330 -0
- hydpy/models/wland/wland_factors.py +11 -0
- hydpy/models/wland/wland_fixed.py +12 -0
- hydpy/models/wland/wland_fluxes.py +166 -0
- hydpy/models/wland/wland_inputs.py +33 -0
- hydpy/models/wland/wland_masks.py +54 -0
- hydpy/models/wland/wland_model.py +3755 -0
- hydpy/models/wland/wland_outlets.py +11 -0
- hydpy/models/wland/wland_parameters.py +214 -0
- hydpy/models/wland/wland_sequences.py +108 -0
- hydpy/models/wland/wland_solver.py +45 -0
- hydpy/models/wland/wland_states.py +56 -0
- hydpy/models/wland_gd.py +888 -0
- hydpy/models/wland_wag.py +1244 -0
- hydpy/models/wq/__init__.py +14 -0
- hydpy/models/wq/wq_control.py +117 -0
- hydpy/models/wq/wq_derived.py +182 -0
- hydpy/models/wq/wq_factors.py +79 -0
- hydpy/models/wq/wq_fluxes.py +17 -0
- hydpy/models/wq/wq_model.py +1889 -0
- hydpy/models/wq_trapeze.py +168 -0
- hydpy/models/wq_trapeze_strickler.py +101 -0
- hydpy/models/wq_walrus.py +57 -0
- hydpy/py.typed +0 -0
- hydpy/tests/.coveragerc +22 -0
- hydpy/tests/__init__.py +0 -0
- hydpy/tests/check_consistency.py +32 -0
- hydpy/tests/hydpydoctestcustomize.pth +1 -0
- hydpy/tests/hydpydoctestcustomize.py +15 -0
- hydpy/tests/iotesting/__init__.py +0 -0
- hydpy/tests/run_doctests.py +233 -0
- hydpy-6.2.dev1.data/scripts/hyd.py +277 -0
- hydpy-6.2.dev1.dist-info/LICENSE +165 -0
- hydpy-6.2.dev1.dist-info/METADATA +163 -0
- hydpy-6.2.dev1.dist-info/RECORD +890 -0
- hydpy-6.2.dev1.dist-info/WHEEL +5 -0
- hydpy-6.2.dev1.dist-info/licenses_hydpy_installer.txt +42 -0
- hydpy-6.2.dev1.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,597 @@
|
|
|
1
|
+
"""This module provides features for preparing *HydPy* networks based on different
|
|
2
|
+
data.
|
|
3
|
+
|
|
4
|
+
.. _`guideline of the German organisation LAWA`: https://www.lawa.de/documents/richtlinie_fuer_die_gebietsbezeichnung_und_die_verschluesselung_von_fliessgewaessern_1552305779.pdf # pylint: disable=line-too-long
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
# import...
|
|
8
|
+
# ...from standard library
|
|
9
|
+
from __future__ import annotations
|
|
10
|
+
|
|
11
|
+
# ...from HydPy
|
|
12
|
+
from hydpy.core import devicetools
|
|
13
|
+
from hydpy.core import objecttools
|
|
14
|
+
from hydpy.core import selectiontools
|
|
15
|
+
from hydpy.core.typingtools import *
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
class RiverBasinNumber(str):
|
|
19
|
+
"""A single river basin number (Gewässerkennzahl) based on a `guideline of the
|
|
20
|
+
German organisation LAWA`_ (Länderarbeitsgemeinschaft Wasser: Richtlinie für die
|
|
21
|
+
Gebietsbezeichung und die Verschlüsselung von Fließgewässern, 1970).
|
|
22
|
+
|
|
23
|
+
|RiverBasinNumber| ignores the fill number zero:
|
|
24
|
+
|
|
25
|
+
>>> RiverBasinNumber(1230)
|
|
26
|
+
RiverBasinNumber(123)
|
|
27
|
+
>>> RiverBasinNumber("0123")
|
|
28
|
+
RiverBasinNumber(123)
|
|
29
|
+
|
|
30
|
+
Numbers not interpretable as a river basin number result in the following error
|
|
31
|
+
message:
|
|
32
|
+
|
|
33
|
+
>>> RiverBasinNumber("123A")
|
|
34
|
+
Traceback (most recent call last):
|
|
35
|
+
...
|
|
36
|
+
ValueError: The given value `123A` could not be interpreted as a river \
|
|
37
|
+
basin number.
|
|
38
|
+
|
|
39
|
+
Use the `in` operator to find out if one river basin lies within the source area of
|
|
40
|
+
another one. For example, `56626131` lies upstream of `566331`:
|
|
41
|
+
|
|
42
|
+
>>> RiverBasinNumber(56626131) in RiverBasinNumber(566331)
|
|
43
|
+
True
|
|
44
|
+
>>> RiverBasinNumber(566331) in RiverBasinNumber(56626131)
|
|
45
|
+
False
|
|
46
|
+
|
|
47
|
+
River basin `532142` does neither lie upstream nor downstream of river basin
|
|
48
|
+
`566331`:
|
|
49
|
+
|
|
50
|
+
>>> RiverBasinNumber(532142) in RiverBasinNumber(566331)
|
|
51
|
+
False
|
|
52
|
+
>>> RiverBasinNumber(566331) in RiverBasinNumber(532142)
|
|
53
|
+
False
|
|
54
|
+
|
|
55
|
+
For river basin numbers that are identical in all shared digits, the result is
|
|
56
|
+
always |False|:
|
|
57
|
+
|
|
58
|
+
>>> RiverBasinNumber(566331) in RiverBasinNumber(566331)
|
|
59
|
+
False
|
|
60
|
+
>>> RiverBasinNumber(566331) in RiverBasinNumber(5663311)
|
|
61
|
+
False
|
|
62
|
+
|
|
63
|
+
The `in` operator also works for |str| and |int| objects but not for other types
|
|
64
|
+
like |float|:
|
|
65
|
+
|
|
66
|
+
>>> "56626131" in RiverBasinNumber(566331)
|
|
67
|
+
True
|
|
68
|
+
>>> 56626131 in RiverBasinNumber(566331)
|
|
69
|
+
True
|
|
70
|
+
>>> 56626131.0 in RiverBasinNumber(566331)
|
|
71
|
+
False
|
|
72
|
+
"""
|
|
73
|
+
|
|
74
|
+
def __new__(cls, value: int | str):
|
|
75
|
+
try:
|
|
76
|
+
# PyCharm bug, see https://stackoverflow.com/questions/49465166/
|
|
77
|
+
# noinspection PyArgumentList
|
|
78
|
+
return str.__new__(RiverBasinNumber, str(int(value)).strip("0"))
|
|
79
|
+
except ValueError:
|
|
80
|
+
raise ValueError(
|
|
81
|
+
f"The given value `{value}` could not be interpreted as a river basin "
|
|
82
|
+
f"number."
|
|
83
|
+
) from None
|
|
84
|
+
|
|
85
|
+
@property
|
|
86
|
+
def is_rivermouth(self) -> bool:
|
|
87
|
+
"""Only true if the river basin number ends with `9`.
|
|
88
|
+
|
|
89
|
+
>>> from hydpy import RiverBasinNumber
|
|
90
|
+
>>> RiverBasinNumber(129).is_rivermouth
|
|
91
|
+
True
|
|
92
|
+
>>> RiverBasinNumber(123).is_rivermouth
|
|
93
|
+
False
|
|
94
|
+
"""
|
|
95
|
+
return self[-1] == "9"
|
|
96
|
+
|
|
97
|
+
@property
|
|
98
|
+
def is_mainchannel(self) -> bool:
|
|
99
|
+
"""Only true if the river basin number ends with an odd number.
|
|
100
|
+
|
|
101
|
+
>>> from hydpy import RiverBasinNumber
|
|
102
|
+
>>> for number in range(120, 130):
|
|
103
|
+
... rbn = RiverBasinNumber(number)
|
|
104
|
+
... print(number, rbn, rbn.is_mainchannel)
|
|
105
|
+
120 12 False
|
|
106
|
+
121 121 True
|
|
107
|
+
122 122 False
|
|
108
|
+
123 123 True
|
|
109
|
+
124 124 False
|
|
110
|
+
125 125 True
|
|
111
|
+
126 126 False
|
|
112
|
+
127 127 True
|
|
113
|
+
128 128 False
|
|
114
|
+
129 129 True
|
|
115
|
+
"""
|
|
116
|
+
return int(self[-1]) % 2 == 1
|
|
117
|
+
|
|
118
|
+
@property
|
|
119
|
+
def is_tributary(self) -> bool:
|
|
120
|
+
"""Only true if the river basin number ends with an even number.
|
|
121
|
+
|
|
122
|
+
>>> from hydpy import RiverBasinNumber
|
|
123
|
+
>>> for number in range(120, 130):
|
|
124
|
+
... rbn = RiverBasinNumber(number)
|
|
125
|
+
... print(number, rbn, rbn.is_tributary)
|
|
126
|
+
120 12 True
|
|
127
|
+
121 121 False
|
|
128
|
+
122 122 True
|
|
129
|
+
123 123 False
|
|
130
|
+
124 124 True
|
|
131
|
+
125 125 False
|
|
132
|
+
126 126 True
|
|
133
|
+
127 127 False
|
|
134
|
+
128 128 True
|
|
135
|
+
129 129 False
|
|
136
|
+
"""
|
|
137
|
+
return int(self[-1]) % 2 == 0
|
|
138
|
+
|
|
139
|
+
@property
|
|
140
|
+
def _possible_next_last_initial_digits(self) -> Iterator[str]:
|
|
141
|
+
return (digit for digit in ("3", "5", "7", "9") if digit > self.rstrip("9")[-1])
|
|
142
|
+
|
|
143
|
+
@property
|
|
144
|
+
def possible_next_initial_digits(self) -> tuple[str, ...]:
|
|
145
|
+
"""Return all potential candidates for the next downstream river basin number.
|
|
146
|
+
|
|
147
|
+
Eventually, only the first and the last returned candidate should be relevant.
|
|
148
|
+
But to return all possible intermediate candidates might be safer to capture
|
|
149
|
+
unexpected river basin number specifications.
|
|
150
|
+
|
|
151
|
+
The candidate numbers might be incomplete. For example, the next number
|
|
152
|
+
downstream of `123` could be `1251` instead of `125`:
|
|
153
|
+
|
|
154
|
+
>>> from hydpy import RiverBasinNumber
|
|
155
|
+
>>> for number in range(120, 130):
|
|
156
|
+
... rbn = RiverBasinNumber(number)
|
|
157
|
+
... print(number, rbn, rbn.possible_next_initial_digits)
|
|
158
|
+
120 12 ('13', '15', '17', '19')
|
|
159
|
+
121 121 ('123', '125', '127', '129')
|
|
160
|
+
122 122 ('123', '125', '127', '129')
|
|
161
|
+
123 123 ('125', '127', '129')
|
|
162
|
+
124 124 ('125', '127', '129')
|
|
163
|
+
125 125 ('127', '129')
|
|
164
|
+
126 126 ('127', '129')
|
|
165
|
+
127 127 ('129',)
|
|
166
|
+
128 128 ('129',)
|
|
167
|
+
129 129 ('13', '15', '17', '19')
|
|
168
|
+
"""
|
|
169
|
+
return tuple(
|
|
170
|
+
self.rstrip("9")[:-1] + digit
|
|
171
|
+
for digit in self._possible_next_last_initial_digits
|
|
172
|
+
)
|
|
173
|
+
|
|
174
|
+
@property
|
|
175
|
+
def nmb_digits(self) -> int:
|
|
176
|
+
"""The number of (significant) digits of a river basin number.
|
|
177
|
+
|
|
178
|
+
>>> from hydpy import RiverBasinNumber
|
|
179
|
+
>>> RiverBasinNumber(120).nmb_digits
|
|
180
|
+
2
|
|
181
|
+
"""
|
|
182
|
+
return len(self)
|
|
183
|
+
|
|
184
|
+
def __contains__(self, number: object) -> bool:
|
|
185
|
+
if not isinstance(number, (str, int)):
|
|
186
|
+
return False
|
|
187
|
+
other = RiverBasinNumber(number)
|
|
188
|
+
for digit_self, digit_other in zip(self, other):
|
|
189
|
+
ds = int(digit_self)
|
|
190
|
+
do = int(digit_other)
|
|
191
|
+
if ds == do:
|
|
192
|
+
continue
|
|
193
|
+
if ds < do:
|
|
194
|
+
return False
|
|
195
|
+
return bool(ds % 2)
|
|
196
|
+
return False
|
|
197
|
+
|
|
198
|
+
def __repr__(self) -> str:
|
|
199
|
+
return f"RiverBasinNumber({str.__repr__(self)[1:-1]})"
|
|
200
|
+
|
|
201
|
+
|
|
202
|
+
class RiverBasinNumbers(tuple):
|
|
203
|
+
"""A sorted collection of |RiverBasinNumber| objects.
|
|
204
|
+
|
|
205
|
+
>>> from hydpy import RiverBasinNumbers
|
|
206
|
+
>>> rbns = RiverBasinNumbers((111, 113, 1132, 1129, 11269, 1125, 11261,
|
|
207
|
+
... 11262, 1123, 1124, 1122, 1121))
|
|
208
|
+
>>> rbns
|
|
209
|
+
RiverBasinNumbers((111, 1121, 1122, 1123, 1124, 1125, 11261,
|
|
210
|
+
11262, 11269, 1129, 113, 1132))
|
|
211
|
+
|
|
212
|
+
The `in` operator works as to be expected, but performs an automatic type
|
|
213
|
+
conversion and relies on a more efficient implementation than the one of the base
|
|
214
|
+
class |tuple|:
|
|
215
|
+
|
|
216
|
+
>>> from hydpy import RiverBasinNumber
|
|
217
|
+
>>> RiverBasinNumber(113) in rbns
|
|
218
|
+
True
|
|
219
|
+
>>> 113 in rbns
|
|
220
|
+
True
|
|
221
|
+
>>> "113" in rbns
|
|
222
|
+
True
|
|
223
|
+
>>> 113.0 in rbns
|
|
224
|
+
False
|
|
225
|
+
>>> 1126 in rbns
|
|
226
|
+
False
|
|
227
|
+
>>> 11262 in rbns
|
|
228
|
+
True
|
|
229
|
+
>>> 11263 in rbns
|
|
230
|
+
False
|
|
231
|
+
"""
|
|
232
|
+
|
|
233
|
+
def __new__(cls, values: Iterable[int | str]):
|
|
234
|
+
_values = tuple(RiverBasinNumber(value) for value in values)
|
|
235
|
+
obj = tuple.__new__(RiverBasinNumbers, sorted(_values))
|
|
236
|
+
vars(obj)["_tree"] = None
|
|
237
|
+
return obj
|
|
238
|
+
|
|
239
|
+
@property
|
|
240
|
+
def _tree(self):
|
|
241
|
+
if vars(self)["_tree"] is None:
|
|
242
|
+
tree = {}
|
|
243
|
+
for rbn in self:
|
|
244
|
+
subtree = tree
|
|
245
|
+
for digit in rbn:
|
|
246
|
+
try:
|
|
247
|
+
subtree = subtree[digit]
|
|
248
|
+
except KeyError:
|
|
249
|
+
subtree[digit] = {}
|
|
250
|
+
subtree = subtree[digit]
|
|
251
|
+
subtree["0"] = {}
|
|
252
|
+
vars(self)["_tree"] = tree
|
|
253
|
+
return vars(self)["_tree"]
|
|
254
|
+
|
|
255
|
+
def select(self, number: int | str) -> RiverBasinNumbers:
|
|
256
|
+
"""Select and return all river basin numbers starting with the given number.
|
|
257
|
+
|
|
258
|
+
>>> from hydpy import RiverBasinNumbers
|
|
259
|
+
>>> rbns = RiverBasinNumbers((111, 113, 1132, 1129, 11269, 1125, 11261,
|
|
260
|
+
... 11262, 1123, 1124, 1122, 1121))
|
|
261
|
+
>>> rbns.select(111)
|
|
262
|
+
RiverBasinNumbers((111,))
|
|
263
|
+
>>> rbns.select(112)
|
|
264
|
+
RiverBasinNumbers((1121, 1122, 1123, 1124, 1125, 11261,
|
|
265
|
+
11262, 11269, 1129))
|
|
266
|
+
>>> rbns.select(113)
|
|
267
|
+
RiverBasinNumbers((113, 1132))
|
|
268
|
+
>>> rbns.select(114)
|
|
269
|
+
RiverBasinNumbers(())
|
|
270
|
+
"""
|
|
271
|
+
prefix = ""
|
|
272
|
+
tree = self._tree
|
|
273
|
+
for digit in RiverBasinNumber(number):
|
|
274
|
+
try:
|
|
275
|
+
tree = tree[digit]
|
|
276
|
+
prefix += digit
|
|
277
|
+
except KeyError:
|
|
278
|
+
return RiverBasinNumbers(())
|
|
279
|
+
|
|
280
|
+
def _walk(number_: str, tree_: dict[str, dict], numbers: set) -> set:
|
|
281
|
+
if tree_:
|
|
282
|
+
numbers.remove(number_)
|
|
283
|
+
for digit_, subtree in tree_.items():
|
|
284
|
+
subnumber = RiverBasinNumber(number_ + digit_)
|
|
285
|
+
numbers.add(subnumber)
|
|
286
|
+
_walk(subnumber, subtree, numbers)
|
|
287
|
+
return numbers
|
|
288
|
+
|
|
289
|
+
riverbasinnumbers = {prefix}
|
|
290
|
+
return RiverBasinNumbers(_walk(prefix, tree, riverbasinnumbers))
|
|
291
|
+
|
|
292
|
+
def _get_next_number(self, number: int | str) -> RiverBasinNumber | None:
|
|
293
|
+
number = RiverBasinNumber(number)
|
|
294
|
+
for pdn1 in number.possible_next_initial_digits:
|
|
295
|
+
neighbours = self.select(pdn1)
|
|
296
|
+
if neighbours:
|
|
297
|
+
return min(neighbours)
|
|
298
|
+
return None
|
|
299
|
+
|
|
300
|
+
@property
|
|
301
|
+
def next_numbers(self) -> tuple[RiverBasinNumber | None, ...]:
|
|
302
|
+
"""A tuple of the next downstream river basin numbers.
|
|
303
|
+
|
|
304
|
+
The order of the returned numbers corresponds to the order of the numbers
|
|
305
|
+
contained by the actual |RiverBasinNumbers| object.
|
|
306
|
+
|
|
307
|
+
The number of the subcatchment immediately downstream of the outlet
|
|
308
|
+
subcatchment is not known. The tuple contains a |None| object instead (or
|
|
309
|
+
multiple |None| objects in case of multiple outlets).
|
|
310
|
+
|
|
311
|
+
Eventually, not all possible combinations of river basin numbers are covered.
|
|
312
|
+
Please keep us informed if you notice a problem when applying this algorithm to
|
|
313
|
+
your data. At least, the algorithm works properly on the following test case
|
|
314
|
+
provided by Michael Wagner (TU Dresden):
|
|
315
|
+
|
|
316
|
+
.. image:: LAWA_river-basin-bumbers.png
|
|
317
|
+
|
|
318
|
+
At first, we consider only the black arrows, exemplifying the basic definition
|
|
319
|
+
of river basin numbers:
|
|
320
|
+
|
|
321
|
+
>>> from hydpy import RiverBasinNumbers
|
|
322
|
+
>>> rbns = RiverBasinNumbers((111, 113, 1129, 11269, 1125, 11261,
|
|
323
|
+
... 11262, 1123, 1124, 1122, 1121))
|
|
324
|
+
>>> for this_rbn, next_rbn in zip(rbns, rbns.next_numbers):
|
|
325
|
+
... print(this_rbn.ljust(6), next_rbn)
|
|
326
|
+
111 113
|
|
327
|
+
1121 1123
|
|
328
|
+
1122 1123
|
|
329
|
+
1123 1125
|
|
330
|
+
1124 1125
|
|
331
|
+
1125 1129
|
|
332
|
+
11261 11269
|
|
333
|
+
11262 11269
|
|
334
|
+
11269 1129
|
|
335
|
+
1129 113
|
|
336
|
+
113 None
|
|
337
|
+
|
|
338
|
+
The coloured arrows exemplify the situation, where some additional subdivisions
|
|
339
|
+
become necessary:
|
|
340
|
+
|
|
341
|
+
>>> from hydpy import RiverBasinNumbers
|
|
342
|
+
>>> rbns = RiverBasinNumbers((1111, 1119, 113, 1129, 1127,
|
|
343
|
+
... 11269, 1125, 11261, 11262, 11239,
|
|
344
|
+
... 11231, 1124, 1122, 1121))
|
|
345
|
+
>>> for this_rbn, next_rbn in zip(rbns, rbns.next_numbers):
|
|
346
|
+
... print(this_rbn.ljust(6), next_rbn)
|
|
347
|
+
1111 1119
|
|
348
|
+
1119 113
|
|
349
|
+
1121 11231
|
|
350
|
+
1122 11231
|
|
351
|
+
11231 11239
|
|
352
|
+
11239 1125
|
|
353
|
+
1124 1125
|
|
354
|
+
1125 1127
|
|
355
|
+
11261 11269
|
|
356
|
+
11262 11269
|
|
357
|
+
11269 1127
|
|
358
|
+
1127 1129
|
|
359
|
+
1129 113
|
|
360
|
+
113 None
|
|
361
|
+
"""
|
|
362
|
+
return tuple(self._get_next_number(rbn) for rbn in self)
|
|
363
|
+
|
|
364
|
+
def __contains__(self, number) -> bool:
|
|
365
|
+
if not isinstance(number, (int, str)):
|
|
366
|
+
return False
|
|
367
|
+
tree = self._tree
|
|
368
|
+
for digit in RiverBasinNumber(number):
|
|
369
|
+
try:
|
|
370
|
+
tree = tree[digit]
|
|
371
|
+
except KeyError:
|
|
372
|
+
return False
|
|
373
|
+
return "0" in tree
|
|
374
|
+
|
|
375
|
+
def __repr__(self) -> str:
|
|
376
|
+
return objecttools.assignrepr_tuple(self, "RiverBasinNumbers(", 60) + ")"
|
|
377
|
+
|
|
378
|
+
|
|
379
|
+
class RiverBasinNumbers2Selection:
|
|
380
|
+
"""Class for defining a |Selection| object based on a given |RiverBasinNumbers|
|
|
381
|
+
object.
|
|
382
|
+
|
|
383
|
+
Note that this class does not cover all possible *HydPy* networks. So it might be
|
|
384
|
+
necessary to make some adjustments on the returned selection, e.g. to define
|
|
385
|
+
individual names for specific elements or nodes.
|
|
386
|
+
|
|
387
|
+
All examples in the documentation on the methods and properties of class
|
|
388
|
+
|RiverBasinNumbers2Selection| rely on the river basin numbers defined in the
|
|
389
|
+
documentation on class |RiverBasinNumbers|.
|
|
390
|
+
"""
|
|
391
|
+
|
|
392
|
+
supplier_prefix: str
|
|
393
|
+
router_prefix: str
|
|
394
|
+
node_prefix: str
|
|
395
|
+
last_node: str
|
|
396
|
+
selection_name: str
|
|
397
|
+
_up2down: dict[RiverBasinNumber, RiverBasinNumber | None]
|
|
398
|
+
|
|
399
|
+
def __init__(self, numbers: Iterable[int | str]):
|
|
400
|
+
self.supplier_prefix = "land_"
|
|
401
|
+
self.router_prefix = "stream_"
|
|
402
|
+
self.node_prefix = "node_"
|
|
403
|
+
self.last_node = "node_outlet"
|
|
404
|
+
self.selection_name = "complete"
|
|
405
|
+
rbns = RiverBasinNumbers(numbers)
|
|
406
|
+
self._up2down = dict(tuple_ for tuple_ in zip(rbns, rbns.next_numbers))
|
|
407
|
+
|
|
408
|
+
@property
|
|
409
|
+
def _supplier_numbers(self) -> tuple[RiverBasinNumber, ...]:
|
|
410
|
+
"""A tuple of the numbers of all "supplying basins"."""
|
|
411
|
+
return tuple(self._up2down.keys())
|
|
412
|
+
|
|
413
|
+
@property
|
|
414
|
+
def _router_numbers(self) -> tuple[RiverBasinNumber, ...]:
|
|
415
|
+
"""A tuple of the numbers of all "routing basins"."""
|
|
416
|
+
return tuple(up for up in self._up2down.keys() if up in self._up2down.values())
|
|
417
|
+
|
|
418
|
+
def _get_nodename(self, string: str) -> str:
|
|
419
|
+
return self.node_prefix + string
|
|
420
|
+
|
|
421
|
+
def _get_suppliername(self, string: str) -> str:
|
|
422
|
+
return self.supplier_prefix + string
|
|
423
|
+
|
|
424
|
+
def _get_routername(self, string: str) -> str:
|
|
425
|
+
return self.router_prefix + string
|
|
426
|
+
|
|
427
|
+
@property
|
|
428
|
+
def supplier_elements(self) -> devicetools.Elements:
|
|
429
|
+
"""An |Elements| object containing all "supplying basins".
|
|
430
|
+
|
|
431
|
+
(All river basins are assumed to supply something to the downstream basin.)
|
|
432
|
+
|
|
433
|
+
>>> from hydpy import RiverBasinNumbers2Selection
|
|
434
|
+
>>> rbns2s = RiverBasinNumbers2Selection(
|
|
435
|
+
... (111, 113, 1129, 11269, 1125, 11261,
|
|
436
|
+
... 11262, 1123, 1124, 1122, 1121))
|
|
437
|
+
|
|
438
|
+
The following elements are correctly connected to the required
|
|
439
|
+
outlet nodes already:
|
|
440
|
+
|
|
441
|
+
>>> for element in rbns2s.supplier_elements:
|
|
442
|
+
... print(repr(element))
|
|
443
|
+
Element("land_111",
|
|
444
|
+
outlets="node_113")
|
|
445
|
+
Element("land_1121",
|
|
446
|
+
outlets="node_1123")
|
|
447
|
+
Element("land_1122",
|
|
448
|
+
outlets="node_1123")
|
|
449
|
+
Element("land_1123",
|
|
450
|
+
outlets="node_1125")
|
|
451
|
+
Element("land_1124",
|
|
452
|
+
outlets="node_1125")
|
|
453
|
+
Element("land_1125",
|
|
454
|
+
outlets="node_1129")
|
|
455
|
+
Element("land_11261",
|
|
456
|
+
outlets="node_11269")
|
|
457
|
+
Element("land_11262",
|
|
458
|
+
outlets="node_11269")
|
|
459
|
+
Element("land_11269",
|
|
460
|
+
outlets="node_1129")
|
|
461
|
+
Element("land_1129",
|
|
462
|
+
outlets="node_113")
|
|
463
|
+
Element("land_113",
|
|
464
|
+
outlets="node_outlet")
|
|
465
|
+
|
|
466
|
+
It is possible to change the prefix names of the elements and nodes:
|
|
467
|
+
|
|
468
|
+
>>> rbns2s.supplier_prefix = "a_"
|
|
469
|
+
>>> rbns2s.node_prefix = "b_"
|
|
470
|
+
>>> rbns2s.supplier_elements
|
|
471
|
+
Elements("a_111", "a_1121", "a_1122", "a_1123", "a_1124", "a_1125",
|
|
472
|
+
"a_11261", "a_11262", "a_11269", "a_1129", "a_113")
|
|
473
|
+
"""
|
|
474
|
+
elements = devicetools.Elements()
|
|
475
|
+
for supplier in self._supplier_numbers:
|
|
476
|
+
element = self._get_suppliername(supplier)
|
|
477
|
+
rbn = self._up2down[supplier]
|
|
478
|
+
if rbn is None:
|
|
479
|
+
outlet = self.last_node
|
|
480
|
+
else:
|
|
481
|
+
outlet = self._get_nodename(str(rbn))
|
|
482
|
+
elements += devicetools.Element(element, outlets=outlet)
|
|
483
|
+
return elements
|
|
484
|
+
|
|
485
|
+
@property
|
|
486
|
+
def router_elements(self) -> devicetools.Elements:
|
|
487
|
+
"""An |Elements| object containing all "routing basins".
|
|
488
|
+
|
|
489
|
+
(Only river basins with an upstream basin are assumed to route something to the
|
|
490
|
+
downstream basin.)
|
|
491
|
+
|
|
492
|
+
>>> from hydpy import RiverBasinNumbers2Selection
|
|
493
|
+
>>> rbns2s = RiverBasinNumbers2Selection(
|
|
494
|
+
... (111, 113, 1129, 11269, 1125, 11261,
|
|
495
|
+
... 11262, 1123, 1124, 1122, 1121))
|
|
496
|
+
|
|
497
|
+
The following elements are correctly connected to the required inlet and outlet
|
|
498
|
+
nodes already:
|
|
499
|
+
|
|
500
|
+
>>> for element in rbns2s.router_elements:
|
|
501
|
+
... print(repr(element))
|
|
502
|
+
Element("stream_1123",
|
|
503
|
+
inlets="node_1123",
|
|
504
|
+
outlets="node_1125")
|
|
505
|
+
Element("stream_1125",
|
|
506
|
+
inlets="node_1125",
|
|
507
|
+
outlets="node_1129")
|
|
508
|
+
Element("stream_11269",
|
|
509
|
+
inlets="node_11269",
|
|
510
|
+
outlets="node_1129")
|
|
511
|
+
Element("stream_1129",
|
|
512
|
+
inlets="node_1129",
|
|
513
|
+
outlets="node_113")
|
|
514
|
+
Element("stream_113",
|
|
515
|
+
inlets="node_113",
|
|
516
|
+
outlets="node_outlet")
|
|
517
|
+
|
|
518
|
+
It is both possible to change the prefix names of the elements and nodes:
|
|
519
|
+
|
|
520
|
+
>>> rbns2s.router_prefix = "c_"
|
|
521
|
+
>>> rbns2s.node_prefix = "d_"
|
|
522
|
+
>>> rbns2s.router_elements
|
|
523
|
+
Elements("c_1123", "c_1125", "c_11269", "c_1129", "c_113")
|
|
524
|
+
"""
|
|
525
|
+
elements = devicetools.Elements()
|
|
526
|
+
for router in self._router_numbers:
|
|
527
|
+
element = self._get_routername(router)
|
|
528
|
+
inlet = self._get_nodename(router)
|
|
529
|
+
rbn = self._up2down[router]
|
|
530
|
+
if rbn is None:
|
|
531
|
+
outlet = self.last_node
|
|
532
|
+
else:
|
|
533
|
+
outlet = self._get_nodename(rbn)
|
|
534
|
+
elements += devicetools.Element(element, inlets=inlet, outlets=outlet)
|
|
535
|
+
return elements
|
|
536
|
+
|
|
537
|
+
@property
|
|
538
|
+
def elements(self) -> devicetools.Elements:
|
|
539
|
+
"""An |Elements| object containing all required elements (both the
|
|
540
|
+
|RiverBasinNumbers2Selection.supplier_elements| and the
|
|
541
|
+
|RiverBasinNumbers2Selection.router_elements|)."""
|
|
542
|
+
return self.supplier_elements + self.router_elements
|
|
543
|
+
|
|
544
|
+
@property
|
|
545
|
+
def nodes(self) -> devicetools.Nodes:
|
|
546
|
+
"""A |Nodes| object containing all required nodes, including the outlet node.
|
|
547
|
+
|
|
548
|
+
>>> from hydpy import RiverBasinNumbers2Selection
|
|
549
|
+
>>> rbns2s = RiverBasinNumbers2Selection(
|
|
550
|
+
... (111, 113, 1129, 11269, 1125, 11261,
|
|
551
|
+
... 11262, 1123, 1124, 1122, 1121))
|
|
552
|
+
>>> rbns2s.nodes
|
|
553
|
+
Nodes("node_1123", "node_1125", "node_11269", "node_1129", "node_113",
|
|
554
|
+
"node_outlet")
|
|
555
|
+
|
|
556
|
+
It is both possible to change the prefix names of the nodes and the name of the
|
|
557
|
+
outlet node separately:
|
|
558
|
+
|
|
559
|
+
>>> rbns2s.node_prefix = "b_"
|
|
560
|
+
>>> rbns2s.last_node = "l_node"
|
|
561
|
+
>>> rbns2s.nodes
|
|
562
|
+
Nodes("b_1123", "b_1125", "b_11269", "b_1129", "b_113", "l_node")
|
|
563
|
+
"""
|
|
564
|
+
return devicetools.Nodes(
|
|
565
|
+
self.node_prefix + routers for routers in self._router_numbers
|
|
566
|
+
) + devicetools.Node(self.last_node)
|
|
567
|
+
|
|
568
|
+
@property
|
|
569
|
+
def selection(self) -> selectiontools.Selection:
|
|
570
|
+
"""A complete |Selection| object containing all required elements and nodes.
|
|
571
|
+
|
|
572
|
+
>>> from hydpy import RiverBasinNumbers2Selection
|
|
573
|
+
>>> rbns2s = RiverBasinNumbers2Selection(
|
|
574
|
+
... (111, 113, 1129, 11269, 1125, 11261,
|
|
575
|
+
... 11262, 1123, 1124, 1122, 1121))
|
|
576
|
+
>>> rbns2s.selection
|
|
577
|
+
Selection("complete",
|
|
578
|
+
nodes=("node_1123", "node_1125", "node_11269", "node_1129",
|
|
579
|
+
"node_113", "node_outlet"),
|
|
580
|
+
elements=("land_111", "land_1121", "land_1122", "land_1123",
|
|
581
|
+
"land_1124", "land_1125", "land_11261",
|
|
582
|
+
"land_11262", "land_11269", "land_1129",
|
|
583
|
+
"land_113", "stream_1123", "stream_1125",
|
|
584
|
+
"stream_11269", "stream_1129", "stream_113"))
|
|
585
|
+
|
|
586
|
+
Besides the possible modifications on the names of the different nodes and
|
|
587
|
+
elements, one is also free to define an arbitrary selection name:
|
|
588
|
+
|
|
589
|
+
>>> rbns2s.selection_name = "sel"
|
|
590
|
+
>>> from hydpy import pub
|
|
591
|
+
>>> with pub.options.ellipsis(1):
|
|
592
|
+
... print(repr(rbns2s.selection))
|
|
593
|
+
Selection("sel",
|
|
594
|
+
nodes=("node_1123", ...,"node_outlet"),
|
|
595
|
+
elements=("land_111", ...,"stream_113"))
|
|
596
|
+
"""
|
|
597
|
+
return selectiontools.Selection(self.selection_name, self.nodes, self.elements)
|