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,643 @@
|
|
|
1
|
+
"""This module implements |property| like classes with similar or additional
|
|
2
|
+
behaviour."""
|
|
3
|
+
|
|
4
|
+
# import...
|
|
5
|
+
# ...from standard-library
|
|
6
|
+
from __future__ import annotations
|
|
7
|
+
import abc
|
|
8
|
+
import inspect
|
|
9
|
+
import types
|
|
10
|
+
|
|
11
|
+
# ...from HydPy
|
|
12
|
+
from hydpy.core import exceptiontools
|
|
13
|
+
from hydpy.core import objecttools
|
|
14
|
+
from hydpy.core.typingtools import *
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class BaseDescriptor:
|
|
18
|
+
"""Base class for defining descriptors."""
|
|
19
|
+
|
|
20
|
+
objtype: type[Any]
|
|
21
|
+
module: types.ModuleType | None
|
|
22
|
+
name: str
|
|
23
|
+
__doc__: str | None
|
|
24
|
+
|
|
25
|
+
def set_doc(self, doc: str | None) -> None:
|
|
26
|
+
"""Assign the given docstring to the property instance and, if possible,
|
|
27
|
+
to the `__test__` dictionary of the module of its owner class."""
|
|
28
|
+
if doc is not None:
|
|
29
|
+
self.__doc__ = doc
|
|
30
|
+
if hasattr(self, "module"):
|
|
31
|
+
ref = f"{self.objtype.__name__}.{self.name}"
|
|
32
|
+
self.module.__dict__["__test__"][ref] = doc
|
|
33
|
+
|
|
34
|
+
def __set_name__(self, objtype: type[Any], name: str) -> None:
|
|
35
|
+
self.objtype = objtype
|
|
36
|
+
self.module = inspect.getmodule(objtype)
|
|
37
|
+
if self.module is not None:
|
|
38
|
+
if not hasattr(self.module, "__test__"):
|
|
39
|
+
self.module.__dict__["__test__"] = {}
|
|
40
|
+
self.name = name
|
|
41
|
+
doc = getattr(self, "__doc__")
|
|
42
|
+
if doc:
|
|
43
|
+
self.set_doc(doc)
|
|
44
|
+
|
|
45
|
+
|
|
46
|
+
class FGet(Protocol[T_co]):
|
|
47
|
+
"""Callback protocol for getter functions."""
|
|
48
|
+
|
|
49
|
+
def __call__(self, __obj: Any) -> T_co: ...
|
|
50
|
+
|
|
51
|
+
|
|
52
|
+
class FSet(Protocol[T_contra]):
|
|
53
|
+
"""Callback protocol for setter functions."""
|
|
54
|
+
|
|
55
|
+
def __call__(self, __obj: Any, __value: T_contra) -> None: ...
|
|
56
|
+
|
|
57
|
+
|
|
58
|
+
class FDel(Protocol):
|
|
59
|
+
"""Callback protocol for deleter functions."""
|
|
60
|
+
|
|
61
|
+
def __call__(self, __obj: Any) -> None: ...
|
|
62
|
+
|
|
63
|
+
|
|
64
|
+
class BaseProperty(Generic[T_contra, T_co], BaseDescriptor):
|
|
65
|
+
"""Abstract base class for deriving classes similar to |property|.
|
|
66
|
+
|
|
67
|
+
|BaseProperty| provides the abstract methods |BaseProperty.call_fget|,
|
|
68
|
+
|BaseProperty.call_fset|, and |BaseProperty.call_fdel|, which are the
|
|
69
|
+
appropriate places to add custom functionalities (e.g. caching). See
|
|
70
|
+
subclass |Property| for an example, which mimics the behaviour of the
|
|
71
|
+
built-in |property| function.
|
|
72
|
+
|
|
73
|
+
|BaseProperty| property uses dummy getter, setter and deleter functions
|
|
74
|
+
to indicate than at an actual getter, setter or deleter function is missing.
|
|
75
|
+
In case they are called due to the wrong implementation of a |BaseProperty|
|
|
76
|
+
subclass, they raise a |RuntimeError|:
|
|
77
|
+
|
|
78
|
+
>>> from hydpy.core.propertytools import BaseProperty
|
|
79
|
+
>>> BaseProperty._fgetdummy(None)
|
|
80
|
+
Traceback (most recent call last):
|
|
81
|
+
...
|
|
82
|
+
RuntimeError
|
|
83
|
+
|
|
84
|
+
>>> BaseProperty._fsetdummy(None, None)
|
|
85
|
+
Traceback (most recent call last):
|
|
86
|
+
...
|
|
87
|
+
RuntimeError
|
|
88
|
+
|
|
89
|
+
>>> BaseProperty._fdeldummy(None)
|
|
90
|
+
Traceback (most recent call last):
|
|
91
|
+
...
|
|
92
|
+
RuntimeError
|
|
93
|
+
"""
|
|
94
|
+
|
|
95
|
+
fget: FGet[T_co]
|
|
96
|
+
fset: FSet[T_contra]
|
|
97
|
+
fdel: FDel
|
|
98
|
+
|
|
99
|
+
@staticmethod
|
|
100
|
+
def _fgetdummy(__obj: Any) -> T_co:
|
|
101
|
+
raise RuntimeError
|
|
102
|
+
|
|
103
|
+
@staticmethod
|
|
104
|
+
def _fsetdummy(__obj: Any, __value: T_contra) -> None:
|
|
105
|
+
raise RuntimeError
|
|
106
|
+
|
|
107
|
+
@staticmethod
|
|
108
|
+
def _fdeldummy(__obj: Any) -> None:
|
|
109
|
+
raise RuntimeError
|
|
110
|
+
|
|
111
|
+
@overload
|
|
112
|
+
def __get__(self, obj: None, objtype: type[Any]) -> Self: ...
|
|
113
|
+
|
|
114
|
+
@overload
|
|
115
|
+
def __get__(self, obj: Any, objtype: type[Any]) -> T_co: ...
|
|
116
|
+
|
|
117
|
+
def __get__(self, obj: Any | None, objtype: type[Any]) -> Self | T_co:
|
|
118
|
+
if obj is None:
|
|
119
|
+
return self
|
|
120
|
+
if self.fget is self._fgetdummy:
|
|
121
|
+
raise AttributeError(
|
|
122
|
+
f"Attribute `{self.name}` of object "
|
|
123
|
+
f"{objecttools.devicephrase(obj)} is not gettable."
|
|
124
|
+
)
|
|
125
|
+
return self.call_fget(obj)
|
|
126
|
+
|
|
127
|
+
def __set__(self, obj: Any, value: T_contra) -> None:
|
|
128
|
+
if self.fset is self._fsetdummy:
|
|
129
|
+
raise AttributeError(
|
|
130
|
+
f"Attribute `{self.name}` of object "
|
|
131
|
+
f"{objecttools.devicephrase(obj)} is not settable."
|
|
132
|
+
)
|
|
133
|
+
self.call_fset(obj, value)
|
|
134
|
+
|
|
135
|
+
def __delete__(self, obj: Any) -> None:
|
|
136
|
+
if self.fdel is self._fdeldummy:
|
|
137
|
+
raise AttributeError(
|
|
138
|
+
f"Attribute `{self.name}` of object "
|
|
139
|
+
f"{objecttools.devicephrase(obj)} is not deletable."
|
|
140
|
+
)
|
|
141
|
+
self.call_fdel(obj)
|
|
142
|
+
|
|
143
|
+
@abc.abstractmethod
|
|
144
|
+
def call_fget(self, obj: Any) -> T_co:
|
|
145
|
+
"""Method for implementing unique getter functionalities."""
|
|
146
|
+
|
|
147
|
+
@abc.abstractmethod
|
|
148
|
+
def call_fset(self, obj: Any, value: T_contra) -> None:
|
|
149
|
+
"""Method for implementing unique setter functionalities."""
|
|
150
|
+
|
|
151
|
+
@abc.abstractmethod
|
|
152
|
+
def call_fdel(self, obj: Any) -> None:
|
|
153
|
+
"""Method for implementing unique deleter functionalities."""
|
|
154
|
+
|
|
155
|
+
|
|
156
|
+
class Property(BaseProperty[T_contra, T_co]):
|
|
157
|
+
"""Class |Property| mimics the behaviour of the built-in function |property|.
|
|
158
|
+
|
|
159
|
+
The only advantage of |Property| over |property| is that it allows defining
|
|
160
|
+
different input and output types statically. If the input and output types
|
|
161
|
+
are identical, prefer |property|, which is probably faster.
|
|
162
|
+
|
|
163
|
+
The following test class implements its attribute `x` by defining
|
|
164
|
+
all three "property methods" (`getter`/`fget`, `setter`/`fset`,
|
|
165
|
+
`deleter`/`fdel`), but its attribute `y` by defining none of them:
|
|
166
|
+
|
|
167
|
+
>>> from hydpy.core.propertytools import Property
|
|
168
|
+
>>> class Test:
|
|
169
|
+
...
|
|
170
|
+
... def __init__(self):
|
|
171
|
+
... self._x = None
|
|
172
|
+
... self._y = None
|
|
173
|
+
...
|
|
174
|
+
... @Property
|
|
175
|
+
... def x(self):
|
|
176
|
+
... return self._x
|
|
177
|
+
... @x.setter
|
|
178
|
+
... def x(self, value):
|
|
179
|
+
... self._x = value
|
|
180
|
+
... @x.deleter
|
|
181
|
+
... def x(self):
|
|
182
|
+
... self._x = None
|
|
183
|
+
...
|
|
184
|
+
... y = Property()
|
|
185
|
+
|
|
186
|
+
After initialising a test object, you can use its attribute `x` as expected:
|
|
187
|
+
|
|
188
|
+
>>> test = Test()
|
|
189
|
+
>>> test.x
|
|
190
|
+
>>> test.x = 2
|
|
191
|
+
>>> test.x
|
|
192
|
+
2
|
|
193
|
+
>>> del test.x
|
|
194
|
+
>>> test.x
|
|
195
|
+
|
|
196
|
+
When trying to invoke attribute `y`, you get the following error messages:
|
|
197
|
+
|
|
198
|
+
>>> test.y
|
|
199
|
+
Traceback (most recent call last):
|
|
200
|
+
...
|
|
201
|
+
AttributeError: Attribute `y` of object `test` is not gettable.
|
|
202
|
+
|
|
203
|
+
>>> test.y = 1
|
|
204
|
+
Traceback (most recent call last):
|
|
205
|
+
...
|
|
206
|
+
AttributeError: Attribute `y` of object `test` is not settable.
|
|
207
|
+
|
|
208
|
+
>>> del test.y
|
|
209
|
+
Traceback (most recent call last):
|
|
210
|
+
...
|
|
211
|
+
AttributeError: Attribute `y` of object `test` is not deletable.
|
|
212
|
+
"""
|
|
213
|
+
|
|
214
|
+
def __init__(
|
|
215
|
+
self,
|
|
216
|
+
fget: FGet[T_co] = BaseProperty._fgetdummy,
|
|
217
|
+
fset: FSet[T_contra] = BaseProperty._fsetdummy,
|
|
218
|
+
fdel: FDel = BaseProperty._fdeldummy,
|
|
219
|
+
) -> None:
|
|
220
|
+
self.fget = fget
|
|
221
|
+
self.set_doc(fget.__doc__)
|
|
222
|
+
self.fset = fset
|
|
223
|
+
self.fdel = fdel
|
|
224
|
+
|
|
225
|
+
def call_fget(self, obj: Any) -> T_co:
|
|
226
|
+
"""Call `fget` without additional functionalities."""
|
|
227
|
+
return self.fget(obj)
|
|
228
|
+
|
|
229
|
+
def call_fset(self, obj: Any, value: T_contra) -> None:
|
|
230
|
+
"""Call `fset` without additional functionalities."""
|
|
231
|
+
self.fset(obj, value)
|
|
232
|
+
|
|
233
|
+
def call_fdel(self, obj: Any) -> None:
|
|
234
|
+
"""Call `fdel` without additional functionalities."""
|
|
235
|
+
self.fdel(obj)
|
|
236
|
+
|
|
237
|
+
def getter(self, fget: FGet[T_co]) -> Property[T_contra, T_co]:
|
|
238
|
+
"""Add the given getter function and its docstring to the property and
|
|
239
|
+
return it."""
|
|
240
|
+
self.fget = fget
|
|
241
|
+
self.set_doc(fget.__doc__)
|
|
242
|
+
return self
|
|
243
|
+
|
|
244
|
+
def setter(self, fset: FSet[T_contra]) -> Property[T_contra, T_co]:
|
|
245
|
+
"""Add the given setter function to the property and return it."""
|
|
246
|
+
self.fset = fset
|
|
247
|
+
return self
|
|
248
|
+
|
|
249
|
+
def deleter(self, fdel: FDel) -> Property[T_contra, T_co]:
|
|
250
|
+
"""Add the given deleter function to the property and return it."""
|
|
251
|
+
setattr(self, "fdel", fdel)
|
|
252
|
+
return self
|
|
253
|
+
|
|
254
|
+
|
|
255
|
+
class ProtectedProperty(BaseProperty[T_contra, T_co]):
|
|
256
|
+
"""A |property|-like class which prevents getting an attribute before setting it.
|
|
257
|
+
|
|
258
|
+
Some attributes need preparations before being accessible. Consider the case
|
|
259
|
+
where a property of a Python class (being part of the API) links to an attribute
|
|
260
|
+
of a Cython extension class (not part of the API). If the Cython attribute is,
|
|
261
|
+
for example, a vector requiring memory allocation, trying to query this vector
|
|
262
|
+
before it has been initialised results in a program crash. Using
|
|
263
|
+
|ProtectedProperty| is a means to prevent such problems.
|
|
264
|
+
|
|
265
|
+
The following class `Test` defines most simple getter, setter, and deleter
|
|
266
|
+
functions for its only property `x`:
|
|
267
|
+
|
|
268
|
+
>>> from hydpy.core.propertytools import ProtectedProperty
|
|
269
|
+
>>> class Test:
|
|
270
|
+
...
|
|
271
|
+
... def __init__(self):
|
|
272
|
+
... self._x = None
|
|
273
|
+
...
|
|
274
|
+
... x = ProtectedProperty()
|
|
275
|
+
... @x.getter
|
|
276
|
+
... def x(self):
|
|
277
|
+
... "Test"
|
|
278
|
+
... return self._x
|
|
279
|
+
... @x.setter
|
|
280
|
+
... def x(self, value):
|
|
281
|
+
... self._x = value
|
|
282
|
+
... @x.deleter
|
|
283
|
+
... def x(self):
|
|
284
|
+
... self._x = None
|
|
285
|
+
|
|
286
|
+
Trying to query `x` directly after initialising a `Test` object results in an
|
|
287
|
+
|AttributeNotReady| error:
|
|
288
|
+
|
|
289
|
+
>>> test = Test()
|
|
290
|
+
>>> test.x
|
|
291
|
+
Traceback (most recent call last):
|
|
292
|
+
...
|
|
293
|
+
hydpy.core.exceptiontools.AttributeNotReady: Attribute `x` of object `test` \
|
|
294
|
+
has not been prepared so far.
|
|
295
|
+
|
|
296
|
+
After setting a value, you can query this value as expected:
|
|
297
|
+
|
|
298
|
+
>>> test.x = 1
|
|
299
|
+
>>> test.x
|
|
300
|
+
1
|
|
301
|
+
|
|
302
|
+
After deleting the value, the protection mechanism applies again:
|
|
303
|
+
|
|
304
|
+
>>> del test.x
|
|
305
|
+
>>> test.x
|
|
306
|
+
Traceback (most recent call last):
|
|
307
|
+
...
|
|
308
|
+
hydpy.core.exceptiontools.AttributeNotReady: Attribute `x` of object `test` \
|
|
309
|
+
has not been prepared so far.
|
|
310
|
+
"""
|
|
311
|
+
|
|
312
|
+
def __init__(
|
|
313
|
+
self,
|
|
314
|
+
fget: FGet[T_co] = BaseProperty._fgetdummy,
|
|
315
|
+
fset: FSet[T_contra] = BaseProperty._fsetdummy,
|
|
316
|
+
fdel: FDel = BaseProperty._fdeldummy,
|
|
317
|
+
) -> None:
|
|
318
|
+
self.fget = fget
|
|
319
|
+
self.set_doc(fget.__doc__)
|
|
320
|
+
self.fset = fset
|
|
321
|
+
self.fdel = fdel
|
|
322
|
+
|
|
323
|
+
def call_fget(self, obj: Any) -> T_co:
|
|
324
|
+
"""When ready, call `fget`; otherwise, raise an |AttributeNotReady|
|
|
325
|
+
exception."""
|
|
326
|
+
if self.isready(obj):
|
|
327
|
+
return self.fget(obj)
|
|
328
|
+
raise exceptiontools.AttributeNotReady(
|
|
329
|
+
f"Attribute `{self.name}` of object {objecttools.devicephrase(obj)} "
|
|
330
|
+
f"has not been prepared so far."
|
|
331
|
+
)
|
|
332
|
+
|
|
333
|
+
def call_fset(self, obj: Any, value: T_contra) -> None:
|
|
334
|
+
"""Call `fset` and mark the attribute as ready."""
|
|
335
|
+
self.fset(obj, value)
|
|
336
|
+
vars(obj)[self.name] = True
|
|
337
|
+
|
|
338
|
+
def call_fdel(self, obj: Any) -> None:
|
|
339
|
+
"""Call `fdel` and mark the attribute as not ready."""
|
|
340
|
+
vars(obj)[self.name] = False
|
|
341
|
+
self.fdel(obj)
|
|
342
|
+
|
|
343
|
+
def isready(self, obj: Any) -> bool:
|
|
344
|
+
"""Return |True| or |False| to indicate if the protected
|
|
345
|
+
property is ready for the given object. If the object is
|
|
346
|
+
unknown, |ProtectedProperty.isready| returns |False|."""
|
|
347
|
+
return vars(obj).get(self.name, False)
|
|
348
|
+
|
|
349
|
+
def getter(self, fget: FGet[T_co]) -> ProtectedProperty[T_contra, T_co]:
|
|
350
|
+
"""Add the given getter function and its docstring to the property
|
|
351
|
+
and return it."""
|
|
352
|
+
self.fget = fget
|
|
353
|
+
self.set_doc(fget.__doc__)
|
|
354
|
+
return self
|
|
355
|
+
|
|
356
|
+
def setter(self, fset: FSet[T_contra]) -> ProtectedProperty[T_contra, T_co]:
|
|
357
|
+
"""Add the given setter function to the property and return it."""
|
|
358
|
+
self.fset = fset
|
|
359
|
+
return self
|
|
360
|
+
|
|
361
|
+
def deleter(self, fdel: FDel) -> ProtectedProperty[T_contra, T_co]:
|
|
362
|
+
"""Add the given deleter function to the property and return it."""
|
|
363
|
+
self.fdel = fdel
|
|
364
|
+
return self
|
|
365
|
+
|
|
366
|
+
|
|
367
|
+
ProtectedPropertyStr = ProtectedProperty[str, str]
|
|
368
|
+
"""|ProtectedProperty| for handling |str| objects."""
|
|
369
|
+
|
|
370
|
+
|
|
371
|
+
class ProtectedProperties:
|
|
372
|
+
"""Iterable for |ProtectedProperty| objects.
|
|
373
|
+
|
|
374
|
+
You can collect an arbitrary number of |ProtectedProperty| objects within a
|
|
375
|
+
|ProtectedProperties| object. Its |ProtectedProperties.allready| method
|
|
376
|
+
allows checking the status of all properties at ones:
|
|
377
|
+
|
|
378
|
+
>>> from hydpy.core import propertytools as pt
|
|
379
|
+
>>> class Test:
|
|
380
|
+
...
|
|
381
|
+
... @pt.ProtectedProperty
|
|
382
|
+
... def x(self):
|
|
383
|
+
... return "this is x"
|
|
384
|
+
... @x.setter
|
|
385
|
+
... def x(self, value):
|
|
386
|
+
... pass
|
|
387
|
+
...
|
|
388
|
+
... @pt.ProtectedProperty
|
|
389
|
+
... def z(self):
|
|
390
|
+
... return "this is z"
|
|
391
|
+
... @z.setter
|
|
392
|
+
... def z(self, value):
|
|
393
|
+
... pass
|
|
394
|
+
...
|
|
395
|
+
... protectedproperties = pt.ProtectedProperties(x, z)
|
|
396
|
+
|
|
397
|
+
>>> test1 = Test()
|
|
398
|
+
>>> test1.x = None
|
|
399
|
+
>>> test2 = Test()
|
|
400
|
+
>>> test2.x = None
|
|
401
|
+
>>> test2.z = None
|
|
402
|
+
>>> Test.protectedproperties.allready(test1)
|
|
403
|
+
False
|
|
404
|
+
>>> Test.protectedproperties.allready(test2)
|
|
405
|
+
True
|
|
406
|
+
"""
|
|
407
|
+
|
|
408
|
+
__properties: tuple[ProtectedProperty[Any, Any], ...]
|
|
409
|
+
|
|
410
|
+
def __init__(self, *properties: ProtectedProperty[Any, Any]) -> None:
|
|
411
|
+
self.__properties = properties
|
|
412
|
+
|
|
413
|
+
def allready(self, obj: Any) -> bool:
|
|
414
|
+
"""Return |True| or |False| to indicate whether all protected
|
|
415
|
+
properties are ready or not."""
|
|
416
|
+
for prop in self.__properties:
|
|
417
|
+
if not prop.isready(obj):
|
|
418
|
+
return False
|
|
419
|
+
return True
|
|
420
|
+
|
|
421
|
+
def __iter__(self) -> Iterator[ProtectedProperty[Any, Any]]:
|
|
422
|
+
return self.__properties.__iter__()
|
|
423
|
+
|
|
424
|
+
|
|
425
|
+
class DependentProperty(BaseProperty[T_contra, T_co]):
|
|
426
|
+
"""|property|-like class which prevents accessing a dependent attribute
|
|
427
|
+
before preparing certain other attributes.
|
|
428
|
+
|
|
429
|
+
Please read the documentation on class |ProtectedProperty|, from which we
|
|
430
|
+
take the following example. `x` is a simple |ProtectedProperty| again,
|
|
431
|
+
but time we add the |DependentProperty| `y`:
|
|
432
|
+
|
|
433
|
+
>>> from hydpy.core import propertytools as pt
|
|
434
|
+
>>> class Test:
|
|
435
|
+
...
|
|
436
|
+
... def __init__(self):
|
|
437
|
+
... self._x = None
|
|
438
|
+
... self._y = None
|
|
439
|
+
...
|
|
440
|
+
... @pt.ProtectedProperty
|
|
441
|
+
... def x(self):
|
|
442
|
+
... return self._x
|
|
443
|
+
... @x.setter
|
|
444
|
+
... def x(self, value):
|
|
445
|
+
... self._x = value
|
|
446
|
+
... @x.deleter
|
|
447
|
+
... def x(self):
|
|
448
|
+
... self._x = None
|
|
449
|
+
...
|
|
450
|
+
... y = pt.DependentProperty(protected=(x,))
|
|
451
|
+
...
|
|
452
|
+
... @y.getter
|
|
453
|
+
... def y(self):
|
|
454
|
+
... return self._y
|
|
455
|
+
... @y.setter
|
|
456
|
+
... def y(self, value):
|
|
457
|
+
... self._y = value
|
|
458
|
+
... @y.deleter
|
|
459
|
+
... def y(self):
|
|
460
|
+
... self._y = None
|
|
461
|
+
|
|
462
|
+
Initially, due to `x` not being prepared, there is no way to get, set, or
|
|
463
|
+
delete attribute `y`:
|
|
464
|
+
|
|
465
|
+
>>> test = Test()
|
|
466
|
+
>>> test.y
|
|
467
|
+
Traceback (most recent call last):
|
|
468
|
+
...
|
|
469
|
+
hydpy.core.exceptiontools.AttributeNotReady: Attribute `y` of object `test` \
|
|
470
|
+
is not usable so far. At least, you have to prepare attribute `x` first.
|
|
471
|
+
>>> test.y = 1
|
|
472
|
+
Traceback (most recent call last):
|
|
473
|
+
...
|
|
474
|
+
hydpy.core.exceptiontools.AttributeNotReady: Attribute `y` of object `test` \
|
|
475
|
+
is not usable so far. At least, you have to prepare attribute `x` first.
|
|
476
|
+
>>> del test.y
|
|
477
|
+
Traceback (most recent call last):
|
|
478
|
+
...
|
|
479
|
+
hydpy.core.exceptiontools.AttributeNotReady: Attribute `y` of object `test` \
|
|
480
|
+
is not usable so far. At least, you have to prepare attribute `x` first.
|
|
481
|
+
|
|
482
|
+
After assigning a value to `x`, `y` behaves like a common property:
|
|
483
|
+
|
|
484
|
+
>>> test.x = "anything"
|
|
485
|
+
>>> test.y = 1
|
|
486
|
+
>>> test.y
|
|
487
|
+
1
|
|
488
|
+
>>> del test.y
|
|
489
|
+
>>> test.y
|
|
490
|
+
"""
|
|
491
|
+
|
|
492
|
+
protected: ProtectedProperties
|
|
493
|
+
|
|
494
|
+
def __init__(
|
|
495
|
+
self,
|
|
496
|
+
protected: ProtectedProperties,
|
|
497
|
+
fget: FGet[T_co] = BaseProperty._fgetdummy,
|
|
498
|
+
fset: FSet[T_contra] = BaseProperty._fsetdummy,
|
|
499
|
+
fdel: FDel = BaseProperty._fdeldummy,
|
|
500
|
+
) -> None:
|
|
501
|
+
self.protected = protected
|
|
502
|
+
self.fget = fget
|
|
503
|
+
self.set_doc(fget.__doc__)
|
|
504
|
+
self.fset = fset
|
|
505
|
+
self.fdel = fdel
|
|
506
|
+
|
|
507
|
+
def __check(self, obj: Any) -> None:
|
|
508
|
+
for req in self.protected:
|
|
509
|
+
if not req.isready(obj):
|
|
510
|
+
raise exceptiontools.AttributeNotReady(
|
|
511
|
+
f"Attribute `{self.name}` of object "
|
|
512
|
+
f"{objecttools.devicephrase(obj)} is not usable "
|
|
513
|
+
f"so far. At least, you have to prepare attribute "
|
|
514
|
+
f"`{req.name}` first."
|
|
515
|
+
)
|
|
516
|
+
|
|
517
|
+
def call_fget(self, obj: Any) -> T_co:
|
|
518
|
+
"""Call `fget` when all required attributes are ready; otherwise, raise
|
|
519
|
+
an |AttributeNotReady| error."""
|
|
520
|
+
self.__check(obj)
|
|
521
|
+
return self.fget(obj)
|
|
522
|
+
|
|
523
|
+
def call_fset(self, obj: Any, value: T_contra) -> None:
|
|
524
|
+
"""Call `fset` when all required attributes are ready; otherwise, raise
|
|
525
|
+
an |AttributeNotReady| error."""
|
|
526
|
+
self.__check(obj)
|
|
527
|
+
self.fset(obj, value)
|
|
528
|
+
|
|
529
|
+
def call_fdel(self, obj: Any) -> None:
|
|
530
|
+
"""Call `fdel` when all required attributes are ready; otherwise, raise
|
|
531
|
+
an |AttributeNotReady| error."""
|
|
532
|
+
self.__check(obj)
|
|
533
|
+
self.fdel(obj)
|
|
534
|
+
|
|
535
|
+
def getter(self, fget: FGet[T_co]) -> DependentProperty[T_contra, T_co]:
|
|
536
|
+
"""Add the given getter function and its docstring to the property and
|
|
537
|
+
return it."""
|
|
538
|
+
self.fget = fget
|
|
539
|
+
self.set_doc(fget.__doc__)
|
|
540
|
+
return self
|
|
541
|
+
|
|
542
|
+
def setter(self, fset: FSet[T_contra]) -> DependentProperty[T_contra, T_co]:
|
|
543
|
+
"""Add the given setter function to the property and return it."""
|
|
544
|
+
self.fset = fset
|
|
545
|
+
return self
|
|
546
|
+
|
|
547
|
+
def deleter(self, fdel: FDel) -> DependentProperty[T_contra, T_co]:
|
|
548
|
+
"""Add the given deleter function to the property and return it."""
|
|
549
|
+
self.fdel = fdel
|
|
550
|
+
return self
|
|
551
|
+
|
|
552
|
+
|
|
553
|
+
class DefaultProperty(BaseProperty[T_contra, T_co]):
|
|
554
|
+
"""|property|-like class which uses the getter function to return a default
|
|
555
|
+
value unless a custom value is available.
|
|
556
|
+
|
|
557
|
+
In the following example, the default value of property `x` is one:
|
|
558
|
+
|
|
559
|
+
>>> from hydpy.core.propertytools import DefaultProperty
|
|
560
|
+
>>> class Test:
|
|
561
|
+
...
|
|
562
|
+
... @DefaultProperty
|
|
563
|
+
... def x(self):
|
|
564
|
+
... "Default property x."
|
|
565
|
+
... return 1
|
|
566
|
+
|
|
567
|
+
Initially, property `x` returns the default value defined by its getter function:
|
|
568
|
+
|
|
569
|
+
>>> test = Test()
|
|
570
|
+
>>> test.x
|
|
571
|
+
1
|
|
572
|
+
|
|
573
|
+
Assigned custom values override such default values:
|
|
574
|
+
|
|
575
|
+
>>> test.x = 3
|
|
576
|
+
>>> test.x
|
|
577
|
+
3
|
|
578
|
+
|
|
579
|
+
After removing the custom value, it is again up to the getter function to return
|
|
580
|
+
the default value:
|
|
581
|
+
|
|
582
|
+
>>> del test.x
|
|
583
|
+
>>> test.x
|
|
584
|
+
1
|
|
585
|
+
|
|
586
|
+
Trying to delete a not existing custom value does not harm:
|
|
587
|
+
|
|
588
|
+
>>> del test.x
|
|
589
|
+
|
|
590
|
+
The documentation string of the getter functions serves as the documentation
|
|
591
|
+
string of the default property:
|
|
592
|
+
|
|
593
|
+
>>> Test.x.__doc__
|
|
594
|
+
'Default property x.'
|
|
595
|
+
"""
|
|
596
|
+
|
|
597
|
+
def __init__(self, fget: FGet[T_co] = BaseProperty._fgetdummy) -> None:
|
|
598
|
+
self.fget = fget
|
|
599
|
+
self.set_doc(fget.__doc__)
|
|
600
|
+
self.fset = self._fsetowndummy
|
|
601
|
+
self.fdel = self._fdelowndummy
|
|
602
|
+
|
|
603
|
+
def call_fget(self, obj: Any) -> T_co:
|
|
604
|
+
"""If available, return the predefined custom value; otherwise, return
|
|
605
|
+
the value defined by the getter function."""
|
|
606
|
+
value = cast(T_co | None, vars(obj).get(self.name))
|
|
607
|
+
if value is None:
|
|
608
|
+
return self.fget(obj)
|
|
609
|
+
return value
|
|
610
|
+
|
|
611
|
+
def call_fset(self, obj: Any, value: T_contra) -> None:
|
|
612
|
+
"""Store the given custom value."""
|
|
613
|
+
vars(obj)[self.name] = value
|
|
614
|
+
|
|
615
|
+
def call_fdel(self, obj: Any) -> None:
|
|
616
|
+
"""Remove the predefined custom value."""
|
|
617
|
+
try:
|
|
618
|
+
del vars(obj)[self.name]
|
|
619
|
+
except KeyError:
|
|
620
|
+
pass
|
|
621
|
+
|
|
622
|
+
@staticmethod
|
|
623
|
+
def _fsetowndummy(__obj: Any, __value: T_contra) -> None:
|
|
624
|
+
"""Do nothing."""
|
|
625
|
+
|
|
626
|
+
@staticmethod
|
|
627
|
+
def _fdelowndummy(__obj: Any) -> None:
|
|
628
|
+
"""Do nothing."""
|
|
629
|
+
|
|
630
|
+
|
|
631
|
+
DefaultPropertyBool = DefaultProperty[bool, bool]
|
|
632
|
+
"""|DefaultProperty| for handling |bool| objects."""
|
|
633
|
+
|
|
634
|
+
DefaultPropertyStr = DefaultProperty[str, str]
|
|
635
|
+
"""|DefaultProperty| for handling |str| objects."""
|
|
636
|
+
|
|
637
|
+
DefaultPropertySeriesFileType = DefaultProperty[SeriesFileType, SeriesFileType]
|
|
638
|
+
"""|DefaultProperty| for handling |SeriesFileType| literals."""
|
|
639
|
+
|
|
640
|
+
DefaultPropertySeriesAggregationType = DefaultProperty[
|
|
641
|
+
SeriesAggregationType, SeriesAggregationType
|
|
642
|
+
]
|
|
643
|
+
"""|DefaultProperty| for handling |SeriesAggregationType| literals."""
|