{"id":46293336,"url":"https://github.com/pyvista/tetgen","last_synced_at":"2026-03-10T07:08:16.644Z","repository":{"id":44987467,"uuid":"137571289","full_name":"pyvista/tetgen","owner":"pyvista","description":"A Python interface to the C++ TetGen library to generate tetrahedral meshes of any 3D polyhedral domains","archived":false,"fork":false,"pushed_at":"2026-01-24T03:34:47.000Z","size":125586,"stargazers_count":283,"open_issues_count":22,"forks_count":36,"subscribers_count":12,"default_branch":"main","last_synced_at":"2026-01-24T09:44:09.725Z","etag":null,"topics":["3d","mesh","mesh-generation","tetrahedral-meshing"],"latest_commit_sha":null,"homepage":"http://tetgen.pyvista.org","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/pyvista.png","metadata":{"files":{"readme":"README.rst","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2018-06-16T10:04:57.000Z","updated_at":"2026-01-23T12:37:35.000Z","dependencies_parsed_at":"2024-02-24T23:26:23.419Z","dependency_job_id":"7552e31d-c212-4ab8-ae3b-3d19a7c851d4","html_url":"https://github.com/pyvista/tetgen","commit_stats":{"total_commits":86,"total_committers":7,"mean_commits":"12.285714285714286","dds":"0.33720930232558144","last_synced_commit":"957759d9c540b635e1745e90905e1558a96be31b"},"previous_names":[],"tags_count":31,"template":false,"template_full_name":null,"purl":"pkg:github/pyvista/tetgen","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyvista%2Ftetgen","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyvista%2Ftetgen/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyvista%2Ftetgen/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyvista%2Ftetgen/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/pyvista","download_url":"https://codeload.github.com/pyvista/tetgen/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/pyvista%2Ftetgen/sbom","scorecard":{"id":752497,"data":{"date":"2025-08-11","repo":{"name":"github.com/pyvista/tetgen","commit":"5d98af20a312675dd11c72ff2db5e3c6bc3f190b"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":4.9,"checks":[{"name":"Maintained","score":5,"reason":"6 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 5","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Code-Review","score":7,"reason":"Found 10/14 approved changesets -- score normalized to 7","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: jobLevel 'contents' permission set to 'write': .github/workflows/build-and-deploy.yml:74","Warn: no topLevel permission defined: .github/workflows/build-and-deploy.yml:1","Warn: no topLevel permission defined: .github/workflows/docbuild.yml:1"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build-and-deploy.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/pyvista/tetgen/build-and-deploy.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build-and-deploy.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/pyvista/tetgen/build-and-deploy.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build-and-deploy.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/pyvista/tetgen/build-and-deploy.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build-and-deploy.yml:39: update your workflow using https://app.stepsecurity.io/secureworkflow/pyvista/tetgen/build-and-deploy.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build-and-deploy.yml:42: update your workflow using https://app.stepsecurity.io/secureworkflow/pyvista/tetgen/build-and-deploy.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build-and-deploy.yml:58: update your workflow using https://app.stepsecurity.io/secureworkflow/pyvista/tetgen/build-and-deploy.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/build-and-deploy.yml:76: update your workflow using https://app.stepsecurity.io/secureworkflow/pyvista/tetgen/build-and-deploy.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build-and-deploy.yml:83: update your workflow using https://app.stepsecurity.io/secureworkflow/pyvista/tetgen/build-and-deploy.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/build-and-deploy.yml:85: update your workflow using https://app.stepsecurity.io/secureworkflow/pyvista/tetgen/build-and-deploy.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/docbuild.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/pyvista/tetgen/docbuild.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/docbuild.yml:24: update your workflow using https://app.stepsecurity.io/secureworkflow/pyvista/tetgen/docbuild.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/docbuild.yml:32: update your workflow using https://app.stepsecurity.io/secureworkflow/pyvista/tetgen/docbuild.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/docbuild.yml:43: update your workflow using https://app.stepsecurity.io/secureworkflow/pyvista/tetgen/docbuild.yml/main?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/build-and-deploy.yml:51","Warn: pipCommand not pinned by hash: .github/workflows/build-and-deploy.yml:54","Warn: pipCommand not pinned by hash: .github/workflows/docbuild.yml:36","Warn: pipCommand not pinned by hash: .github/workflows/docbuild.yml:39","Info:   0 out of   8 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   5 third-party GitHubAction dependencies pinned","Info:   0 out of   4 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"License","score":9,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Warn: project license file does not contain an FSF or OSI license."],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":0,"reason":"Project has not signed or included provenance with any releases.","details":["Warn: release artifact v0.6.7 not signed: https://api.github.com/repos/pyvista/tetgen/releases/235710002","Warn: release artifact v0.6.6 not signed: https://api.github.com/repos/pyvista/tetgen/releases/229578798","Warn: release artifact v0.6.5 not signed: https://api.github.com/repos/pyvista/tetgen/releases/170642754","Warn: release artifact v0.6.4 not signed: https://api.github.com/repos/pyvista/tetgen/releases/143566191","Warn: release artifact v0.6.7 does not have provenance: https://api.github.com/repos/pyvista/tetgen/releases/235710002","Warn: release artifact v0.6.6 does not have provenance: https://api.github.com/repos/pyvista/tetgen/releases/229578798","Warn: release artifact v0.6.5 does not have provenance: https://api.github.com/repos/pyvista/tetgen/releases/170642754","Warn: release artifact v0.6.4 does not have provenance: https://api.github.com/repos/pyvista/tetgen/releases/143566191"],"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/build-and-deploy.yml:64"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 30 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-22T20:44:37.998Z","repository_id":44987467,"created_at":"2025-08-22T20:44:37.998Z","updated_at":"2025-08-22T20:44:37.998Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":30076935,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-03-04T08:01:56.766Z","status":"ssl_error","status_checked_at":"2026-03-04T08:00:42.919Z","response_time":59,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["3d","mesh","mesh-generation","tetrahedral-meshing"],"created_at":"2026-03-04T09:02:28.539Z","updated_at":"2026-03-10T07:08:16.635Z","avatar_url":"https://github.com/pyvista.png","language":"C++","funding_links":[],"categories":["Mesh Generation"],"sub_categories":[],"readme":"########\n tetgen\n########\n\n.. image:: https://img.shields.io/pypi/v/tetgen.svg?logo=python\u0026logoColor=white\n   :target: https://pypi.org/project/tetgen/\n\nThis Python library is an interface to Hang Si's `TetGen\n\u003chttps://github.com/ufz/tetgen\u003e`__ C++ software. This module combines\nspeed of C++ with the portability and ease of installation of Python\nalong with integration to `PyVista \u003chttps://docs.pyvista.org\u003e`_ for 3D\nvisualization and analysis. See the `TetGen\n\u003chttps://github.com/ufz/tetgen\u003e`__ GitHub page for more details on the\nunderlying software.\n\nThis Python library uses the C++ source from TetGen (version 1.6.0,\nreleased on August 31, 2020) hosted at `libigl/tetgen\n\u003chttps://github.com/libigl/tetgen\u003e`__. Some modifications have been made\ncorrect minor bugs.\n\nBrief description from `Weierstrass Institute Software\n\u003chttp://wias-berlin.de/software/index.jsp?id=TetGen\u0026lang=1\u003e`__:\n\n   TetGen is a program to generate tetrahedral meshes of any 3D\n   polyhedral domains. TetGen generates exact constrained Delaunay\n   tetrahedralization, boundary conforming Delaunay meshes, and Voronoi\n   partitions.\n\n   TetGen provides various features to generate good quality and\n   adaptive tetrahedral meshes suitable for numerical methods, such as\n   finite element or finite volume methods. For more information of\n   TetGen, please take a look at a list of `features\n   \u003chttp://wias-berlin.de/software/tetgen/features.html\u003e`__.\n\n**************\n Installation\n**************\n\nFrom `PyPI \u003chttps://pypi.python.org/pypi/tetgen\u003e`__\n\n.. code:: bash\n\n   pip install tetgen\n\nFrom source at `GitHub \u003chttps://github.com/pyvista/tetgen\u003e`__\n\n.. code:: bash\n\n   git clone https://github.com/pyvista/tetgen\n   cd tetgen\n   pip install .\n\n***************\n Basic Example\n***************\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\nand plot the 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] \u003c 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\njacobian.\n\n.. code::\n\n   Compute cell quality\n\n   \u003e\u003e\u003e cell_qual = subgrid.cell_quality()['scaled_jacobian']\n\n   Plot quality\n\n   \u003e\u003e\u003e 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*************************\n Using a Background Mesh\n*************************\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\nelement size throughout the domain, allowing for detailed refinement in\nspecific areas without unnecessary densification of the entire mesh.\nHere's how to utilize a background mesh in your TetGen workflow:\n\n#. **Generate the Background Mesh**: Create a tetrahedral mesh that\n   spans the entirety of your input piecewise linear complex (PLC)\n   domain. This mesh will serve as the basis for your sizing function.\n\n#. **Define the Sizing Function**: At the nodes of your background mesh,\n   define the desired mesh sizes. This can be based on geometric\n   features, proximity to areas of interest, or any criterion relevant\n   to your simulation needs.\n\n#. **Optional: Export the Background Mesh and Sizing Function**: Save\n   your background mesh in the TetGen-readable `.node` and `.ele`\n   formats, and the sizing function values in a `.mtr` file. These files\n   will be used by TetGen to guide the mesh generation process.\n\n#. **Run TetGen with the Background Mesh**: Invoke TetGen, specifying\n   the background mesh. TetGen will adjust the mesh according to the\n   provided sizing function, refining the mesh where smaller elements\n   are desired.\n\n**Full Example**\n\nTo illustrate, consider a scenario where you want to refine a mesh\naround a specific region with increased detail. The following steps and\ncode snippets demonstrate how to accomplish this with TetGen and\nPyVista:\n\n#. **Prepare Your PLC and Background Mesh**:\n\n   .. code:: 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\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\n      bg_mesh = generate_background_mesh(sphere.bounds)\n\n#. **Define the Sizing Function and Write to Disk**:\n\n   .. code:: python\n\n      # Define sizing function based on proximity to a point of interest\n      def sizing_function(\n          points, focus_point=np.array([0, 0, 0]), max_size=1.0, min_size=0.1\n      ):\n          distances = np.linalg.norm(points - focus_point, axis=1)\n          return np.clip(max_size - distances, min_size, max_size)\n\n\n      bg_mesh.point_data[\"target_size\"] = sizing_function(bg_mesh.points)\n\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\n      write_background_mesh(bg_mesh, \"bgmesh.b\")\n\n#. **Use TetGen with the Background Mesh**:\n\n   Directly pass the background mesh from PyVista to ``tetgen``:\n\n   .. code:: 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:: python\n\n      tet = tetgen.TetGen(sphere)\n      tet.tetrahedralize(bgmeshfilename=\"bgmesh.b\", **tet_kwargs)\n      refined_mesh = tet.grid\n\nThis example demonstrates generating a background mesh, defining a\nspatially varying sizing function, and using this background mesh to\nguide TetGen in refining a PLC. By following these steps, you can\nachieve adaptive mesh refinement tailored to your specific simulation\nrequirements.\n\n*****************\n Acknowledgments\n*****************\n\nSoftware was originally created by Hang Si based on work published in\n`TetGen, a Delaunay-Based Quality Tetrahedral Mesh Generator\n\u003chttps://dl.acm.org/citation.cfm?doid=2629697\u003e`__.\n\n*********\n License\n*********\n\nThis Python wrapper is licensed under the MIT license. However, the\nunderlying `TetGen \u003chttps://github.com/ufz/tetgen\u003e`__ library is\nlicensed under AGPL (see `tetgen-license\n\u003chttps://github.com/pyvista/tetgen/blob/main/src/tetgen-license\u003e`_).\n\nPlease look into the terms of this license before creating a dynamic\nlink to this software in your downstream package and understand\ncommercial use limitations. We are not lawyers and cannot provide any\nguidance on the terms of this license.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpyvista%2Ftetgen","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fpyvista%2Ftetgen","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fpyvista%2Ftetgen/lists"}