openswmm 6.0.0.dev0__tar.gz → 6.0.0.dev2__tar.gz

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 (416) hide show
  1. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/CMakeLists.txt +43 -0
  2. openswmm-6.0.0.dev2/PKG-INFO +261 -0
  3. openswmm-6.0.0.dev2/README.md +215 -0
  4. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/cmake/CythonHelpers.cmake +11 -7
  5. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/.buildinfo +1 -1
  6. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/.doctrees/__intersphinx_cache__/python_objects.inv +0 -0
  7. openswmm-6.0.0.dev2/docs/_build/html/.doctrees/api.doctree +0 -0
  8. openswmm-6.0.0.dev2/docs/_build/html/.doctrees/environment.pickle +0 -0
  9. openswmm-6.0.0.dev2/docs/_build/html/.doctrees/guide/concepts.doctree +0 -0
  10. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/.doctrees/guide/controls.doctree +0 -0
  11. openswmm-6.0.0.dev2/docs/_build/html/.doctrees/guide/editing.doctree +0 -0
  12. openswmm-6.0.0.dev2/docs/_build/html/.doctrees/guide/error_handling.doctree +0 -0
  13. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/.doctrees/guide/forcing.doctree +0 -0
  14. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/.doctrees/guide/gages.doctree +0 -0
  15. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/.doctrees/guide/hotstart.doctree +0 -0
  16. openswmm-6.0.0.dev2/docs/_build/html/.doctrees/guide/inflows.doctree +0 -0
  17. openswmm-6.0.0.dev2/docs/_build/html/.doctrees/guide/infrastructure.doctree +0 -0
  18. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/.doctrees/guide/install.doctree +0 -0
  19. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/.doctrees/guide/links.doctree +0 -0
  20. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/.doctrees/guide/massbalance.doctree +0 -0
  21. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/.doctrees/guide/model_builder.doctree +0 -0
  22. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/.doctrees/guide/nodes.doctree +0 -0
  23. openswmm-6.0.0.dev2/docs/_build/html/.doctrees/guide/output_reader.doctree +0 -0
  24. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/.doctrees/guide/pollutants.doctree +0 -0
  25. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/.doctrees/guide/quality.doctree +0 -0
  26. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/.doctrees/guide/quickstart.doctree +0 -0
  27. openswmm-6.0.0.dev2/docs/_build/html/.doctrees/guide/solver.doctree +0 -0
  28. openswmm-6.0.0.dev2/docs/_build/html/.doctrees/guide/spatial.doctree +0 -0
  29. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/.doctrees/guide/statistics.doctree +0 -0
  30. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/.doctrees/guide/subcatchments.doctree +0 -0
  31. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/.doctrees/guide/tables.doctree +0 -0
  32. openswmm-6.0.0.dev2/docs/_build/html/.doctrees/index.doctree +0 -0
  33. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/.doctrees/license.doctree +0 -0
  34. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/.doctrees/migration/swmm5_to_swmm6.doctree +0 -0
  35. openswmm-6.0.0.dev2/docs/_build/html/_modules/index.html +624 -0
  36. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_modules/openswmm/legacy/engine/_forcing_log.html +245 -231
  37. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_modules/openswmm/legacy/engine/_links.html +245 -231
  38. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_modules/openswmm/legacy/engine/_nodes.html +245 -231
  39. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_modules/openswmm/legacy/engine/_raingages.html +245 -231
  40. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_modules/openswmm/legacy/engine/_subcatchments.html +245 -231
  41. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_modules/openswmm/legacy/engine/_system.html +245 -231
  42. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_sources/guide/concepts.rst.txt +42 -22
  43. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_sources/guide/controls.rst.txt +10 -4
  44. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_sources/guide/editing.rst.txt +29 -8
  45. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_sources/guide/error_handling.rst.txt +22 -15
  46. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_sources/guide/forcing.rst.txt +7 -3
  47. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_sources/guide/gages.rst.txt +13 -6
  48. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_sources/guide/hotstart.rst.txt +57 -11
  49. openswmm-6.0.0.dev2/docs/_build/html/_sources/guide/inflows.rst.txt +305 -0
  50. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_sources/guide/infrastructure.rst.txt +66 -61
  51. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_sources/guide/install.rst.txt +12 -2
  52. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_sources/guide/links.rst.txt +21 -10
  53. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_sources/guide/massbalance.rst.txt +4 -3
  54. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_sources/guide/model_builder.rst.txt +4 -3
  55. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_sources/guide/nodes.rst.txt +19 -8
  56. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_sources/guide/output_reader.rst.txt +70 -42
  57. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_sources/guide/pollutants.rst.txt +8 -4
  58. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_sources/guide/quality.rst.txt +29 -21
  59. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_sources/guide/quickstart.rst.txt +29 -14
  60. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_sources/guide/solver.rst.txt +87 -19
  61. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_sources/guide/spatial.rst.txt +42 -31
  62. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_sources/guide/statistics.rst.txt +4 -2
  63. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_sources/guide/subcatchments.rst.txt +16 -8
  64. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_sources/guide/tables.rst.txt +4 -3
  65. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_sources/migration/swmm5_to_swmm6.rst.txt +22 -11
  66. openswmm-6.0.0.dev0/docs/_build/html/_static/sphinx-design.min.css → openswmm-6.0.0.dev2/docs/_build/html/_sphinx_design_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css +1 -1
  67. openswmm-6.0.0.dev2/docs/_build/html/_sphinx_design_static/design-tabs.js +27 -0
  68. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_static/basic.css +1 -1
  69. openswmm-6.0.0.dev0/docs/_build/html/_sphinx_design_static/sphinx-design.min.css → openswmm-6.0.0.dev2/docs/_build/html/_static/design-style.1e8bd061cd6da7fc9cf755528e8ffc24.min.css +1 -1
  70. openswmm-6.0.0.dev2/docs/_build/html/_static/design-tabs.js +27 -0
  71. openswmm-6.0.0.dev2/docs/_build/html/_static/scripts/bootstrap.js +3 -0
  72. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_static/scripts/bootstrap.js.LICENSE.txt +2 -2
  73. openswmm-6.0.0.dev2/docs/_build/html/_static/scripts/bootstrap.js.map +1 -0
  74. openswmm-6.0.0.dev2/docs/_build/html/_static/scripts/pydata-sphinx-theme.js +2 -0
  75. openswmm-6.0.0.dev2/docs/_build/html/_static/scripts/pydata-sphinx-theme.js.map +1 -0
  76. openswmm-6.0.0.dev2/docs/_build/html/_static/styles/bootstrap.css +6 -0
  77. openswmm-6.0.0.dev2/docs/_build/html/_static/styles/bootstrap.css.map +1 -0
  78. openswmm-6.0.0.dev2/docs/_build/html/_static/styles/pydata-sphinx-theme.css +2 -0
  79. openswmm-6.0.0.dev2/docs/_build/html/_static/styles/pydata-sphinx-theme.css.map +1 -0
  80. openswmm-6.0.0.dev2/docs/_build/html/_static/vendor/fontawesome/6.5.1/LICENSE.txt +165 -0
  81. openswmm-6.0.0.dev2/docs/_build/html/_static/vendor/fontawesome/6.5.1/css/all.min.css +5 -0
  82. openswmm-6.0.0.dev2/docs/_build/html/_static/vendor/fontawesome/6.5.1/js/all.min.js +2 -0
  83. openswmm-6.0.0.dev0/docs/_build/html/_static/scripts/fontawesome.js.LICENSE.txt → openswmm-6.0.0.dev2/docs/_build/html/_static/vendor/fontawesome/6.5.1/js/all.min.js.LICENSE.txt +2 -2
  84. {openswmm-6.0.0.dev0/docs/_build/html/_static/vendor/fontawesome → openswmm-6.0.0.dev2/docs/_build/html/_static/vendor/fontawesome/6.5.1}/webfonts/fa-brands-400.ttf +0 -0
  85. openswmm-6.0.0.dev2/docs/_build/html/_static/vendor/fontawesome/6.5.1/webfonts/fa-brands-400.woff2 +0 -0
  86. {openswmm-6.0.0.dev0/docs/_build/html/_static/vendor/fontawesome → openswmm-6.0.0.dev2/docs/_build/html/_static/vendor/fontawesome/6.5.1}/webfonts/fa-regular-400.ttf +0 -0
  87. openswmm-6.0.0.dev2/docs/_build/html/_static/vendor/fontawesome/6.5.1/webfonts/fa-regular-400.woff2 +0 -0
  88. {openswmm-6.0.0.dev0/docs/_build/html/_static/vendor/fontawesome → openswmm-6.0.0.dev2/docs/_build/html/_static/vendor/fontawesome/6.5.1}/webfonts/fa-solid-900.ttf +0 -0
  89. openswmm-6.0.0.dev2/docs/_build/html/_static/vendor/fontawesome/6.5.1/webfonts/fa-solid-900.woff2 +0 -0
  90. openswmm-6.0.0.dev2/docs/_build/html/_static/vendor/fontawesome/6.5.1/webfonts/fa-v4compatibility.ttf +0 -0
  91. openswmm-6.0.0.dev2/docs/_build/html/_static/vendor/fontawesome/6.5.1/webfonts/fa-v4compatibility.woff2 +0 -0
  92. openswmm-6.0.0.dev2/docs/_build/html/_static/webpack-macros.html +31 -0
  93. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/api.html +2291 -383
  94. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/genindex.html +528 -251
  95. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/guide/concepts.html +297 -274
  96. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/guide/controls.html +263 -256
  97. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/guide/editing.html +295 -265
  98. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/guide/error_handling.html +278 -269
  99. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/guide/forcing.html +261 -257
  100. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/guide/gages.html +268 -262
  101. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/guide/hotstart.html +324 -267
  102. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/guide/index.html +248 -244
  103. openswmm-6.0.0.dev2/docs/_build/html/guide/inflows.html +1044 -0
  104. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/guide/infrastructure.html +333 -326
  105. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/guide/install.html +272 -260
  106. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/guide/links.html +280 -274
  107. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/guide/massbalance.html +258 -257
  108. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/guide/model_builder.html +259 -259
  109. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/guide/nodes.html +278 -272
  110. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/guide/output_reader.html +337 -300
  111. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/guide/pollutants.html +262 -258
  112. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/guide/quality.html +284 -277
  113. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/guide/quickstart.html +277 -258
  114. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/guide/solver.html +381 -284
  115. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/guide/spatial.html +298 -288
  116. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/guide/statistics.html +260 -260
  117. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/guide/subcatchments.html +275 -272
  118. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/guide/tables.html +258 -257
  119. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/index.html +252 -244
  120. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/legacy/index.html +249 -246
  121. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/legacy/output.html +254 -254
  122. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/legacy/solver.html +253 -252
  123. openswmm-6.0.0.dev2/docs/_build/html/license.html +641 -0
  124. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/migration/swmm5_to_swmm6.html +287 -273
  125. openswmm-6.0.0.dev2/docs/_build/html/objects.inv +0 -0
  126. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/py-modindex.html +241 -229
  127. openswmm-6.0.0.dev2/docs/_build/html/search.html +597 -0
  128. openswmm-6.0.0.dev2/docs/_build/html/searchindex.js +1 -0
  129. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/guide/concepts.rst +57 -22
  130. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/guide/controls.rst +10 -4
  131. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/guide/editing.rst +29 -8
  132. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/guide/error_handling.rst +22 -15
  133. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/guide/forcing.rst +7 -3
  134. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/guide/gages.rst +13 -6
  135. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/guide/hotstart.rst +57 -11
  136. openswmm-6.0.0.dev2/docs/guide/inflows.rst +305 -0
  137. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/guide/infrastructure.rst +66 -61
  138. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/guide/install.rst +12 -2
  139. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/guide/links.rst +100 -13
  140. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/guide/massbalance.rst +4 -3
  141. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/guide/model_builder.rst +4 -3
  142. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/guide/nodes.rst +70 -10
  143. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/guide/output_reader.rst +70 -42
  144. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/guide/pollutants.rst +8 -4
  145. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/guide/quality.rst +29 -21
  146. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/guide/quickstart.rst +29 -14
  147. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/guide/solver.rst +150 -19
  148. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/guide/spatial.rst +42 -31
  149. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/guide/statistics.rst +70 -8
  150. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/guide/subcatchments.rst +60 -19
  151. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/guide/tables.rst +4 -3
  152. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/migration/swmm5_to_swmm6.rst +22 -11
  153. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_2d.pxd +9 -5
  154. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_2d.pyi +47 -4
  155. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_2d.pyx +102 -7
  156. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/__init__.py +20 -0
  157. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_common.pxd +196 -37
  158. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_controls.pyi +21 -0
  159. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_controls.pyx +25 -0
  160. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_enums.py +5 -0
  161. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_gages.pyi +29 -1
  162. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_gages.pyx +43 -2
  163. openswmm-6.0.0.dev2/openswmm/engine/_geometry.py +129 -0
  164. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_geopackage.pyi +6 -3
  165. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_geopackage.pyx +101 -51
  166. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_hotstart.pyi +90 -4
  167. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_hotstart.pyx +167 -8
  168. openswmm-6.0.0.dev2/openswmm/engine/_inflows.pyi +339 -0
  169. openswmm-6.0.0.dev2/openswmm/engine/_inflows.pyx +412 -0
  170. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_infrastructure.pyi +34 -0
  171. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_infrastructure.pyx +57 -0
  172. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_links.pyi +302 -5
  173. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_links.pyx +572 -8
  174. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_model.pyi +192 -0
  175. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_model.pyx +115 -0
  176. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_nodes.pyi +128 -6
  177. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_nodes.pyx +250 -13
  178. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_output_reader.pyi +61 -4
  179. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_output_reader.pyx +128 -12
  180. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_pollutants.pyi +13 -0
  181. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_pollutants.pyx +19 -0
  182. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_quality.pyi +8 -0
  183. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_quality.pyx +13 -0
  184. openswmm-6.0.0.dev2/openswmm/engine/_report.py +461 -0
  185. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_solver.pxd +1 -0
  186. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_solver.pyi +245 -1
  187. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_solver.pyx +231 -2
  188. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_statistics.pyi +111 -3
  189. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_statistics.pyx +206 -6
  190. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_subcatchments.pyi +93 -1
  191. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_subcatchments.pyx +172 -3
  192. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_tables.pyi +43 -0
  193. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_tables.pyx +64 -0
  194. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/output/CMakeLists.txt +8 -10
  195. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/solver/CMakeLists.txt +11 -10
  196. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/pyproject.toml +72 -10
  197. openswmm-6.0.0.dev2/scripts/cibw_repair_windows.py +98 -0
  198. openswmm-6.0.0.dev2/tests/data/__pycache__/__init__.cpython-312.pyc +0 -0
  199. openswmm-6.0.0.dev2/tests/data/output/__pycache__/__init__.cpython-312.pyc +0 -0
  200. openswmm-6.0.0.dev2/tests/data/solver/__pycache__/__init__.cpython-312.pyc +0 -0
  201. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/data/solver/non_existent_input_file.rpt +3 -3
  202. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/data/solver/site_drainage_example.rpt +3 -3
  203. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/data/solver/site_drainage_example_link.rpt +3 -3
  204. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/data/solver/site_drainage_example_node.rpt +3 -3
  205. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/data/solver/site_drainage_example_outfall.rpt +4 -4
  206. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/data/solver/site_drainage_example_routing.rpt +3 -3
  207. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/data/solver/site_drainage_example_runoff.rpt +3 -3
  208. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/data/solver/site_drainage_example_subcatch.rpt +4 -4
  209. openswmm-6.0.0.dev2/tests/engine/test_callbacks_and_xsect.py +97 -0
  210. openswmm-6.0.0.dev2/tests/engine/test_concurrent_simulation.py +294 -0
  211. openswmm-6.0.0.dev2/tests/engine/test_controls_advancement.py +98 -0
  212. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/engine/test_gages_expanded.py +30 -0
  213. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/engine/test_geopackage.py +65 -4
  214. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/engine/test_hotstart.py +61 -0
  215. openswmm-6.0.0.dev2/tests/engine/test_infrastructure.py +86 -0
  216. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/engine/test_integration.py +5 -3
  217. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/engine/test_links_expanded.py +55 -0
  218. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/engine/test_model_builder.py +83 -0
  219. openswmm-6.0.0.dev2/tests/engine/test_new_api.py +724 -0
  220. openswmm-6.0.0.dev2/tests/engine/test_new_api.py.tmp +724 -0
  221. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/engine/test_nodes_expanded.py +54 -0
  222. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/engine/test_output_reader.py +90 -0
  223. openswmm-6.0.0.dev2/tests/engine/test_quality_pollutants.py +46 -0
  224. openswmm-6.0.0.dev2/tests/engine/test_rdii_advancement.py +324 -0
  225. openswmm-6.0.0.dev2/tests/engine/test_runoff_interface.py +170 -0
  226. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/engine/test_subcatchments_expanded.py +32 -0
  227. openswmm-6.0.0.dev2/tests/engine/test_tables.py +93 -0
  228. openswmm-6.0.0.dev2/tests/engine/verify_geopackage_c_api.cpp +495 -0
  229. openswmm-6.0.0.dev2/tests/engine/verify_geopackage_c_api.sh +90 -0
  230. openswmm-6.0.0.dev2/tests/test_api_coverage.py +304 -0
  231. openswmm-6.0.0.dev0/PKG-INFO +0 -760
  232. openswmm-6.0.0.dev0/README.md +0 -714
  233. openswmm-6.0.0.dev0/docs/_build/html/.doctrees/api.doctree +0 -0
  234. openswmm-6.0.0.dev0/docs/_build/html/.doctrees/environment.pickle +0 -0
  235. openswmm-6.0.0.dev0/docs/_build/html/.doctrees/guide/concepts.doctree +0 -0
  236. openswmm-6.0.0.dev0/docs/_build/html/.doctrees/guide/editing.doctree +0 -0
  237. openswmm-6.0.0.dev0/docs/_build/html/.doctrees/guide/error_handling.doctree +0 -0
  238. openswmm-6.0.0.dev0/docs/_build/html/.doctrees/guide/inflows.doctree +0 -0
  239. openswmm-6.0.0.dev0/docs/_build/html/.doctrees/guide/infrastructure.doctree +0 -0
  240. openswmm-6.0.0.dev0/docs/_build/html/.doctrees/guide/output_reader.doctree +0 -0
  241. openswmm-6.0.0.dev0/docs/_build/html/.doctrees/guide/solver.doctree +0 -0
  242. openswmm-6.0.0.dev0/docs/_build/html/.doctrees/guide/spatial.doctree +0 -0
  243. openswmm-6.0.0.dev0/docs/_build/html/.doctrees/index.doctree +0 -0
  244. openswmm-6.0.0.dev0/docs/_build/html/_modules/index.html +0 -610
  245. openswmm-6.0.0.dev0/docs/_build/html/_sources/guide/inflows.rst.txt +0 -223
  246. openswmm-6.0.0.dev0/docs/_build/html/_sphinx_design_static/design-tabs.js +0 -101
  247. openswmm-6.0.0.dev0/docs/_build/html/_static/design-tabs.js +0 -101
  248. openswmm-6.0.0.dev0/docs/_build/html/_static/scripts/bootstrap.js +0 -3
  249. openswmm-6.0.0.dev0/docs/_build/html/_static/scripts/bootstrap.js.map +0 -1
  250. openswmm-6.0.0.dev0/docs/_build/html/_static/scripts/fontawesome.js +0 -3
  251. openswmm-6.0.0.dev0/docs/_build/html/_static/scripts/fontawesome.js.map +0 -1
  252. openswmm-6.0.0.dev0/docs/_build/html/_static/scripts/pydata-sphinx-theme.js +0 -2
  253. openswmm-6.0.0.dev0/docs/_build/html/_static/scripts/pydata-sphinx-theme.js.map +0 -1
  254. openswmm-6.0.0.dev0/docs/_build/html/_static/styles/pydata-sphinx-theme.css +0 -32
  255. openswmm-6.0.0.dev0/docs/_build/html/_static/styles/pydata-sphinx-theme.css.map +0 -1
  256. openswmm-6.0.0.dev0/docs/_build/html/_static/vendor/fontawesome/webfonts/fa-brands-400.woff2 +0 -0
  257. openswmm-6.0.0.dev0/docs/_build/html/_static/vendor/fontawesome/webfonts/fa-regular-400.woff2 +0 -0
  258. openswmm-6.0.0.dev0/docs/_build/html/_static/vendor/fontawesome/webfonts/fa-solid-900.woff2 +0 -0
  259. openswmm-6.0.0.dev0/docs/_build/html/_static/webpack-macros.html +0 -24
  260. openswmm-6.0.0.dev0/docs/_build/html/guide/inflows.html +0 -942
  261. openswmm-6.0.0.dev0/docs/_build/html/license.html +0 -637
  262. openswmm-6.0.0.dev0/docs/_build/html/objects.inv +0 -0
  263. openswmm-6.0.0.dev0/docs/_build/html/search.html +0 -581
  264. openswmm-6.0.0.dev0/docs/_build/html/searchindex.js +0 -1
  265. openswmm-6.0.0.dev0/docs/guide/inflows.rst +0 -223
  266. openswmm-6.0.0.dev0/openswmm/engine/_inflows.pyi +0 -167
  267. openswmm-6.0.0.dev0/openswmm/engine/_inflows.pyx +0 -170
  268. openswmm-6.0.0.dev0/openswmm/gym/__init__.py +0 -0
  269. openswmm-6.0.0.dev0/openswmm/legacy/output/_output.c +0 -45709
  270. openswmm-6.0.0.dev0/scratch_rewrite_step_loop.py +0 -56
  271. openswmm-6.0.0.dev0/scratch_rewrite_step_loop_report.txt +0 -24
  272. openswmm-6.0.0.dev0/scratch_test_dates.py +0 -94
  273. openswmm-6.0.0.dev0/scripts/repair_wheel_windows.py +0 -76
  274. openswmm-6.0.0.dev0/tests/engine/test_infrastructure.py +0 -35
  275. openswmm-6.0.0.dev0/tests/engine/test_new_api.py +0 -239
  276. openswmm-6.0.0.dev0/tests/engine/test_quality_pollutants.py +0 -25
  277. openswmm-6.0.0.dev0/tests/engine/test_tables.py +0 -43
  278. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/.claude/settings.local.json +0 -0
  279. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/CMakePresets.json +0 -0
  280. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/LICENSE +0 -0
  281. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/cmake/PatchNumpyPxd.cmake +0 -0
  282. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/create_schema_review_db.py +0 -0
  283. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/LEGACY_API_EXPANSION_PLAN.md +0 -0
  284. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/Makefile +0 -0
  285. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/.doctrees/__intersphinx_cache__/numpy_objects.inv +0 -0
  286. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/.doctrees/guide/index.doctree +0 -0
  287. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/.doctrees/legacy/index.doctree +0 -0
  288. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/.doctrees/legacy/output.doctree +0 -0
  289. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/.doctrees/legacy/solver.doctree +0 -0
  290. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_images/hydrocouple_logo.png +0 -0
  291. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_sources/api.rst.txt +0 -0
  292. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_sources/guide/index.rst.txt +0 -0
  293. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_sources/index.rst.txt +0 -0
  294. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_sources/legacy/index.rst.txt +0 -0
  295. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_sources/legacy/output.rst.txt +0 -0
  296. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_sources/legacy/solver.rst.txt +0 -0
  297. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_sources/license.rst.txt +0 -0
  298. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_static/base-stemmer.js +0 -0
  299. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_static/doctools.js +0 -0
  300. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_static/documentation_options.js +0 -0
  301. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_static/english-stemmer.js +0 -0
  302. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_static/file.png +0 -0
  303. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_static/hydrocouple_logo.png +0 -0
  304. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_static/language_data.js +0 -0
  305. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_static/minus.png +0 -0
  306. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_static/openswmm.css +0 -0
  307. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_static/plus.png +0 -0
  308. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_static/pygments.css +0 -0
  309. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_static/searchtools.js +0 -0
  310. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_static/sphinx_highlight.js +0 -0
  311. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_build/html/_static/styles/theme.css +0 -0
  312. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/_static/openswmm.css +0 -0
  313. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/api.rst +0 -0
  314. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/conf.py +0 -0
  315. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/environment.yml +0 -0
  316. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/guide/index.rst +0 -0
  317. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/images/hydrocouple_logo.png +0 -0
  318. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/index.rst +0 -0
  319. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/legacy/index.rst +0 -0
  320. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/legacy/output.rst +0 -0
  321. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/legacy/solver.rst +0 -0
  322. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/license.rst +0 -0
  323. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/make.bat +0 -0
  324. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/docs/requirements.txt +0 -0
  325. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/generate_geopackage_erd.py +0 -0
  326. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/CMakeLists.txt +0 -0
  327. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/__init__.py +0 -0
  328. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/data/__init__.py +0 -0
  329. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/CMakeLists.txt +0 -0
  330. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/__init__.pxd +0 -0
  331. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/__init__.pyi +0 -0
  332. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_dates.py +0 -0
  333. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_dates.pyi +0 -0
  334. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_edit.pyi +0 -0
  335. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_edit.pyx +0 -0
  336. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_enums.pyi +0 -0
  337. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_forcing.pyi +0 -0
  338. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_forcing.pyx +0 -0
  339. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_massbalance.pyi +0 -0
  340. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_massbalance.pyx +0 -0
  341. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_spatial.pyi +0 -0
  342. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/engine/_spatial.pyx +0 -0
  343. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/legacy/CMakeLists.txt +0 -0
  344. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/legacy/__init__.py +0 -0
  345. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/legacy/engine/CMakeLists.txt +0 -0
  346. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/legacy/engine/__init__.pxd +0 -0
  347. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/legacy/engine/__init__.py +0 -0
  348. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/legacy/engine/_forcing_log.py +0 -0
  349. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/legacy/engine/_links.py +0 -0
  350. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/legacy/engine/_nodes.py +0 -0
  351. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/legacy/engine/_raingages.py +0 -0
  352. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/legacy/engine/_solver.c +0 -0
  353. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/legacy/engine/_solver.pyi +0 -0
  354. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/legacy/engine/_solver.pyx +0 -0
  355. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/legacy/engine/_subcatchments.py +0 -0
  356. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/legacy/engine/_system.py +0 -0
  357. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/legacy/engine/solver.pxd +0 -0
  358. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/legacy/output/CMakeLists.txt +0 -0
  359. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/legacy/output/__init__.pxd +0 -0
  360. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/legacy/output/__init__.py +0 -0
  361. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/legacy/output/_output.pyi +0 -0
  362. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/legacy/output/_output.pyx +0 -0
  363. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/legacy/output/output.pxd +0 -0
  364. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/output/__init__.pxd +0 -0
  365. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/output/__init__.py +0 -0
  366. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/output/_output.pyi +0 -0
  367. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/output/_output.pyx +0 -0
  368. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/output/output.pxd +0 -0
  369. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/solver/__init__.pxd +0 -0
  370. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/solver/__init__.py +0 -0
  371. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/solver/_solver.pyi +0 -0
  372. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/solver/_solver.pyx +0 -0
  373. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/openswmm/solver/solver.pxd +0 -0
  374. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/requirements.txt +0 -0
  375. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/scripts/clean.sh +0 -0
  376. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/smoke_test.py +0 -0
  377. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/__init__.py +0 -0
  378. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/conftest.py +0 -0
  379. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/data/__init__.py +0 -0
  380. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/data/__pycache__/__init__.cpython-313.pyc +0 -0
  381. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/data/output/__init__.py +0 -0
  382. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/data/output/__pycache__/__init__.cpython-313.pyc +0 -0
  383. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/data/output/example_output_1.out +0 -0
  384. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/data/output/json_time_series.pickle +0 -0
  385. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/data/solver/__init__.py +0 -0
  386. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/data/solver/__pycache__/__init__.cpython-313.pyc +0 -0
  387. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/data/solver/site_drainage_example.inp +0 -0
  388. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/data/solver/site_drainage_example.out +0 -0
  389. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/data/solver/site_drainage_example_link.out +0 -0
  390. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/data/solver/site_drainage_example_node.out +0 -0
  391. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/data/solver/site_drainage_example_outfall.out +0 -0
  392. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/data/solver/site_drainage_example_routing.out +0 -0
  393. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/data/solver/site_drainage_example_runoff.out +0 -0
  394. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/data/solver/site_drainage_example_subcatch.out +0 -0
  395. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/engine/__init__.py +0 -0
  396. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/engine/conftest.py +0 -0
  397. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/engine/test_controls_inflows.py +0 -0
  398. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/engine/test_edit.py +0 -0
  399. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/engine/test_enums.py +0 -0
  400. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/engine/test_gages.py +0 -0
  401. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/engine/test_links.py +0 -0
  402. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/engine/test_massbalance.py +0 -0
  403. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/engine/test_massbalance_expanded.py +0 -0
  404. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/engine/test_new_modules.py +0 -0
  405. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/engine/test_nodes.py +0 -0
  406. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/engine/test_opened_state_editing.py +0 -0
  407. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/engine/test_solver.py +0 -0
  408. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/engine/test_spatial.py +0 -0
  409. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/engine/test_subcatchments.py +0 -0
  410. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/engine/test_workflow.py +0 -0
  411. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/legacy/__init__.py +0 -0
  412. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/legacy/test_output.py +0 -0
  413. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/legacy/test_phase1_enum_coverage.py +0 -0
  414. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/legacy/test_phase2_statistics.py +0 -0
  415. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/legacy/test_phase3_oop_wrappers.py +0 -0
  416. {openswmm-6.0.0.dev0 → openswmm-6.0.0.dev2}/tests/legacy/test_solver.py +0 -0
