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
hydpy/auxs/iuhtools.py
ADDED
|
@@ -0,0 +1,543 @@
|
|
|
1
|
+
"""This module supports modelling based on instantaneous unit hydrographs.
|
|
2
|
+
|
|
3
|
+
This module implements some abstract descriptor classes, metaclasses and base classes.
|
|
4
|
+
If you are just interested in applying a certain instantaneous unit hydrograph (iuh)
|
|
5
|
+
function or if you want to implement an additional iuh, see the examples or the source
|
|
6
|
+
code of class |TranslationDiffusionEquation|.
|
|
7
|
+
"""
|
|
8
|
+
|
|
9
|
+
# import...
|
|
10
|
+
# ...from standard library
|
|
11
|
+
from __future__ import annotations
|
|
12
|
+
import abc
|
|
13
|
+
import itertools
|
|
14
|
+
import math
|
|
15
|
+
|
|
16
|
+
# ...from site-packages
|
|
17
|
+
import numpy
|
|
18
|
+
|
|
19
|
+
# ...from Hydpy
|
|
20
|
+
from hydpy import config
|
|
21
|
+
from hydpy.core import exceptiontools
|
|
22
|
+
from hydpy.core import objecttools
|
|
23
|
+
from hydpy.core.typingtools import *
|
|
24
|
+
from hydpy.auxs import statstools
|
|
25
|
+
from hydpy.auxs import armatools
|
|
26
|
+
|
|
27
|
+
if TYPE_CHECKING:
|
|
28
|
+
from matplotlib import pyplot
|
|
29
|
+
from scipy import special
|
|
30
|
+
else:
|
|
31
|
+
pyplot = exceptiontools.OptionalImport("pyplot", ["matplotlib.pyplot"], locals())
|
|
32
|
+
special = exceptiontools.OptionalImport("special", ["scipy.special"], locals())
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
class ParameterIUH:
|
|
36
|
+
"""Descriptor base class for |PrimaryParameterIUH| and |SecondaryParameterIUH|.
|
|
37
|
+
|
|
38
|
+
The first initialisation argument is the parameters name. Optionally, an
|
|
39
|
+
alternative type (the default type is |float|) and a documentation string can be
|
|
40
|
+
passed.
|
|
41
|
+
"""
|
|
42
|
+
|
|
43
|
+
name: str
|
|
44
|
+
"""Name of the handled |IUH| parameter."""
|
|
45
|
+
type_: type[float]
|
|
46
|
+
"""Type of the handled |IUH| parameter."""
|
|
47
|
+
|
|
48
|
+
_name: str
|
|
49
|
+
|
|
50
|
+
def __init__(self, name: str, type_: type[Any] = float, doc: object | None = None):
|
|
51
|
+
self.name = name
|
|
52
|
+
self._name = "_" + name
|
|
53
|
+
self.type_ = type_
|
|
54
|
+
self.__doc__ = (
|
|
55
|
+
f"Instantaneous unit hydrograph parameter: "
|
|
56
|
+
f"{name if doc is None else str(doc)}"
|
|
57
|
+
)
|
|
58
|
+
|
|
59
|
+
@overload
|
|
60
|
+
def __get__(self, obj: None, type_: type[IUH] | None = None) -> Self: ...
|
|
61
|
+
|
|
62
|
+
@overload
|
|
63
|
+
def __get__(self, obj: IUH, type_: type[IUH] | None = None) -> float: ...
|
|
64
|
+
|
|
65
|
+
def __get__(
|
|
66
|
+
self, obj: IUH | None, type_: type[IUH] | None = None
|
|
67
|
+
) -> ParameterIUH | float:
|
|
68
|
+
return self if obj is None else getattr(obj, self._name)
|
|
69
|
+
|
|
70
|
+
def _convert_type(self, value: float) -> float:
|
|
71
|
+
try:
|
|
72
|
+
return self.type_(value)
|
|
73
|
+
except BaseException:
|
|
74
|
+
raise TypeError(
|
|
75
|
+
f"The value `{value}` of type `{type(value).__name__}` could not be "
|
|
76
|
+
f"converted to type `{self.type_.__name__}` of the instantaneous unit "
|
|
77
|
+
f"hydrograph parameter `{self.name}`."
|
|
78
|
+
) from None
|
|
79
|
+
|
|
80
|
+
|
|
81
|
+
class PrimaryParameterIUH(ParameterIUH):
|
|
82
|
+
"""Descriptor base class for parameters of instantaneous unit hydrograph functions
|
|
83
|
+
to be defined by the user.
|
|
84
|
+
|
|
85
|
+
When a primary parameter value is set or deleted, the master instance is instructed
|
|
86
|
+
to |IUH.update| all secondary parameter values.
|
|
87
|
+
"""
|
|
88
|
+
|
|
89
|
+
def __set__(self, obj: IUH, value: float) -> None:
|
|
90
|
+
value = self._convert_type(value)
|
|
91
|
+
setattr(obj, self._name, value)
|
|
92
|
+
obj.update()
|
|
93
|
+
|
|
94
|
+
def __delete__(self, obj: IUH) -> None:
|
|
95
|
+
setattr(obj, self._name, None)
|
|
96
|
+
obj.update()
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
class SecondaryParameterIUH(ParameterIUH):
|
|
100
|
+
"""Descriptor base class for parameters of instantaneous unit hydrograph functions
|
|
101
|
+
which can be determined automatically."""
|
|
102
|
+
|
|
103
|
+
def __set__(self, obj: IUH, value: float) -> None:
|
|
104
|
+
value = self._convert_type(value)
|
|
105
|
+
setattr(obj, self._name, value)
|
|
106
|
+
|
|
107
|
+
def __delete__(self, obj: IUH) -> None:
|
|
108
|
+
setattr(obj, self._name, None)
|
|
109
|
+
|
|
110
|
+
|
|
111
|
+
class MetaIUH(type):
|
|
112
|
+
"""Metaclass for class |IUH|.
|
|
113
|
+
|
|
114
|
+
For storing |PrimaryParameterIUH| and |SecondaryParameterIUH| in separate
|
|
115
|
+
dictionaries.
|
|
116
|
+
"""
|
|
117
|
+
|
|
118
|
+
def __new__(
|
|
119
|
+
mcs, name: str, parents: tuple[type[Any]], dict_: dict[str, Any]
|
|
120
|
+
) -> MetaIUH:
|
|
121
|
+
primary_parameters = {}
|
|
122
|
+
secondary_parameters = {}
|
|
123
|
+
for key, value in dict_.items():
|
|
124
|
+
if isinstance(value, PrimaryParameterIUH):
|
|
125
|
+
primary_parameters[key] = value
|
|
126
|
+
elif isinstance(value, SecondaryParameterIUH):
|
|
127
|
+
secondary_parameters[key] = value
|
|
128
|
+
dict_["_PRIMARY_PARAMETERS"] = primary_parameters
|
|
129
|
+
dict_["_SECONDARY_PARAMETERS"] = secondary_parameters
|
|
130
|
+
return type.__new__(mcs, name, parents, dict_)
|
|
131
|
+
|
|
132
|
+
|
|
133
|
+
class IUH(metaclass=MetaIUH):
|
|
134
|
+
"""Base class for instantaneous unit hydrograph function objects.
|
|
135
|
+
|
|
136
|
+
See class |TranslationDiffusionEquation| for explanations and application examples.
|
|
137
|
+
|
|
138
|
+
For developers: The string representation does also work for parameter-free |IUH|
|
|
139
|
+
subclasses:
|
|
140
|
+
|
|
141
|
+
>>> from hydpy.auxs.iuhtools import IUH
|
|
142
|
+
>>> class Test(IUH):
|
|
143
|
+
... __call__ = None
|
|
144
|
+
... calc_secondary_parameters = None
|
|
145
|
+
>>> Test()
|
|
146
|
+
Test()
|
|
147
|
+
"""
|
|
148
|
+
|
|
149
|
+
ma: armatools.MA
|
|
150
|
+
"""Moving Average model"""
|
|
151
|
+
arma: armatools.ARMA
|
|
152
|
+
"""Autoregressive-Moving Average model."""
|
|
153
|
+
dt_response: float = 1e-2
|
|
154
|
+
"""Relative stepsize for plotting and analyzing iuh functions."""
|
|
155
|
+
smallest_response: float = 1e-9
|
|
156
|
+
"""Smallest value taken into account for plotting and analyzing iuh functions."""
|
|
157
|
+
|
|
158
|
+
# Overwritten by metaclass:
|
|
159
|
+
_PRIMARY_PARAMETERS: dict[str, PrimaryParameterIUH] = {}
|
|
160
|
+
_SECONDARY_PARAMETERS: dict[str, SecondaryParameterIUH] = {}
|
|
161
|
+
|
|
162
|
+
def __init__(self, **kwargs: float) -> None:
|
|
163
|
+
self.ma = armatools.MA(self)
|
|
164
|
+
self.arma = armatools.ARMA(ma_model=self.ma)
|
|
165
|
+
if kwargs:
|
|
166
|
+
self.set_primary_parameters(**kwargs)
|
|
167
|
+
|
|
168
|
+
@abc.abstractmethod
|
|
169
|
+
def __call__(self, t: float) -> float:
|
|
170
|
+
"""Must be implemented by the concrete |IUH| subclass."""
|
|
171
|
+
|
|
172
|
+
def set_primary_parameters(self, **kwargs: float) -> None:
|
|
173
|
+
"""Set all primary parameters at once."""
|
|
174
|
+
given = sorted(kwargs.keys())
|
|
175
|
+
required = sorted(self._PRIMARY_PARAMETERS)
|
|
176
|
+
if given == required:
|
|
177
|
+
for key, value in kwargs.items():
|
|
178
|
+
setattr(self, key, value)
|
|
179
|
+
else:
|
|
180
|
+
raise ValueError(
|
|
181
|
+
f"When passing primary parameter values as initialization arguments of "
|
|
182
|
+
f"the instantaneous unit hydrograph class `{type(self).__name__}`, or "
|
|
183
|
+
f"when using method `set_primary_parameters`, one has to to define all "
|
|
184
|
+
f"values at once via keyword arguments. But instead of the primary "
|
|
185
|
+
f"parameter names `{objecttools.enumeration(required)}` the following "
|
|
186
|
+
f"keywords were given: {objecttools.enumeration(given)}."
|
|
187
|
+
)
|
|
188
|
+
|
|
189
|
+
@property
|
|
190
|
+
def primary_parameters_complete(self) -> bool:
|
|
191
|
+
"""True/False flag that indicates whether the values of all primary parameters
|
|
192
|
+
are defined or not."""
|
|
193
|
+
for primpar in self._PRIMARY_PARAMETERS.values():
|
|
194
|
+
if getattr(self, f"_{primpar.name}", None) is None:
|
|
195
|
+
return False
|
|
196
|
+
return True
|
|
197
|
+
|
|
198
|
+
@abc.abstractmethod
|
|
199
|
+
def calc_secondary_parameters(self) -> None:
|
|
200
|
+
"""Must be implemented by the concrete |IUH| subclass."""
|
|
201
|
+
|
|
202
|
+
def update(self) -> None:
|
|
203
|
+
"""Delete the coefficients of the pure MA model and also all MA and AR
|
|
204
|
+
coefficients of the ARMA model. Also calculate or delete the values of all
|
|
205
|
+
secondary iuh parameters, depending on the completeness of the values of the
|
|
206
|
+
primary parameters.
|
|
207
|
+
"""
|
|
208
|
+
del self.ma.coefs
|
|
209
|
+
del self.arma.ma_coefs
|
|
210
|
+
del self.arma.ar_coefs
|
|
211
|
+
if self.primary_parameters_complete:
|
|
212
|
+
self.calc_secondary_parameters()
|
|
213
|
+
else:
|
|
214
|
+
for secpar in self._SECONDARY_PARAMETERS.values():
|
|
215
|
+
delattr(self, secpar.name)
|
|
216
|
+
|
|
217
|
+
@property
|
|
218
|
+
def delay_response_series(self) -> tuple[VectorFloat, VectorFloat]:
|
|
219
|
+
"""A tuple of two numpy arrays, which hold the time delays and the associated
|
|
220
|
+
iuh values respectively."""
|
|
221
|
+
delays = []
|
|
222
|
+
responses = []
|
|
223
|
+
sum_responses = 0.0
|
|
224
|
+
for t in itertools.count(self.dt_response / 2.0, self.dt_response):
|
|
225
|
+
delays.append(t)
|
|
226
|
+
response = self(t)
|
|
227
|
+
responses.append(response)
|
|
228
|
+
sum_responses += self.dt_response * response
|
|
229
|
+
if (sum_responses > 0.9) and (response < self.smallest_response):
|
|
230
|
+
break
|
|
231
|
+
return numpy.array(delays), numpy.array(responses)
|
|
232
|
+
|
|
233
|
+
def plot(self, threshold: float | None = None, **kwargs) -> None:
|
|
234
|
+
"""Plot the instanteneous unit hydrograph.
|
|
235
|
+
|
|
236
|
+
The optional argument allows for defining a threshold of the cumulative sum of
|
|
237
|
+
the hydrograph, used to adjust the largest value of the x-axis. It must be a
|
|
238
|
+
value between zero and one.
|
|
239
|
+
"""
|
|
240
|
+
delays, responses = self.delay_response_series
|
|
241
|
+
pyplot.plot(delays, responses, **kwargs)
|
|
242
|
+
pyplot.xlabel("time")
|
|
243
|
+
pyplot.ylabel("response")
|
|
244
|
+
if threshold is not None:
|
|
245
|
+
threshold = numpy.clip(threshold, 0.0, 1.0)
|
|
246
|
+
cumsum = numpy.cumsum(responses)
|
|
247
|
+
idx = numpy.where(cumsum >= threshold * cumsum[-1])[0][0]
|
|
248
|
+
pyplot.xlim(0.0, delays[idx])
|
|
249
|
+
|
|
250
|
+
@property
|
|
251
|
+
def moment1(self) -> float:
|
|
252
|
+
"""The first time delay weighted statistical moment of the instantaneous unit
|
|
253
|
+
hydrograph."""
|
|
254
|
+
delays, response = self.delay_response_series
|
|
255
|
+
return statstools.calc_mean_time(delays, response)
|
|
256
|
+
|
|
257
|
+
@property
|
|
258
|
+
def moment2(self) -> float:
|
|
259
|
+
"""The second time delay weighted statistical momens of the instantaneous unit
|
|
260
|
+
hydrograph."""
|
|
261
|
+
moment1 = self.moment1
|
|
262
|
+
delays, response = self.delay_response_series
|
|
263
|
+
return statstools.calc_mean_time_deviation(delays, response, moment1)
|
|
264
|
+
|
|
265
|
+
@property
|
|
266
|
+
def moments(self) -> tuple[float, float]:
|
|
267
|
+
"""The first two time delay weighted statistical moments of the instantaneous
|
|
268
|
+
unit hydrograph."""
|
|
269
|
+
return self.moment1, self.moment2
|
|
270
|
+
|
|
271
|
+
def __repr__(self) -> str:
|
|
272
|
+
parts = [type(self).__name__, "("]
|
|
273
|
+
for name, primpar in sorted(self._PRIMARY_PARAMETERS.items()):
|
|
274
|
+
value = primpar.__get__(self)
|
|
275
|
+
if value is not None:
|
|
276
|
+
parts.extend([name, "=", objecttools.repr_(value), ", "])
|
|
277
|
+
if parts[-1] == ", ":
|
|
278
|
+
parts[-1] = ")"
|
|
279
|
+
else:
|
|
280
|
+
parts.append(")")
|
|
281
|
+
return "".join(parts)
|
|
282
|
+
|
|
283
|
+
|
|
284
|
+
class TranslationDiffusionEquation(IUH):
|
|
285
|
+
"""An instantaneous unit hydrograph based on the `translation diffusion equation`.
|
|
286
|
+
|
|
287
|
+
The equation used is a linear approximation of the Saint-Venant
|
|
288
|
+
equations for channel routing:
|
|
289
|
+
|
|
290
|
+
:math:`h(t) = \\frac{a}{t \\cdot \\sqrt{\\pi \\cdot t}} \\cdot
|
|
291
|
+
e^{-t \\cdot (a/t-b)^2}`
|
|
292
|
+
|
|
293
|
+
with:
|
|
294
|
+
:math:`a = \\frac{x}{2 \\cdot \\sqrt{d}}`
|
|
295
|
+
|
|
296
|
+
:math:`b = \\frac{u}{2 \\cdot \\sqrt{d}}`
|
|
297
|
+
|
|
298
|
+
There are three primary parameters, |TranslationDiffusionEquation.u|,
|
|
299
|
+
|TranslationDiffusionEquation.d|, and |TranslationDiffusionEquation.x|, whichs
|
|
300
|
+
values need to be defined by the user:
|
|
301
|
+
|
|
302
|
+
>>> from hydpy import TranslationDiffusionEquation
|
|
303
|
+
>>> tde = TranslationDiffusionEquation(u=5.0, d=15.0, x=50.0)
|
|
304
|
+
>>> tde
|
|
305
|
+
TranslationDiffusionEquation(d=15.0, u=5.0, x=50.0)
|
|
306
|
+
|
|
307
|
+
The values of both secondary parameters are determined automatically:
|
|
308
|
+
|
|
309
|
+
>>> from hydpy import round_
|
|
310
|
+
>>> round_((tde.a, tde.b))
|
|
311
|
+
6.454972, 0.645497
|
|
312
|
+
|
|
313
|
+
The function can principally be evaluated for time delays larger zero, but not for
|
|
314
|
+
zero time delay, which can cause trouble when applying numerical integration
|
|
315
|
+
algorithms. This is why we clip the given time delay to minimum value of 1e-10
|
|
316
|
+
internally. In most cases (like the following), the returned result should be
|
|
317
|
+
workable for integration algorithms:
|
|
318
|
+
|
|
319
|
+
>>> round_(tde([0.0, 5.0, 10.0, 15.0, 20.0]))
|
|
320
|
+
0.0, 0.040559, 0.115165, 0.031303, 0.00507
|
|
321
|
+
>>> round_([tde(value) for value in [0.0, 5.0, 10.0, 15.0, 20.0]])
|
|
322
|
+
0.0, 0.040559, 0.115165, 0.031303, 0.00507
|
|
323
|
+
|
|
324
|
+
The first delay weighted central moment of the translation diffusion equation
|
|
325
|
+
corresponds to the time lag (`x`/`u`), the second one to wave diffusion:
|
|
326
|
+
|
|
327
|
+
>>> round_(tde.moments)
|
|
328
|
+
10.0, 3.464101
|
|
329
|
+
|
|
330
|
+
Class |TranslationDiffusionEquation| implements its own property `moment1` (used in
|
|
331
|
+
the example above), which is computationally more efficient and robust than the one
|
|
332
|
+
of its base class |IUH|. But both normally, both should return very similar values:
|
|
333
|
+
|
|
334
|
+
>>> from hydpy.auxs.iuhtools import IUH
|
|
335
|
+
>>> round_(IUH.moment1.fget(tde))
|
|
336
|
+
10.0
|
|
337
|
+
|
|
338
|
+
|
|
339
|
+
You can also plot the graph corresponding to the actual parameterization:
|
|
340
|
+
|
|
341
|
+
>>> tde.plot(threshold=0.9)
|
|
342
|
+
|
|
343
|
+
.. testsetup::
|
|
344
|
+
|
|
345
|
+
>>> from matplotlib import pyplot
|
|
346
|
+
>>> pyplot.close()
|
|
347
|
+
|
|
348
|
+
All instances of the subclasses of |IUH| provide a pure Moving Average and an
|
|
349
|
+
Autoregressive-Moving Average approximation to the dt standard impulse of the
|
|
350
|
+
instantaneous unit hydrograph function. In the given example, the MA approximation
|
|
351
|
+
involves 57 coefficients, and the ARMA approximation invoves 17 coefficients:
|
|
352
|
+
|
|
353
|
+
>>> tde.ma.order
|
|
354
|
+
57
|
|
355
|
+
>>> tde.arma.order
|
|
356
|
+
(3, 14)
|
|
357
|
+
|
|
358
|
+
The diffusion of the MA model deviates from the iuh function due to aggregation.
|
|
359
|
+
For the ARMA model, there is also a slight deviation in time delay, as the ARMA
|
|
360
|
+
model itself is only a approximation of the MA model:
|
|
361
|
+
|
|
362
|
+
>>> round_(tde.ma.moments)
|
|
363
|
+
10.0, 3.488074
|
|
364
|
+
>>> round_(tde.arma.moments)
|
|
365
|
+
10.000091, 3.488377
|
|
366
|
+
|
|
367
|
+
For further information on using MA and ARMA models, read the documentation on
|
|
368
|
+
module |armatools|.
|
|
369
|
+
|
|
370
|
+
Changing a primary parameter results in an updating of the secondary parameters as
|
|
371
|
+
well as the MA and the ARMA model:
|
|
372
|
+
|
|
373
|
+
>>> tde.x = 5.
|
|
374
|
+
>>> round_((tde.a, tde.b))
|
|
375
|
+
0.645497, 0.645497
|
|
376
|
+
>>> tde.ma.order
|
|
377
|
+
37
|
|
378
|
+
>>> tde.arma.order
|
|
379
|
+
(4, 5)
|
|
380
|
+
|
|
381
|
+
As long as the primary parameter values are incomplete, no secondary parameter
|
|
382
|
+
values are available:
|
|
383
|
+
|
|
384
|
+
>>> del tde.x
|
|
385
|
+
>>> round_((tde.a, tde.b))
|
|
386
|
+
None, None
|
|
387
|
+
|
|
388
|
+
Suitable type conversions are performed when new parameter values are set:
|
|
389
|
+
|
|
390
|
+
>>> tde.x = "1."
|
|
391
|
+
>>> tde.x
|
|
392
|
+
1.0
|
|
393
|
+
|
|
394
|
+
It a new value cannot be converted, an error is raised:
|
|
395
|
+
|
|
396
|
+
>>> tde.x = "a"
|
|
397
|
+
Traceback (most recent call last):
|
|
398
|
+
...
|
|
399
|
+
TypeError: The value `a` of type `str` could not be converted to type `float` of \
|
|
400
|
+
the instantaneous unit hydrograph parameter `x`.
|
|
401
|
+
|
|
402
|
+
When passing parameter values as initialization arguments or when using method
|
|
403
|
+
`set_primary_parameters`, tests for completeness are performed:
|
|
404
|
+
|
|
405
|
+
>>> TranslationDiffusionEquation(u=5.0, d=15.0)
|
|
406
|
+
Traceback (most recent call last):
|
|
407
|
+
...
|
|
408
|
+
ValueError: When passing primary parameter values as initialization arguments of \
|
|
409
|
+
the instantaneous unit hydrograph class `TranslationDiffusionEquation`, or when using \
|
|
410
|
+
method `set_primary_parameters`, one has to to define all values at once via keyword \
|
|
411
|
+
arguments. But instead of the primary parameter names `d, u, and x` the following \
|
|
412
|
+
keywords were given: d and u.
|
|
413
|
+
"""
|
|
414
|
+
|
|
415
|
+
u = PrimaryParameterIUH("u", doc="Wave velocity [L/T].")
|
|
416
|
+
d = PrimaryParameterIUH("d", doc="Diffusion coefficient [L²/T].")
|
|
417
|
+
x = PrimaryParameterIUH("x", doc="Routing distance [L].")
|
|
418
|
+
a = SecondaryParameterIUH("a", doc="Distance related coefficient.")
|
|
419
|
+
_a: float # used for speeding up numerical integration
|
|
420
|
+
b = SecondaryParameterIUH("b", doc="Velocity related coefficient.")
|
|
421
|
+
_b: float # used for speeding up numerical integration
|
|
422
|
+
|
|
423
|
+
def calc_secondary_parameters(self) -> None:
|
|
424
|
+
"""Determine the values of the secondary parameters
|
|
425
|
+
|TranslationDiffusionEquation.a| and |TranslationDiffusionEquation.b|.
|
|
426
|
+
"""
|
|
427
|
+
self.a = self.x / (2.0 * self.d**0.5)
|
|
428
|
+
self.b = self.u / (2.0 * self.d**0.5)
|
|
429
|
+
|
|
430
|
+
@overload
|
|
431
|
+
def __call__(self, t: float) -> float: ...
|
|
432
|
+
|
|
433
|
+
@overload
|
|
434
|
+
def __call__(self, t: VectorFloat) -> VectorFloat: ...
|
|
435
|
+
|
|
436
|
+
def __call__(self, t: float | VectorFloat) -> float | VectorFloat:
|
|
437
|
+
# float-handling optimised for fast numerical integration
|
|
438
|
+
if isinstance(t, float):
|
|
439
|
+
if t < 1e-10: # pylint: disable=consider-using-max-builtin
|
|
440
|
+
t = 1e-10
|
|
441
|
+
else:
|
|
442
|
+
t = numpy.clip(t, 1e-10, numpy.inf)
|
|
443
|
+
return (
|
|
444
|
+
self._a
|
|
445
|
+
/ (t * (numpy.pi * t) ** 0.5)
|
|
446
|
+
* numpy.e ** (-t * (self._a / t - self._b) ** 2)
|
|
447
|
+
)
|
|
448
|
+
|
|
449
|
+
@property
|
|
450
|
+
def moment1(self) -> float:
|
|
451
|
+
"""The first time delay weighted statistical moment of the translation
|
|
452
|
+
diffusion equation."""
|
|
453
|
+
return self.x / self.u
|
|
454
|
+
|
|
455
|
+
|
|
456
|
+
class LinearStorageCascade(IUH):
|
|
457
|
+
r"""An instantaneous unit hydrograph based on the `linear storage cascade`.
|
|
458
|
+
|
|
459
|
+
The equation involves the gamma function, allowing for a fractional number of
|
|
460
|
+
storages:
|
|
461
|
+
|
|
462
|
+
:math:`h(t) = c \cdot (t/k)^{n-1} \cdot e^{-t/k}`
|
|
463
|
+
|
|
464
|
+
with:
|
|
465
|
+
:math:`c = \frac{1}{k \cdot \gamma(n)}`
|
|
466
|
+
|
|
467
|
+
After defining the values of the two primary parameters |LinearStorageCascade.n|
|
|
468
|
+
and |LinearStorageCascade.k|, the function object can be applied:
|
|
469
|
+
|
|
470
|
+
>>> from hydpy import LinearStorageCascade
|
|
471
|
+
>>> lsc = LinearStorageCascade(n=2.5, k=2.0)
|
|
472
|
+
>>> from hydpy import round_
|
|
473
|
+
>>> round_(lsc.c)
|
|
474
|
+
0.376126
|
|
475
|
+
>>> round_(lsc([0.0, 5.0, 10.0, 15.0, 20.0]))
|
|
476
|
+
0.0, 0.122042, 0.028335, 0.004273, 0.00054
|
|
477
|
+
>>> round_([lsc(value) for value in [0.0, 5.0, 10.0, 15.0, 20.0]])
|
|
478
|
+
0.0, 0.122042, 0.028335, 0.004273, 0.00054
|
|
479
|
+
|
|
480
|
+
Note that we do not use the above equation directly. Instead, we apply a
|
|
481
|
+
logarithmic transformation, which allows defining extremely high values for
|
|
482
|
+
parameter |LinearStorageCascade.n|, resulting in spiky response functions:
|
|
483
|
+
|
|
484
|
+
>>> round_(LinearStorageCascade(n=10, k=1.0/10)(1.0))
|
|
485
|
+
1.2511
|
|
486
|
+
>>> round_(LinearStorageCascade(n=10000, k=1.0/10000)(1.0))
|
|
487
|
+
39.893896
|
|
488
|
+
|
|
489
|
+
>>> round_(LinearStorageCascade(n=10, k=1.0/10)([0.9, 1.0, 1.1]))
|
|
490
|
+
1.317556, 1.2511, 1.085255
|
|
491
|
+
>>> round_(LinearStorageCascade(n=10000, k=1.0/10000)([0.9, 1.0, 1.1]))
|
|
492
|
+
0.0, 39.893896, 0.0
|
|
493
|
+
"""
|
|
494
|
+
|
|
495
|
+
n = PrimaryParameterIUH("n", doc="Number of linear storages [-].")
|
|
496
|
+
_n: float # used for speeding up numerical integration
|
|
497
|
+
k = PrimaryParameterIUH(
|
|
498
|
+
"k", doc="Time of concentration of each individual storage [T]."
|
|
499
|
+
)
|
|
500
|
+
_k: float # used for speeding up numerical integration
|
|
501
|
+
c = SecondaryParameterIUH("c", doc="Proportionality factor.")
|
|
502
|
+
log_c = SecondaryParameterIUH("log_c", doc="Logarithmic value of `c`.")
|
|
503
|
+
_log_c: float # used for speeding up numerical integration
|
|
504
|
+
log_k = SecondaryParameterIUH("log_k", doc="Logarithmic value of `k`.") #
|
|
505
|
+
_log_k: float # used for speeding up numerical integration
|
|
506
|
+
|
|
507
|
+
def calc_secondary_parameters(self) -> None:
|
|
508
|
+
"""Determine the values of the secondary parameters |LinearStorageCascade.c|,
|
|
509
|
+
|LinearStorageCascade.log_c|, and |LinearStorageCascade.log_k|."""
|
|
510
|
+
self.c = 1.0 / (self.k * special.gamma(self.n))
|
|
511
|
+
self.log_c = -numpy.log(self.k) - special.gammaln(self.n)
|
|
512
|
+
self.log_k = numpy.log(self.k)
|
|
513
|
+
|
|
514
|
+
@overload
|
|
515
|
+
def __call__(self, t: float) -> float: ...
|
|
516
|
+
|
|
517
|
+
@overload
|
|
518
|
+
def __call__(self, t: VectorFloat) -> VectorFloat: ...
|
|
519
|
+
|
|
520
|
+
def __call__(self, t: float | VectorFloat) -> float | VectorFloat:
|
|
521
|
+
# float-handling optimised for fast numerical integration
|
|
522
|
+
if isinstance(t, float):
|
|
523
|
+
if t == 0.0:
|
|
524
|
+
return 0.0
|
|
525
|
+
return numpy.e ** (
|
|
526
|
+
self._log_c
|
|
527
|
+
+ (self._n - 1.0) * (math.log(t) - self._log_k)
|
|
528
|
+
- t / self._k
|
|
529
|
+
)
|
|
530
|
+
t = numpy.asarray(t)
|
|
531
|
+
values = numpy.zeros(t.shape, dtype=config.NP_FLOAT)
|
|
532
|
+
idxs = t > 0.0
|
|
533
|
+
t = t[idxs]
|
|
534
|
+
values[idxs] = numpy.exp(
|
|
535
|
+
self._log_c + (self._n - 1.0) * (numpy.log(t) - self._log_k) - t / self.k
|
|
536
|
+
)
|
|
537
|
+
return values
|
|
538
|
+
|
|
539
|
+
@property
|
|
540
|
+
def moment1(self) -> float:
|
|
541
|
+
"""The first time delay weighted statistical moment of the linear storage
|
|
542
|
+
cascade."""
|
|
543
|
+
return self.k * self.n
|