tetgen


Nametetgen JSON
Version 0.6.5 PyPI version JSON
download
home_pagehttps://github.com/pyvista/tetgen
SummaryPython interface to tetgen
upload_time2024-08-16 19:25:16
maintainerNone
docs_urlNone
authorPyVista Developers
requires_python>=3.9
licenseNone
keywords tetgen
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            tetgen
======

.. image:: https://img.shields.io/pypi/v/tetgen.svg?logo=python&logoColor=white
   :target: https://pypi.org/project/tetgen/

This Python library is an interface to Hang Si's
`TetGen <https://github.com/ufz/tetgen>`__ C++ software.
This module combines speed of C++ with the portability and ease of installation
of Python along with integration to `PyVista <https://docs.pyvista.org>`_ for
3D visualization and analysis.
See the `TetGen <https://github.com/ufz/tetgen>`__ GitHub page for more details
on the original creator.

This Python library uses the C++ source from TetGen (version 1.6.0,
released on August 31, 2020) hosted at `libigl/tetgen <https://github.com/libigl/tetgen>`__.

Brief description from
`Weierstrass Institute Software <http://wias-berlin.de/software/index.jsp?id=TetGen&lang=1>`__:

    TetGen is a program to generate tetrahedral meshes of any 3D polyhedral domains.
    TetGen generates exact constrained Delaunay tetrahedralization, boundary
    conforming Delaunay meshes, and Voronoi partitions.

    TetGen provides various features to generate good quality and adaptive
    tetrahedral meshes suitable for numerical methods, such as finite element or
    finite volume methods. For more information of TetGen, please take a look at a
    list of `features <http://wias-berlin.de/software/tetgen/features.html>`__.

License (AGPL)
--------------

The original `TetGen <https://github.com/ufz/tetgen>`__ software is under AGPL
(see `LICENSE <https://github.com/pyvista/tetgen/blob/main/LICENSE>`_) and thus this
Python wrapper package must adopt that license as well.

Please look into the terms of this license before creating a dynamic link to this software
in your downstream package and understand commercial use limitations. We are not lawyers
and cannot provide any guidance on the terms of this license.

Please see https://www.gnu.org/licenses/agpl-3.0.en.html

Installation
------------

From `PyPI <https://pypi.python.org/pypi/tetgen>`__

.. code:: bash

    pip install tetgen

From source at `GitHub <https://github.com/pyvista/tetgen>`__

.. code:: bash

    git clone https://github.com/pyvista/tetgen
    cd tetgen
    pip install .


Basic Example
-------------
The features of the C++ TetGen software implemented in this module are
primarily focused on the tetrahedralization a manifold triangular
surface.  This basic example demonstrates how to tetrahedralize a
manifold surface and plot part of the mesh.

.. code:: python

    import pyvista as pv
    import tetgen
    import numpy as np
    pv.set_plot_theme('document')

    sphere = pv.Sphere()
    tet = tetgen.TetGen(sphere)
    tet.tetrahedralize(order=1, mindihedral=20, minratio=1.5)
    grid = tet.grid
    grid.plot(show_edges=True)

.. figure:: https://github.com/pyvista/tetgen/raw/main/doc/images/sphere.png
    :width: 300pt

    Tetrahedralized Sphere

Extract a portion of the sphere's tetrahedral mesh below the xy plane and plot
the mesh quality.

.. code:: python

    # get cell centroids
    cells = grid.cells.reshape(-1, 5)[:, 1:]
    cell_center = grid.points[cells].mean(1)

    # extract cells below the 0 xy plane
    mask = cell_center[:, 2] < 0
    cell_ind = mask.nonzero()[0]
    subgrid = grid.extract_cells(cell_ind)

    # advanced plotting
    plotter = pv.Plotter()
    plotter.add_mesh(subgrid, 'lightgrey', lighting=True, show_edges=True)
    plotter.add_mesh(sphere, 'r', 'wireframe')
    plotter.add_legend([[' Input Mesh ', 'r'],
                        [' Tessellated Mesh ', 'black']])
    plotter.show()

.. image:: https://github.com/pyvista/tetgen/raw/main/doc/images/sphere_subgrid.png

Here is the cell quality as computed according to the minimum scaled jacobian.

