aXqua 1.0.1__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 (278) hide show
  1. axqua-1.0.1/LICENSE +28 -0
  2. axqua-1.0.1/NOTICE +43 -0
  3. axqua-1.0.1/PKG-INFO +118 -0
  4. axqua-1.0.1/README.md +71 -0
  5. axqua-1.0.1/pyproject.toml +130 -0
  6. axqua-1.0.1/setup.cfg +4 -0
  7. axqua-1.0.1/src/aXqua.egg-info/PKG-INFO +118 -0
  8. axqua-1.0.1/src/aXqua.egg-info/SOURCES.txt +276 -0
  9. axqua-1.0.1/src/aXqua.egg-info/dependency_links.txt +1 -0
  10. axqua-1.0.1/src/aXqua.egg-info/entry_points.txt +7 -0
  11. axqua-1.0.1/src/aXqua.egg-info/requires.txt +21 -0
  12. axqua-1.0.1/src/aXqua.egg-info/top_level.txt +1 -0
  13. axqua-1.0.1/src/axqua/__init__.py +238 -0
  14. axqua-1.0.1/src/axqua/__main__.py +16 -0
  15. axqua-1.0.1/src/axqua/bayescal.py +714 -0
  16. axqua-1.0.1/src/axqua/boundary.py +19 -0
  17. axqua-1.0.1/src/axqua/calibration.py +464 -0
  18. axqua-1.0.1/src/axqua/campaigns.py +249 -0
  19. axqua-1.0.1/src/axqua/casecli.py +164 -0
  20. axqua-1.0.1/src/axqua/cleanup.py +668 -0
  21. axqua-1.0.1/src/axqua/cleanupcli.py +75 -0
  22. axqua-1.0.1/src/axqua/cli.py +816 -0
  23. axqua-1.0.1/src/axqua/config.py +2708 -0
  24. axqua-1.0.1/src/axqua/convergence.py +1368 -0
  25. axqua-1.0.1/src/axqua/core/__init__.py +31 -0
  26. axqua-1.0.1/src/axqua/core/boundaries.py +128 -0
  27. axqua-1.0.1/src/axqua/core/capabilities.py +399 -0
  28. axqua-1.0.1/src/axqua/core/casecheck.py +271 -0
  29. axqua-1.0.1/src/axqua/core/casefile.py +62 -0
  30. axqua-1.0.1/src/axqua/core/diagnostics.py +85 -0
  31. axqua-1.0.1/src/axqua/core/environment.py +512 -0
  32. axqua-1.0.1/src/axqua/core/errors.py +168 -0
  33. axqua-1.0.1/src/axqua/core/examples.py +343 -0
  34. axqua-1.0.1/src/axqua/core/geodata.py +463 -0
  35. axqua-1.0.1/src/axqua/core/machine.py +250 -0
  36. axqua-1.0.1/src/axqua/core/profile.py +858 -0
  37. axqua-1.0.1/src/axqua/core/raster.py +53 -0
  38. axqua-1.0.1/src/axqua/core/registry.py +373 -0
  39. axqua-1.0.1/src/axqua/core/schema.py +223 -0
  40. axqua-1.0.1/src/axqua/core/schema_meta.py +583 -0
  41. axqua-1.0.1/src/axqua/core/selafin.py +405 -0
  42. axqua-1.0.1/src/axqua/core/structures.py +604 -0
  43. axqua-1.0.1/src/axqua/core/surfaces.py +730 -0
  44. axqua-1.0.1/src/axqua/dem.py +341 -0
  45. axqua-1.0.1/src/axqua/docscli.py +208 -0
  46. axqua-1.0.1/src/axqua/env.py +240 -0
  47. axqua-1.0.1/src/axqua/examplecli.py +62 -0
  48. axqua-1.0.1/src/axqua/exportcli.py +183 -0
  49. axqua-1.0.1/src/axqua/flowtracker.py +366 -0
  50. axqua-1.0.1/src/axqua/flux_convergence.py +19 -0
  51. axqua-1.0.1/src/axqua/fortran.py +19 -0
  52. axqua-1.0.1/src/axqua/gainlose.py +19 -0
  53. axqua-1.0.1/src/axqua/georef.py +273 -0
  54. axqua-1.0.1/src/axqua/ground_truth.py +681 -0
  55. axqua-1.0.1/src/axqua/ground_truth_qa.py +239 -0
  56. axqua-1.0.1/src/axqua/gui/__init__.py +5 -0
  57. axqua-1.0.1/src/axqua/gui/app.py +914 -0
  58. axqua-1.0.1/src/axqua/gui/launch.py +30 -0
  59. axqua-1.0.1/src/axqua/hbc.py +319 -0
  60. axqua-1.0.1/src/axqua/hydraulics.py +209 -0
  61. axqua-1.0.1/src/axqua/install/__init__.py +12 -0
  62. axqua-1.0.1/src/axqua/install/host.py +144 -0
  63. axqua-1.0.1/src/axqua/install/recipes.py +1374 -0
  64. axqua-1.0.1/src/axqua/install/runner.py +637 -0
  65. axqua-1.0.1/src/axqua/install/telemac_examples.py +188 -0
  66. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/LICENSE +24 -0
  67. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/LICENSES/GPL-3.0-or-later.txt +674 -0
  68. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/README.md +47 -0
  69. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/THIRD_PARTY.md +20 -0
  70. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/VENDORED.md +14 -0
  71. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/cpp/olsenRatingCurve.H +343 -0
  72. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/docs/RATING_CURVE.md +34 -0
  73. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/docs/RECOVERY.md +144 -0
  74. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/docs/VISUALIZATION.md +40 -0
  75. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/examples/ratingCurveProperties +27 -0
  76. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/install.ps1 +61 -0
  77. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/install.py +6 -0
  78. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/olsen-sources/README.md +13 -0
  79. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/olsen-sources/sediDriftFoam/Make/files +3 -0
  80. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/olsen-sources/sediDriftFoam/Make/options +18 -0
  81. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/olsen-sources/sediDriftFoam/UEqn.H +24 -0
  82. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/olsen-sources/sediDriftFoam/createFields.H +168 -0
  83. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/olsen-sources/sediDriftFoam/createPhiC.H +82 -0
  84. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/olsen-sources/sediDriftFoam/pEqn.H +50 -0
  85. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/olsen-sources/sediDriftFoam/sediDriftFoam.C +194 -0
  86. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/olsen-sources/sediDriftFoam/sediDriftFoam1.C +218 -0
  87. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/olsen-sources/sediDriftFoam2/Make/files +3 -0
  88. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/olsen-sources/sediDriftFoam2/Make/options +29 -0
  89. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/olsen-sources/sediDriftFoam2/UEqn.H +24 -0
  90. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/olsen-sources/sediDriftFoam2/computevx.h +66 -0
  91. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/olsen-sources/sediDriftFoam2/computevx1.h +36 -0
  92. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/olsen-sources/sediDriftFoam2/computevx2.h +34 -0
  93. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/olsen-sources/sediDriftFoam2/computevx3.h +53 -0
  94. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/olsen-sources/sediDriftFoam2/computevx4.h +36 -0
  95. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/olsen-sources/sediDriftFoam2/createFields.H +134 -0
  96. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/olsen-sources/sediDriftFoam2/createPhiC.H +82 -0
  97. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/olsen-sources/sediDriftFoam2/pEqn.H +50 -0
  98. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/olsen-sources/sediDriftFoam2/sediDriftFoam2.C +456 -0
  99. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/postprocess.py +144 -0
  100. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/sediment_installer/__init__.py +1 -0
  101. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/sediment_installer/core.py +269 -0
  102. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/sediment_installer/installer.py +565 -0
  103. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/sediment_installer/olsen_patch.py +156 -0
  104. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/sediment_installer/olsen_sources.json +27 -0
  105. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/sediment_installer/visualization.py +170 -0
  106. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/tests/test_archive_cache.py +184 -0
  107. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/tests/test_core.py +533 -0
  108. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/tests/test_olsen_bundle.py +56 -0
  109. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/tests/test_olsen_patch.py +120 -0
  110. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/tests/test_shell_env.py +336 -0
  111. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/tests/test_smoke_rerun.py +79 -0
  112. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/tests/test_upstream_environment.py +263 -0
  113. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/tests/test_visualization.py +172 -0
  114. axqua-1.0.1/src/axqua/install/vendor/OpenFOAM-installer/undo_installation.sh +8 -0
  115. axqua-1.0.1/src/axqua/installcli.py +325 -0
  116. axqua-1.0.1/src/axqua/jobcli.py +674 -0
  117. axqua-1.0.1/src/axqua/jobs/__init__.py +110 -0
  118. axqua-1.0.1/src/axqua/jobs/events.py +291 -0
  119. axqua-1.0.1/src/axqua/jobs/executor.py +535 -0
  120. axqua-1.0.1/src/axqua/jobs/ids.py +92 -0
  121. axqua-1.0.1/src/axqua/jobs/index.py +346 -0
  122. axqua-1.0.1/src/axqua/jobs/interaction.py +99 -0
  123. axqua-1.0.1/src/axqua/jobs/launcher.py +240 -0
  124. axqua-1.0.1/src/axqua/jobs/launchers/__init__.py +6 -0
  125. axqua-1.0.1/src/axqua/jobs/launchers/posix.py +135 -0
  126. axqua-1.0.1/src/axqua/jobs/launchers/systemd.py +183 -0
  127. axqua-1.0.1/src/axqua/jobs/launchers/windows.py +227 -0
  128. axqua-1.0.1/src/axqua/jobs/launchers/wsl.py +173 -0
  129. axqua-1.0.1/src/axqua/jobs/lock.py +185 -0
  130. axqua-1.0.1/src/axqua/jobs/logs.py +153 -0
  131. axqua-1.0.1/src/axqua/jobs/model.py +843 -0
  132. axqua-1.0.1/src/axqua/jobs/paths.py +295 -0
  133. axqua-1.0.1/src/axqua/jobs/procs.py +214 -0
  134. axqua-1.0.1/src/axqua/jobs/profiles.py +350 -0
  135. axqua-1.0.1/src/axqua/jobs/reaper.py +137 -0
  136. axqua-1.0.1/src/axqua/jobs/results.py +165 -0
  137. axqua-1.0.1/src/axqua/jobs/store.py +206 -0
  138. axqua-1.0.1/src/axqua/jobs/submit.py +271 -0
  139. axqua-1.0.1/src/axqua/jobs/workspace.py +237 -0
  140. axqua-1.0.1/src/axqua/labdata.py +294 -0
  141. axqua-1.0.1/src/axqua/logsetup.py +135 -0
  142. axqua-1.0.1/src/axqua/mesh.py +19 -0
  143. axqua-1.0.1/src/axqua/mesh_quality.py +19 -0
  144. axqua-1.0.1/src/axqua/mesh_validity.py +255 -0
  145. axqua-1.0.1/src/axqua/model_column.py +285 -0
  146. axqua-1.0.1/src/axqua/openfoam.py +24 -0
  147. axqua-1.0.1/src/axqua/pipeline.py +19 -0
  148. axqua-1.0.1/src/axqua/positional_error.py +161 -0
  149. axqua-1.0.1/src/axqua/postproc/__init__.py +57 -0
  150. axqua-1.0.1/src/axqua/postproc/dataset.py +65 -0
  151. axqua-1.0.1/src/axqua/postproc/profiles.py +173 -0
  152. axqua-1.0.1/src/axqua/postproc/render.py +179 -0
  153. axqua-1.0.1/src/axqua/postproc/scenes.py +156 -0
  154. axqua-1.0.1/src/axqua/postproc/selafin_vtk.py +420 -0
  155. axqua-1.0.1/src/axqua/postproc/visit.py +400 -0
  156. axqua-1.0.1/src/axqua/prerun.py +535 -0
  157. axqua-1.0.1/src/axqua/profilecli.py +157 -0
  158. axqua-1.0.1/src/axqua/progress.py +227 -0
  159. axqua-1.0.1/src/axqua/rating.py +472 -0
  160. axqua-1.0.1/src/axqua/sections.py +19 -0
  161. axqua-1.0.1/src/axqua/selafin.py +16 -0
  162. axqua-1.0.1/src/axqua/solvers/__init__.py +12 -0
  163. axqua-1.0.1/src/axqua/solvers/openfoam/__init__.py +98 -0
  164. axqua-1.0.1/src/axqua/solvers/openfoam/backend.py +511 -0
  165. axqua-1.0.1/src/axqua/solvers/openfoam/calibration.py +991 -0
  166. axqua-1.0.1/src/axqua/solvers/openfoam/case.py +539 -0
  167. axqua-1.0.1/src/axqua/solvers/openfoam/convergence.py +171 -0
  168. axqua-1.0.1/src/axqua/solvers/openfoam/dicts.py +931 -0
  169. axqua-1.0.1/src/axqua/solvers/openfoam/fields.py +576 -0
  170. axqua-1.0.1/src/axqua/solvers/openfoam/hotstart.py +468 -0
  171. axqua-1.0.1/src/axqua/solvers/openfoam/layout.py +110 -0
  172. axqua-1.0.1/src/axqua/solvers/openfoam/mesh.py +1313 -0
  173. axqua-1.0.1/src/axqua/solvers/openfoam/planview.py +296 -0
  174. axqua-1.0.1/src/axqua/solvers/openfoam/polymesh.py +401 -0
  175. axqua-1.0.1/src/axqua/solvers/openfoam/potential.py +459 -0
  176. axqua-1.0.1/src/axqua/solvers/openfoam/quality.py +446 -0
  177. axqua-1.0.1/src/axqua/solvers/openfoam/report.py +730 -0
  178. axqua-1.0.1/src/axqua/solvers/openfoam/runtime.py +294 -0
  179. axqua-1.0.1/src/axqua/solvers/openfoam/sediment.py +1484 -0
  180. axqua-1.0.1/src/axqua/solvers/openfoam/spec.py +178 -0
  181. axqua-1.0.1/src/axqua/solvers/telemac/__init__.py +40 -0
  182. axqua-1.0.1/src/axqua/solvers/telemac/backend.py +565 -0
  183. axqua-1.0.1/src/axqua/solvers/telemac/boundary.py +680 -0
  184. axqua-1.0.1/src/axqua/solvers/telemac/flux_convergence.py +482 -0
  185. axqua-1.0.1/src/axqua/solvers/telemac/fortran.py +700 -0
  186. axqua-1.0.1/src/axqua/solvers/telemac/gainlose.py +176 -0
  187. axqua-1.0.1/src/axqua/solvers/telemac/mesh.py +946 -0
  188. axqua-1.0.1/src/axqua/solvers/telemac/mesh_quality.py +315 -0
  189. axqua-1.0.1/src/axqua/solvers/telemac/pipeline.py +297 -0
  190. axqua-1.0.1/src/axqua/solvers/telemac/sections.py +213 -0
  191. axqua-1.0.1/src/axqua/solvers/telemac/sortie.py +608 -0
  192. axqua-1.0.1/src/axqua/solvers/telemac/spec.py +192 -0
  193. axqua-1.0.1/src/axqua/solvers/telemac/steering.py +1421 -0
  194. axqua-1.0.1/src/axqua/solvers/telemac/threed.py +584 -0
  195. axqua-1.0.1/src/axqua/solvers/telemac/unsteady.py +315 -0
  196. axqua-1.0.1/src/axqua/solvers/telemac/watertable.py +303 -0
  197. axqua-1.0.1/src/axqua/solvers/telemac/wetting.py +443 -0
  198. axqua-1.0.1/src/axqua/sortie.py +19 -0
  199. axqua-1.0.1/src/axqua/steering.py +19 -0
  200. axqua-1.0.1/src/axqua/surface_stage.py +433 -0
  201. axqua-1.0.1/src/axqua/targets.py +820 -0
  202. axqua-1.0.1/src/axqua/threed.py +19 -0
  203. axqua-1.0.1/src/axqua/unsteady.py +19 -0
  204. axqua-1.0.1/src/axqua/validation.py +614 -0
  205. axqua-1.0.1/src/axqua/validationcli.py +103 -0
  206. axqua-1.0.1/src/axqua/vertical_convergence.py +460 -0
  207. axqua-1.0.1/src/axqua/watertable.py +19 -0
  208. axqua-1.0.1/src/axqua/wetting.py +19 -0
  209. axqua-1.0.1/src/axqua/workflow.py +457 -0
  210. axqua-1.0.1/tests/test_backends.py +337 -0
  211. axqua-1.0.1/tests/test_bayescal_staging.py +276 -0
  212. axqua-1.0.1/tests/test_boundary.py +364 -0
  213. axqua-1.0.1/tests/test_calibration_progress.py +114 -0
  214. axqua-1.0.1/tests/test_calibration_solver.py +67 -0
  215. axqua-1.0.1/tests/test_campaigns.py +79 -0
  216. axqua-1.0.1/tests/test_capabilities.py +461 -0
  217. axqua-1.0.1/tests/test_casecheck.py +347 -0
  218. axqua-1.0.1/tests/test_cleanup.py +444 -0
  219. axqua-1.0.1/tests/test_cli_jobs.py +464 -0
  220. axqua-1.0.1/tests/test_convergence.py +529 -0
  221. axqua-1.0.1/tests/test_docs_i18n.py +442 -0
  222. axqua-1.0.1/tests/test_docs_outline.py +254 -0
  223. axqua-1.0.1/tests/test_docscli.py +128 -0
  224. axqua-1.0.1/tests/test_dod.py +129 -0
  225. axqua-1.0.1/tests/test_env.py +110 -0
  226. axqua-1.0.1/tests/test_environment.py +382 -0
  227. axqua-1.0.1/tests/test_examples.py +364 -0
  228. axqua-1.0.1/tests/test_flowtracker.py +218 -0
  229. axqua-1.0.1/tests/test_flux_convergence.py +513 -0
  230. axqua-1.0.1/tests/test_gainlose.py +213 -0
  231. axqua-1.0.1/tests/test_geodata.py +278 -0
  232. axqua-1.0.1/tests/test_georef.py +243 -0
  233. axqua-1.0.1/tests/test_ground_truth_points.py +149 -0
  234. axqua-1.0.1/tests/test_install.py +1464 -0
  235. axqua-1.0.1/tests/test_integration.py +195 -0
  236. axqua-1.0.1/tests/test_jobs_events.py +302 -0
  237. axqua-1.0.1/tests/test_jobs_executor.py +483 -0
  238. axqua-1.0.1/tests/test_jobs_index.py +136 -0
  239. axqua-1.0.1/tests/test_jobs_launcher.py +302 -0
  240. axqua-1.0.1/tests/test_jobs_model.py +236 -0
  241. axqua-1.0.1/tests/test_jobs_store.py +250 -0
  242. axqua-1.0.1/tests/test_jobs_workspace.py +176 -0
  243. axqua-1.0.1/tests/test_labdata.py +264 -0
  244. axqua-1.0.1/tests/test_limit_stop.py +154 -0
  245. axqua-1.0.1/tests/test_logging.py +93 -0
  246. axqua-1.0.1/tests/test_machine.py +211 -0
  247. axqua-1.0.1/tests/test_mesh_quality.py +126 -0
  248. axqua-1.0.1/tests/test_mesh_validity.py +93 -0
  249. axqua-1.0.1/tests/test_mesh_zones.py +127 -0
  250. axqua-1.0.1/tests/test_openfoam.py +2240 -0
  251. axqua-1.0.1/tests/test_openfoam_calibration.py +853 -0
  252. axqua-1.0.1/tests/test_openfoam_convergence.py +377 -0
  253. axqua-1.0.1/tests/test_openfoam_rating_outlet.py +94 -0
  254. axqua-1.0.1/tests/test_positional_error.py +154 -0
  255. axqua-1.0.1/tests/test_postproc.py +408 -0
  256. axqua-1.0.1/tests/test_prerun.py +473 -0
  257. axqua-1.0.1/tests/test_prewet.py +526 -0
  258. axqua-1.0.1/tests/test_profile.py +897 -0
  259. axqua-1.0.1/tests/test_profile_rules.py +192 -0
  260. axqua-1.0.1/tests/test_progress.py +68 -0
  261. axqua-1.0.1/tests/test_rating.py +198 -0
  262. axqua-1.0.1/tests/test_rename_compat.py +244 -0
  263. axqua-1.0.1/tests/test_roughness.py +210 -0
  264. axqua-1.0.1/tests/test_schema.py +234 -0
  265. axqua-1.0.1/tests/test_sections.py +165 -0
  266. axqua-1.0.1/tests/test_sediment.py +1093 -0
  267. axqua-1.0.1/tests/test_selafin_vtk.py +428 -0
  268. axqua-1.0.1/tests/test_source_regions.py +484 -0
  269. axqua-1.0.1/tests/test_structures.py +617 -0
  270. axqua-1.0.1/tests/test_surface_stage.py +272 -0
  271. axqua-1.0.1/tests/test_surfaces.py +418 -0
  272. axqua-1.0.1/tests/test_targets.py +298 -0
  273. axqua-1.0.1/tests/test_threed.py +108 -0
  274. axqua-1.0.1/tests/test_unsteady.py +198 -0
  275. axqua-1.0.1/tests/test_validation.py +331 -0
  276. axqua-1.0.1/tests/test_vertical_convergence.py +106 -0
  277. axqua-1.0.1/tests/test_watertable.py +217 -0
  278. axqua-1.0.1/tests/test_wetting.py +282 -0