@@ -11,6 +11,40 @@
11
11
 
12
12
  cmake_minimum_required(VERSION 3.24)
13
13
 
14
+ # ============================================================================
15
+ # Source-distribution guard: the sdist on PyPI is metadata-only and does NOT
16
+ # carry the OpenSWMM C/C++ engine source tree. Detect that we have neither a
17
+ # pre-built engine prefix nor the parent project's CMakeLists.txt reachable
18
+ # via add_subdirectory(..) and fail with a clear, actionable error rather
19
+ # than letting vcpkg or the C compiler emit a confusing one. Without this
20
+ # guard, a stray VCPKG_ROOT in the user's environment causes the auto-load
21
+ # block below to fire and vcpkg then tries to read a vcpkg.json next to the
22
+ # unpacked sdist that does not exist.
23
+ # ============================================================================
24
+ if(NOT DEFINED OPENSWMM_ENGINE_INSTALL_PREFIX
25
+ AND NOT DEFINED ENV{OPENSWMM_ENGINE_INSTALL_PREFIX}
26
+ AND NOT EXISTS "${CMAKE_CURRENT_SOURCE_DIR}/../CMakeLists.txt")
27
+ message(FATAL_ERROR
28
+ "openswmm cannot be built from this source distribution: the sdist "
29
+ "does not bundle the OpenSWMM C/C++ engine sources, and no pre-built "
30
+ "engine was supplied via -DOPENSWMM_ENGINE_INSTALL_PREFIX=<path>.\n"
31
+ "\n"
32
+ "Install a pre-built wheel instead:\n"
33
+ " python -m pip install openswmm\n"
34
+ "\n"
35
+ "Wheels are published for Python 3.9-3.13 on Linux x86_64, macOS "
36
+ "(arm64 and x86_64), and Windows x64. If pip fell back to this "
37
+ "sdist, no wheel matched your platform/interpreter -- check the "
38
+ "available files at https://pypi.org/project/openswmm/#files and, "
39
+ "if needed, switch to a supported Python version.\n"
40
+ "\n"
41
+ "Source builds are supported only from a full git checkout of the "
42
+ "openswmm.engine repository:\n"
43
+ " git clone https://github.com/hydrocouple/openswmm.engine\n"
44
+ " cd openswmm.engine/python\n"
45
+ " pip install . --no-build-isolation")
46
+ endif()
47
+
14
48
  # ============================================================================
