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,833 @@
|
|
|
1
|
+
# !python
|
|
2
|
+
# distutils: define_macros=NPY_NO_DEPRECATED_API=NPY_1_7_API_VERSION
|
|
3
|
+
# cython: language_level=3
|
|
4
|
+
# cython: cpow=True
|
|
5
|
+
# cython: boundscheck=False
|
|
6
|
+
# cython: wraparound=False
|
|
7
|
+
# cython: initializedcheck=False
|
|
8
|
+
# cython: cdivision=True
|
|
9
|
+
|
|
10
|
+
r"""This Cython module implements the performance-critical functions of the Python
|
|
11
|
+
module `smoothtools`.
|
|
12
|
+
|
|
13
|
+
MAX_LOG_FLOAT = 700
|
|
14
|
+
___________________
|
|
15
|
+
|
|
16
|
+
The natural logarithm of the highest possible float value.
|
|
17
|
+
|
|
18
|
+
The exact value depends on the actual system. So, an automated estimation of this
|
|
19
|
+
value would be advisable.
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
smooth_logistic1
|
|
23
|
+
________________
|
|
24
|
+
|
|
25
|
+
Smoothing kernel based on the logistic function.
|
|
26
|
+
|
|
27
|
+
:math:`f_{log1}(x, c) = 1 - \frac{1}{1 + exp(x / c)}`
|
|
28
|
+
|
|
29
|
+
The following example shows the typical shape of the logistic function for four
|
|
30
|
+
different smoothing parameters:
|
|
31
|
+
|
|
32
|
+
>>> from hydpy.cythons import smoothutils
|
|
33
|
+
>>> from hydpy import round_
|
|
34
|
+
>>> for value in range(-5, 6):
|
|
35
|
+
... if value == -5:
|
|
36
|
+
... round_("value, par=10.0, par=1.0, par=0.1, par=0.0")
|
|
37
|
+
... round_(value, width=5, lfill=" ", end=", ")
|
|
38
|
+
... for idx, parameter in enumerate([10.0, 1.0, 0.1, 0.0]):
|
|
39
|
+
... round_(smoothutils.smooth_logistic1(value, parameter),
|
|
40
|
+
... width=8, rfill="0", end="")
|
|
41
|
+
... if idx < 3:
|
|
42
|
+
... round_("", end=", ")
|
|
43
|
+
... else:
|
|
44
|
+
... round_("")
|
|
45
|
+
value, par=10.0, par=1.0, par=0.1, par=0.0
|
|
46
|
+
-5, 0.377541, 0.006693, 0.000000, 0.000000
|
|
47
|
+
-4, 0.401312, 0.017986, 0.000000, 0.000000
|
|
48
|
+
-3, 0.425557, 0.047426, 0.000000, 0.000000
|
|
49
|
+
-2, 0.450166, 0.119203, 0.000000, 0.000000
|
|
50
|
+
-1, 0.475021, 0.268941, 0.000045, 0.000000
|
|
51
|
+
0, 0.500000, 0.500000, 0.500000, 0.500000
|
|
52
|
+
1, 0.524979, 0.731059, 0.999955, 1.000000
|
|
53
|
+
2, 0.549834, 0.880797, 1.000000, 1.000000
|
|
54
|
+
3, 0.574443, 0.952574, 1.000000, 1.000000
|
|
55
|
+
4, 0.598688, 0.982014, 1.000000, 1.000000
|
|
56
|
+
5, 0.622459, 0.993307, 1.000000, 1.000000
|
|
57
|
+
|
|
58
|
+
With the highest value of the smoothing parameter (10.0), the result approximates a
|
|
59
|
+
straight line. With the lowest smoothing parameter (0.0), the result is identical with
|
|
60
|
+
a discontinuous first-order step function.
|
|
61
|
+
|
|
62
|
+
Function `smooth_logistic1` protects itself against numerical overflow. Hence, even
|
|
63
|
+
extremely high `value/parameter` ratios are allowed:
|
|
64
|
+
|
|
65
|
+
>>> round_(smoothutils.smooth_logistic1(1000., .1))
|
|
66
|
+
1.0
|
|
67
|
+
|
|
68
|
+
|
|
69
|
+
smooth_logistic1_derivative2
|
|
70
|
+
____________________________
|
|
71
|
+
|
|
72
|
+
Calculate the derivative of the function `smooth_logistic1` with respect to the given
|
|
73
|
+
value.
|
|
74
|
+
|
|
75
|
+
:math:`\frac{d}{dx}f_{log1}(x, c) = \frac{exp(x/c)}{(exp(x/c)+1)^2}`
|
|
76
|
+
|
|
77
|
+
The following example shows the derivates for four different smoothing parameters:
|
|
78
|
+
|
|
79
|
+
>>> import numpy
|
|
80
|
+
>>> for value in range(-5, 6):
|
|
81
|
+
... if value == -5:
|
|
82
|
+
... round_("value, par=3.0, par=1.0, par=0.1, par=0.0")
|
|
83
|
+
... round_(value, width=5, lfill=" ", end=", ")
|
|
84
|
+
... for idx, parameter in enumerate([3.0, 1.0, 0.1, 0.0]):
|
|
85
|
+
... result = smoothutils.smooth_logistic1_derivative2(value, parameter)
|
|
86
|
+
... if numpy.isinf(result):
|
|
87
|
+
... print(result, end="")
|
|
88
|
+
... else:
|
|
89
|
+
... round_(result, width=8, rfill="0", end="")
|
|
90
|
+
... if idx < 3:
|
|
91
|
+
... round_("", end=", ")
|
|
92
|
+
... else:
|
|
93
|
+
... round_("")
|
|
94
|
+
value, par=3.0, par=1.0, par=0.1, par=0.0
|
|
95
|
+
-5, 0.044543, 0.006648, 0.000000, 0.000000
|
|
96
|
+
-4, 0.055030, 0.017663, 0.000000, 0.000000
|
|
97
|
+
-3, 0.065537, 0.045177, 0.000000, 0.000000
|
|
98
|
+
-2, 0.074719, 0.104994, 0.000000, 0.000000
|
|
99
|
+
-1, 0.081061, 0.196612, 0.000454, 0.000000
|
|
100
|
+
0, 0.083333, 0.250000, 2.500000, inf
|
|
101
|
+
1, 0.081061, 0.196612, 0.000454, 0.000000
|
|
102
|
+
2, 0.074719, 0.104994, 0.000000, 0.000000
|
|
103
|
+
3, 0.065537, 0.045177, 0.000000, 0.000000
|
|
104
|
+
4, 0.055030, 0.017663, 0.000000, 0.000000
|
|
105
|
+
5, 0.044543, 0.006648, 0.000000, 0.000000
|
|
106
|
+
|
|
107
|
+
|
|
108
|
+
We validate the calculated derivatives by comparing them with sufficiently accurate
|
|
109
|
+
numerical approximations:
|
|
110
|
+
|
|
111
|
+
>>> dx = 1e-7
|
|
112
|
+
>>> for value in range(-5, 6):
|
|
113
|
+
... if value == -5:
|
|
114
|
+
... round_("value, par=3.0, par=1.0, par=0.1, par=0.0")
|
|
115
|
+
... round_(value, width=5, lfill=" ", end=", ")
|
|
116
|
+
... for idx, parameter in enumerate([3.0, 1.0, 0.1, 0.0]):
|
|
117
|
+
... est = (smoothutils.smooth_logistic1(value+dx, parameter) -
|
|
118
|
+
... smoothutils.smooth_logistic1(value, parameter))/dx
|
|
119
|
+
... round_(est, width=8, rfill="0", end="")
|
|
120
|
+
... if idx < 3:
|
|
121
|
+
... round_("", end=", ")
|
|
122
|
+
... else:
|
|
123
|
+
... round_("")
|
|
124
|
+
value, par=3.0, par=1.0, par=0.1, par=0.0
|
|
125
|
+
-5, 0.044543, 0.006648, 0.000000, 0.000000
|
|
126
|
+
-4, 0.055030, 0.017663, 0.000000, 0.000000
|
|
127
|
+
-3, 0.065537, 0.045177, 0.000000, 0.000000
|
|
128
|
+
-2, 0.074719, 0.104994, 0.000000, 0.000000
|
|
129
|
+
-1, 0.081061, 0.196612, 0.000454, 0.000000
|
|
130
|
+
0, 0.083333, 0.250000, 2.500000, 5000000.0
|
|
131
|
+
1, 0.081061, 0.196612, 0.000454, 0.000000
|
|
132
|
+
2, 0.074719, 0.104994, 0.000000, 0.000000
|
|
133
|
+
3, 0.065537, 0.045177, 0.000000, 0.000000
|
|
134
|
+
4, 0.055030, 0.017663, 0.000000, 0.000000
|
|
135
|
+
5, 0.044543, 0.006648, 0.000000, 0.000000
|
|
136
|
+
|
|
137
|
+
Function `smooth_logistic2_derivative1` protects itself against numerical overflow.
|
|
138
|
+
Hence, even extremely high `value/parameter` ratios are allowed:
|
|
139
|
+
|
|
140
|
+
>>> round_(smoothutils.smooth_logistic1_derivative2(1000.0, 0.1))
|
|
141
|
+
0.0
|
|
142
|
+
|
|
143
|
+
|
|
144
|
+
smooth_logistic2
|
|
145
|
+
________________
|
|
146
|
+
|
|
147
|
+
Smoothing kernel based on the integral of the logistic function.
|
|
148
|
+
|
|
149
|
+
:math:`f_{log2}(x, c) = c \cdot ln(1+exp(x/c))`
|
|
150
|
+
|
|
151
|
+
The following example shows the shape of the integral of the logistic function for four
|
|
152
|
+
different smoothing parameters:
|
|
153
|
+
|
|
154
|
+
>>> for value in range(-5, 6):
|
|
155
|
+
... if value == -5:
|
|
156
|
+
... round_("value, par=3.0, par=1.0, par=0.1, par=0.0")
|
|
157
|
+
... round_(value, width=5, lfill=" ", end=", ")
|
|
158
|
+
... for idx, parameter in enumerate([3.0, 1.0, 0.1, 0.0]):
|
|
159
|
+
... round_(smoothutils.smooth_logistic2(value, parameter),
|
|
160
|
+
... width=8, rfill="0", end="")
|
|
161
|
+
... if idx < 3:
|
|
162
|
+
... round_("", end=", ")
|
|
163
|
+
... else:
|
|
164
|
+
... round_("")
|
|
165
|
+
value, par=3.0, par=1.0, par=0.1, par=0.0
|
|
166
|
+
-5, 0.519024, 0.006715, 0.000000, 0.000000
|
|
167
|
+
-4, 0.701888, 0.018150, 0.000000, 0.000000
|
|
168
|
+
-3, 0.939785, 0.048587, 0.000000, 0.000000
|
|
169
|
+
-2, 1.243110, 0.126928, 0.000000, 0.000000
|
|
170
|
+
-1, 1.620917, 0.313262, 0.000005, 0.000000
|
|
171
|
+
0, 2.079442, 0.693147, 0.069315, 0.000000
|
|
172
|
+
1, 2.620917, 1.313262, 1.000005, 1.000000
|
|
173
|
+
2, 3.243110, 2.126928, 2.000000, 2.000000
|
|
174
|
+
3, 3.939785, 3.048587, 3.000000, 3.000000
|
|
175
|
+
4, 4.701888, 4.018150, 4.000000, 4.000000
|
|
176
|
+
5, 5.519024, 5.006715, 5.000000, 5.000000
|
|
177
|
+
|
|
178
|
+
|
|
179
|
+
With the highest value of the smoothing parameter (3.0), the resulting line is
|
|
180
|
+
relatively straight. With the lowest smoothing parameter (0.0), the result is
|
|
181
|
+
identical to a second-order discontinuous step function.
|
|
182
|
+
|
|
183
|
+
Function `smooth_logistic2` protects itself against numerical overflow. Hence, even
|
|
184
|
+
extremely high `value/parameter` ratios are allowed:
|
|
185
|
+
|
|
186
|
+
>>> round_(smoothutils.smooth_logistic2(1000.0, 0.1))
|
|
187
|
+
1000.0
|
|
188
|
+
|
|
189
|
+
smooth_logistic2_derivative1
|
|
190
|
+
____________________________
|
|
191
|
+
|
|
192
|
+
Calculate the derivative of the function `smooth_logistic2` with respect to its
|
|
193
|
+
smoothing parameter.
|
|
194
|
+
|
|
195
|
+
:math:`\frac{d}{dc}f_{log2}(x, c) = \frac{x}{c \cdot exp(x/c)+c} \cdot ln(exp(-x/c)+1)`
|
|
196
|
+
|
|
197
|
+
The following example shows the derivates for four different smoothing parameters:
|
|
198
|
+
|
|
199
|
+
>>> for value in range(-5, 6):
|
|
200
|
+
... if value == -5:
|
|
201
|
+
... round_("value, par=3.0, par=1.0, par=0.1, par=0.0")
|
|
202
|
+
... round_(value, width=5, lfill=" ", end=", ")
|
|
203
|
+
... for idx, parameter in enumerate([3.0, 1.0, 0.1, 0.0]):
|
|
204
|
+
... round_(smoothutils.smooth_logistic2_derivative1(value, parameter),
|
|
205
|
+
... width=8, rfill="0", end="")
|
|
206
|
+
... if idx < 3:
|
|
207
|
+
... round_("", end=", ")
|
|
208
|
+
... else:
|
|
209
|
+
... round_("")
|
|
210
|
+
value, par=3.0, par=1.0, par=0.1, par=0.0
|
|
211
|
+
-5, 0.437790, 0.040180, 0.000000, 0.000000
|
|
212
|
+
-4, 0.512107, 0.090095, 0.000000, 0.000000
|
|
213
|
+
-3, 0.582203, 0.190865, 0.000000, 0.000000
|
|
214
|
+
-2, 0.640533, 0.365334, 0.000000, 0.000000
|
|
215
|
+
-1, 0.679449, 0.582203, 0.000499, 0.000000
|
|
216
|
+
0, 0.693147, 0.693147, 0.693147, 0.693147
|
|
217
|
+
1, 0.679449, 0.582203, 0.000499, 0.000000
|
|
218
|
+
2, 0.640533, 0.365334, 0.000000, 0.000000
|
|
219
|
+
3, 0.582203, 0.190865, 0.000000, 0.000000
|
|
220
|
+
4, 0.512107, 0.090095, 0.000000, 0.000000
|
|
221
|
+
5, 0.437790, 0.040180, 0.000000, 0.000000
|
|
222
|
+
|
|
223
|
+
We validate the calculated derivatives by comparing them with sufficiently accurate
|
|
224
|
+
numerical approximations.
|
|
225
|
+
|
|
226
|
+
>>> dc = 1e-6
|
|
227
|
+
>>> for value in range(-5, 6):
|
|
228
|
+
... if value == -5:
|
|
229
|
+
... round_("value, par=3.0, par=1.0, par=0.1, par=0.0")
|
|
230
|
+
... round_(value, width=5, lfill=" ", end=", ")
|
|
231
|
+
... for idx, parameter in enumerate([3.0, 1.0, 0.1, 0.0]):
|
|
232
|
+
... est = (smoothutils.smooth_logistic2(value, parameter+dc) -
|
|
233
|
+
... smoothutils.smooth_logistic2(value, parameter))/dc
|
|
234
|
+
... round_(est, width=8, rfill="0", end="")
|
|
235
|
+
... if idx < 3:
|
|
236
|
+
... round_("", end=", ")
|
|
237
|
+
... else:
|
|
238
|
+
... round_("")
|
|
239
|
+
value, par=3.0, par=1.0, par=0.1, par=0.0
|
|
240
|
+
-5, 0.437790, 0.040180, 0.000000, 0.000000
|
|
241
|
+
-4, 0.512107, 0.090095, 0.000000, 0.000000
|
|
242
|
+
-3, 0.582203, 0.190865, 0.000000, 0.000000
|
|
243
|
+
-2, 0.640533, 0.365334, 0.000000, 0.000000
|
|
244
|
+
-1, 0.679449, 0.582203, 0.000499, 0.000000
|
|
245
|
+
0, 0.693147, 0.693147, 0.693147, 0.693147
|
|
246
|
+
1, 0.679449, 0.582203, 0.000499, 0.000000
|
|
247
|
+
2, 0.640533, 0.365334, 0.000000, 0.000000
|
|
248
|
+
3, 0.582203, 0.190865, 0.000000, 0.000000
|
|
249
|
+
4, 0.512107, 0.090095, 0.000000, 0.000000
|
|
250
|
+
5, 0.437790, 0.040180, 0.000000, 0.000000
|
|
251
|
+
|
|
252
|
+
Function `smooth_logistic2_derivative1` protects itself against numerical overflow.
|
|
253
|
+
Hence, even extremely high negative `value/parameter` ratios are allowed:
|
|
254
|
+
|
|
255
|
+
>>> round_(smoothutils.smooth_logistic2_derivative1(-1000.0, 0.1))
|
|
256
|
+
0.0
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
smooth_logistic2_derivative2
|
|
260
|
+
____________________________
|
|
261
|
+
|
|
262
|
+
Calculate the derivative of the function `smooth_logistic2` with respect to the given
|
|
263
|
+
value.
|
|
264
|
+
|
|
265
|
+
:math:`\frac{d}{dx}f_{log2}(x, c) = \frac{exp(x/c)}{exp(x/c)+1}`
|
|
266
|
+
|
|
267
|
+
The following example shows the derivates for four different smoothing parameters:
|
|
268
|
+
|
|
269
|
+
>>> for value in range(-5, 6):
|
|
270
|
+
... if value == -5:
|
|
271
|
+
... round_("value, par=3.0, par=1.0, par=0.1, par=0.0")
|
|
272
|
+
... round_(value, width=5, lfill=" ", end=", ")
|
|
273
|
+
... for idx, parameter in enumerate([3.0, 1.0, 0.1, 0.0]):
|
|
274
|
+
... round_(smoothutils.smooth_logistic2_derivative2(value, parameter),
|
|
275
|
+
... width=8, rfill="0", end="")
|
|
276
|
+
... if idx < 3:
|
|
277
|
+
... round_("", end=", ")
|
|
278
|
+
... else:
|
|
279
|
+
... round_("")
|
|
280
|
+
value, par=3.0, par=1.0, par=0.1, par=0.0
|
|
281
|
+
-5, 0.158869, 0.006693, 0.000000, 0.000000
|
|
282
|
+
-4, 0.208609, 0.017986, 0.000000, 0.000000
|
|
283
|
+
-3, 0.268941, 0.047426, 0.000000, 0.000000
|
|
284
|
+
-2, 0.339244, 0.119203, 0.000000, 0.000000
|
|
285
|
+
-1, 0.417430, 0.268941, 0.000045, 0.000000
|
|
286
|
+
0, 0.500000, 0.500000, 0.500000, 1.000000
|
|
287
|
+
1, 0.582570, 0.731059, 0.999955, 1.000000
|
|
288
|
+
2, 0.660756, 0.880797, 1.000000, 1.000000
|
|
289
|
+
3, 0.731059, 0.952574, 1.000000, 1.000000
|
|
290
|
+
4, 0.791391, 0.982014, 1.000000, 1.000000
|
|
291
|
+
5, 0.841131, 0.993307, 1.000000, 1.000000
|
|
292
|
+
|
|
293
|
+
We validate the calculated derivatives by comparing them with sufficiently accurate
|
|
294
|
+
numerical approximations.
|
|
295
|
+
|
|
296
|
+
>>> dx = 1e-7
|
|
297
|
+
>>> for value in range(-5, 6):
|
|
298
|
+
... if value == -5:
|
|
299
|
+
... round_("value, par=3.0, par=1.0, par=0.1, par=0.0")
|
|
300
|
+
... round_(value, width=5, lfill=" ", end=", ")
|
|
301
|
+
... for idx, parameter in enumerate([3.0, 1.0, 0.1, 0.0]):
|
|
302
|
+
... est = (smoothutils.smooth_logistic2(value+dx, parameter) -
|
|
303
|
+
... smoothutils.smooth_logistic2(value, parameter))/dx
|
|
304
|
+
... round_(est, width=8, rfill="0", end="")
|
|
305
|
+
... if idx < 3:
|
|
306
|
+
... round_("", end=", ")
|
|
307
|
+
... else:
|
|
308
|
+
... round_("")
|
|
309
|
+
value, par=3.0, par=1.0, par=0.1, par=0.0
|
|
310
|
+
-5, 0.158869, 0.006693, 0.000000, 0.000000
|
|
311
|
+
-4, 0.208609, 0.017986, 0.000000, 0.000000
|
|
312
|
+
-3, 0.268941, 0.047426, 0.000000, 0.000000
|
|
313
|
+
-2, 0.339244, 0.119203, 0.000000, 0.000000
|
|
314
|
+
-1, 0.417430, 0.268941, 0.000045, 0.000000
|
|
315
|
+
0, 0.500000, 0.500000, 0.500000, 1.000000
|
|
316
|
+
1, 0.582570, 0.731059, 0.999955, 1.000000
|
|
317
|
+
2, 0.660756, 0.880797, 1.000000, 1.000000
|
|
318
|
+
3, 0.731059, 0.952574, 1.000000, 1.000000
|
|
319
|
+
4, 0.791391, 0.982014, 1.000000, 1.000000
|
|
320
|
+
5, 0.841131, 0.993307, 1.000000, 1.000000
|
|
321
|
+
|
|
322
|
+
Function `smooth_logistic2_derivative2` protects itself against numerical overflow.
|
|
323
|
+
Hence, even extremely high `value/parameter` ratios are allowed:
|
|
324
|
+
|
|
325
|
+
>>> round_(smoothutils.smooth_logistic2_derivative2(1000.0, 0.1))
|
|
326
|
+
1.0
|
|
327
|
+
|
|
328
|
+
|
|
329
|
+
smooth_logistic3
|
|
330
|
+
________________
|
|
331
|
+
|
|
332
|
+
Smoothing kernel that combines `smooth_logistic1` and `smooth_logistic2` for the
|
|
333
|
+
regularization of functions containing two second-order discontinuities.
|
|
334
|
+
|
|
335
|
+
:math:`f_{log3}(x, c) =
|
|
336
|
+
(1-w) \cdot f_{log2}(x, c) + w \cdot (1-f_{log2}(x, c))`
|
|
337
|
+
|
|
338
|
+
:math:`w = f_{log2}(x-1/2, d)`
|
|
339
|
+
|
|
340
|
+
:math:`d = max(0.54 \cdot c^{1.17}, 0.025)`
|
|
341
|
+
|
|
342
|
+
The following example shows the shape of this combined smoothing function for four
|
|
343
|
+
different smoothing parameters:
|
|
344
|
+
|
|
345
|
+
>>> from numpy import arange
|
|
346
|
+
>>> for value in arange(-5.5, 6):
|
|
347
|
+
... if value == -5.5:
|
|
348
|
+
... round_("value, par=3.0, par=1.0, par=0.1, par=0.0")
|
|
349
|
+
... round_(value, width=5, lfill=" ", end=", ")
|
|
350
|
+
... for idx, parameter in enumerate([3.0, 1.0, 0.1, 0.0]):
|
|
351
|
+
... round_(smoothutils.smooth_logistic3(value, parameter),
|
|
352
|
+
... width=8, rfill="0", end="")
|
|
353
|
+
... if idx < 3:
|
|
354
|
+
... round_("", end=", ")
|
|
355
|
+
... else:
|
|
356
|
+
... round_("")
|
|
357
|
+
value, par=3.0, par=1.0, par=0.1, par=0.0
|
|
358
|
+
-5.5, 0.167513, 0.003996, 0.000000, 0.000000
|
|
359
|
+
-4.5, 0.206271, 0.010618, 0.000000, 0.000000
|
|
360
|
+
-3.5, 0.251687, 0.027603, 0.000000, 0.000000
|
|
361
|
+
-2.5, 0.304292, 0.068844, 0.000000, 0.000000
|
|
362
|
+
-1.5, 0.364136, 0.158615, 0.000000, 0.000000
|
|
363
|
+
-0.5, 0.430211, 0.314615, 0.000672, 0.000000
|
|
364
|
+
0.5, 0.500000, 0.500000, 0.500000, 0.500000
|
|
365
|
+
1.5, 0.569789, 0.685385, 0.999328, 1.000000
|
|
366
|
+
2.5, 0.635864, 0.841385, 1.000000, 1.000000
|
|
367
|
+
3.5, 0.695708, 0.931156, 1.000000, 1.000000
|
|
368
|
+
4.5, 0.748313, 0.972397, 1.000000, 1.000000
|
|
369
|
+
5.5, 0.793729, 0.989382, 1.000000, 1.000000
|
|
370
|
+
|
|
371
|
+
With the highest value of the smoothing parameter (3.0), the resulting line is
|
|
372
|
+
relatively straight. With the lowest smoothing parameter (0.0), the result is
|
|
373
|
+
identical to a function with two second-order discontinuities.
|
|
374
|
+
|
|
375
|
+
smooth_max1
|
|
376
|
+
___________
|
|
377
|
+
|
|
378
|
+
Smoothing kernel for approximating the maximum function for two values based on the
|
|
379
|
+
"LogSumExp" function.
|
|
380
|
+
|
|
381
|
+
:math:`f_{max}(x, y, c) = c \cdot ln(exp(x/c)+exp(y/c))`
|
|
382
|
+
|
|
383
|
+
The following example shows the different degree of approximation of the maximum
|
|
384
|
+
function for four different smoothing parameters:
|
|
385
|
+
|
|
386
|
+
>>> for value in range(11):
|
|
387
|
+
... if value == 0:
|
|
388
|
+
... round_("y_value, par=3.0, par=1.0, par=0.3, par=0.0")
|
|
389
|
+
... round_(value, width=7, lfill=" ", end=", ")
|
|
390
|
+
... for idx, parameter in enumerate([3.0, 1.0, 0.3, 0.0]):
|
|
391
|
+
... round_(smoothutils.smooth_max1(5.0, value, parameter),
|
|
392
|
+
... width=8, rfill="0", end="")
|
|
393
|
+
... if idx < 3:
|
|
394
|
+
... round_("", end=", ")
|
|
395
|
+
... else:
|
|
396
|
+
... round_("")
|
|
397
|
+
y_value, par=3.0, par=1.0, par=0.3, par=0.0
|
|
398
|
+
0, 5.519024, 5.006715, 5.000000, 5.000000
|
|
399
|
+
1, 5.701888, 5.018150, 5.000000, 5.000000
|
|
400
|
+
2, 5.939785, 5.048587, 5.000014, 5.000000
|
|
401
|
+
3, 6.243110, 5.126928, 5.000382, 5.000000
|
|
402
|
+
4, 6.620917, 5.313262, 5.010516, 5.000000
|
|
403
|
+
5, 7.079442, 5.693147, 5.207944, 5.000000
|
|
404
|
+
6, 7.620917, 6.313262, 6.010516, 6.000000
|
|
405
|
+
7, 8.243110, 7.126928, 7.000382, 7.000000
|
|
406
|
+
8, 8.939785, 8.048587, 8.000014, 8.000000
|
|
407
|
+
9, 9.701888, 9.018150, 9.000000, 9.000000
|
|
408
|
+
10, 10.519024, 10.006715, 10.00000, 10.00000
|
|
409
|
+
|
|
410
|
+
With the highest value of the smoothing parameter (3.0), the resulting line is
|
|
411
|
+
relatively straight. With the lowest smoothing parameter (0.0), the result is
|
|
412
|
+
identical to the usual (discontinuous) maximum function.
|
|
413
|
+
|
|
414
|
+
Function `smooth_max1` protects itself against numerical underflow and overflow. In
|
|
415
|
+
the following example, extreme values are added to both the `x` and the `y` value of 5
|
|
416
|
+
and 6, respectively. The degree of smoothing is always identical:
|
|
417
|
+
|
|
418
|
+
>>> for test in ["-1e8", "0.0", "1e8"]:
|
|
419
|
+
... round_(test, end=", ")
|
|
420
|
+
... test = float(test)
|
|
421
|
+
... round_(smoothutils.smooth_max1(test+5.0, test+6.0, 1.0)-test)
|
|
422
|
+
-1e8, 6.313262
|
|
423
|
+
0.0, 6.313262
|
|
424
|
+
1e8, 6.313262
|
|
425
|
+
|
|
426
|
+
smooth_min1
|
|
427
|
+
___________
|
|
428
|
+
|
|
429
|
+
Smoothing kernel for approximating the minimum function for two values based on the
|
|
430
|
+
LogSumExp function.
|
|
431
|
+
|
|
432
|
+
:math:`f_{max}(x, y, c) = -c \cdot ln(exp(x/-c)+exp(y/-c))`
|
|
433
|
+
|
|
434
|
+
The following example shows the different degree of approximation of the minimum
|
|
435
|
+
function for four different smoothing parameters:
|
|
436
|
+
|
|
437
|
+
>>> for value in range(11):
|
|
438
|
+
... if value == 0:
|
|
439
|
+
... round_("y_value, par=3.0, par=1.0, par=0.3, par=0.0")
|
|
440
|
+
... round_(value, width=7, lfill=" ", end=", ")
|
|
441
|
+
... for idx, parameter in enumerate([3.0, 1.0, 0.3, 0.0]):
|
|
442
|
+
... round_(smoothutils.smooth_min1(5.0, value, parameter),
|
|
443
|
+
... width=8, rfill="0", end="")
|
|
444
|
+
... if idx < 3:
|
|
445
|
+
... round_("", end=", ")
|
|
446
|
+
... else:
|
|
447
|
+
... round_("")
|
|
448
|
+
y_value, par=3.0, par=1.0, par=0.3, par=0.0
|
|
449
|
+
0, -0.519024, -0.006715, 0.000000, 0.000000
|
|
450
|
+
1, 0.298112, 0.981850, 1.000000, 1.000000
|
|
451
|
+
2, 1.060215, 1.951413, 1.999986, 2.000000
|
|
452
|
+
3, 1.756890, 2.873072, 2.999618, 3.000000
|
|
453
|
+
4, 2.379083, 3.686738, 3.989484, 4.000000
|
|
454
|
+
5, 2.920558, 4.306853, 4.792056, 5.000000
|
|
455
|
+
6, 3.379083, 4.686738, 4.989484, 5.000000
|
|
456
|
+
7, 3.756890, 4.873072, 4.999618, 5.000000
|
|
457
|
+
8, 4.060215, 4.951413, 4.999986, 5.000000
|
|
458
|
+
9, 4.298112, 4.981850, 5.000000, 5.000000
|
|
459
|
+
10, 4.480976, 4.993285, 5.000000, 5.000000
|
|
460
|
+
|
|
461
|
+
With the highest value of the smoothing parameter (3.0), the resulting line is
|
|
462
|
+
relatively straight. With the lowest smoothing parameter (0.0), the result is
|
|
463
|
+
identical to the usual (discontinuous) minimum function.
|
|
464
|
+
|
|
465
|
+
Function `smooth_min1` protects itself against numerical underflow and overflow. In
|
|
466
|
+
the following example, extreme values are added to both the `x` and the `y` value of 5
|
|
467
|
+
and 6, respectively. The degree of smoothing is always identical:
|
|
468
|
+
|
|
469
|
+
>>> for test in ["-1e8", " 0.0", " 1e8"]:
|
|
470
|
+
... round_(test, end=", ")
|
|
471
|
+
... test = float(test)
|
|
472
|
+
... round_(smoothutils.smooth_min1(test+5.0, test+6.0, 1.0)-test)
|
|
473
|
+
-1e8, 4.686738
|
|
474
|
+
0.0, 4.686738
|
|
475
|
+
1e8, 4.686738
|
|
476
|
+
|
|
477
|
+
smooth_max2
|
|
478
|
+
___________
|
|
479
|
+
|
|
480
|
+
Smoothing kernel for approximating the maximum function for three values based on the
|
|
481
|
+
"LogSumExp" function.
|
|
482
|
+
|
|
483
|
+
:math:`f_{max}(x, y, z, c) = c \cdot ln(exp(x/c)+exp(y/c)+exp(z/c))`
|
|
484
|
+
|
|
485
|
+
The following example shows the different degree of approximation of the maximum
|
|
486
|
+
function for four different smoothing parameters:
|
|
487
|
+
|
|
488
|
+
>>> for value in range(11):
|
|
489
|
+
... if value == 0:
|
|
490
|
+
... round_("z_value, par=3.0, par=1.0, par=0.3, par=0.0")
|
|
491
|
+
... round_(value, width=7, lfill=" ", end=", ")
|
|
492
|
+
... for idx, parameter in enumerate([3.0, 1.0, 0.3, 0.0]):
|
|
493
|
+
... round_(smoothutils.smooth_max2(-50.0, 5.0, value, parameter),
|
|
494
|
+
... width=8, rfill="0", end="")
|
|
495
|
+
... if idx < 3:
|
|
496
|
+
... round_("", end=", ")
|
|
497
|
+
... else:
|
|
498
|
+
... round_("")
|
|
499
|
+
z_value, par=3.0, par=1.0, par=0.3, par=0.0
|
|
500
|
+
0, 5.519024, 5.006715, 5.000000, 5.000000
|
|
501
|
+
1, 5.701888, 5.018150, 5.000000, 5.000000
|
|
502
|
+
2, 5.939785, 5.048587, 5.000014, 5.000000
|
|
503
|
+
3, 6.243110, 5.126928, 5.000382, 5.000000
|
|
504
|
+
4, 6.620917, 5.313262, 5.010516, 5.000000
|
|
505
|
+
5, 7.079442, 5.693147, 5.207944, 5.000000
|
|
506
|
+
6, 7.620917, 6.313262, 6.010516, 6.000000
|
|
507
|
+
7, 8.243110, 7.126928, 7.000382, 7.000000
|
|
508
|
+
8, 8.939785, 8.048587, 8.000014, 8.000000
|
|
509
|
+
9, 9.701888, 9.018150, 9.000000, 9.000000
|
|
510
|
+
10, 10.519024, 10.006715, 10.00000, 10.00000
|
|
511
|
+
|
|
512
|
+
With the highest value of the smoothing parameter (3.0), the resulting line is
|
|
513
|
+
relatively straight. With the lowest smoothing parameter (0.0), the result is
|
|
514
|
+
identical to the usual (discontinuous) maximum function.
|
|
515
|
+
|
|
516
|
+
Function `smooth_max2` protects itself against numerical underflow and overflow. In
|
|
517
|
+
the following example, extreme values are added to the `x`, the `y`, and the `z` value
|
|
518
|
+
of 5, 6, and 7, respectively. The degree of smoothing is always identical:
|
|
519
|
+
|
|
520
|
+
>>> for test in ["-1e8", "0.0", "1e8"]:
|
|
521
|
+
... round_(test, end=", ")
|
|
522
|
+
... test = float(test)
|
|
523
|
+
... round_(smoothutils.smooth_max2(test+5.0, test+6.0, test+7.0, 1.0)-test)
|
|
524
|
+
-1e8, 7.407606
|
|
525
|
+
0.0, 7.407606
|
|
526
|
+
1e8, 7.407606
|
|
527
|
+
|
|
528
|
+
smooth_min2
|
|
529
|
+
___________
|
|
530
|
+
|
|
531
|
+
Smoothing kernel for approximating the minimum function for two values based on the
|
|
532
|
+
LogSumExp function.
|
|
533
|
+
|
|
534
|
+
:math:`f_{max}(x, y, z, c) = -c \cdot ln(exp(x/-c)+exp(y/-c)+exp(z/-c))`
|
|
535
|
+
|
|
536
|
+
The following example shows the different degree of approximation of the minimum
|
|
537
|
+
function for four different smoothing parameters:
|
|
538
|
+
|
|
539
|
+
>>> for value in range(11):
|
|
540
|
+
... if value == 0:
|
|
541
|
+
... round_("z_value, par=3.0, par=1.0, par=0.3, par=0.0")
|
|
542
|
+
... round_(value, width=7, lfill=" ", end=", ")
|
|
543
|
+
... for idx, parameter in enumerate([3.0, 1.0, 0.3, 0.0]):
|
|
544
|
+
... round_(smoothutils.smooth_min2(60.0, 5.0, value, parameter),
|
|
545
|
+
... width=8, rfill="0", end="")
|
|
546
|
+
... if idx < 3:
|
|
547
|
+
... round_("", end=", ")
|
|
548
|
+
... else:
|
|
549
|
+
... round_("")
|
|
550
|
+
z_value, par=3.0, par=1.0, par=0.3, par=0.0
|
|
551
|
+
0, -0.519024, -0.006715, 0.000000, 0.000000
|
|
552
|
+
1, 0.298112, 0.981850, 1.000000, 1.000000
|
|
553
|
+
2, 1.060215, 1.951413, 1.999986, 2.000000
|
|
554
|
+
3, 1.756890, 2.873072, 2.999618, 3.000000
|
|
555
|
+
4, 2.379083, 3.686738, 3.989484, 4.000000
|
|
556
|
+
5, 2.920558, 4.306853, 4.792056, 5.000000
|
|
557
|
+
6, 3.379083, 4.686738, 4.989484, 5.000000
|
|
558
|
+
7, 3.756890, 4.873072, 4.999618, 5.000000
|
|
559
|
+
8, 4.060215, 4.951413, 4.999986, 5.000000
|
|
560
|
+
9, 4.298112, 4.981850, 5.000000, 5.000000
|
|
561
|
+
10, 4.480976, 4.993285, 5.000000, 5.000000
|
|
562
|
+
|
|
563
|
+
With the highest value of the smoothing parameter (3.0), the resulting line is
|
|
564
|
+
relatively straight. With the lowest smoothing parameter (0.0), the result is
|
|
565
|
+
identical to the usual (discontinuous) minimum function.
|
|
566
|
+
|
|
567
|
+
Function `smooth_min2` protects itself against numerical underflow and overflow. In
|
|
568
|
+
the following example, extreme values are added to the `x`, the `y`, and the `z` value
|
|
569
|
+
of 5, 6, and 7, respectively. The degree of smoothing is always identical:
|
|
570
|
+
|
|
571
|
+
>>> for test in ["-1e8", " 0.0", " 1e8"]:
|
|
572
|
+
... round_(test, end=", ")
|
|
573
|
+
... test = float(test)
|
|
574
|
+
... round_(smoothutils.smooth_min2(test+5.0, test+6.0, test+7.0, 1.0)-test)
|
|
575
|
+
-1e8, 4.592394
|
|
576
|
+
0.0, 4.592394
|
|
577
|
+
1e8, 4.592394
|
|
578
|
+
|
|
579
|
+
|
|
580
|
+
filter_norm
|
|
581
|
+
___________
|
|
582
|
+
|
|
583
|
+
Filter kernel based on the normal distribution for smoothly turning additional function
|
|
584
|
+
terms around specific values on or off.
|
|
585
|
+
|
|
586
|
+
:math:`f_{norm}(x) =
|
|
587
|
+
exp \left( -\frac{1}{2} \cdot \left( \frac{x - \mu}{\sigma} \right)^2 \right)`
|
|
588
|
+
|
|
589
|
+
The higher the given sigma value, the wider is `filter_norm`'s radius of action. In
|
|
590
|
+
contrast to the complete normal distribution, the highest value is always one (except
|
|
591
|
+
for a sigma value of zero, for which `filter_norm` should never impact any results):
|
|
592
|
+
|
|
593
|
+
>>> for value in range(11):
|
|
594
|
+
... if value == 0:
|
|
595
|
+
... print(" x, sigma=2, sigma=1, sigma=0")
|
|
596
|
+
... round_(value, width=7, lfill=" ", end=", ")
|
|
597
|
+
... for i, sigma in enumerate([2.0, 1.0, 0.0]):
|
|
598
|
+
... result = smoothutils.filter_norm(value, 5.0, sigma)
|
|
599
|
+
... round_(result, width=8, rfill="0", end="")
|
|
600
|
+
... if i < 2:
|
|
601
|
+
... round_("", end=", ")
|
|
602
|
+
... else:
|
|
603
|
+
... round_("")
|
|
604
|
+
x, sigma=2, sigma=1, sigma=0
|
|
605
|
+
0, 0.043937, 0.000004, 0.000000
|
|
606
|
+
1, 0.135335, 0.000335, 0.000000
|
|
607
|
+
2, 0.324652, 0.011109, 0.000000
|
|
608
|
+
3, 0.606531, 0.135335, 0.000000
|
|
609
|
+
4, 0.882497, 0.606531, 0.000000
|
|
610
|
+
5, 1.000000, 1.000000, 0.000000
|
|
611
|
+
6, 0.882497, 0.606531, 0.000000
|
|
612
|
+
7, 0.606531, 0.135335, 0.000000
|
|
613
|
+
8, 0.324652, 0.011109, 0.000000
|
|
614
|
+
9, 0.135335, 0.000335, 0.000000
|
|
615
|
+
10, 0.043937, 0.000004, 0.000000
|
|
616
|
+
|
|
617
|
+
"""
|
|
618
|
+
|
|
619
|
+
import cython
|
|
620
|
+
from libc.math cimport exp, log
|
|
621
|
+
from libc.math cimport INFINITY as inf
|
|
622
|
+
|
|
623
|
+
cdef double MAX_LOG_FLOAT = 700.0
|
|
624
|
+
|
|
625
|
+
|
|
626
|
+
cpdef inline double _max1(
|
|
627
|
+
double x_value,
|
|
628
|
+
double y_value,
|
|
629
|
+
) noexcept nogil:
|
|
630
|
+
"""The usual (discontinuous) maximum function for two values.
|
|
631
|
+
|
|
632
|
+
>>> from hydpy.cythons import smoothutils
|
|
633
|
+
>>> from hydpy import round_
|
|
634
|
+
>>> round_(smoothutils._max1(1.5, 2.5))
|
|
635
|
+
2.5
|
|
636
|
+
>>> round_(smoothutils._max1(-1.5, -2.5))
|
|
637
|
+
-1.5
|
|
638
|
+
>>> round_(smoothutils._max1(0.0, 0.0))
|
|
639
|
+
0.0
|
|
640
|
+
|
|
641
|
+
"""
|
|
642
|
+
if x_value > y_value:
|
|
643
|
+
return x_value
|
|
644
|
+
return y_value
|
|
645
|
+
|
|
646
|
+
|
|
647
|
+
cpdef inline double _max2(
|
|
648
|
+
double x_value,
|
|
649
|
+
double y_value,
|
|
650
|
+
double z_value,
|
|
651
|
+
) noexcept nogil:
|
|
652
|
+
"""The usual (discontinuous) maximum function for three values.
|
|
653
|
+
|
|
654
|
+
>>> from hydpy.cythons import smoothutils
|
|
655
|
+
>>> from hydpy import round_
|
|
656
|
+
>>> round_(smoothutils._max2(1.5, 2.5, 2.0))
|
|
657
|
+
2.5
|
|
658
|
+
>>> round_(smoothutils._max2(-1.5, -2.5, -2.0))
|
|
659
|
+
-1.5
|
|
660
|
+
>>> round_(smoothutils._max2(-1.5, -2.5, 2.0))
|
|
661
|
+
2.0
|
|
662
|
+
>>> round_(smoothutils._max2(0.0, 0.0, 0.0))
|
|
663
|
+
0.0
|
|
664
|
+
|
|
665
|
+
"""
|
|
666
|
+
if x_value > y_value:
|
|
667
|
+
if x_value > z_value:
|
|
668
|
+
return x_value
|
|
669
|
+
return z_value
|
|
670
|
+
if y_value > z_value:
|
|
671
|
+
return y_value
|
|
672
|
+
return z_value
|
|
673
|
+
|
|
674
|
+
|
|
675
|
+
cpdef inline double _min(double x_value, double y_value) noexcept nogil:
|
|
676
|
+
"""The usual (discontinuous) minimum function.
|
|
677
|
+
|
|
678
|
+
>>> from hydpy.cythons import smoothutils
|
|
679
|
+
>>> from hydpy import round_
|
|
680
|
+
>>> round_(smoothutils._min(1.5, 2.5))
|
|
681
|
+
1.5
|
|
682
|
+
>>> round_(smoothutils._min(-1.5, -2.5))
|
|
683
|
+
-2.5
|
|
684
|
+
>>> round_(smoothutils._min(0.0, 0.0))
|
|
685
|
+
0.0
|
|
686
|
+
|
|
687
|
+
"""
|
|
688
|
+
if x_value < y_value:
|
|
689
|
+
return x_value
|
|
690
|
+
return y_value
|
|
691
|
+
|
|
692
|
+
|
|
693
|
+
cpdef inline double smooth_logistic1(double value, double parameter) noexcept nogil:
|
|
694
|
+
"""Smoothing kernel based on the logistic function."""
|
|
695
|
+
cdef double temp
|
|
696
|
+
if parameter <= 0.0:
|
|
697
|
+
if value < 0.0:
|
|
698
|
+
return 0.0
|
|
699
|
+
elif value == 0.0:
|
|
700
|
+
return 0.5
|
|
701
|
+
return 1.0
|
|
702
|
+
temp = value/parameter
|
|
703
|
+
if temp < MAX_LOG_FLOAT:
|
|
704
|
+
return 1.0 - 1.0 / (1.0 + exp(temp))
|
|
705
|
+
return 1.0
|
|
706
|
+
|
|
707
|
+
|
|
708
|
+
cpdef inline double smooth_logistic1_derivative2(
|
|
709
|
+
double value, double parameter) noexcept nogil:
|
|
710
|
+
"""Derivative of the function `smooth_logistic1` with respect to its input value."""
|
|
711
|
+
cdef double temp
|
|
712
|
+
if parameter <= 0.0:
|
|
713
|
+
if value == 0.0:
|
|
714
|
+
return inf
|
|
715
|
+
return 0.0
|
|
716
|
+
temp = value / parameter
|
|
717
|
+
if temp < MAX_LOG_FLOAT:
|
|
718
|
+
return exp(temp) / (parameter * (exp(temp) + 1.0) ** 2)
|
|
719
|
+
return 0.0
|
|
720
|
+
|
|
721
|
+
|
|
722
|
+
cpdef inline double smooth_logistic2(double value, double parameter) noexcept nogil:
|
|
723
|
+
"""Smoothing kernel based on the integral of the logistic function."""
|
|
724
|
+
cdef double temp
|
|
725
|
+
if parameter <= 0.0:
|
|
726
|
+
if value < 0.0:
|
|
727
|
+
return 0.0
|
|
728
|
+
return value
|
|
729
|
+
temp = value / parameter
|
|
730
|
+
if temp < MAX_LOG_FLOAT:
|
|
731
|
+
return parameter * log(1.0 + exp(temp))
|
|
732
|
+
return value
|
|
733
|
+
|
|
734
|
+
cpdef inline double smooth_logistic2_derivative2(
|
|
735
|
+
double value, double parameter) noexcept nogil:
|
|
736
|
+
"""Derivative of the function `smooth_logistic2` with respect to its input value."""
|
|
737
|
+
cdef double temp
|
|
738
|
+
if parameter <= 0.0:
|
|
739
|
+
if value < 0.0:
|
|
740
|
+
return 0.0
|
|
741
|
+
return 1.0
|
|
742
|
+
temp = value / parameter
|
|
743
|
+
if temp < MAX_LOG_FLOAT:
|
|
744
|
+
return exp(temp) / (exp(temp) + 1.0)
|
|
745
|
+
return 1.0
|
|
746
|
+
|
|
747
|
+
|
|
748
|
+
cpdef inline double smooth_logistic2_derivative1(
|
|
749
|
+
double value, double parameter) noexcept nogil:
|
|
750
|
+
"""Derivative of the function `smooth_logistic2` with respect to its smoothing
|
|
751
|
+
parameter."""
|
|
752
|
+
cdef double temp
|
|
753
|
+
if parameter <= 0.0:
|
|
754
|
+
if value == 0.0:
|
|
755
|
+
return log(2.0)
|
|
756
|
+
return 0.0
|
|
757
|
+
temp = -value / parameter
|
|
758
|
+
if temp < MAX_LOG_FLOAT:
|
|
759
|
+
return value/(parameter * exp(-temp) + parameter) + log(exp(temp) + 1.0)
|
|
760
|
+
return 0.0
|
|
761
|
+
|
|
762
|
+
|
|
763
|
+
cpdef inline double smooth_logistic3(double value, double parameter) noexcept nogil:
|
|
764
|
+
"""Smoothing kernel which combines `smooth_logistic1` and `smooth_logistic2` for
|
|
765
|
+
the regularization of functions containing two second order discontinuities."""
|
|
766
|
+
cdef double subtotal_1 = smooth_logistic2(value, parameter)
|
|
767
|
+
cdef double subtotal_2 = 1.0 - smooth_logistic2(1.0 - value, parameter)
|
|
768
|
+
cdef double meta_parameter = max(0.025, 0.54 * parameter**1.17)
|
|
769
|
+
cdef double weight = smooth_logistic1(value - 0.5, meta_parameter)
|
|
770
|
+
return (1.0 - weight) * subtotal_1 + weight * subtotal_2
|
|
771
|
+
|
|
772
|
+
|
|
773
|
+
cpdef inline double smooth_max1(
|
|
774
|
+
double x_value,
|
|
775
|
+
double y_value,
|
|
776
|
+
double parameter,
|
|
777
|
+
) noexcept nogil:
|
|
778
|
+
"""Smoothing kernel for approximating the maximum function for two values based on
|
|
779
|
+
the LogSumExp function."""
|
|
780
|
+
cdef double m_temp, x_temp, y_temp
|
|
781
|
+
m_temp = _max1(x_value, y_value)
|
|
782
|
+
if parameter <= 0.:
|
|
783
|
+
return m_temp
|
|
784
|
+
x_temp = exp((x_value - m_temp) / parameter)
|
|
785
|
+
y_temp = exp((y_value - m_temp) / parameter)
|
|
786
|
+
return m_temp + parameter * log(x_temp + y_temp)
|
|
787
|
+
|
|
788
|
+
|
|
789
|
+
cpdef inline double smooth_min1(
|
|
790
|
+
double x_value,
|
|
791
|
+
double y_value,
|
|
792
|
+
double parameter,
|
|
793
|
+
) noexcept nogil:
|
|
794
|
+
"""Smoothing kernel for approximating the minimum function for two values based on
|
|
795
|
+
the LogSumExp function."""
|
|
796
|
+
return -smooth_max1(-x_value, -y_value, parameter)
|
|
797
|
+
|
|
798
|
+
|
|
799
|
+
cpdef inline double smooth_max2(
|
|
800
|
+
double x_value,
|
|
801
|
+
double y_value,
|
|
802
|
+
double z_value,
|
|
803
|
+
double parameter,
|
|
804
|
+
) noexcept nogil:
|
|
805
|
+
"""Smoothing kernel for approximating the maximum function for three values based
|
|
806
|
+
on the LogSumExp function."""
|
|
807
|
+
cdef double m_temp, x_temp, y_temp, z_temp
|
|
808
|
+
m_temp = _max2(x_value, y_value, z_value)
|
|
809
|
+
if parameter <= 0.:
|
|
810
|
+
return m_temp
|
|
811
|
+
x_temp = exp((x_value - m_temp) / parameter)
|
|
812
|
+
y_temp = exp((y_value - m_temp) / parameter)
|
|
813
|
+
z_temp = exp((z_value - m_temp) / parameter)
|
|
814
|
+
return m_temp + parameter * log(x_temp + y_temp + z_temp)
|
|
815
|
+
|
|
816
|
+
|
|
817
|
+
cpdef inline double smooth_min2(
|
|
818
|
+
double x_value,
|
|
819
|
+
double y_value,
|
|
820
|
+
double z_value,
|
|
821
|
+
double parameter,
|
|
822
|
+
) noexcept nogil:
|
|
823
|
+
"""Smoothing kernel for approximating the minimum function for three values based
|
|
824
|
+
on the LogSumExp function."""
|
|
825
|
+
return -smooth_max2(-x_value, -y_value, -z_value, parameter)
|
|
826
|
+
|
|
827
|
+
|
|
828
|
+
cpdef double filter_norm(double value, double mean, double std) noexcept nogil:
|
|
829
|
+
"""Filter kernel based on the normal distribution for smoothly turning additional
|
|
830
|
+
function terms around specific values on or off."""
|
|
831
|
+
if std > 0.0:
|
|
832
|
+
return exp(-0.5 * ((value - mean) / std) ** 2)
|
|
833
|
+
return 0.0
|