axqua-1.0.1/LICENSE ADDED
@@ -0,0 +1,28 @@
1
+ BSD 3-Clause License
2
+
3
+ Copyright (c) 2026, Sebastian Schwindt
4
+
5
+ Redistribution and use in source and binary forms, with or without
6
+ modification, are permitted provided that the following conditions are met:
7
+
8
+ 1. Redistributions of source code must retain the above copyright notice, this
9
+ list of conditions and the following disclaimer.
10
+
11
+ 2. Redistributions in binary form must reproduce the above copyright notice,
12
+ this list of conditions and the following disclaimer in the documentation
13
+ and/or other materials provided with the distribution.
14
+
15
+ 3. Neither the name of the copyright holder nor the names of its
16
+ contributors may be used to endorse or promote products derived from
17
+ this software without specific prior written permission.
18
+
19
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
20
+ AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
21
+ IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
22
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
23
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
24
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
25
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
26
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
27
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
28
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
axqua-1.0.1/NOTICE ADDED
@@ -0,0 +1,43 @@
1
+ axqua
2
+ Copyright (c) 2026, Sebastian Schwindt
3
+ Licensed under the BSD 3-Clause License (see LICENSE).
4
+
5
+ --------------------------------------------------------------------------------
6
+ Third-party acknowledgements
7
+ --------------------------------------------------------------------------------
8
+
9
+ axqua.sortie / axqua.flux_convergence
10
+ ---------------------------------------------
11
+ The TELEMAC listing (".sortie") reader and the boundary-flux convergence analysis
12
+ were adopted from the `pythomac` package (https://github.com/hydro-informatics/
13
+ pythomac), lead author Sebastian Schwindt, who is also the author of axqua and
14
+ authorized the adoption. The analysis reproduces pythomac's behavior and writes the
15
+ same four output files (extracted-fluxes.csv, flux-convergence.png,
16
+ convergence-rate.csv, convergence-rate.png).
17
+
18
+ The implementation here is an independent one written against TELEMAC's output
19
+ format, not a copy. That is deliberate: pythomac's own listing parser
20
+ (`parser_output.py`) and its `utils/files.py` / `utils/exceptions.py` are adapted
21
+ from TELEMAC-MASCARET's `HOMETEL/scripts/python3/postel` under the GNU GPL v3 and
22
+ carry the TELEMAC-MASCARET Consortium's copyright, which is not axqua's or
23
+ pythomac's to relicense. axqua therefore reimplements the parsing rather than
24
+ vendoring those files, and the GAIA / tracer mass-balance field lists in
25
+ axqua.sortie were re-derived from the FORTRAN FORMAT statements in TELEMAC
26
+ v9.1.1 (`sources/gaia/mass_balance.f`, `sources/telemac3d/bil3d.f`).
27
+
28
+ TELEMAC-MASCARET (http://www.opentelemac.org) is a separate program, invoked by
29
+ axqua as an external solver; none of its source is included or linked here.
30
+
31
+ docs/img/active-layer.jpg
32
+ -------------------------
33
+ The illustration of the active layer in the documentation is taken unchanged from the
34
+ eBook Hydro-Informatics (https://hydro-informatics.com, file
35
+ `img/telemac/active-layers-web.jpg`), author Sebastian Schwindt, who is also the author
36
+ of axqua and authorized its use here. The image carries a Creative Commons
37
+ BY-NC-ND mark and is NOT covered by the BSD 3-Clause License of this repository.
38
+
39
+ src/axqua/install/vendor/OpenFOAM-installer/
40
+ ---------------------------------------------
41
+ A copy of the OpenFOAM installer of https://github.com/Ecohydraulics/numerical-software-installers (commit 12fcb7e, MIT License, see its LICENSE), with the changes listed in its VENDORED.md. It is NOT covered by the BSD 3-Clause License of this repository.
42
+
43
+ Its folder olsen-sources/ holds the source files of the sediment solvers sediDriftFoam and sediDriftFoam2 by Nils Reidar B. Olsen, unchanged, under the GNU General Public License version 3 or later (text in LICENSES/GPL-3.0-or-later.txt), as is cpp/olsenRatingCurve.H. They are shipped as an aggregate: aXqua neither links nor imports them, the installer compiles them into separate programs, and aXqua runs those programs as external solvers. The GPL therefore applies to these files and the programs built from them, not to aXqua.
axqua-1.0.1/PKG-INFO ADDED
@@ -0,0 +1,118 @@
1
+ Metadata-Version: 2.4
2
+ Name: aXqua
3
+ Version: 1.0.1
4
+ Summary: Automated setup, persistent execution and calibration of river models - TELEMAC-2D/3D with GAIA, and OpenFOAM interFoam - with a QGIS frontend.
5
+ Author: Sebastian Schwindt
6
+ License-Expression: BSD-3-Clause AND MIT AND GPL-3.0-or-later
7
+ Project-URL: Documentation, https://axqua.eu
8
+ Project-URL: Source, https://github.com/sschwindt/aXqua
9
+ Project-URL: Issues, https://github.com/sschwindt/aXqua/issues
10
+ Project-URL: Releases, https://github.com/sschwindt/aXqua/releases
11
+ Keywords: TELEMAC,OpenFOAM,river modeling,hydraulics,sediment transport,Bayesian calibration,QGIS,mesh generation
12
+ Classifier: Development Status :: 5 - Production/Stable
13
+ Classifier: Intended Audience :: Science/Research
14
+ Classifier: Topic :: Scientific/Engineering :: Hydrology
15
+ Classifier: Topic :: Scientific/Engineering :: GIS
16
+ Classifier: Operating System :: POSIX :: Linux
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3.10
19
+ Classifier: Programming Language :: Python :: 3.11
20
+ Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Programming Language :: Python :: 3.13
22
+ Requires-Python: >=3.10
23
+ Description-Content-Type: text/markdown
24
+ License-File: LICENSE
25
+ License-File: NOTICE
26
+ License-File: src/axqua/install/vendor/OpenFOAM-installer/LICENSE
27
+ License-File: src/axqua/install/vendor/OpenFOAM-installer/LICENSES/GPL-3.0-or-later.txt
28
+ Requires-Dist: numpy
29
+ Requires-Dist: pandas
30
+ Requires-Dist: scipy
31
+ Requires-Dist: pyyaml
32
+ Requires-Dist: pyproj
33
+ Requires-Dist: shapely>=2.0
34
+ Requires-Dist: geopandas
35
+ Requires-Dist: rasterio
36
+ Requires-Dist: gmsh>=4.13
37
+ Requires-Dist: openpyxl>=3.1
38
+ Requires-Dist: matplotlib
39
+ Provides-Extra: dev
40
+ Requires-Dist: pytest; extra == "dev"
41
+ Requires-Dist: ruff; extra == "dev"
42
+ Provides-Extra: gui
43
+ Requires-Dist: streamlit>=1.30; extra == "gui"
44
+ Provides-Extra: calibration
45
+ Requires-Dist: hydrobayescal>=1.8.1; extra == "calibration"
46
+ Dynamic: license-file
47
+
48
+ # aXqua
49
+
50
+ **Automated setup, persistent execution and calibration of models of free-surface water bodies: rivers, lakes, reservoirs and hydraulic structures.**
51
+
52
+ aXqua builds a **TELEMAC-2D/3D** case (optionally with **GAIA**) or an **OpenFOAM** free-surface case from geodata, runs it as a job that outlives the shell or QGIS that started it, and calibrates it with [HydroBayesCal](https://github.com/Ecohydraulics/hydrobayescal) (surrogate-assisted Bayesian calibration with quantified uncertainty). A **QGIS plugin** drives the whole workflow; everything also works from a terminal.
53
+
54
+ **Documentation:** [axqua.eu](https://axqua.eu) (English), [axqua.eu/de](https://axqua.eu/de/) (Deutsch), [axqua.eu/fr](https://axqua.eu/fr/) (Français), and [axqua.readthedocs.io](https://axqua.readthedocs.io) (English).
55
+
56
+ ## Install
57
+
58
+ ```bash
59
+ pip install axqua # Python 3.10 or newer, best in an environment of its own
60
+ axqua profile init # find TELEMAC, OpenFOAM, ParaView, VisIt on this computer
61
+ ```
62
+
63
+ `pip install "axqua[calibration]"` adds HydroBayesCal for the Bayesian calibration. For development, install from a clone of this repository:
64
+
65
+ ```bash
66
+ mamba env create -f environment.yml # the environment axqua-env
67
+ mamba activate axqua-env
68
+ pip install -e .
69
+ ```
70
+
71
+ The QGIS plugin (QGIS 3.44 or newer) is `qgis_plugin/axqua/`; for development link it into a QGIS profile, or start `scripts/qgis_dev.sh`, which uses a QGIS of its own. The installation of the plugin and of the simulation software is described in the [documentation](https://axqua.eu/installation/index.html).
72
+
73
+ ## Quick start
74
+
75
+ ```bash
76
+ axqua example get --folder ~/aXqua-examples # a small Isar case with its data (6 MB)
77
+ axqua submit <case-file> --kind preprocessing # build the TELEMAC model, as a job
78
+ axqua submit <case-file> --kind steady # the steady 2D run (waits for the build)
79
+ axqua list # the jobs, with state and progress
80
+ axqua cleanup <case-file> # what the case could do without (frees disk space)
81
+ ```
82
+
83
+ The example case and its guide are in [`cases/example-isar/`](https://github.com/sschwindt/aXqua/blob/main/cases/example-isar/README.md). Every command is listed in the [terminal syntax](https://axqua.eu/automation/terminal-syntax.html).
84
+
85
+ ## Repository
86
+
87
+ | Folder | Content |
88
+ |---|---|
89
+ | `src/axqua/` | the library and the command `axqua` |
90
+ | `qgis_plugin/axqua/` | the QGIS plugin (GPL-2.0-or-later; it talks to `axqua` only through the command line) |
91
+ | `cases/` | the example cases and the template of a case; case data (`user-sources/`) and results (`axqua-case/`) are not tracked |
92
+ | `docs/` | the documentation (Sphinx); `docs/locale/` holds its German and French translations |
93
+ | `tests/`, `qgis_plugin/tests/` | the tests (`pytest tests qgis_plugin/tests`) |
94
+ | `scripts/` | tools: plugin archive, screenshots and UML diagrams of the documentation, data of the example case, backup of case data to Google Drive (`backup_cases_to_drive.sh`, rclone) |
95
+ | `deploy.sh` | publishes the documentation (below) |
96
+
97
+ ## Documentation: build and publish
98
+
99
+ Build the English pages alone (Sphinx and the theme suffice; heavy dependencies are mocked):
100
+
101
+ ```bash
102
+ pip install -r docs/requirements-docs.txt
103
+ sphinx-build -W -b html docs docs/_build/html
104
+ ```
105
+
106
+ Build and publish all three languages on GitHub Pages:
107
+
108
+ ```bash
109
+ mamba env create -f docs/i18n/environment.yml # once: the environment axqua-docs (Sphinx + Argos Translate)
110
+ bash deploy.sh # build into docs/_build/site and copy it into the gh-pages worktree
111
+ bash deploy.sh --push # ... then push main and gh-pages: the site is live within a minute
112
+ ```
113
+
114
+ `deploy.sh` translates only the paragraphs that are new or changed since the last deploy (seconds; `--retranslate` translates everything again, about 4 minutes), commits the updated catalogs `docs/locale/**.po` on `main`, pushes `main` and then the branch `gh-pages`, which GitHub Pages serves at `https://axqua.eu`. It refuses to run with uncommitted changes. Read the Docs builds the English pages from `main` by itself. The glossaries of technical terms, corrections of a translation by hand and the other settings are described in [`docs/i18n/README.md`](https://github.com/sschwindt/aXqua/blob/main/docs/i18n/README.md).
115
+
116
+ ## License
117
+
118
+ aXqua is BSD-3-Clause; the QGIS plugin is GPL-2.0-or-later. The data of the example case are CC BY 4.0 (`cases/example-isar/LICENSE.md`). Coordinates are EPSG:25832 throughout; see `CLAUDE.md` for the notes of the developers.
axqua-1.0.1/README.md ADDED
@@ -0,0 +1,71 @@
1
+ # aXqua
2
+
3
+ **Automated setup, persistent execution and calibration of models of free-surface water bodies: rivers, lakes, reservoirs and hydraulic structures.**
4
+
5
+ aXqua builds a **TELEMAC-2D/3D** case (optionally with **GAIA**) or an **OpenFOAM** free-surface case from geodata, runs it as a job that outlives the shell or QGIS that started it, and calibrates it with [HydroBayesCal](https://github.com/Ecohydraulics/hydrobayescal) (surrogate-assisted Bayesian calibration with quantified uncertainty). A **QGIS plugin** drives the whole workflow; everything also works from a terminal.
6
+
7
+ **Documentation:** [axqua.eu](https://axqua.eu) (English), [axqua.eu/de](https://axqua.eu/de/) (Deutsch), [axqua.eu/fr](https://axqua.eu/fr/) (Français), and [axqua.readthedocs.io](https://axqua.readthedocs.io) (English).
8
+
9
+ ## Install
10
+
11
+ ```bash
12
+ pip install axqua # Python 3.10 or newer, best in an environment of its own
13
+ axqua profile init # find TELEMAC, OpenFOAM, ParaView, VisIt on this computer
14
+ ```
15
+
16
+ `pip install "axqua[calibration]"` adds HydroBayesCal for the Bayesian calibration. For development, install from a clone of this repository:
17
+
18
+ ```bash
19
+ mamba env create -f environment.yml # the environment axqua-env
20
+ mamba activate axqua-env
21
+ pip install -e .
22
+ ```
23
+
24
+ The QGIS plugin (QGIS 3.44 or newer) is `qgis_plugin/axqua/`; for development link it into a QGIS profile, or start `scripts/qgis_dev.sh`, which uses a QGIS of its own. The installation of the plugin and of the simulation software is described in the [documentation](https://axqua.eu/installation/index.html).
25
+
26
+ ## Quick start
27
+
28
+ ```bash
29
+ axqua example get --folder ~/aXqua-examples # a small Isar case with its data (6 MB)
30
+ axqua submit <case-file> --kind preprocessing # build the TELEMAC model, as a job
31
+ axqua submit <case-file> --kind steady # the steady 2D run (waits for the build)
32
+ axqua list # the jobs, with state and progress
33
+ axqua cleanup <case-file> # what the case could do without (frees disk space)
34
+ ```
35
+
36
+ The example case and its guide are in [`cases/example-isar/`](https://github.com/sschwindt/aXqua/blob/main/cases/example-isar/README.md). Every command is listed in the [terminal syntax](https://axqua.eu/automation/terminal-syntax.html).
37
+
38
+ ## Repository
39
+
40
+ | Folder | Content |
41
+ |---|---|
42
+ | `src/axqua/` | the library and the command `axqua` |
43
+ | `qgis_plugin/axqua/` | the QGIS plugin (GPL-2.0-or-later; it talks to `axqua` only through the command line) |
44
+ | `cases/` | the example cases and the template of a case; case data (`user-sources/`) and results (`axqua-case/`) are not tracked |
45
+ | `docs/` | the documentation (Sphinx); `docs/locale/` holds its German and French translations |
46
+ | `tests/`, `qgis_plugin/tests/` | the tests (`pytest tests qgis_plugin/tests`) |
47
+ | `scripts/` | tools: plugin archive, screenshots and UML diagrams of the documentation, data of the example case, backup of case data to Google Drive (`backup_cases_to_drive.sh`, rclone) |
48
+ | `deploy.sh` | publishes the documentation (below) |
49
+
50
+ ## Documentation: build and publish
51
+
52
+ Build the English pages alone (Sphinx and the theme suffice; heavy dependencies are mocked):
53
+
54
+ ```bash
55
+ pip install -r docs/requirements-docs.txt
56
+ sphinx-build -W -b html docs docs/_build/html
57
+ ```
58
+
59
+ Build and publish all three languages on GitHub Pages:
60
+
61
+ ```bash
62
+ mamba env create -f docs/i18n/environment.yml # once: the environment axqua-docs (Sphinx + Argos Translate)
63
+ bash deploy.sh # build into docs/_build/site and copy it into the gh-pages worktree
64
+ bash deploy.sh --push # ... then push main and gh-pages: the site is live within a minute
65
+ ```
66
+
67
+ `deploy.sh` translates only the paragraphs that are new or changed since the last deploy (seconds; `--retranslate` translates everything again, about 4 minutes), commits the updated catalogs `docs/locale/**.po` on `main`, pushes `main` and then the branch `gh-pages`, which GitHub Pages serves at `https://axqua.eu`. It refuses to run with uncommitted changes. Read the Docs builds the English pages from `main` by itself. The glossaries of technical terms, corrections of a translation by hand and the other settings are described in [`docs/i18n/README.md`](https://github.com/sschwindt/aXqua/blob/main/docs/i18n/README.md).
68
+
69
+ ## License
70
+
71
+ aXqua is BSD-3-Clause; the QGIS plugin is GPL-2.0-or-later. The data of the example case are CC BY 4.0 (`cases/example-isar/LICENSE.md`). Coordinates are EPSG:25832 throughout; see `CLAUDE.md` for the notes of the developers.
@@ -0,0 +1,130 @@
1
+ [build-system]
2
+ # 77: the license expression and license-files of PEP 639.
3
+ requires = ["setuptools>=77", "wheel"]
4
+ build-backend = "setuptools.build_meta"
5
+
6
+ [project]
7
+ # Branded on PyPI; the import package is plain lowercase `axqua`, because a mixed-case
8
+ # module name resolves differently on case-insensitive filesystems. PyPI normalizes the
9
+ # two to the same project, so `pip install aXqua` and `pip install axqua` both work.
10
+ name = "aXqua"
11
+ version = "1.0.1"
12
+ description = "Automated setup, persistent execution and calibration of river models - TELEMAC-2D/3D with GAIA, and OpenFOAM interFoam - with a QGIS frontend."
13
+ readme = "README.md"
14
+ requires-python = ">=3.10"
15
+ # aXqua is BSD-3-Clause. The wheel also carries the vendored OpenFOAM installer (MIT) and
16
+ # Olsen's solver sources (GPL-3.0-or-later), which aXqua runs as separate programs and
17
+ # never imports or links (NOTICE); PyPI shows this expression, so it names all three.
18
+ license = "BSD-3-Clause AND MIT AND GPL-3.0-or-later"
19
+ license-files = [
20
+ "LICENSE",
21
+ "NOTICE",
22
+ "src/axqua/install/vendor/OpenFOAM-installer/LICENSE",
23
+ "src/axqua/install/vendor/OpenFOAM-installer/LICENSES/*",
24
+ ]
25
+ authors = [{ name = "Sebastian Schwindt" }]
26
+ keywords = ["TELEMAC", "OpenFOAM", "river modeling", "hydraulics", "sediment transport",
27
+ "Bayesian calibration", "QGIS", "mesh generation"]
28
+ classifiers = [
29
+ "Development Status :: 5 - Production/Stable",
30
+ "Intended Audience :: Science/Research",
31
+ "Topic :: Scientific/Engineering :: Hydrology",
32
+ "Topic :: Scientific/Engineering :: GIS",
33
+ "Operating System :: POSIX :: Linux",
34
+ "Programming Language :: Python :: 3",
35
+ "Programming Language :: Python :: 3.10",
36
+ "Programming Language :: Python :: 3.11",
37
+ "Programming Language :: Python :: 3.12",
38
+ "Programming Language :: Python :: 3.13",
39
+ ]
40
+ dependencies = [
41
+ "numpy",
42
+ "pandas",
43
+ "scipy",
44
+ "pyyaml",
45
+ "pyproj",
46
+ "shapely>=2.0",
47
+ "geopandas",
48
+ "rasterio",
49
+ "gmsh>=4.13",
50
+ "openpyxl>=3.1",
51
+ # flux-convergence + cross-section plots and the P1 triangle interpolation
52
+ # (axqua.flux_convergence, axqua.sections); previously pulled in
53
+ # transitively by pythomac, which the flux analysis no longer uses.
54
+ "matplotlib",
55
+ ]
56
+
57
+ [project.urls]
58
+ Documentation = "https://axqua.eu"
59
+ Source = "https://github.com/sschwindt/aXqua"
60
+ Issues = "https://github.com/sschwindt/aXqua/issues"
61
+ Releases = "https://github.com/sschwindt/aXqua/releases"
62
+
63
+ [project.optional-dependencies]
64
+ dev = ["pytest", "ruff"]
65
+ gui = ["streamlit>=1.30"]
66
+ # Surrogate-assisted Bayesian calibration (axqua.bayescal / axqua.calibration).
67
+ # An EXTRA rather than a core dependency: it pulls in bayesvalidrox, gpytorch and
68
+ # scikit-learn, none of which is needed to build or run a TELEMAC case, which is what
69
+ # most of axqua does.
70
+ #
71
+ # VERSION POLICY: a floor, never a ceiling. HydroBayesCal is developed alongside
72
+ # axqua by the same group, and its releases are bugfixes plus ADDITIVE features -
73
+ # nothing is removed. So the newest release is always the one to want, and an upper
74
+ # bound would only stop a user getting a fix. `pip install 'axqua[calibration]'`
75
+ # therefore resolves to the latest, and that is intended, not an oversight.
76
+ #
77
+ # The floor is the oldest release carrying a capability axqua actually uses, so a
78
+ # too-old install fails at install time rather than halfway through a calibration.
79
+ # What each step added, for the record:
80
+ # 1.4.2 ships the calibration drivers WITH the package (hydroBayesCal.copy_driver);
81
+ # before it they lived only in a source checkout that axqua had to be told
82
+ # the location of, which broke whenever it moved.
83
+ # 1.4.3 hoists save_calibration_data into HydroSimulations, fixing the "truth
84
+ # value of an array is ambiguous" crash on BAL's first iteration once for
85
+ # every binding, and writing the restart CSV that --resume relies on.
86
+ # 1.4.4 makes the MULTI-FLOW driver honor the config's `extraction` block;
87
+ # before it, multi-flow silently averaged the last frames while single-flow
88
+ # on the same config did not, so the two were fitted to different data.
89
+ #
90
+ # Beyond the floor, axqua does NOT check versions: `hbc.require_hbc` tests for the
91
+ # capability it needs (hasattr(hydroBayesCal, "copy_driver")). On an additive-only
92
+ # upstream that is the right test - a version comparison would need editing on every
93
+ # release, and would reject a valid newer one the moment the scheme changed.
94
+ calibration = ["hydrobayescal>=1.8.1"]
95
+
96
+ [project.scripts]
97
+ axqua = "axqua.cli:main"
98
+ axqua-gui = "axqua.gui.launch:main"
99
+
100
+ # Solver backends are discovered through this group, so a third solver is a
101
+ # `pip install axqua-<name>` rather than a fork. The built-ins register through the
102
+ # same mechanism they document, with a hard-coded fallback in core/registry.py for a
103
+ # source checkout that has not been re-installed.
104
+ [project.entry-points."axqua.solvers"]
105
+ telemac = "axqua.solvers.telemac.spec:SPEC"
106
+ openfoam = "axqua.solvers.openfoam.spec:SPEC"
107
+
108
+ [tool.setuptools.packages.find]
109
+ where = ["src"]
110
+
111
+ [tool.setuptools.package-data]
112
+ axqua = ["install/vendor/**/*"]
113
+
114
+ # The vendor glob above takes everything, also the bytecode a run of the installer's own
115
+ # tests leaves in a working tree. A wheel built from such a tree must not carry it.
116
+ [tool.setuptools.exclude-package-data]
117
+ axqua = ["**/__pycache__/*", "*.pyc"]
118
+
119
+ [tool.ruff]
120
+ line-length = 100
121
+ # A copy of another project, kept as close to its original as possible (VENDORED.md).
122
+ extend-exclude = ["src/axqua/install/vendor"]
123
+
124
+ [tool.ruff.lint]
125
+ # Pinned EXPLICITLY rather than left to ruff's defaults: those defaults widened in
126
+ # ruff 0.16, so the same `ruff check src/` went from clean to 88 findings purely by
127
+ # upgrading ruff on one machine (all of them style nits - intentional multi-line
128
+ # prose flagged as ISC004, deliberate `except Exception` reporting as BLE001).
129
+ # Naming the rule set makes the lint contract the same on every machine and in CI.
130
+ select = ["E4", "E7", "E9", "F"]
axqua-1.0.1/setup.cfg ADDED
@@ -0,0 +1,4 @@
1
+ [egg_info]
2
+ tag_build =
3
+ tag_date = 0
4
+
@@ -0,0 +1,118 @@
1
+ Metadata-Version: 2.4
2
+ Name: aXqua
3
+ Version: 1.0.1
4
+ Summary: Automated setup, persistent execution and calibration of river models - TELEMAC-2D/3D with GAIA, and OpenFOAM interFoam - with a QGIS frontend.
5
+ Author: Sebastian Schwindt
6
+ License-Expression: BSD-3-Clause AND MIT AND GPL-3.0-or-later
7
+ Project-URL: Documentation, https://axqua.eu
8
+ Project-URL: Source, https://github.com/sschwindt/aXqua
9
+ Project-URL: Issues, https://github.com/sschwindt/aXqua/issues
10
+ Project-URL: Releases, https://github.com/sschwindt/aXqua/releases
11
+ Keywords: TELEMAC,OpenFOAM,river modeling,hydraulics,sediment transport,Bayesian calibration,QGIS,mesh generation
12
+ Classifier: Development Status :: 5 - Production/Stable
13
+ Classifier: Intended Audience :: Science/Research
14
+ Classifier: Topic :: Scientific/Engineering :: Hydrology
15
+ Classifier: Topic :: Scientific/Engineering :: GIS
16
+ Classifier: Operating System :: POSIX :: Linux
17
+ Classifier: Programming Language :: Python :: 3
18
+ Classifier: Programming Language :: Python :: 3.10
19
+ Classifier: Programming Language :: Python :: 3.11
20
+ Classifier: Programming Language :: Python :: 3.12
21
+ Classifier: Programming Language :: Python :: 3.13
22
+ Requires-Python: >=3.10
23
+ Description-Content-Type: text/markdown
24
+ License-File: LICENSE
25
+ License-File: NOTICE
26
+ License-File: src/axqua/install/vendor/OpenFOAM-installer/LICENSE
27
+ License-File: src/axqua/install/vendor/OpenFOAM-installer/LICENSES/GPL-3.0-or-later.txt
28
+ Requires-Dist: numpy
29
+ Requires-Dist: pandas
30
+ Requires-Dist: scipy
31
+ Requires-Dist: pyyaml
32
+ Requires-Dist: pyproj
33
+ Requires-Dist: shapely>=2.0
34
+ Requires-Dist: geopandas
35
+ Requires-Dist: rasterio
36
+ Requires-Dist: gmsh>=4.13
37
+ Requires-Dist: openpyxl>=3.1
38
+ Requires-Dist: matplotlib
39
+ Provides-Extra: dev
40
+ Requires-Dist: pytest; extra == "dev"
41
+ Requires-Dist: ruff; extra == "dev"
42
+ Provides-Extra: gui
43
+ Requires-Dist: streamlit>=1.30; extra == "gui"
44
+ Provides-Extra: calibration
45
+ Requires-Dist: hydrobayescal>=1.8.1; extra == "calibration"
46
+ Dynamic: license-file
47
+
48
+ # aXqua
49
+
50
+ **Automated setup, persistent execution and calibration of models of free-surface water bodies: rivers, lakes, reservoirs and hydraulic structures.**
51
+
52
+ aXqua builds a **TELEMAC-2D/3D** case (optionally with **GAIA**) or an **OpenFOAM** free-surface case from geodata, runs it as a job that outlives the shell or QGIS that started it, and calibrates it with [HydroBayesCal](https://github.com/Ecohydraulics/hydrobayescal) (surrogate-assisted Bayesian calibration with quantified uncertainty). A **QGIS plugin** drives the whole workflow; everything also works from a terminal.
53
+
54
+ **Documentation:** [axqua.eu](https://axqua.eu) (English), [axqua.eu/de](https://axqua.eu/de/) (Deutsch), [axqua.eu/fr](https://axqua.eu/fr/) (Français), and [axqua.readthedocs.io](https://axqua.readthedocs.io) (English).
55
+
56
+ ## Install
57
+
58
+ ```bash
59
+ pip install axqua # Python 3.10 or newer, best in an environment of its own
60
+ axqua profile init # find TELEMAC, OpenFOAM, ParaView, VisIt on this computer
61
+ ```
62
+
63
+ `pip install "axqua[calibration]"` adds HydroBayesCal for the Bayesian calibration. For development, install from a clone of this repository:
64
+
65
+ ```bash
66
+ mamba env create -f environment.yml # the environment axqua-env
67
+ mamba activate axqua-env
68
+ pip install -e .
69
+ ```
70
+
71
+ The QGIS plugin (QGIS 3.44 or newer) is `qgis_plugin/axqua/`; for development link it into a QGIS profile, or start `scripts/qgis_dev.sh`, which uses a QGIS of its own. The installation of the plugin and of the simulation software is described in the [documentation](https://axqua.eu/installation/index.html).
72
+
73
+ ## Quick start
74
+
75
+ ```bash
76
+ axqua example get --folder ~/aXqua-examples # a small Isar case with its data (6 MB)
77
+ axqua submit <case-file> --kind preprocessing # build the TELEMAC model, as a job
78
+ axqua submit <case-file> --kind steady # the steady 2D run (waits for the build)
79
+ axqua list # the jobs, with state and progress
80
+ axqua cleanup <case-file> # what the case could do without (frees disk space)
81
+ ```
82
+
83
+ The example case and its guide are in [`cases/example-isar/`](https://github.com/sschwindt/aXqua/blob/main/cases/example-isar/README.md). Every command is listed in the [terminal syntax](https://axqua.eu/automation/terminal-syntax.html).
84
+
85
+ ## Repository
86
+
87
+ | Folder | Content |
88
+ |---|---|
89
+ | `src/axqua/` | the library and the command `axqua` |
90
+ | `qgis_plugin/axqua/` | the QGIS plugin (GPL-2.0-or-later; it talks to `axqua` only through the command line) |
91
+ | `cases/` | the example cases and the template of a case; case data (`user-sources/`) and results (`axqua-case/`) are not tracked |
92
+ | `docs/` | the documentation (Sphinx); `docs/locale/` holds its German and French translations |
93
+ | `tests/`, `qgis_plugin/tests/` | the tests (`pytest tests qgis_plugin/tests`) |
94
+ | `scripts/` | tools: plugin archive, screenshots and UML diagrams of the documentation, data of the example case, backup of case data to Google Drive (`backup_cases_to_drive.sh`, rclone) |
95
+ | `deploy.sh` | publishes the documentation (below) |
96
+
97
+ ## Documentation: build and publish
98
+
99
+ Build the English pages alone (Sphinx and the theme suffice; heavy dependencies are mocked):
100
+
101
+ ```bash
102
+ pip install -r docs/requirements-docs.txt
103
+ sphinx-build -W -b html docs docs/_build/html
104
+ ```
105
+
106
+ Build and publish all three languages on GitHub Pages:
107
+
108
+ ```bash
109
+ mamba env create -f docs/i18n/environment.yml # once: the environment axqua-docs (Sphinx + Argos Translate)
110
+ bash deploy.sh # build into docs/_build/site and copy it into the gh-pages worktree
111
+ bash deploy.sh --push # ... then push main and gh-pages: the site is live within a minute
112
+ ```
113
+
114
+ `deploy.sh` translates only the paragraphs that are new or changed since the last deploy (seconds; `--retranslate` translates everything again, about 4 minutes), commits the updated catalogs `docs/locale/**.po` on `main`, pushes `main` and then the branch `gh-pages`, which GitHub Pages serves at `https://axqua.eu`. It refuses to run with uncommitted changes. Read the Docs builds the English pages from `main` by itself. The glossaries of technical terms, corrections of a translation by hand and the other settings are described in [`docs/i18n/README.md`](https://github.com/sschwindt/aXqua/blob/main/docs/i18n/README.md).
115
+
116
+ ## License
117
+
118
+ aXqua is BSD-3-Clause; the QGIS plugin is GPL-2.0-or-later. The data of the example case are CC BY 4.0 (`cases/example-isar/LICENSE.md`). Coordinates are EPSG:25832 throughout; see `CLAUDE.md` for the notes of the developers.