From 2d98d857f7135541047d932b15766e9fe9b3999a Mon Sep 17 00:00:00 2001 From: Huite Bootsma Date: Sat, 31 Aug 2024 22:17:06 +0200 Subject: [PATCH] Remove mesher_base: generate method need finalize keyword for GmshMesher --- docs/api/changelog.rst | 2 ++ pandamesh/gmsh_mesher.py | 35 +++++++++++++++++++++++++++++++++-- pandamesh/mesher_base.py | 32 -------------------------------- pandamesh/triangle_mesher.py | 25 +++++++++++++++++++++++-- tests/test_meshers.py | 2 +- 5 files changed, 59 insertions(+), 37 deletions(-) delete mode 100644 pandamesh/mesher_base.py diff --git a/docs/api/changelog.rst b/docs/api/changelog.rst index 4a322b8..ffb26c3 100644 --- a/docs/api/changelog.rst +++ b/docs/api/changelog.rst @@ -34,6 +34,8 @@ Added :meth:`pandamesh.GmshMesher.add_structured_field`, and :meth:`pandamesh.GmshMesher.add_structured_field_from_dataarray` to enable Gmsh fields from geometry or from raster data. +- Added ``finalize`` keyword to :meth:`pandamesh.GmshMesher.generate` to + automatically finalize after mesh generation. Changed ~~~~~~~ diff --git a/pandamesh/gmsh_mesher.py b/pandamesh/gmsh_mesher.py index bed6190..81083c9 100644 --- a/pandamesh/gmsh_mesher.py +++ b/pandamesh/gmsh_mesher.py @@ -15,6 +15,8 @@ move_origin, repr, separate_geodataframe, + to_geodataframe, + to_ugrid, ) from pandamesh.gmsh_enums import ( FieldCombination, @@ -31,7 +33,6 @@ ThresholdField, ) from pandamesh.gmsh_geometry import add_distance_geometry, add_geometry -from pandamesh.mesher_base import MesherBase @contextmanager @@ -49,7 +50,7 @@ def gmsh_env(read_config_files: bool = True, interruptible: bool = True): gmsh.finalize() -class GmshMesher(MesherBase): +class GmshMesher: """ Wrapper for the python bindings to Gmsh. This class must be initialized with a geopandas GeoDataFrame containing at least one polygon, and a column @@ -684,6 +685,36 @@ def generate(self, finalize: bool = False) -> Tuple[FloatArray, IntArray]: self.finalize() return vertices, faces + def generate_geodataframe(self, finalize: bool = False) -> gpd.GeoDataFrame: + """ + Generate a mesh and return it as a geopandas GeoDataFrame. + + Parameters + ---------- + finalize: bool, default False + Automatically finalize after generating. + + Returns + ------- + mesh: geopandas.GeoDataFrame + """ + return to_geodataframe(*self.generate(finalize=finalize)) + + def generate_ugrid(self, finalize: bool = False) -> "xugrid.Ugrid2d": # type: ignore # noqa pragma: no cover + """ + Generate a mesh and return it as an xugrid Ugrid2d. + + Parameters + ---------- + finalize: bool, default False + Automatically finalize after generating. + + Returns + ------- + mesh: xugrid.Ugrid2d + """ + return to_ugrid(*self.generate(finalize=finalize)) + def write(self, path: Union[str, pathlib.Path]): """ Write a gmsh .msh file diff --git a/pandamesh/mesher_base.py b/pandamesh/mesher_base.py deleted file mode 100644 index 26fbc97..0000000 --- a/pandamesh/mesher_base.py +++ /dev/null @@ -1,32 +0,0 @@ -import abc -from typing import Tuple - -import geopandas as gpd - -from pandamesh.common import FloatArray, IntArray, to_geodataframe, to_ugrid - - -class MesherBase(abc.ABC): - @abc.abstractmethod - def generate(self) -> Tuple[FloatArray, IntArray]: - pass - - def generate_geodataframe(self) -> gpd.GeoDataFrame: - """ - Generate a mesh and return it as a geopandas GeoDataFrame. - - Returns - ------- - mesh: geopandas.GeoDataFrame - """ - return to_geodataframe(*self.generate()) - - def generate_ugrid(self) -> "xugrid.Ugrid2d": # type: ignore # noqa pragma: no cover - """ - Generate a mesh and return it as an xugrid Ugrid2d. - - Returns - ------- - mesh: xugrid.Ugrid2d - """ - return to_ugrid(*self.generate()) diff --git a/pandamesh/triangle_mesher.py b/pandamesh/triangle_mesher.py index 73742a6..b8c6e18 100644 --- a/pandamesh/triangle_mesher.py +++ b/pandamesh/triangle_mesher.py @@ -10,13 +10,14 @@ check_geodataframe, repr, separate_geodataframe, + to_geodataframe, + to_ugrid, ) -from pandamesh.mesher_base import MesherBase from pandamesh.triangle_enums import DelaunayAlgorithm from pandamesh.triangle_geometry import collect_geometry, polygon_holes -class TriangleMesher(MesherBase): +class TriangleMesher: """ Wrapper for the python bindings to Triangle. This class must be initialized with a geopandas GeoDataFrame containing at least one polygon, and a column @@ -213,3 +214,23 @@ def generate(self) -> Tuple[FloatArray, IntArray]: vertices[:, 0] += self._xoff vertices[:, 1] += self._yoff return vertices, result["triangles"] + + def generate_geodataframe(self) -> gpd.GeoDataFrame: + """ + Generate a mesh and return it as a geopandas GeoDataFrame. + + Returns + ------- + mesh: geopandas.GeoDataFrame + """ + return to_geodataframe(*self.generate()) + + def generate_ugrid(self) -> "xugrid.Ugrid2d": # type: ignore # noqa pragma: no cover + """ + Generate a mesh and return it as an xugrid Ugrid2d. + + Returns + ------- + mesh: xugrid.Ugrid2d + """ + return to_ugrid(*self.generate()) diff --git a/tests/test_meshers.py b/tests/test_meshers.py index 2df27bb..62da1b9 100644 --- a/tests/test_meshers.py +++ b/tests/test_meshers.py @@ -52,7 +52,7 @@ def test_singleton_gmsh_mesher(): mesher.generate() new_mesher.generate(finalize=True) - assert not new_mesher._intialized + assert not new_mesher._initialized def bounds(vertices):