.. code::

   Compute cell quality

   >>> cell_qual = subgrid.compute_cell_quality()['CellQuality']

   Plot quality

   >>> subgrid.plot(scalars=cell_qual, stitle='Quality', cmap='bwr', clim=[0, 1],
   ...              flip_scalars=True, show_edges=True)

.. image:: https://github.com/pyvista/tetgen/raw/main/doc/images/sphere_qual.png


Using a Background Mesh
-----------------------
A background mesh in TetGen is used to define a mesh sizing function for
adaptive mesh refinement. This function informs TetGen of the desired element
size throughout the domain, allowing for detailed refinement in specific areas
without unnecessary densification of the entire mesh. Here's how to utilize a
background mesh in your TetGen workflow:

1. **Generate the Background Mesh**: Create a tetrahedral mesh that spans the
   entirety of your input piecewise linear complex (PLC) domain. This mesh will
   serve as the basis for your sizing function.

2. **Define the Sizing Function**: At the nodes of your background mesh, define
   the desired mesh sizes. This can be based on geometric features, proximity
   to areas of interest, or any criterion relevant to your simulation needs.

3. **Optional: Export the Background Mesh and Sizing Function**: Save your
   background mesh in the TetGen-readable `.node` and `.ele` formats, and the
   sizing function values in a `.mtr` file. These files will be used by TetGen
   to guide the mesh generation process.

4. **Run TetGen with the Background Mesh**: Invoke TetGen, specifying the
   background mesh. TetGen will adjust the mesh according to the provided
   sizing function, refining the mesh where smaller elements are desired.

**Full Example**

To illustrate, consider a scenario where you want to refine a mesh around a
specific region with increased detail. The following steps and code snippets
demonstrate how to accomplish this with TetGen and PyVista:

1. **Prepare Your PLC and Background Mesh**:

   .. code-block:: python

      import pyvista as pv
      import tetgen
      import numpy as np

      # Load or create your PLC
      sphere = pv.Sphere(theta_resolution=10, phi_resolution=10)

      # Generate a background mesh with desired resolution
      def generate_background_mesh(bounds, resolution=20, eps=1e-6):
          x_min, x_max, y_min, y_max, z_min, z_max = bounds
          grid_x, grid_y, grid_z = np.meshgrid(
              np.linspace(xmin - eps, xmax + eps, resolution),
              np.linspace(ymin - eps, ymax + eps, resolution),
              np.linspace(zmin - eps, zmax + eps, resolution),
              indexing="ij",
          )
          return pv.StructuredGrid(grid_x, grid_y, grid_z).triangulate()

      bg_mesh = generate_background_mesh(sphere.bounds)

2. **Define the Sizing Function and Write to Disk**:

   .. code-block:: python

      # Define sizing function based on proximity to a point of interest
      def sizing_function(points, focus_point=np.array([0, 0, 0]), max_size=1.0, min_size=0.1):
          distances = np.linalg.norm(points - focus_point, axis=1)
          return np.clip(max_size - distances, min_size, max_size)

      bg_mesh.point_data['target_size'] = sizing_function(bg_mesh.points)

      # Optionally write out the background mesh
      def write_background_mesh(background_mesh, out_stem):
          """Write a background mesh to a file.

          This writes the mesh in tetgen format (X.b.node, X.b.ele) and a X.b.mtr file
          containing the target size for each node in the background mesh.
          """
          mtr_content = [f"{background_mesh.n_points} 1"]
          target_size = background_mesh.point_data["target_size"]
          for i in range(background_mesh.n_points):
              mtr_content.append(f"{target_size[i]:.8f}")

          pv.save_meshio(f"{out_stem}.node", background_mesh)
          mtr_file = f"{out_stem}.mtr"

          with open(mtr_file, "w") as f:
              f.write("\n".join(mtr_content))

      write_background_mesh(bg_mesh, 'bgmesh.b')

3. **Use TetGen with the Background Mesh**:


   Directly pass the background mesh from PyVista to ``tetgen``:

   .. code-block:: python

      tet_kwargs = dict(order=1, mindihedral=20, minratio=1.5)
      tet = tetgen.TetGen(mesh)
      tet.tetrahedralize(bgmesh=bgmesh, **tet_kwargs)
      refined_mesh = tet.grid

   Alternatively, use the background mesh files.

   .. code-block:: python

      tet = tetgen.TetGen(sphere)
      tet.tetrahedralize(bgmeshfilename='bgmesh.b', **tet_kwargs)
      refined_mesh = tet.grid


