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