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,650 @@
|
|
|
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
|
+
"""This module gives Python objects pointer access to C variables of type
|
|
11
|
+
`double` via Cython.
|
|
12
|
+
|
|
13
|
+
Module |pointerutils| implements the following Cython extension types:
|
|
14
|
+
* |DoubleBase|: Base class, only for inheritance.
|
|
15
|
+
* |Double|: For C variables of type double.
|
|
16
|
+
* |PDouble|: For C pointers referencing a single C variable of type double.
|
|
17
|
+
* |PPDouble|: For C pointers referencing multiple C variables of type double.
|
|
18
|
+
|
|
19
|
+
Classes |Double| and |PDouble| support arithmetic operations in a similar
|
|
20
|
+
manner as the immutable standard data type for floating-point operations
|
|
21
|
+
(|float|). |Double| and |PDouble| should be preferred over |float| only
|
|
22
|
+
when their pointer functionality is required. At the moment, the only usage
|
|
23
|
+
of |Double| and |PDouble| within *HydPy* is to directly share information
|
|
24
|
+
between |NodeSequence| objects of |Node| instances and |LinkSequence|
|
|
25
|
+
objects of |Model| instances handled by |Element| instances.
|
|
26
|
+
|
|
27
|
+
The following examples try to give an idea of the purpose of using pointers
|
|
28
|
+
in *HydPy*.
|
|
29
|
+
|
|
30
|
+
To use the |numpy| |numpy.ndarray| offers the advantage to be able to address
|
|
31
|
+
the same data with different Python and Cython objects:
|
|
32
|
+
|
|
33
|
+
>>> import numpy
|
|
34
|
+
>>> from hydpy.cythons.pointerutils import Double, PDouble
|
|
35
|
+
>>> xs = numpy.zeros(5)
|
|
36
|
+
>>> ys = xs[:]
|
|
37
|
+
>>> xs[1] = 1.0
|
|
38
|
+
>>> ys[3] = 3.0
|
|
39
|
+
>>> print(all(xs == ys), xs is ys)
|
|
40
|
+
True False
|
|
41
|
+
|
|
42
|
+
Both "names" `x` and `y` refer to the same data. Hence data can
|
|
43
|
+
easily be shared between different objects, no matter if they are Python
|
|
44
|
+
or Cython types. Unfortunately, |numpy.ndarray| is primarily
|
|
45
|
+
designed to handle at least 1-dimensional data. Using it for scalar values
|
|
46
|
+
stored within a "0-dimensional array" is possible, but has some drawbacks.
|
|
47
|
+
Hence, one would usually use the Python build in |float| for scalar values:
|
|
48
|
+
|
|
49
|
+
>>> x = 0.0
|
|
50
|
+
>>> y = x
|
|
51
|
+
>>> x = 1.0
|
|
52
|
+
>>> print(x == y, x is y)
|
|
53
|
+
False False
|
|
54
|
+
|
|
55
|
+
Now `x` and `y` refer to different data. As an alternative, C implements
|
|
56
|
+
the concept of pointers. Wrapped in Cython objects of the types |Double|
|
|
57
|
+
and |PDouble|, this concept provides the following benefit:
|
|
58
|
+
|
|
59
|
+
>>> dx = Double(0.0)
|
|
60
|
+
>>> dx
|
|
61
|
+
Double(0.0)
|
|
62
|
+
>>> px = PDouble(dx)
|
|
63
|
+
>>> px
|
|
64
|
+
PDouble(Double(0.0))
|
|
65
|
+
>>> dx.setvalue(1.0)
|
|
66
|
+
>>> dx
|
|
67
|
+
Double(1.0)
|
|
68
|
+
>>> px
|
|
69
|
+
PDouble(Double(1.0))
|
|
70
|
+
>>> px.setvalue(2.0)
|
|
71
|
+
>>> dx
|
|
72
|
+
Double(2.0)
|
|
73
|
+
>>> px
|
|
74
|
+
PDouble(Double(2.0))
|
|
75
|
+
|
|
76
|
+
|Double| and |PDouble| implement many convenience functions, allowing,
|
|
77
|
+
for example, to use them in numerical calculations as if they were |float|
|
|
78
|
+
objects. For demonstration purposes, we prepare two objects with different v
|
|
79
|
+
alues of each type, respectively:
|
|
80
|
+
|
|
81
|
+
>>> fx, fy = 1.0, -2.3
|
|
82
|
+
>>> dx, dy = Double(fx), Double(fy)
|
|
83
|
+
>>> px, py = PDouble(dx), PDouble(dy)
|
|
84
|
+
|
|
85
|
+
You can combine |Double|, |PDouble| and |float| in any calculation.
|
|
86
|
+
The following example demonstrates all possible combinations using the
|
|
87
|
+
`add` operator:
|
|
88
|
+
|
|
89
|
+
>>> from hydpy import round_
|
|
90
|
+
>>> round_(dx + dy)
|
|
91
|
+
-1.3
|
|
92
|
+
>>> round_(px + py)
|
|
93
|
+
-1.3
|
|
94
|
+
>>> round_(dx + py)
|
|
95
|
+
-1.3
|
|
96
|
+
>>> round_(py + dx)
|
|
97
|
+
-1.3
|
|
98
|
+
>>> round_(dx + fy)
|
|
99
|
+
-1.3
|
|
100
|
+
>>> round_(fy + dx)
|
|
101
|
+
-1.3
|
|
102
|
+
>>> round_(py + fx)
|
|
103
|
+
-1.3
|
|
104
|
+
>>> round_(fx + py)
|
|
105
|
+
-1.3
|
|
106
|
+
|
|
107
|
+
The following other binary and unary operators are supported as well:
|
|
108
|
+
|
|
109
|
+
>>> round_((fx - fy) + (dx - dy) + (px - py))
|
|
110
|
+
9.9
|
|
111
|
+
>>> round_((fx * fy) + (dx * dy) + (px * py))
|
|
112
|
+
-6.9
|
|
113
|
+
>>> round_((fx / fy) + (dx / dy) + (px / py))
|
|
114
|
+
-1.304348
|
|
115
|
+
>>> round_((fx // fy) + (dx // dy) + (px // py))
|
|
116
|
+
-3.0
|
|
117
|
+
>>> round_((fx % fy) + (dx % dy) + (px % py))
|
|
118
|
+
-3.9
|
|
119
|
+
>>> round_((2.0**fy) + (Double(2.0)**dy) + (PDouble(Double(2.0))**py))
|
|
120
|
+
0.609189
|
|
121
|
+
|
|
122
|
+
>>> round_(+fy + +dy + +py)
|
|
123
|
+
-6.9
|
|
124
|
+
>>> round_(-fy + -dy + -py)
|
|
125
|
+
6.9
|
|
126
|
+
>>> round_(1.0/fy + ~dy + ~py)
|
|
127
|
+
-1.304348
|
|
128
|
+
|
|
129
|
+
We support the following type conversions:
|
|
130
|
+
|
|
131
|
+
>>> str(dx), int(px), float(py), bool(py)
|
|
132
|
+
('1.0', 1, -2.3, True)
|
|
133
|
+
|
|
134
|
+
All comparison operators are supported:
|
|
135
|
+
|
|
136
|
+
>>> (dx < dx, dx <= dx, dx==dx, dx!=dx, dx>=dx, dx>dx)
|
|
137
|
+
(False, True, True, False, True, False)
|
|
138
|
+
>>> (px < py, px <= py, px==py, px!=py, px>=py, px>py)
|
|
139
|
+
(False, False, False, True, True, True)
|
|
140
|
+
>>> (dy < px, dy <= px, dy==px, dy!=px, dy>=px, dy>px)
|
|
141
|
+
(True, True, False, True, False, False)
|
|
142
|
+
|
|
143
|
+
You can apply the familiar in-place operators:
|
|
144
|
+
|
|
145
|
+
>>> dx += 1.0
|
|
146
|
+
>>> round_(dx)
|
|
147
|
+
2.0
|
|
148
|
+
>>> px -= 1.0
|
|
149
|
+
>>> round_(dx)
|
|
150
|
+
1.0
|
|
151
|
+
|
|
152
|
+
>>> dx -= 1.0
|
|
153
|
+
>>> round_(dx)
|
|
154
|
+
0.0
|
|
155
|
+
>>> px += 1.0
|
|
156
|
+
>>> round_(dx)
|
|
157
|
+
1.0
|
|
158
|
+
|
|
159
|
+
>>> dx *= 2.0
|
|
160
|
+
>>> round_(dx)
|
|
161
|
+
2.0
|
|
162
|
+
>>> px /= 2.0
|
|
163
|
+
>>> round_(dx)
|
|
164
|
+
1.0
|
|
165
|
+
|
|
166
|
+
>>> dx /= 2.0
|
|
167
|
+
>>> round_(dx)
|
|
168
|
+
0.5
|
|
169
|
+
>>> px *= 2.0
|
|
170
|
+
>>> round_(dx)
|
|
171
|
+
1.0
|
|
172
|
+
|
|
173
|
+
>>> dx = Double(2.5)
|
|
174
|
+
>>> px = PDouble(dx)
|
|
175
|
+
>>> dx //= 2.0
|
|
176
|
+
>>> round_(dx)
|
|
177
|
+
1.0
|
|
178
|
+
>>> px //= 0.3
|
|
179
|
+
>>> round_(dx)
|
|
180
|
+
3.0
|
|
181
|
+
|
|
182
|
+
>>> dx %= 2.5
|
|
183
|
+
>>> round_(dx)
|
|
184
|
+
0.5
|
|
185
|
+
>>> px %= 0.2
|
|
186
|
+
>>> round_(dx)
|
|
187
|
+
0.1
|
|
188
|
+
|
|
189
|
+
To increase consistency between Python code and Cython code (Cython
|
|
190
|
+
uses `[0]` as dereferencing syntax) as well as between |PDouble| and
|
|
191
|
+
|numpy| arrays (supporting `[:]` slicing), you are allowed to use
|
|
192
|
+
arbitrary objects as indices (actually, |Double| and |PDouble| simply
|
|
193
|
+
ignore them).
|
|
194
|
+
|
|
195
|
+
>>> py[0] = -999.0
|
|
196
|
+
>>> py[:]
|
|
197
|
+
-999.0
|
|
198
|
+
>>> dx[:] = 123.
|
|
199
|
+
>>> dx[0]
|
|
200
|
+
123.0
|
|
201
|
+
|
|
202
|
+
To resemble 0-dimensional |numpy| arrays, |Double| and |PDouble| return
|
|
203
|
+
empty tuples as shape information.
|
|
204
|
+
|
|
205
|
+
>>> print(dx.shape, px.shape)
|
|
206
|
+
() ()
|
|
207
|
+
|
|
208
|
+
Always remember that, even if not immediately evident, you are working with
|
|
209
|
+
pointers.
|
|
210
|
+
|
|
211
|
+
You are allowed to initialise a |PDouble| object without giving a |Double|
|
|
212
|
+
instance to the constructor, but do not do this unless you have an idea
|
|
213
|
+
how to specify the proper memory address later:
|
|
214
|
+
|
|
215
|
+
>>> px = PDouble()
|
|
216
|
+
|
|
217
|
+
You can construct multiple pointers referencing the same double value:
|
|
218
|
+
|
|
219
|
+
>>> dx = Double(1.0)
|
|
220
|
+
>>> px1, px2 = PDouble(dx), PDouble(dx)
|
|
221
|
+
>>> print(dx, px1, px2)
|
|
222
|
+
1.0 1.0 1.0
|
|
223
|
+
>>> dx += 1.0
|
|
224
|
+
>>> print(dx, px1, px2)
|
|
225
|
+
2.0 2.0 2.0
|
|
226
|
+
>>> px1 -= 1.0
|
|
227
|
+
>>> print(dx, px1, px2)
|
|
228
|
+
1.0 1.0 1.0
|
|
229
|
+
|
|
230
|
+
After deleting the original |Double| object, continuing to
|
|
231
|
+
use the associated |PDouble| object(s) corrupts your program, as the
|
|
232
|
+
pointed position in memory is freed for other purposes:
|
|
233
|
+
|
|
234
|
+
>>> del dx
|
|
235
|
+
>>> px1 += 1.0 # Possibly corrupts your program.
|
|
236
|
+
|
|
237
|
+
Note:
|
|
238
|
+
|Double| is used in Python mode only; in Cython mode, the usual
|
|
239
|
+
C type `double` is applied. |PDouble| is also used in Cython mode,
|
|
240
|
+
where it primarily serves the purpose to pass C pointers of type
|
|
241
|
+
`double` from one Cython module to another one.
|
|
242
|
+
|
|
243
|
+
A |PDouble| object can point to the value of a single |Double| object.
|
|
244
|
+
Instead, |PPDouble| allows pointing to an arbitrary number of |Double|
|
|
245
|
+
objects. After initialisation, one needs to specify their `shape`
|
|
246
|
+
first, defining the number of |Double| objects to be taken into account:
|
|
247
|
+
|
|
248
|
+
>>> from hydpy.cythons.pointerutils import PPDouble
|
|
249
|
+
>>> ppdouble = PPDouble()
|
|
250
|
+
>>> ppdouble.shape
|
|
251
|
+
(0,)
|
|
252
|
+
>>> ppdouble[0]
|
|
253
|
+
Traceback (most recent call last):
|
|
254
|
+
...
|
|
255
|
+
RuntimeError: The shape of the actual `PPDouble` instance has not been set yet, which is a necessary preparation before using it.
|
|
256
|
+
>>> ppdouble[0] = 1.0
|
|
257
|
+
Traceback (most recent call last):
|
|
258
|
+
...
|
|
259
|
+
RuntimeError: The shape of the actual `PPDouble` instance has not been set yet, which is a necessary preparation before using it.
|
|
260
|
+
|
|
261
|
+
>>> ppdouble.shape = 4
|
|
262
|
+
>>> ppdouble.shape
|
|
263
|
+
(4,)
|
|
264
|
+
>>> ppdouble.shape = 3
|
|
265
|
+
>>> ppdouble.shape
|
|
266
|
+
(3,)
|
|
267
|
+
|
|
268
|
+
Trying to access values via invalid indices does result in errors
|
|
269
|
+
like the following:
|
|
270
|
+
|
|
271
|
+
>>> ppdouble[-1]
|
|
272
|
+
Traceback (most recent call last):
|
|
273
|
+
...
|
|
274
|
+
IndexError: The actual `PPDouble` instance is of length `3`. Only index values between 0 and 2 are allowed, but the given index is `-1`.
|
|
275
|
+
>>> ppdouble[3] = 1.0
|
|
276
|
+
Traceback (most recent call last):
|
|
277
|
+
...
|
|
278
|
+
IndexError: The actual `PPDouble` instance is of length `3`. Only index values between 0 and 2 are allowed, but the given index is `3`.
|
|
279
|
+
|
|
280
|
+
>>> ppdouble[0]
|
|
281
|
+
Traceback (most recent call last):
|
|
282
|
+
...
|
|
283
|
+
RuntimeError: The pointer of the actual `PPDouble` instance at index `0` requested, but not prepared yet via `set_pointer`.
|
|
284
|
+
>>> ppdouble[0] = 1.0
|
|
285
|
+
Traceback (most recent call last):
|
|
286
|
+
...
|
|
287
|
+
RuntimeError: The pointer of the actual `PPDouble` instance at index `0` requested, but not prepared yet via `set_pointer`.
|
|
288
|
+
|
|
289
|
+
To finally prepare our |PPDouble| object, we need to assign |Double| objects
|
|
290
|
+
to it via method `set_pointer`:
|
|
291
|
+
|
|
292
|
+
>>> d1, d2, d3 = Double(1.0), Double(2.0), Double(3.0)
|
|
293
|
+
>>> ppdouble.set_pointer(d1, 0)
|
|
294
|
+
>>> ppdouble.set_pointer(d2, 1)
|
|
295
|
+
>>> ppdouble.set_pointer(d3, 2)
|
|
296
|
+
|
|
297
|
+
Now we can query and modify the current values of the |Double| objects
|
|
298
|
+
via our |PPDouble| object:
|
|
299
|
+
|
|
300
|
+
>>> print(ppdouble[:])
|
|
301
|
+
[PDouble(Double(1.0)) PDouble(Double(2.0)) PDouble(Double(3.0))]
|
|
302
|
+
|
|
303
|
+
|
|
304
|
+
>>> ppdouble[:2] = 8.0, 9.0
|
|
305
|
+
>>> d3[0] = -1.0
|
|
306
|
+
>>> print(ppdouble[0], d1)
|
|
307
|
+
8.0 8.0
|
|
308
|
+
>>> print(ppdouble[1], d2)
|
|
309
|
+
9.0 9.0
|
|
310
|
+
>>> print(ppdouble[2], d3)
|
|
311
|
+
-1.0 -1.0
|
|
312
|
+
|
|
313
|
+
"""
|
|
314
|
+
|
|
315
|
+
# import...
|
|
316
|
+
# ...from standard library
|
|
317
|
+
import numbers
|
|
318
|
+
import cython
|
|
319
|
+
|
|
320
|
+
# ...from site-packages
|
|
321
|
+
import numpy
|
|
322
|
+
# cimport...
|
|
323
|
+
from cpython.mem cimport PyMem_Malloc, PyMem_Realloc, PyMem_Free
|
|
324
|
+
|
|
325
|
+
# ...from HydPy
|
|
326
|
+
from hydpy import config
|
|
327
|
+
|
|
328
|
+
|
|
329
|
+
cdef inline double conv2double(value):
|
|
330
|
+
"""Convert `value` (`Double`, `PDouble`, `float`, `int` object) to a
|
|
331
|
+
C variable of type double and return it."""
|
|
332
|
+
cdef double _value
|
|
333
|
+
try:
|
|
334
|
+
value = value[0]
|
|
335
|
+
except (TypeError, IndexError):
|
|
336
|
+
pass
|
|
337
|
+
if isinstance(value, Double):
|
|
338
|
+
_value = value.value
|
|
339
|
+
elif isinstance(value, PDouble):
|
|
340
|
+
_value = value.value[0]
|
|
341
|
+
else:
|
|
342
|
+
try:
|
|
343
|
+
_value = value
|
|
344
|
+
except TypeError:
|
|
345
|
+
print(f"Types `Douple` and `PDouble` perform arithmetic methods "
|
|
346
|
+
f"only on objects of type `Double`, `PDouble`, `float` and "
|
|
347
|
+
f"`int` (or similar). The given objects type is "
|
|
348
|
+
f"`{type(value).__name__}`."
|
|
349
|
+
)
|
|
350
|
+
return _value
|
|
351
|
+
|
|
352
|
+
|
|
353
|
+
cdef class DoubleBase:
|
|
354
|
+
"""Base class for |Double| and |PDouble| that implements operators
|
|
355
|
+
which return builtin Python objects."""
|
|
356
|
+
|
|
357
|
+
def __add__(self, other):
|
|
358
|
+
return conv2double(self) + conv2double(other)
|
|
359
|
+
|
|
360
|
+
def __radd__(self, other):
|
|
361
|
+
return conv2double(other) + conv2double(self)
|
|
362
|
+
|
|
363
|
+
def __sub__(self, other):
|
|
364
|
+
return conv2double(self) - conv2double(other)
|
|
365
|
+
|
|
366
|
+
def __rsub__(self, other):
|
|
367
|
+
return conv2double(other) - conv2double(self)
|
|
368
|
+
|
|
369
|
+
def __mul__(self, other):
|
|
370
|
+
return conv2double(self) * conv2double(other)
|
|
371
|
+
|
|
372
|
+
def __rmul__(self, other):
|
|
373
|
+
return conv2double(other) * conv2double(self)
|
|
374
|
+
|
|
375
|
+
def __floordiv__(self, other):
|
|
376
|
+
return conv2double(self) // conv2double(other)
|
|
377
|
+
|
|
378
|
+
def __rfloordiv__(self, other):
|
|
379
|
+
return conv2double(other) // conv2double(self)
|
|
380
|
+
|
|
381
|
+
def __truediv__(self, other):
|
|
382
|
+
return conv2double(self) / conv2double(other)
|
|
383
|
+
|
|
384
|
+
def __rtruediv__(self, other):
|
|
385
|
+
return conv2double(other) / conv2double(self)
|
|
386
|
+
|
|
387
|
+
def __mod__(self, other):
|
|
388
|
+
cdef double x = conv2double(self)
|
|
389
|
+
cdef double y = conv2double(other)
|
|
390
|
+
return x - (x // y) * y
|
|
391
|
+
|
|
392
|
+
def __rmod__(self, other):
|
|
393
|
+
cdef double x = conv2double(other)
|
|
394
|
+
cdef double y = conv2double(self)
|
|
395
|
+
return x - (x // y) * y
|
|
396
|
+
|
|
397
|
+
def __pow__(self, other, z):
|
|
398
|
+
return conv2double(self) ** conv2double(other)
|
|
399
|
+
|
|
400
|
+
def __rpow__(self, other, z):
|
|
401
|
+
return conv2double(other) ** conv2double(self)
|
|
402
|
+
|
|
403
|
+
def __neg__(self):
|
|
404
|
+
return -conv2double(self)
|
|
405
|
+
|
|
406
|
+
def __pos__(self):
|
|
407
|
+
return +conv2double(self)
|
|
408
|
+
|
|
409
|
+
def __abs__(self,):
|
|
410
|
+
return abs(conv2double(self))
|
|
411
|
+
|
|
412
|
+
def __invert__(self):
|
|
413
|
+
return 1./conv2double(self)
|
|
414
|
+
|
|
415
|
+
def __int__(self):
|
|
416
|
+
return int(conv2double(self))
|
|
417
|
+
|
|
418
|
+
def __float__(self):
|
|
419
|
+
return float(conv2double(self))
|
|
420
|
+
|
|
421
|
+
def __str__(self):
|
|
422
|
+
return str(conv2double(self))
|
|
423
|
+
|
|
424
|
+
def __format__(self, digits):
|
|
425
|
+
return format(float(self), digits)
|
|
426
|
+
|
|
427
|
+
def __richcmp__(self, other, numpy.int64_t z):
|
|
428
|
+
cdef double x = conv2double(self)
|
|
429
|
+
cdef double y = conv2double(other)
|
|
430
|
+
if z == 0:
|
|
431
|
+
return x < y
|
|
432
|
+
if z == 1:
|
|
433
|
+
return x <= y
|
|
434
|
+
if z == 2:
|
|
435
|
+
return x == y
|
|
436
|
+
if z == 3:
|
|
437
|
+
return x != y
|
|
438
|
+
if z == 4:
|
|
439
|
+
return x > y
|
|
440
|
+
if z == 5:
|
|
441
|
+
return x >= y
|
|
442
|
+
|
|
443
|
+
@property
|
|
444
|
+
def shape(self):
|
|
445
|
+
return ()
|
|
446
|
+
|
|
447
|
+
|
|
448
|
+
numbers.Real.register(DoubleBase)
|
|
449
|
+
|
|
450
|
+
|
|
451
|
+
@cython.final
|
|
452
|
+
cdef class Double(DoubleBase):
|
|
453
|
+
"""Handle a variable of the C type `double` in Python.
|
|
454
|
+
|
|
455
|
+
Attributes:
|
|
456
|
+
value (double): C variable, directly accessible through Cython only.
|
|
457
|
+
"""
|
|
458
|
+
|
|
459
|
+
def __init__(self, value):
|
|
460
|
+
self.value = value
|
|
461
|
+
|
|
462
|
+
def setvalue(self, value):
|
|
463
|
+
"""Set `value` according to the passed object."""
|
|
464
|
+
self.value = conv2double(value)
|
|
465
|
+
|
|
466
|
+
def __getitem__(self, key):
|
|
467
|
+
return self.value
|
|
468
|
+
|
|
469
|
+
def __setitem__(self, key, value):
|
|
470
|
+
self.value = conv2double(value)
|
|
471
|
+
|
|
472
|
+
def __iadd__(self, x):
|
|
473
|
+
self.value += conv2double(x)
|
|
474
|
+
return self
|
|
475
|
+
|
|
476
|
+
def __isub__(self, x):
|
|
477
|
+
self.value -= conv2double(x)
|
|
478
|
+
return self
|
|
479
|
+
|
|
480
|
+
def __imul__(self, x):
|
|
481
|
+
self.value *= conv2double(x)
|
|
482
|
+
return self
|
|
483
|
+
|
|
484
|
+
def __idiv__(self, x):
|
|
485
|
+
self.value /= conv2double(x)
|
|
486
|
+
return self
|
|
487
|
+
|
|
488
|
+
def __ifloordiv__(self, x):
|
|
489
|
+
self.value //= conv2double(x)
|
|
490
|
+
return self
|
|
491
|
+
|
|
492
|
+
def __itruediv__(self, x):
|
|
493
|
+
self.value /= conv2double(x)
|
|
494
|
+
return self
|
|
495
|
+
|
|
496
|
+
def __imod__(self, x):
|
|
497
|
+
self.value %= conv2double(x)
|
|
498
|
+
return self
|
|
499
|
+
|
|
500
|
+
def __repr__(self):
|
|
501
|
+
return f"Double({conv2double(self)})"
|
|
502
|
+
|
|
503
|
+
|
|
504
|
+
@cython.final
|
|
505
|
+
cdef class PDouble(DoubleBase):
|
|
506
|
+
"""Handle a pointer to a variable of the C type `double` in Python.
|
|
507
|
+
|
|
508
|
+
Attributes:
|
|
509
|
+
p_value (`*double`): C pointer, directly accessible through Cython
|
|
510
|
+
only.
|
|
511
|
+
"""
|
|
512
|
+
|
|
513
|
+
def __init__(self, Double value=None):
|
|
514
|
+
self.p_value = &value.value
|
|
515
|
+
|
|
516
|
+
def setvalue(self, value):
|
|
517
|
+
"""Set the value referenced by `p_value`.
|
|
518
|
+
"""
|
|
519
|
+
self.p_value[0] = conv2double(value)
|
|
520
|
+
|
|
521
|
+
def __getitem__(self, key):
|
|
522
|
+
return self.p_value[0]
|
|
523
|
+
|
|
524
|
+
def __setitem__(self, key, value):
|
|
525
|
+
self.p_value[0] = conv2double(value)
|
|
526
|
+
|
|
527
|
+
def __iadd__(self, x):
|
|
528
|
+
self.p_value[0] += conv2double(x)
|
|
529
|
+
return self
|
|
530
|
+
|
|
531
|
+
def __isub__(self, x):
|
|
532
|
+
self.p_value[0] -= conv2double(x)
|
|
533
|
+
return self
|
|
534
|
+
|
|
535
|
+
def __imul__(self, x):
|
|
536
|
+
self.p_value[0] *= conv2double(x)
|
|
537
|
+
return self
|
|
538
|
+
|
|
539
|
+
def __idiv__(self, x):
|
|
540
|
+
self.p_value[0] /= conv2double(x)
|
|
541
|
+
return self
|
|
542
|
+
|
|
543
|
+
def __ifloordiv__(self, x):
|
|
544
|
+
self.p_value[0] //= conv2double(x)
|
|
545
|
+
return self
|
|
546
|
+
|
|
547
|
+
def __itruediv__(self, x):
|
|
548
|
+
self.p_value[0] /= conv2double(x)
|
|
549
|
+
return self
|
|
550
|
+
|
|
551
|
+
def __imod__(self, x):
|
|
552
|
+
self.p_value[0] %= conv2double(x)
|
|
553
|
+
return self
|
|
554
|
+
|
|
555
|
+
def __repr__(self):
|
|
556
|
+
return f"PDouble(Double({conv2double(self)}))"
|
|
557
|
+
|
|
558
|
+
|
|
559
|
+
@cython.final
|
|
560
|
+
cdef class PPDouble:
|
|
561
|
+
"""Handle pointers to multiple variables of the C type `double` in Python.
|
|
562
|
+
|
|
563
|
+
Attributes:
|
|
564
|
+
* pp_value (`**double`): Second-order C pointer, directly accessible
|
|
565
|
+
through Cython only.
|
|
566
|
+
"""
|
|
567
|
+
def __init__(self):
|
|
568
|
+
self.length = 0
|
|
569
|
+
self._allocated = False
|
|
570
|
+
|
|
571
|
+
def set_pointer(self, value, idx):
|
|
572
|
+
check0(self.length)
|
|
573
|
+
check1(self.length, idx)
|
|
574
|
+
cdef numpy.int64_t _idx = idx
|
|
575
|
+
cdef Double _value = value
|
|
576
|
+
self.pp_value[_idx] = &_value.value
|
|
577
|
+
self.ready[idx] = True
|
|
578
|
+
|
|
579
|
+
def _prepare_indices(self, idxs):
|
|
580
|
+
try:
|
|
581
|
+
return list(range(*idxs.indices(self.length)))
|
|
582
|
+
except AttributeError:
|
|
583
|
+
return [idxs]
|
|
584
|
+
|
|
585
|
+
def __getitem__(self, idxs):
|
|
586
|
+
idxs_ = self._prepare_indices(idxs)
|
|
587
|
+
values = numpy.empty(len(idxs_), dtype=PDouble)
|
|
588
|
+
check0(self.length)
|
|
589
|
+
for i, idx in enumerate(idxs_):
|
|
590
|
+
check1(self.length, idx)
|
|
591
|
+
check2(self.ready, idx)
|
|
592
|
+
pdouble = PDouble(Double(0.))
|
|
593
|
+
pdouble.p_value = self.pp_value[idx]
|
|
594
|
+
values[i] = pdouble
|
|
595
|
+
if isinstance(idxs, int):
|
|
596
|
+
return values[0]
|
|
597
|
+
return values
|
|
598
|
+
|
|
599
|
+
def __setitem__(self, idxs, values):
|
|
600
|
+
cdef float value
|
|
601
|
+
idxs = self._prepare_indices(idxs)
|
|
602
|
+
values = numpy.full(len(idxs), values, dtype=config.NP_FLOAT)
|
|
603
|
+
check0(self.length)
|
|
604
|
+
for idx, value in zip(idxs, values):
|
|
605
|
+
check1(self.length, idx)
|
|
606
|
+
check2(self.ready, idx)
|
|
607
|
+
self.pp_value[idx][0] = value
|
|
608
|
+
|
|
609
|
+
def __dealloc__(self):
|
|
610
|
+
PyMem_Free(self.pp_value)
|
|
611
|
+
|
|
612
|
+
@property
|
|
613
|
+
def shape(self):
|
|
614
|
+
return (self.length,)
|
|
615
|
+
|
|
616
|
+
@shape.setter
|
|
617
|
+
def shape(self, numpy.int64_t length):
|
|
618
|
+
if self._allocated:
|
|
619
|
+
PyMem_Free(self.pp_value)
|
|
620
|
+
self._allocated = True
|
|
621
|
+
self.length = length
|
|
622
|
+
self.ready = numpy.full(length, False, dtype=config.NP_BOOL)
|
|
623
|
+
self.pp_value = <double**> PyMem_Malloc(length * sizeof(double*))
|
|
624
|
+
self._allocated = True
|
|
625
|
+
|
|
626
|
+
|
|
627
|
+
def check0(length):
|
|
628
|
+
if length == 0:
|
|
629
|
+
raise RuntimeError(
|
|
630
|
+
"The shape of the actual `PPDouble` instance "
|
|
631
|
+
"has not been set yet, which is a necessary "
|
|
632
|
+
"preparation before using it."
|
|
633
|
+
)
|
|
634
|
+
|
|
635
|
+
def check1(length, idx):
|
|
636
|
+
if not (0 <= idx < length):
|
|
637
|
+
raise IndexError(
|
|
638
|
+
f"The actual `PPDouble` instance is of length "
|
|
639
|
+
f"`{length}`. Only index values between 0 and "
|
|
640
|
+
f"{length-1} are allowed, but the given "
|
|
641
|
+
f"index is `{idx}`."
|
|
642
|
+
)
|
|
643
|
+
|
|
644
|
+
def check2(ready, idx):
|
|
645
|
+
if not ready[idx]:
|
|
646
|
+
raise RuntimeError(
|
|
647
|
+
f"The pointer of the actual `PPDouble` instance "
|
|
648
|
+
f"at index `{idx}` requested, but not prepared yet "
|
|
649
|
+
f"via `set_pointer`."
|
|
650
|
+
)
|
|
Binary file
|
|
@@ -0,0 +1,35 @@
|
|
|
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
|
+
"""This module defines the Cython declarations related to module |ppolytools|."""
|
|
11
|
+
|
|
12
|
+
cimport numpy
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
cdef class PPoly:
|
|
16
|
+
|
|
17
|
+
# required for usage as an "algorithm" by interputils:
|
|
18
|
+
|
|
19
|
+
cdef public numpy.int64_t nmb_inputs
|
|
20
|
+
cdef public numpy.int64_t nmb_outputs
|
|
21
|
+
cdef public double[:] inputs
|
|
22
|
+
cdef public double[:] outputs
|
|
23
|
+
cdef public double[:] output_derivatives
|
|
24
|
+
|
|
25
|
+
cpdef inline void calculate_values(self) noexcept nogil
|
|
26
|
+
cpdef inline void calculate_derivatives(self, numpy.int64_t idx_input) noexcept nogil
|
|
27
|
+
|
|
28
|
+
# algorithm-specific requirements:
|
|
29
|
+
|
|
30
|
+
cdef public numpy.int64_t nmb_ps
|
|
31
|
+
cdef public numpy.int64_t[:] nmb_cs
|
|
32
|
+
cdef public double[:] x0s
|
|
33
|
+
cdef public double[:, :] cs
|
|
34
|
+
|
|
35
|
+
cpdef inline numpy.int64_t find_index(self) noexcept nogil
|