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,156 @@
|
|
|
1
|
+
|
|
2
|
+
.. _how_to_read_the_reference_manual:
|
|
3
|
+
|
|
4
|
+
How to read the Reference Manual
|
|
5
|
+
================================
|
|
6
|
+
|
|
7
|
+
When developing HydPy, we prefer flexibility over simplicity, and when writing the
|
|
8
|
+
:ref:`reference_manual`, we prefer transparency over graphicness. In both cases, we
|
|
9
|
+
follow some software standards not regularly used within the hydrological community.
|
|
10
|
+
Therefore, it may take some time before you profit from the full strengths of HydPy.
|
|
11
|
+
This section offers some guides to ease navigation through the :ref:`reference_manual`
|
|
12
|
+
and use its numerous Python code examples to understand the implemented models and
|
|
13
|
+
improve your workflows.
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
.. _integration_tests:
|
|
17
|
+
|
|
18
|
+
Integration Tests
|
|
19
|
+
_________________
|
|
20
|
+
|
|
21
|
+
Nowdadays, most software developers test their basic source code via other
|
|
22
|
+
source code. Writing and maintaining this additional code is much work,
|
|
23
|
+
but one can easily automatise its execution. Hence, one profits from
|
|
24
|
+
this strategy at the latest when a software project becomes too large for
|
|
25
|
+
repeated manual testing.
|
|
26
|
+
|
|
27
|
+
However, for reliable automatic testing, one needs to be sure that the
|
|
28
|
+
test code covers the different vital aspects of the code base thoroughly
|
|
29
|
+
enough. One common strategy is to build two test suites, one including the
|
|
30
|
+
so-called unit tests and the other one the so-called integration tests.
|
|
31
|
+
Unit tests focus on specific software functionalities and often try to
|
|
32
|
+
cover all possible cases. They lay the ground for software products that
|
|
33
|
+
yield correct results even under rare circumstances. Integration tests, on the
|
|
34
|
+
other hand, evaluate the interplay of different functionalities. Due to
|
|
35
|
+
increased complexity, they do not cover all possible cases but strive
|
|
36
|
+
to show that we get correct results for some relevant anticipated situations.
|
|
37
|
+
These "situations" are often workflows describing how we are expecting
|
|
38
|
+
users to work with the software. Therefore, well-written integration tests
|
|
39
|
+
do not serve for testing only, but can be instructive for new developers
|
|
40
|
+
and sometimes even for users.
|
|
41
|
+
|
|
42
|
+
The documentation of *HydPy* follows the approach to embed all performed
|
|
43
|
+
unit and integration tests. This very transparent approach allows the user
|
|
44
|
+
to read and quickly repeat the tests, and thereby to learn to use *HydPy*
|
|
45
|
+
correctly.
|
|
46
|
+
|
|
47
|
+
When speaking of integration tests, we often mean tests showing that the
|
|
48
|
+
individual components of a hydrological model are combined correctly, so
|
|
49
|
+
that the model can perform rational calculations. Like *HydPy* standardises
|
|
50
|
+
model implementation, it suggests a certain structure for such tests.
|
|
51
|
+
|
|
52
|
+
We use the integration test on the application model |lland_dd| as an
|
|
53
|
+
example. After some "usual" introductory remarks, we start with the
|
|
54
|
+
:ref:`lland_dd_integration_tests` section and prepare some general settings.
|
|
55
|
+
As we want our model to perform "real" simulations, we first define a
|
|
56
|
+
simulation period and step size via the |Timegrids| object available in
|
|
57
|
+
module |pub|.
|
|
58
|
+
|
|
59
|
+
Next, we prepare an object of the respective |Model| subclass (here,
|
|
60
|
+
|lland_dd.Model| of |lland_dd|) as well as an |Element| and a |Node|
|
|
61
|
+
object. Through connecting these objects like in "real" projects, we check
|
|
62
|
+
that |lland_dd| does not only calculate the correct outflow but passes it
|
|
63
|
+
correctly to the downstream node (und thus potentially to other models
|
|
64
|
+
downstream). For routing models as |kinw_williams|, we need to define
|
|
65
|
+
additional upstream nodes, to make sure the model also receives its inflow
|
|
66
|
+
correctly.
|
|
67
|
+
|
|
68
|
+
Eventually, we define some control parameters relevant for all integration
|
|
69
|
+
test examples. For |lland_dd|, we decide to set parameter
|
|
70
|
+
|lland_control.NHRU| to one to focus only on one land-use type at a time.
|
|
71
|
+
|
|
72
|
+
The last general step is to initialise an |IntegrationTest| object,
|
|
73
|
+
which we use later for executing the individual integration test runs.
|
|
74
|
+
Behind the scenes, our test object prepares an |HydPy| object and uses
|
|
75
|
+
it very similar like we would do in a "real" *HydPy* project.
|
|
76
|
+
|
|
77
|
+
In the first example (:ref:`lland_dd_acker_summer`), we decide to test
|
|
78
|
+
|lland_dd| for the land-use type |lland_constants.ACKER| and set the
|
|
79
|
+
land use parameter |lland_control.Lnk| accordingly. After that, we
|
|
80
|
+
prepare all remaining control parameters. We can define the parameter
|
|
81
|
+
values as we would do within the control files of "real" *HydPy* projects.
|
|
82
|
+
|
|
83
|
+
Next, we define the initial conditions. Principally, we could pass them
|
|
84
|
+
to the relevant state sequences directly, as we would do within the
|
|
85
|
+
condition files of a "real" *HydPy* project. But then we need to reset
|
|
86
|
+
them after each integration test example (each simulation run changes the
|
|
87
|
+
model states, and each subsequent run starts with the lastly calculated
|
|
88
|
+
states by default). To avoid additional resetting work, class
|
|
89
|
+
|IntegrationTest| offers the |Test.inits| property. We pass pairs of
|
|
90
|
+
|StateSequence| objects and initial values, which our test object memorises.
|
|
91
|
+
Now it will reset each given state to the corresponding initial value
|
|
92
|
+
before each test run. Note that |Test.inits| also accepts |LogSequence|
|
|
93
|
+
objects (see for example the documentation on application model |hland_96|,
|
|
94
|
+
in which we define a single value for the unit hydrograph memory sequence
|
|
95
|
+
|rconc_logs.QUH|).
|
|
96
|
+
|
|
97
|
+
Finally, we define all model input series. |lland_dd| receives external
|
|
98
|
+
meteorological input only, which we make available via the |IOSequence.series|
|
|
99
|
+
property of the relevant |InputSequence| objects (here we pass hard-coded
|
|
100
|
+
values to, for example, the precipitation sequence |lland_inputs.Nied|).
|
|
101
|
+
Routing models as |kinw_williams| usually do not receive external input
|
|
102
|
+
but inflow from upstream models. More concretely, they pick data from the
|
|
103
|
+
|Sim| sequence(s) of their inlet |Node| object(s) (in the documentation on
|
|
104
|
+
|kinw_williams|, we calculate a design flood-wave on-the-fly and assign it
|
|
105
|
+
the simulation sequences of two inlet nodes). In a "real" *HydPy* project,
|
|
106
|
+
we usually would not provide any time-series data via Python source code
|
|
107
|
+
but use more conventional file formats like NetCDF-CF (see |netcdftools|).
|
|
108
|
+
|
|
109
|
+
After all these preparations, we let our |IntegrationTest| object execute
|
|
110
|
+
the first test example. It (re)sets the initial conditions, calls the
|
|
111
|
+
|HydPy.simulate| method and tabulates the original data of all |InputSequence|
|
|
112
|
+
and upstream |Sim| objects as well the result data of all |FluxSequence|,
|
|
113
|
+
|StateSequence|, and downstream |Sim| objects for each simulation time step.
|
|
114
|
+
This huge table is hard to read but should suffice to follow each relevant
|
|
115
|
+
aspect of the internal model behaviour.
|
|
116
|
+
|
|
117
|
+
Note that the tabulated date also exists hard-coded in the related source
|
|
118
|
+
file for regression testing. Each time when we or, for example, Travis CI
|
|
119
|
+
(see section :ref:`tests_and_documentation`) execute our test suite,
|
|
120
|
+
Python's |doctest| features compare the freshly calculated table with the
|
|
121
|
+
hard-coded old table and report if they are not identical. This sort of
|
|
122
|
+
testing helps users to check if their *HydPy* installation works as
|
|
123
|
+
documented and prevent developers from accidentally changing model features.
|
|
124
|
+
|
|
125
|
+
The tabulated data is comprehensive and partly even redundant. We only
|
|
126
|
+
neglect the results of |AideSequence| objects (that usually handle temporary
|
|
127
|
+
information not relevant for the user) and |LogSequence| objects (that
|
|
128
|
+
typically provide access to data previously handled by other sequences).
|
|
129
|
+
Redundancy is often due to testing both the "internal" and the "external"
|
|
130
|
+
simulation results. See for example the tabulated data of the integration
|
|
131
|
+
tests of |kinw_williams|, where the values of flux sequence
|
|
132
|
+
|kinw_fluxes.QA| and the outlet node sequence `output` are
|
|
133
|
+
identical. |kinw_williams| first calculates the outflow values and then
|
|
134
|
+
passes them to the downstream node. Due to no other models being involved,
|
|
135
|
+
the identity of both series gives us confidence |kinw_williams| integrates
|
|
136
|
+
correctly with all relevant *HydPy* functionalities.
|
|
137
|
+
|
|
138
|
+
When passing a filename to our test object (in example
|
|
139
|
+
:ref:`lland_dd_acker_summer`: "lland_dd_acker_summer") it also creates an
|
|
140
|
+
interactive HTML plot, stores it in the `html_` subpackage, and embeds it
|
|
141
|
+
into the documentation. This mechanism ensures that each graph is always
|
|
142
|
+
in-sync with the considered *HydPy* version. The additional arguments
|
|
143
|
+
`axis1` and `axis2` allow modifying the initial plot configuration.
|
|
144
|
+
|
|
145
|
+
We then continue the :ref:`lland_dd_integration_tests` section with example
|
|
146
|
+
:ref:`lland_dd_wasser`, dealing with one of the water types of |lland_dd|.
|
|
147
|
+
We only need to assign the constant |lland_constants.WASSER| to parameter
|
|
148
|
+
|lland_control.Lnk| and call our test object again to get the next results.
|
|
149
|
+
|
|
150
|
+
As mentioned initially, we try to cover the fundamental aspects of each
|
|
151
|
+
model but cannot expect to check everything. So reading all of its
|
|
152
|
+
integration tests is a good starting point to understand a model. After
|
|
153
|
+
that, you can perform alternative experiments yourself. If you find your
|
|
154
|
+
analysis adds add valuable information to the existing test suite or even
|
|
155
|
+
reveals a shortcoming of the model, please do not hesitate to provide it
|
|
156
|
+
to us (see section :ref:`version_control`).
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
.. _Python Standard Library: https://docs.python.org/library/
|
|
2
|
+
.. _setup.py: https://github.com/hydpy-dev/hydpy/blob/master/setup.py
|
|
3
|
+
.. _NumPy: http://www.numpy.org/
|
|
4
|
+
.. _SciPy: https://www.scipy.org/
|
|
5
|
+
.. _wrapt: https://wrapt.readthedocs.io/en/latest/
|
|
6
|
+
.. _netCDF4 module: http://unidata.github.io/netcdf4-python/
|
|
7
|
+
.. _NetCDF-CF: http://cfconventions.org/Data/cf-conventions/cf-conventions-1.7/cf-conventions.html
|
|
8
|
+
.. _hydpy __init__.py file: https://github.com/hydpy-dev/hydpy/blob/master/hydpy/__init__.py
|
|
9
|
+
.. _coverage library: https://coverage.readthedocs.io
|
|
10
|
+
.. _requirements.txt: https://github.com/hydpy-dev/hydpy/blob/master/requirements.txt
|
|
11
|
+
.. _Sphinx: http://www.sphinx-doc.org/en/master/
|
|
12
|
+
.. _conf.py: https://github.com/hydpy-dev/hydpy/blob/master/hydpy/docs/sphinx/conf.py
|
|
13
|
+
|
|
14
|
+
.. _hydpydependencies:
|
|
15
|
+
|
|
16
|
+
Dependencies
|
|
17
|
+
____________
|
|
18
|
+
|
|
19
|
+
As mentioned at the beginning of the :ref:`developer_guide` section, using
|
|
20
|
+
multiple Python libraries without questioning their maturity and
|
|
21
|
+
long-term stability can be a huge time-saver when compiling Python scripts
|
|
22
|
+
as ad-hoc solutions for complex problems. However, we have to be more
|
|
23
|
+
cautious when including external libraries into our core code. In general,
|
|
24
|
+
we should keep the number of imported libraries low and avoid libraries
|
|
25
|
+
with significant shortcomings or uncertain future support. Otherwise,
|
|
26
|
+
we risk the long-term stability of *HydPy* itself. Whenever reasonable,
|
|
27
|
+
import only packages of the `Python Standard Library`_, or at least
|
|
28
|
+
restrict yourself to reliable, mature and stable site-packages.
|
|
29
|
+
|
|
30
|
+
In the development of *HydPy*, we consider three groups of site-packages:
|
|
31
|
+
**required** dependencies, **optional** dependencies, and dependencies
|
|
32
|
+
only relevant for **development**.
|
|
33
|
+
|
|
34
|
+
"Required dependencies" are site-packages being imported within
|
|
35
|
+
each *HydPy* application by necessity. See the "install_requires"
|
|
36
|
+
argument within the `setup.py`_ file for the current list of required
|
|
37
|
+
dependencies. At the time of writing these are only the highly
|
|
38
|
+
accepted and easily installable site-packages `NumPy`_, `SciPy`_, and
|
|
39
|
+
`wrapt`_, providing essential features not available within the
|
|
40
|
+
`Python Standard Library`_.
|
|
41
|
+
|
|
42
|
+
"Optional dependencies" are site-packages needed for specific *HydPy*
|
|
43
|
+
features only. One good example is the `netCDF4 module`_. The first
|
|
44
|
+
reason for declaring this site-package optional is its limited scope for
|
|
45
|
+
reading and writing `NetCDF-CF`_ time series files. Users can choose other
|
|
46
|
+
file formats as well. The second reason is that its installation is not
|
|
47
|
+
always working smoothly. See the documentation on class |OptionalImport|
|
|
48
|
+
on how to define optional imports.
|
|
49
|
+
|
|
50
|
+
"Development dependencies" are site-packages relevant for framework or
|
|
51
|
+
model developers only. One example is the `coverage library`_, checking
|
|
52
|
+
whether the available tests execute certain source code lines or not. The
|
|
53
|
+
`requirements.txt`_ file lists most development dependencies. Additionally,
|
|
54
|
+
we rely on `Sphinx`_ in conjunction with its extensions listed in `conf.py`_
|
|
55
|
+
for generating the HTML documentation.
|
hydpy/docs/rst/index.rst
ADDED
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
.. _Python: http://www.python.org/
|
|
2
|
+
.. _Cython: http://www.cython.org/
|
|
3
|
+
.. _`Ruhr-University Bochum`: http://www.hydrology.ruhr-uni-bochum.de/index.html.en
|
|
4
|
+
.. _`German Federal Institute of Hydrology`: https://www.bafg.de/EN
|
|
5
|
+
.. _`Björnsen Consulting Engineers`: https://www.bjoernsen.de/en/bjoernsen-consulting-engineers
|
|
6
|
+
.. _`GitHub repository`: https://github.com/hydpy-dev/hydpy
|
|
7
|
+
.. _`GNU Lesser General Public License 3`: https://www.gnu.org/licenses/lgpl-3.0.en.html
|
|
8
|
+
.. _`documentation test`: https://docs.python.org/3.6/library/doctest.html
|
|
9
|
+
.. _`Travis CI`: https://travis-ci.com/hydpy-dev/hydpy/branches
|
|
10
|
+
.. _`AppVeyor`: https://ci.appveyor.com/project/tyralla/hydpy/history
|
|
11
|
+
.. _`example 13`: https://hydpy-dev.github.io/hydpy/master/dam_v001.html#dam-v001-ex13
|
|
12
|
+
.. _Plotly: https://plotly.com/python/
|
|
13
|
+
.. _`GitHub issue`: https://github.com/hydpy-dev/hydpy/issues
|
|
14
|
+
.. _`Pull Request`: https://github.com/pulls
|
|
15
|
+
|
|
16
|
+
.. _HydPy:
|
|
17
|
+
|
|
18
|
+
Introduction
|
|
19
|
+
============
|
|
20
|
+
|
|
21
|
+
*HydPy* is an interactive framework for developing and applying
|
|
22
|
+
different types of hydrological models, originally developed
|
|
23
|
+
at the `Ruhr-University Bochum`_ for specific research purposes.
|
|
24
|
+
Later it was extended on behalf of the `German Federal Institute of
|
|
25
|
+
Hydrology`_ to be applicable in practical applications like runoff
|
|
26
|
+
forecasting in large river basins. Now it is being maintained by
|
|
27
|
+
`Björnsen Consulting Engineers`_.
|
|
28
|
+
|
|
29
|
+
*HydPy* is intended to be a modern open source software, based
|
|
30
|
+
on the programming language `Python`_, commonly used in many scientific
|
|
31
|
+
fields. Through using different well-established `Python`_ libraries
|
|
32
|
+
and design principles, we target high quality and transparency standards.
|
|
33
|
+
To avoid writing model cores (like |lland_dd|) in a more native
|
|
34
|
+
programming language, *HydPy* includes a `Cython`_ based mechanism
|
|
35
|
+
to automatically translate Python code to C code and to compile it.
|
|
36
|
+
|
|
37
|
+
*HydPy* has no graphical user interface. Instead, it is thought to
|
|
38
|
+
be applied by executing Python scripts. These scripts help to increase
|
|
39
|
+
the reproducibility of studies performed with *HydPy* because
|
|
40
|
+
they can be easily shared and repeatedly executed. This approach facilitates
|
|
41
|
+
discussing possible weaknesses of *HydPy* and its implemented
|
|
42
|
+
models and comparing different methodical approaches (e. g. different
|
|
43
|
+
strategies to calibrate model parameters). However, if you are not an
|
|
44
|
+
experienced hydrologist with basic programming skills, you may need
|
|
45
|
+
some help to become acquainted with *HydPy*.
|
|
46
|
+
|
|
47
|
+
We host *HydPy* in a `GitHub repository`_ and everyone
|
|
48
|
+
is allowed to download, modify, and use it. However, when passing the
|
|
49
|
+
(possibly modified) code to third parties, one has to be aware that
|
|
50
|
+
the selected `GNU Lesser General Public License 3`_ cannot be changed
|
|
51
|
+
to a "less open source" license. If you, for example, implement a new
|
|
52
|
+
model into *HydPy*, you can be sure that all possible further
|
|
53
|
+
developments of your model code are still open source and the mentioned
|
|
54
|
+
third parties are allowed to pass this modified source code to you.
|
|
55
|
+
|
|
56
|
+
*HydPy* offers many functionalities to make the implemented
|
|
57
|
+
models as transparent and reliable as possible. For this reason,
|
|
58
|
+
the online documentation is automatically updated for each new
|
|
59
|
+
*HydPy* version and includes different `documentation test`_
|
|
60
|
+
mechanism ensuring that *HydPy* is working as expected and
|
|
61
|
+
that the documentation is up-to-date with it.
|
|
62
|
+
|
|
63
|
+
See for example the documentation of the (very simple) method
|
|
64
|
+
|lland_model.Calc_NKor_V1|. The text describes what the method does
|
|
65
|
+
and what input data it requires. It is comprehensive but, as in common
|
|
66
|
+
documentations, technical reports and scientific articles, could be
|
|
67
|
+
outdated or be wrong in other ways. This is not the case for the
|
|
68
|
+
example calculation shown in the green box. This example is actual
|
|
69
|
+
`Python`_ code that shows how method |lland_model.Calc_NKor_V1| can be
|
|
70
|
+
used and how different input values (for variables |lland_inputs.Nied|
|
|
71
|
+
and |lland_control.KG|) result in different output values (for variable
|
|
72
|
+
|lland_fluxes.NKor|). Each time a new *HydPy* version is pushed
|
|
73
|
+
into the `GitHub repository`_, automatic test routines on `Travis CI`_ and
|
|
74
|
+
`AppVeyor`_ are trigged. The new *HydPy* version is rejected, if the
|
|
75
|
+
actual |lland_model.Calc_NKor_V1| method does not result in the exact
|
|
76
|
+
same output values as given in the last line of the example.
|
|
77
|
+
|
|
78
|
+
Such basic "unit tests" should provide a good basis for discussing the
|
|
79
|
+
proper implementation of certain hydrological processes. But they
|
|
80
|
+
are no proof a complete model is actually working well. Therefore
|
|
81
|
+
*HydPy* also offers some "integration test" functionalities.
|
|
82
|
+
|
|
83
|
+
Each integration test should demonstrate how a certain model could be
|
|
84
|
+
set up meaningfully. Ideally, the model configuration should be varied
|
|
85
|
+
to show different aspects of its functionality. See e.g. `example 13`_
|
|
86
|
+
of the documentation on model |dam_v001|, which discusses the implemented
|
|
87
|
+
flood retention routine. Here, example calculations are performed for a
|
|
88
|
+
period of 20 days, and for each day all input and output values, as well
|
|
89
|
+
as all internal states (e.g. the |dam_states.WaterVolume|), are tabulated.
|
|
90
|
+
Again, `Travis CI`_ checks that all of these values are exactly recalculated
|
|
91
|
+
by each new *HydPy* version. Additionally, the tabulated values are
|
|
92
|
+
shown in a `Plotly`_ plot, which is also updated for each new *HydPy*
|
|
93
|
+
version automatically. You can click on the variables and zoom into some
|
|
94
|
+
details you are actually interested in.
|
|
95
|
+
|
|
96
|
+
If there were some methodical or technical flaws in the retention routine
|
|
97
|
+
of |dam_v001|, you would have good chances to find them when reading the
|
|
98
|
+
documentation critically. You could tell us about your finding via a
|
|
99
|
+
`GitHub issue`_, allowing us or others to read (and at best solve) the
|
|
100
|
+
problem. Or you could try to solve it on your own and offer your solution
|
|
101
|
+
as a `Pull Request`_. You could also add a new test to the documentation
|
|
102
|
+
files to prove that something goes wrong and offer it via a
|
|
103
|
+
`Pull Request`_, which would enable `Travis CI`_ to reject future
|
|
104
|
+
*HydPy* versions that still contain this flaw.
|
|
105
|
+
|
|
106
|
+
We hope to have made clear that the design of *HydPy* focusses
|
|
107
|
+
on open collaboration in order to improve existing and to develop
|
|
108
|
+
better models. The :ref:`developer_guide` section offers more information
|
|
109
|
+
on how to actually participate in the further development of *HydPy*.
|
|
110
|
+
Section :ref:`model_families` lists all models implemented so far.
|
|
111
|
+
Sections :ref:`core` covers the basic functionalities of the
|
|
112
|
+
*HydPy* framework.
|
|
113
|
+
|
|
114
|
+
.. toctree::
|
|
115
|
+
:hidden:
|
|
116
|
+
|
|
117
|
+
installation
|
|
118
|
+
example_projects
|
|
119
|
+
quickstart
|
|
120
|
+
user_guide
|
|
121
|
+
developer_guide
|
|
122
|
+
reference_manual
|
|
123
|
+
Bibliography <zbibliography>
|
|
124
|
+
|
|
125
|
+
|
|
@@ -0,0 +1,155 @@
|
|
|
1
|
+
|
|
2
|
+
.. _Python Package Index: https://pypi.org/project/HydPy/
|
|
3
|
+
.. _Python 3.10, 3.11, 3.12, or 3.13: https://www.python.org/downloads/
|
|
4
|
+
.. _numpy: http://www.numpy.org/
|
|
5
|
+
.. _Kalypso: https://kalypso.bjoernsen.de/index.php?id=382&L=1
|
|
6
|
+
.. _Delft-FEWS: https://oss.deltares.nl/web/delft-fews
|
|
7
|
+
.. _releases: https://github.com/hydpy-dev/hydpy/releases
|
|
8
|
+
.. _PyCharm: https://www.jetbrains.com/pycharm/download/#section=windows
|
|
9
|
+
.. _Anaconda: https://www.anaconda.com/what-is-anaconda/
|
|
10
|
+
.. _IDLE: https://docs.python.org/3/library/idle.html
|
|
11
|
+
.. _Spyder: https://www.spyder-ide.org/
|
|
12
|
+
.. _pip: https://pip.pypa.io/en/stable/
|
|
13
|
+
.. _Virtual Environments: https://docs.python.org/3/tutorial/venv.html
|
|
14
|
+
.. _Python Launcher: https://docs.python.org/3/using/windows.html#launcher
|
|
15
|
+
.. _Windows Compilers page: https://wiki.python.org/moin/WindowsCompilers
|
|
16
|
+
.. _GNU Compiler Collection: https://gcc.gnu.org/
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
.. _installation:
|
|
20
|
+
|
|
21
|
+
Installation
|
|
22
|
+
============
|
|
23
|
+
|
|
24
|
+
HydPy is available on the `Python Package Index`_. With `Python 3.10, 3.11, 3.12, or
|
|
25
|
+
3.13`_ on your computer and having access to the internet, you only have to type::
|
|
26
|
+
|
|
27
|
+
pip install hydpy
|
|
28
|
+
|
|
29
|
+
into your command-line tool to install the latest version of HydPy on your computer.
|
|
30
|
+
`pip` then installs necessary site packages like `numpy`_ on the fly.
|
|
31
|
+
|
|
32
|
+
For 64-bit Windows, the `Python Package Index`_ provides so-called "wheels", which
|
|
33
|
+
include pre-compiled binaries and simplify installing a lot. On Linux systems, you
|
|
34
|
+
have to install "from source" at the moment, as explained below.
|
|
35
|
+
|
|
36
|
+
Starting with version 4.0, HydPy also comes as an installer for Windows, including
|
|
37
|
+
Python itself and all required and optional dependencies. You may find it useful if
|
|
38
|
+
you are new to Python and want to check out HydPy before installing a complete Python
|
|
39
|
+
distribution or if you are afraid to mess up your current Python installation (but then
|
|
40
|
+
you should probably prefer to work in a virtual environment). Additionally, the
|
|
41
|
+
closedness of the installer might be preferable when coupling HydPy to other software
|
|
42
|
+
systems such as `Kalypso`_ or `Delft-FEWS`_. See `releases`_ for the latest version of
|
|
43
|
+
the HydPy installer.
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
Selecting a Python distribution
|
|
47
|
+
--------------------------------
|
|
48
|
+
|
|
49
|
+
Using HydPy requires installing `Python 3.10, 3.11, 3.12, or 3.13`_ first. You should
|
|
50
|
+
favour the latest Python version unless you plan to use other libraries only available
|
|
51
|
+
for earlier versions. Alternatively, consider installing a more comprehensive Python
|
|
52
|
+
distribution like `Anaconda`_, already containing many scientific and mathematical
|
|
53
|
+
tools.
|
|
54
|
+
|
|
55
|
+
Note that these Python distributions do not include the most powerful integrated
|
|
56
|
+
development environments. For simple tasks, the lightweight IDE `IDLE`_ of the
|
|
57
|
+
original Python distribution might be sufficient. `Anaconda`_ also comes with
|
|
58
|
+
`Spyder`_, which helps structure medium-sized projects. On the other hand, external
|
|
59
|
+
IDEs like `PyCharm`_ offer significantly more comfort, so the initial installation and
|
|
60
|
+
configuration effort required should quickly pay for itself.
|
|
61
|
+
|
|
62
|
+
|
|
63
|
+
Selecting a HydPy distribution
|
|
64
|
+
------------------------------
|
|
65
|
+
|
|
66
|
+
If you want to contribute to the development of HydPy or implement new models, please
|
|
67
|
+
see the :ref:`developer_guide` section. If you want to apply HydPy only, you should
|
|
68
|
+
start with a stable version available under `releases`_.
|
|
69
|
+
|
|
70
|
+
You are probably interested in using the latest version of HydPy, which has the highest
|
|
71
|
+
version number. HydPy's version numbers consist of three separate digits. In
|
|
72
|
+
"X.Y.Z.", "X" is the major number. There can be substantial differences between HydPy
|
|
73
|
+
versions with different major numbers, possibly resulting in incompatibility issues
|
|
74
|
+
with interfacing systems. "Y" is the minor revision number, indicating some
|
|
75
|
+
improvements but no potentially problematic changes, e. g. the implementation of
|
|
76
|
+
additional models. "Z" is the revision number, indicating some necessary corrections
|
|
77
|
+
to the framework or its implemented models. You should make sure to select the highest
|
|
78
|
+
revision number available, meaning you should prefer using "X.Y.1" over "X.Y.0".
|
|
79
|
+
|
|
80
|
+
Each release is available in different compressed archives suitable for different
|
|
81
|
+
systems. Currently, we distribute pre-compiled binaries for 64-bit Windows only (see
|
|
82
|
+
above). You have to build binaries yourself for all other operating systems and Python
|
|
83
|
+
versions yourself. Principally, this should be simple, but Windows users might need
|
|
84
|
+
to install the suitable compiler first (see below). Download and uncompress the
|
|
85
|
+
`source code` archive in an arbitrary folder and open the command line interface within
|
|
86
|
+
the uncompressed `hydpy` folder. Then, write the following commands::
|
|
87
|
+
|
|
88
|
+
python prepare_build.py
|
|
89
|
+
python -m build
|
|
90
|
+
python -m pip install hydpy --no-index --find-links dist
|
|
91
|
+
|
|
92
|
+
The first command auto-generates some additional source files. The second command uses
|
|
93
|
+
the original and the autogenerated sources to build a compressed source distribution
|
|
94
|
+
and a wheel distribution in a folder named "dist". The wheel distribution contains the
|
|
95
|
+
content of the source distribution plus pre-compiled binaries for your specific system
|
|
96
|
+
and `Python` version. The third command installs the wheel into the currently active
|
|
97
|
+
site packages folder. After that, you are ready to go.
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
Creating an Environment
|
|
101
|
+
-----------------------
|
|
102
|
+
|
|
103
|
+
Refraining from adding site packages like HydPy into the basic Python installation is
|
|
104
|
+
always advisable. Otherwise, with time, the number of additional packages grows larger
|
|
105
|
+
and larger, and it will not take long until the first incompatibilities emerge.
|
|
106
|
+
|
|
107
|
+
To avoid such problems, the Python community developed many "environment mechanisms".
|
|
108
|
+
An `environment` is a kind of project- or purpose-specific Python subinstallation that
|
|
109
|
+
is, more or less, independent of other `environments`.
|
|
110
|
+
|
|
111
|
+
Integrated development environments (IDEs) provide convenient ways to manage multiple
|
|
112
|
+
environments connected to different projects. But even without a capable IDE, the
|
|
113
|
+
basic steps are straightforward. For example, each Python installation has tools for
|
|
114
|
+
creating and using `Virtual Environments`_.
|
|
115
|
+
|
|
116
|
+
With the `Python Launcher`_ installed, the following command creates a virtual
|
|
117
|
+
environment named `venv_hydpy_5` in your current working directory::
|
|
118
|
+
|
|
119
|
+
py -m venv venv_hydpy_5
|
|
120
|
+
|
|
121
|
+
You can activate this virtual environment on Windows by executing the batch file
|
|
122
|
+
`activate.bat`::
|
|
123
|
+
|
|
124
|
+
venv_hydpy_5\Scripts\activate
|
|
125
|
+
|
|
126
|
+
You can now execute the following command to let `pip`_ install the latest release of
|
|
127
|
+
HydPy 5 into the `venv_hydpy_5` environment::
|
|
128
|
+
|
|
129
|
+
pip install "hydpy < 6"
|
|
130
|
+
|
|
131
|
+
After following these steps, you have an outdated HydPy version on your computer. But
|
|
132
|
+
this does not need to bother you, because you can just as easily install, for example,
|
|
133
|
+
HydPy 6 in a separate environment without the risk of any conflicts::
|
|
134
|
+
|
|
135
|
+
deactivate
|
|
136
|
+
py -m venv venv_hydpy_6
|
|
137
|
+
venv_hydpy6\Scripts\activate
|
|
138
|
+
pip install "hydpy < 7"
|
|
139
|
+
|
|
140
|
+
|
|
141
|
+
Selecting a C Compiler
|
|
142
|
+
----------------------
|
|
143
|
+
|
|
144
|
+
You only need to care about selecting a C compiler if no pre-compiled binaries are
|
|
145
|
+
available for your system or if you want to implement new models into the HydPy
|
|
146
|
+
framework. Also, Linux users should have no trouble, as the `GNU Compiler Collection`_
|
|
147
|
+
is ready for use on standard Linux distributions. Unfortunately, Windows does not
|
|
148
|
+
include compilers by default. Search the `Windows Compilers page`_ to learn how to
|
|
149
|
+
select and install the correct compiler.
|
|
150
|
+
|
|
151
|
+
After installing the required compiler on Windows, you might eventually have to deal
|
|
152
|
+
with the **unable to find vcvarsall.bat** problem. `vcvarsall` is a batch file Python
|
|
153
|
+
needs to control the installed Visual Studio compiler. Find this file on your system
|
|
154
|
+
and set a new system variable pointing to its path. A quick search on the internet
|
|
155
|
+
should provide you with the required information.
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
|
|
2
|
+
.. _LARSIM: http://www.larsim.info/1/the-model/
|
|
3
|
+
|
|
4
|
+
.. _model_families:
|
|
5
|
+
|
|
6
|
+
Model Families
|
|
7
|
+
==============
|
|
8
|
+
|
|
9
|
+
HydPy divides all models into "families" as :ref:`HydPy-L`. Each model family consists
|
|
10
|
+
of one base model (e.g. |lland|) and several application models (e.g. |lland_dd|). The
|
|
11
|
+
base models offer basic features like model parameter classes (e.g.
|
|
12
|
+
|lland_control.KG|), sequence classes (e.g. |lland_fluxes.NKor|) and process equation
|
|
13
|
+
methods (e.g. |lland_model.Calc_NKor_V1|) but cannot perform an actual simulation run.
|
|
14
|
+
This is the task of the application models, which select different parameters,
|
|
15
|
+
sequences, and process equations in a meaningful combination and order.
|
|
16
|
+
|
|
17
|
+
|
|
18
|
+
Unless otherwise stated, you can freely combine all models and apply them with
|
|
19
|
+
arbitrary simulation time steps. It is, for example, possible to simulate "land
|
|
20
|
+
processes" with |hland_96|, "stream processes" with |musk_mct|, and "lake processes"
|
|
21
|
+
with |dam_llake| in either a daily or hourly time step.
|
|
22
|
+
|
|
23
|
+
Base models often offer different versions of a method to calculate the value of the
|
|
24
|
+
same variable. For example, base model |evap| has two methods for estimating reference
|
|
25
|
+
evapotranspiration: |evap_model.Calc_ReferenceEvapotranspiration_V1| and
|
|
26
|
+
|evap_model.Calc_ReferenceEvapotranspiration_V2|. Each application model that wants to
|
|
27
|
+
calculate reference evapotranspiration has to choose. In this case, |evap_ret_fao56|
|
|
28
|
+
selects |evap_model.Calc_ReferenceEvapotranspiration_V1| to follow
|
|
29
|
+
:cite:t:`ref-Allen1998` and |evap_ret_tw2002| selects
|
|
30
|
+
|evap_model.Calc_ReferenceEvapotranspiration_V2| to follow :cite:t:`ref-DVWK`:
|
|
31
|
+
|
|
32
|
+
>>> from hydpy.models.evap_ret_tw2002 import *
|
|
33
|
+
>>> parameterstep("1d")
|
|
34
|
+
>>> assert hasattr(model, "calc_referenceevapotranspiration_v2")
|
|
35
|
+
>>> assert not hasattr(model, "calc_referenceevapotranspiration_v1")
|
|
36
|
+
|
|
37
|
+
For simplicity, the selected method is also accessible without the version suffix (as
|
|
38
|
+
long as the model does not choose multiple versions of the same method, which is a
|
|
39
|
+
HydPy convention only seldom broken by application models):
|
|
40
|
+
|
|
41
|
+
>>> assert hasattr(model, 'calc_referenceevapotranspiration_v2')
|
|
42
|
+
|
|
43
|
+
Methods define their parameter and sequence requirements. Due to choosing
|
|
44
|
+
|evap_model.Calc_ReferenceEvapotranspiration_V2|, application model |evap_ret_tw2002|
|
|
45
|
+
possesses, for example, the flux sequence |evap_fluxes.ReferenceEvapotranspiration|:
|
|
46
|
+
|
|
47
|
+
>>> assert hasattr(model.sequences.fluxes, 'referenceevapotranspiration')
|
|
48
|
+
|
|
49
|
+
Due to this selection mechanism, it is relatively easy to compose new models based on
|
|
50
|
+
existing or alternative methods. However, such compositions are restricted to using
|
|
51
|
+
methods of only one base model or model family. To overcome this limitation, HydPy
|
|
52
|
+
also implements the so-called "submodel concept", which brings another kind of
|
|
53
|
+
flexibility by coupling main models (of one model family) with submodels (of the same
|
|
54
|
+
or another model family). This section describes both the main and the submodels. See
|
|
55
|
+
the :ref:`model_overview` section, which clarifies this distinction more clearly.
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
.. toctree::
|
|
59
|
+
:hidden:
|
|
60
|
+
|
|
61
|
+
HydPy-ARMA
|
|
62
|
+
HydPy-Conv
|
|
63
|
+
HydPy-Exch
|
|
64
|
+
HydPy-Evap
|
|
65
|
+
HydPy-Dam
|
|
66
|
+
HydPy-Dummy
|
|
67
|
+
HydPy-G
|
|
68
|
+
HydPy-GA
|
|
69
|
+
HydPy-H
|
|
70
|
+
HydPy-KinW
|
|
71
|
+
HydPy-L
|
|
72
|
+
HydPy-Meteo
|
|
73
|
+
HydPy-Musk
|
|
74
|
+
HydPy-Rconc
|
|
75
|
+
HydPy-SW1D
|
|
76
|
+
HydPy-Test
|
|
77
|
+
HydPy-W
|
|
78
|
+
HydPy-WHMod
|
|
79
|
+
HydPy-WQ
|