capytaine 2.3__tar.gz → 3.0.0a1__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 (333) hide show
  1. {capytaine-2.3 → capytaine-3.0.0a1}/.github/workflows/build_docs.yml +10 -12
  2. capytaine-3.0.0a1/.github/workflows/build_wheels.yaml +103 -0
  3. {capytaine-2.3 → capytaine-3.0.0a1}/.github/workflows/test_new_commits.yaml +14 -8
  4. capytaine-3.0.0a1/.github/workflows/test_with_latest_dependencies.yaml +48 -0
  5. capytaine-3.0.0a1/.pre-commit-config.yaml +25 -0
  6. capytaine-3.0.0a1/Justfile +189 -0
  7. {capytaine-2.3 → capytaine-3.0.0a1}/PKG-INFO +8 -14
  8. {capytaine-2.3 → capytaine-3.0.0a1}/docs/Makefile +1 -1
  9. {capytaine-2.3 → capytaine-3.0.0a1}/docs/changelog.rst +277 -12
  10. {capytaine-2.3 → capytaine-3.0.0a1}/docs/conf.py +3 -2
  11. {capytaine-2.3 → capytaine-3.0.0a1}/docs/developer_manual/installation.rst +59 -74
  12. {capytaine-2.3 → capytaine-3.0.0a1}/docs/developer_manual/making_a_release.rst +22 -18
  13. {capytaine-2.3 → capytaine-3.0.0a1}/docs/developer_manual/overview.rst +0 -18
  14. {capytaine-2.3 → capytaine-3.0.0a1}/docs/developer_manual/testing.rst +26 -31
  15. capytaine-3.0.0a1/docs/examples/A_beginners_cookbook.rst +102 -0
  16. {capytaine-2.3 → capytaine-3.0.0a1}/docs/examples/C_advanced_cookbook.rst +0 -15
  17. capytaine-2.3/docs/examples/src/A7_elasticity_of_beam.py → capytaine-3.0.0a1/docs/examples/src/A10_elasticity_of_beam.py +41 -21
  18. capytaine-2.3/docs/examples/src/A3_finite_depth_cylinder.py → capytaine-3.0.0a1/docs/examples/src/A11_parametric_study_depth.py +11 -4
  19. capytaine-3.0.0a1/docs/examples/src/A1_single_body_hydrodynamics.py +66 -0
  20. capytaine-3.0.0a1/docs/examples/src/A2_multibody.py +68 -0
  21. capytaine-3.0.0a1/docs/examples/src/A3_finite_depth_flap.py +67 -0
  22. capytaine-2.3/docs/examples/src/V_Malenica_forward_speed.py → capytaine-3.0.0a1/docs/examples/src/A4_forward_speed_on_vertical_cylinder.py +43 -24
  23. capytaine-3.0.0a1/docs/examples/src/A5_benchmark_plane_symmetries.py +57 -0
  24. capytaine-3.0.0a1/docs/examples/src/A6_benchmark_axisymmetric_mesh.py +64 -0
  25. capytaine-2.3/docs/examples/src/A4_custom_dofs.py → capytaine-3.0.0a1/docs/examples/src/A7_custom_dofs.py +12 -17
  26. capytaine-3.0.0a1/docs/examples/src/A8_convergence_study.py +58 -0
  27. capytaine-2.3/docs/examples/src/A6_irregular_frequency_removal.py → capytaine-3.0.0a1/docs/examples/src/A9_test_irregular_frequency_removal.py +27 -25
  28. {capytaine-2.3 → capytaine-3.0.0a1}/docs/examples/src/B4_kochin.py +1 -1
  29. {capytaine-2.3 → capytaine-3.0.0a1}/docs/examples/src/C5_plot_influence_matrix.py +1 -2
  30. {capytaine-2.3 → capytaine-3.0.0a1}/docs/examples/src/C9_custom_Green_function.py +10 -3
  31. capytaine-3.0.0a1/docs/examples/src/Cy_symmetric_matrix_shapes.py +69 -0
  32. {capytaine-2.3 → capytaine-3.0.0a1}/docs/examples/src/V_hydrostatics.py +9 -8
  33. {capytaine-2.3 → capytaine-3.0.0a1}/docs/examples/src/quickstart.py +10 -9
  34. {capytaine-2.3 → capytaine-3.0.0a1}/docs/features.rst +23 -23
  35. {capytaine-2.3 → capytaine-3.0.0a1}/docs/index.rst +1 -1
  36. {capytaine-2.3 → capytaine-3.0.0a1}/docs/theory_manual/bibliography.rst +4 -0
  37. {capytaine-2.3 → capytaine-3.0.0a1}/docs/theory_manual/theory.rst +15 -14
  38. capytaine-3.0.0a1/docs/user_manual/body.rst +157 -0
  39. {capytaine-2.3 → capytaine-3.0.0a1}/docs/user_manual/conventions.rst +20 -2
  40. capytaine-3.0.0a1/docs/user_manual/fixing_issues.rst +66 -0
  41. {capytaine-2.3 → capytaine-3.0.0a1}/docs/user_manual/hydrostatics.rst +60 -47
  42. {capytaine-2.3 → capytaine-3.0.0a1}/docs/user_manual/index.rst +3 -0
  43. {capytaine-2.3 → capytaine-3.0.0a1}/docs/user_manual/installation.rst +20 -14
  44. {capytaine-2.3 → capytaine-3.0.0a1}/docs/user_manual/mesh.rst +113 -166
  45. capytaine-3.0.0a1/docs/user_manual/multibody.rst +37 -0
  46. {capytaine-2.3 → capytaine-3.0.0a1}/docs/user_manual/post_pro.rst +23 -7
  47. {capytaine-2.3 → capytaine-3.0.0a1}/docs/user_manual/problem_setup.rst +2 -2
  48. {capytaine-2.3 → capytaine-3.0.0a1}/docs/user_manual/resolution.rst +140 -108
  49. capytaine-3.0.0a1/docs/user_manual/symmetries.rst +119 -0
  50. {capytaine-2.3 → capytaine-3.0.0a1}/docs/user_manual/tutorial.rst +49 -34
  51. {capytaine-2.3/capytaine/green_functions/libDelhommeau/src → capytaine-3.0.0a1/libs/LiangWuNoblesse}/LiangWuNoblesseWaveTerm.f90 +112 -112
  52. {capytaine-2.3/capytaine/green_functions → capytaine-3.0.0a1/libs}/LiangWuNoblesse/Makefile +0 -2
  53. capytaine-3.0.0a1/libs/fakeblocks/LICENSE +674 -0
  54. {capytaine-2.3/docs/examples/src → capytaine-3.0.0a1/libs/fakeblocks/examples}/C6_axisymmetric_buoy.py +2 -1
  55. {capytaine-2.3/docs/examples/src → capytaine-3.0.0a1/libs/fakeblocks/examples}/C7_h_matrices_with_preconditionner.py +6 -4
  56. capytaine-3.0.0a1/libs/fakeblocks/pyproject.toml +25 -0
  57. capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks/bodies.py +158 -0
  58. {capytaine-2.3/capytaine/bem → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/engines.py +146 -150
  59. capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks/io.py +105 -0
  60. {capytaine-2.3/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/matrices/__init__.py +5 -5
  61. {capytaine-2.3/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/matrices/block.py +2 -2
  62. {capytaine-2.3/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/matrices/block_toeplitz.py +3 -3
  63. {capytaine-2.3/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/matrices/builders.py +3 -3
  64. {capytaine-2.3/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/matrices/linear_solvers.py +2 -83
  65. {capytaine-2.3/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/meshes/collections.py +10 -2
  66. {capytaine-2.3/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/meshes/mesh_like_protocol.py +1 -1
  67. {capytaine-2.3/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/meshes/meshes.py +11 -2
  68. {capytaine-2.3/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/meshes/surface_integrals.py +20 -13
  69. {capytaine-2.3/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/meshes/symmetric.py +90 -25
  70. capytaine-3.0.0a1/libs/fakeblocks/test/test_bodies.py +29 -0
  71. capytaine-2.3/pytest/test_bem_engines_hierarchical_toeplitz_matrices.py → capytaine-3.0.0a1/libs/fakeblocks/test/test_hierarchical_toeplitz_matrices.py +12 -10
  72. {capytaine-2.3/pytest → capytaine-3.0.0a1/libs/fakeblocks/test}/test_linear_solvers.py +3 -4
  73. {capytaine-2.3/pytest → capytaine-3.0.0a1/libs/fakeblocks/test}/test_matrices.py +4 -4
  74. {capytaine-2.3/pytest → capytaine-3.0.0a1/libs/fakeblocks/test}/test_meshes.py +35 -24
  75. {capytaine-2.3/pytest → capytaine-3.0.0a1/libs/fakeblocks/test}/test_meshes_clipping.py +26 -23
  76. capytaine-3.0.0a1/libs/fakeblocks/test/test_meshes_collections_and_symmetries.py +204 -0
  77. capytaine-3.0.0a1/libs/fakeblocks/test/test_meshes_interface.py +94 -0
  78. {capytaine-2.3/pytest → capytaine-3.0.0a1/libs/fakeblocks/test}/test_meshes_predefined.py +30 -26
  79. {capytaine-2.3/pytest → capytaine-3.0.0a1/libs/fakeblocks/test}/test_tool_lru_cache.py +1 -1
  80. {capytaine-2.3/capytaine/green_functions/LiangWuNoblesse → capytaine-3.0.0a1/libs/libDelhommeau/src}/LiangWuNoblesseWaveTerm.f90 +112 -112
  81. {capytaine-2.3/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/src/matrices.f90 +8 -5
  82. {capytaine-2.3 → capytaine-3.0.0a1}/meson.build +34 -18
  83. capytaine-3.0.0a1/pyproject.toml +97 -0
  84. capytaine-3.0.0a1/pytest/Hydrostatics_cases/sphere__hor_cyl__ver_cyl.pkl.json +1 -0
  85. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/envs/2023-08-01-py3.8.txt +34 -9
  86. capytaine-3.0.0a1/pytest/envs/2025-11-25-py3.13.txt +122 -0
  87. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/io_legacy_cases/reference_data/single_body/Hydrostatics.dat +1 -1
  88. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/io_legacy_cases/reference_data/single_body_list/Hydrostatics.dat +1 -1
  89. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/io_legacy_cases/reference_data/two_bodies_list/Hydrostatics_0.dat +1 -1
  90. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/io_legacy_cases/reference_data/two_bodies_list/Hydrostatics_1.dat +1 -1
  91. capytaine-3.0.0a1/pytest/mesh_files_examples/boat_200.mar.gz +0 -0
  92. capytaine-3.0.0a1/pytest/mesh_files_examples/viking_ship.stl.xz +0 -0
  93. capytaine-3.0.0a1/pytest/test_bem_engines_basic_matrix_engine.py +288 -0
  94. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/test_bem_irregular_frequencies_removal.py +79 -44
  95. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/test_bem_linear_combination_of_dofs.py +7 -4
  96. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/test_bem_no_free_surface.py +1 -1
  97. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/test_bem_potential_velocity_and_free_surface_elevation.py +10 -4
  98. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/test_bem_problems_and_results.py +8 -4
  99. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/test_bem_solver.py +42 -9
  100. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/test_bem_with_quadratures.py +11 -32
  101. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/test_bem_zero_and_infinite_freq.py +0 -1
  102. capytaine-3.0.0a1/pytest/test_bodies.py +172 -0
  103. capytaine-3.0.0a1/pytest/test_bodies_multibodies.py +216 -0
  104. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/test_consistency_with_Nemoh_2.py +44 -26
  105. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/test_forward_speed.py +16 -7
  106. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/test_green_functions_fortran_core.py +4 -4
  107. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/test_green_functions_matrix_shape.py +23 -14
  108. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/test_green_functions_table_density.py +1 -1
  109. capytaine-3.0.0a1/pytest/test_green_functions_tabulation_caching.py +40 -0
  110. capytaine-3.0.0a1/pytest/test_hydrostatics.py +605 -0
  111. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/test_io_legacy.py +2 -2
  112. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/test_io_wamit.py +4 -8
  113. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/test_io_xarray.py +2 -0
  114. capytaine-3.0.0a1/pytest/test_meshes_clipping.py +130 -0
  115. capytaine-3.0.0a1/pytest/test_meshes_initialization.py +347 -0
  116. capytaine-3.0.0a1/pytest/test_meshes_io_gdf.py +134 -0
  117. capytaine-3.0.0a1/pytest/test_meshes_io_hst.py +211 -0
  118. capytaine-3.0.0a1/pytest/test_meshes_io_mar.py +120 -0
  119. capytaine-3.0.0a1/pytest/test_meshes_io_meshio.py +109 -0
  120. capytaine-2.3/pytest/test_io_meshes_pnl.py → capytaine-3.0.0a1/pytest/test_meshes_io_pnl.py +51 -42
  121. capytaine-3.0.0a1/pytest/test_meshes_io_trimesh.py +71 -0
  122. capytaine-3.0.0a1/pytest/test_meshes_io_xarray.py +83 -0
  123. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/test_meshes_lid_generation.py +51 -29
  124. capytaine-3.0.0a1/pytest/test_meshes_predefined.py +232 -0
  125. capytaine-3.0.0a1/pytest/test_meshes_quality.py +113 -0
  126. capytaine-3.0.0a1/pytest/test_meshes_reflection_symmetry.py +212 -0
  127. capytaine-3.0.0a1/pytest/test_meshes_rotation_symmetry.py +232 -0
  128. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/test_post_pro_kochin.py +34 -17
  129. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/test_post_pro_rao.py +4 -5
  130. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/test_tool_symbolic_multiplication.py +23 -1
  131. capytaine-3.0.0a1/pytest/test_tools_block_circulant_matrices.py +204 -0
  132. capytaine-2.3/capytaine/__about__.py → capytaine-3.0.0a1/src/capytaine/__about__.py.in +7 -2
  133. {capytaine-2.3 → capytaine-3.0.0a1/src}/capytaine/__init__.py +8 -12
  134. capytaine-3.0.0a1/src/capytaine/bem/engines.py +321 -0
  135. {capytaine-2.3 → capytaine-3.0.0a1/src}/capytaine/bem/problems_and_results.py +30 -21
  136. {capytaine-2.3 → capytaine-3.0.0a1/src}/capytaine/bem/solver.py +205 -81
  137. capytaine-3.0.0a1/src/capytaine/bodies/bodies.py +630 -0
  138. capytaine-3.0.0a1/src/capytaine/bodies/dofs.py +146 -0
  139. capytaine-3.0.0a1/src/capytaine/bodies/hydrostatics.py +540 -0
  140. capytaine-3.0.0a1/src/capytaine/bodies/multibodies.py +216 -0
  141. {capytaine-2.3 → capytaine-3.0.0a1/src}/capytaine/green_functions/abstract_green_function.py +2 -2
  142. {capytaine-2.3 → capytaine-3.0.0a1/src}/capytaine/green_functions/delhommeau.py +50 -31
  143. {capytaine-2.3 → capytaine-3.0.0a1/src}/capytaine/green_functions/hams.py +19 -13
  144. {capytaine-2.3 → capytaine-3.0.0a1/src}/capytaine/io/legacy.py +3 -103
  145. {capytaine-2.3 → capytaine-3.0.0a1/src}/capytaine/io/xarray.py +15 -10
  146. capytaine-3.0.0a1/src/capytaine/meshes/__init__.py +2 -0
  147. capytaine-3.0.0a1/src/capytaine/meshes/abstract_meshes.py +375 -0
  148. capytaine-3.0.0a1/src/capytaine/meshes/clean.py +302 -0
  149. capytaine-3.0.0a1/src/capytaine/meshes/clip.py +347 -0
  150. capytaine-3.0.0a1/src/capytaine/meshes/export.py +89 -0
  151. capytaine-3.0.0a1/src/capytaine/meshes/geometry.py +259 -0
  152. capytaine-3.0.0a1/src/capytaine/meshes/io.py +433 -0
  153. capytaine-3.0.0a1/src/capytaine/meshes/meshes.py +826 -0
  154. capytaine-3.0.0a1/src/capytaine/meshes/predefined/__init__.py +6 -0
  155. capytaine-3.0.0a1/src/capytaine/meshes/predefined/cylinders.py +280 -0
  156. capytaine-3.0.0a1/src/capytaine/meshes/predefined/rectangles.py +202 -0
  157. capytaine-3.0.0a1/src/capytaine/meshes/predefined/spheres.py +55 -0
  158. capytaine-3.0.0a1/src/capytaine/meshes/quality.py +159 -0
  159. capytaine-3.0.0a1/src/capytaine/meshes/surface_integrals.py +82 -0
  160. capytaine-3.0.0a1/src/capytaine/meshes/symmetric_meshes.py +641 -0
  161. capytaine-3.0.0a1/src/capytaine/meshes/visualization.py +353 -0
  162. {capytaine-2.3 → capytaine-3.0.0a1/src}/capytaine/post_pro/free_surfaces.py +1 -4
  163. {capytaine-2.3 → capytaine-3.0.0a1/src}/capytaine/post_pro/kochin.py +10 -10
  164. capytaine-3.0.0a1/src/capytaine/tools/block_circulant_matrices.py +275 -0
  165. {capytaine-2.3 → capytaine-3.0.0a1/src}/capytaine/tools/lists_of_points.py +2 -2
  166. capytaine-3.0.0a1/src/capytaine/tools/memory_monitor.py +45 -0
  167. {capytaine-2.3 → capytaine-3.0.0a1/src}/capytaine/tools/symbolic_multiplication.py +31 -5
  168. capytaine-3.0.0a1/src/capytaine/tools/timer.py +90 -0
  169. capytaine-3.0.0a1/src/capytaine/ui/__init__.py +0 -0
  170. capytaine-2.3/.github/workflows/build_wheels.yaml +0 -64
  171. capytaine-2.3/.github/workflows/test_with_latest_dependencies.yaml +0 -32
  172. capytaine-2.3/.pre-commit-config.yaml +0 -40
  173. capytaine-2.3/Makefile +0 -32
  174. capytaine-2.3/capytaine/bodies/bodies.py +0 -1213
  175. capytaine-2.3/capytaine/bodies/dofs.py +0 -19
  176. capytaine-2.3/capytaine/bodies/predefined/__init__.py +0 -6
  177. capytaine-2.3/capytaine/bodies/predefined/cylinders.py +0 -151
  178. capytaine-2.3/capytaine/bodies/predefined/rectangles.py +0 -111
  179. capytaine-2.3/capytaine/bodies/predefined/spheres.py +0 -70
  180. capytaine-2.3/capytaine/tools/timer.py +0 -64
  181. capytaine-2.3/docs/_static/proof.css +0 -34
  182. capytaine-2.3/docs/_static/proof.js +0 -8
  183. capytaine-2.3/docs/examples/A_beginners_cookbook.rst +0 -84
  184. capytaine-2.3/docs/examples/src/A1_radiation_cylinder.py +0 -56
  185. capytaine-2.3/docs/examples/src/A2_multibody.py +0 -44
  186. capytaine-2.3/docs/examples/src/A5_convergence_study.py +0 -42
  187. capytaine-2.3/docs/examples/src/A8_export_dataset.py +0 -45
  188. capytaine-2.3/docs/user_manual/body.rst +0 -166
  189. capytaine-2.3/editable_install_requirements.txt +0 -13
  190. capytaine-2.3/noxfile.py +0 -117
  191. capytaine-2.3/pyproject.toml +0 -66
  192. capytaine-2.3/pytest/Hydrostatics_cases/sphere__hor_cyl__ver_cyl.pkl.json +0 -1
  193. capytaine-2.3/pytest/envs/2024-04-08-py3.12.txt +0 -80
  194. capytaine-2.3/pytest/envs/2024-10-22-py3.12.txt +0 -81
  195. capytaine-2.3/pytest/envs/2025-04-18-py3.12.txt +0 -93
  196. capytaine-2.3/pytest/test_bem_engines_basic_matric_engine.py +0 -75
  197. capytaine-2.3/pytest/test_bodies.py +0 -320
  198. capytaine-2.3/pytest/test_bodies_predefined.py +0 -189
  199. capytaine-2.3/pytest/test_hydrostatics.py +0 -457
  200. capytaine-2.3/pytest/test_io_meshes.py +0 -134
  201. capytaine-2.3/pytest/test_io_meshes_gdf.py +0 -146
  202. capytaine-2.3/pytest/test_io_meshes_hst.py +0 -169
  203. capytaine-2.3/pytest/test_io_meshes_mar.py +0 -53
  204. capytaine-2.3/pytest/test_meshes_collections_and_symmetries.py +0 -157
  205. capytaine-2.3/pytest/test_meshes_interface.py +0 -81
  206. capytaine-2.3/pytest/test_ui_matplotlib.py +0 -32
  207. capytaine-2.3/pytest/test_ui_vtk.py +0 -26
  208. {capytaine-2.3 → capytaine-3.0.0a1}/.gitignore +0 -0
  209. {capytaine-2.3 → capytaine-3.0.0a1}/.zenodo.json +0 -0
  210. {capytaine-2.3 → capytaine-3.0.0a1}/CONTRIBUTING.md +0 -0
  211. {capytaine-2.3 → capytaine-3.0.0a1}/LICENSE +0 -0
  212. {capytaine-2.3 → capytaine-3.0.0a1}/README.md +0 -0
  213. {capytaine-2.3 → capytaine-3.0.0a1}/code_of_conduct.md +0 -0
  214. {capytaine-2.3 → capytaine-3.0.0a1}/docs/_static/custom.css +0 -0
  215. {capytaine-2.3 → capytaine-3.0.0a1}/docs/_templates/layout.html +0 -0
  216. {capytaine-2.3 → capytaine-3.0.0a1}/docs/citing.rst +0 -0
  217. {capytaine-2.3 → capytaine-3.0.0a1}/docs/developer_manual/contributing.rst +0 -0
  218. {capytaine-2.3 → capytaine-3.0.0a1}/docs/developer_manual/index.rst +0 -0
  219. {capytaine-2.3 → capytaine-3.0.0a1}/docs/examples/B_intermediate_cookbook.rst +0 -0
  220. {capytaine-2.3 → capytaine-3.0.0a1}/docs/examples/index.rst +0 -0
  221. {capytaine-2.3 → capytaine-3.0.0a1}/docs/examples/src/B1_pressure_on_hull.py +0 -0
  222. {capytaine-2.3 → capytaine-3.0.0a1}/docs/examples/src/B2_haskind.py +0 -0
  223. {capytaine-2.3 → capytaine-3.0.0a1}/docs/examples/src/B3_free_surface_elevation.py +0 -0
  224. {capytaine-2.3 → capytaine-3.0.0a1}/docs/examples/src/B5_plot_velocity_in_domain.py +0 -0
  225. {capytaine-2.3 → capytaine-3.0.0a1}/docs/examples/src/B6_animate_free_surface.py +0 -0
  226. {capytaine-2.3 → capytaine-3.0.0a1}/docs/examples/src/B7_boat_animation.py +0 -0
  227. {capytaine-2.3 → capytaine-3.0.0a1}/docs/examples/src/B8_pressure_infinite_frequency.py +0 -0
  228. {capytaine-2.3 → capytaine-3.0.0a1}/docs/examples/src/C10_custom_linear_solver_on_gpu.py +0 -0
  229. {capytaine-2.3 → capytaine-3.0.0a1}/docs/examples/src/C8_compare_Green_functions.py +0 -0
  230. {capytaine-2.3 → capytaine-3.0.0a1}/docs/examples/src/boat_200.mar +0 -0
  231. {capytaine-2.3 → capytaine-3.0.0a1}/docs/examples/validation.rst +0 -0
  232. {capytaine-2.3 → capytaine-3.0.0a1}/docs/theory_manual/index.rst +0 -0
  233. {capytaine-2.3 → capytaine-3.0.0a1}/docs/user_manual/Nemoh.cal +0 -0
  234. {capytaine-2.3 → capytaine-3.0.0a1}/docs/user_manual/Panel_convention.svg +0 -0
  235. {capytaine-2.3 → capytaine-3.0.0a1}/docs/user_manual/export_output.rst +0 -0
  236. {capytaine-2.3 → capytaine-3.0.0a1}/docs/user_manual/quickstart.rst +0 -0
  237. {capytaine-2.3/capytaine/green_functions → capytaine-3.0.0a1/libs}/FinGreen3D/.gitignore +0 -0
  238. {capytaine-2.3/capytaine/green_functions → capytaine-3.0.0a1/libs}/FinGreen3D/FinGreen3D.f90 +0 -0
  239. {capytaine-2.3/capytaine/green_functions → capytaine-3.0.0a1/libs}/FinGreen3D/LICENSE +0 -0
  240. {capytaine-2.3/capytaine/green_functions → capytaine-3.0.0a1/libs}/FinGreen3D/Makefile +0 -0
  241. {capytaine-2.3/capytaine/green_functions → capytaine-3.0.0a1/libs}/FinGreen3D/README.md +0 -0
  242. {capytaine-2.3/capytaine/green_functions → capytaine-3.0.0a1/libs}/FinGreen3D/test_program.f90 +0 -0
  243. {capytaine-2.3/capytaine/green_functions → capytaine-3.0.0a1/libs}/LiangWuNoblesse/.gitignore +0 -0
  244. {capytaine-2.3/capytaine/green_functions → capytaine-3.0.0a1/libs}/LiangWuNoblesse/LICENSE +0 -0
  245. {capytaine-2.3/capytaine/green_functions → capytaine-3.0.0a1/libs}/LiangWuNoblesse/README.md +0 -0
  246. {capytaine-2.3/capytaine/green_functions → capytaine-3.0.0a1/libs}/LiangWuNoblesse/test_program.f90 +0 -0
  247. /capytaine-2.3/capytaine/bem/__init__.py → /capytaine-3.0.0a1/libs/fakeblocks/README.md +0 -0
  248. {capytaine-2.3/capytaine/green_functions/libs → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/__init__.py +0 -0
  249. {capytaine-2.3/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/matrices/low_rank.py +0 -0
  250. {capytaine-2.3/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/meshes/__init__.py +0 -0
  251. {capytaine-2.3/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/meshes/clipper.py +0 -0
  252. {capytaine-2.3/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/meshes/geometry.py +0 -0
  253. {capytaine-2.3/capytaine/io → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks/meshes}/mesh_loaders.py +0 -0
  254. {capytaine-2.3/capytaine/io → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks/meshes}/mesh_writers.py +0 -0
  255. {capytaine-2.3/capytaine/io → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks/meshes}/meshio.py +0 -0
  256. {capytaine-2.3/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/meshes/predefined/__init__.py +0 -0
  257. {capytaine-2.3/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/meshes/predefined/cylinders.py +0 -0
  258. {capytaine-2.3/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/meshes/predefined/rectangles.py +0 -0
  259. {capytaine-2.3/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/meshes/predefined/spheres.py +0 -0
  260. {capytaine-2.3/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/meshes/properties.py +0 -0
  261. {capytaine-2.3/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/meshes/quadratures.py +0 -0
  262. {capytaine-2.3/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/meshes/quality.py +0 -0
  263. {capytaine-2.3/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/tools/lru_cache.py +0 -0
  264. {capytaine-2.3/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/ui/vtk/__init__.py +0 -0
  265. {capytaine-2.3/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/ui/vtk/animation.py +0 -0
  266. {capytaine-2.3/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/ui/vtk/body_viewer.py +0 -0
  267. {capytaine-2.3/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/ui/vtk/helpers.py +0 -0
  268. {capytaine-2.3/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/ui/vtk/mesh_viewer.py +0 -0
  269. {capytaine-2.3/pytest → capytaine-3.0.0a1/libs/fakeblocks/test}/test_meshes_geometry.py +0 -0
  270. {capytaine-2.3/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/.gitignore +0 -0
  271. {capytaine-2.3/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/LICENSE +0 -0
  272. {capytaine-2.3/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/Makefile +0 -0
  273. {capytaine-2.3/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/README.md +0 -0
  274. {capytaine-2.3/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/benchmarks/openmp/benchmark_omp.f90 +0 -0
  275. {capytaine-2.3/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/benchmarks/openmp/display_mesh.py +0 -0
  276. {capytaine-2.3/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/benchmarks/openmp/read_output.py +0 -0
  277. {capytaine-2.3/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/benchmarks/profiling/benchmark_profiling.f90 +0 -0
  278. {capytaine-2.3/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/benchmarks/rankine/benchmark_rankine.f90 +0 -0
  279. {capytaine-2.3/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/benchmarks/tabulations/benchmark_tabulation.f90 +0 -0
  280. {capytaine-2.3/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/benchmarks/waves/benchmark_waves.f90 +0 -0
  281. {capytaine-2.3/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/examples/minimal/minimal_example.f90 +0 -0
  282. {capytaine-2.3/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/examples/minimal/minimal_example.py +0 -0
  283. {capytaine-2.3/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/src/Delhommeau_integrals.f90 +0 -0
  284. {capytaine-2.3/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/src/FinGreen3D.f90 +0 -0
  285. {capytaine-2.3/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/src/Green_Rankine.f90 +0 -0
  286. {capytaine-2.3/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/src/Green_wave.f90 +0 -0
  287. {capytaine-2.3/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/src/constants.f90 +0 -0
  288. {capytaine-2.3/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/src/float32.f90 +0 -0
  289. {capytaine-2.3/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/src/float64.f90 +0 -0
  290. {capytaine-2.3/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/src/interface.f90 +0 -0
  291. {capytaine-2.3/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/src/old_Prony_decomposition.f90 +0 -0
  292. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/Bemio_verification_cases/sphere.out +0 -0
  293. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/Nemoh_verification_cases/Cylinder/Cylinder.dat +0 -0
  294. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/Nemoh_verification_cases/Cylinder/Nemoh.cal +0 -0
  295. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/Nemoh_verification_cases/Cylinder/Nemoh_v3.cal +0 -0
  296. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/Nemoh_verification_cases/Cylinder/reference_results/DiffractionForce.tec +0 -0
  297. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/Nemoh_verification_cases/Cylinder/reference_results/ExcitationForce.tec +0 -0
  298. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/Nemoh_verification_cases/Cylinder/reference_results/RadiationCoefficients.tec +0 -0
  299. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/Nemoh_verification_cases/NonSymmetrical/Nemoh.cal +0 -0
  300. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/Nemoh_verification_cases/NonSymmetrical/Nemoh_v3.cal +0 -0
  301. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/Nemoh_verification_cases/NonSymmetrical/NonSymmetrical.dat +0 -0
  302. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/Nemoh_verification_cases/NonSymmetrical/reference_results/DiffractionForce.tec +0 -0
  303. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/Nemoh_verification_cases/NonSymmetrical/reference_results/ExcitationForce.tec +0 -0
  304. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/Nemoh_verification_cases/NonSymmetrical/reference_results/RadiationCoefficients.tec +0 -0
  305. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/io_legacy_cases/reference_data/single_body/KH.dat +0 -0
  306. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/io_legacy_cases/reference_data/single_body_list/KH.dat +0 -0
  307. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/io_legacy_cases/reference_data/two_bodies_list/KH_0.dat +0 -0
  308. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/io_legacy_cases/reference_data/two_bodies_list/KH_1.dat +0 -0
  309. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/mesh_files_examples/barge.med +0 -0
  310. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/mesh_files_examples/cylinder2.msh +0 -0
  311. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/mesh_files_examples/cylinder4.msh +0 -0
  312. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/test_bem_airy_waves.py +0 -0
  313. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/test_consistency_with_HAMS.py +0 -0
  314. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/test_consistency_with_analytical_solutions.py +0 -0
  315. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/test_green_functions_finite_depth.py +0 -0
  316. {capytaine-2.3 → capytaine-3.0.0a1}/pytest/test_io_bemio.py +0 -0
  317. {capytaine-2.3/capytaine/io → capytaine-3.0.0a1/src/capytaine/bem}/__init__.py +0 -0
  318. {capytaine-2.3 → capytaine-3.0.0a1/src}/capytaine/bem/airy_waves.py +0 -0
  319. {capytaine-2.3 → capytaine-3.0.0a1/src}/capytaine/bodies/__init__.py +0 -0
  320. {capytaine-2.3 → capytaine-3.0.0a1/src}/capytaine/green_functions/__init__.py +0 -0
  321. {capytaine-2.3/capytaine/tools → capytaine-3.0.0a1/src/capytaine/io}/__init__.py +0 -0
  322. {capytaine-2.3 → capytaine-3.0.0a1/src}/capytaine/io/bemio.py +0 -0
  323. {capytaine-2.3 → capytaine-3.0.0a1/src}/capytaine/io/wamit.py +0 -0
  324. {capytaine-2.3 → capytaine-3.0.0a1/src}/capytaine/post_pro/__init__.py +0 -0
  325. {capytaine-2.3 → capytaine-3.0.0a1/src}/capytaine/post_pro/impedance.py +0 -0
  326. {capytaine-2.3 → capytaine-3.0.0a1/src}/capytaine/post_pro/rao.py +0 -0
  327. {capytaine-2.3/capytaine/ui → capytaine-3.0.0a1/src/capytaine/tools}/__init__.py +0 -0
  328. {capytaine-2.3 → capytaine-3.0.0a1/src}/capytaine/tools/cache_on_disk.py +0 -0
  329. {capytaine-2.3 → capytaine-3.0.0a1/src}/capytaine/tools/deprecation_handling.py +0 -0
  330. {capytaine-2.3 → capytaine-3.0.0a1/src}/capytaine/tools/optional_imports.py +0 -0
  331. {capytaine-2.3 → capytaine-3.0.0a1/src}/capytaine/tools/prony_decomposition.py +0 -0
  332. {capytaine-2.3 → capytaine-3.0.0a1/src}/capytaine/ui/cli.py +0 -0
  333. {capytaine-2.3 → capytaine-3.0.0a1/src}/capytaine/ui/rich.py +0 -0
@@ -2,8 +2,6 @@ name: Build and deploy documentation
2
2
 
3
3
  on:
4
4
  push:
5
- branches:
6
- - master
7
5
  paths:
8
6
  - 'docs/**'
9
7
 
@@ -31,26 +29,26 @@ jobs:
31
29
  - name: Checkout
32
30
  uses: actions/checkout@v4
33
31
 
34
- - uses: actions/setup-python@v5
35
- with:
36
- python-version: '3.12'
32
+ - name: Set up Just
33
+ run: sudo apt install -y just
37
34
 
38
- - name: Install Capytaine and other dependencies
39
- run: pip install .[optional,docs]
35
+ - name: Set up UV
36
+ uses: astral-sh/setup-uv@v5
37
+ with:
38
+ enable-cache: true
40
39
 
41
40
  - name: Build documentation
42
- run: cd docs && make
41
+ run: just build_docs
43
42
 
44
43
  - name: Deploy pages
45
44
  if: |
46
- github.repository_owner == 'capytaine' &&
47
- github.ref == 'refs/heads/master'
48
- # Only deploy the version merged into the master branch of capytaine/capytaine
45
+ github.repository_owner == 'capytaine'
46
+ # Only deploy the version of capytaine/capytaine
49
47
  uses: JamesIves/github-pages-deploy-action@releases/v4
50
48
  with:
51
49
  folder: ./docs/_build/html/
52
50
  repository-name: capytaine/capytaine.github.io
53
51
  branch: main
54
- target-folder: master/
52
+ target-folder: ${{ github.ref_name }}/
55
53
  clean: true
56
54
  token: ${{ secrets.TOKEN_PAGES }}
@@ -0,0 +1,103 @@
1
+ name: Build wheels
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ push:
6
+ tags:
7
+ - v*
8
+ schedule:
9
+ - cron: '6 6 6/16 * *' # On the 6th and 22nd of each month at 6:06
10
+
11
+
12
+ jobs:
13
+ "build_wheels_on_windows":
14
+ name: Build wheels on Windows
15
+ runs-on: windows-2025
16
+
17
+ steps:
18
+ - uses: actions/checkout@v6
19
+
20
+ - uses: fortran-lang/setup-fortran@v1
21
+ with:
22
+ compiler: 'gcc'
23
+ version: '13'
24
+
25
+ - name: Build wheels
26
+ uses: pypa/cibuildwheel@v3.3.0
27
+ env:
28
+ CIBW_SKIP: "*win32* cp314t*"
29
+ CIBW_BEFORE_BUILD_WINDOWS: pip install delvewheel
30
+ CIBW_REPAIR_WHEEL_COMMAND_WINDOWS: "delvewheel show {wheel} && delvewheel repair -w {dest_dir} {wheel} --no-mangle-all"
31
+ # Package the DLL dependencies in the wheel for windows (done by default for the other platforms).
32
+ # delvewheel cannot mangle the libraries, stripping does not work.
33
+
34
+ - uses: actions/upload-artifact@v6
35
+ with:
36
+ name: wheels-windows
37
+ path: ./wheelhouse/*.whl
38
+
39
+ "build_wheels_on_ubuntu":
40
+ name: Build wheels on Ubuntu
41
+ runs-on: ubuntu-22.04
42
+
43
+ steps:
44
+ - uses: actions/checkout@v6
45
+
46
+ # No need to setup fortran, it won't be used by CIbuildwheel which is
47
+ # using a Manylinux container
48
+
49
+ - name: Build wheels on Ubuntu
50
+ uses: pypa/cibuildwheel@v3.3.0
51
+ env:
52
+ CIBW_SKIP: "*i686* *musllinux*"
53
+
54
+ - uses: actions/upload-artifact@v6
55
+ with:
56
+ name: wheels-ubuntu
57
+ path: ./wheelhouse/*.whl
58
+
59
+
60
+ "build_wheels_on_macos_intel":
61
+ name: Build wheels on MacOS Intel
62
+ runs-on: macos-15-intel
63
+
64
+ steps:
65
+ - uses: actions/checkout@v6
66
+
67
+ - uses: fortran-lang/setup-fortran@v1
68
+ with:
69
+ compiler: 'gcc'
70
+ version: '13'
71
+
72
+ - name: Build wheels
73
+ uses: pypa/cibuildwheel@v3.3.0
74
+ env:
75
+ CIBW_ENVIRONMENT: MACOSX_DEPLOYMENT_TARGET=15.0
76
+
77
+ - uses: actions/upload-artifact@v6
78
+ with:
79
+ name: wheels-macos-intel
80
+ path: ./wheelhouse/*.whl
81
+
82
+
83
+ "build_wheels_on_macos_arm":
84
+ name: Build wheels on MacOS ARM
85
+ runs-on: macos-14
86
+
87
+ steps:
88
+ - uses: actions/checkout@v6
89
+
90
+ - uses: fortran-lang/setup-fortran@v1
91
+ with:
92
+ compiler: 'gcc'
93
+ version: '13'
94
+
95
+ - name: Build wheels
96
+ uses: pypa/cibuildwheel@v3.3.0
97
+ env:
98
+ CIBW_ENVIRONMENT: MACOSX_DEPLOYMENT_TARGET=14.0
99
+
100
+ - uses: actions/upload-artifact@v6
101
+ with:
102
+ name: wheels-macos-arm
103
+ path: ./wheelhouse/*.whl
@@ -16,7 +16,6 @@ on:
16
16
 
17
17
  env:
18
18
  FORCE_COLOR: 3
19
- # Colors for nox
20
19
 
21
20
  # The following block is meant to cancel the workflow if a newer commit is pushed on the pull request
22
21
  # From https://stackoverflow.com/questions/66335225/how-to-cancel-previous-runs-in-the-pr-when-you-push-new-commitsupdate-the-curre
@@ -25,28 +24,35 @@ concurrency:
25
24
  cancel-in-progress: true
26
25
 
27
26
  jobs:
28
- build_and_test:
27
+ "build_and_test":
29
28
 
30
29
  runs-on: ubuntu-latest
31
30
 
32
31
  strategy:
33
32
  matrix:
34
- python-version: ['3.8', '3.12']
33
+ python-version: ['38', '313']
35
34
 
36
35
  steps:
37
36
 
38
37
  - name: Checkout repository
39
38
  uses: actions/checkout@v4
40
39
 
40
+ # - name: Set up Just
41
+ # uses: extractions/setup-just@v3
42
+ # with:
43
+ # just-version: 1.40
44
+ - name: Set up Just
45
+ run: sudo apt install -y just
46
+
41
47
  - name: Set up UV
42
48
  uses: astral-sh/setup-uv@v5
43
49
  with:
44
50
  enable-cache: true
45
51
 
46
- - name: Run nox session
47
- run: uvx nox --force-python ${{ matrix.python-version }} -s build_and_test_on_locked_env
52
+ - name: Run tests
53
+ run: just test_in_py${{ matrix.python-version }}_reference_env
48
54
 
49
- compile_fortran:
55
+ "compile_fortran":
50
56
 
51
57
  runs-on: ubuntu-latest
52
58
 
@@ -66,11 +72,11 @@ jobs:
66
72
  # version: '13'
67
73
 
68
74
  - name: Compile and run example
69
- working-directory: capytaine/green_functions/libDelhommeau/
75
+ working-directory: libs/libDelhommeau/
70
76
  run: make example && examples/minimal/minimal_example.bin
71
77
  # Soundness of the results is not tested, only that the compiling and
72
78
  # execution are succeeding.
73
79
 
74
80
  - name: Run simple benchmark
75
- working-directory: capytaine/green_functions/libDelhommeau/
81
+ working-directory: libs/libDelhommeau/
76
82
  run: make run_bench_rankine && make run_bench_waves
@@ -0,0 +1,48 @@
1
+ name: Build and test using latest available dependencies
2
+
3
+ on:
4
+ workflow_dispatch:
5
+ schedule:
6
+ - cron: '5 5 5/15 * *' # On the 5th and 20th of each month at 5:05
7
+
8
+ env:
9
+ FORCE_COLOR: 3
10
+
11
+ jobs:
12
+ "test_in_latest_env":
13
+
14
+ runs-on: ubuntu-latest
15
+
16
+ steps:
17
+ - name: Checkout repository
18
+ uses: actions/checkout@v4
19
+
20
+ - name: Set up UV
21
+ uses: astral-sh/setup-uv@v5
22
+ with:
23
+ enable-cache: true
24
+
25
+ - name: Set up Just
26
+ run: sudo apt install -y just
27
+
28
+ - name: Run tests
29
+ run: just test_in_latest_env
30
+
31
+ "test_in_nightly_env":
32
+
33
+ runs-on: ubuntu-latest
34
+
35
+ steps:
36
+ - name: Checkout repository
37
+ uses: actions/checkout@v4
38
+
39
+ - name: Set up UV
40
+ uses: astral-sh/setup-uv@v5
41
+ with:
42
+ enable-cache: true
43
+
44
+ - name: Set up Just
45
+ run: sudo apt install -y just
46
+
47
+ - name: Run tests
48
+ run: just test_in_nightly_env
@@ -0,0 +1,25 @@
1
+ exclude: "pytest/.*/.*"
2
+ repos:
3
+ - repo: https://github.com/pre-commit/pre-commit-hooks
4
+ rev: "v6.0.0"
5
+ hooks:
6
+ - id: check-added-large-files # Prevent giant files from being committed
7
+ - id: check-ast # Simply check whether files parse as valid python
8
+ - id: check-case-conflict # Check for filenames that would conflict on a case-insensitive filesystem
9
+ - id: check-illegal-windows-names # Check for filenames that could not exist on Windows
10
+ - id: check-merge-conflict # Check for files that contain merge conflict strings
11
+ - id: check-symlinks # Checks for symlinks which do not point to anything
12
+ - id: check-toml # Attempts to load all TOML files to verify syntax
13
+ - id: check-yaml # Attempts to load all YAML files to verify syntax
14
+ - id: debug-statements # Check for calls to breakpoint()
15
+ - id: end-of-file-fixer # Makes sure files end in a newline and only a newline
16
+ - id: no-commit-to-branch # Disallow commiting directly to "master"
17
+ - id: mixed-line-ending # Check the kind of line ending (LF or CRLF)
18
+ - id: trailing-whitespace # Trim trailing whitespaces
19
+
20
+ - repo: https://github.com/codespell-project/codespell
21
+ rev: "v2.4.1"
22
+ hooks:
23
+ - id: codespell
24
+ additional_dependencies:
25
+ - tomli
@@ -0,0 +1,189 @@
1
+ set shell := ["bash", "-c"]
2
+ set windows-shell := ["powershell.exe", "-c"]
3
+
4
+ default:
5
+ just --list
6
+
7
+ # Run the recipe below in a clean virtual environment to install Capytaine in
8
+ # editable mode.
9
+ editable_install:
10
+ uv pip install -r pyproject.toml \
11
+ --extra optional \
12
+ --group editable_install \
13
+ --group dev
14
+ uv pip install --no-build-isolation --editable .
15
+
16
+ # Define the temporary directory differently based on OS
17
+ TEMP_DIR := if os_family() == 'windows' {
18
+ `$temp = Join-Path $env:TEMP ('capytainedev-' + [System.IO.Path]::GetRandomFileName()); New-Item -ItemType Directory -Path $temp -Force | Out-Null; Write-Output $temp`
19
+ } else {
20
+ `mktemp --directory --tmpdir capytainedev-XXXXX`
21
+ }
22
+
23
+ ENV := "MPLBACKEND=pdf CAPYTAINE_PROGRESS_BAR=False CAPYTAINE_CACHE_DIR=" + TEMP_DIR + "/cache/"
24
+
25
+ TEST_DIR := justfile_directory() / 'pytest'
26
+ NEMOH_CASES := TEST_DIR / 'Nemoh_verification_cases' / 'Cylinder'
27
+
28
+ EXAMPLES_DIR := justfile_directory() / 'docs' / 'examples' / 'src'
29
+ EXAMPLES_FILES := ' \
30
+ A1_single_body_hydrodynamics.py \
31
+ A2_multibody.py \
32
+ A3_finite_depth_flap.py \
33
+ A4_forward_speed_on_vertical_cylinder.py \
34
+ A7_custom_dofs.py \
35
+ A8_convergence_study.py \
36
+ A10_elasticity_of_beam.py \
37
+ A11_parametric_study_depth.py \
38
+ B1_pressure_on_hull.py \
39
+ B2_haskind.py \
40
+ B3_free_surface_elevation.py \
41
+ B4_kochin.py \
42
+ B5_plot_velocity_in_domain.py \
43
+ B8_pressure_infinite_frequency.py \
44
+ C5_plot_influence_matrix.py \
45
+ C8_compare_Green_functions.py \
46
+ C9_custom_Green_function.py \
47
+ '
48
+
49
+ ## Reason for skipping some example files:
50
+ # A5_benchmark_plane_symmetries.py \
51
+ # A6_benchmark_axisymmetric_mesh.py \
52
+ # A9_test_irregular_frequency_removal.py \ # Slow
53
+ # B6_animate_free_surface.py \ # Requires VTK
54
+ # B7_boat_animation.py \ # Requires VTK
55
+ # C6_axisymmetric_buoy.py \ # Requires VTK
56
+ # C10_custom_linear_solver_on_gpu.py \ # Requires torch
57
+
58
+ # Run the test suite and the example files assuming a virtual environment with
59
+ # Capytaine installed has been activated
60
+ [unix]
61
+ _test:
62
+ #!/usr/bin/env bash
63
+ set -euxo pipefail
64
+ uv pip list | grep -Ei "numpy|xarray|capytaine" || true
65
+ cd {{TEMP_DIR}}
66
+ export {{ENV}}
67
+ python -c "import capytaine; print(capytaine.__version__)"
68
+ python -m pytest {{TEST_DIR}}
69
+ capytaine --help
70
+ capytaine {{NEMOH_CASES}}/Nemoh.cal
71
+ capytaine {{NEMOH_CASES}}/Nemoh_v3.cal
72
+ set +x # Stop displaying commands
73
+ for f in {{EXAMPLES_FILES}}; do
74
+ echo -e "\n---> Running $f";
75
+ python {{EXAMPLES_DIR}}/$f;
76
+ done
77
+
78
+ # Simplified version of the above, working on Windows
79
+ [windows]
80
+ _test:
81
+ #! powershell
82
+ cd {{TEMP_DIR}}
83
+ python -c "import capytaine; print(capytaine.__version__)"
84
+ python -m pytest {{TEST_DIR}}
85
+ capytaine --help
86
+ capytaine {{NEMOH_CASES}}/Nemoh.cal
87
+ capytaine {{NEMOH_CASES}}/Nemoh_v3.cal
88
+
89
+ _install_and_test:
90
+ uv pip install --no-deps --no-build-isolation .
91
+ just _test
92
+
93
+
94
+ # In the recipes below, we have
95
+ #
96
+ # --no-editable --with "capytaine @ ." -- just _test
97
+ #
98
+ # or
99
+ #
100
+ # --no-editable -- just _install_and_test
101
+ #
102
+ # because the default behavior of uv is to install the local project in
103
+ # editable mode, but we don't want that because of an incompatibility with
104
+ # meson-python (https://github.com/astral-sh/uv/issues/10214)
105
+ #
106
+ # besides, we have --no-default-groups because uv loads by default the `dev`
107
+ # dependency-group from pyproject.toml, but we don't need it here and it can
108
+ # actually cause issue in CI.
109
+
110
+ test_in_latest_env:
111
+ uv run \
112
+ --isolated --no-default-groups \
113
+ --no-editable --with "capytaine[optional] @ ." \
114
+ --group test \
115
+ -- \
116
+ just _test
117
+
118
+ # In the recipe below,
119
+ # "--index-strategy unsafe-best-match" means uv should not ignore wheels
120
+ # from PyPI during universal resolution
121
+
122
+ test_in_nightly_env:
123
+ uv run \
124
+ --isolated --no-default-groups \
125
+ --python 3.14 \
126
+ --pre --extra-index-url https://pypi.anaconda.org/scientific-python-nightly-wheels/simple \
127
+ --index-strategy unsafe-best-match \
128
+ --no-editable --with "capytaine @ ." \
129
+ --group test \
130
+ -- \
131
+ just _test
132
+
133
+
134
+ test_in_py38_reference_env:
135
+ uv run \
136
+ --isolated --no-default-groups \
137
+ --python 3.8 \
138
+ --no-editable \
139
+ --with-requirements {{TEST_DIR}}/envs/2023-08-01-py3.8.txt \
140
+ -- \
141
+ just _install_and_test
142
+
143
+ test_in_py313_reference_env:
144
+ uv run \
145
+ --isolated --no-default-groups \
146
+ --python 3.13 \
147
+ --no-editable \
148
+ --with-requirements {{TEST_DIR}}/envs/2025-11-25-py3.13.txt \
149
+ -- \
150
+ just _install_and_test
151
+
152
+ # How the requirements files from the above recipes where generated.
153
+ create_test_env_file python="3.8" date="2023-08-01":
154
+ uv pip compile \
155
+ pyproject.toml \
156
+ --python-version {{python}} \
157
+ --group test \
158
+ --group editable_install \
159
+ --extra optional \
160
+ --exclude-newer {{date}} \
161
+ -o {{TEST_DIR}}/envs/{{date}}-py{{python}}.txt
162
+
163
+
164
+ # Compile the Fortran code without parallelism for easier reading of the errors.
165
+ test_fortran_compilation:
166
+ # It is assumed that meson and ninja are already installed (e.g. with editable_install).
167
+ meson setup --wipe {{TEMP_DIR}}/build && meson compile -C {{TEMP_DIR}}/build -j 1
168
+
169
+
170
+ build_docs:
171
+ uv run \
172
+ --isolated \
173
+ --no-editable --with "capytaine[optional] @ ." \
174
+ --group docs \
175
+ -- \
176
+ make --directory="./docs/"
177
+
178
+
179
+ clean:
180
+ rm -f src/capytaine/green_functions/libs/*.so
181
+ rm -rf build/
182
+ rm -rf dist/
183
+ rm -rf src/capytaine.egg-info/
184
+ rm -rf docs/_build
185
+ rm -rf .pytest_cache/
186
+ rm -rf .venv/
187
+ rm -rf __pycache__ */__pycache__ */*/__pycache__ */*/*/__pycache__
188
+ rm -rf $HOME/.cache/capytaine/*
189
+ rm -rf /tmp/capytainedev-*/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: capytaine
3
- Version: 2.3
3
+ Version: 3.0.0a1
4
4
  Summary: Python BEM solver for linear potential flow, based on Nemoh
5
5
  Author-Email: Matthieu Ancellin <matthieu.ancellin@mews-labs.com>
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -689,26 +689,20 @@ Requires-Python: >=3.8
689
689
  Requires-Dist: numpy>=1.20; python_version >= "3.9"
690
690
  Requires-Dist: numpy>=1.24; python_version == "3.8"
691
691
  Requires-Dist: scipy
692
- Requires-Dist: pandas>=1.3
692
+ Requires-Dist: pandas<3,>=1.3
693
693
  Requires-Dist: xarray
694
694
  Requires-Dist: rich
695
695
  Provides-Extra: optional
696
696
  Requires-Dist: matplotlib; extra == "optional"
697
+ Requires-Dist: vtk; extra == "optional"
698
+ Requires-Dist: pyvista; extra == "optional"
699
+ Requires-Dist: psutil; extra == "optional"
697
700
  Requires-Dist: joblib>=1.3; extra == "optional"
701
+ Requires-Dist: threadpoolctl; extra == "optional"
698
702
  Requires-Dist: meshio; extra == "optional"
703
+ Requires-Dist: trimesh; extra == "optional"
704
+ Requires-Dist: h5py; extra == "optional"
699
705
  Requires-Dist: netcdf4; extra == "optional"
700
- Requires-Dist: vtk; extra == "optional"
701
- Provides-Extra: more-optional
702
- Requires-Dist: pygmsh; extra == "more-optional"
703
- Requires-Dist: gmsh; extra == "more-optional"
704
- Provides-Extra: test
705
- Requires-Dist: pytest; extra == "test"
706
- Requires-Dist: capytaine[optional]; extra == "test"
707
- Provides-Extra: docs
708
- Requires-Dist: sphinx; extra == "docs"
709
- Requires-Dist: sphinx-toolbox; extra == "docs"
710
- Requires-Dist: sphinxcontrib-proof; extra == "docs"
711
- Requires-Dist: sphinxcontrib-mermaid; extra == "docs"
712
706
  Description-Content-Type: text/markdown
713
707
 
714
708
  # Capytaine: a linear potential flow BEM solver with Python.
@@ -28,4 +28,4 @@ test: show
28
28
 
29
29
  autodoc:
30
30
  rm -rf developer_manual/api/capytaine*.rst
31
- sphinx-apidoc -o developer_manual/api/ ../capytaine --separate --doc-project "API documentation"
31
+ sphinx-apidoc -o developer_manual/api/ ../src/capytaine --separate --doc-project "API documentation"