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.
Files changed (890) hide show
  1. hydpy/__init__.py +275 -0
  2. hydpy/aliases.py +2554 -0
  3. hydpy/auxs/__init__.py +0 -0
  4. hydpy/auxs/anntools.py +1305 -0
  5. hydpy/auxs/armatools.py +883 -0
  6. hydpy/auxs/calibtools.py +3337 -0
  7. hydpy/auxs/interptools.py +1094 -0
  8. hydpy/auxs/iuhtools.py +543 -0
  9. hydpy/auxs/networktools.py +597 -0
  10. hydpy/auxs/ppolytools.py +809 -0
  11. hydpy/auxs/quadtools.py +61 -0
  12. hydpy/auxs/roottools.py +228 -0
  13. hydpy/auxs/smoothtools.py +273 -0
  14. hydpy/auxs/statstools.py +2125 -0
  15. hydpy/auxs/validtools.py +81 -0
  16. hydpy/conf/HydPyConfigBase.xsd +68637 -0
  17. hydpy/conf/HydPyConfigBase.xsdt +358 -0
  18. hydpy/conf/HydPyConfigMultipleRuns.xsd +25 -0
  19. hydpy/conf/HydPyConfigSingleRun.xsd +24 -0
  20. hydpy/conf/__init__.py +0 -0
  21. hydpy/conf/a_coefficients_explicit_lobatto_sequence.npy +0 -0
  22. hydpy/conf/support_points_for_smoothpar_logistic2.npy +0 -0
  23. hydpy/config.py +42 -0
  24. hydpy/core/__init__.py +0 -0
  25. hydpy/core/aliastools.py +214 -0
  26. hydpy/core/autodoctools.py +1947 -0
  27. hydpy/core/auxfiletools.py +1169 -0
  28. hydpy/core/devicetools.py +3810 -0
  29. hydpy/core/exceptiontools.py +269 -0
  30. hydpy/core/filetools.py +1985 -0
  31. hydpy/core/hydpytools.py +3089 -0
  32. hydpy/core/importtools.py +1398 -0
  33. hydpy/core/indextools.py +345 -0
  34. hydpy/core/itemtools.py +1849 -0
  35. hydpy/core/masktools.py +460 -0
  36. hydpy/core/modeltools.py +4868 -0
  37. hydpy/core/netcdftools.py +2683 -0
  38. hydpy/core/objecttools.py +2023 -0
  39. hydpy/core/optiontools.py +1045 -0
  40. hydpy/core/parametertools.py +4674 -0
  41. hydpy/core/printtools.py +222 -0
  42. hydpy/core/propertytools.py +643 -0
  43. hydpy/core/pubtools.py +254 -0
  44. hydpy/core/selectiontools.py +1571 -0
  45. hydpy/core/sequencetools.py +4476 -0
  46. hydpy/core/seriestools.py +339 -0
  47. hydpy/core/testtools.py +2483 -0
  48. hydpy/core/timetools.py +3567 -0
  49. hydpy/core/typingtools.py +333 -0
  50. hydpy/core/variabletools.py +2615 -0
  51. hydpy/cythons/__init__.py +24 -0
  52. hydpy/cythons/annutils.pxd +33 -0
  53. hydpy/cythons/annutils.pyi +25 -0
  54. hydpy/cythons/annutils.pyx +120 -0
  55. hydpy/cythons/autogen/__init__.py +0 -0
  56. hydpy/cythons/autogen/annutils.cp313-win_amd64.pyd +0 -0
  57. hydpy/cythons/autogen/annutils.pxd +42 -0
  58. hydpy/cythons/autogen/annutils.pyx +129 -0
  59. hydpy/cythons/autogen/c_arma.cp313-win_amd64.pyd +0 -0
  60. hydpy/cythons/autogen/c_arma.pxd +179 -0
  61. hydpy/cythons/autogen/c_arma.pyx +356 -0
  62. hydpy/cythons/autogen/c_arma_rimorido.cp313-win_amd64.pyd +0 -0
  63. hydpy/cythons/autogen/c_arma_rimorido.pxd +179 -0
  64. hydpy/cythons/autogen/c_arma_rimorido.pyx +356 -0
  65. hydpy/cythons/autogen/c_conv.cp313-win_amd64.pyd +0 -0
  66. hydpy/cythons/autogen/c_conv.pxd +198 -0
  67. hydpy/cythons/autogen/c_conv.pyx +491 -0
  68. hydpy/cythons/autogen/c_conv_idw.cp313-win_amd64.pyd +0 -0
  69. hydpy/cythons/autogen/c_conv_idw.pxd +124 -0
  70. hydpy/cythons/autogen/c_conv_idw.pyx +264 -0
  71. hydpy/cythons/autogen/c_conv_idw_ed.cp313-win_amd64.pyd +0 -0
  72. hydpy/cythons/autogen/c_conv_idw_ed.pxd +197 -0
  73. hydpy/cythons/autogen/c_conv_idw_ed.pyx +481 -0
  74. hydpy/cythons/autogen/c_conv_nn.cp313-win_amd64.pyd +0 -0
  75. hydpy/cythons/autogen/c_conv_nn.pxd +120 -0
  76. hydpy/cythons/autogen/c_conv_nn.pyx +224 -0
  77. hydpy/cythons/autogen/c_dam.cp313-win_amd64.pyd +0 -0
  78. hydpy/cythons/autogen/c_dam.pxd +805 -0
  79. hydpy/cythons/autogen/c_dam.pyx +1477 -0
  80. hydpy/cythons/autogen/c_dam_llake.cp313-win_amd64.pyd +0 -0
  81. hydpy/cythons/autogen/c_dam_llake.pxd +364 -0
  82. hydpy/cythons/autogen/c_dam_llake.pyx +705 -0
  83. hydpy/cythons/autogen/c_dam_lreservoir.cp313-win_amd64.pyd +0 -0
  84. hydpy/cythons/autogen/c_dam_lreservoir.pxd +365 -0
  85. hydpy/cythons/autogen/c_dam_lreservoir.pyx +708 -0
  86. hydpy/cythons/autogen/c_dam_lretention.cp313-win_amd64.pyd +0 -0
  87. hydpy/cythons/autogen/c_dam_lretention.pxd +340 -0
  88. hydpy/cythons/autogen/c_dam_lretention.pyx +625 -0
  89. hydpy/cythons/autogen/c_dam_pump.cp313-win_amd64.pyd +0 -0
  90. hydpy/cythons/autogen/c_dam_pump.pxd +402 -0
  91. hydpy/cythons/autogen/c_dam_pump.pyx +724 -0
  92. hydpy/cythons/autogen/c_dam_pump_sluice.cp313-win_amd64.pyd +0 -0
  93. hydpy/cythons/autogen/c_dam_pump_sluice.pxd +452 -0
  94. hydpy/cythons/autogen/c_dam_pump_sluice.pyx +829 -0
  95. hydpy/cythons/autogen/c_dam_sluice.cp313-win_amd64.pyd +0 -0
  96. hydpy/cythons/autogen/c_dam_sluice.pxd +404 -0
  97. hydpy/cythons/autogen/c_dam_sluice.pyx +726 -0
  98. hydpy/cythons/autogen/c_dam_v001.cp313-win_amd64.pyd +0 -0
  99. hydpy/cythons/autogen/c_dam_v001.pxd +452 -0
  100. hydpy/cythons/autogen/c_dam_v001.pyx +816 -0
  101. hydpy/cythons/autogen/c_dam_v002.cp313-win_amd64.pyd +0 -0
  102. hydpy/cythons/autogen/c_dam_v002.pxd +394 -0
  103. hydpy/cythons/autogen/c_dam_v002.pyx +703 -0
  104. hydpy/cythons/autogen/c_dam_v003.cp313-win_amd64.pyd +0 -0
  105. hydpy/cythons/autogen/c_dam_v003.pxd +417 -0
  106. hydpy/cythons/autogen/c_dam_v003.pyx +744 -0
  107. hydpy/cythons/autogen/c_dam_v004.cp313-win_amd64.pyd +0 -0
  108. hydpy/cythons/autogen/c_dam_v004.pxd +486 -0
  109. hydpy/cythons/autogen/c_dam_v004.pyx +891 -0
  110. hydpy/cythons/autogen/c_dam_v005.cp313-win_amd64.pyd +0 -0
  111. hydpy/cythons/autogen/c_dam_v005.pxd +524 -0
  112. hydpy/cythons/autogen/c_dam_v005.pyx +928 -0
  113. hydpy/cythons/autogen/c_dummy.cp313-win_amd64.pyd +0 -0
  114. hydpy/cythons/autogen/c_dummy.pxd +151 -0
  115. hydpy/cythons/autogen/c_dummy.pyx +263 -0
  116. hydpy/cythons/autogen/c_dummy_interceptedwater.cp313-win_amd64.pyd +0 -0
  117. hydpy/cythons/autogen/c_dummy_interceptedwater.pxd +69 -0
  118. hydpy/cythons/autogen/c_dummy_interceptedwater.pyx +104 -0
  119. hydpy/cythons/autogen/c_dummy_node2node.cp313-win_amd64.pyd +0 -0
  120. hydpy/cythons/autogen/c_dummy_node2node.pxd +89 -0
  121. hydpy/cythons/autogen/c_dummy_node2node.pyx +148 -0
  122. hydpy/cythons/autogen/c_dummy_snowalbedo.cp313-win_amd64.pyd +0 -0
  123. hydpy/cythons/autogen/c_dummy_snowalbedo.pxd +69 -0
  124. hydpy/cythons/autogen/c_dummy_snowalbedo.pyx +104 -0
  125. hydpy/cythons/autogen/c_dummy_snowcover.cp313-win_amd64.pyd +0 -0
  126. hydpy/cythons/autogen/c_dummy_snowcover.pxd +69 -0
  127. hydpy/cythons/autogen/c_dummy_snowcover.pyx +104 -0
  128. hydpy/cythons/autogen/c_dummy_snowycanopy.cp313-win_amd64.pyd +0 -0
  129. hydpy/cythons/autogen/c_dummy_snowycanopy.pxd +69 -0
  130. hydpy/cythons/autogen/c_dummy_snowycanopy.pyx +104 -0
  131. hydpy/cythons/autogen/c_dummy_soilwater.cp313-win_amd64.pyd +0 -0
  132. hydpy/cythons/autogen/c_dummy_soilwater.pxd +69 -0
  133. hydpy/cythons/autogen/c_dummy_soilwater.pyx +104 -0
  134. hydpy/cythons/autogen/c_evap.cp313-win_amd64.pyd +0 -0
  135. hydpy/cythons/autogen/c_evap.pxd +1029 -0
  136. hydpy/cythons/autogen/c_evap.pyx +2601 -0
  137. hydpy/cythons/autogen/c_evap_aet_hbv96.cp313-win_amd64.pyd +0 -0
  138. hydpy/cythons/autogen/c_evap_aet_hbv96.pxd +227 -0
  139. hydpy/cythons/autogen/c_evap_aet_hbv96.pyx +584 -0
  140. hydpy/cythons/autogen/c_evap_aet_minhas.cp313-win_amd64.pyd +0 -0
  141. hydpy/cythons/autogen/c_evap_aet_minhas.pxd +193 -0
  142. hydpy/cythons/autogen/c_evap_aet_minhas.pyx +478 -0
  143. hydpy/cythons/autogen/c_evap_aet_morsim.cp313-win_amd64.pyd +0 -0
  144. hydpy/cythons/autogen/c_evap_aet_morsim.pxd +681 -0
  145. hydpy/cythons/autogen/c_evap_aet_morsim.pyx +1642 -0
  146. hydpy/cythons/autogen/c_evap_pet_ambav1.cp313-win_amd64.pyd +0 -0
  147. hydpy/cythons/autogen/c_evap_pet_ambav1.pxd +532 -0
  148. hydpy/cythons/autogen/c_evap_pet_ambav1.pyx +1296 -0
  149. hydpy/cythons/autogen/c_evap_pet_hbv96.cp313-win_amd64.pyd +0 -0
  150. hydpy/cythons/autogen/c_evap_pet_hbv96.pxd +179 -0
  151. hydpy/cythons/autogen/c_evap_pet_hbv96.pyx +328 -0
  152. hydpy/cythons/autogen/c_evap_pet_m.cp313-win_amd64.pyd +0 -0
  153. hydpy/cythons/autogen/c_evap_pet_m.pxd +124 -0
  154. hydpy/cythons/autogen/c_evap_pet_m.pyx +214 -0
  155. hydpy/cythons/autogen/c_evap_pet_mlc.cp313-win_amd64.pyd +0 -0
  156. hydpy/cythons/autogen/c_evap_pet_mlc.pxd +126 -0
  157. hydpy/cythons/autogen/c_evap_pet_mlc.pyx +214 -0
  158. hydpy/cythons/autogen/c_evap_ret_fao56.cp313-win_amd64.pyd +0 -0
  159. hydpy/cythons/autogen/c_evap_ret_fao56.pxd +305 -0
  160. hydpy/cythons/autogen/c_evap_ret_fao56.pyx +624 -0
  161. hydpy/cythons/autogen/c_evap_ret_io.cp313-win_amd64.pyd +0 -0
  162. hydpy/cythons/autogen/c_evap_ret_io.pxd +112 -0
  163. hydpy/cythons/autogen/c_evap_ret_io.pyx +176 -0
  164. hydpy/cythons/autogen/c_evap_ret_tw2002.cp313-win_amd64.pyd +0 -0
  165. hydpy/cythons/autogen/c_evap_ret_tw2002.pxd +139 -0
  166. hydpy/cythons/autogen/c_evap_ret_tw2002.pyx +273 -0
  167. hydpy/cythons/autogen/c_exch.cp313-win_amd64.pyd +0 -0
  168. hydpy/cythons/autogen/c_exch.pxd +230 -0
  169. hydpy/cythons/autogen/c_exch.pyx +462 -0
  170. hydpy/cythons/autogen/c_exch_branch_hbv96.cp313-win_amd64.pyd +0 -0
  171. hydpy/cythons/autogen/c_exch_branch_hbv96.pxd +134 -0
  172. hydpy/cythons/autogen/c_exch_branch_hbv96.pyx +255 -0
  173. hydpy/cythons/autogen/c_exch_waterlevel.cp313-win_amd64.pyd +0 -0
  174. hydpy/cythons/autogen/c_exch_waterlevel.pxd +54 -0
  175. hydpy/cythons/autogen/c_exch_waterlevel.pyx +78 -0
  176. hydpy/cythons/autogen/c_exch_weir_hbv96.cp313-win_amd64.pyd +0 -0
  177. hydpy/cythons/autogen/c_exch_weir_hbv96.pxd +156 -0
  178. hydpy/cythons/autogen/c_exch_weir_hbv96.pyx +282 -0
  179. hydpy/cythons/autogen/c_ga.cp313-win_amd64.pyd +0 -0
  180. hydpy/cythons/autogen/c_ga.pxd +353 -0
  181. hydpy/cythons/autogen/c_ga.pyx +1204 -0
  182. hydpy/cythons/autogen/c_ga_garto.cp313-win_amd64.pyd +0 -0
  183. hydpy/cythons/autogen/c_ga_garto.pxd +330 -0
  184. hydpy/cythons/autogen/c_ga_garto.pyx +1105 -0
  185. hydpy/cythons/autogen/c_ga_garto_submodel1.cp313-win_amd64.pyd +0 -0
  186. hydpy/cythons/autogen/c_ga_garto_submodel1.pxd +236 -0
  187. hydpy/cythons/autogen/c_ga_garto_submodel1.pyx +944 -0
  188. hydpy/cythons/autogen/c_gland.cp313-win_amd64.pyd +0 -0
  189. hydpy/cythons/autogen/c_gland.pxd +437 -0
  190. hydpy/cythons/autogen/c_gland.pyx +726 -0
  191. hydpy/cythons/autogen/c_gland_gr4.cp313-win_amd64.pyd +0 -0
  192. hydpy/cythons/autogen/c_gland_gr4.pxd +382 -0
  193. hydpy/cythons/autogen/c_gland_gr4.pyx +605 -0
  194. hydpy/cythons/autogen/c_gland_gr5.cp313-win_amd64.pyd +0 -0
  195. hydpy/cythons/autogen/c_gland_gr5.pxd +368 -0
  196. hydpy/cythons/autogen/c_gland_gr5.pyx +568 -0
  197. hydpy/cythons/autogen/c_gland_gr6.cp313-win_amd64.pyd +0 -0
  198. hydpy/cythons/autogen/c_gland_gr6.pxd +420 -0
  199. hydpy/cythons/autogen/c_gland_gr6.pyx +673 -0
  200. hydpy/cythons/autogen/c_hland.cp313-win_amd64.pyd +0 -0
  201. hydpy/cythons/autogen/c_hland.pxd +855 -0
  202. hydpy/cythons/autogen/c_hland.pyx +2486 -0
  203. hydpy/cythons/autogen/c_hland_96.cp313-win_amd64.pyd +0 -0
  204. hydpy/cythons/autogen/c_hland_96.pxd +631 -0
  205. hydpy/cythons/autogen/c_hland_96.pyx +1724 -0
  206. hydpy/cythons/autogen/c_hland_96c.cp313-win_amd64.pyd +0 -0
  207. hydpy/cythons/autogen/c_hland_96c.pxd +621 -0
  208. hydpy/cythons/autogen/c_hland_96c.pyx +1822 -0
  209. hydpy/cythons/autogen/c_hland_96p.cp313-win_amd64.pyd +0 -0
  210. hydpy/cythons/autogen/c_hland_96p.pxd +683 -0
  211. hydpy/cythons/autogen/c_hland_96p.pyx +1911 -0
  212. hydpy/cythons/autogen/c_kinw.cp313-win_amd64.pyd +0 -0
  213. hydpy/cythons/autogen/c_kinw.pxd +509 -0
  214. hydpy/cythons/autogen/c_kinw.pyx +965 -0
  215. hydpy/cythons/autogen/c_kinw_williams.cp313-win_amd64.pyd +0 -0
  216. hydpy/cythons/autogen/c_kinw_williams.pxd +409 -0
  217. hydpy/cythons/autogen/c_kinw_williams.pyx +763 -0
  218. hydpy/cythons/autogen/c_kinw_williams_ext.cp313-win_amd64.pyd +0 -0
  219. hydpy/cythons/autogen/c_kinw_williams_ext.pxd +220 -0
  220. hydpy/cythons/autogen/c_kinw_williams_ext.pyx +440 -0
  221. hydpy/cythons/autogen/c_lland.cp313-win_amd64.pyd +0 -0
  222. hydpy/cythons/autogen/c_lland.pxd +1386 -0
  223. hydpy/cythons/autogen/c_lland.pyx +3679 -0
  224. hydpy/cythons/autogen/c_lland_dd.cp313-win_amd64.pyd +0 -0
  225. hydpy/cythons/autogen/c_lland_dd.pxd +679 -0
  226. hydpy/cythons/autogen/c_lland_dd.pyx +1719 -0
  227. hydpy/cythons/autogen/c_lland_knauf.cp313-win_amd64.pyd +0 -0
  228. hydpy/cythons/autogen/c_lland_knauf.pxd +1096 -0
  229. hydpy/cythons/autogen/c_lland_knauf.pyx +2784 -0
  230. hydpy/cythons/autogen/c_lland_knauf_ic.cp313-win_amd64.pyd +0 -0
  231. hydpy/cythons/autogen/c_lland_knauf_ic.pxd +1369 -0
  232. hydpy/cythons/autogen/c_lland_knauf_ic.pyx +3625 -0
  233. hydpy/cythons/autogen/c_meteo.cp313-win_amd64.pyd +0 -0
  234. hydpy/cythons/autogen/c_meteo.pxd +469 -0
  235. hydpy/cythons/autogen/c_meteo.pyx +879 -0
  236. hydpy/cythons/autogen/c_meteo_clear_glob_io.cp313-win_amd64.pyd +0 -0
  237. hydpy/cythons/autogen/c_meteo_clear_glob_io.pxd +75 -0
  238. hydpy/cythons/autogen/c_meteo_clear_glob_io.pyx +107 -0
  239. hydpy/cythons/autogen/c_meteo_glob_fao56.cp313-win_amd64.pyd +0 -0
  240. hydpy/cythons/autogen/c_meteo_glob_fao56.pxd +209 -0
  241. hydpy/cythons/autogen/c_meteo_glob_fao56.pyx +339 -0
  242. hydpy/cythons/autogen/c_meteo_glob_io.cp313-win_amd64.pyd +0 -0
  243. hydpy/cythons/autogen/c_meteo_glob_io.pxd +63 -0
  244. hydpy/cythons/autogen/c_meteo_glob_io.pyx +91 -0
  245. hydpy/cythons/autogen/c_meteo_glob_morsim.cp313-win_amd64.pyd +0 -0
  246. hydpy/cythons/autogen/c_meteo_glob_morsim.pxd +289 -0
  247. hydpy/cythons/autogen/c_meteo_glob_morsim.pyx +527 -0
  248. hydpy/cythons/autogen/c_meteo_precip_io.cp313-win_amd64.pyd +0 -0
  249. hydpy/cythons/autogen/c_meteo_precip_io.pxd +112 -0
  250. hydpy/cythons/autogen/c_meteo_precip_io.pyx +176 -0
  251. hydpy/cythons/autogen/c_meteo_psun_sun_glob_io.cp313-win_amd64.pyd +0 -0
  252. hydpy/cythons/autogen/c_meteo_psun_sun_glob_io.pxd +87 -0
  253. hydpy/cythons/autogen/c_meteo_psun_sun_glob_io.pyx +123 -0
  254. hydpy/cythons/autogen/c_meteo_sun_fao56.cp313-win_amd64.pyd +0 -0
  255. hydpy/cythons/autogen/c_meteo_sun_fao56.pxd +209 -0
  256. hydpy/cythons/autogen/c_meteo_sun_fao56.pyx +343 -0
  257. hydpy/cythons/autogen/c_meteo_sun_morsim.cp313-win_amd64.pyd +0 -0
  258. hydpy/cythons/autogen/c_meteo_sun_morsim.pxd +286 -0
  259. hydpy/cythons/autogen/c_meteo_sun_morsim.pyx +519 -0
  260. hydpy/cythons/autogen/c_meteo_temp_io.cp313-win_amd64.pyd +0 -0
  261. hydpy/cythons/autogen/c_meteo_temp_io.pxd +112 -0
  262. hydpy/cythons/autogen/c_meteo_temp_io.pyx +176 -0
  263. hydpy/cythons/autogen/c_musk.cp313-win_amd64.pyd +0 -0
  264. hydpy/cythons/autogen/c_musk.pxd +282 -0
  265. hydpy/cythons/autogen/c_musk.pyx +605 -0
  266. hydpy/cythons/autogen/c_musk_classic.cp313-win_amd64.pyd +0 -0
  267. hydpy/cythons/autogen/c_musk_classic.pxd +138 -0
  268. hydpy/cythons/autogen/c_musk_classic.pyx +226 -0
  269. hydpy/cythons/autogen/c_musk_mct.cp313-win_amd64.pyd +0 -0
  270. hydpy/cythons/autogen/c_musk_mct.pxd +282 -0
  271. hydpy/cythons/autogen/c_musk_mct.pyx +609 -0
  272. hydpy/cythons/autogen/c_rconc.cp313-win_amd64.pyd +0 -0
  273. hydpy/cythons/autogen/c_rconc.pxd +119 -0
  274. hydpy/cythons/autogen/c_rconc.pyx +174 -0
  275. hydpy/cythons/autogen/c_rconc_nash.cp313-win_amd64.pyd +0 -0
  276. hydpy/cythons/autogen/c_rconc_nash.pxd +111 -0
  277. hydpy/cythons/autogen/c_rconc_nash.pyx +185 -0
  278. hydpy/cythons/autogen/c_rconc_uh.cp313-win_amd64.pyd +0 -0
  279. hydpy/cythons/autogen/c_rconc_uh.pxd +92 -0
  280. hydpy/cythons/autogen/c_rconc_uh.pyx +125 -0
  281. hydpy/cythons/autogen/c_sw1d.cp313-win_amd64.pyd +0 -0
  282. hydpy/cythons/autogen/c_sw1d.pxd +511 -0
  283. hydpy/cythons/autogen/c_sw1d.pyx +1263 -0
  284. hydpy/cythons/autogen/c_sw1d_channel.cp313-win_amd64.pyd +0 -0
  285. hydpy/cythons/autogen/c_sw1d_channel.pxd +119 -0
  286. hydpy/cythons/autogen/c_sw1d_channel.pyx +300 -0
  287. hydpy/cythons/autogen/c_sw1d_gate_out.cp313-win_amd64.pyd +0 -0
  288. hydpy/cythons/autogen/c_sw1d_gate_out.pxd +240 -0
  289. hydpy/cythons/autogen/c_sw1d_gate_out.pyx +476 -0
  290. hydpy/cythons/autogen/c_sw1d_lias.cp313-win_amd64.pyd +0 -0
  291. hydpy/cythons/autogen/c_sw1d_lias.pxd +320 -0
  292. hydpy/cythons/autogen/c_sw1d_lias.pyx +619 -0
  293. hydpy/cythons/autogen/c_sw1d_lias_sluice.cp313-win_amd64.pyd +0 -0
  294. hydpy/cythons/autogen/c_sw1d_lias_sluice.pxd +325 -0
  295. hydpy/cythons/autogen/c_sw1d_lias_sluice.pyx +644 -0
  296. hydpy/cythons/autogen/c_sw1d_network.cp313-win_amd64.pyd +0 -0
  297. hydpy/cythons/autogen/c_sw1d_network.pxd +90 -0
  298. hydpy/cythons/autogen/c_sw1d_network.pyx +246 -0
  299. hydpy/cythons/autogen/c_sw1d_pump.cp313-win_amd64.pyd +0 -0
  300. hydpy/cythons/autogen/c_sw1d_pump.pxd +256 -0
  301. hydpy/cythons/autogen/c_sw1d_pump.pyx +502 -0
  302. hydpy/cythons/autogen/c_sw1d_q_in.cp313-win_amd64.pyd +0 -0
  303. hydpy/cythons/autogen/c_sw1d_q_in.pxd +224 -0
  304. hydpy/cythons/autogen/c_sw1d_q_in.pyx +383 -0
  305. hydpy/cythons/autogen/c_sw1d_q_out.cp313-win_amd64.pyd +0 -0
  306. hydpy/cythons/autogen/c_sw1d_q_out.pxd +224 -0
  307. hydpy/cythons/autogen/c_sw1d_q_out.pyx +383 -0
  308. hydpy/cythons/autogen/c_sw1d_storage.cp313-win_amd64.pyd +0 -0
  309. hydpy/cythons/autogen/c_sw1d_storage.pxd +193 -0
  310. hydpy/cythons/autogen/c_sw1d_storage.pyx +349 -0
  311. hydpy/cythons/autogen/c_sw1d_weir_out.cp313-win_amd64.pyd +0 -0
  312. hydpy/cythons/autogen/c_sw1d_weir_out.pxd +212 -0
  313. hydpy/cythons/autogen/c_sw1d_weir_out.pyx +404 -0
  314. hydpy/cythons/autogen/c_test.cp313-win_amd64.pyd +0 -0
  315. hydpy/cythons/autogen/c_test.pxd +175 -0
  316. hydpy/cythons/autogen/c_test.pyx +348 -0
  317. hydpy/cythons/autogen/c_test_discontinous.cp313-win_amd64.pyd +0 -0
  318. hydpy/cythons/autogen/c_test_discontinous.pxd +146 -0
  319. hydpy/cythons/autogen/c_test_discontinous.pyx +256 -0
  320. hydpy/cythons/autogen/c_test_stiff0d.cp313-win_amd64.pyd +0 -0
  321. hydpy/cythons/autogen/c_test_stiff0d.pxd +146 -0
  322. hydpy/cythons/autogen/c_test_stiff0d.pyx +250 -0
  323. hydpy/cythons/autogen/c_test_stiff1d.cp313-win_amd64.pyd +0 -0
  324. hydpy/cythons/autogen/c_test_stiff1d.pxd +145 -0
  325. hydpy/cythons/autogen/c_test_stiff1d.pyx +294 -0
  326. hydpy/cythons/autogen/c_whmod.cp313-win_amd64.pyd +0 -0
  327. hydpy/cythons/autogen/c_whmod.pxd +482 -0
  328. hydpy/cythons/autogen/c_whmod.pyx +1156 -0
  329. hydpy/cythons/autogen/c_whmod_rural.cp313-win_amd64.pyd +0 -0
  330. hydpy/cythons/autogen/c_whmod_rural.pxd +411 -0
  331. hydpy/cythons/autogen/c_whmod_rural.pyx +982 -0
  332. hydpy/cythons/autogen/c_whmod_urban.cp313-win_amd64.pyd +0 -0
  333. hydpy/cythons/autogen/c_whmod_urban.pxd +482 -0
  334. hydpy/cythons/autogen/c_whmod_urban.pyx +1155 -0
  335. hydpy/cythons/autogen/c_wland.cp313-win_amd64.pyd +0 -0
  336. hydpy/cythons/autogen/c_wland.pxd +842 -0
  337. hydpy/cythons/autogen/c_wland.pyx +1890 -0
  338. hydpy/cythons/autogen/c_wland_gd.cp313-win_amd64.pyd +0 -0
  339. hydpy/cythons/autogen/c_wland_gd.pxd +829 -0
  340. hydpy/cythons/autogen/c_wland_gd.pyx +1847 -0
  341. hydpy/cythons/autogen/c_wland_wag.cp313-win_amd64.pyd +0 -0
  342. hydpy/cythons/autogen/c_wland_wag.pxd +810 -0
  343. hydpy/cythons/autogen/c_wland_wag.pyx +1780 -0
  344. hydpy/cythons/autogen/c_wq.cp313-win_amd64.pyd +0 -0
  345. hydpy/cythons/autogen/c_wq.pxd +275 -0
  346. hydpy/cythons/autogen/c_wq.pyx +652 -0
  347. hydpy/cythons/autogen/c_wq_trapeze.cp313-win_amd64.pyd +0 -0
  348. hydpy/cythons/autogen/c_wq_trapeze.pxd +170 -0
  349. hydpy/cythons/autogen/c_wq_trapeze.pyx +400 -0
  350. hydpy/cythons/autogen/c_wq_trapeze_strickler.cp313-win_amd64.pyd +0 -0
  351. hydpy/cythons/autogen/c_wq_trapeze_strickler.pxd +243 -0
  352. hydpy/cythons/autogen/c_wq_trapeze_strickler.pyx +578 -0
  353. hydpy/cythons/autogen/c_wq_walrus.cp313-win_amd64.pyd +0 -0
  354. hydpy/cythons/autogen/c_wq_walrus.pxd +61 -0
  355. hydpy/cythons/autogen/c_wq_walrus.pyx +82 -0
  356. hydpy/cythons/autogen/configutils.cp313-win_amd64.pyd +0 -0
  357. hydpy/cythons/autogen/configutils.pxd +17 -0
  358. hydpy/cythons/autogen/configutils.pyx +119 -0
  359. hydpy/cythons/autogen/interfaceutils.cp313-win_amd64.pyd +0 -0
  360. hydpy/cythons/autogen/interfaceutils.pxd +31 -0
  361. hydpy/cythons/autogen/interfaceutils.pyx +82 -0
  362. hydpy/cythons/autogen/interputils.cp313-win_amd64.pyd +0 -0
  363. hydpy/cythons/autogen/interputils.pxd +42 -0
  364. hydpy/cythons/autogen/interputils.pyx +118 -0
  365. hydpy/cythons/autogen/masterinterface.cp313-win_amd64.pyd +0 -0
  366. hydpy/cythons/autogen/masterinterface.pxd +153 -0
  367. hydpy/cythons/autogen/masterinterface.pyx +222 -0
  368. hydpy/cythons/autogen/pointerutils.cp313-win_amd64.pyd +0 -0
  369. hydpy/cythons/autogen/pointerutils.pxd +31 -0
  370. hydpy/cythons/autogen/pointerutils.pyx +650 -0
  371. hydpy/cythons/autogen/ppolyutils.cp313-win_amd64.pyd +0 -0
  372. hydpy/cythons/autogen/ppolyutils.pxd +35 -0
  373. hydpy/cythons/autogen/ppolyutils.pyx +59 -0
  374. hydpy/cythons/autogen/quadutils.cp313-win_amd64.pyd +0 -0
  375. hydpy/cythons/autogen/quadutils.pxd +26 -0
  376. hydpy/cythons/autogen/quadutils.pyx +973 -0
  377. hydpy/cythons/autogen/rootutils.cp313-win_amd64.pyd +0 -0
  378. hydpy/cythons/autogen/rootutils.pxd +28 -0
  379. hydpy/cythons/autogen/rootutils.pyx +109 -0
  380. hydpy/cythons/autogen/sequenceutils.cp313-win_amd64.pyd +0 -0
  381. hydpy/cythons/autogen/sequenceutils.pxd +45 -0
  382. hydpy/cythons/autogen/sequenceutils.pyx +101 -0
  383. hydpy/cythons/autogen/smoothutils.cp313-win_amd64.pyd +0 -0
  384. hydpy/cythons/autogen/smoothutils.pxd +29 -0
  385. hydpy/cythons/autogen/smoothutils.pyx +833 -0
  386. hydpy/cythons/configutils.pxd +8 -0
  387. hydpy/cythons/configutils.pyi +5 -0
  388. hydpy/cythons/configutils.pyx +110 -0
  389. hydpy/cythons/interfaceutils.pxd +22 -0
  390. hydpy/cythons/interfaceutils.pyi +15 -0
  391. hydpy/cythons/interfaceutils.pyx +73 -0
  392. hydpy/cythons/interputils.pxd +33 -0
  393. hydpy/cythons/interputils.pyi +32 -0
  394. hydpy/cythons/interputils.pyx +109 -0
  395. hydpy/cythons/modelutils.py +2990 -0
  396. hydpy/cythons/pointerutils.pxd +22 -0
  397. hydpy/cythons/pointerutils.pyi +89 -0
  398. hydpy/cythons/pointerutils.pyx +641 -0
  399. hydpy/cythons/ppolyutils.pxd +26 -0
  400. hydpy/cythons/ppolyutils.pyi +21 -0
  401. hydpy/cythons/ppolyutils.pyx +50 -0
  402. hydpy/cythons/quadutils.pxd +17 -0
  403. hydpy/cythons/quadutils.pyi +13 -0
  404. hydpy/cythons/quadutils.pyx +964 -0
  405. hydpy/cythons/rootutils.pxd +19 -0
  406. hydpy/cythons/rootutils.pyi +21 -0
  407. hydpy/cythons/rootutils.pyx +100 -0
  408. hydpy/cythons/sequenceutils.pxd +36 -0
  409. hydpy/cythons/sequenceutils.pyi +7 -0
  410. hydpy/cythons/sequenceutils.pyx +92 -0
  411. hydpy/cythons/smoothutils.pxd +20 -0
  412. hydpy/cythons/smoothutils.pyi +15 -0
  413. hydpy/cythons/smoothutils.pyx +824 -0
  414. hydpy/data/HydPy-H-Lahn/conditions/init_1996_01_01_00_00_00/land_dill_assl.py +13 -0
  415. hydpy/data/HydPy-H-Lahn/conditions/init_1996_01_01_00_00_00/land_lahn_kalk.py +13 -0
  416. hydpy/data/HydPy-H-Lahn/conditions/init_1996_01_01_00_00_00/land_lahn_leun.py +14 -0
  417. hydpy/data/HydPy-H-Lahn/conditions/init_1996_01_01_00_00_00/land_lahn_marb.py +13 -0
  418. hydpy/data/HydPy-H-Lahn/conditions/init_1996_01_01_00_00_00/stream_dill_assl_lahn_leun.py +5 -0
  419. hydpy/data/HydPy-H-Lahn/conditions/init_1996_01_01_00_00_00/stream_lahn_leun_lahn_kalk.py +5 -0
  420. hydpy/data/HydPy-H-Lahn/conditions/init_1996_01_01_00_00_00/stream_lahn_marb_lahn_leun.py +5 -0
  421. hydpy/data/HydPy-H-Lahn/control/default/land.py +9 -0
  422. hydpy/data/HydPy-H-Lahn/control/default/land_dill_assl.py +57 -0
  423. hydpy/data/HydPy-H-Lahn/control/default/land_lahn_kalk.py +57 -0
  424. hydpy/data/HydPy-H-Lahn/control/default/land_lahn_leun.py +56 -0
  425. hydpy/data/HydPy-H-Lahn/control/default/land_lahn_marb.py +57 -0
  426. hydpy/data/HydPy-H-Lahn/control/default/stream_dill_assl_lahn_leun.py +7 -0
  427. hydpy/data/HydPy-H-Lahn/control/default/stream_lahn_leun_lahn_kalk.py +7 -0
  428. hydpy/data/HydPy-H-Lahn/control/default/stream_lahn_marb_lahn_leun.py +7 -0
  429. hydpy/data/HydPy-H-Lahn/multiple_runs.xml +309 -0
  430. hydpy/data/HydPy-H-Lahn/multiple_runs_alpha.xml +71 -0
  431. hydpy/data/HydPy-H-Lahn/network/default/headwaters.py +11 -0
  432. hydpy/data/HydPy-H-Lahn/network/default/nonheadwaters.py +11 -0
  433. hydpy/data/HydPy-H-Lahn/network/default/streams.py +8 -0
  434. hydpy/data/HydPy-H-Lahn/series/default/dill_assl_obs_q.asc +11387 -0
  435. hydpy/data/HydPy-H-Lahn/series/default/evap_pet_hbv96_input_normalairtemperature.nc +0 -0
  436. hydpy/data/HydPy-H-Lahn/series/default/evap_pet_hbv96_input_normalevapotranspiration.nc +0 -0
  437. hydpy/data/HydPy-H-Lahn/series/default/hland_96_input_p.nc +0 -0
  438. hydpy/data/HydPy-H-Lahn/series/default/hland_96_input_t.nc +0 -0
  439. hydpy/data/HydPy-H-Lahn/series/default/lahn_kalk_obs_q.asc +11387 -0
  440. hydpy/data/HydPy-H-Lahn/series/default/lahn_leun_obs_q.asc +11387 -0
  441. hydpy/data/HydPy-H-Lahn/series/default/lahn_marb_obs_q.asc +11387 -0
  442. hydpy/data/HydPy-H-Lahn/series/default/land_dill_assl_evap_pet_hbv96_input_normalairtemperature.asc +11387 -0
  443. hydpy/data/HydPy-H-Lahn/series/default/land_dill_assl_evap_pet_hbv96_input_normalevapotranspiration.asc +11387 -0
  444. hydpy/data/HydPy-H-Lahn/series/default/land_dill_assl_hland_96_input_p.asc +11387 -0
  445. hydpy/data/HydPy-H-Lahn/series/default/land_dill_assl_hland_96_input_t.asc +11387 -0
  446. hydpy/data/HydPy-H-Lahn/series/default/land_lahn_kalk_evap_pet_hbv96_input_normalairtemperature.asc +11387 -0
  447. hydpy/data/HydPy-H-Lahn/series/default/land_lahn_kalk_evap_pet_hbv96_input_normalevapotranspiration.asc +11387 -0
  448. hydpy/data/HydPy-H-Lahn/series/default/land_lahn_kalk_hland_96_input_p.asc +11387 -0
  449. hydpy/data/HydPy-H-Lahn/series/default/land_lahn_kalk_hland_96_input_t.asc +11387 -0
  450. hydpy/data/HydPy-H-Lahn/series/default/land_lahn_leun_evap_pet_hbv96_input_normalairtemperature.asc +11387 -0
  451. hydpy/data/HydPy-H-Lahn/series/default/land_lahn_leun_evap_pet_hbv96_input_normalevapotranspiration.asc +11387 -0
  452. hydpy/data/HydPy-H-Lahn/series/default/land_lahn_leun_hland_96_input_p.asc +11387 -0
  453. hydpy/data/HydPy-H-Lahn/series/default/land_lahn_leun_hland_96_input_t.asc +11387 -0
  454. hydpy/data/HydPy-H-Lahn/series/default/land_lahn_marb_evap_pet_hbv96_input_normalairtemperature.asc +11387 -0
  455. hydpy/data/HydPy-H-Lahn/series/default/land_lahn_marb_evap_pet_hbv96_input_normalevapotranspiration.asc +11387 -0
  456. hydpy/data/HydPy-H-Lahn/series/default/land_lahn_marb_hland_96_input_p.asc +11387 -0
  457. hydpy/data/HydPy-H-Lahn/series/default/land_lahn_marb_hland_96_input_t.asc +11387 -0
  458. hydpy/data/HydPy-H-Lahn/series/default/obs_q.nc +0 -0
  459. hydpy/data/HydPy-H-Lahn/single_run.xml +152 -0
  460. hydpy/data/HydPy-H-Lahn/single_run.xmlt +143 -0
  461. hydpy/data/__init__.py +17 -0
  462. hydpy/docs/__init__.py +0 -0
  463. hydpy/docs/autofigs/__init__.py +0 -0
  464. hydpy/docs/bib/__init__.py +0 -0
  465. hydpy/docs/bib/refs.bib +566 -0
  466. hydpy/docs/combine_docversions.py +133 -0
  467. hydpy/docs/draw_model_sketches.py +1301 -0
  468. hydpy/docs/enable_autodoc.py +7 -0
  469. hydpy/docs/figs/HydPy-G-GR4.png +0 -0
  470. hydpy/docs/figs/HydPy-G-GR5.png +0 -0
  471. hydpy/docs/figs/HydPy-G-GR6.png +0 -0
  472. hydpy/docs/figs/HydPy-H-HBV96-COSERO.png +0 -0
  473. hydpy/docs/figs/HydPy-H-HBV96-PREVAH.png +0 -0
  474. hydpy/docs/figs/HydPy-H-HBV96.png +0 -0
  475. hydpy/docs/figs/HydPy-H-Lahn.png +0 -0
  476. hydpy/docs/figs/HydPy-KinW-Williams.png +0 -0
  477. hydpy/docs/figs/HydPy-L-DD.png +0 -0
  478. hydpy/docs/figs/HydPy-W-Wag.png +0 -0
  479. hydpy/docs/figs/HydPy_Logo.png +0 -0
  480. hydpy/docs/figs/HydPy_Logo_Text.png +0 -0
  481. hydpy/docs/figs/IDLE-editor.png +0 -0
  482. hydpy/docs/figs/IDLE-shell.png +0 -0
  483. hydpy/docs/figs/LAWA_river-basin-bumbers.png +0 -0
  484. hydpy/docs/figs/__init__.py +0 -0
  485. hydpy/docs/html_/__init__.py +0 -0
  486. hydpy/docs/polish_html.py +57 -0
  487. hydpy/docs/prepare.py +224 -0
  488. hydpy/docs/publish_docs.py +53 -0
  489. hydpy/docs/rst/HydPy-ARMA.rst +27 -0
  490. hydpy/docs/rst/HydPy-Conv.rst +22 -0
  491. hydpy/docs/rst/HydPy-Dam.rst +79 -0
  492. hydpy/docs/rst/HydPy-Dummy.rst +21 -0
  493. hydpy/docs/rst/HydPy-Evap.rst +26 -0
  494. hydpy/docs/rst/HydPy-Exch.rst +36 -0
  495. hydpy/docs/rst/HydPy-G.rst +40 -0
  496. hydpy/docs/rst/HydPy-GA.rst +34 -0
  497. hydpy/docs/rst/HydPy-H.rst +24 -0
  498. hydpy/docs/rst/HydPy-KinW.rst +32 -0
  499. hydpy/docs/rst/HydPy-L.rst +42 -0
  500. hydpy/docs/rst/HydPy-Meteo.rst +28 -0
  501. hydpy/docs/rst/HydPy-Musk.rst +21 -0
  502. hydpy/docs/rst/HydPy-Rconc.rst +17 -0
  503. hydpy/docs/rst/HydPy-SW1D.rst +49 -0
  504. hydpy/docs/rst/HydPy-Test.rst +19 -0
  505. hydpy/docs/rst/HydPy-W.rst +20 -0
  506. hydpy/docs/rst/HydPy-WHMod.rst +19 -0
  507. hydpy/docs/rst/HydPy-WQ.rst +20 -0
  508. hydpy/docs/rst/__init__.py +0 -0
  509. hydpy/docs/rst/additional_repositories.rst +40 -0
  510. hydpy/docs/rst/auxiliaries.rst +31 -0
  511. hydpy/docs/rst/continuous_integration.rst +75 -0
  512. hydpy/docs/rst/core.rst +75 -0
  513. hydpy/docs/rst/cythons.rst +47 -0
  514. hydpy/docs/rst/definitions.rst +506 -0
  515. hydpy/docs/rst/developer_guide.rst +54 -0
  516. hydpy/docs/rst/example_projects.rst +40 -0
  517. hydpy/docs/rst/execution.rst +22 -0
  518. hydpy/docs/rst/framework_tools.rst +56 -0
  519. hydpy/docs/rst/how_to_read_the_reference_manual.rst +156 -0
  520. hydpy/docs/rst/hydpydependencies.rst +55 -0
  521. hydpy/docs/rst/index.rst +125 -0
  522. hydpy/docs/rst/installation.rst +155 -0
  523. hydpy/docs/rst/model_families.rst +79 -0
  524. hydpy/docs/rst/model_overview.rst +291 -0
  525. hydpy/docs/rst/modelimports.rst +10 -0
  526. hydpy/docs/rst/options.rst +119 -0
  527. hydpy/docs/rst/programming_style.rst +572 -0
  528. hydpy/docs/rst/project_structure.rst +520 -0
  529. hydpy/docs/rst/quickstart.rst +304 -0
  530. hydpy/docs/rst/reference_manual.rst +29 -0
  531. hydpy/docs/rst/required_tools.rst +50 -0
  532. hydpy/docs/rst/simulation.rst +514 -0
  533. hydpy/docs/rst/submodel_interfaces.rst +32 -0
  534. hydpy/docs/rst/tests_and_documentation.rst +85 -0
  535. hydpy/docs/rst/user_guide.rst +38 -0
  536. hydpy/docs/rst/version_control.rst +116 -0
  537. hydpy/docs/rst/zbibliography.rst +8 -0
  538. hydpy/docs/sphinx/__init__.py +0 -0
  539. hydpy/docs/sphinx/_themes/basic_hydpy/changes/frameset.html +11 -0
  540. hydpy/docs/sphinx/_themes/basic_hydpy/changes/rstsource.html +15 -0
  541. hydpy/docs/sphinx/_themes/basic_hydpy/changes/versionchanges.html +33 -0
  542. hydpy/docs/sphinx/_themes/basic_hydpy/defindex.html +35 -0
  543. hydpy/docs/sphinx/_themes/basic_hydpy/domainindex.html +56 -0
  544. hydpy/docs/sphinx/_themes/basic_hydpy/genindex-single.html +63 -0
  545. hydpy/docs/sphinx/_themes/basic_hydpy/genindex-split.html +41 -0
  546. hydpy/docs/sphinx/_themes/basic_hydpy/genindex.html +76 -0
  547. hydpy/docs/sphinx/_themes/basic_hydpy/globaltoc.html +11 -0
  548. hydpy/docs/sphinx/_themes/basic_hydpy/layout.html +221 -0
  549. hydpy/docs/sphinx/_themes/basic_hydpy/localtoc.html +15 -0
  550. hydpy/docs/sphinx/_themes/basic_hydpy/opensearch.xml +13 -0
  551. hydpy/docs/sphinx/_themes/basic_hydpy/page.html +13 -0
  552. hydpy/docs/sphinx/_themes/basic_hydpy/relations.html +23 -0
  553. hydpy/docs/sphinx/_themes/basic_hydpy/search.html +65 -0
  554. hydpy/docs/sphinx/_themes/basic_hydpy/searchbox.html +21 -0
  555. hydpy/docs/sphinx/_themes/basic_hydpy/searchfield.html +23 -0
  556. hydpy/docs/sphinx/_themes/basic_hydpy/sourcelink.html +18 -0
  557. hydpy/docs/sphinx/_themes/basic_hydpy/static/basic.css_t +925 -0
  558. hydpy/docs/sphinx/_themes/basic_hydpy/static/doctools.js +156 -0
  559. hydpy/docs/sphinx/_themes/basic_hydpy/static/documentation_options.js_t +13 -0
  560. hydpy/docs/sphinx/_themes/basic_hydpy/static/file.png +0 -0
  561. hydpy/docs/sphinx/_themes/basic_hydpy/static/language_data.js_t +26 -0
  562. hydpy/docs/sphinx/_themes/basic_hydpy/static/minus.png +0 -0
  563. hydpy/docs/sphinx/_themes/basic_hydpy/static/plus.png +0 -0
  564. hydpy/docs/sphinx/_themes/basic_hydpy/static/searchtools.js +574 -0
  565. hydpy/docs/sphinx/_themes/basic_hydpy/static/sphinx_highlight.js +154 -0
  566. hydpy/docs/sphinx/_themes/basic_hydpy/theme.conf +16 -0
  567. hydpy/docs/sphinx/_themes/classic_hydpy/layout.html +23 -0
  568. hydpy/docs/sphinx/_themes/classic_hydpy/static/classic.css_t +358 -0
  569. hydpy/docs/sphinx/_themes/classic_hydpy/static/sidebar.js_t +72 -0
  570. hydpy/docs/sphinx/_themes/classic_hydpy/theme.conf +32 -0
  571. hydpy/docs/sphinx/conf.py +398 -0
  572. hydpy/docs/sphinx/defaultlinks_extension.py +36 -0
  573. hydpy/docs/sphinx/integrationtest_extension.py +104 -0
  574. hydpy/docs/sphinx/projectstructure_extension.py +58 -0
  575. hydpy/docs/sphinx/submodelgraph_extension.py +53 -0
  576. hydpy/exe/__init__.py +0 -0
  577. hydpy/exe/commandtools.py +651 -0
  578. hydpy/exe/hyd.py +277 -0
  579. hydpy/exe/modelimports.py +41 -0
  580. hydpy/exe/replacetools.py +216 -0
  581. hydpy/exe/servertools.py +2348 -0
  582. hydpy/exe/xmltools.py +3280 -0
  583. hydpy/interfaces/__init__.py +0 -0
  584. hydpy/interfaces/aetinterfaces.py +94 -0
  585. hydpy/interfaces/dischargeinterfaces.py +45 -0
  586. hydpy/interfaces/petinterfaces.py +117 -0
  587. hydpy/interfaces/precipinterfaces.py +42 -0
  588. hydpy/interfaces/radiationinterfaces.py +79 -0
  589. hydpy/interfaces/rconcinterfaces.py +30 -0
  590. hydpy/interfaces/routinginterfaces.py +324 -0
  591. hydpy/interfaces/soilinterfaces.py +96 -0
  592. hydpy/interfaces/stateinterfaces.py +98 -0
  593. hydpy/interfaces/tempinterfaces.py +46 -0
  594. hydpy/models/__init__.py +0 -0
  595. hydpy/models/arma/__init__.py +14 -0
  596. hydpy/models/arma/arma_control.py +383 -0
  597. hydpy/models/arma/arma_derived.py +204 -0
  598. hydpy/models/arma/arma_fluxes.py +41 -0
  599. hydpy/models/arma/arma_inlets.py +11 -0
  600. hydpy/models/arma/arma_logs.py +19 -0
  601. hydpy/models/arma/arma_model.py +461 -0
  602. hydpy/models/arma/arma_outlets.py +11 -0
  603. hydpy/models/arma_rimorido.py +381 -0
  604. hydpy/models/conv/__init__.py +12 -0
  605. hydpy/models/conv/conv_control.py +303 -0
  606. hydpy/models/conv/conv_derived.py +271 -0
  607. hydpy/models/conv/conv_fluxes.py +54 -0
  608. hydpy/models/conv/conv_inlets.py +11 -0
  609. hydpy/models/conv/conv_model.py +687 -0
  610. hydpy/models/conv/conv_outlets.py +11 -0
  611. hydpy/models/conv_idw.py +120 -0
  612. hydpy/models/conv_idw_ed.py +184 -0
  613. hydpy/models/conv_nn.py +112 -0
  614. hydpy/models/dam/__init__.py +16 -0
  615. hydpy/models/dam/dam_aides.py +17 -0
  616. hydpy/models/dam/dam_control.py +346 -0
  617. hydpy/models/dam/dam_derived.py +559 -0
  618. hydpy/models/dam/dam_factors.py +46 -0
  619. hydpy/models/dam/dam_fluxes.py +179 -0
  620. hydpy/models/dam/dam_inlets.py +29 -0
  621. hydpy/models/dam/dam_logs.py +52 -0
  622. hydpy/models/dam/dam_model.py +5011 -0
  623. hydpy/models/dam/dam_outlets.py +23 -0
  624. hydpy/models/dam/dam_receivers.py +41 -0
  625. hydpy/models/dam/dam_senders.py +23 -0
  626. hydpy/models/dam/dam_solver.py +75 -0
  627. hydpy/models/dam/dam_states.py +11 -0
  628. hydpy/models/dam_llake.py +499 -0
  629. hydpy/models/dam_lreservoir.py +548 -0
  630. hydpy/models/dam_lretention.py +343 -0
  631. hydpy/models/dam_pump.py +278 -0
  632. hydpy/models/dam_pump_sluice.py +339 -0
  633. hydpy/models/dam_sluice.py +319 -0
  634. hydpy/models/dam_v001.py +1127 -0
  635. hydpy/models/dam_v002.py +381 -0
  636. hydpy/models/dam_v003.py +422 -0
  637. hydpy/models/dam_v004.py +665 -0
  638. hydpy/models/dam_v005.py +479 -0
  639. hydpy/models/dummy/__init__.py +15 -0
  640. hydpy/models/dummy/dummy_control.py +22 -0
  641. hydpy/models/dummy/dummy_fluxes.py +11 -0
  642. hydpy/models/dummy/dummy_inlets.py +11 -0
  643. hydpy/models/dummy/dummy_inputs.py +41 -0
  644. hydpy/models/dummy/dummy_model.py +196 -0
  645. hydpy/models/dummy/dummy_outlets.py +11 -0
  646. hydpy/models/dummy_interceptedwater.py +85 -0
  647. hydpy/models/dummy_node2node.py +83 -0
  648. hydpy/models/dummy_snowalbedo.py +84 -0
  649. hydpy/models/dummy_snowcover.py +84 -0
  650. hydpy/models/dummy_snowycanopy.py +86 -0
  651. hydpy/models/dummy_soilwater.py +85 -0
  652. hydpy/models/evap/__init__.py +13 -0
  653. hydpy/models/evap/evap_control.py +354 -0
  654. hydpy/models/evap/evap_derived.py +236 -0
  655. hydpy/models/evap/evap_factors.py +188 -0
  656. hydpy/models/evap/evap_fixed.py +68 -0
  657. hydpy/models/evap/evap_fluxes.py +150 -0
  658. hydpy/models/evap/evap_inputs.py +54 -0
  659. hydpy/models/evap/evap_logs.py +91 -0
  660. hydpy/models/evap/evap_masks.py +48 -0
  661. hydpy/models/evap/evap_model.py +9170 -0
  662. hydpy/models/evap/evap_parameters.py +149 -0
  663. hydpy/models/evap/evap_sequences.py +32 -0
  664. hydpy/models/evap/evap_states.py +18 -0
  665. hydpy/models/evap_aet_hbv96.py +372 -0
  666. hydpy/models/evap_aet_minhas.py +331 -0
  667. hydpy/models/evap_aet_morsim.py +627 -0
  668. hydpy/models/evap_pet_ambav1.py +483 -0
  669. hydpy/models/evap_pet_hbv96.py +147 -0
  670. hydpy/models/evap_pet_m.py +94 -0
  671. hydpy/models/evap_pet_mlc.py +107 -0
  672. hydpy/models/evap_ret_fao56.py +265 -0
  673. hydpy/models/evap_ret_io.py +74 -0
  674. hydpy/models/evap_ret_tw2002.py +165 -0
  675. hydpy/models/exch/__init__.py +14 -0
  676. hydpy/models/exch/exch_control.py +262 -0
  677. hydpy/models/exch/exch_derived.py +36 -0
  678. hydpy/models/exch/exch_factors.py +26 -0
  679. hydpy/models/exch/exch_fluxes.py +48 -0
  680. hydpy/models/exch/exch_inlets.py +11 -0
  681. hydpy/models/exch/exch_logs.py +12 -0
  682. hydpy/models/exch/exch_model.py +451 -0
  683. hydpy/models/exch/exch_outlets.py +17 -0
  684. hydpy/models/exch/exch_receivers.py +17 -0
  685. hydpy/models/exch_branch_hbv96.py +186 -0
  686. hydpy/models/exch_waterlevel.py +73 -0
  687. hydpy/models/exch_weir_hbv96.py +609 -0
  688. hydpy/models/ga/__init__.py +14 -0
  689. hydpy/models/ga/ga_aides.py +17 -0
  690. hydpy/models/ga/ga_control.py +208 -0
  691. hydpy/models/ga/ga_derived.py +77 -0
  692. hydpy/models/ga/ga_fluxes.py +83 -0
  693. hydpy/models/ga/ga_inputs.py +26 -0
  694. hydpy/models/ga/ga_logs.py +17 -0
  695. hydpy/models/ga/ga_model.py +2952 -0
  696. hydpy/models/ga/ga_states.py +87 -0
  697. hydpy/models/ga_garto.py +1001 -0
  698. hydpy/models/ga_garto_submodel1.py +79 -0
  699. hydpy/models/gland/__init__.py +14 -0
  700. hydpy/models/gland/gland_control.py +90 -0
  701. hydpy/models/gland/gland_derived.py +113 -0
  702. hydpy/models/gland/gland_fluxes.py +137 -0
  703. hydpy/models/gland/gland_inputs.py +12 -0
  704. hydpy/models/gland/gland_model.py +1439 -0
  705. hydpy/models/gland/gland_outlets.py +11 -0
  706. hydpy/models/gland/gland_states.py +90 -0
  707. hydpy/models/gland_gr4.py +501 -0
  708. hydpy/models/gland_gr5.py +463 -0
  709. hydpy/models/gland_gr6.py +487 -0
  710. hydpy/models/hland/__init__.py +20 -0
  711. hydpy/models/hland/hland_aides.py +19 -0
  712. hydpy/models/hland/hland_constants.py +37 -0
  713. hydpy/models/hland/hland_control.py +1530 -0
  714. hydpy/models/hland/hland_derived.py +683 -0
  715. hydpy/models/hland/hland_factors.py +57 -0
  716. hydpy/models/hland/hland_fixed.py +42 -0
  717. hydpy/models/hland/hland_fluxes.py +279 -0
  718. hydpy/models/hland/hland_inputs.py +19 -0
  719. hydpy/models/hland/hland_masks.py +107 -0
  720. hydpy/models/hland/hland_model.py +4664 -0
  721. hydpy/models/hland/hland_outlets.py +11 -0
  722. hydpy/models/hland/hland_parameters.py +227 -0
  723. hydpy/models/hland/hland_sequences.py +382 -0
  724. hydpy/models/hland/hland_states.py +236 -0
  725. hydpy/models/hland_96.py +1812 -0
  726. hydpy/models/hland_96c.py +1196 -0
  727. hydpy/models/hland_96p.py +1204 -0
  728. hydpy/models/kinw/__init__.py +18 -0
  729. hydpy/models/kinw/kinw_aides.py +306 -0
  730. hydpy/models/kinw/kinw_control.py +270 -0
  731. hydpy/models/kinw/kinw_derived.py +197 -0
  732. hydpy/models/kinw/kinw_fixed.py +33 -0
  733. hydpy/models/kinw/kinw_fluxes.py +37 -0
  734. hydpy/models/kinw/kinw_inlets.py +11 -0
  735. hydpy/models/kinw/kinw_model.py +3026 -0
  736. hydpy/models/kinw/kinw_outlets.py +11 -0
  737. hydpy/models/kinw/kinw_solver.py +45 -0
  738. hydpy/models/kinw/kinw_states.py +17 -0
  739. hydpy/models/kinw_williams.py +1299 -0
  740. hydpy/models/kinw_williams_ext.py +768 -0
  741. hydpy/models/lland/__init__.py +42 -0
  742. hydpy/models/lland/lland_aides.py +38 -0
  743. hydpy/models/lland/lland_constants.py +88 -0
  744. hydpy/models/lland/lland_control.py +1329 -0
  745. hydpy/models/lland/lland_derived.py +380 -0
  746. hydpy/models/lland/lland_factors.py +18 -0
  747. hydpy/models/lland/lland_fixed.py +128 -0
  748. hydpy/models/lland/lland_fluxes.py +626 -0
  749. hydpy/models/lland/lland_inlets.py +12 -0
  750. hydpy/models/lland/lland_inputs.py +33 -0
  751. hydpy/models/lland/lland_logs.py +17 -0
  752. hydpy/models/lland/lland_masks.py +212 -0
  753. hydpy/models/lland/lland_model.py +7690 -0
  754. hydpy/models/lland/lland_outlets.py +12 -0
  755. hydpy/models/lland/lland_parameters.py +195 -0
  756. hydpy/models/lland/lland_sequences.py +67 -0
  757. hydpy/models/lland/lland_states.py +280 -0
  758. hydpy/models/lland_dd.py +2270 -0
  759. hydpy/models/lland_knauf.py +2156 -0
  760. hydpy/models/lland_knauf_ic.py +1920 -0
  761. hydpy/models/meteo/__init__.py +12 -0
  762. hydpy/models/meteo/meteo_control.py +154 -0
  763. hydpy/models/meteo/meteo_derived.py +159 -0
  764. hydpy/models/meteo/meteo_factors.py +88 -0
  765. hydpy/models/meteo/meteo_fixed.py +19 -0
  766. hydpy/models/meteo/meteo_fluxes.py +46 -0
  767. hydpy/models/meteo/meteo_inputs.py +47 -0
  768. hydpy/models/meteo/meteo_logs.py +30 -0
  769. hydpy/models/meteo/meteo_model.py +2904 -0
  770. hydpy/models/meteo/meteo_parameters.py +14 -0
  771. hydpy/models/meteo/meteo_sequences.py +22 -0
  772. hydpy/models/meteo_clear_glob_io.py +77 -0
  773. hydpy/models/meteo_glob_fao56.py +217 -0
  774. hydpy/models/meteo_glob_io.py +68 -0
  775. hydpy/models/meteo_glob_morsim.py +444 -0
  776. hydpy/models/meteo_precip_io.py +76 -0
  777. hydpy/models/meteo_psun_sun_glob_io.py +83 -0
  778. hydpy/models/meteo_sun_fao56.py +188 -0
  779. hydpy/models/meteo_sun_morsim.py +466 -0
  780. hydpy/models/meteo_temp_io.py +76 -0
  781. hydpy/models/musk/__init__.py +15 -0
  782. hydpy/models/musk/musk_control.py +328 -0
  783. hydpy/models/musk/musk_derived.py +32 -0
  784. hydpy/models/musk/musk_factors.py +53 -0
  785. hydpy/models/musk/musk_fluxes.py +24 -0
  786. hydpy/models/musk/musk_inlets.py +11 -0
  787. hydpy/models/musk/musk_masks.py +15 -0
  788. hydpy/models/musk/musk_model.py +838 -0
  789. hydpy/models/musk/musk_outlets.py +11 -0
  790. hydpy/models/musk/musk_sequences.py +88 -0
  791. hydpy/models/musk/musk_solver.py +68 -0
  792. hydpy/models/musk/musk_states.py +64 -0
  793. hydpy/models/musk_classic.py +228 -0
  794. hydpy/models/musk_mct.py +1247 -0
  795. hydpy/models/rconc/__init__.py +12 -0
  796. hydpy/models/rconc/rconc_control.py +473 -0
  797. hydpy/models/rconc/rconc_derived.py +76 -0
  798. hydpy/models/rconc/rconc_fluxes.py +19 -0
  799. hydpy/models/rconc/rconc_logs.py +74 -0
  800. hydpy/models/rconc/rconc_model.py +260 -0
  801. hydpy/models/rconc/rconc_states.py +11 -0
  802. hydpy/models/rconc_nash.py +48 -0
  803. hydpy/models/rconc_uh.py +53 -0
  804. hydpy/models/sw1d/__init__.py +17 -0
  805. hydpy/models/sw1d/sw1d_control.py +356 -0
  806. hydpy/models/sw1d/sw1d_derived.py +85 -0
  807. hydpy/models/sw1d/sw1d_factors.py +78 -0
  808. hydpy/models/sw1d/sw1d_fixed.py +12 -0
  809. hydpy/models/sw1d/sw1d_fluxes.py +55 -0
  810. hydpy/models/sw1d/sw1d_inlets.py +17 -0
  811. hydpy/models/sw1d/sw1d_model.py +3385 -0
  812. hydpy/models/sw1d/sw1d_outlets.py +11 -0
  813. hydpy/models/sw1d/sw1d_receivers.py +11 -0
  814. hydpy/models/sw1d/sw1d_senders.py +11 -0
  815. hydpy/models/sw1d/sw1d_states.py +23 -0
  816. hydpy/models/sw1d_channel.py +2051 -0
  817. hydpy/models/sw1d_gate_out.py +599 -0
  818. hydpy/models/sw1d_lias.py +105 -0
  819. hydpy/models/sw1d_lias_sluice.py +531 -0
  820. hydpy/models/sw1d_network.py +1219 -0
  821. hydpy/models/sw1d_pump.py +448 -0
  822. hydpy/models/sw1d_q_in.py +79 -0
  823. hydpy/models/sw1d_q_out.py +81 -0
  824. hydpy/models/sw1d_storage.py +78 -0
  825. hydpy/models/sw1d_weir_out.py +75 -0
  826. hydpy/models/test/__init__.py +14 -0
  827. hydpy/models/test/test_control.py +28 -0
  828. hydpy/models/test/test_fluxes.py +17 -0
  829. hydpy/models/test/test_model.py +201 -0
  830. hydpy/models/test/test_solver.py +48 -0
  831. hydpy/models/test/test_states.py +17 -0
  832. hydpy/models/test_discontinous.py +46 -0
  833. hydpy/models/test_stiff0d.py +47 -0
  834. hydpy/models/test_stiff1d.py +42 -0
  835. hydpy/models/whmod/__init__.py +21 -0
  836. hydpy/models/whmod/whmod_constants.py +77 -0
  837. hydpy/models/whmod/whmod_control.py +333 -0
  838. hydpy/models/whmod/whmod_derived.py +210 -0
  839. hydpy/models/whmod/whmod_factors.py +9 -0
  840. hydpy/models/whmod/whmod_fluxes.py +105 -0
  841. hydpy/models/whmod/whmod_inputs.py +15 -0
  842. hydpy/models/whmod/whmod_masks.py +178 -0
  843. hydpy/models/whmod/whmod_model.py +2091 -0
  844. hydpy/models/whmod/whmod_parameters.py +155 -0
  845. hydpy/models/whmod/whmod_sequences.py +193 -0
  846. hydpy/models/whmod/whmod_states.py +73 -0
  847. hydpy/models/whmod_rural.py +794 -0
  848. hydpy/models/whmod_urban.py +1011 -0
  849. hydpy/models/wland/__init__.py +43 -0
  850. hydpy/models/wland/wland_aides.py +55 -0
  851. hydpy/models/wland/wland_constants.py +103 -0
  852. hydpy/models/wland/wland_control.py +508 -0
  853. hydpy/models/wland/wland_derived.py +330 -0
  854. hydpy/models/wland/wland_factors.py +11 -0
  855. hydpy/models/wland/wland_fixed.py +12 -0
  856. hydpy/models/wland/wland_fluxes.py +166 -0
  857. hydpy/models/wland/wland_inputs.py +33 -0
  858. hydpy/models/wland/wland_masks.py +54 -0
  859. hydpy/models/wland/wland_model.py +3755 -0
  860. hydpy/models/wland/wland_outlets.py +11 -0
  861. hydpy/models/wland/wland_parameters.py +214 -0
  862. hydpy/models/wland/wland_sequences.py +108 -0
  863. hydpy/models/wland/wland_solver.py +45 -0
  864. hydpy/models/wland/wland_states.py +56 -0
  865. hydpy/models/wland_gd.py +888 -0
  866. hydpy/models/wland_wag.py +1244 -0
  867. hydpy/models/wq/__init__.py +14 -0
  868. hydpy/models/wq/wq_control.py +117 -0
  869. hydpy/models/wq/wq_derived.py +182 -0
  870. hydpy/models/wq/wq_factors.py +79 -0
  871. hydpy/models/wq/wq_fluxes.py +17 -0
  872. hydpy/models/wq/wq_model.py +1889 -0
  873. hydpy/models/wq_trapeze.py +168 -0
  874. hydpy/models/wq_trapeze_strickler.py +101 -0
  875. hydpy/models/wq_walrus.py +57 -0
  876. hydpy/py.typed +0 -0
  877. hydpy/tests/.coveragerc +22 -0
  878. hydpy/tests/__init__.py +0 -0
  879. hydpy/tests/check_consistency.py +32 -0
  880. hydpy/tests/hydpydoctestcustomize.pth +1 -0
  881. hydpy/tests/hydpydoctestcustomize.py +15 -0
  882. hydpy/tests/iotesting/__init__.py +0 -0
  883. hydpy/tests/run_doctests.py +233 -0
  884. hydpy-6.2.dev1.data/scripts/hyd.py +277 -0
  885. hydpy-6.2.dev1.dist-info/LICENSE +165 -0
  886. hydpy-6.2.dev1.dist-info/METADATA +163 -0
  887. hydpy-6.2.dev1.dist-info/RECORD +890 -0
  888. hydpy-6.2.dev1.dist-info/WHEEL +5 -0
  889. hydpy-6.2.dev1.dist-info/licenses_hydpy_installer.txt +42 -0
  890. hydpy-6.2.dev1.dist-info/top_level.txt +1 -0
