capytaine 2.3.1__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 (325) hide show
  1. {capytaine-2.3.1 → capytaine-3.0.0a1}/.github/workflows/build_docs.yml +3 -6
  2. {capytaine-2.3.1 → capytaine-3.0.0a1}/.github/workflows/build_wheels.yaml +16 -20
  3. {capytaine-2.3.1 → capytaine-3.0.0a1}/.github/workflows/test_new_commits.yaml +3 -3
  4. capytaine-3.0.0a1/.pre-commit-config.yaml +25 -0
  5. {capytaine-2.3.1 → capytaine-3.0.0a1}/Justfile +74 -39
  6. {capytaine-2.3.1 → capytaine-3.0.0a1}/PKG-INFO +7 -2
  7. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/changelog.rst +230 -0
  8. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/conf.py +1 -1
  9. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/developer_manual/installation.rst +33 -32
  10. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/developer_manual/making_a_release.rst +4 -2
  11. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/developer_manual/overview.rst +0 -18
  12. capytaine-3.0.0a1/docs/examples/A_beginners_cookbook.rst +102 -0
  13. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/examples/C_advanced_cookbook.rst +0 -15
  14. capytaine-2.3.1/docs/examples/src/A7_elasticity_of_beam.py → capytaine-3.0.0a1/docs/examples/src/A10_elasticity_of_beam.py +41 -21
  15. capytaine-2.3.1/docs/examples/src/A3_finite_depth_cylinder.py → capytaine-3.0.0a1/docs/examples/src/A11_parametric_study_depth.py +11 -4
  16. capytaine-3.0.0a1/docs/examples/src/A1_single_body_hydrodynamics.py +66 -0
  17. capytaine-3.0.0a1/docs/examples/src/A2_multibody.py +68 -0
  18. capytaine-3.0.0a1/docs/examples/src/A3_finite_depth_flap.py +67 -0
  19. capytaine-2.3.1/docs/examples/src/V_Malenica_forward_speed.py → capytaine-3.0.0a1/docs/examples/src/A4_forward_speed_on_vertical_cylinder.py +43 -24
  20. capytaine-3.0.0a1/docs/examples/src/A5_benchmark_plane_symmetries.py +57 -0
  21. capytaine-3.0.0a1/docs/examples/src/A6_benchmark_axisymmetric_mesh.py +64 -0
  22. capytaine-2.3.1/docs/examples/src/A4_custom_dofs.py → capytaine-3.0.0a1/docs/examples/src/A7_custom_dofs.py +12 -17
  23. capytaine-3.0.0a1/docs/examples/src/A8_convergence_study.py +58 -0
  24. capytaine-2.3.1/docs/examples/src/A6_irregular_frequency_removal.py → capytaine-3.0.0a1/docs/examples/src/A9_test_irregular_frequency_removal.py +27 -25
  25. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/examples/src/B4_kochin.py +1 -1
  26. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/examples/src/C5_plot_influence_matrix.py +1 -2
  27. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/examples/src/C9_custom_Green_function.py +10 -3
  28. capytaine-3.0.0a1/docs/examples/src/Cy_symmetric_matrix_shapes.py +69 -0
  29. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/examples/src/V_hydrostatics.py +9 -8
  30. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/examples/src/quickstart.py +2 -3
  31. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/features.rst +23 -23
  32. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/index.rst +1 -1
  33. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/theory_manual/bibliography.rst +4 -0
  34. capytaine-3.0.0a1/docs/user_manual/body.rst +157 -0
  35. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/user_manual/conventions.rst +20 -2
  36. capytaine-3.0.0a1/docs/user_manual/fixing_issues.rst +66 -0
  37. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/user_manual/hydrostatics.rst +60 -47
  38. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/user_manual/index.rst +3 -0
  39. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/user_manual/installation.rst +6 -2
  40. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/user_manual/mesh.rst +113 -166
  41. capytaine-3.0.0a1/docs/user_manual/multibody.rst +37 -0
  42. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/user_manual/post_pro.rst +23 -7
  43. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/user_manual/resolution.rst +139 -107
  44. capytaine-3.0.0a1/docs/user_manual/symmetries.rst +119 -0
  45. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/user_manual/tutorial.rst +1 -2
  46. {capytaine-2.3.1/src/capytaine/green_functions/libDelhommeau/src → capytaine-3.0.0a1/libs/LiangWuNoblesse}/LiangWuNoblesseWaveTerm.f90 +112 -112
  47. capytaine-3.0.0a1/libs/fakeblocks/LICENSE +674 -0
  48. {capytaine-2.3.1/docs/examples/src → capytaine-3.0.0a1/libs/fakeblocks/examples}/C6_axisymmetric_buoy.py +2 -1
  49. {capytaine-2.3.1/docs/examples/src → capytaine-3.0.0a1/libs/fakeblocks/examples}/C7_h_matrices_with_preconditionner.py +6 -4
  50. capytaine-3.0.0a1/libs/fakeblocks/pyproject.toml +25 -0
  51. capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks/bodies.py +158 -0
  52. {capytaine-2.3.1/src/capytaine/bem → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/engines.py +146 -150
  53. capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks/io.py +105 -0
  54. {capytaine-2.3.1/src/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/matrices/__init__.py +5 -5
  55. {capytaine-2.3.1/src/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/matrices/block.py +2 -2
  56. {capytaine-2.3.1/src/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/matrices/block_toeplitz.py +3 -3
  57. {capytaine-2.3.1/src/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/matrices/builders.py +3 -3
  58. {capytaine-2.3.1/src/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/matrices/linear_solvers.py +2 -83
  59. {capytaine-2.3.1/src/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/meshes/surface_integrals.py +20 -13
  60. {capytaine-2.3.1/src/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/meshes/symmetric.py +11 -16
  61. capytaine-3.0.0a1/libs/fakeblocks/test/test_bodies.py +29 -0
  62. capytaine-2.3.1/pytest/test_bem_engines_hierarchical_toeplitz_matrices.py → capytaine-3.0.0a1/libs/fakeblocks/test/test_hierarchical_toeplitz_matrices.py +12 -10
  63. {capytaine-2.3.1/pytest → capytaine-3.0.0a1/libs/fakeblocks/test}/test_linear_solvers.py +3 -4
  64. {capytaine-2.3.1/pytest → capytaine-3.0.0a1/libs/fakeblocks/test}/test_matrices.py +4 -4
  65. {capytaine-2.3.1/pytest → capytaine-3.0.0a1/libs/fakeblocks/test}/test_meshes.py +28 -26
  66. {capytaine-2.3.1/pytest → capytaine-3.0.0a1/libs/fakeblocks/test}/test_meshes_clipping.py +26 -23
  67. {capytaine-2.3.1/pytest → capytaine-3.0.0a1/libs/fakeblocks/test}/test_meshes_collections_and_symmetries.py +57 -53
  68. {capytaine-2.3.1/pytest → capytaine-3.0.0a1/libs/fakeblocks/test}/test_meshes_interface.py +35 -33
  69. {capytaine-2.3.1/pytest → capytaine-3.0.0a1/libs/fakeblocks/test}/test_meshes_predefined.py +30 -26
  70. {capytaine-2.3.1/pytest → capytaine-3.0.0a1/libs/fakeblocks/test}/test_tool_lru_cache.py +1 -1
  71. {capytaine-2.3.1/src/capytaine/green_functions/LiangWuNoblesse → capytaine-3.0.0a1/libs/libDelhommeau/src}/LiangWuNoblesseWaveTerm.f90 +112 -112
  72. {capytaine-2.3.1/src/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/src/matrices.f90 +8 -5
  73. {capytaine-2.3.1 → capytaine-3.0.0a1}/meson.build +30 -15
  74. {capytaine-2.3.1 → capytaine-3.0.0a1}/pyproject.toml +20 -7
  75. capytaine-3.0.0a1/pytest/Hydrostatics_cases/sphere__hor_cyl__ver_cyl.pkl.json +1 -0
  76. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/envs/2023-08-01-py3.8.txt +34 -9
  77. capytaine-3.0.0a1/pytest/envs/2025-11-25-py3.13.txt +122 -0
  78. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/io_legacy_cases/reference_data/single_body/Hydrostatics.dat +1 -1
  79. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/io_legacy_cases/reference_data/single_body_list/Hydrostatics.dat +1 -1
  80. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/io_legacy_cases/reference_data/two_bodies_list/Hydrostatics_0.dat +1 -1
  81. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/io_legacy_cases/reference_data/two_bodies_list/Hydrostatics_1.dat +1 -1
  82. capytaine-3.0.0a1/pytest/mesh_files_examples/boat_200.mar.gz +0 -0
  83. capytaine-3.0.0a1/pytest/mesh_files_examples/viking_ship.stl.xz +0 -0
  84. capytaine-3.0.0a1/pytest/test_bem_engines_basic_matrix_engine.py +288 -0
  85. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/test_bem_irregular_frequencies_removal.py +71 -43
  86. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/test_bem_linear_combination_of_dofs.py +7 -4
  87. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/test_bem_no_free_surface.py +1 -1
  88. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/test_bem_potential_velocity_and_free_surface_elevation.py +10 -4
  89. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/test_bem_problems_and_results.py +8 -4
  90. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/test_bem_solver.py +42 -9
  91. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/test_bem_with_quadratures.py +11 -32
  92. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/test_bem_zero_and_infinite_freq.py +0 -1
  93. capytaine-3.0.0a1/pytest/test_bodies.py +172 -0
  94. capytaine-3.0.0a1/pytest/test_bodies_multibodies.py +216 -0
  95. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/test_consistency_with_Nemoh_2.py +44 -26
  96. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/test_forward_speed.py +15 -7
  97. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/test_green_functions_fortran_core.py +4 -4
  98. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/test_green_functions_matrix_shape.py +23 -14
  99. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/test_green_functions_table_density.py +1 -1
  100. capytaine-3.0.0a1/pytest/test_hydrostatics.py +605 -0
  101. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/test_io_legacy.py +2 -2
  102. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/test_io_wamit.py +4 -8
  103. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/test_io_xarray.py +2 -0
  104. capytaine-3.0.0a1/pytest/test_meshes_clipping.py +130 -0
  105. capytaine-3.0.0a1/pytest/test_meshes_initialization.py +347 -0
  106. capytaine-3.0.0a1/pytest/test_meshes_io_gdf.py +134 -0
  107. capytaine-3.0.0a1/pytest/test_meshes_io_hst.py +211 -0
  108. capytaine-3.0.0a1/pytest/test_meshes_io_mar.py +120 -0
  109. capytaine-3.0.0a1/pytest/test_meshes_io_meshio.py +109 -0
  110. capytaine-2.3.1/pytest/test_io_meshes_pnl.py → capytaine-3.0.0a1/pytest/test_meshes_io_pnl.py +51 -42
  111. capytaine-3.0.0a1/pytest/test_meshes_io_trimesh.py +71 -0
  112. capytaine-3.0.0a1/pytest/test_meshes_io_xarray.py +83 -0
  113. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/test_meshes_lid_generation.py +51 -29
  114. capytaine-3.0.0a1/pytest/test_meshes_predefined.py +232 -0
  115. capytaine-3.0.0a1/pytest/test_meshes_quality.py +113 -0
  116. capytaine-3.0.0a1/pytest/test_meshes_reflection_symmetry.py +212 -0
  117. capytaine-3.0.0a1/pytest/test_meshes_rotation_symmetry.py +232 -0
  118. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/test_post_pro_kochin.py +34 -17
  119. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/test_post_pro_rao.py +4 -5
  120. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/test_tool_symbolic_multiplication.py +13 -0
  121. capytaine-3.0.0a1/pytest/test_tools_block_circulant_matrices.py +204 -0
  122. capytaine-2.3.1/src/capytaine/__about__.py → capytaine-3.0.0a1/src/capytaine/__about__.py.in +7 -2
  123. {capytaine-2.3.1 → capytaine-3.0.0a1}/src/capytaine/__init__.py +8 -12
  124. capytaine-3.0.0a1/src/capytaine/bem/engines.py +321 -0
  125. {capytaine-2.3.1 → capytaine-3.0.0a1}/src/capytaine/bem/problems_and_results.py +14 -13
  126. {capytaine-2.3.1 → capytaine-3.0.0a1}/src/capytaine/bem/solver.py +204 -80
  127. capytaine-3.0.0a1/src/capytaine/bodies/bodies.py +630 -0
  128. capytaine-3.0.0a1/src/capytaine/bodies/dofs.py +146 -0
  129. capytaine-3.0.0a1/src/capytaine/bodies/hydrostatics.py +540 -0
  130. capytaine-3.0.0a1/src/capytaine/bodies/multibodies.py +216 -0
  131. {capytaine-2.3.1 → capytaine-3.0.0a1}/src/capytaine/green_functions/abstract_green_function.py +2 -2
  132. {capytaine-2.3.1 → capytaine-3.0.0a1}/src/capytaine/green_functions/delhommeau.py +31 -16
  133. {capytaine-2.3.1 → capytaine-3.0.0a1}/src/capytaine/green_functions/hams.py +19 -13
  134. {capytaine-2.3.1 → capytaine-3.0.0a1}/src/capytaine/io/legacy.py +3 -103
  135. {capytaine-2.3.1 → capytaine-3.0.0a1}/src/capytaine/io/xarray.py +11 -6
  136. capytaine-3.0.0a1/src/capytaine/meshes/__init__.py +2 -0
  137. capytaine-3.0.0a1/src/capytaine/meshes/abstract_meshes.py +375 -0
  138. capytaine-3.0.0a1/src/capytaine/meshes/clean.py +302 -0
  139. capytaine-3.0.0a1/src/capytaine/meshes/clip.py +347 -0
  140. capytaine-3.0.0a1/src/capytaine/meshes/export.py +89 -0
  141. capytaine-3.0.0a1/src/capytaine/meshes/geometry.py +259 -0
  142. capytaine-3.0.0a1/src/capytaine/meshes/io.py +433 -0
  143. capytaine-3.0.0a1/src/capytaine/meshes/meshes.py +826 -0
  144. capytaine-3.0.0a1/src/capytaine/meshes/predefined/__init__.py +6 -0
  145. capytaine-3.0.0a1/src/capytaine/meshes/predefined/cylinders.py +280 -0
  146. capytaine-3.0.0a1/src/capytaine/meshes/predefined/rectangles.py +202 -0
  147. capytaine-3.0.0a1/src/capytaine/meshes/predefined/spheres.py +55 -0
  148. capytaine-3.0.0a1/src/capytaine/meshes/quality.py +159 -0
  149. capytaine-3.0.0a1/src/capytaine/meshes/surface_integrals.py +82 -0
  150. capytaine-3.0.0a1/src/capytaine/meshes/symmetric_meshes.py +641 -0
  151. capytaine-3.0.0a1/src/capytaine/meshes/visualization.py +353 -0
  152. {capytaine-2.3.1 → capytaine-3.0.0a1}/src/capytaine/post_pro/free_surfaces.py +1 -4
  153. {capytaine-2.3.1 → capytaine-3.0.0a1}/src/capytaine/post_pro/kochin.py +10 -10
  154. capytaine-3.0.0a1/src/capytaine/tools/block_circulant_matrices.py +275 -0
  155. {capytaine-2.3.1 → capytaine-3.0.0a1}/src/capytaine/tools/lists_of_points.py +2 -2
  156. capytaine-3.0.0a1/src/capytaine/tools/memory_monitor.py +45 -0
  157. {capytaine-2.3.1 → capytaine-3.0.0a1}/src/capytaine/tools/symbolic_multiplication.py +13 -1
  158. capytaine-3.0.0a1/src/capytaine/tools/timer.py +90 -0
  159. capytaine-3.0.0a1/src/capytaine/ui/__init__.py +0 -0
  160. capytaine-2.3.1/.pre-commit-config.yaml +0 -40
  161. capytaine-2.3.1/docs/_static/proof.css +0 -34
  162. capytaine-2.3.1/docs/_static/proof.js +0 -8
  163. capytaine-2.3.1/docs/examples/A_beginners_cookbook.rst +0 -84
  164. capytaine-2.3.1/docs/examples/src/A1_radiation_cylinder.py +0 -56
  165. capytaine-2.3.1/docs/examples/src/A2_multibody.py +0 -44
  166. capytaine-2.3.1/docs/examples/src/A5_convergence_study.py +0 -42
  167. capytaine-2.3.1/docs/examples/src/A8_export_dataset.py +0 -45
  168. capytaine-2.3.1/docs/user_manual/body.rst +0 -166
  169. capytaine-2.3.1/pytest/Hydrostatics_cases/sphere__hor_cyl__ver_cyl.pkl.json +0 -1
  170. capytaine-2.3.1/pytest/envs/2024-04-08-py3.12.txt +0 -80
  171. capytaine-2.3.1/pytest/envs/2024-10-22-py3.12.txt +0 -81
  172. capytaine-2.3.1/pytest/envs/2025-04-18-py3.12.txt +0 -93
  173. capytaine-2.3.1/pytest/test_bem_engines_basic_matric_engine.py +0 -75
  174. capytaine-2.3.1/pytest/test_bodies.py +0 -330
  175. capytaine-2.3.1/pytest/test_bodies_predefined.py +0 -189
  176. capytaine-2.3.1/pytest/test_hydrostatics.py +0 -457
  177. capytaine-2.3.1/pytest/test_io_meshes.py +0 -134
  178. capytaine-2.3.1/pytest/test_io_meshes_gdf.py +0 -146
  179. capytaine-2.3.1/pytest/test_io_meshes_hst.py +0 -169
  180. capytaine-2.3.1/pytest/test_io_meshes_mar.py +0 -53
  181. capytaine-2.3.1/pytest/test_ui_matplotlib.py +0 -32
  182. capytaine-2.3.1/pytest/test_ui_vtk.py +0 -26
  183. capytaine-2.3.1/src/capytaine/bodies/bodies.py +0 -1221
  184. capytaine-2.3.1/src/capytaine/bodies/dofs.py +0 -19
  185. capytaine-2.3.1/src/capytaine/bodies/predefined/__init__.py +0 -6
  186. capytaine-2.3.1/src/capytaine/bodies/predefined/cylinders.py +0 -151
  187. capytaine-2.3.1/src/capytaine/bodies/predefined/rectangles.py +0 -111
  188. capytaine-2.3.1/src/capytaine/bodies/predefined/spheres.py +0 -70
  189. capytaine-2.3.1/src/capytaine/tools/timer.py +0 -66
  190. {capytaine-2.3.1 → capytaine-3.0.0a1}/.github/workflows/test_with_latest_dependencies.yaml +0 -0
  191. {capytaine-2.3.1 → capytaine-3.0.0a1}/.gitignore +0 -0
  192. {capytaine-2.3.1 → capytaine-3.0.0a1}/.zenodo.json +0 -0
  193. {capytaine-2.3.1 → capytaine-3.0.0a1}/CONTRIBUTING.md +0 -0
  194. {capytaine-2.3.1 → capytaine-3.0.0a1}/LICENSE +0 -0
  195. {capytaine-2.3.1 → capytaine-3.0.0a1}/README.md +0 -0
  196. {capytaine-2.3.1 → capytaine-3.0.0a1}/code_of_conduct.md +0 -0
  197. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/Makefile +0 -0
  198. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/_static/custom.css +0 -0
  199. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/_templates/layout.html +0 -0
  200. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/citing.rst +0 -0
  201. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/developer_manual/contributing.rst +0 -0
  202. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/developer_manual/index.rst +0 -0
  203. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/developer_manual/testing.rst +0 -0
  204. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/examples/B_intermediate_cookbook.rst +0 -0
  205. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/examples/index.rst +0 -0
  206. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/examples/src/B1_pressure_on_hull.py +0 -0
  207. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/examples/src/B2_haskind.py +0 -0
  208. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/examples/src/B3_free_surface_elevation.py +0 -0
  209. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/examples/src/B5_plot_velocity_in_domain.py +0 -0
  210. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/examples/src/B6_animate_free_surface.py +0 -0
  211. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/examples/src/B7_boat_animation.py +0 -0
  212. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/examples/src/B8_pressure_infinite_frequency.py +0 -0
  213. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/examples/src/C10_custom_linear_solver_on_gpu.py +0 -0
  214. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/examples/src/C8_compare_Green_functions.py +0 -0
  215. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/examples/src/boat_200.mar +0 -0
  216. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/examples/validation.rst +0 -0
  217. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/theory_manual/index.rst +0 -0
  218. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/theory_manual/theory.rst +0 -0
  219. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/user_manual/Nemoh.cal +0 -0
  220. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/user_manual/Panel_convention.svg +0 -0
  221. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/user_manual/export_output.rst +0 -0
  222. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/user_manual/problem_setup.rst +0 -0
  223. {capytaine-2.3.1 → capytaine-3.0.0a1}/docs/user_manual/quickstart.rst +0 -0
  224. {capytaine-2.3.1/src/capytaine/green_functions → capytaine-3.0.0a1/libs}/FinGreen3D/.gitignore +0 -0
  225. {capytaine-2.3.1/src/capytaine/green_functions → capytaine-3.0.0a1/libs}/FinGreen3D/FinGreen3D.f90 +0 -0
  226. {capytaine-2.3.1/src/capytaine/green_functions → capytaine-3.0.0a1/libs}/FinGreen3D/LICENSE +0 -0
  227. {capytaine-2.3.1/src/capytaine/green_functions → capytaine-3.0.0a1/libs}/FinGreen3D/Makefile +0 -0
  228. {capytaine-2.3.1/src/capytaine/green_functions → capytaine-3.0.0a1/libs}/FinGreen3D/README.md +0 -0
  229. {capytaine-2.3.1/src/capytaine/green_functions → capytaine-3.0.0a1/libs}/FinGreen3D/test_program.f90 +0 -0
  230. {capytaine-2.3.1/src/capytaine/green_functions → capytaine-3.0.0a1/libs}/LiangWuNoblesse/.gitignore +0 -0
  231. {capytaine-2.3.1/src/capytaine/green_functions → capytaine-3.0.0a1/libs}/LiangWuNoblesse/LICENSE +0 -0
  232. {capytaine-2.3.1/src/capytaine/green_functions → capytaine-3.0.0a1/libs}/LiangWuNoblesse/Makefile +0 -0
  233. {capytaine-2.3.1/src/capytaine/green_functions → capytaine-3.0.0a1/libs}/LiangWuNoblesse/README.md +0 -0
  234. {capytaine-2.3.1/src/capytaine/green_functions → capytaine-3.0.0a1/libs}/LiangWuNoblesse/test_program.f90 +0 -0
  235. /capytaine-2.3.1/src/capytaine/bem/__init__.py → /capytaine-3.0.0a1/libs/fakeblocks/README.md +0 -0
  236. {capytaine-2.3.1/src/capytaine/green_functions/libs → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/__init__.py +0 -0
  237. {capytaine-2.3.1/src/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/matrices/low_rank.py +0 -0
  238. {capytaine-2.3.1/src/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/meshes/__init__.py +0 -0
  239. {capytaine-2.3.1/src/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/meshes/clipper.py +0 -0
  240. {capytaine-2.3.1/src/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/meshes/collections.py +0 -0
  241. {capytaine-2.3.1/src/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/meshes/geometry.py +0 -0
  242. {capytaine-2.3.1/src/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/meshes/mesh_like_protocol.py +0 -0
  243. {capytaine-2.3.1/src/capytaine/io → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks/meshes}/mesh_loaders.py +0 -0
  244. {capytaine-2.3.1/src/capytaine/io → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks/meshes}/mesh_writers.py +0 -0
  245. {capytaine-2.3.1/src/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/meshes/meshes.py +0 -0
  246. {capytaine-2.3.1/src/capytaine/io → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks/meshes}/meshio.py +0 -0
  247. {capytaine-2.3.1/src/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/meshes/predefined/__init__.py +0 -0
  248. {capytaine-2.3.1/src/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/meshes/predefined/cylinders.py +0 -0
  249. {capytaine-2.3.1/src/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/meshes/predefined/rectangles.py +0 -0
  250. {capytaine-2.3.1/src/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/meshes/predefined/spheres.py +0 -0
  251. {capytaine-2.3.1/src/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/meshes/properties.py +0 -0
  252. {capytaine-2.3.1/src/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/meshes/quadratures.py +0 -0
  253. {capytaine-2.3.1/src/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/meshes/quality.py +0 -0
  254. {capytaine-2.3.1/src/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/tools/lru_cache.py +0 -0
  255. {capytaine-2.3.1/src/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/ui/vtk/__init__.py +0 -0
  256. {capytaine-2.3.1/src/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/ui/vtk/animation.py +0 -0
  257. {capytaine-2.3.1/src/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/ui/vtk/body_viewer.py +0 -0
  258. {capytaine-2.3.1/src/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/ui/vtk/helpers.py +0 -0
  259. {capytaine-2.3.1/src/capytaine → capytaine-3.0.0a1/libs/fakeblocks/src/fakeblocks}/ui/vtk/mesh_viewer.py +0 -0
  260. {capytaine-2.3.1/pytest → capytaine-3.0.0a1/libs/fakeblocks/test}/test_meshes_geometry.py +0 -0
  261. {capytaine-2.3.1/src/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/.gitignore +0 -0
  262. {capytaine-2.3.1/src/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/LICENSE +0 -0
  263. {capytaine-2.3.1/src/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/Makefile +0 -0
  264. {capytaine-2.3.1/src/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/README.md +0 -0
  265. {capytaine-2.3.1/src/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/benchmarks/openmp/benchmark_omp.f90 +0 -0
  266. {capytaine-2.3.1/src/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/benchmarks/openmp/display_mesh.py +0 -0
  267. {capytaine-2.3.1/src/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/benchmarks/openmp/read_output.py +0 -0
  268. {capytaine-2.3.1/src/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/benchmarks/profiling/benchmark_profiling.f90 +0 -0
  269. {capytaine-2.3.1/src/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/benchmarks/rankine/benchmark_rankine.f90 +0 -0
  270. {capytaine-2.3.1/src/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/benchmarks/tabulations/benchmark_tabulation.f90 +0 -0
  271. {capytaine-2.3.1/src/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/benchmarks/waves/benchmark_waves.f90 +0 -0
  272. {capytaine-2.3.1/src/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/examples/minimal/minimal_example.f90 +0 -0
  273. {capytaine-2.3.1/src/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/examples/minimal/minimal_example.py +0 -0
  274. {capytaine-2.3.1/src/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/src/Delhommeau_integrals.f90 +0 -0
  275. {capytaine-2.3.1/src/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/src/FinGreen3D.f90 +0 -0
  276. {capytaine-2.3.1/src/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/src/Green_Rankine.f90 +0 -0
  277. {capytaine-2.3.1/src/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/src/Green_wave.f90 +0 -0
  278. {capytaine-2.3.1/src/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/src/constants.f90 +0 -0
  279. {capytaine-2.3.1/src/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/src/float32.f90 +0 -0
  280. {capytaine-2.3.1/src/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/src/float64.f90 +0 -0
  281. {capytaine-2.3.1/src/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/src/interface.f90 +0 -0
  282. {capytaine-2.3.1/src/capytaine/green_functions → capytaine-3.0.0a1/libs}/libDelhommeau/src/old_Prony_decomposition.f90 +0 -0
  283. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/Bemio_verification_cases/sphere.out +0 -0
  284. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/Nemoh_verification_cases/Cylinder/Cylinder.dat +0 -0
  285. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/Nemoh_verification_cases/Cylinder/Nemoh.cal +0 -0
  286. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/Nemoh_verification_cases/Cylinder/Nemoh_v3.cal +0 -0
  287. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/Nemoh_verification_cases/Cylinder/reference_results/DiffractionForce.tec +0 -0
  288. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/Nemoh_verification_cases/Cylinder/reference_results/ExcitationForce.tec +0 -0
  289. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/Nemoh_verification_cases/Cylinder/reference_results/RadiationCoefficients.tec +0 -0
  290. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/Nemoh_verification_cases/NonSymmetrical/Nemoh.cal +0 -0
  291. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/Nemoh_verification_cases/NonSymmetrical/Nemoh_v3.cal +0 -0
  292. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/Nemoh_verification_cases/NonSymmetrical/NonSymmetrical.dat +0 -0
  293. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/Nemoh_verification_cases/NonSymmetrical/reference_results/DiffractionForce.tec +0 -0
  294. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/Nemoh_verification_cases/NonSymmetrical/reference_results/ExcitationForce.tec +0 -0
  295. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/Nemoh_verification_cases/NonSymmetrical/reference_results/RadiationCoefficients.tec +0 -0
  296. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/io_legacy_cases/reference_data/single_body/KH.dat +0 -0
  297. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/io_legacy_cases/reference_data/single_body_list/KH.dat +0 -0
  298. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/io_legacy_cases/reference_data/two_bodies_list/KH_0.dat +0 -0
  299. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/io_legacy_cases/reference_data/two_bodies_list/KH_1.dat +0 -0
  300. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/mesh_files_examples/barge.med +0 -0
  301. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/mesh_files_examples/cylinder2.msh +0 -0
  302. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/mesh_files_examples/cylinder4.msh +0 -0
  303. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/test_bem_airy_waves.py +0 -0
  304. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/test_consistency_with_HAMS.py +0 -0
  305. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/test_consistency_with_analytical_solutions.py +0 -0
  306. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/test_green_functions_finite_depth.py +0 -0
  307. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/test_green_functions_tabulation_caching.py +0 -0
  308. {capytaine-2.3.1 → capytaine-3.0.0a1}/pytest/test_io_bemio.py +0 -0
  309. {capytaine-2.3.1/src/capytaine/io → capytaine-3.0.0a1/src/capytaine/bem}/__init__.py +0 -0
  310. {capytaine-2.3.1 → capytaine-3.0.0a1}/src/capytaine/bem/airy_waves.py +0 -0
  311. {capytaine-2.3.1 → capytaine-3.0.0a1}/src/capytaine/bodies/__init__.py +0 -0
  312. {capytaine-2.3.1 → capytaine-3.0.0a1}/src/capytaine/green_functions/__init__.py +0 -0
  313. {capytaine-2.3.1/src/capytaine/tools → capytaine-3.0.0a1/src/capytaine/io}/__init__.py +0 -0
  314. {capytaine-2.3.1 → capytaine-3.0.0a1}/src/capytaine/io/bemio.py +0 -0
  315. {capytaine-2.3.1 → capytaine-3.0.0a1}/src/capytaine/io/wamit.py +0 -0
  316. {capytaine-2.3.1 → capytaine-3.0.0a1}/src/capytaine/post_pro/__init__.py +0 -0
  317. {capytaine-2.3.1 → capytaine-3.0.0a1}/src/capytaine/post_pro/impedance.py +0 -0
  318. {capytaine-2.3.1 → capytaine-3.0.0a1}/src/capytaine/post_pro/rao.py +0 -0
  319. {capytaine-2.3.1/src/capytaine/ui → capytaine-3.0.0a1/src/capytaine/tools}/__init__.py +0 -0
  320. {capytaine-2.3.1 → capytaine-3.0.0a1}/src/capytaine/tools/cache_on_disk.py +0 -0
  321. {capytaine-2.3.1 → capytaine-3.0.0a1}/src/capytaine/tools/deprecation_handling.py +0 -0
  322. {capytaine-2.3.1 → capytaine-3.0.0a1}/src/capytaine/tools/optional_imports.py +0 -0
  323. {capytaine-2.3.1 → capytaine-3.0.0a1}/src/capytaine/tools/prony_decomposition.py +0 -0
  324. {capytaine-2.3.1 → capytaine-3.0.0a1}/src/capytaine/ui/cli.py +0 -0
  325. {capytaine-2.3.1 → 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
 
@@ -44,14 +42,13 @@ jobs:
44
42
 
45
43
  - name: Deploy pages
46
44
  if: |
47
- github.repository_owner == 'capytaine' &&
48
- github.ref == 'refs/heads/master'
49
- # 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
50
47
  uses: JamesIves/github-pages-deploy-action@releases/v4
51
48
  with:
52
49
  folder: ./docs/_build/html/
53
50
  repository-name: capytaine/capytaine.github.io
54
51
  branch: main
55
- target-folder: master/
52
+ target-folder: ${{ github.ref_name }}/
56
53
  clean: true
57
54
  token: ${{ secrets.TOKEN_PAGES }}
@@ -15,7 +15,7 @@ jobs:
15
15
  runs-on: windows-2025
16
16
 
17
17
  steps:
18
- - uses: actions/checkout@v4
18
+ - uses: actions/checkout@v6
19
19
 
20
20
  - uses: fortran-lang/setup-fortran@v1
21
21
  with:
@@ -23,7 +23,7 @@ jobs:
23
23
  version: '13'
24
24
 
25
25
  - name: Build wheels
26
- uses: pypa/cibuildwheel@v3.2.0
26
+ uses: pypa/cibuildwheel@v3.3.0
27
27
  env:
28
28
  CIBW_SKIP: "*win32* cp314t*"
29
29
  CIBW_BEFORE_BUILD_WINDOWS: pip install delvewheel
@@ -31,7 +31,7 @@ jobs:
31
31
  # Package the DLL dependencies in the wheel for windows (done by default for the other platforms).
32
32
  # delvewheel cannot mangle the libraries, stripping does not work.
33
33
 
34
- - uses: actions/upload-artifact@v4
34
+ - uses: actions/upload-artifact@v6
35
35
  with:
36
36
  name: wheels-windows
37
37
  path: ./wheelhouse/*.whl
@@ -41,19 +41,17 @@ jobs:
41
41
  runs-on: ubuntu-22.04
42
42
 
43
43
  steps:
44
- - uses: actions/checkout@v4
44
+ - uses: actions/checkout@v6
45
45
 
46
- - uses: fortran-lang/setup-fortran@v1
47
- with:
48
- compiler: 'gcc'
49
- version: '13'
46
+ # No need to setup fortran, it won't be used by CIbuildwheel which is
47
+ # using a Manylinux container
50
48
 
51
49
  - name: Build wheels on Ubuntu
52
- uses: pypa/cibuildwheel@v3.2.0
50
+ uses: pypa/cibuildwheel@v3.3.0
53
51
  env:
54
52
  CIBW_SKIP: "*i686* *musllinux*"
55
53
 
56
- - uses: actions/upload-artifact@v4
54
+ - uses: actions/upload-artifact@v6
57
55
  with:
58
56
  name: wheels-ubuntu
59
57
  path: ./wheelhouse/*.whl
@@ -61,12 +59,10 @@ jobs:
61
59
 
62
60
  "build_wheels_on_macos_intel":
63
61
  name: Build wheels on MacOS Intel
64
- runs-on: macos-13
65
- # Should be replaced by macos-15-intel soon, but it does not seem to be
66
- # supported by setup-fortran?
62
+ runs-on: macos-15-intel
67
63
 
68
64
  steps:
69
- - uses: actions/checkout@v4
65
+ - uses: actions/checkout@v6
70
66
 
71
67
  - uses: fortran-lang/setup-fortran@v1
72
68
  with:
@@ -74,11 +70,11 @@ jobs:
74
70
  version: '13'
75
71
 
76
72
  - name: Build wheels
77
- uses: pypa/cibuildwheel@v3.2.0
73
+ uses: pypa/cibuildwheel@v3.3.0
78
74
  env:
79
- CIBW_ENVIRONMENT: MACOSX_DEPLOYMENT_TARGET=13.0
75
+ CIBW_ENVIRONMENT: MACOSX_DEPLOYMENT_TARGET=15.0
80
76
 
81
- - uses: actions/upload-artifact@v4
77
+ - uses: actions/upload-artifact@v6
82
78
  with:
83
79
  name: wheels-macos-intel
84
80
  path: ./wheelhouse/*.whl
@@ -89,7 +85,7 @@ jobs:
89
85
  runs-on: macos-14
90
86
 
91
87
  steps:
92
- - uses: actions/checkout@v4
88
+ - uses: actions/checkout@v6
93
89
 
94
90
  - uses: fortran-lang/setup-fortran@v1
95
91
  with:
@@ -97,11 +93,11 @@ jobs:
97
93
  version: '13'
98
94
 
99
95
  - name: Build wheels
100
- uses: pypa/cibuildwheel@v3.2.0
96
+ uses: pypa/cibuildwheel@v3.3.0
101
97
  env:
102
98
  CIBW_ENVIRONMENT: MACOSX_DEPLOYMENT_TARGET=14.0
103
99
 
104
- - uses: actions/upload-artifact@v4
100
+ - uses: actions/upload-artifact@v6
105
101
  with:
106
102
  name: wheels-macos-arm
107
103
  path: ./wheelhouse/*.whl
@@ -30,7 +30,7 @@ jobs:
30
30
 
31
31
  strategy:
32
32
  matrix:
33
- python-version: ['38', '312']
33
+ python-version: ['38', '313']
34
34
 
35
35
  steps:
36
36
 
@@ -72,11 +72,11 @@ jobs:
72
72
  # version: '13'
73
73
 
74
74
  - name: Compile and run example
75
- working-directory: src/capytaine/green_functions/libDelhommeau/
75
+ working-directory: libs/libDelhommeau/
76
76
  run: make example && examples/minimal/minimal_example.bin
77
77
  # Soundness of the results is not tested, only that the compiling and
78
78
  # execution are succeeding.
79
79
 
80
80
  - name: Run simple benchmark
81
- working-directory: src/capytaine/green_functions/libDelhommeau/
81
+ working-directory: libs/libDelhommeau/
82
82
  run: make run_bench_rankine && make run_bench_waves
@@ -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
@@ -4,12 +4,14 @@ set windows-shell := ["powershell.exe", "-c"]
4
4
  default:
5
5
  just --list
6
6
 
7
+ # Run the recipe below in a clean virtual environment to install Capytaine in
8
+ # editable mode.
7
9
  editable_install:
8
10
  uv pip install -r pyproject.toml \
11
+ --extra optional \
9
12
  --group editable_install \
10
13
  --group dev
11
- pip install --no-build-isolation --editable .
12
- # Meson-backed editable install is not (yet?) supported by uv (https://github.com/astral-sh/uv/issues/10214)
14
+ uv pip install --no-build-isolation --editable .
13
15
 
14
16
  # Define the temporary directory differently based on OS
15
17
  TEMP_DIR := if os_family() == 'windows' {
@@ -25,13 +27,14 @@ NEMOH_CASES := TEST_DIR / 'Nemoh_verification_cases' / 'Cylinder'
25
27
 
26
28
  EXAMPLES_DIR := justfile_directory() / 'docs' / 'examples' / 'src'
27
29
  EXAMPLES_FILES := ' \
28
- A1_radiation_cylinder.py \
30
+ A1_single_body_hydrodynamics.py \
29
31
  A2_multibody.py \
30
- A3_finite_depth_cylinder.py \
31
- A4_custom_dofs.py \
32
- A5_convergence_study.py \
33
- A7_elasticity_of_beam.py \
34
- A8_export_dataset.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 \
35
38
  B1_pressure_on_hull.py \
36
39
  B2_haskind.py \
37
40
  B3_free_surface_elevation.py \
@@ -44,14 +47,16 @@ EXAMPLES_FILES := ' \
44
47
  '
45
48
 
46
49
  ## Reason for skipping some example files:
47
- # A6_irregular_frequency_removal.py \ # Slow
50
+ # A5_benchmark_plane_symmetries.py \
51
+ # A6_benchmark_axisymmetric_mesh.py \
52
+ # A9_test_irregular_frequency_removal.py \ # Slow
48
53
  # B6_animate_free_surface.py \ # Requires VTK
49
54
  # B7_boat_animation.py \ # Requires VTK
50
55
  # C6_axisymmetric_buoy.py \ # Requires VTK
51
- # C7_h_matrices_with_preconditionner.py \ # Slow
52
56
  # C10_custom_linear_solver_on_gpu.py \ # Requires torch
53
57
 
54
- # Run the test suite and the example files assuming a virtual environment has been activated
58
+ # Run the test suite and the example files assuming a virtual environment with
59
+ # Capytaine installed has been activated
55
60
  [unix]
56
61
  _test:
57
62
  #!/usr/bin/env bash
@@ -81,52 +86,81 @@ _test:
81
86
  capytaine {{NEMOH_CASES}}/Nemoh.cal
82
87
  capytaine {{NEMOH_CASES}}/Nemoh_v3.cal
83
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.
84
109
 
85
110
  test_in_latest_env:
86
111
  uv run \
87
- --isolated --no-editable \
88
- --only-group test \
112
+ --isolated --no-default-groups \
113
+ --no-editable --with "capytaine[optional] @ ." \
114
+ --group test \
115
+ -- \
89
116
  just _test
90
117
 
91
- test_in_py38_reference_env:
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:
92
123
  uv run \
93
- --isolated --no-editable \
94
- --only-group test \
95
- --python 3.8 \
96
- --with-requirements {{TEST_DIR}}/envs/2023-08-01-py3.8.txt \
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
+ -- \
97
131
  just _test
98
- # TODO: Also build Capytaine in this environment?
99
132
 
100
- test_in_py312_reference_env:
133
+
134
+ test_in_py38_reference_env:
101
135
  uv run \
102
- --isolated --no-editable \
103
- --only-group test \
104
- --python 3.12 \
105
- --with-requirements {{TEST_DIR}}/envs/2025-04-18-py3.12.txt \
106
- just _test
107
- # TODO: Also build Capytaine in this environment?
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
108
142
 
109
- test_in_nightly_env:
143
+ test_in_py313_reference_env:
110
144
  uv run \
111
- --isolated --no-editable \
112
- --pre --extra-index-url https://pypi.anaconda.org/scientific-python-nightly-wheels/simple \
113
- --index-strategy unsafe-best-match \
145
+ --isolated --no-default-groups \
114
146
  --python 3.13 \
115
- --only-group test \
116
- just _test
117
- # "--index-strategy unsafe-best-match" means uv should not ignore wheels
118
- # from PyPI during universal resolution
119
- # TODO: Also build Capytaine in this environment?
147
+ --no-editable \
148
+ --with-requirements {{TEST_DIR}}/envs/2025-11-25-py3.13.txt \
149
+ -- \
150
+ just _install_and_test
120
151
 
121
152
  # How the requirements files from the above recipes where generated.
122
153
  create_test_env_file python="3.8" date="2023-08-01":
123
154
  uv pip compile \
124
- pyproject.toml editable_install_requirements.txt \
155
+ pyproject.toml \
125
156
  --python-version {{python}} \
157
+ --group test \
158
+ --group editable_install \
159
+ --extra optional \
126
160
  --exclude-newer {{date}} \
127
- --extra optional --extra test \
128
161
  -o {{TEST_DIR}}/envs/{{date}}-py{{python}}.txt
129
162
 
163
+
130
164
  # Compile the Fortran code without parallelism for easier reading of the errors.
131
165
  test_fortran_compilation:
132
166
  # It is assumed that meson and ninja are already installed (e.g. with editable_install).
@@ -135,8 +169,9 @@ test_fortran_compilation:
135
169
 
136
170
  build_docs:
137
171
  uv run \
138
- --isolated --no-editable \
139
- --only-group docs \
172
+ --isolated \
173
+ --no-editable --with "capytaine[optional] @ ." \
174
+ --group docs \
140
175
  -- \
141
176
  make --directory="./docs/"
142
177
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: capytaine
3
- Version: 2.3.1
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
@@ -694,10 +694,15 @@ 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
706
  Description-Content-Type: text/markdown
702
707
 
703
708
  # Capytaine: a linear potential flow BEM solver with Python.
@@ -7,6 +7,236 @@ Changelog
7
7
  :depth: 1
8
8
  :backlinks: none
9
9
 
10
+ -----------------------------------
11
+ New in version 3.0.0a1 (2026-02-02)
12
+ -----------------------------------
13
+
14
+ Version 3 includes a major rewrite of several internal modules, most notably
15
+ the ``meshes`` module which has been rewritten from scratch.
16
+
17
+ About the new mesh module
18
+ ~~~~~~~~~~~~~~~~~~~~~~~~~
19
+
20
+ * **No in-place mutation of the mesh objects.**
21
+ To make the maintenance of the mesh routines easier, all in-place transformation of the objects have been removed.
22
+ Code such as the following::
23
+
24
+ mesh = cpt.load_mesh("...")
25
+ mesh.translate_x(1.0)
26
+ mesh.keep_immersed_part()
27
+ mesh.show() # Show translated and clipped mesh
28
+
29
+ can be rewritted as::
30
+
31
+ mesh = cpt.load_mesh("...")
32
+ mesh = mesh.translated_x(1.0)
33
+ mesh = mesh.immersed_part()
34
+ mesh.show()
35
+
36
+ or more consisely::
37
+
38
+ mesh = cpt.load_mesh("...").translated_x(1.0).immersed_part()
39
+ mesh.show()
40
+
41
+ In the latter version, each line returns a new Python object of class
42
+ ``Mesh`` which is the object now referred to by the variable name ``mesh``.
43
+ The new version makes it less error prone to have complex workflows such as::
44
+
45
+ full_mesh = cpt.load_mesh("...")
46
+ full_mesh_draft = full_mesh.vertices[:, 2].min()
47
+ for draft in [1.0, 2.0, 3.0]:
48
+ mesh = full_mesh.translated_z(full_mesh_draft - draft).immersed_part()
49
+ ...
50
+
51
+ without any risk to overwriting the original ``full_mesh``.
52
+
53
+ The only usage of in-place transformations is for performance critical part of the code.
54
+ Given that most hydrodynamical meshes are usually below 100k faces, Capytaine's mesh class is usually not the performance bottleneck.
55
+ Computation intensive mesh transformations should be done with a dedicated meshing tool and not directly in Capytaine anyway.
56
+ If you find yourself nonetheless struggling with performance issues of the new mesh module in Capytaine, please open an issue on Github.
57
+
58
+ * **No in-place mutation of the body objects.**
59
+ For the same reasons as above, the in-place transformations of the ``FloatingBody`` object have been removed.
60
+
61
+ Code such as the following::
62
+
63
+ body = cpt.FloatingBody(mesh=mesh)
64
+ body.rotation_center = (0, 0, -1)
65
+ body.add_all_rigid_body_dofs()
66
+ body.keep_only_dofs(['Heave'])
67
+ body.keep_immersed_part()
68
+ body.translate([0, 1, 0])
69
+
70
+ can be rewritten as::
71
+
72
+ body = cpt.FloatingBody(
73
+ mesh=mesh,
74
+ dofs=cpt.rigid_body_dofs(rotation_center=(0, 0, -1))
75
+ )
76
+ body = body.with_only_dofs(['Heave'])
77
+ body = body.immersed_part()
78
+ body = body.translated([0, 1, 0])
79
+
80
+ * **Only a few built-in mesh loaders, but transparently use external libraries**
81
+ Only the domain mesh file formats (Nemoh's, WAMIT's, Hydrostar's and HAMS's) are built-in in Capytaine.
82
+ Loading a mesh in a general purpose file format such as GMSH or STL is still
83
+ easy, assuming a third party library supporting this file format is installed
84
+ (see :doc:`user_manual/mesh`).
85
+
86
+ * **No more mesh writers**
87
+ To reduce the burden of maintenance, mesh writers have been removed, but the
88
+ mesh objects can be exported to external libraries that can write mesh files.
89
+ As a consequence ``export_as_Nemoh_directory`` has been moved out of Capytaine.
90
+
91
+ * **Symmetries are only available around the main axis.**
92
+ The ``Plane`` and ``Axis`` objects have been removed.
93
+ Symmetric meshes using ``ReflectionSymmetricMesh`` can now only be defined for global symmetries across the ``'xOz'`` and ``'yOz'`` planes.
94
+ Other planes and local symmetries used to be supported in the previous version of Capytaine, but they were making the implementation much more complicated for little practical gain, so it has been chosen for this new version to reduce the scope but make sure that this feature is well integrated with all the other features of Capytaine
95
+ Similarly, transformations with the ``mirrored`` and ``rotated`` methods don't work with arbitrary plane or axis anymore.
96
+ Most transformation can still be performed by combining translation, rotation and mirroring.
97
+ More complex transformations should be done in a dedicated meshing software.
98
+
99
+ * **Rotation symmetric meshes have been completely reworked.**
100
+ They are now well integrated with the other features such as irregular frequencies removal.
101
+ The user interface has been changed since the experimental methods from previous versions.
102
+ See :class:`~capytaine.meshes.symmetric_meshes.RotationSymmetricMesh`.
103
+ The method to create a symmetric mesh from a profile of points has also changed, see :meth:`~capytaine.meshes.symmetric_meshes.RotationSymmetricMesh.from_profile_points`.
104
+
105
+ * **Prototype translation symmetry has been removed.**
106
+ As a consequence, the ``translation_symmetry`` arguments of the mesh generations functions has been removed.
107
+
108
+ * ``Mesh.clipped`` and ``FloatingBody.clipped`` don't take as argument a
109
+ ``Plane`` object, but directly a point and a normal (as two 3-ple of floats).
110
+
111
+ * If no name is provided, no generic name is given to the mesh, no name is used.
112
+ Meshes' names are only useful to keep track of Python objects, since printing the full list of points and faces is not very convenient.
113
+
114
+ * Default 3D display now uses ``pyvista`` as a backend instead of raw ``vtk``. Please consider installing ``pyvista``.
115
+ Animation support has not been implemented in this new backend yet, only static mesh viewing is available.
116
+ The ``matplotlib`` backend is also still available for static mesh viewing.
117
+ Some keyword argument might have been changed to uniformize usage of the two 3D backends.
118
+
119
+ * The barely-used and barely-documented ``geometric_center`` attribute of the mesh and the bodies have been removed.
120
+
121
+ * Support for optionallay using quadratures from Quadpy has been removed.
122
+
123
+ Other major changes
124
+ ~~~~~~~~~~~~~~~~~~~
125
+
126
+ * Add :class:`~capytaine.bodies.multibodies.Multibody` meant to represent a
127
+ multibody system. For hydrodynamics, this is equivalent to the previous
128
+ behavior of coalescing bodies together. For hydrostatics, the new class
129
+ is slightly more powerful, for instance by being able to keep track of
130
+ several center of buoyancy and center of mass. (:pull:`822`)
131
+
132
+ Joining bodies with :meth:`~capytaine.bodies.bodies.FloatingBody.join_bodies`
133
+ or ``+`` now creates a :class:`~capytaine.bodies.multibodies.Multibody` instance. It can be converted back to a
134
+ :class:`~capytaine.bodies.bodies.FloatingBody` instance with::
135
+
136
+ both = body_1 + body_2 # `both` is now a Multibody
137
+ both = (body_1 + body_2).as_FloatingBody() # Recover former behavior of joining FloatingBody with a FloatingBody
138
+
139
+ * New internal data model for rigid body dofs with the classes
140
+ :class:`~capytaine.bodies.dofs.TranslationDof` and
141
+ :class:`~capytaine.bodies.dofs.RotationDof`. (:pull:`838`)
142
+ This should ensure that rigid dofs are detected and treated as such, without
143
+ relying only on their name.
144
+ This is relevant for multiple bodies and articulated bodies when computing:
145
+ * hydrostatics, where the exact hydrostatic stiffness formula for rigid body dofs can be used instead of the approximation for generalized dofs.
146
+ * forward speed, where the m-term is currently only implemented for rigid dofs.
147
+
148
+
149
+ Minor changes
150
+ ~~~~~~~~~~~~~
151
+
152
+ * Add option :code:`'lu_decomposition_with_overwrite'` for the :code:`linear_solver` of :class:`~capytaine.bem.engines.BasicMatrixEngine`, which reduces the RAM usage of the solver (:pull:`775`).
153
+
154
+ * Velocity in the fluid can be post-processed in the limit frequencies (:math:`\omega = 0` or :math:`\omega = \infty`). Divide it by :math:`\omega` to have a finite value (:pull:`777`).
155
+
156
+ * Display in the log the RAM usage estimation before a batch resolution and the measured RAM usage at the end of the resolution (:pull:`784`)
157
+
158
+ * **Breaking** When building the dataset in :meth:`~cpt.bem.solver.fill_dataset`, the previous ``kochin`` attribute has been renamed to ``kochin_radiation``
159
+ to be consistent with the existing ``kochin_diffraction`` attribute.
160
+
161
+ * **Breaking** Remove the geometric body classes ``cpt.Sphere()``,
162
+ ``cpt.VerticalCylinder()``, ``cpt.HorizontalCylinder()``, ``cpt.Disk()``,
163
+ ``cpt.Rectangle()``, ``cpt.RectangularParallelepiped()``, that were marked as
164
+ deprecated since version 2.0. Consider using instead::
165
+
166
+ cpt.FloatingBody(mesh=cpt.mesh_sphere(...), ...)
167
+
168
+ or something equivalent, separating the geometric mesh generation from the
169
+ floating body definition.
170
+
171
+ * :func:`~capytaine.bodies.dofs.rigid_body_dofs` now instantiate the new dof class instead of a placeholder.
172
+ It now has an additional input argument ``only`` to have only some of the six rigid body dofs.
173
+ Also a rotation center should be passed, because the properties of the body
174
+ (e.g. `center_of_mass`) cannot be accessed at that stage. (:pull:`838`)
175
+
176
+ Bug fixes
177
+ ~~~~~~~~~
178
+
179
+ * Fix type of the right-hand-side of the linear solver when using option :code:`floating_point_precision = 'float32'` in :class:`~capytaine.green_functions.delhommeau.Delhommeau`.
180
+ As a consequence, the whole computation is done in single precision and the RAM usage is lower as expected. (:pull:`774`)
181
+
182
+ * Fix the timer for parallel resolution, i.e. when :code:`n_jobs` is greater than 1. Now the durations for each process are displayed. (:pull:`782`)
183
+
184
+ * Hydrostatics methods better take into account the free surface even when
185
+ the mesh has not been clipped yet.
186
+ Internally, the mesh is clipped before computing methods such as
187
+ :meth:`~cpt.bodies.bodies.FloatingBody.disp_volume` or
188
+ :meth:`~cpt.bodies.bodies.FloatingBody.center_of_buoyancy`, such that the
189
+ computed displaced volume is always actually the volume below $z=0$ and the
190
+ center of buoyancy is always below the free surface.
191
+ The inertia matrix always uses the displaced water mass for the mass and
192
+ compute the inertia moments on the full shape if the full mesh is provided.
193
+ (:pull:`794`)
194
+
195
+ * Fix the frequency type in the dimensions of the dataset returned by :meth:`~cpt.io.xarray.kochin_data_array`. Previously, the dimension was always named ``omega``;
196
+ it is now named ``omega``, ``freq``, ``period``, ``wavenumber`` or ``wavelength`` depending on the user settings.
197
+
198
+ * Fix a bug when computing the Kochin function on a mesh with a lid. The Kochin function now also takes the faces on the lid into account. (:issue:`833`)
199
+
200
+ Internals
201
+ ~~~~~~~~~
202
+
203
+ * **Breaking** The ``green_function`` is not an attribute of the :class:`~capytaine.bem.solver.BEMSolver` anymore, but of the engine.
204
+ The motivation is that not all engines can be made compatible with all Green function implementations (although the builtins one are).
205
+ The possibility to call ``BEMSolver(green_function=...)`` is kept as a convenient shortcut to ``BEMSolver(engine=BasicMatrixEngine(green_function=...))``.
206
+ Calls to ``BEMSolver(green_function=..., engine=...)`` now raise an error. (:pull:`752`)
207
+ Post-processing new requires the implementation of the methods ``build_S_matrix`` and ``build_fullK_matrix`` by the engine (:pull:`753`)
208
+
209
+ * New implementation of the block symmetric matrices for mesh symmetry, now
210
+ used by :class:`~capytaine.bem.engines.BasicMatrixEngine` (:pull:`754`).
211
+
212
+ * Rafactor of the :class:`~capytaine.bem.engines.BasicMatrixEngine` to make the
213
+ caching more straightforward and improve its interaction with LU
214
+ decomposition and symmetries. (:pull:`755`)
215
+
216
+ * The whole ``matrices`` module as well as the corresponding engines in
217
+ ``bem/engines.py`` and ``tool/lru_caches.py`` have been removed from
218
+ Capytaine. For compatibility, they will remain accessible from a separate
219
+ package. (:pull:`757`, :pull:`765`)
220
+
221
+ * Instead of creating a ``CollectionOfMeshes``, now ``join_bodies`` merges the
222
+ meshes of the bodies together. The legacy behavior is still available from
223
+ Fakeblocks ``join_bodies``. (:pull:`779`)
224
+
225
+ * The new ``Mesh`` class has a ``faces_metadata`` attribute storing fields
226
+ defined on each faces of the mesh. When faces are added or removed, the
227
+ metadata are automatically updated accordingly. (:pull:`791`)
228
+
229
+ * Move hydrostatics routines in a dedicated module and rewrite corresponding tests (:pull:`794`)
230
+
231
+ * Refactor the implementation of the timer to make it easier to include more steps (:pull:`809`)
232
+
233
+ * Parameters ``free_surface``, ``water_depth`` and ``wavenumber`` are always
234
+ keyword arguments in the engine and the Green function (:pull:`812`)
235
+
236
+ * **Breaking** :meth:`~capytaine.bodies.FloatingBody.add_rotation_dof` takes
237
+ arguments called ``rotation_center`` and ``direction`` instead of an ``Axis``
238
+ object. Also the geometric center is not used anymore as a fallback value for
239
+ ``rotation_center``.
10
240
 
11
241
  ---------------------------------
12
242
  New in version 2.3.1 (2025-10-14)
@@ -50,7 +50,7 @@ extensions = [
50
50
  'sphinx.ext.mathjax',
51
51
  'sphinx.ext.napoleon',
52
52
  'sphinx.ext.viewcode',
53
- 'sphinx_toolbox.collapse',
53
+ 'sphinx_tabs.tabs',
54
54
  'sphinx_proof',
55
55
  'sphinx_copybutton',
56
56
  'sphinxcontrib.mermaid',