This example demonstrates generating a background mesh, defining a spatially
varying sizing function, and using this background mesh to guide TetGen in
refining a PLC. By following these steps, you can achieve adaptive mesh
refinement tailored to your specific simulation requirements.


Acknowledgments
---------------
Software was originally created by Hang Si based on work published in
`TetGen, a Delaunay-Based Quality Tetrahedral Mesh Generator <https://dl.acm.org/citation.cfm?doid=2629697>`__.

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/pyvista/tetgen",
    "name": "tetgen",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.9",
    "maintainer_email": null,
    "keywords": "TetGen",
    "author": "PyVista Developers",
    "author_email": "info@pyvista.org",
    "download_url": "https://files.pythonhosted.org/packages/2a/44/7b2c2467cc56f59a1e5a7de1f4b8a7c7d6a7a3fcf769cd334badcb8a99de/tetgen-0.6.5.tar.gz",
    "platform": null,
    "description": "tetgen\n======\n\n.. image:: https://img.shields.io/pypi/v/tetgen.svg?logo=python&logoColor=white\n   :target: https://pypi.org/project/tetgen/\n\nThis Python library is an interface to Hang Si's\n`TetGen <https://github.com/ufz/tetgen>`__ C++ software.\nThis module combines speed of C++ with the portability and ease of installation\nof Python along with integration to `PyVista <https://docs.pyvista.org>`_ for\n3D visualization and analysis.\nSee the `TetGen <https://github.com/ufz/tetgen>`__ GitHub page for more details\non the original creator.\n\nThis Python library uses the C++ source from TetGen (version 1.6.0,\nreleased on August 31, 2020) hosted at `libigl/tetgen <https://github.com/libigl/tetgen>`__.\n\nBrief description from\n`Weierstrass Institute Software <http://wias-berlin.de/software/index.jsp?id=TetGen&lang=1>`__:\n\n    TetGen is a program to generate tetrahedral meshes of any 3D polyhedral domains.\n    TetGen generates exact constrained Delaunay tetrahedralization, boundary\n    conforming Delaunay meshes, and Voronoi partitions.\n\n    TetGen provides various features to generate good quality and adaptive\n    tetrahedral meshes suitable for numerical methods, such as finite element or\n    finite volume methods. For more information of TetGen, please take a look at a\n    list of `features <http://wias-berlin.de/software/tetgen/features.html>`__.\n\nLicense (AGPL)\n--------------\n\nThe original `TetGen <https://github.com/ufz/tetgen>`__ software is under AGPL\n(see `LICENSE <https://github.com/pyvista/tetgen/blob/main/LICENSE>`_) and thus this\nPython wrapper package must adopt that license as well.\n\nPlease look into the terms of this license before creating a dynamic link to this software\nin your downstream package and understand commercial use limitations. We are not lawyers\nand cannot provide any guidance on the terms of this license.\n\nPlease see https://www.gnu.org/licenses/agpl-3.0.en.html\n\nInstallation\n------------\n\nFrom `PyPI <https://pypi.python.org/pypi/tetgen>`__\n\n.. code:: bash\n\n    pip install tetgen\n\nFrom source at `GitHub <https://github.com/pyvista/tetgen>`__\n\n.. code:: bash\n\n    git clone https://github.com/pyvista/tetgen\n    cd tetgen\n    pip install .\n\n\nBasic Example\n-------------\nThe features of the C++ TetGen software implemented in this module are\nprimarily focused on the tetrahedralization a manifold triangular\nsurface.  This basic example demonstrates how to tetrahedralize a\nmanifold surface and plot part of the mesh.\n\n.. code:: python\n\n    import pyvista as pv\n    import tetgen\n    import numpy as np\n    pv.set_plot_theme('document')\n\n    sphere = pv.Sphere()\n    tet = tetgen.TetGen(sphere)\n    tet.tetrahedralize(order=1, mindihedral=20, minratio=1.5)\n    grid = tet.grid\n    grid.plot(show_edges=True)\n\n.. figure:: https://github.com/pyvista/tetgen/raw/main/doc/images/sphere.png\n    :width: 300pt\n\n    Tetrahedralized Sphere\n\nExtract a portion of the sphere's tetrahedral mesh below the xy plane and plot\nthe mesh quality.\n\n.. code:: python\n\n    # get cell centroids\n    cells = grid.cells.reshape(-1, 5)[:, 1:]\n    cell_center = grid.points[cells].mean(1)\n\n    # extract cells below the 0 xy plane\n    mask = cell_center[:, 2] < 0\n    cell_ind = mask.nonzero()[0]\n    subgrid = grid.extract_cells(cell_ind)\n\n    # advanced plotting\n    plotter = pv.Plotter()\n    plotter.add_mesh(subgrid, 'lightgrey', lighting=True, show_edges=True)\n    plotter.add_mesh(sphere, 'r', 'wireframe')\n    plotter.add_legend([[' Input Mesh ', 'r'],\n                        [' Tessellated Mesh ', 'black']])\n    plotter.show()\n\n.. image:: https://github.com/pyvista/tetgen/raw/main/doc/images/sphere_subgrid.png\n\nHere is the cell quality as computed according to the minimum scaled jacobian.\n\n.. code::\n\n   Compute cell quality\n\n   >>> cell_qual = subgrid.compute_cell_quality()['CellQuality']\n\n   Plot quality\n\n   >>> subgrid.plot(scalars=cell_qual, stitle='Quality', cmap='bwr', clim=[0, 1],\n   ...              flip_scalars=True, show_edges=True)\n\n.. image:: https://github.com/pyvista/tetgen/raw/main/doc/images/sphere_qual.png\n\n\nUsing a Background Mesh\n-----------------------\nA background mesh in TetGen is used to define a mesh sizing function for\nadaptive mesh refinement. This function informs TetGen of the desired element\nsize throughout the domain, allowing for detailed refinement in specific areas\nwithout unnecessary densification of the entire mesh. Here's how to utilize a\nbackground mesh in your TetGen workflow:\n\n1. **Generate the Background Mesh**: Create a tetrahedral mesh that spans the\n   entirety of your input piecewise linear complex (PLC) domain. This mesh will\n   serve as the basis for your sizing function.\n\n2. **Define the Sizing Function**: At the nodes of your background mesh, define\n   the desired mesh sizes. This can be based on geometric features, proximity\n   to areas of interest, or any criterion relevant to your simulation needs.\n\n3. **Optional: Export the Background Mesh and Sizing Function**: Save your\n   background mesh in the TetGen-readable `.node` and `.ele` formats, and the\n   sizing function values in a `.mtr` file. These files will be used by TetGen\n   to guide the mesh generation process.\n\n4. **Run TetGen with the Background Mesh**: Invoke TetGen, specifying the\n   background mesh. TetGen will adjust the mesh according to the provided\n   sizing function, refining the mesh where smaller elements are desired.\n\n**Full Example**\n\nTo illustrate, consider a scenario where you want to refine a mesh around a\nspecific region with increased detail. The following steps and code snippets\ndemonstrate how to accomplish this with TetGen and PyVista:\n\n1. **Prepare Your PLC and Background Mesh**:\n\n   .. code-block:: python\n\n      import pyvista as pv\n      import tetgen\n      import numpy as np\n\n      # Load or create your PLC\n      sphere = pv.Sphere(theta_resolution=10, phi_resolution=10)\n\n      # Generate a background mesh with desired resolution\n      def generate_background_mesh(bounds, resolution=20, eps=1e-6):\n          x_min, x_max, y_min, y_max, z_min, z_max = bounds\n          grid_x, grid_y, grid_z = np.meshgrid(\n              np.linspace(xmin - eps, xmax + eps, resolution),\n              np.linspace(ymin - eps, ymax + eps, resolution),\n              np.linspace(zmin - eps, zmax + eps, resolution),\n              indexing=\"ij\",\n          )\n          return pv.StructuredGrid(grid_x, grid_y, grid_z).triangulate()\n\n      bg_mesh = generate_background_mesh(sphere.bounds)\n\n2. **Define the Sizing Function and Write to Disk**:\n\n   .. code-block:: python\n\n      # Define sizing function based on proximity to a point of interest\n      def sizing_function(points, focus_point=np.array([0, 0, 0]), max_size=1.0, min_size=0.1):\n          distances = np.linalg.norm(points - focus_point, axis=1)\n          return np.clip(max_size - distances, min_size, max_size)\n\n      bg_mesh.point_data['target_size'] = sizing_function(bg_mesh.points)\n\n      # Optionally write out the background mesh\n      def write_background_mesh(background_mesh, out_stem):\n          \"\"\"Write a background mesh to a file.\n\n          This writes the mesh in tetgen format (X.b.node, X.b.ele) and a X.b.mtr file\n          containing the target size for each node in the background mesh.\n          \"\"\"\n          mtr_content = [f\"{background_mesh.n_points} 1\"]\n          target_size = background_mesh.point_data[\"target_size\"]\n          for i in range(background_mesh.n_points):\n              mtr_content.append(f\"{target_size[i]:.8f}\")\n\n          pv.save_meshio(f\"{out_stem}.node\", background_mesh)\n          mtr_file = f\"{out_stem}.mtr\"\n\n          with open(mtr_file, \"w\") as f:\n              f.write(\"\\n\".join(mtr_content))\n\n      write_background_mesh(bg_mesh, 'bgmesh.b')\n\n3. **Use TetGen with the Background Mesh**:\n\n\n   Directly pass the background mesh from PyVista to ``tetgen``:\n\n   .. code-block:: python\n\n      tet_kwargs = dict(order=1, mindihedral=20, minratio=1.5)\n      tet = tetgen.TetGen(mesh)\n      tet.tetrahedralize(bgmesh=bgmesh, **tet_kwargs)\n      refined_mesh = tet.grid\n\n   Alternatively, use the background mesh files.\n\n   .. code-block:: python\n\n      tet = tetgen.TetGen(sphere)\n      tet.tetrahedralize(bgmeshfilename='bgmesh.b', **tet_kwargs)\n      refined_mesh = tet.grid\n\n\nThis example demonstrates generating a background mesh, defining a spatially\nvarying sizing function, and using this background mesh to guide TetGen in\nrefining a PLC. By following these steps, you can achieve adaptive mesh\nrefinement tailored to your specific simulation requirements.\n\n\nAcknowledgments\n---------------\nSoftware was originally created by Hang Si based on work published in\n`TetGen, a Delaunay-Based Quality Tetrahedral Mesh Generator <https://dl.acm.org/citation.cfm?doid=2629697>`__.\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "Python interface to tetgen",
    "version": "0.6.5",
    "project_urls": {
        "Homepage": "https://github.com/pyvista/tetgen"
    },
    "split_keywords": [
        "tetgen"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "72f0926b12a25fcd6cd208b7934c4dd38ac630755b06de2986094a7f033e3109",
                "md5": "66bb96a5af7feda93919b07df58aec71",
                "sha256": "b89cc99b81cad302a8df952d0fba5baa72893439cb471d61b441cc6a1342ddbf"
            },
            "downloads": -1,
            "filename": "tetgen-0.6.5-cp310-cp310-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "66bb96a5af7feda93919b07df58aec71",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 485570,
            "upload_time": "2024-08-16T19:24:46",
            "upload_time_iso_8601": "2024-08-16T19:24:46.994251Z",
            "url": "https://files.pythonhosted.org/packages/72/f0/926b12a25fcd6cd208b7934c4dd38ac630755b06de2986094a7f033e3109/tetgen-0.6.5-cp310-cp310-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "75039ccf5fc1d8aeecbd172f32cd819939c2f044bc06579eb8d83b996d9ab0ff",
                "md5": "5d5a811f82894a5f9fdcdd53f26ddc6d",
                "sha256": "054a6aaab142c62c73e9567498fc2facf8db274cdf71420e675d8133773b475c"
            },
            "downloads": -1,
            "filename": "tetgen-0.6.5-cp310-cp310-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "5d5a811f82894a5f9fdcdd53f26ddc6d",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 440000,
            "upload_time": "2024-08-16T19:24:48",
            "upload_time_iso_8601": "2024-08-16T19:24:48.677052Z",
            "url": "https://files.pythonhosted.org/packages/75/03/9ccf5fc1d8aeecbd172f32cd819939c2f044bc06579eb8d83b996d9ab0ff/tetgen-0.6.5-cp310-cp310-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "241367b1634127adcc42394a45fc430fcb331f0cebe70b1f93efd6e37fd04e12",
                "md5": "3fc5715056c0c13a6e404c0236dee2f8",
                "sha256": "e8c16c70c7453e900dd88efa5cd528ce3aae2c83cda8ad02a0eadad7fc64532d"
            },
            "downloads": -1,
            "filename": "tetgen-0.6.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "3fc5715056c0c13a6e404c0236dee2f8",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 2065948,
            "upload_time": "2024-08-16T19:24:50",
            "upload_time_iso_8601": "2024-08-16T19:24:50.947637Z",
            "url": "https://files.pythonhosted.org/packages/24/13/67b1634127adcc42394a45fc430fcb331f0cebe70b1f93efd6e37fd04e12/tetgen-0.6.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "46126b2ff06c3f5ae54e30b9d870afb8b786996f5603e5e8c92cc1543afd7cf5",
                "md5": "a8b03c9888575dec49dec019779344cc",
                "sha256": "c05c60f9c5c5545ea9b4c5e2cb0a25a46e35c3e6c9075207844303039b18a720"
            },
            "downloads": -1,
            "filename": "tetgen-0.6.5-cp310-cp310-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "a8b03c9888575dec49dec019779344cc",
            "packagetype": "bdist_wheel",
            "python_version": "cp310",
            "requires_python": ">=3.9",
            "size": 348528,
            "upload_time": "2024-08-16T19:24:52",
            "upload_time_iso_8601": "2024-08-16T19:24:52.870072Z",
            "url": "https://files.pythonhosted.org/packages/46/12/6b2ff06c3f5ae54e30b9d870afb8b786996f5603e5e8c92cc1543afd7cf5/tetgen-0.6.5-cp310-cp310-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "3a6657dd5b3e9bdcadbfbaa21b78c71c84768c522ab3c53b0b4a95c028befe3d",
                "md5": "73392e80006a2d753bcaac27ad752128",
                "sha256": "ad53c93741618456f980b6203272a6869d8d66631aa52063f6ba8c328d183ffb"
            },
            "downloads": -1,
            "filename": "tetgen-0.6.5-cp311-cp311-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "73392e80006a2d753bcaac27ad752128",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 485824,
            "upload_time": "2024-08-16T19:24:54",
            "upload_time_iso_8601": "2024-08-16T19:24:54.686257Z",
            "url": "https://files.pythonhosted.org/packages/3a/66/57dd5b3e9bdcadbfbaa21b78c71c84768c522ab3c53b0b4a95c028befe3d/tetgen-0.6.5-cp311-cp311-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "70081d880d9c0ce18052c4878f55758c428caa3346eb0d044bdb55984e840f9c",
                "md5": "e52edba88dd40903323ab6b95f3d6d47",
                "sha256": "b330b350da447a39b11a171f9f215a1a634ac825fe07c75b4959a41667a63a37"
            },
            "downloads": -1,
            "filename": "tetgen-0.6.5-cp311-cp311-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "e52edba88dd40903323ab6b95f3d6d47",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 440144,
            "upload_time": "2024-08-16T19:24:56",
            "upload_time_iso_8601": "2024-08-16T19:24:56.605718Z",
            "url": "https://files.pythonhosted.org/packages/70/08/1d880d9c0ce18052c4878f55758c428caa3346eb0d044bdb55984e840f9c/tetgen-0.6.5-cp311-cp311-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "6f7833cc40456a5b8e657e15cac5bbb68902bc7b8ee8be6927a43640a01f6b30",
                "md5": "0aa2c57e5f9f5b68b3b8078fdbd51820",
                "sha256": "4287f8af1bd82bd1e2e3d6517b0c54fd01b7e0d82889884e72d3b04223232066"
            },
            "downloads": -1,
            "filename": "tetgen-0.6.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "0aa2c57e5f9f5b68b3b8078fdbd51820",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 2111167,
            "upload_time": "2024-08-16T19:24:58",
            "upload_time_iso_8601": "2024-08-16T19:24:58.679373Z",
            "url": "https://files.pythonhosted.org/packages/6f/78/33cc40456a5b8e657e15cac5bbb68902bc7b8ee8be6927a43640a01f6b30/tetgen-0.6.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "559149b24a1d7503dbf06a7f91082a25288f5cc09754d3e545db85dd172c656f",
                "md5": "f21a0a0e35c86a885e36e68a20b626c5",
                "sha256": "2888169d8f721a29cf9ab624b81554fe7fe323352804aa47518ed0453b35c314"
            },
            "downloads": -1,
            "filename": "tetgen-0.6.5-cp311-cp311-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "f21a0a0e35c86a885e36e68a20b626c5",
            "packagetype": "bdist_wheel",
            "python_version": "cp311",
            "requires_python": ">=3.9",
            "size": 348685,
            "upload_time": "2024-08-16T19:25:00",
            "upload_time_iso_8601": "2024-08-16T19:25:00.213485Z",
            "url": "https://files.pythonhosted.org/packages/55/91/49b24a1d7503dbf06a7f91082a25288f5cc09754d3e545db85dd172c656f/tetgen-0.6.5-cp311-cp311-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "07f2a8c6ebb18a0b6bfa7cc157e9410ef5cc943f7ad1c3bcf5fe00c8951f74ce",
                "md5": "a9168dc8cb24e8e7d55df318d430be3f",
                "sha256": "938f851e5ff5e092404600493e92bb8a3f4102b8dbfa033cebfb18566f70957d"
            },
            "downloads": -1,
            "filename": "tetgen-0.6.5-cp312-cp312-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "a9168dc8cb24e8e7d55df318d430be3f",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 486786,
            "upload_time": "2024-08-16T19:25:01",
            "upload_time_iso_8601": "2024-08-16T19:25:01.542629Z",
            "url": "https://files.pythonhosted.org/packages/07/f2/a8c6ebb18a0b6bfa7cc157e9410ef5cc943f7ad1c3bcf5fe00c8951f74ce/tetgen-0.6.5-cp312-cp312-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "145e2edafb4024900a47cfa3a5880d2c0363f0000e9f08c4033756a80ff55d98",
                "md5": "2e8aa0bed80bb710e082299297f5b0a8",
                "sha256": "712dce7fb72f9e395c301fce7fca136eec9ffbd3c31e5dac85e6a8bd2e36d2bd"
            },
            "downloads": -1,
            "filename": "tetgen-0.6.5-cp312-cp312-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "2e8aa0bed80bb710e082299297f5b0a8",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 440687,
            "upload_time": "2024-08-16T19:25:03",
            "upload_time_iso_8601": "2024-08-16T19:25:03.736583Z",
            "url": "https://files.pythonhosted.org/packages/14/5e/2edafb4024900a47cfa3a5880d2c0363f0000e9f08c4033756a80ff55d98/tetgen-0.6.5-cp312-cp312-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "b28bcf4ce3ba629388cfd41a5d5f335946c1f99c061e9ab578afee81a0bca3a0",
                "md5": "bf56af16834bed8d6e01c1f7bf06295c",
                "sha256": "e224e35953ca2ca8fc5e95c038d81a4ac73aa9eb726130ab3c66fda721865c1c"
            },
            "downloads": -1,
            "filename": "tetgen-0.6.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "bf56af16834bed8d6e01c1f7bf06295c",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 2112279,
            "upload_time": "2024-08-16T19:25:05",
            "upload_time_iso_8601": "2024-08-16T19:25:05.600341Z",
            "url": "https://files.pythonhosted.org/packages/b2/8b/cf4ce3ba629388cfd41a5d5f335946c1f99c061e9ab578afee81a0bca3a0/tetgen-0.6.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "592ef1acd57edb0e857c567ab1b618234e9de64354fc60dfd1996fc8ea61e14f",
                "md5": "d3dc70ed2b7bf11b5ee09d1a72cdeedf",
                "sha256": "d50ff029172ca94c20e9b0e8f6cd604b4f8f9156834205f404a2e9ec3747c0d1"
            },
            "downloads": -1,
            "filename": "tetgen-0.6.5-cp312-cp312-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "d3dc70ed2b7bf11b5ee09d1a72cdeedf",
            "packagetype": "bdist_wheel",
            "python_version": "cp312",
            "requires_python": ">=3.9",
            "size": 349258,
            "upload_time": "2024-08-16T19:25:07",
            "upload_time_iso_8601": "2024-08-16T19:25:07.457442Z",
            "url": "https://files.pythonhosted.org/packages/59/2e/f1acd57edb0e857c567ab1b618234e9de64354fc60dfd1996fc8ea61e14f/tetgen-0.6.5-cp312-cp312-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "3e6d9740bc10a8fc985e11833ef9b952e8b90ccd3495815f7b211050a9352946",
                "md5": "bcc6e29dd9d18b083156985a7687e25d",
                "sha256": "d664a5f2e7d39b7e59fcfa62d68f6b357f1ccf2820ebd72b08ddbf3b92808f5a"
            },
            "downloads": -1,
            "filename": "tetgen-0.6.5-cp39-cp39-macosx_10_9_x86_64.whl",
            "has_sig": false,
            "md5_digest": "bcc6e29dd9d18b083156985a7687e25d",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 486144,
            "upload_time": "2024-08-16T19:25:09",
            "upload_time_iso_8601": "2024-08-16T19:25:09.308897Z",
            "url": "https://files.pythonhosted.org/packages/3e/6d/9740bc10a8fc985e11833ef9b952e8b90ccd3495815f7b211050a9352946/tetgen-0.6.5-cp39-cp39-macosx_10_9_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "360dabb2e346533c8c2aefb3cd062aad4453c78cccb72a03f88001c3239e7222",
                "md5": "966faa45c0d547b912ec355580824b1c",
                "sha256": "1ce5285bb6504afb12fe9e8d82505a6692c238acb7aee50757743b6934693ecd"
            },
            "downloads": -1,
            "filename": "tetgen-0.6.5-cp39-cp39-macosx_11_0_arm64.whl",
            "has_sig": false,
            "md5_digest": "966faa45c0d547b912ec355580824b1c",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 440494,
            "upload_time": "2024-08-16T19:25:11",
            "upload_time_iso_8601": "2024-08-16T19:25:11.377801Z",
            "url": "https://files.pythonhosted.org/packages/36/0d/abb2e346533c8c2aefb3cd062aad4453c78cccb72a03f88001c3239e7222/tetgen-0.6.5-cp39-cp39-macosx_11_0_arm64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "f573fc68a41ed0a5bbe32290f75f9fcaeb3f04b3b86b1f257b0657f06898b282",
                "md5": "2b7854d745c47431f92d088339d7bd26",
                "sha256": "0cad541abbc6a20b8b36e161067ea236ce865c88264bb3f517bc4c2e22a4de17"
            },
            "downloads": -1,
            "filename": "tetgen-0.6.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "has_sig": false,
            "md5_digest": "2b7854d745c47431f92d088339d7bd26",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 2069046,
            "upload_time": "2024-08-16T19:25:13",
            "upload_time_iso_8601": "2024-08-16T19:25:13.289135Z",
            "url": "https://files.pythonhosted.org/packages/f5/73/fc68a41ed0a5bbe32290f75f9fcaeb3f04b3b86b1f257b0657f06898b282/tetgen-0.6.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "211b59796f9bf20fae4b09fec564d62ee0f55b07413e8817a364c20a3a4adc85",
                "md5": "2cb301a29d34ed24b0ec3c9bea65a311",
                "sha256": "1398bb2d21374ddc828fca84dc66df9537641782b58be30942994fe7614a8aac"
            },
            "downloads": -1,
            "filename": "tetgen-0.6.5-cp39-cp39-win_amd64.whl",
            "has_sig": false,
            "md5_digest": "2cb301a29d34ed24b0ec3c9bea65a311",
            "packagetype": "bdist_wheel",
            "python_version": "cp39",
            "requires_python": ">=3.9",
            "size": 349064,
            "upload_time": "2024-08-16T19:25:14",
            "upload_time_iso_8601": "2024-08-16T19:25:14.813977Z",
            "url": "https://files.pythonhosted.org/packages/21/1b/59796f9bf20fae4b09fec564d62ee0f55b07413e8817a364c20a3a4adc85/tetgen-0.6.5-cp39-cp39-win_amd64.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "2a447b2c2467cc56f59a1e5a7de1f4b8a7c7d6a7a3fcf769cd334badcb8a99de",
                "md5": "89b664ada960668607ef85fd07e3eb01",
                "sha256": "56855ccdbca98624c7f3db27ea020d3c7ea51baaa43b1c212b6a79b4ef4a9f35"
            },
            "downloads": -1,
            "filename": "tetgen-0.6.5.tar.gz",
            "has_sig": false,
            "md5_digest": "89b664ada960668607ef85fd07e3eb01",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.9",
            "size": 507221,
            "upload_time": "2024-08-16T19:25:16",
            "upload_time_iso_8601": "2024-08-16T19:25:16.833443Z",
            "url": "https://files.pythonhosted.org/packages/2a/44/7b2c2467cc56f59a1e5a7de1f4b8a7c7d6a7a3fcf769cd334badcb8a99de/tetgen-0.6.5.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-08-16 19:25:16",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "pyvista",
    "github_project": "tetgen",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [],
    "lcname": "tetgen"
}
        
Elapsed time: 0.28940s