@@ -0,0 +1,381 @@
1
+ """
2
+ |arma_rimorido| relies on the RIMO/RIDO method, which is based on the `translation
3
+ diffusion equation`, which is a linear approximation of the Saint-Venant equations
4
+ involving only two parameters - one for the celerity and one for the diffusivity of the
5
+ flood wave. The linearity of the approach allows for constructing Unit Hydrograph
6
+ ordinates for each specific combination of celerity, diffusivity, and the length of the
7
+ considered river section. One can understand these ordinates as coefficients of a
8
+ moving average (MA) process.
9
+
10
+ |arma_rimorido| adds two additional features to this conventional approach.
11
+
12
+ Firstly, RIMO/RIDO approximates the response function described by the MA coefficients
13
+ by an ARMA process, which is helpful for response functions with long tails. Very
14
+ often, autoregressive (AR) modelscan approximate long-tailed responses sufficiently
15
+ with few parameters. Hence, ARMA models (which reflect the rising limb of a response
16
+ function with their MA coefficients and its falling limb with their AR coefficients)
17
+ are often more parameter efficient than pure MA models.
18
+
19
+ Secondly, RIMO/RIDO separates the flow into the river section into different "portions"
20
+ based on discharge thresholds. Each portion is routed by a separate ARMA model,
21
+ allowing RIMO/RIDO to reflect the nonlinearity of rating curves to a certain degree.
22
+ For example, the bank-full discharge can serve as a threshold. Then, one can apply
23
+ smaller celerity values and larger diffusivity values on the "upper" flow portion to
24
+ simulate retention processes on floodplains.
25
+
26
+ If you want to apply |arma_rimorido| precisely like RIMO/RIDO, consider using
27
+ |TranslationDiffusionEquation| for calculating its coefficients. But you can also
28
+ define them differently, e.g. using |LinearStorageCascade|. Additionally, you are free
29
+ to apply combined ARMA coefficients or pure MA coefficients only, as described in the
30
+ following examples.
31
+
32
+ Integration tests
33
+ =================
34
+
35
+ .. how_to_understand_integration_tests::
36
+
37
+ We perform the following tests over 20 hours:
38
+
39
+ >>> from hydpy import pub, Nodes, Element
40
+ >>> pub.timegrids = "01.01.2000 00:00", "01.01.2000 20:00", "1h"
41
+
42
+ Import the model and define the time settings:
43
+
44
+ >>> from hydpy.models.arma_rimorido import *
45
+ >>> parameterstep("1h")
46
+
47
+ For testing purposes, |arma_rimorido| shall retrieve its input from the nodes `input1`
48
+ and `input2` and pass its output to the node `output`. Firstly, we define all nodes:
49
+
50
+ >>> nodes = Nodes("input1", "input2", "output")
51
+
52
+ Define the element `stream` and build the connections between the nodes defined above
53
+ and the |arma_rimorido| model instance:
54
+
55
+ >>> stream = Element("stream",
56
+ ... inlets=["input1", "input2"],
57
+ ... outlets="output")
58
+ >>> stream.model = model
59
+
60
+ Prepare a test function object, which prints the respective values of the model
61
+ sequences |QIn|, |QPIn|, |QPOut|, and |QOut|. The node sequence `sim` is added in
62
+ to that the values calculated for |QOut| are actually passed to `sim`:
63
+
64
+ >>> from hydpy import IntegrationTest
65
+ >>> IntegrationTest.plotting_options.activated=(
66
+ ... fluxes.qin, fluxes.qout)
67
+ >>> test = IntegrationTest(
68
+ ... stream,
69
+ ... seqs=(fluxes.qin, fluxes.qpin, fluxes.qpout,
70
+ ... fluxes.qout, nodes.output.sequences.sim))
71
+
72
+ To start the respective example runs from stationary conditions, a base flow value of
73
+ 2 m³/s is set for all values of the log sequences |LogIn| and |LogOut|:
74
+
75
+ >>> test.inits = ((logs.login, 2.0),
76
+ ... (logs.logout, 2.0))
77
+
78
+ We want to print just the time instead of the whole date:
79
+
80
+ >>> test.dateformat = "%H:%M"
81
+
82
+ We define two flood events, one for each inlet node:
83
+
84
+ >>> nodes.input1.sequences.sim.series = (
85
+ ... 1.0, 1.0, 2.0, 4.0, 3.0, 2.0, 1.0, 1.0, 1.0, 1.0,
86
+ ... 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0)
87
+ >>> nodes.input2.sequences.sim.series = (
88
+ ... 1.0, 2.0, 6.0, 9.0, 8.0, 6.0, 4.0, 3.0, 2.0, 1.0,
89
+ ... 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0)
90
+
91
+ .. _arma_rimorido_ma:
92
+
93
+ MA coefficients
94
+ _______________
95
+
96
+ In the first example, we define a pure fourth-order moving average (MA) process via the
97
+ control parameter |Responses|:
98
+
99
+ >>> responses(((), (0.2, 0.4, 0.3, 0.1)))
100
+
101
+ This configuration leads to a usual "unit hydrograph" convolution result, where all
102
+ inflow "impulses" are separated into the actual and the three subsequent time steps:
103
+
104
+ .. integration-test::
105
+
106
+ >>> test("arma_rimorido_ma")
107
+ | date | qin | qpin | qpout | qout | output |
108
+ -----------------------------------------------
109
+ | 00:00 | 2.0 | 2.0 | 2.0 | 2.0 | 2.0 |
110
+ | 01:00 | 3.0 | 3.0 | 2.2 | 2.2 | 2.2 |
111
+ | 02:00 | 8.0 | 8.0 | 3.6 | 3.6 | 3.6 |
112
+ | 03:00 | 13.0 | 13.0 | 6.9 | 6.9 | 6.9 |
113
+ | 04:00 | 11.0 | 11.0 | 10.1 | 10.1 | 10.1 |
114
+ | 05:00 | 8.0 | 8.0 | 10.7 | 10.7 | 10.7 |
115
+ | 06:00 | 5.0 | 5.0 | 8.8 | 8.8 | 8.8 |
116
+ | 07:00 | 4.0 | 4.0 | 6.3 | 6.3 | 6.3 |
117
+ | 08:00 | 3.0 | 3.0 | 4.5 | 4.5 | 4.5 |
118
+ | 09:00 | 2.0 | 2.0 | 3.3 | 3.3 | 3.3 |
119
+ | 10:00 | 2.0 | 2.0 | 2.5 | 2.5 | 2.5 |
120
+ | 11:00 | 2.0 | 2.0 | 2.1 | 2.1 | 2.1 |
121
+ | 12:00 | 2.0 | 2.0 | 2.0 | 2.0 | 2.0 |
122
+ | 13:00 | 2.0 | 2.0 | 2.0 | 2.0 | 2.0 |
123
+ | 14:00 | 2.0 | 2.0 | 2.0 | 2.0 | 2.0 |
124
+ | 15:00 | 2.0 | 2.0 | 2.0 | 2.0 | 2.0 |
125
+ | 16:00 | 2.0 | 2.0 | 2.0 | 2.0 | 2.0 |
126
+ | 17:00 | 2.0 | 2.0 | 2.0 | 2.0 | 2.0 |
127
+ | 18:00 | 2.0 | 2.0 | 2.0 | 2.0 | 2.0 |
128
+ | 19:00 | 2.0 | 2.0 | 2.0 | 2.0 | 2.0 |
129
+
130
+ .. _arma_rimorido_arma:
131
+
132
+ ARMA coefficients
133
+ _________________
134
+
135
+ Now, we set the order of the MA process to the smallest possible value, which is one.
136
+ The autoregression (AR) process is of order two. Note that negative AR coefficients
137
+ are allowed (also note the opposite signs of the coefficients in contrast to the
138
+ statistical literature):
139
+
140
+ >>> responses(((1.1, -0.3), (0.2,)))
141
+
142
+ Due to the AR process, the maximum time delay of some fractions of each input impulse
143
+ is theoretically infinite:
144
+
145
+ .. integration-test::
146
+
147
+ >>> test("arma_rimorido_arma")
148
+ | date | qin | qpin | qpout | qout | output |
149
+ --------------------------------------------------------
150
+ | 00:00 | 2.0 | 2.0 | 2.0 | 2.0 | 2.0 |
151
+ | 01:00 | 3.0 | 3.0 | 2.2 | 2.2 | 2.2 |
152
+ | 02:00 | 8.0 | 8.0 | 3.42 | 3.42 | 3.42 |
153
+ | 03:00 | 13.0 | 13.0 | 5.702 | 5.702 | 5.702 |
154
+ | 04:00 | 11.0 | 11.0 | 7.4462 | 7.4462 | 7.4462 |
155
+ | 05:00 | 8.0 | 8.0 | 8.08022 | 8.08022 | 8.08022 |
156
+ | 06:00 | 5.0 | 5.0 | 7.654382 | 7.654382 | 7.654382 |
157
+ | 07:00 | 4.0 | 4.0 | 6.795754 | 6.795754 | 6.795754 |
158
+ | 08:00 | 3.0 | 3.0 | 5.779015 | 5.779015 | 5.779015 |
159
+ | 09:00 | 2.0 | 2.0 | 4.71819 | 4.71819 | 4.71819 |
160
+ | 10:00 | 2.0 | 2.0 | 3.856305 | 3.856305 | 3.856305 |
161
+ | 11:00 | 2.0 | 2.0 | 3.226478 | 3.226478 | 3.226478 |
162
+ | 12:00 | 2.0 | 2.0 | 2.792235 | 2.792235 | 2.792235 |
163
+ | 13:00 | 2.0 | 2.0 | 2.503515 | 2.503515 | 2.503515 |
164
+ | 14:00 | 2.0 | 2.0 | 2.316196 | 2.316196 | 2.316196 |
165
+ | 15:00 | 2.0 | 2.0 | 2.196761 | 2.196761 | 2.196761 |
166
+ | 16:00 | 2.0 | 2.0 | 2.121578 | 2.121578 | 2.121578 |
167
+ | 17:00 | 2.0 | 2.0 | 2.074708 | 2.074708 | 2.074708 |
168
+ | 18:00 | 2.0 | 2.0 | 2.045705 | 2.045705 | 2.045705 |
169
+ | 19:00 | 2.0 | 2.0 | 2.027863 | 2.027863 | 2.027863 |
170
+
171
+ .. _arma_rimorido_delay:
172
+
173
+ Increased delay
174
+ _______________
175
+
176
+ This example is identical to the second one, except for the additional time delay of
177
+ exactly one hour due to the changed MA process:
178
+
179
+ >>> responses(((1.1, -0.3), (0.0, 0.2)))
180
+
181
+ .. integration-test::
182
+
183
+ >>> test("arma_rimorido_delay")
184
+ | date | qin | qpin | qpout | qout | output |
185
+ --------------------------------------------------------
186
+ | 00:00 | 2.0 | 2.0 | 2.0 | 2.0 | 2.0 |
187
+ | 01:00 | 3.0 | 3.0 | 2.0 | 2.0 | 2.0 |
188
+ | 02:00 | 8.0 | 8.0 | 2.2 | 2.2 | 2.2 |
189
+ | 03:00 | 13.0 | 13.0 | 3.42 | 3.42 | 3.42 |
190
+ | 04:00 | 11.0 | 11.0 | 5.702 | 5.702 | 5.702 |
191
+ | 05:00 | 8.0 | 8.0 | 7.4462 | 7.4462 | 7.4462 |
192
+ | 06:00 | 5.0 | 5.0 | 8.08022 | 8.08022 | 8.08022 |
193
+ | 07:00 | 4.0 | 4.0 | 7.654382 | 7.654382 | 7.654382 |
194
+ | 08:00 | 3.0 | 3.0 | 6.795754 | 6.795754 | 6.795754 |
195
+ | 09:00 | 2.0 | 2.0 | 5.779015 | 5.779015 | 5.779015 |
196
+ | 10:00 | 2.0 | 2.0 | 4.71819 | 4.71819 | 4.71819 |
197
+ | 11:00 | 2.0 | 2.0 | 3.856305 | 3.856305 | 3.856305 |
198
+ | 12:00 | 2.0 | 2.0 | 3.226478 | 3.226478 | 3.226478 |
199
+ | 13:00 | 2.0 | 2.0 | 2.792235 | 2.792235 | 2.792235 |
200
+ | 14:00 | 2.0 | 2.0 | 2.503515 | 2.503515 | 2.503515 |
201
+ | 15:00 | 2.0 | 2.0 | 2.316196 | 2.316196 | 2.316196 |
202
+ | 16:00 | 2.0 | 2.0 | 2.196761 | 2.196761 | 2.196761 |
203
+ | 17:00 | 2.0 | 2.0 | 2.121578 | 2.121578 | 2.121578 |
204
+ | 18:00 | 2.0 | 2.0 | 2.074708 | 2.074708 | 2.074708 |
205
+ | 19:00 | 2.0 | 2.0 | 2.045705 | 2.045705 | 2.045705 |
206
+
207
+ .. _arma_rimorido_negative_discharge:
208
+
209
+ Negative discharge
210
+ __________________
211
+
212
+ In some hydrological applications, the inflow into a channel might sometimes be lower
213
+ than 0 m³/s. |arma_rimorido| generally routes such negative discharges using the
214
+ response function with the lowest discharge threshold. When we repeat the calculation
215
+ of the :ref:`arma_rimorido_delay` example with inflow constantly decreased by 3 m³/s,
216
+ the outflow is also constantly decreased by 3 m³/s, and many simulated values are
217
+ negative:
218
+
219
+ .. integration-test::
220
+
221
+ >>> nodes.input1.sequences.sim.series -= 3.0
222
+ >>> test.inits = ((logs.login, -1.0),
223
+ ... (logs.logout, -1.0))
224
+ >>> test("arma_rimorido_negative_discharge")
225
+ | date | qin | qpin | qpout | qout | output |
226
+ -----------------------------------------------------------
227
+ | 00:00 | -1.0 | -1.0 | -1.0 | -1.0 | -1.0 |
228
+ | 01:00 | 0.0 | 0.0 | -1.0 | -1.0 | -1.0 |
229
+ | 02:00 | 5.0 | 5.0 | -0.8 | -0.8 | -0.8 |
230
+ | 03:00 | 10.0 | 10.0 | 0.42 | 0.42 | 0.42 |
231
+ | 04:00 | 8.0 | 8.0 | 2.702 | 2.702 | 2.702 |
232
+ | 05:00 | 5.0 | 5.0 | 4.4462 | 4.4462 | 4.4462 |
233
+ | 06:00 | 2.0 | 2.0 | 5.08022 | 5.08022 | 5.08022 |
234
+ | 07:00 | 1.0 | 1.0 | 4.654382 | 4.654382 | 4.654382 |
235
+ | 08:00 | 0.0 | 0.0 | 3.795754 | 3.795754 | 3.795754 |
236
+ | 09:00 | -1.0 | -1.0 | 2.779015 | 2.779015 | 2.779015 |
237
+ | 10:00 | -1.0 | -1.0 | 1.71819 | 1.71819 | 1.71819 |
238
+ | 11:00 | -1.0 | -1.0 | 0.856305 | 0.856305 | 0.856305 |
239
+ | 12:00 | -1.0 | -1.0 | 0.226478 | 0.226478 | 0.226478 |
240
+ | 13:00 | -1.0 | -1.0 | -0.207765 | -0.207765 | -0.207765 |
241
+ | 14:00 | -1.0 | -1.0 | -0.496485 | -0.496485 | -0.496485 |
242
+ | 15:00 | -1.0 | -1.0 | -0.683804 | -0.683804 | -0.683804 |
243
+ | 16:00 | -1.0 | -1.0 | -0.803239 | -0.803239 | -0.803239 |
244
+ | 17:00 | -1.0 | -1.0 | -0.878422 | -0.878422 | -0.878422 |
245
+ | 18:00 | -1.0 | -1.0 | -0.925292 | -0.925292 | -0.925292 |
246
+ | 19:00 | -1.0 | -1.0 | -0.954295 | -0.954295 | -0.954295 |
247
+
248
+ >>> nodes.input1.sequences.sim.series += 3.0
249
+ >>> test.inits = ((logs.login, 2.0),
250
+ ... (logs.logout, 2.0))
251
+
252
+ .. _arma_rimorido_plausibility:
253
+
254
+ Plausibility
255
+ ____________
256
+
257
+ Be aware that neither parameter |Responses| checks the assigned coefficients nor does
258
+ |arma_rimorido| check the calculated outflow for plausibility (one can use the features
259
+ provided in modules |iuhtools| and |armatools| to calculate reliable coefficients).
260
+ The fourth example increases the span of the AR coefficients used in the third example.
261
+ The complete ARMA process is still mass conservative, but some response values of the
262
+ recession curve are negative:
263
+
264
+ .. integration-test::
265
+
266
+ >>> responses(((1.5, -0.7), (0.0, 0.2)))
267
+ >>> test("arma_rimorido_plausibility")
268
+ | date | qin | qpin | qpout | qout | output |
269
+ -----------------------------------------------------------
270
+ | 00:00 | 2.0 | 2.0 | 2.0 | 2.0 | 2.0 |
271
+ | 01:00 | 3.0 | 3.0 | 2.0 | 2.0 | 2.0 |
272
+ | 02:00 | 8.0 | 8.0 | 2.2 | 2.2 | 2.2 |
273
+ | 03:00 | 13.0 | 13.0 | 3.5 | 3.5 | 3.5 |
274
+ | 04:00 | 11.0 | 11.0 | 6.31 | 6.31 | 6.31 |
275
+ | 05:00 | 8.0 | 8.0 | 9.215 | 9.215 | 9.215 |
276
+ | 06:00 | 5.0 | 5.0 | 11.0055 | 11.0055 | 11.0055 |
277
+ | 07:00 | 4.0 | 4.0 | 11.05775 | 11.05775 | 11.05775 |
278
+ | 08:00 | 3.0 | 3.0 | 9.682775 | 9.682775 | 9.682775 |
279
+ | 09:00 | 2.0 | 2.0 | 7.383738 | 7.383738 | 7.383738 |
280
+ | 10:00 | 2.0 | 2.0 | 4.697664 | 4.697664 | 4.697664 |
281
+ | 11:00 | 2.0 | 2.0 | 2.277879 | 2.277879 | 2.277879 |
282
+ | 12:00 | 2.0 | 2.0 | 0.528454 | 0.528454 | 0.528454 |
283
+ | 13:00 | 2.0 | 2.0 | -0.401834 | -0.401834 | -0.401834 |
284
+ | 14:00 | 2.0 | 2.0 | -0.572669 | -0.572669 | -0.572669 |
285
+ | 15:00 | 2.0 | 2.0 | -0.17772 | -0.17772 | -0.17772 |
286
+ | 16:00 | 2.0 | 2.0 | 0.534289 | 0.534289 | 0.534289 |
287
+ | 17:00 | 2.0 | 2.0 | 1.325837 | 1.325837 | 1.325837 |
288
+ | 18:00 | 2.0 | 2.0 | 2.014753 | 2.014753 | 2.014753 |
289
+ | 19:00 | 2.0 | 2.0 | 2.494044 | 2.494044 | 2.494044 |
290
+
291
+ .. _arma_rimorido_nonlinearity:
292
+
293
+ Nonlinearity
294
+ ____________
295
+
296
+ In the following example, we combine the coefficients of the first two examples.
297
+ Between inflow values of 0 and 7 m³/s, the pure AR process is applied. For inflow
298
+ discharges exceeding 7 m³/s, inflow is separated. The AR process is still applied on
299
+ the portion of 7 m³/s, but for the inflow exceeding this threshold, the mixed ARMA
300
+ model is applied:
301
+
302
+ >>> responses(_0=((), (0.2, 0.4, 0.3, 0.1)),
303
+ ... _7=((1.1, -0.3), (0.2,)))
304
+
305
+ To start from stationary conditions again, one has to apply different values to both
306
+ log sequences. The base flow value of 2 m³/s is only given to the (low flow) MA model;
307
+ the (high flow) ARMA model is initialized with zero values instead:
308
+
309
+ >>> test.inits.login = [[2.0], [0.0]]
310
+ >>> test.inits.logout = [[2.0], [0.0]]
311
+
312
+ The separate handling of the inflow can be studied by inspecting the columns of
313
+ sequence |QPIn| and sequence |QPOut|. The respective left columns show the input and
314
+ output of the MA model, and the respective right columns show the input and output of
315
+ the ARMA model:
316
+
317
+ .. integration-test::
318
+
319
+ >>> test("arma_rimorido_nonlinearity")
320
+ | date | qin | qpin | qpout | qout | output |
321
+ ------------------------------------------------------------------
322
+ | 00:00 | 2.0 | 2.0 0.0 | 2.0 0.0 | 2.0 | 2.0 |
323
+ | 01:00 | 3.0 | 3.0 0.0 | 2.2 0.0 | 2.2 | 2.2 |
324
+ | 02:00 | 8.0 | 7.0 1.0 | 3.4 0.2 | 3.6 | 3.6 |
325
+ | 03:00 | 13.0 | 7.0 6.0 | 5.3 1.42 | 6.72 | 6.72 |
326
+ | 04:00 | 11.0 | 7.0 4.0 | 6.6 2.302 | 8.902 | 8.902 |
327
+ | 05:00 | 8.0 | 7.0 1.0 | 7.0 2.3062 | 9.3062 | 9.3062 |
328
+ | 06:00 | 5.0 | 5.0 0.0 | 6.6 1.84622 | 8.44622 | 8.44622 |
329
+ | 07:00 | 4.0 | 4.0 0.0 | 5.6 1.338982 | 6.938982 | 6.938982 |
330
+ | 08:00 | 3.0 | 3.0 0.0 | 4.4 0.919014 | 5.319014 | 5.319014 |
331
+ | 09:00 | 2.0 | 2.0 0.0 | 3.3 0.609221 | 3.909221 | 3.909221 |
332
+ | 10:00 | 2.0 | 2.0 0.0 | 2.5 0.394439 | 2.894439 | 2.894439 |
333
+ | 11:00 | 2.0 | 2.0 0.0 | 2.1 0.251116 | 2.351116 | 2.351116 |
334
+ | 12:00 | 2.0 | 2.0 0.0 | 2.0 0.157896 | 2.157896 | 2.157896 |
335
+ | 13:00 | 2.0 | 2.0 0.0 | 2.0 0.098351 | 2.098351 | 2.098351 |
336
+ | 14:00 | 2.0 | 2.0 0.0 | 2.0 0.060817 | 2.060817 | 2.060817 |
337
+ | 15:00 | 2.0 | 2.0 0.0 | 2.0 0.037394 | 2.037394 | 2.037394 |
338
+ | 16:00 | 2.0 | 2.0 0.0 | 2.0 0.022888 | 2.022888 | 2.022888 |
339
+ | 17:00 | 2.0 | 2.0 0.0 | 2.0 0.013959 | 2.013959 | 2.013959 |
340
+ | 18:00 | 2.0 | 2.0 0.0 | 2.0 0.008488 | 2.008488 | 2.008488 |
341
+ | 19:00 | 2.0 | 2.0 0.0 | 2.0 0.005149 | 2.005149 | 2.005149 |
342
+ """
343
+
344
+ # import...
345
+ # ...from HydPy
346
+ from hydpy.exe.modelimports import *
347
+ from hydpy.core import modeltools
348
+
349
+ # ...from arma
350
+ from hydpy.models.arma import arma_model
351
+
352
+
353
+ class Model(modeltools.AdHocModel):
354
+ """|arma_rimorido.DOCNAME.complete|."""
355
+
356
+ DOCNAME = modeltools.DocName(
357
+ short="ARMA-RIMO/RIDO",
358
+ description="nonlinear routing by multiple ARMA processes",
359
+ )
360
+ __HYDPY_ROOTMODEL__ = True
361
+
362
+ INLET_METHODS = (arma_model.Pick_Q_V1,)
363
+ RECEIVER_METHODS = ()
364
+ RUN_METHODS = (
365
+ arma_model.Calc_QPIn_V1,
366
+ arma_model.Update_LogIn_V1,
367
+ arma_model.Calc_QMA_V1,
368
+ arma_model.Calc_QAR_V1,
369
+ arma_model.Calc_QPOut_V1,
370
+ arma_model.Update_LogOut_V1,
371
+ arma_model.Calc_QOut_V1,
372
+ )
373
+ ADD_METHODS = ()
374
+ OUTLET_METHODS = (arma_model.Pass_Q_V1,)
375
+ SENDER_METHODS = ()
376
+ SUBMODELINTERFACES = ()
377
+ SUBMODELS = ()
378
+
379
+
380
+ tester = Tester()
381
+ cythonizer = Cythonizer()
@@ -0,0 +1,12 @@
1
+ """
2
+ The |conv.DOCNAME.complete| model family allows connecting different kinds of models
3
+ providing output and requiring input that does not fit immediately.
4
+ """
5
+
6
+ # import...
7
+ # ...from HydPy
8
+ from hydpy.exe.modelimports import *
9
+ from hydpy.models.conv.conv_model import Model
10
+
11
+ tester = Tester()
12
+ cythonizer = Cythonizer()
@@ -0,0 +1,303 @@
1
+ # pylint: disable=missing-module-docstring
2
+
3
+ # import...
4
+ # ...from site-packages
5
+ import numpy
6
+
7
+ # ...from HydPy
8
+ from hydpy import config
9
+ from hydpy.core import devicetools
10
+ from hydpy.core import objecttools
11
+ from hydpy.core import parametertools
12
+ from hydpy.core.typingtools import *
13
+
14
+
15
+ class Coordinates(parametertools.Parameter):
16
+ """Base class for |InputCoordinates| and |OutputCoordinates| [?].
17
+
18
+ We use the derived class |InputCoordinates| as an example:
19
+
20
+ >>> from hydpy.models.conv import *
21
+ >>> parameterstep()
22
+
23
+ |Coordinates| subclasses define 2-dimensional sequences. Hence, we
24
+ must define their shape first:
25
+
26
+ >>> inputcoordinates
27
+ inputcoordinates(?)
28
+ >>> inputcoordinates.values
29
+ Traceback (most recent call last):
30
+ ...
31
+ hydpy.core.exceptiontools.AttributeNotReady: Shape information for \
32
+ variable `inputcoordinates` can only be retrieved after it has been defined.
33
+
34
+ However, you usually do this automatically when assigning new
35
+ values. Use keyword arguments to define the names of the relevant
36
+ input nodes as well as their coordinates:
37
+
38
+ >>> from hydpy import print_matrix
39
+ >>> inputcoordinates(in1=(1.0, 3.0))
40
+ >>> inputcoordinates
41
+ inputcoordinates(in1=(1.0, 3.0))
42
+ >>> print_matrix(inputcoordinates.values)
43
+ | 1.0, 3.0 |
44
+
45
+ Defining new coordinates removes the old ones:
46
+
47
+ >>> inputcoordinates(in2=(2.0, 4.0),
48
+ ... in0=(3.0, 5.0),
49
+ ... in3=(4.0, 6.0))
50
+ >>> inputcoordinates
51
+ inputcoordinates(in2=(2.0, 4.0),
52
+ in0=(3.0, 5.0),
53
+ in3=(4.0, 6.0))
54
+ >>> print_matrix(inputcoordinates.values)
55
+ | 2.0, 4.0 |
56
+ | 3.0, 5.0 |
57
+ | 4.0, 6.0 |
58
+
59
+ You are free to change individual coordinate values (the rows of the
60
+ data array contain the different value pairs; the row order
61
+ corresponds to the definition order when "calling" the parameter):
62
+
63
+ >>> inputcoordinates.values[1, 0] = 9.0
64
+ >>> inputcoordinates
65
+ inputcoordinates(in2=(2.0, 4.0),
66
+ in0=(9.0, 5.0),
67
+ in3=(4.0, 6.0))
68
+
69
+ The attribute |Coordinates.nodes| stores the correctly ordered nodes:
70
+
71
+ >>> inputcoordinates.nodes
72
+ (Node("in2", variable="Q"), Node("in0", variable="Q"), \
73
+ Node("in3", variable="Q"))
74
+ """
75
+
76
+ NDIM, TYPE, TIME, SPAN = 2, float, None, (None, None)
77
+
78
+ nodes: tuple[devicetools.Node, ...]
79
+ """The relevant input or output nodes."""
80
+
81
+ def __init__(self, subvars: parametertools.SubParameters):
82
+ super().__init__(subvars)
83
+ self.nodes = ()
84
+
85
+ def __call__(self, *args, **kwargs) -> None:
86
+ nodes = []
87
+ coordinates = numpy.empty((len(kwargs), 2), dtype=config.NP_FLOAT)
88
+ for idx, (name, values) in enumerate(kwargs.items()):
89
+ nodes.append(devicetools.Node(name))
90
+ coordinates[idx, :] = values
91
+ self.nodes = tuple(nodes)
92
+ self._set_shape((len(nodes), 2))
93
+ self._set_value(coordinates)
94
+
95
+ def __repr__(self) -> str:
96
+ prefix = f"{self.name}("
97
+ blanks = " " * len(prefix)
98
+ lines = []
99
+ if self.nodes:
100
+ for idx, node in enumerate(self.nodes):
101
+ entry = f"{node.name}={objecttools.repr_tuple(self.values[idx, :])}"
102
+ if not idx:
103
+ lines.append(f"{prefix}{entry}")
104
+ else:
105
+ lines.append(f"{blanks}{entry}")
106
+ if idx < len(self.nodes) - 1:
107
+ lines[-1] += ","
108
+ else:
109
+ lines[-1] += ")"
110
+ return "\n".join(lines)
111
+ return f"{prefix}?)"
112
+
113
+
114
+ class InputCoordinates(Coordinates):
115
+ """Coordinates of the inlet nodes [?]."""
116
+
117
+
118
+ class OutputCoordinates(Coordinates):
119
+ """Coordinates of the outlet nodes [?]."""
120
+
121
+
122
+ class Heights(parametertools.Parameter):
123
+ """Base class for |InputHeights| and |OutputHeights| [?].
124
+
125
+ We use the derived class |InputHeights| as an example:
126
+
127
+ >>> from hydpy.models.conv import *
128
+ >>> parameterstep()
129
+
130
+ |Heights| subclasses define 1-dimensional sequences. Hence, we must define
131
+ their shape first:
132
+
133
+ >>> inputheights
134
+ inputheights(?)
135
+ >>> inputheights.values
136
+ Traceback (most recent call last):
137
+ ...
138
+ hydpy.core.exceptiontools.AttributeNotReady: Shape information for \
139
+ variable `inputheights` can only be retrieved after it has been defined.
140
+
141
+ However, you usually do this automatically when assigning new values.
142
+ Use keyword arguments to define the names of the relevant input nodes
143
+ as well as their heights:
144
+
145
+ >>> from hydpy import print_vector
146
+ >>> inputheights(in1=1.0)
147
+ >>> inputheights
148
+ inputheights(in1=1.0)
149
+ >>> print_vector(inputheights.values)
150
+ 1.0
151
+
152
+ Defining new heights removes the old ones:
153
+
154
+ >>> inputheights(in2=2.0,
155
+ ... in0=3.0,
156
+ ... in3=4.0)
157
+ >>> inputheights
158
+ inputheights(in2=2.0,
159
+ in0=3.0,
160
+ in3=4.0)
161
+ >>> print_vector(inputheights.values)
162
+ 2.0, 3.0, 4.0
163
+
164
+ You are free to change individual height values (the row order corresponds
165
+ to the definition order when "calling" the parameter):
166
+
167
+ >>> inputheights.values[1] = 9.0
168
+ >>> inputheights
169
+ inputheights(in2=2.0,
170
+ in0=9.0,
171
+ in3=4.0)
172
+
173
+ The attribute |Heights.nodes| stores the correctly ordered nodes:
174
+
175
+ >>> inputheights.nodes
176
+ (Node("in2", variable="Q"), Node("in0", variable="Q"), \
177
+ Node("in3", variable="Q"))
178
+ """
179
+
180
+ NDIM, TYPE, TIME, SPAN = 1, float, None, (None, None)
181
+
182
+ nodes: tuple[devicetools.Node, ...]
183
+ """The relevant input or output nodes."""
184
+
185
+ def __init__(self, subvars: parametertools.SubParameters):
186
+ super().__init__(subvars)
187
+ self.nodes = ()
188
+
189
+ def __call__(self, *args, **kwargs) -> None:
190
+ nodes = []
191
+ heights = numpy.empty(len(kwargs), dtype=config.NP_FLOAT)
192
+ for idx, (name, value) in enumerate(kwargs.items()):
193
+ nodes.append(devicetools.Node(name))
194
+ heights[idx] = value
195
+ self.nodes = tuple(nodes)
196
+ self._set_shape(len(nodes))
197
+ self._set_value(heights)
198
+
199
+ def __repr__(self) -> str:
200
+ prefix = f"{self.name}("
201
+ blanks = " " * len(prefix)
202
+ lines = []
203
+ if self.nodes:
204
+ for idx, node in enumerate(self.nodes):
205
+ entry = f"{node.name}={self.values[idx]}"
206
+ if not idx:
207
+ lines.append(f"{prefix}{entry}")
208
+ else:
209
+ lines.append(f"{blanks}{entry}")
210
+ if idx < len(self.nodes) - 1:
211
+ lines[-1] += ","
212
+ else:
213
+ lines[-1] += ")"
214
+ return "\n".join(lines)
215
+ return f"{prefix}?)"
216
+
217
+
218
+ class InputHeights(Heights):
219
+ """The height (above sea level or anything else) of the input nodes [?]."""
220
+
221
+
222
+ class OutputHeights(Heights):
223
+ """The height (above sea level or anything else) of the output nodes [?]."""
224
+
225
+
226
+ class MaxNmbInputs(parametertools.Parameter):
227
+ """The maximum number of input locations to be taken into account for
228
+ interpolating the values of a specific output location [-].
229
+
230
+ When passing no value, parameter |MaxNmbInputs| queries it from the shape
231
+ of parameter |InputCoordinates|:
232
+
233
+ >>> from hydpy.models.conv import *
234
+ >>> parameterstep()
235
+ >>> inputcoordinates(in2=(2.0, 4.0),
236
+ ... in0=(3.0, 5.0),
237
+ ... in3=(4.0, 6.0))
238
+ >>> maxnmbinputs()
239
+ >>> maxnmbinputs
240
+ maxnmbinputs(3)
241
+
242
+ You can define alternative values manually:
243
+
244
+ >>> maxnmbinputs(2)
245
+ >>> maxnmbinputs
246
+ maxnmbinputs(2)
247
+ """
248
+
249
+ NDIM, TYPE, TIME, SPAN = 0, int, None, (1, None)
250
+
251
+ def __call__(self, *args, **kwargs) -> None:
252
+ if not args and not kwargs:
253
+ super().__call__(self.subpars.inputcoordinates.shape[0])
254
+ else:
255
+ super().__call__(*args, **kwargs)
256
+
257
+ def trim(self, lower=None, upper=None) -> bool:
258
+ """Assure that the value of |MaxNmbInputs| does not exceed the
259
+ number of available input locations.
260
+
261
+ >>> from hydpy.models.conv import *
262
+ >>> parameterstep()
263
+ >>> inputcoordinates(in2=(2.0, 4.0),
264
+ ... in0=(3.0, 5.0),
265
+ ... in3=(4.0, 6.0))
266
+ >>> maxnmbinputs(0)
267
+ Traceback (most recent call last):
268
+ ...
269
+ ValueError: The value `0` of parameter `maxnmbinputs` of \
270
+ element `?` is not valid.
271
+ >>> maxnmbinputs(4)
272
+ Traceback (most recent call last):
273
+ ...
274
+ ValueError: The value `4` of parameter `maxnmbinputs` of \
275
+ element `?` is not valid.
276
+ """
277
+ if upper is None:
278
+ upper = self.subpars.inputcoordinates.shape[0]
279
+ return super().trim(lower, upper)
280
+
281
+
282
+ class MinNmbInputs(parametertools.Parameter):
283
+ """The minimum number of inputs for performing a statistical analysis [-]."""
284
+
285
+ NDIM, TYPE, TIME, SPAN = 0, int, None, (2, None)
286
+
287
+
288
+ class DefaultConstant(parametertools.Parameter):
289
+ """Default or fallback value for the constant of the linear regression model [?]."""
290
+
291
+ NDIM, TYPE, TIME, SPAN = 0, float, None, (None, None)
292
+
293
+
294
+ class DefaultFactor(parametertools.Parameter):
295
+ """Default or fallback value for the factor of the linear regression model [?]."""
296
+
297
+ NDIM, TYPE, TIME, SPAN = 0, float, None, (-1.0, 1.0)
298
+
299
+
300
+ class Power(parametertools.Parameter):
301
+ """Power parameter for calculating inverse distance weights [-]."""
302
+
303
+ NDIM, TYPE, TIME, SPAN = 0, float, None, (0, None)