15
49
  # vcpkg manifest directory: the vcpkg.json lives one directory above python/.
16
50
  # Set VCPKG_MANIFEST_DIR before project() so vcpkg's toolchain file sees it.
@@ -93,6 +127,15 @@ endif()
93
127
  # ============================================================================
94
128
  set(CMAKE_MACOSX_RPATH ON)
95
129
  set(CMAKE_POSITION_INDEPENDENT_CODE ON)
130
+ # Append the linked engine dylib directory to each extension's install rpath
131
+ # automatically. For a pre-built engine install (OPENSWMM_ENGINE_INSTALL_PREFIX)
132
+ # this adds prefix/lib; for an editable build it adds the build-tree dir.
133
+ # delocate/auditwheel rewrite all rpaths for wheel distribution anyway.
134
+ if(NOT WIN32)
135
+ set(CMAKE_SKIP_BUILD_RPATH FALSE)
136
+ set(CMAKE_BUILD_WITH_INSTALL_RPATH FALSE)
137
+ set(CMAKE_INSTALL_RPATH_USE_LINK_PATH TRUE)
138
+ endif()
96
139
  set(CMAKE_INSTALL_OPENMP_LIBRARIES TRUE)
97
140
  include(InstallRequiredSystemLibraries)
98
141
 
@@ -0,0 +1,261 @@
1
+ Metadata-Version: 2.1
2
+ Name: openswmm
3
+ Version: 6.0.0.dev2
4
+ Summary: Python bindings for the OpenSWMM stormwater modelling engine.
5
+ Keywords: SWMM,stormwater,hydrology,hydraulics,water resources,environmental engineering
6
+ Author-Email: Caleb Buahin <caleb.buahin@gmail.com>
7
+ Maintainer-Email: Caleb Buahin <caleb.buahin@gmail.com>
8
+ License: MIT License
9
+
10
+ Copyright 2026 Caleb Buahin
11
+
12
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
13
+
14
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
17
+
18
+ Classifier: Development Status :: 3 - Alpha
19
+ Classifier: Intended Audience :: Developers
20
+ Classifier: Intended Audience :: Science/Research
21
+ Classifier: Operating System :: Microsoft :: Windows
22
+ Classifier: Operating System :: Unix
23
+ Classifier: Operating System :: POSIX :: Linux
24
+ Classifier: Operating System :: MacOS
25
+ Classifier: Programming Language :: Python :: 3
26
+ Classifier: Programming Language :: Python :: 3.10
27
+ Classifier: Programming Language :: Python :: 3.11
28
+ Classifier: Programming Language :: Python :: 3.12
29
+ Classifier: Programming Language :: Python :: 3.13
30
+ Classifier: Programming Language :: Cython
31
+ Classifier: Programming Language :: C
32
+ Classifier: Programming Language :: C++
33
+ Classifier: Topic :: Scientific/Engineering
34
+ Classifier: Topic :: Scientific/Engineering :: Hydrology
35
+ Project-URL: Homepage, https://github.com/hydrocouple/openswmm.engine/python
36
+ Project-URL: Repository, https://github.com/hydrocouple/openswmm.engine
37
+ Project-URL: Bug Tracker, https://github.com/hydrocouple/openswmm.engine/issues
38
+ Project-URL: Changelog, https://github.com/hydrocouple/openswmm.engine/blob/main/CHANGELOG.md
39
+ Requires-Python: >=3.10
40
+ Requires-Dist: numpy>=1.21.0
41
+ Provides-Extra: dev
42
+ Requires-Dist: pytest>=8.3; extra == "dev"
43
+ Requires-Dist: cython>=3.0.12; extra == "dev"
44
+ Requires-Dist: build>=1.2; extra == "dev"
45
+ Description-Content-Type: text/markdown
46
+
47
+ # OpenSWMM Engine
48
+
49
+ <p align="center">
50
+ <img src="https://raw.githubusercontent.com/HydroCouple/openswmm.engine/develop/docs/images/hydrocouple_logo.png" alt="OpenSWMM" width="120">
51
+ </p>
52
+
53
+ **Open Storm Water Management Model — Next-Generation Computational Engine**
54
+
55
+ [![Unit Testing](https://github.com/HydroCouple/openswmm.engine/actions/workflows/unit_testing.yml/badge.svg)](https://github.com/HydroCouple/openswmm.engine/actions/workflows/unit_testing.yml)
56
+ [![Unit Testing Python](https://github.com/HydroCouple/openswmm.engine/actions/workflows/unit_testing_python.yml/badge.svg)](https://github.com/HydroCouple/openswmm.engine/actions/workflows/unit_testing_python.yml)
57
+ [![Documentation](https://github.com/HydroCouple/openswmm.engine/actions/workflows/documentation.yml/badge.svg)](https://github.com/HydroCouple/openswmm.engine/actions/workflows/documentation.yml)
58
+ [![Issues](https://img.shields.io/github/issues/HydroCouple/openswmm.engine)](https://github.com/HydroCouple/openswmm.engine/issues)
59
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
60
+ [![PyPI](https://img.shields.io/pypi/v/openswmm.svg)](https://pypi.org/project/openswmm)
61
+ [![Downloads](https://pepy.tech/badge/openswmm)](https://pepy.tech/project/openswmm)
62
+ [![Python](https://img.shields.io/pypi/pyversions/openswmm.svg)](https://pypi.org/project/openswmm)
63
+ [![Wheel](https://img.shields.io/pypi/wheel/openswmm.svg)](https://pypi.org/project/openswmm)
64
+
65
+ ## Documentation
66
+
67
+ | | Site | Contents |
68
+ |---|---|---|
69
+ | **C / C++ Engine** | **[hydrocouple.org/openswmm.engine](https://hydrocouple.org/openswmm.engine)** | Full C API reference, hydrology / hydraulics / water-quality reference manuals, user manual, architecture notes. |
70
+ | **Python Bindings** | **[hydrocouple.org/openswmm.engine/python](https://hydrocouple.org/openswmm.engine/python)** | Quickstart, per-domain user guide, Cython API reference, SWMM 5 → v6 migration. |
71
+
72
+ Both sites cross-link from their top navigation.
73
+
74
+ ---
75
+
76
+ ## Overview
77
+
78
+ OpenSWMM Engine is a community-driven, open-source continuation of the EPA Storm Water Management Model — a dynamic hydrology, hydraulic, and water-quality simulator for urban runoff. The project preserves the SWMM legacy under QA/QC and builds the community needed for long-term maintenance, working with ASCE/EWRI and the Water Environment Federation.
79
+
80
+ ## What's New in v6.0.0
81
+
82
+ ### Architecture & Performance
83
+
84
+ - **Data-Oriented Design** — Core state refactored to Structure-of-Arrays for cache efficiency and SIMD-friendly batches.
85
+ - **Reentrant Engine** — All simulation state lives behind an opaque `SWMM_Engine` handle; multiple independent simulations can run in the same process.
86
+ - **Plugin-Based I/O** — Output and report writing dispatch through plugin interfaces on a dedicated I/O thread.
87
+ - **C++20 Codebase** — Modern C++20 implementation; the legacy EPA SWMM 5.x solver is preserved unmodified in `src/legacy/`.
88
+
89
+ ### Process Formulation Enhancements
90
+
91
+ #### Implemented
92
+
93
+ - **Semi-Implicit Node Continuity** — Single-equation free-surface/surcharge formulation that removes the legacy two-branch discontinuity. Enabled via `NODE_CONTINUITY SEMI_IMPLICIT` (default). [Reference »](https://hydrocouple.org/openswmm.engine)
94
+ - **Anderson Acceleration for Picard Iteration** — Depth-2 mixing of residual history cuts iteration counts 25–50% on stiff surcharge transitions with safe fall-back to standard Picard. Enabled via `ANDERSON_ACCEL YES`.
95
+ - **Spatially Explicit Overland Flow & Groundwater (2D)** — 2D overland-flow grid coupled to the 1D pipe network. Surcharge re-routes over terrain to downstream nodes, lateral groundwater exchanges are tracked explicitly, and green-infrastructure placement is spatially resolved.
96
+ - **Dynamic Preissmann Slot** — Geometry-dependent slot width replaces the fixed-width slot at the free-surface / pressurized transition, improving stability for rapidly filling or draining conduits.
97
+ - **Physics-Based Initial Abstraction Recovery** — RDII initial abstraction now evolves as an exponential depletion/recovery process with additive base + thermal recovery rates and frozen-ground suppression. Seasonal RDII variation emerges from temperature dynamics on a single RTK set per sewershed — no monthly parameter tables required. Configured via the new `[RDII_DECAY]` input section.
98
+
99
+ $$IA_{avail}(t+\Delta t) = IA_{max} - \bigl(IA_{max} - IA_{avail}(t)\bigr) \cdot e^{-k_{rec}(T)\,\Delta t}, \quad k_{rec}(T) = k_0 + k_T \cdot e^{\,\theta(T - T_{ref})}$$
100
+
101
+ #### In Development
102
+
103
+ - **Spatially Explicit Inlets** — Promotes inlets to mode-switching junction nodes that capture street flow when gutter spread exceeds a threshold and revert to passive junctions otherwise.
104
+ - **LID as Storage Nodes** — Maps LID layers (surface, media, gravel) onto extended storage nodes using a reduced-physics kinematic Richards ODE for two-way hydraulic feedback.
105
+
106
+ ### New C API
107
+
108
+ A domain-split C API replaces the monolithic legacy interface. Full reference at the [C engine documentation site](https://hydrocouple.org/openswmm.engine).
109
+
110
+ | Header | Domain |
111
+ |---|---|
112
+ | `openswmm_engine.h` | Engine lifecycle, error codes, state machine |
113
+ | `openswmm_model.h` | Model building, validation, serialization, options |
114
+ | `openswmm_nodes.h` | Junctions, outfalls, storage, dividers |
115
+ | `openswmm_links.h` | Conduits, pumps, orifices, weirs, outlets |
116
+ | `openswmm_subcatchments.h` | Subcatchments, infiltration, coverage |
117
+ | `openswmm_gages.h` | Rain gages |
118
+ | `openswmm_pollutants.h` | Pollutant definitions and runtime injection |
119
+ | `openswmm_tables.h` | Time series, curves, patterns |
120
+ | `openswmm_inflows.h` | External inflows, DWF, RDII (incl. `[RDII_DECAY]`) |
121
+ | `openswmm_controls.h` | Control rules and direct link actions |
122
+ | `openswmm_infrastructure.h` | Transects, streets, inlets, LID controls |
123
+ | `openswmm_spatial.h` | CRS, coordinates, polylines, polygons |
124
+ | `openswmm_quality.h` | Landuse, buildup, washoff, treatment |
125
+ | `openswmm_massbalance.h` | Continuity errors and cumulative flux totals |
126
+ | `openswmm_callbacks.h` | Progress, warning, and step callbacks |
127
+ | `openswmm_hotstart.h` | Hot start file save / load / modify |
128
+ | `openswmm_statistics.h` | Node, link, and subcatchment statistics |
129
+ | `openswmm_geopackage.h` | Optional GeoPackage I/O |
130
+
131
+ ### Additional Features
132
+
133
+ - **Hot Start API** — Save, load, modify, and query hot-start files through a stable C ABI.
134
+ - **CRS Support** — Coordinate reference systems specified in `[OPTIONS]`.
135
+ - **User Flags** — Typed `[USER_FLAGS]` / `[USER_FLAG_VALUES]` sections attach custom metadata (boolean, integer, real, string) to nodes, links, subcatchments, or gages.
136
+ - **Extension Options** — Unrecognized `[OPTIONS]` keys are preserved and exposed to plugins at runtime.
137
+ - **Plugin SDK** — Header-only SDK in `include/openswmm/plugin_sdk/` for input, output, and report plugins; the `IPluginComponentInfo` entry point advertises capabilities and supports custom `.inp` section handlers via `SectionRegistry`.
138
+ - **GeoPackage I/O** — Optional SQLite + spatial backing store for inputs, results, observed series, and topology in a single `.gpkg` file (`-DOPENSWMM_WITH_GEOPACKAGE=ON`).
139
+ - **HEC-22 Inlet Analysis** — Street inlet capture with grate and curb inlets (SWMM 5.2).
140
+ - **Variable Speed Pumps** — Type 5 pump curves with speed scaling.
141
+ - **New Storage Shapes** — Conical and pyramidal shapes with elliptical and rectangular bases.
142
+
143
+ ## Quick Start
144
+
145
+ ```bash
146
+ # C / C++ engine
147
+ git clone https://github.com/HydroCouple/openswmm.engine.git
148
+ cd openswmm.engine
149
+ git clone https://github.com/microsoft/vcpkg.git && ./vcpkg/bootstrap-vcpkg.sh
150
+ export VCPKG_ROOT=$(pwd)/vcpkg
151
+
152
+ cmake --preset=<platform> -B build -DOPENSWMM_WITH_GEOPACKAGE=ON
153
+ cmake --build build --config Release
154
+ ctest --test-dir build -C Release --output-on-failure
155
+
156
+ # Python bindings (PyPI)
157
+ pip install openswmm
158
+ ```
159
+
160
+ Presets: `Windows`, `Windows-debug`, `Linux`, `Linux-debug`, `Darwin`, `Darwin-debug`. Full build, test, and packaging instructions are in the [C engine docs](https://hydrocouple.org/openswmm.engine).
161
+
162
+ ```python
163
+ from openswmm.engine import Solver, Nodes, Links
164
+
165
+ with Solver("model.inp", "model.rpt", "model.out") as s:
166
+ nodes, links = Nodes(s), Links(s)
167
+ while s.step():
168
+ depth = nodes.get_depth("J1")
169
+ flow = links.get_flow("C1")
170
+ ```
171
+
172
+ Forcing, model building, hot-start, bulk NumPy access, mass balance, and statistics are covered in the [Python docs](https://hydrocouple.org/openswmm.engine/python).
173
+
174
+ ## Glossary
175
+
176
+ Brief definitions of the domain terms used throughout this README. Full treatment lives in the [reference manuals](https://hydrocouple.org/openswmm.engine).
177
+
178
+ - **RDII** — Rainfall-Dependent Inflow & Infiltration. Stormwater that enters sanitary or combined sewers through cracks, joints, defective laterals, and roof / foundation drains during and after rainfall.
179
+ - **RTK** — The triplet `(R, T, K)` that parameterises a SWMM synthetic unit hydrograph for RDII: `R` is the long-term fraction of rainfall that becomes RDII, `T` is the time to peak (hours), and `K` is the ratio of base time to peak time.
180
+ - **IA (Initial Abstraction)** — Rainfall depth absorbed by the catchment before any RDII response begins (interception, surface storage, soil wetting). Recovers between events.
181
+ - **DWF** — Dry-Weather Flow. Base sanitary flow plus infiltration unrelated to rainfall, typically specified as an average value with diurnal / day-of-week / monthly patterns.
182
+ - **LID** — Low-Impact Development. Distributed green-infrastructure controls (bio-retention cells, permeable pavement, green roofs, infiltration trenches, rain gardens) that intercept, store, and infiltrate runoff at the source.
183
+ - **CRS** — Coordinate Reference System. The geodetic / projected coordinate frame (e.g. `EPSG:4326`) the model's spatial data is expressed in.
184
+ - **CFS / CMS** — Cubic feet per second / cubic metres per second. The two flow-unit conventions exposed via `FLOW_UNITS`.
185
+ - **Dynamic Wave Routing** — Full Saint-Venant momentum solver for link flow, used for backwater, surcharge, and pressurized conditions.
186
+ - **Preissmann Slot** — A narrow virtual slot added to a closed conduit's cross-section so that pressurized flow can be solved with the same free-surface equations. The dynamic slot adjusts width with geometry to smooth the surface ↔ pressure transition.
187
+ - **Surcharge** — A pipe flowing full and under pressure (HGL above the crown), typically caused by downstream backwater or capacity exceedance.
188
+ - **Picard Iteration** — Fixed-point iteration used inside the dynamic-wave timestep to converge implicit node depths. Anderson Acceleration is a residual-history accelerator on top of Picard.
189
+ - **Hot Start** — A saved end-of-run state (depths, volumes, IA, snow, GW) that initialises a subsequent simulation, letting long runs be split into checkpoints or warm runs into operational forecasts.
190
+ - **HEC-22** — FHWA Hydraulic Engineering Circular No. 22, the design reference whose grate and curb-opening capture equations are used by the inlet-analysis module.
191
+ - **GeoPackage** — OGC standard for a SQLite-based, single-file container holding spatial features and tabular data with full CRS metadata.
192
+
193
+ ## Prerequisites
194
+
195
+ | Requirement | Version |
196
+ |---|---|
197
+ | CMake | 3.21+ |
198
+ | C compiler | C17 (GCC 10+, Clang 12+, MSVC 19.29+) |
199
+ | C++ compiler | C++20 (GCC 10+, Clang 14+, MSVC 19.29+) |
200
+ | vcpkg | 2025.02.14 |
201
+ | Python | 3.9 – 3.13 (optional) |
202
+ | Ninja | recommended on Linux/macOS |
203
+
204
+ ## Project Structure
205
+
206
+ ```
207
+ openswmm.engine/
208
+ ├── include/openswmm/
209
+ │ ├── engine/ # New engine public C API headers
210
+ │ └── legacy/ # Legacy SWMM 5.x public headers
211
+ ├── src/
212
+ │ ├── engine/ # New C++20 engine implementation
213
+ │ │ ├── input/geopackage/ # Optional GeoPackage I/O
214
+ │ │ └── 2d/ # 2D overland-flow & groundwater coupling
215
+ │ ├── legacy/ # Original EPA SWMM 5.x solver and output reader
216
+ │ ├── plugin_sdk/ # Header-only plugin SDK
217
+ │ └── cli/ # Command-line interface
218
+ ├── tests/
219
+ │ ├── unit/legacy/ # Legacy solver & output tests
220
+ │ ├── unit/engine/ # New engine unit tests
221
+ │ ├── regression/ # New-vs-legacy regression tests
222
+ │ └── benchmarks/ # Performance benchmarks
223
+ ├── python/ # Cython bindings (scikit-build)
224
+ ├── docs/ # Doxygen config and technical manuals
225
+ └── .github/workflows/ # CI/CD pipelines
226
+ ```
227
+
228
+ ## Libraries Built
229
+
230
+ | Target | Description |
231
+ |---|---|
232
+ | `openswmm_legacy_engine` | Original EPA SWMM 5.x solver (shared) |
233
+ | `openswmm_legacy_output` | Original SWMM binary output reader (shared) |
234
+ | `openswmm_engine` | New refactored C++20 engine (shared) |
235
+ | `openswmm_geopackage` | GeoPackage I/O (static, optional — requires SQLite3) |
236
+ | `openswmm_plugin_sdk` | Header-only plugin SDK (INTERFACE) |
237
+ | `openswmm_cli` | Command-line executable |
238
+
239
+ ## Contributing
240
+
241
+ Contributions are welcome — bug reports, fixes, new features, docs, tests, and benchmarks.
242
+
243
+ 1. Read [CONTRIBUTING.md](CONTRIBUTING.md) for the development workflow and the [Code of Conduct](CODE_OF_CONDUCT.md).
244
+ 2. Fork the repo and create a feature branch.
245
+ 3. Ensure C++ (`ctest`) and Python (`pytest`) tests pass.
246
+ 4. Follow existing style and naming.
247
+ 5. Open a PR against `develop`.
248
+
249
+ ### Contributor License Agreement
250
+
251
+ First-time contributors must sign the project [CLA](CLA.md) before a pull request can be merged. The CLA grants the project a perpetual, royalty-free copyright and patent license to your contributions and preserves the project's ability to relicense in the future; **you retain full copyright ownership** of your work.
252
+
253
+ Signing is automated through [CLA Assistant](https://cla-assistant.io) — when you open your first PR, a bot comments with a one-click sign-in link. The CLA covers all subsequent contributions, so you only sign once. Corporate contributors should additionally submit a CCLA per [CLA §6](CLA.md#6-corporate-contributors).
254
+
255
+ ## License
256
+
257
+ MIT — see [LICENSE](LICENSE). Original EPA SWMM material is in the public domain under 17 USC § 105.
258
+
259
+ ## Acknowledgements
260
+
261
+ OpenSWMM builds on the EPA Storm Water Management Model. See [docs/authors.md](docs/authors.md) for the full contributor list.
@@ -0,0 +1,215 @@
1
+ # OpenSWMM Engine
2
+
3
+ <p align="center">
4
+ <img src="https://raw.githubusercontent.com/HydroCouple/openswmm.engine/develop/docs/images/hydrocouple_logo.png" alt="OpenSWMM" width="120">
5
+ </p>
6
+
7
+ **Open Storm Water Management Model — Next-Generation Computational Engine**
8
+
9
+ [![Unit Testing](https://github.com/HydroCouple/openswmm.engine/actions/workflows/unit_testing.yml/badge.svg)](https://github.com/HydroCouple/openswmm.engine/actions/workflows/unit_testing.yml)
10
+ [![Unit Testing Python](https://github.com/HydroCouple/openswmm.engine/actions/workflows/unit_testing_python.yml/badge.svg)](https://github.com/HydroCouple/openswmm.engine/actions/workflows/unit_testing_python.yml)
11
+ [![Documentation](https://github.com/HydroCouple/openswmm.engine/actions/workflows/documentation.yml/badge.svg)](https://github.com/HydroCouple/openswmm.engine/actions/workflows/documentation.yml)
12
+ [![Issues](https://img.shields.io/github/issues/HydroCouple/openswmm.engine)](https://github.com/HydroCouple/openswmm.engine/issues)
13
+ [![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
14
+ [![PyPI](https://img.shields.io/pypi/v/openswmm.svg)](https://pypi.org/project/openswmm)
15
+ [![Downloads](https://pepy.tech/badge/openswmm)](https://pepy.tech/project/openswmm)
16
+ [![Python](https://img.shields.io/pypi/pyversions/openswmm.svg)](https://pypi.org/project/openswmm)
17
+ [![Wheel](https://img.shields.io/pypi/wheel/openswmm.svg)](https://pypi.org/project/openswmm)
18
+
19
+ ## Documentation
20
+
21
+ | | Site | Contents |
22
+ |---|---|---|
23
+ | **C / C++ Engine** | **[hydrocouple.org/openswmm.engine](https://hydrocouple.org/openswmm.engine)** | Full C API reference, hydrology / hydraulics / water-quality reference manuals, user manual, architecture notes. |
24
+ | **Python Bindings** | **[hydrocouple.org/openswmm.engine/python](https://hydrocouple.org/openswmm.engine/python)** | Quickstart, per-domain user guide, Cython API reference, SWMM 5 → v6 migration. |
25
+
26
+ Both sites cross-link from their top navigation.
27
+
28
+ ---
29
+
30
+ ## Overview
31
+
32
+ OpenSWMM Engine is a community-driven, open-source continuation of the EPA Storm Water Management Model — a dynamic hydrology, hydraulic, and water-quality simulator for urban runoff. The project preserves the SWMM legacy under QA/QC and builds the community needed for long-term maintenance, working with ASCE/EWRI and the Water Environment Federation.
33
+
34
+ ## What's New in v6.0.0
35
+
36
+ ### Architecture & Performance
37
+
38
+ - **Data-Oriented Design** — Core state refactored to Structure-of-Arrays for cache efficiency and SIMD-friendly batches.
39
+ - **Reentrant Engine** — All simulation state lives behind an opaque `SWMM_Engine` handle; multiple independent simulations can run in the same process.
40
+ - **Plugin-Based I/O** — Output and report writing dispatch through plugin interfaces on a dedicated I/O thread.
41
+ - **C++20 Codebase** — Modern C++20 implementation; the legacy EPA SWMM 5.x solver is preserved unmodified in `src/legacy/`.
42
+
43
+ ### Process Formulation Enhancements
44
+
45
+ #### Implemented
46
+
47
+ - **Semi-Implicit Node Continuity** — Single-equation free-surface/surcharge formulation that removes the legacy two-branch discontinuity. Enabled via `NODE_CONTINUITY SEMI_IMPLICIT` (default). [Reference »](https://hydrocouple.org/openswmm.engine)
48
+ - **Anderson Acceleration for Picard Iteration** — Depth-2 mixing of residual history cuts iteration counts 25–50% on stiff surcharge transitions with safe fall-back to standard Picard. Enabled via `ANDERSON_ACCEL YES`.
49
+ - **Spatially Explicit Overland Flow & Groundwater (2D)** — 2D overland-flow grid coupled to the 1D pipe network. Surcharge re-routes over terrain to downstream nodes, lateral groundwater exchanges are tracked explicitly, and green-infrastructure placement is spatially resolved.
50
+ - **Dynamic Preissmann Slot** — Geometry-dependent slot width replaces the fixed-width slot at the free-surface / pressurized transition, improving stability for rapidly filling or draining conduits.
51
+ - **Physics-Based Initial Abstraction Recovery** — RDII initial abstraction now evolves as an exponential depletion/recovery process with additive base + thermal recovery rates and frozen-ground suppression. Seasonal RDII variation emerges from temperature dynamics on a single RTK set per sewershed — no monthly parameter tables required. Configured via the new `[RDII_DECAY]` input section.
52
+
53
+ $$IA_{avail}(t+\Delta t) = IA_{max} - \bigl(IA_{max} - IA_{avail}(t)\bigr) \cdot e^{-k_{rec}(T)\,\Delta t}, \quad k_{rec}(T) = k_0 + k_T \cdot e^{\,\theta(T - T_{ref})}$$
54
+
55
+ #### In Development
56
+
57
+ - **Spatially Explicit Inlets** — Promotes inlets to mode-switching junction nodes that capture street flow when gutter spread exceeds a threshold and revert to passive junctions otherwise.
58
+ - **LID as Storage Nodes** — Maps LID layers (surface, media, gravel) onto extended storage nodes using a reduced-physics kinematic Richards ODE for two-way hydraulic feedback.
59
+
60
+ ### New C API
61
+
62
+ A domain-split C API replaces the monolithic legacy interface. Full reference at the [C engine documentation site](https://hydrocouple.org/openswmm.engine).
63
+
64
+ | Header | Domain |
65
+ |---|---|
66
+ | `openswmm_engine.h` | Engine lifecycle, error codes, state machine |
67
+ | `openswmm_model.h` | Model building, validation, serialization, options |
68
+ | `openswmm_nodes.h` | Junctions, outfalls, storage, dividers |
69
+ | `openswmm_links.h` | Conduits, pumps, orifices, weirs, outlets |
70
+ | `openswmm_subcatchments.h` | Subcatchments, infiltration, coverage |
71
+ | `openswmm_gages.h` | Rain gages |
72
+ | `openswmm_pollutants.h` | Pollutant definitions and runtime injection |
73
+ | `openswmm_tables.h` | Time series, curves, patterns |
74
+ | `openswmm_inflows.h` | External inflows, DWF, RDII (incl. `[RDII_DECAY]`) |
75
+ | `openswmm_controls.h` | Control rules and direct link actions |
76
+ | `openswmm_infrastructure.h` | Transects, streets, inlets, LID controls |
77
+ | `openswmm_spatial.h` | CRS, coordinates, polylines, polygons |
78
+ | `openswmm_quality.h` | Landuse, buildup, washoff, treatment |
79
+ | `openswmm_massbalance.h` | Continuity errors and cumulative flux totals |
80
+ | `openswmm_callbacks.h` | Progress, warning, and step callbacks |
81
+ | `openswmm_hotstart.h` | Hot start file save / load / modify |
82
+ | `openswmm_statistics.h` | Node, link, and subcatchment statistics |
83
+ | `openswmm_geopackage.h` | Optional GeoPackage I/O |
84
+
85
+ ### Additional Features
86
+
87
+ - **Hot Start API** — Save, load, modify, and query hot-start files through a stable C ABI.
88
+ - **CRS Support** — Coordinate reference systems specified in `[OPTIONS]`.
89
+ - **User Flags** — Typed `[USER_FLAGS]` / `[USER_FLAG_VALUES]` sections attach custom metadata (boolean, integer, real, string) to nodes, links, subcatchments, or gages.
90
+ - **Extension Options** — Unrecognized `[OPTIONS]` keys are preserved and exposed to plugins at runtime.
91
+ - **Plugin SDK** — Header-only SDK in `include/openswmm/plugin_sdk/` for input, output, and report plugins; the `IPluginComponentInfo` entry point advertises capabilities and supports custom `.inp` section handlers via `SectionRegistry`.
92
+ - **GeoPackage I/O** — Optional SQLite + spatial backing store for inputs, results, observed series, and topology in a single `.gpkg` file (`-DOPENSWMM_WITH_GEOPACKAGE=ON`).
93
+ - **HEC-22 Inlet Analysis** — Street inlet capture with grate and curb inlets (SWMM 5.2).
94
+ - **Variable Speed Pumps** — Type 5 pump curves with speed scaling.
95
+ - **New Storage Shapes** — Conical and pyramidal shapes with elliptical and rectangular bases.
96
+
97
+ ## Quick Start
98
+
99
+ ```bash
100
+ # C / C++ engine
101
+ git clone https://github.com/HydroCouple/openswmm.engine.git
102
+ cd openswmm.engine
103
+ git clone https://github.com/microsoft/vcpkg.git && ./vcpkg/bootstrap-vcpkg.sh
104
+ export VCPKG_ROOT=$(pwd)/vcpkg
105
+
106
+ cmake --preset=<platform> -B build -DOPENSWMM_WITH_GEOPACKAGE=ON
107
+ cmake --build build --config Release
108
+ ctest --test-dir build -C Release --output-on-failure
109
+
110
+ # Python bindings (PyPI)
111
+ pip install openswmm
112
+ ```
113
+
114
+ Presets: `Windows`, `Windows-debug`, `Linux`, `Linux-debug`, `Darwin`, `Darwin-debug`. Full build, test, and packaging instructions are in the [C engine docs](https://hydrocouple.org/openswmm.engine).
115
+
116
+ ```python
117
+ from openswmm.engine import Solver, Nodes, Links
118
+
119
+ with Solver("model.inp", "model.rpt", "model.out") as s:
120
+ nodes, links = Nodes(s), Links(s)
121
+ while s.step():
122
+ depth = nodes.get_depth("J1")
123
+ flow = links.get_flow("C1")
124
+ ```
125
+
126
+ Forcing, model building, hot-start, bulk NumPy access, mass balance, and statistics are covered in the [Python docs](https://hydrocouple.org/openswmm.engine/python).
127
+
128
+ ## Glossary
129
+
130
+ Brief definitions of the domain terms used throughout this README. Full treatment lives in the [reference manuals](https://hydrocouple.org/openswmm.engine).
131
+
132
+ - **RDII** — Rainfall-Dependent Inflow & Infiltration. Stormwater that enters sanitary or combined sewers through cracks, joints, defective laterals, and roof / foundation drains during and after rainfall.
133
+ - **RTK** — The triplet `(R, T, K)` that parameterises a SWMM synthetic unit hydrograph for RDII: `R` is the long-term fraction of rainfall that becomes RDII, `T` is the time to peak (hours), and `K` is the ratio of base time to peak time.
134
+ - **IA (Initial Abstraction)** — Rainfall depth absorbed by the catchment before any RDII response begins (interception, surface storage, soil wetting). Recovers between events.
135
+ - **DWF** — Dry-Weather Flow. Base sanitary flow plus infiltration unrelated to rainfall, typically specified as an average value with diurnal / day-of-week / monthly patterns.
136
+ - **LID** — Low-Impact Development. Distributed green-infrastructure controls (bio-retention cells, permeable pavement, green roofs, infiltration trenches, rain gardens) that intercept, store, and infiltrate runoff at the source.
137
+ - **CRS** — Coordinate Reference System. The geodetic / projected coordinate frame (e.g. `EPSG:4326`) the model's spatial data is expressed in.
138
+ - **CFS / CMS** — Cubic feet per second / cubic metres per second. The two flow-unit conventions exposed via `FLOW_UNITS`.
139
+ - **Dynamic Wave Routing** — Full Saint-Venant momentum solver for link flow, used for backwater, surcharge, and pressurized conditions.
140
+ - **Preissmann Slot** — A narrow virtual slot added to a closed conduit's cross-section so that pressurized flow can be solved with the same free-surface equations. The dynamic slot adjusts width with geometry to smooth the surface ↔ pressure transition.
141
+ - **Surcharge** — A pipe flowing full and under pressure (HGL above the crown), typically caused by downstream backwater or capacity exceedance.
142
+ - **Picard Iteration** — Fixed-point iteration used inside the dynamic-wave timestep to converge implicit node depths. Anderson Acceleration is a residual-history accelerator on top of Picard.
143
+ - **Hot Start** — A saved end-of-run state (depths, volumes, IA, snow, GW) that initialises a subsequent simulation, letting long runs be split into checkpoints or warm runs into operational forecasts.
144
+ - **HEC-22** — FHWA Hydraulic Engineering Circular No. 22, the design reference whose grate and curb-opening capture equations are used by the inlet-analysis module.
145
+ - **GeoPackage** — OGC standard for a SQLite-based, single-file container holding spatial features and tabular data with full CRS metadata.
146
+
147
+ ## Prerequisites
148
+
149
+ | Requirement | Version |
150
+ |---|---|
151
+ | CMake | 3.21+ |
152
+ | C compiler | C17 (GCC 10+, Clang 12+, MSVC 19.29+) |
153
+ | C++ compiler | C++20 (GCC 10+, Clang 14+, MSVC 19.29+) |
154
+ | vcpkg | 2025.02.14 |
155
+ | Python | 3.9 – 3.13 (optional) |
156
+ | Ninja | recommended on Linux/macOS |
157
+
158
+ ## Project Structure
159
+
160
+ ```
161
+ openswmm.engine/
162
+ ├── include/openswmm/
163
+ │ ├── engine/ # New engine public C API headers
164
+ │ └── legacy/ # Legacy SWMM 5.x public headers
165
+ ├── src/
166
+ │ ├── engine/ # New C++20 engine implementation
167
+ │ │ ├── input/geopackage/ # Optional GeoPackage I/O
168
+ │ │ └── 2d/ # 2D overland-flow & groundwater coupling
169
+ │ ├── legacy/ # Original EPA SWMM 5.x solver and output reader
170
+ │ ├── plugin_sdk/ # Header-only plugin SDK
171
+ │ └── cli/ # Command-line interface
172
+ ├── tests/
173
+ │ ├── unit/legacy/ # Legacy solver & output tests
174
+ │ ├── unit/engine/ # New engine unit tests
175
+ │ ├── regression/ # New-vs-legacy regression tests
176
+ │ └── benchmarks/ # Performance benchmarks
177
+ ├── python/ # Cython bindings (scikit-build)
178
+ ├── docs/ # Doxygen config and technical manuals
179
+ └── .github/workflows/ # CI/CD pipelines
180
+ ```
181
+
182
+ ## Libraries Built
183
+
184
+ | Target | Description |
185
+ |---|---|
186
+ | `openswmm_legacy_engine` | Original EPA SWMM 5.x solver (shared) |
187
+ | `openswmm_legacy_output` | Original SWMM binary output reader (shared) |
188
+ | `openswmm_engine` | New refactored C++20 engine (shared) |
189
+ | `openswmm_geopackage` | GeoPackage I/O (static, optional — requires SQLite3) |
190
+ | `openswmm_plugin_sdk` | Header-only plugin SDK (INTERFACE) |
191
+ | `openswmm_cli` | Command-line executable |
192
+
193
+ ## Contributing
194
+
195
+ Contributions are welcome — bug reports, fixes, new features, docs, tests, and benchmarks.
196
+
197
+ 1. Read [CONTRIBUTING.md](CONTRIBUTING.md) for the development workflow and the [Code of Conduct](CODE_OF_CONDUCT.md).
198
+ 2. Fork the repo and create a feature branch.
199
+ 3. Ensure C++ (`ctest`) and Python (`pytest`) tests pass.
200
+ 4. Follow existing style and naming.
201
+ 5. Open a PR against `develop`.
202
+
203
+ ### Contributor License Agreement
204
+
205
+ First-time contributors must sign the project [CLA](CLA.md) before a pull request can be merged. The CLA grants the project a perpetual, royalty-free copyright and patent license to your contributions and preserves the project's ability to relicense in the future; **you retain full copyright ownership** of your work.
206
+
207
+ Signing is automated through [CLA Assistant](https://cla-assistant.io) — when you open your first PR, a bot comments with a one-click sign-in link. The CLA covers all subsequent contributions, so you only sign once. Corporate contributors should additionally submit a CCLA per [CLA §6](CLA.md#6-corporate-contributors).
208
+
209
+ ## License
210
+
211
+ MIT — see [LICENSE](LICENSE). Original EPA SWMM material is in the public domain under 17 USC § 105.
212
+
213
+ ## Acknowledgements
214
+
215
+ OpenSWMM builds on the EPA Storm Water Management Model. See [docs/authors.md](docs/authors.md) for the full contributor list.
@@ -172,12 +172,18 @@ function(add_cython_extension)
172
172
  )
173
173
 
174
174
  # ── RPATH + symbol export, per platform ───────────────────────────────
175
+ # INSTALL_RPATH covers three deployment layouts:
176
+ # @loader_path / $ORIGIN — wheel: dylib bundled next to .so
177
+ # ../../../lib (3 levels up) — conda/venv env lib from
178
+ # site-packages/openswmm/engine/
179
+ # CMAKE_INSTALL_RPATH_USE_LINK_PATH (set in python/CMakeLists.txt) appends
180
+ # the engine dylib's install-time directory automatically, covering both
181
+ # pre-built prefix installs and editable builds.
182
+ # BUILD_WITH_INSTALL_RPATH is left FALSE; the build-tree rpath is computed
183
+ # from link directories by CMake automatically.
175
184
  if(APPLE)
176
- # Bundled dylibs sit next to the .so; @loader_path is enough.
177
185
  set_target_properties("${ACE_TARGET}" PROPERTIES
178
- BUILD_RPATH "@loader_path"
179
- INSTALL_RPATH "@loader_path"
180
- BUILD_WITH_INSTALL_RPATH TRUE
186
+ INSTALL_RPATH "@loader_path;@loader_path/../../../lib"
181
187
  )
182
188
  elseif(UNIX)
183
189
  # Hidden visibility + version script keeps PyInit_<name> exported
@@ -186,9 +192,7 @@ function(add_cython_extension)
186
192
  file(WRITE "${_map}" "{ global: PyInit_${ACE_NAME}; local: *; };\n")
187
193
  target_link_options("${ACE_TARGET}" PRIVATE "-Wl,--version-script=${_map}")
188
194
  set_target_properties("${ACE_TARGET}" PROPERTIES
189
- BUILD_RPATH "$ORIGIN"
190
- INSTALL_RPATH "$ORIGIN"
191
- BUILD_WITH_INSTALL_RPATH TRUE
195
+ INSTALL_RPATH "$ORIGIN;$ORIGIN/../../../lib"
192
196
  )
193
197
  elseif(WIN32)
194
198
  # MSVC: explicit /EXPORT for the PyInit symbol. delvewheel (in CI)
@@ -1,4 +1,4 @@
1
1
  # Sphinx build info version 1
2
2
  # This file records the configuration used when building these files. When it is not found, a full rebuild will be done.
3
- config: 6d3e7bb45057a8e7086b33a1603e3ea1
3
+ config: e61651466b00a074a1b3e8b19483bf9d
4
4
  tags: 645f666f9bcd5a90fca523b33c5a78b7