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