capytaine 2.3__cp39-cp39-macosx_14_0_arm64.whl → 3.0.0a1__cp39-cp39-macosx_14_0_arm64.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (86) hide show
  1. capytaine/.dylibs/libgcc_s.1.1.dylib +0 -0
  2. capytaine/.dylibs/libgfortran.5.dylib +0 -0
  3. capytaine/.dylibs/libquadmath.0.dylib +0 -0
  4. capytaine/__about__.py +7 -2
  5. capytaine/__init__.py +8 -12
  6. capytaine/bem/engines.py +234 -354
  7. capytaine/bem/problems_and_results.py +30 -21
  8. capytaine/bem/solver.py +205 -81
  9. capytaine/bodies/bodies.py +279 -862
  10. capytaine/bodies/dofs.py +136 -9
  11. capytaine/bodies/hydrostatics.py +540 -0
  12. capytaine/bodies/multibodies.py +216 -0
  13. capytaine/green_functions/{libs/Delhommeau_float32.cpython-39-darwin.so → Delhommeau_float32.cpython-39-darwin.so} +0 -0
  14. capytaine/green_functions/{libs/Delhommeau_float64.cpython-39-darwin.so → Delhommeau_float64.cpython-39-darwin.so} +0 -0
  15. capytaine/green_functions/abstract_green_function.py +2 -2
  16. capytaine/green_functions/delhommeau.py +50 -31
  17. capytaine/green_functions/hams.py +19 -13
  18. capytaine/io/legacy.py +3 -103
  19. capytaine/io/xarray.py +15 -10
  20. capytaine/meshes/__init__.py +2 -6
  21. capytaine/meshes/abstract_meshes.py +375 -0
  22. capytaine/meshes/clean.py +302 -0
  23. capytaine/meshes/clip.py +347 -0
  24. capytaine/meshes/export.py +89 -0
  25. capytaine/meshes/geometry.py +244 -394
  26. capytaine/meshes/io.py +433 -0
  27. capytaine/meshes/meshes.py +621 -676
  28. capytaine/meshes/predefined/cylinders.py +22 -56
  29. capytaine/meshes/predefined/rectangles.py +26 -85
  30. capytaine/meshes/predefined/spheres.py +4 -11
  31. capytaine/meshes/quality.py +118 -407
  32. capytaine/meshes/surface_integrals.py +48 -29
  33. capytaine/meshes/symmetric_meshes.py +641 -0
  34. capytaine/meshes/visualization.py +353 -0
  35. capytaine/post_pro/free_surfaces.py +1 -4
  36. capytaine/post_pro/kochin.py +10 -10
  37. capytaine/tools/block_circulant_matrices.py +275 -0
  38. capytaine/tools/lists_of_points.py +2 -2
  39. capytaine/tools/memory_monitor.py +45 -0
  40. capytaine/tools/symbolic_multiplication.py +31 -5
  41. capytaine/tools/timer.py +68 -42
  42. {capytaine-2.3.dist-info → capytaine-3.0.0a1.dist-info}/METADATA +8 -14
  43. capytaine-3.0.0a1.dist-info/RECORD +65 -0
  44. capytaine-3.0.0a1.dist-info/WHEEL +6 -0
  45. capytaine/bodies/predefined/__init__.py +0 -6
  46. capytaine/bodies/predefined/cylinders.py +0 -151
  47. capytaine/bodies/predefined/rectangles.py +0 -111
  48. capytaine/bodies/predefined/spheres.py +0 -70
  49. capytaine/green_functions/FinGreen3D/.gitignore +0 -1
  50. capytaine/green_functions/FinGreen3D/FinGreen3D.f90 +0 -3589
  51. capytaine/green_functions/FinGreen3D/LICENSE +0 -165
  52. capytaine/green_functions/FinGreen3D/Makefile +0 -16
  53. capytaine/green_functions/FinGreen3D/README.md +0 -24
  54. capytaine/green_functions/FinGreen3D/test_program.f90 +0 -39
  55. capytaine/green_functions/LiangWuNoblesse/.gitignore +0 -1
  56. capytaine/green_functions/LiangWuNoblesse/LICENSE +0 -504
  57. capytaine/green_functions/LiangWuNoblesse/LiangWuNoblesseWaveTerm.f90 +0 -751
  58. capytaine/green_functions/LiangWuNoblesse/Makefile +0 -18
  59. capytaine/green_functions/LiangWuNoblesse/README.md +0 -2
  60. capytaine/green_functions/LiangWuNoblesse/test_program.f90 +0 -28
  61. capytaine/green_functions/libs/__init__.py +0 -0
  62. capytaine/io/mesh_loaders.py +0 -1086
  63. capytaine/io/mesh_writers.py +0 -692
  64. capytaine/io/meshio.py +0 -38
  65. capytaine/matrices/__init__.py +0 -16
  66. capytaine/matrices/block.py +0 -592
  67. capytaine/matrices/block_toeplitz.py +0 -325
  68. capytaine/matrices/builders.py +0 -89
  69. capytaine/matrices/linear_solvers.py +0 -232
  70. capytaine/matrices/low_rank.py +0 -395
  71. capytaine/meshes/clipper.py +0 -465
  72. capytaine/meshes/collections.py +0 -334
  73. capytaine/meshes/mesh_like_protocol.py +0 -37
  74. capytaine/meshes/properties.py +0 -276
  75. capytaine/meshes/quadratures.py +0 -80
  76. capytaine/meshes/symmetric.py +0 -392
  77. capytaine/tools/lru_cache.py +0 -49
  78. capytaine/ui/vtk/__init__.py +0 -3
  79. capytaine/ui/vtk/animation.py +0 -329
  80. capytaine/ui/vtk/body_viewer.py +0 -28
  81. capytaine/ui/vtk/helpers.py +0 -82
  82. capytaine/ui/vtk/mesh_viewer.py +0 -461
  83. capytaine-2.3.dist-info/RECORD +0 -92
  84. capytaine-2.3.dist-info/WHEEL +0 -4
  85. {capytaine-2.3.dist-info → capytaine-3.0.0a1.dist-info}/LICENSE +0 -0
  86. {capytaine-2.3.dist-info → capytaine-3.0.0a1.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,89 @@
1
+ import numpy as np
2
+ import xarray as xr
3
+
4
+ from capytaine.tools.optional_imports import import_optional_dependency
5
+
6
+
7
+ def export_mesh(mesh, format: str):
8
+ format = format.lower()
9
+ if format == "pyvista":
10
+ return export_to_pyvista(mesh)
11
+ elif format == "xarray":
12
+ return export_to_xarray(mesh)
13
+ elif format == "meshio":
14
+ return export_to_meshio(mesh)
15
+ elif format == "trimesh":
16
+ return export_to_trimesh(mesh)
17
+ else:
18
+ raise ValueError(f"Unrecognized output format: {format}")
19
+
20
+
21
+ def export_to_pyvista(mesh):
22
+ """
23
+ Build a PyVista UnstructuredGrid from a list of faces (triangles or quads).
24
+ """
25
+ pv = import_optional_dependency("pyvista")
26
+
27
+ # flatten into the VTK cell‐array format: [n0, i0, i1, ..., in-1, n1, j0, j1, ...]
28
+ flat_cells = []
29
+ cell_types = []
30
+ for face in mesh._faces:
31
+ n = len(face)
32
+ flat_cells.append(n)
33
+ flat_cells.extend(face)
34
+ if n == 3:
35
+ cell_types.append(pv.CellType.TRIANGLE)
36
+ elif n == 4:
37
+ cell_types.append(pv.CellType.QUAD)
38
+ else:
39
+ # if you ever have ngons, you can map them as POLYGON:
40
+ cell_types.append(pv.CellType.POLYGON)
41
+
42
+ cells_array = np.array(flat_cells, dtype=np.int64)
43
+ cell_types = np.array(cell_types, dtype=np.uint8)
44
+
45
+ return pv.UnstructuredGrid(cells_array, cell_types, mesh.vertices.astype(np.float32))
46
+
47
+
48
+ def export_to_xarray(mesh):
49
+ return xr.Dataset(
50
+ {
51
+ "mesh_vertices": (
52
+ ["face", "vertices_of_face", "space_coordinate"],
53
+ mesh.as_array_of_faces()
54
+ )
55
+ },
56
+ coords={
57
+ "space_coordinate": ["x", "y", "z"],
58
+ })
59
+
60
+
61
+ def export_to_meshio(mesh):
62
+ meshio = import_optional_dependency("meshio")
63
+
64
+ quads = [f for f in mesh._faces if len(f) == 4]
65
+ tris = [f for f in mesh._faces if len(f) == 3]
66
+
67
+ cells = []
68
+ if quads:
69
+ cells.append(meshio.CellBlock("quad", np.array(quads, dtype=np.int32)))
70
+ if tris:
71
+ cells.append(meshio.CellBlock("triangle", np.array(tris, dtype=np.int32)))
72
+
73
+ return meshio.Mesh(points=mesh.vertices, cells=cells)
74
+
75
+
76
+ def export_to_trimesh(mesh):
77
+ trimesh = import_optional_dependency("trimesh")
78
+ triangle_faces = []
79
+ for face in mesh._faces:
80
+ if len(face) == 4 and face[3] != face[2]:
81
+ triangle_faces.append([face[0], face[1], face[2]])
82
+ triangle_faces.append([face[0], face[2], face[3]])
83
+ else:
84
+ triangle_faces.append(face[:3])
85
+ return trimesh.Trimesh(
86
+ vertices=mesh.vertices,
87
+ faces=np.array(triangle_faces),
88
+ process=False
89
+ )