pytetwild 0.1.dev1__tar.gz → 0.1.1__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.
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/.github/workflows/build-and-deploy.yml +11 -9
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/.gitignore +5 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/.pre-commit-config.yaml +8 -8
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/PKG-INFO +8 -9
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/README.rst +3 -3
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/pyproject.toml +25 -10
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/FTetWildWrapper.cpp +186 -0
- pytetwild-0.1.1/src/fTetWild/.github/workflows/continuous.yml +116 -0
- pytetwild-0.1.1/src/fTetWild/CMakeLists.txt +184 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/README.md +3 -2
- pytetwild-0.1.1/src/fTetWild/cmake/DownloadProject.CMakeLists.cmake.in +17 -0
- pytetwild-0.1.1/src/fTetWild/cmake/FloatTetwildDependencies.cmake +186 -0
- pytetwild-0.1.1/src/fTetWild/cmake/Warnings.cmake +146 -0
- pytetwild-0.1.1/src/fTetWild/cmake/geogram.cmake +89 -0
- pytetwild-0.1.1/src/fTetWild/src/EdgeCollapsing.cpp +633 -0
- pytetwild-0.1.1/src/fTetWild/src/LocalOperations.cpp +1663 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/MeshImprovement.cpp +24 -66
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/Parameters.h +10 -1
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/Simplification.cpp +350 -290
- pytetwild-0.1.1/src/fTetWild/src/TriangleInsertion.cpp +3537 -0
- pytetwild-0.1.1/src/fTetWild/src/VertexSmoothing.cpp +352 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/external/CMakeLists.txt +2 -3
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/external/FastWindingNumber.cpp +1 -1
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/main.cpp +35 -27
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/tests/CMakeLists.txt +10 -5
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/tests/test_predicates.cpp +2 -1
- pytetwild-0.1.1/src/pytetwild/__init__.py +4 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pytetwild/_version.py +1 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pytetwild/pytetwild.py +67 -5
- pytetwild-0.1.1/tests/test_data/box.stl +0 -0
- pytetwild-0.1.1/tests/test_data/csgtree.json +1 -0
- pytetwild-0.1.1/tests/test_data/sphere.stl +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/tests/test_pytetwild.py +40 -13
- pytetwild-0.1.dev1/src/fTetWild/.git +0 -1
- pytetwild-0.1.dev1/src/fTetWild/.github/workflows/continuous.yml +0 -167
- pytetwild-0.1.dev1/src/fTetWild/CMakeLists.txt +0 -188
- pytetwild-0.1.dev1/src/fTetWild/cmake/DownloadProject.CMakeLists.cmake.in +0 -17
- pytetwild-0.1.dev1/src/fTetWild/cmake/FloatTetwildDependencies.cmake +0 -122
- pytetwild-0.1.dev1/src/fTetWild/cmake/FloatTetwildDownloadExternal.cmake +0 -124
- pytetwild-0.1.dev1/src/fTetWild/cmake/Warnings.cmake +0 -160
- pytetwild-0.1.dev1/src/fTetWild/cmake/geogram.cmake +0 -93
- pytetwild-0.1.dev1/src/fTetWild/python/build_cut_table.py +0 -1165
- pytetwild-0.1.dev1/src/fTetWild/src/EdgeCollapsing.cpp +0 -595
- pytetwild-0.1.dev1/src/fTetWild/src/LocalOperations.cpp +0 -1455
- pytetwild-0.1.dev1/src/fTetWild/src/TriangleInsertion.cpp +0 -3145
- pytetwild-0.1.dev1/src/fTetWild/src/VertexSmoothing.cpp +0 -333
- pytetwild-0.1.dev1/src/fTetWild/src/external/WindingNumber.h +0 -7401
- pytetwild-0.1.dev1/src/pybind11/.git +0 -1
- pytetwild-0.1.dev1/src/pybind11/docs/Makefile +0 -192
- pytetwild-0.1.dev1/src/pytetwild/__init__.py +0 -3
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/.gitmodules +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/CMakeLists.txt +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/CONTRIBUTING.md +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/LICENSE +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/exploded-sphere.png +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/.clang-format +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/.gitignore +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/.travis.yml +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/LICENSE.MPL2 +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/cmake/DownloadProject.cmake +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/cmake/FindGMPfTetWild.cmake +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/cmake/FindMPFR.cmake +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/cmake/FloatTetwildUtils.cmake +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/cmake/PrependCurrentPath.cmake +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/cmake/UseColors.cmake +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/figs/1k.jpg +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/python/generate-table-code.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/python/plot-tet.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/python/save_all_confs.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/replicability_instructions.htm +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/AABBWrapper.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/AABBWrapper.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/CMakeLists.txt +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/CSGTreeParser.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/CSGTreeParser.hpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/CutMesh.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/CutMesh.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/EdgeCollapsing.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/EdgeSplitting.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/EdgeSplitting.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/EdgeSwapping.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/EdgeSwapping.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/FloatTetDelaunay.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/FloatTetDelaunay.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/FloatTetwild.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/FloatTetwild.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/LocalOperations.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/Logger.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/Logger.hpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/Mesh.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/Mesh.hpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/MeshIO.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/MeshIO.hpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/MeshImprovement.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/Simplification.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/Statistics.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/TriangleInsertion.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/Types.hpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/VertexSmoothing.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/auto_table.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/auto_table.hpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/external/Exception.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/external/FastWindingNumber.hpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/external/MshLoader.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/external/MshLoader.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/external/MshSaver.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/external/MshSaver.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/external/Predicates.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/external/Predicates.hpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/external/Rational.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/external/bfs_orient.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/external/bfs_orient.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/external/getRSS.c +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/external/get_mem.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/external/get_mem.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/external/mesh_AABB.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/external/mesh_AABB.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/external/predicates.c +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/external/triangle_triangle_intersection.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/external/triangle_triangle_intersection_old.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/intersections.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/intersections.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/tests/bunny.off +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/tests/main.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/tests/test_subdivision.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/tests/test_table.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/tests/test_tree.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/tests/tests.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.appveyor.yml +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.clang-format +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.clang-tidy +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.cmake-format.yaml +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.codespell-ignore-lines +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.gitattributes +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.github/CODEOWNERS +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.github/CONTRIBUTING.md +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.github/dependabot.yml +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.github/labeler.yml +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.github/labeler_merged.yml +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.github/matchers/pylint.json +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.github/pull_request_template.md +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.github/workflows/ci.yml +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.github/workflows/configure.yml +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.github/workflows/format.yml +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.github/workflows/labeler.yml +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.github/workflows/pip.yml +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.github/workflows/upstream.yml +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.gitignore +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.pre-commit-config.yaml +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.readthedocs.yml +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/CMakeLists.txt +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/LICENSE +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/MANIFEST.in +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/README.rst +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/SECURITY.md +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/Doxyfile +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/_static/css/custom.css +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/advanced/cast/chrono.rst +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/advanced/cast/custom.rst +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/advanced/cast/eigen.rst +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/advanced/cast/functional.rst +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/advanced/cast/index.rst +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/advanced/cast/overview.rst +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/advanced/cast/stl.rst +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/advanced/cast/strings.rst +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/advanced/classes.rst +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/advanced/embedding.rst +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/advanced/exceptions.rst +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/advanced/functions.rst +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/advanced/misc.rst +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/advanced/pycpp/index.rst +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/advanced/pycpp/numpy.rst +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/advanced/pycpp/object.rst +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/advanced/pycpp/utilities.rst +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/advanced/smart_ptrs.rst +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/basics.rst +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/benchmark.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/benchmark.rst +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/changelog.rst +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/classes.rst +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/cmake/index.rst +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/compiling.rst +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/conf.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/faq.rst +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/index.rst +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/installing.rst +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/limitations.rst +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/pybind11-logo.png +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/pybind11_vs_boost_python1.png +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/pybind11_vs_boost_python1.svg +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/pybind11_vs_boost_python2.png +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/pybind11_vs_boost_python2.svg +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/reference.rst +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/release.rst +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/requirements.txt +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/upgrade.rst +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/attr.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/buffer_info.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/cast.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/chrono.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/common.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/complex.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/detail/class.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/detail/common.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/detail/descr.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/detail/init.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/detail/internals.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/detail/type_caster_base.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/detail/typeid.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/eigen/common.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/eigen/matrix.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/eigen/tensor.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/eigen.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/embed.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/eval.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/functional.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/gil.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/gil_safe_call_once.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/iostream.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/numpy.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/operators.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/options.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/pybind11.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/pytypes.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/stl/filesystem.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/stl.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/stl_bind.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/type_caster_pyobject_ptr.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/typing.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/noxfile.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/pybind11/__init__.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/pybind11/__main__.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/pybind11/_version.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/pybind11/commands.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/pybind11/py.typed +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/pybind11/setup_helpers.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/pyproject.toml +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/setup.cfg +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/setup.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/CMakeLists.txt +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/conftest.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/constructor_stats.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/cross_module_gil_utils.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/cross_module_interleaved_error_already_set.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/eigen_tensor_avoid_stl_array.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/env.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/extra_python_package/pytest.ini +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/extra_python_package/test_files.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/extra_setuptools/pytest.ini +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/extra_setuptools/test_setuphelper.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/local_bindings.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/object.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/pybind11_cross_module_tests.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/pybind11_tests.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/pybind11_tests.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/pytest.ini +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/requirements.txt +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_async.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_async.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_buffers.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_buffers.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_builtin_casters.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_builtin_casters.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_call_policies.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_call_policies.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_callbacks.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_callbacks.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_chrono.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_chrono.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_class.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_class.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_cmake_build/CMakeLists.txt +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_cmake_build/embed.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_cmake_build/installed_embed/CMakeLists.txt +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_cmake_build/installed_function/CMakeLists.txt +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_cmake_build/installed_target/CMakeLists.txt +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_cmake_build/main.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_cmake_build/subdirectory_embed/CMakeLists.txt +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_cmake_build/subdirectory_function/CMakeLists.txt +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_cmake_build/subdirectory_target/CMakeLists.txt +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_cmake_build/test.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_const_name.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_const_name.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_constants_and_functions.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_constants_and_functions.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_copy_move.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_copy_move.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_custom_type_casters.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_custom_type_casters.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_custom_type_setup.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_custom_type_setup.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_docstring_options.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_docstring_options.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_eigen_matrix.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_eigen_matrix.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_eigen_tensor.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_eigen_tensor.inl +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_eigen_tensor.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_embed/CMakeLists.txt +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_embed/catch.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_embed/external_module.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_embed/test_interpreter.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_embed/test_interpreter.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_embed/test_trampoline.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_enum.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_enum.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_eval.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_eval.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_eval_call.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_exceptions.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_exceptions.h +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_exceptions.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_factory_constructors.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_factory_constructors.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_gil_scoped.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_gil_scoped.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_iostream.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_iostream.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_kwargs_and_defaults.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_kwargs_and_defaults.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_local_bindings.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_local_bindings.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_methods_and_attributes.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_methods_and_attributes.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_modules.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_modules.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_multiple_inheritance.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_multiple_inheritance.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_numpy_array.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_numpy_array.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_numpy_dtypes.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_numpy_dtypes.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_numpy_vectorize.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_numpy_vectorize.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_opaque_types.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_opaque_types.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_operator_overloading.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_operator_overloading.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_pickling.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_pickling.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_python_multiple_inheritance.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_python_multiple_inheritance.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_pytypes.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_pytypes.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_sequences_and_iterators.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_sequences_and_iterators.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_smart_ptr.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_smart_ptr.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_stl.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_stl.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_stl_binders.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_stl_binders.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_tagbased_polymorphic.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_tagbased_polymorphic.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_thread.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_thread.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_type_caster_pyobject_ptr.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_type_caster_pyobject_ptr.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_union.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_union.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_unnamed_namespace_a.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_unnamed_namespace_a.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_unnamed_namespace_b.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_unnamed_namespace_b.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_vector_unique_ptr_member.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_vector_unique_ptr_member.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_virtual_functions.cpp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_virtual_functions.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/valgrind-numpy-scipy.supp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/valgrind-python.supp +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tools/FindCatch.cmake +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tools/FindEigen3.cmake +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tools/FindPythonLibsNew.cmake +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tools/JoinPaths.cmake +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tools/check-style.sh +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tools/cmake_uninstall.cmake.in +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tools/codespell_ignore_lines_from_errors.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tools/libsize.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tools/make_changelog.py +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tools/pybind11.pc.in +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tools/pybind11Common.cmake +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tools/pybind11Config.cmake.in +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tools/pybind11NewTools.cmake +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tools/pybind11Tools.cmake +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tools/pyproject.toml +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tools/setup_global.py.in +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tools/setup_main.py.in +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pytetwild/py.typed +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/tests/test_data/test_surf.ply +0 -0
- {pytetwild-0.1.dev1 → pytetwild-0.1.1}/tests/test_data/test_tets.msh +0 -0
|
@@ -19,21 +19,21 @@ jobs:
|
|
|
19
19
|
strategy:
|
|
20
20
|
fail-fast: false
|
|
21
21
|
matrix:
|
|
22
|
-
os: [ubuntu-latest, windows-latest]
|
|
22
|
+
os: [ubuntu-latest, windows-latest, macos-15-intel, macos-15]
|
|
23
23
|
|
|
24
24
|
steps:
|
|
25
|
-
- uses: actions/checkout@
|
|
25
|
+
- uses: actions/checkout@v5
|
|
26
26
|
with:
|
|
27
27
|
submodules: true
|
|
28
28
|
|
|
29
29
|
- name: Setup Miniconda (Windows)
|
|
30
30
|
if: runner.os == 'Windows'
|
|
31
|
-
uses: conda-incubator/setup-miniconda@v3.0
|
|
31
|
+
uses: conda-incubator/setup-miniconda@v3.2.0
|
|
32
32
|
|
|
33
33
|
- name: Install Dependencies (Windows)
|
|
34
34
|
if: runner.os == 'Windows'
|
|
35
35
|
shell: powershell
|
|
36
|
-
run: conda install -c conda-forge mpir -y
|
|
36
|
+
run: conda install -c conda-forge mpir zlib -y
|
|
37
37
|
|
|
38
38
|
- name: Set env (Windows)
|
|
39
39
|
if: runner.os == 'Windows'
|
|
@@ -43,12 +43,15 @@ jobs:
|
|
|
43
43
|
echo "GMP_LIB=C:\Miniconda\envs\test\Library\lib" >> ${env:GITHUB_ENV}
|
|
44
44
|
|
|
45
45
|
- name: Build wheels
|
|
46
|
-
uses: pypa/cibuildwheel@
|
|
46
|
+
uses: pypa/cibuildwheel@v3.3.0
|
|
47
|
+
env:
|
|
48
|
+
CIBW_ENVIRONMENT_MACOS: 'MACOSX_DEPLOYMENT_TARGET="15.0"'
|
|
49
|
+
CIBW_ARCHS_MACOS: "auto"
|
|
47
50
|
|
|
48
51
|
- name: List generated wheels
|
|
49
52
|
run: ls ./wheelhouse/*
|
|
50
53
|
|
|
51
|
-
- uses: actions/upload-artifact@
|
|
54
|
+
- uses: actions/upload-artifact@v5
|
|
52
55
|
with:
|
|
53
56
|
path: ./wheelhouse/*.whl
|
|
54
57
|
name: pytetwild-wheel-${{ matrix.os }}
|
|
@@ -57,7 +60,7 @@ jobs:
|
|
|
57
60
|
name: Build source distribution
|
|
58
61
|
runs-on: ubuntu-latest
|
|
59
62
|
steps:
|
|
60
|
-
- uses: actions/checkout@
|
|
63
|
+
- uses: actions/checkout@v5
|
|
61
64
|
with:
|
|
62
65
|
submodules: true
|
|
63
66
|
|
|
@@ -71,7 +74,6 @@ jobs:
|
|
|
71
74
|
libboost-thread-dev \
|
|
72
75
|
libglu1-mesa-dev \
|
|
73
76
|
libsuitesparse-dev \
|
|
74
|
-
xorg-dev \
|
|
75
77
|
ccache
|
|
76
78
|
|
|
77
79
|
- name: Build source distribution
|
|
@@ -107,7 +109,7 @@ jobs:
|
|
|
107
109
|
permissions:
|
|
108
110
|
id-token: write # this permission is mandatory for trusted publishing
|
|
109
111
|
steps:
|
|
110
|
-
- uses: actions/download-artifact@
|
|
112
|
+
- uses: actions/download-artifact@v6
|
|
111
113
|
- name: Flatten directory structure
|
|
112
114
|
run: |
|
|
113
115
|
mkdir -p dist/
|
|
@@ -45,10 +45,13 @@ venv/
|
|
|
45
45
|
|
|
46
46
|
# skbuild
|
|
47
47
|
_skbuild/
|
|
48
|
+
.skbuild-info.json
|
|
49
|
+
compile_commands.json
|
|
48
50
|
|
|
49
51
|
# cmake
|
|
50
52
|
.ninja_deps
|
|
51
53
|
.ninja_log
|
|
54
|
+
.cmake
|
|
52
55
|
CMakeCache.txt
|
|
53
56
|
CMakeFiles/
|
|
54
57
|
CMakeInit.txt
|
|
@@ -72,6 +75,8 @@ fTetWildWrapper.sln
|
|
|
72
75
|
x64/
|
|
73
76
|
Release/
|
|
74
77
|
mpir.dll
|
|
78
|
+
_deps
|
|
79
|
+
appleclang*
|
|
75
80
|
|
|
76
81
|
# cibuildwheel
|
|
77
82
|
wheelhouse
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
repos:
|
|
2
2
|
- repo: https://github.com/astral-sh/ruff-pre-commit
|
|
3
|
-
rev: v0.
|
|
3
|
+
rev: v0.14.4
|
|
4
4
|
hooks:
|
|
5
5
|
- id: ruff
|
|
6
6
|
args: [--fix, --exit-non-zero-on-fix]
|
|
@@ -8,19 +8,19 @@ repos:
|
|
|
8
8
|
- id: ruff-format
|
|
9
9
|
|
|
10
10
|
- repo: https://github.com/keewis/blackdoc
|
|
11
|
-
rev: v0.
|
|
11
|
+
rev: v0.4.5
|
|
12
12
|
hooks:
|
|
13
13
|
- id: blackdoc
|
|
14
14
|
exclude: README.rst
|
|
15
15
|
|
|
16
16
|
- repo: https://github.com/numpy/numpydoc
|
|
17
|
-
rev: v1.
|
|
17
|
+
rev: v1.9.0
|
|
18
18
|
hooks:
|
|
19
19
|
- id: numpydoc-validation
|
|
20
20
|
files: ^src/pytetwild
|
|
21
21
|
|
|
22
22
|
- repo: https://github.com/codespell-project/codespell
|
|
23
|
-
rev: v2.
|
|
23
|
+
rev: v2.4.1
|
|
24
24
|
hooks:
|
|
25
25
|
- id: codespell
|
|
26
26
|
args: ["--skip=*.vt*"]
|
|
@@ -33,14 +33,14 @@ repos:
|
|
|
33
33
|
files: ^src/pytetwild/.*\.py
|
|
34
34
|
|
|
35
35
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
|
36
|
-
rev:
|
|
36
|
+
rev: v6.0.0
|
|
37
37
|
hooks:
|
|
38
38
|
- id: check-merge-conflict
|
|
39
39
|
- id: debug-statements
|
|
40
40
|
- id: trailing-whitespace
|
|
41
41
|
|
|
42
42
|
- repo: https://github.com/pre-commit/mirrors-clang-format
|
|
43
|
-
rev:
|
|
43
|
+
rev: v21.1.5
|
|
44
44
|
hooks:
|
|
45
45
|
- id: clang-format
|
|
46
46
|
files: |
|
|
@@ -49,7 +49,7 @@ repos:
|
|
|
49
49
|
)$
|
|
50
50
|
|
|
51
51
|
- repo: https://github.com/pre-commit/mirrors-mypy
|
|
52
|
-
rev: v1.
|
|
52
|
+
rev: v1.18.2
|
|
53
53
|
hooks:
|
|
54
54
|
- id: mypy
|
|
55
55
|
exclude: ^(docs/|tests)
|
|
@@ -61,6 +61,6 @@ repos:
|
|
|
61
61
|
]
|
|
62
62
|
|
|
63
63
|
- repo: https://github.com/python-jsonschema/check-jsonschema
|
|
64
|
-
rev: 0.
|
|
64
|
+
rev: 0.34.1
|
|
65
65
|
hooks:
|
|
66
66
|
- id: check-github-workflows
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: pytetwild
|
|
3
|
-
Version: 0.1.
|
|
3
|
+
Version: 0.1.1
|
|
4
4
|
Summary: Python wrapper of fTetWild
|
|
5
5
|
Author-Email: Alex Kaszynski <akascap@gmail.com>
|
|
6
6
|
Classifier: Development Status :: 3 - Alpha
|
|
@@ -10,20 +10,19 @@ Classifier: License :: OSI Approved :: Mozilla Public License 2.0 (MPL 2.0)
|
|
|
10
10
|
Classifier: Operating System :: Microsoft :: Windows
|
|
11
11
|
Classifier: Operating System :: POSIX
|
|
12
12
|
Classifier: Operating System :: MacOS
|
|
13
|
-
Classifier: Programming Language :: Python :: 3.8
|
|
14
|
-
Classifier: Programming Language :: Python :: 3.9
|
|
15
13
|
Classifier: Programming Language :: Python :: 3.10
|
|
16
14
|
Classifier: Programming Language :: Python :: 3.11
|
|
17
15
|
Classifier: Programming Language :: Python :: 3.12
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
18
17
|
Requires-Dist: numpy
|
|
18
|
+
Provides-Extra: all
|
|
19
19
|
Requires-Dist: pyvista; extra == "all"
|
|
20
|
+
Provides-Extra: dev
|
|
20
21
|
Requires-Dist: pytest; extra == "dev"
|
|
21
22
|
Requires-Dist: pre-commit; extra == "dev"
|
|
22
23
|
Requires-Dist: pyvista; extra == "dev"
|
|
23
24
|
Requires-Dist: scipy; extra == "dev"
|
|
24
25
|
Requires-Dist: meshio; extra == "dev"
|
|
25
|
-
Provides-Extra: all
|
|
26
|
-
Provides-Extra: dev
|
|
27
26
|
Description-Content-Type: text/x-rst
|
|
28
27
|
|
|
29
28
|
pytetwild
|
|
@@ -74,7 +73,7 @@ To tetrahedralize a surface mesh from `PyVista <https://docs.pyvista.org>`_:
|
|
|
74
73
|
|
|
75
74
|
# Convert the surface mesh to a tetrahedral mesh. For this example let's
|
|
76
75
|
# use a coarse mesh
|
|
77
|
-
tetrahedral_mesh = pytetwild.tetrahedralize_pv(surface_mesh, edge_length_fac=1)
|
|
76
|
+
tetrahedral_mesh = pytetwild.tetrahedralize_pv(surface_mesh, edge_length_fac=1)
|
|
78
77
|
|
|
79
78
|
# Visualize the tetrahedral mesh in an "exploded" view
|
|
80
79
|
tetrahedral_mesh.explode(1).plot(show_edges=True)
|
|
@@ -83,7 +82,7 @@ To tetrahedralize a surface mesh from `PyVista <https://docs.pyvista.org>`_:
|
|
|
83
82
|
|
|
84
83
|
You can also work with raw arrays. Here's a simple cube that we turn into tetrahedra.
|
|
85
84
|
|
|
86
|
-
.. code::
|
|
85
|
+
.. code:: py
|
|
87
86
|
|
|
88
87
|
import numpy as np
|
|
89
88
|
|
|
@@ -122,7 +121,7 @@ We've surfaced a handful of parameters to each of our interfaces
|
|
|
122
121
|
Additional Parameters
|
|
123
122
|
---------------------
|
|
124
123
|
edge_length_fac : float, default: 0.05
|
|
125
|
-
Tetrahedral edge length as a function of bounding box
|
|
124
|
+
Tetrahedral edge length as a function of bounding box diagonal. The
|
|
126
125
|
default ideal edge length is bb/20 (bounding box divided by 20).
|
|
127
126
|
optimize : bool
|
|
128
127
|
Improve the minimum scaled Jacobean for each cell. This leads to higher
|
|
@@ -46,7 +46,7 @@ To tetrahedralize a surface mesh from `PyVista <https://docs.pyvista.org>`_:
|
|
|
46
46
|
|
|
47
47
|
# Convert the surface mesh to a tetrahedral mesh. For this example let's
|
|
48
48
|
# use a coarse mesh
|
|
49
|
-
tetrahedral_mesh = pytetwild.tetrahedralize_pv(surface_mesh, edge_length_fac=1)
|
|
49
|
+
tetrahedral_mesh = pytetwild.tetrahedralize_pv(surface_mesh, edge_length_fac=1)
|
|
50
50
|
|
|
51
51
|
# Visualize the tetrahedral mesh in an "exploded" view
|
|
52
52
|
tetrahedral_mesh.explode(1).plot(show_edges=True)
|
|
@@ -55,7 +55,7 @@ To tetrahedralize a surface mesh from `PyVista <https://docs.pyvista.org>`_:
|
|
|
55
55
|
|
|
56
56
|
You can also work with raw arrays. Here's a simple cube that we turn into tetrahedra.
|
|
57
57
|
|
|
58
|
-
.. code::
|
|
58
|
+
.. code:: py
|
|
59
59
|
|
|
60
60
|
import numpy as np
|
|
61
61
|
|
|
@@ -94,7 +94,7 @@ We've surfaced a handful of parameters to each of our interfaces
|
|
|
94
94
|
Additional Parameters
|
|
95
95
|
---------------------
|
|
96
96
|
edge_length_fac : float, default: 0.05
|
|
97
|
-
Tetrahedral edge length as a function of bounding box
|
|
97
|
+
Tetrahedral edge length as a function of bounding box diagonal. The
|
|
98
98
|
default ideal edge length is bb/20 (bounding box divided by 20).
|
|
99
99
|
optimize : bool
|
|
100
100
|
Improve the minimum scaled Jacobean for each cell. This leads to higher
|
|
@@ -4,7 +4,7 @@ build-backend = "scikit_build_core.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "pytetwild"
|
|
7
|
-
version = "0.1.
|
|
7
|
+
version = "0.1.1"
|
|
8
8
|
description = "Python wrapper of fTetWild"
|
|
9
9
|
readme = { file = "README.rst", content-type = "text/x-rst" }
|
|
10
10
|
authors = [{ name = "Alex Kaszynski", email = "akascap@gmail.com" }]
|
|
@@ -17,41 +17,57 @@ classifiers = [
|
|
|
17
17
|
'Operating System :: Microsoft :: Windows',
|
|
18
18
|
'Operating System :: POSIX',
|
|
19
19
|
'Operating System :: MacOS',
|
|
20
|
-
'Programming Language :: Python :: 3.8',
|
|
21
|
-
'Programming Language :: Python :: 3.9',
|
|
22
20
|
'Programming Language :: Python :: 3.10',
|
|
23
21
|
'Programming Language :: Python :: 3.11',
|
|
24
22
|
'Programming Language :: Python :: 3.12',
|
|
23
|
+
'Programming Language :: Python :: 3.13',
|
|
25
24
|
]
|
|
26
|
-
|
|
25
|
+
|
|
26
|
+
[tool.setuptools.packages.find]
|
|
27
|
+
where = ["src"]
|
|
28
|
+
include = ["pytetwild*"]
|
|
29
|
+
|
|
30
|
+
[tool.setuptools.package-data]
|
|
31
|
+
pytetwild = ["py.typed"]
|
|
27
32
|
|
|
28
33
|
[project.optional-dependencies]
|
|
29
34
|
all = ['pyvista']
|
|
30
35
|
dev = ["pytest", "pre-commit", "pyvista", "scipy", "meshio"]
|
|
31
36
|
|
|
32
37
|
[tool.scikit-build]
|
|
33
|
-
cmake.build-type = "Release"
|
|
34
38
|
build-dir = "./build"
|
|
35
39
|
editable.mode = "inplace"
|
|
36
40
|
|
|
41
|
+
[tool.scikit-build.cmake]
|
|
42
|
+
args = [
|
|
43
|
+
"-DCMAKE_BUILD_TYPE=Release",
|
|
44
|
+
"-DCMAKE_CXX_STANDARD=17",
|
|
45
|
+
"-DBUILD_SHARED_LIBS=OFF",
|
|
46
|
+
]
|
|
47
|
+
|
|
37
48
|
[tool.pytest.ini_options]
|
|
38
49
|
testpaths = 'tests'
|
|
39
50
|
|
|
40
51
|
[tool.cibuildwheel]
|
|
41
52
|
archs = ["auto64"] # 64-bit only
|
|
42
|
-
build = "
|
|
43
|
-
skip = ["
|
|
53
|
+
build = "cp310-* cp311-* cp312-* cp313-*" # Only build Python 3.10-3.14 wheels
|
|
54
|
+
skip = ["*musllinux*"] # disable PyPy and musl-based wheels
|
|
44
55
|
test-requires = "pytest pyvista scipy meshio"
|
|
45
56
|
test-command = "pytest {project}/tests -v"
|
|
46
57
|
|
|
47
58
|
[tool.cibuildwheel.linux]
|
|
48
|
-
|
|
59
|
+
manylinux-x86_64-image = "manylinux_2_28"
|
|
60
|
+
before-all = "dnf install -y gmp-devel"
|
|
61
|
+
before-build = "pip install cmake==3.29.0"
|
|
49
62
|
environment = "USE_MAVX='true'"
|
|
50
63
|
environment-pass = ["USE_MAVX"]
|
|
51
64
|
|
|
65
|
+
[tool.cibuildwheel.macos]
|
|
66
|
+
before-build = "pip install cmake==3.29.0"
|
|
67
|
+
|
|
52
68
|
# pip install delvewheel &&
|
|
53
69
|
[tool.cibuildwheel.windows]
|
|
54
|
-
before-build = "pip install delvewheel && python -c \"import os; file_path = 'build/CMakeCache.txt'; os.remove(file_path) if os.path.exists(file_path) else None\""
|
|
70
|
+
before-build = "pip install cmake==3.29.0 delvewheel && python -c \"import os; file_path = 'build/CMakeCache.txt'; os.remove(file_path) if os.path.exists(file_path) else None\""
|
|
55
71
|
repair-wheel-command = "python -c \"import shutil, os; shutil.copy(os.path.join(os.getenv('GMP_LIB'), '..', 'bin', 'mpir.dll'), '.')\" && delvewheel repair -w {dest_dir} {wheel} --add-path ."
|
|
56
72
|
|
|
57
73
|
|
|
@@ -147,4 +163,3 @@ extend-select = [
|
|
|
147
163
|
"RUF010",
|
|
148
164
|
"RUF100",
|
|
149
165
|
]
|
|
150
|
-
|
|
@@ -1,10 +1,14 @@
|
|
|
1
1
|
#include <floattetwild/AABBWrapper.h>
|
|
2
|
+
#include <floattetwild/CSGTreeParser.hpp>
|
|
2
3
|
#include <floattetwild/FloatTetDelaunay.h>
|
|
4
|
+
#include <floattetwild/Logger.hpp>
|
|
3
5
|
#include <floattetwild/Mesh.hpp>
|
|
4
6
|
#include <floattetwild/MeshIO.hpp>
|
|
5
7
|
#include <floattetwild/MeshImprovement.h>
|
|
6
8
|
#include <floattetwild/Simplification.h>
|
|
7
9
|
#include <floattetwild/TriangleInsertion.h>
|
|
10
|
+
#include <floattetwild/Types.hpp>
|
|
11
|
+
#include <oneapi/tbb/global_control.h>
|
|
8
12
|
#include <thread>
|
|
9
13
|
|
|
10
14
|
#include <Eigen/Dense>
|
|
@@ -27,6 +31,16 @@ namespace py = pybind11;
|
|
|
27
31
|
#include <geogram/mesh/mesh_repair.h>
|
|
28
32
|
#include <geogram/numerics/predicates.h>
|
|
29
33
|
|
|
34
|
+
#include "igl/default_num_threads.h"
|
|
35
|
+
|
|
36
|
+
using floatTetWild::AABBWrapper;
|
|
37
|
+
using floatTetWild::boolean_operation;
|
|
38
|
+
using floatTetWild::CSGTreeParser;
|
|
39
|
+
using floatTetWild::FloatTetDelaunay;
|
|
40
|
+
using floatTetWild::json;
|
|
41
|
+
using floatTetWild::Vector3;
|
|
42
|
+
using floatTetWild::Vector3i;
|
|
43
|
+
|
|
30
44
|
std::pair<std::vector<std::array<float, 3>>, std::vector<std::array<int, 4>>>
|
|
31
45
|
extractMeshData(const floatTetWild::Mesh &mesh) {
|
|
32
46
|
std::vector<std::array<float, 3>> vertices;
|
|
@@ -263,4 +277,176 @@ PYBIND11_MODULE(PyfTetWildWrapper, m) {
|
|
|
263
277
|
},
|
|
264
278
|
"Tetrahedralizes a mesh given vertices and faces arrays, returning numpy "
|
|
265
279
|
"arrays of tetrahedra and points.");
|
|
280
|
+
|
|
281
|
+
m.def(
|
|
282
|
+
"tetrahedralize_csg",
|
|
283
|
+
[](const std::string &csg_file, float epsilon, float edge_length_r,
|
|
284
|
+
float stop_energy, bool coarsen, int num_threads, int log_level) {
|
|
285
|
+
GEO::initialize();
|
|
286
|
+
|
|
287
|
+
// Initialize mesh and parameters
|
|
288
|
+
floatTetWild::Mesh mesh;
|
|
289
|
+
floatTetWild::Parameters ¶ms = mesh.params;
|
|
290
|
+
params.eps_rel = epsilon;
|
|
291
|
+
params.ideal_edge_length_rel = edge_length_r;
|
|
292
|
+
params.stop_energy = stop_energy;
|
|
293
|
+
params.coarsen = coarsen;
|
|
294
|
+
// params.use_general_wn = true;
|
|
295
|
+
|
|
296
|
+
// Set up threading
|
|
297
|
+
if (num_threads == 0) {
|
|
298
|
+
num_threads = std::thread::hardware_concurrency();
|
|
299
|
+
}
|
|
300
|
+
// IGL has issues with a nested for loop and oversubscription, see
|
|
301
|
+
// https://github.com/libigl/libigl/issues/2412
|
|
302
|
+
igl::default_num_threads(std::ceil(std::sqrt(num_threads)));
|
|
303
|
+
params.num_threads = num_threads;
|
|
304
|
+
const size_t MB = 1024 * 1024;
|
|
305
|
+
const size_t stack_size = 64 * MB;
|
|
306
|
+
std::cout << "TBB threads " << num_threads << std::endl;
|
|
307
|
+
tbb::global_control parallelism_limit(
|
|
308
|
+
tbb::global_control::max_allowed_parallelism, num_threads);
|
|
309
|
+
tbb::global_control stack_size_limit(
|
|
310
|
+
tbb::global_control::thread_stack_size, stack_size);
|
|
311
|
+
|
|
312
|
+
floatTetWild::Logger::init(!params.is_quiet, params.log_path);
|
|
313
|
+
params.log_level = log_level;
|
|
314
|
+
spdlog::set_level(
|
|
315
|
+
static_cast<spdlog::level::level_enum>(params.log_level));
|
|
316
|
+
spdlog::flush_every(std::chrono::seconds(3));
|
|
317
|
+
|
|
318
|
+
// Load CSG tree
|
|
319
|
+
json csg_tree = json({});
|
|
320
|
+
std::ifstream file(csg_file);
|
|
321
|
+
if (file.is_open()) {
|
|
322
|
+
file >> csg_tree;
|
|
323
|
+
file.close();
|
|
324
|
+
} else {
|
|
325
|
+
throw std::runtime_error("Unable to open CSG file: " + csg_file);
|
|
326
|
+
}
|
|
327
|
+
|
|
328
|
+
// Load and merge meshes from CSG tree
|
|
329
|
+
json tree_with_ids;
|
|
330
|
+
std::vector<std::string> meshes;
|
|
331
|
+
CSGTreeParser::get_meshes(csg_tree, meshes, tree_with_ids);
|
|
332
|
+
|
|
333
|
+
// Pre-check all input meshes for non-finite (NaN/Inf) coordinates.
|
|
334
|
+
py::print("Pre-checking CSG input meshes for NaN/Inf values...");
|
|
335
|
+
for (const auto &mesh_file : meshes) {
|
|
336
|
+
std::vector<Vector3> temp_vertices;
|
|
337
|
+
std::vector<Vector3i> temp_faces;
|
|
338
|
+
std::vector<int> temp_tags;
|
|
339
|
+
GEO::Mesh temp_sf_mesh; // Dummy, but load_and_merge requires it
|
|
340
|
+
|
|
341
|
+
// We use load_and_merge with a single-item list
|
|
342
|
+
if (!CSGTreeParser::load_and_merge(
|
|
343
|
+
{mesh_file}, // Load just this one file
|
|
344
|
+
temp_vertices, temp_faces, temp_sf_mesh, temp_tags)) {
|
|
345
|
+
throw std::runtime_error("Failed to pre-load mesh for checking: " +
|
|
346
|
+
mesh_file);
|
|
347
|
+
}
|
|
348
|
+
|
|
349
|
+
// The check for NaN/Inf
|
|
350
|
+
for (const auto &v : temp_vertices) {
|
|
351
|
+
if (!std::isfinite(v.x()) || !std::isfinite(v.y()) ||
|
|
352
|
+
!std::isfinite(v.z())) {
|
|
353
|
+
throw std::runtime_error(
|
|
354
|
+
"FATAL: Input mesh file contains non-finite (NaN/Inf) vertex "
|
|
355
|
+
"coordinates: " +
|
|
356
|
+
mesh_file);
|
|
357
|
+
}
|
|
358
|
+
}
|
|
359
|
+
}
|
|
360
|
+
py::print("All input meshes passed check.");
|
|
361
|
+
|
|
362
|
+
std::vector<Vector3> input_vertices;
|
|
363
|
+
std::vector<Vector3i> input_faces;
|
|
364
|
+
std::vector<int> input_tags;
|
|
365
|
+
GEO::Mesh sf_mesh;
|
|
366
|
+
if (!CSGTreeParser::load_and_merge(meshes, input_vertices, input_faces,
|
|
367
|
+
sf_mesh, input_tags))
|
|
368
|
+
throw std::runtime_error(
|
|
369
|
+
"Failed to load and merge meshes from CSG tree");
|
|
370
|
+
|
|
371
|
+
// Initialize AABBWrapper
|
|
372
|
+
AABBWrapper tree(sf_mesh);
|
|
373
|
+
if (!params.init(tree.get_sf_diag())) {
|
|
374
|
+
throw std::runtime_error("Parameters initialization failed");
|
|
375
|
+
}
|
|
376
|
+
|
|
377
|
+
// Preprocessing
|
|
378
|
+
bool skip_simplify = false;
|
|
379
|
+
simplify(input_vertices, input_faces, input_tags, tree, params,
|
|
380
|
+
skip_simplify);
|
|
381
|
+
tree.init_b_mesh_and_tree(input_vertices, input_faces, mesh);
|
|
382
|
+
|
|
383
|
+
// Tetrahedralization
|
|
384
|
+
std::vector<bool> is_face_inserted(input_faces.size(), false);
|
|
385
|
+
FloatTetDelaunay::tetrahedralize(input_vertices, input_faces, tree,
|
|
386
|
+
mesh, is_face_inserted);
|
|
387
|
+
|
|
388
|
+
// Insert triangles and optimize
|
|
389
|
+
insert_triangles(input_vertices, input_faces, input_tags, mesh,
|
|
390
|
+
is_face_inserted, tree, false);
|
|
391
|
+
optimization(input_vertices, input_faces, input_tags, is_face_inserted,
|
|
392
|
+
mesh, tree, {{1, 1, 1, 1}});
|
|
393
|
+
|
|
394
|
+
std::cout << "optimization finished" << std::endl;
|
|
395
|
+
// Correct surface orientation
|
|
396
|
+
correct_tracked_surface_orientation(mesh, tree);
|
|
397
|
+
std::cout << "correct surface orientation finished" << std::endl;
|
|
398
|
+
|
|
399
|
+
// Apply Boolean operations
|
|
400
|
+
boolean_operation(mesh, tree_with_ids, meshes);
|
|
401
|
+
std::cout << "boolean operation finished " << std::endl;
|
|
402
|
+
|
|
403
|
+
// Extract data
|
|
404
|
+
auto result = extractMeshData(mesh);
|
|
405
|
+
auto vertices = result.first;
|
|
406
|
+
auto cells = result.second;
|
|
407
|
+
|
|
408
|
+
// Extract marker
|
|
409
|
+
std::vector<int> marker;
|
|
410
|
+
for (const auto &tet : mesh.tets) {
|
|
411
|
+
if (!tet.is_removed) {
|
|
412
|
+
marker.push_back(tet.scalar);
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
// Convert to numpy arrays
|
|
416
|
+
size_t num_vertices = vertices.size();
|
|
417
|
+
size_t num_cells = cells.size();
|
|
418
|
+
|
|
419
|
+
size_t v_shape[2] = {num_vertices, 3};
|
|
420
|
+
auto np_vertices = py::array_t<float>(v_shape);
|
|
421
|
+
auto v_access = np_vertices.mutable_unchecked<2>();
|
|
422
|
+
for (size_t i = 0; i < num_vertices; ++i) {
|
|
423
|
+
for (size_t j = 0; j < 3; ++j) {
|
|
424
|
+
v_access(i, j) = vertices[i][j];
|
|
425
|
+
}
|
|
426
|
+
}
|
|
427
|
+
|
|
428
|
+
size_t c_shape[2] = {num_cells, 4};
|
|
429
|
+
auto np_cells = py::array_t<int>(c_shape);
|
|
430
|
+
auto c_access = np_cells.mutable_unchecked<2>();
|
|
431
|
+
for (size_t i = 0; i < num_cells; ++i) {
|
|
432
|
+
for (size_t j = 0; j < 4; ++j) {
|
|
433
|
+
c_access(i, j) = cells[i][j];
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
|
|
437
|
+
size_t m_shape[1] = {num_cells};
|
|
438
|
+
auto np_markers = py::array_t<int>(m_shape);
|
|
439
|
+
auto m_access = np_markers.mutable_unchecked<1>();
|
|
440
|
+
for (size_t i = 0; i < num_cells; ++i) {
|
|
441
|
+
m_access(i) = marker[i];
|
|
442
|
+
}
|
|
443
|
+
py::print(
|
|
444
|
+
"Tetrahedralization process from CSG completed successfully.");
|
|
445
|
+
return std::make_tuple(np_vertices, np_cells, np_markers);
|
|
446
|
+
},
|
|
447
|
+
"Tetrahedralizes a CSG tree from a JSON file, returning numpy arrays of "
|
|
448
|
+
"vertices, cells, and markers.",
|
|
449
|
+
py::arg("csg_file"), py::arg("epsilon"), py::arg("edge_length_r"),
|
|
450
|
+
py::arg("stop_energy"), py::arg("coarsen"), py::arg("num_threads"),
|
|
451
|
+
py::arg("log_level"));
|
|
266
452
|
}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
name: Build
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
branches:
|
|
6
|
+
- master
|
|
7
|
+
pull_request:
|
|
8
|
+
branches:
|
|
9
|
+
- master
|
|
10
|
+
|
|
11
|
+
env:
|
|
12
|
+
CTEST_OUTPUT_ON_FAILURE: ON
|
|
13
|
+
CTEST_PARALLEL_LEVEL: 2
|
|
14
|
+
|
|
15
|
+
defaults:
|
|
16
|
+
run:
|
|
17
|
+
shell: bash -el {0}
|
|
18
|
+
|
|
19
|
+
jobs:
|
|
20
|
+
####################
|
|
21
|
+
# Linux / macOS
|
|
22
|
+
####################
|
|
23
|
+
|
|
24
|
+
Unix:
|
|
25
|
+
name: ${{ matrix.name }}-${{ matrix.envelope }} (${{ matrix.config }})
|
|
26
|
+
runs-on: ${{ matrix.os }}
|
|
27
|
+
strategy:
|
|
28
|
+
fail-fast: false
|
|
29
|
+
matrix:
|
|
30
|
+
os: [ubuntu-22.04, ubuntu-latest, macOS-15, macOS-14, macOS-latest, windows-2022]
|
|
31
|
+
config: [Debug, Release]
|
|
32
|
+
envelope: [OFF]
|
|
33
|
+
include:
|
|
34
|
+
- os: ubuntu-22.04
|
|
35
|
+
name: ubuntu-22.04
|
|
36
|
+
- os: ubuntu-latest
|
|
37
|
+
name: ubuntu-latest
|
|
38
|
+
- os: macos-13
|
|
39
|
+
name: macOS-13
|
|
40
|
+
- os: macos-14
|
|
41
|
+
name: macOS-14 ARM64
|
|
42
|
+
- os: macos-latest
|
|
43
|
+
name: macOS-latest ARM64
|
|
44
|
+
- os: windows-2022
|
|
45
|
+
name: Windows
|
|
46
|
+
|
|
47
|
+
steps:
|
|
48
|
+
- name: Checkout repository
|
|
49
|
+
uses: actions/checkout@v4
|
|
50
|
+
with:
|
|
51
|
+
fetch-depth: 10
|
|
52
|
+
submodules: "recursive"
|
|
53
|
+
|
|
54
|
+
- name: Setup tmate session
|
|
55
|
+
uses: mxschmitt/action-tmate@v3
|
|
56
|
+
timeout-minutes: 20
|
|
57
|
+
with:
|
|
58
|
+
detached: true
|
|
59
|
+
|
|
60
|
+
- name: Setup NMake (Windows)
|
|
61
|
+
if: runner.os == 'Windows'
|
|
62
|
+
uses: ilammy/msvc-dev-cmd@v1
|
|
63
|
+
|
|
64
|
+
- name: Setup Conda
|
|
65
|
+
uses: conda-incubator/setup-miniconda@v3
|
|
66
|
+
with:
|
|
67
|
+
channels: conda-forge
|
|
68
|
+
python-version: ${{ matrix.python-version }}
|
|
69
|
+
channel-priority: true
|
|
70
|
+
activate-environment: test-env
|
|
71
|
+
|
|
72
|
+
- name: Install Dependencies
|
|
73
|
+
run: conda install cmake=3.29 git -y
|
|
74
|
+
|
|
75
|
+
- name: Install Dependencies (Windows)
|
|
76
|
+
if: runner.os == 'Windows'
|
|
77
|
+
run: conda install mpir zlib -y
|
|
78
|
+
|
|
79
|
+
- name: Envs (Windows)
|
|
80
|
+
if: runner.os == 'Windows'
|
|
81
|
+
run: echo "CMAKE_GENERATOR=NMake Makefiles" >> $GITHUB_ENV
|
|
82
|
+
|
|
83
|
+
- name: Configure ssl certificate
|
|
84
|
+
if : runner.os == 'Windows'
|
|
85
|
+
run: git config --global http.sslBackend schannel
|
|
86
|
+
|
|
87
|
+
- name: Configure
|
|
88
|
+
run: |
|
|
89
|
+
mkdir -p build
|
|
90
|
+
cd build
|
|
91
|
+
cmake .. \
|
|
92
|
+
-DCMAKE_PREFIX_PATH=$CONDA_PREFIX \
|
|
93
|
+
-DCMAKE_BUILD_TYPE=${{ matrix.config }} \
|
|
94
|
+
-DFLOAT_TETWILD_WITH_EXACT_ENVELOPE=${{ matrix.envelope }}
|
|
95
|
+
|
|
96
|
+
- name: Build
|
|
97
|
+
run: cd build; conda run -n test-env cmake --build . --parallel 2
|
|
98
|
+
|
|
99
|
+
- name: Tests
|
|
100
|
+
run: cd build; ctest --verbose --output-on-failure
|
|
101
|
+
|
|
102
|
+
- name: Run Example (Unix)
|
|
103
|
+
if: runner.os != 'Windows'
|
|
104
|
+
run: cd build; ./FloatTetwild_bin --input ../tests/bunny.off --level 0 --stop-energy 100
|
|
105
|
+
|
|
106
|
+
- name: Run Example (Windows)
|
|
107
|
+
if: runner.os == 'Windows'
|
|
108
|
+
shell: cmd
|
|
109
|
+
run: |
|
|
110
|
+
cd build
|
|
111
|
+
rem Find the msvc_* directory automatically and copy the DLL
|
|
112
|
+
for /d %%d in (msvc_*) do copy "%%d\tbb*.dll" .
|
|
113
|
+
rem Copy the other DLL
|
|
114
|
+
copy C:\Miniconda\envs\test-env\Library\bin\mpir.dll .
|
|
115
|
+
rem Run the executable
|
|
116
|
+
FloatTetwild_bin.exe --input ..\tests\bunny.off --level 0 --stop-energy 100
|