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.
Files changed (392) hide show
  1. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/.github/workflows/build-and-deploy.yml +11 -9
  2. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/.gitignore +5 -0
  3. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/.pre-commit-config.yaml +8 -8
  4. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/PKG-INFO +8 -9
  5. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/README.rst +3 -3
  6. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/pyproject.toml +25 -10
  7. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/FTetWildWrapper.cpp +186 -0
  8. pytetwild-0.1.1/src/fTetWild/.github/workflows/continuous.yml +116 -0
  9. pytetwild-0.1.1/src/fTetWild/CMakeLists.txt +184 -0
  10. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/README.md +3 -2
  11. pytetwild-0.1.1/src/fTetWild/cmake/DownloadProject.CMakeLists.cmake.in +17 -0
  12. pytetwild-0.1.1/src/fTetWild/cmake/FloatTetwildDependencies.cmake +186 -0
  13. pytetwild-0.1.1/src/fTetWild/cmake/Warnings.cmake +146 -0
  14. pytetwild-0.1.1/src/fTetWild/cmake/geogram.cmake +89 -0
  15. pytetwild-0.1.1/src/fTetWild/src/EdgeCollapsing.cpp +633 -0
  16. pytetwild-0.1.1/src/fTetWild/src/LocalOperations.cpp +1663 -0
  17. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/MeshImprovement.cpp +24 -66
  18. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/Parameters.h +10 -1
  19. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/Simplification.cpp +350 -290
  20. pytetwild-0.1.1/src/fTetWild/src/TriangleInsertion.cpp +3537 -0
  21. pytetwild-0.1.1/src/fTetWild/src/VertexSmoothing.cpp +352 -0
  22. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/external/CMakeLists.txt +2 -3
  23. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/external/FastWindingNumber.cpp +1 -1
  24. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/main.cpp +35 -27
  25. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/tests/CMakeLists.txt +10 -5
  26. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/tests/test_predicates.cpp +2 -1
  27. pytetwild-0.1.1/src/pytetwild/__init__.py +4 -0
  28. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pytetwild/_version.py +1 -0
  29. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pytetwild/pytetwild.py +67 -5
  30. pytetwild-0.1.1/tests/test_data/box.stl +0 -0
  31. pytetwild-0.1.1/tests/test_data/csgtree.json +1 -0
  32. pytetwild-0.1.1/tests/test_data/sphere.stl +0 -0
  33. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/tests/test_pytetwild.py +40 -13
  34. pytetwild-0.1.dev1/src/fTetWild/.git +0 -1
  35. pytetwild-0.1.dev1/src/fTetWild/.github/workflows/continuous.yml +0 -167
  36. pytetwild-0.1.dev1/src/fTetWild/CMakeLists.txt +0 -188
  37. pytetwild-0.1.dev1/src/fTetWild/cmake/DownloadProject.CMakeLists.cmake.in +0 -17
  38. pytetwild-0.1.dev1/src/fTetWild/cmake/FloatTetwildDependencies.cmake +0 -122
  39. pytetwild-0.1.dev1/src/fTetWild/cmake/FloatTetwildDownloadExternal.cmake +0 -124
  40. pytetwild-0.1.dev1/src/fTetWild/cmake/Warnings.cmake +0 -160
  41. pytetwild-0.1.dev1/src/fTetWild/cmake/geogram.cmake +0 -93
  42. pytetwild-0.1.dev1/src/fTetWild/python/build_cut_table.py +0 -1165
  43. pytetwild-0.1.dev1/src/fTetWild/src/EdgeCollapsing.cpp +0 -595
  44. pytetwild-0.1.dev1/src/fTetWild/src/LocalOperations.cpp +0 -1455
  45. pytetwild-0.1.dev1/src/fTetWild/src/TriangleInsertion.cpp +0 -3145
  46. pytetwild-0.1.dev1/src/fTetWild/src/VertexSmoothing.cpp +0 -333
  47. pytetwild-0.1.dev1/src/fTetWild/src/external/WindingNumber.h +0 -7401
  48. pytetwild-0.1.dev1/src/pybind11/.git +0 -1
  49. pytetwild-0.1.dev1/src/pybind11/docs/Makefile +0 -192
  50. pytetwild-0.1.dev1/src/pytetwild/__init__.py +0 -3
  51. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/.gitmodules +0 -0
  52. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/CMakeLists.txt +0 -0
  53. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/CONTRIBUTING.md +0 -0
  54. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/LICENSE +0 -0
  55. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/exploded-sphere.png +0 -0
  56. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/.clang-format +0 -0
  57. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/.gitignore +0 -0
  58. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/.travis.yml +0 -0
  59. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/LICENSE.MPL2 +0 -0
  60. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/cmake/DownloadProject.cmake +0 -0
  61. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/cmake/FindGMPfTetWild.cmake +0 -0
  62. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/cmake/FindMPFR.cmake +0 -0
  63. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/cmake/FloatTetwildUtils.cmake +0 -0
  64. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/cmake/PrependCurrentPath.cmake +0 -0
  65. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/cmake/UseColors.cmake +0 -0
  66. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/figs/1k.jpg +0 -0
  67. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/python/generate-table-code.py +0 -0
  68. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/python/plot-tet.py +0 -0
  69. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/python/save_all_confs.py +0 -0
  70. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/replicability_instructions.htm +0 -0
  71. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/AABBWrapper.cpp +0 -0
  72. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/AABBWrapper.h +0 -0
  73. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/CMakeLists.txt +0 -0
  74. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/CSGTreeParser.cpp +0 -0
  75. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/CSGTreeParser.hpp +0 -0
  76. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/CutMesh.cpp +0 -0
  77. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/CutMesh.h +0 -0
  78. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/EdgeCollapsing.h +0 -0
  79. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/EdgeSplitting.cpp +0 -0
  80. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/EdgeSplitting.h +0 -0
  81. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/EdgeSwapping.cpp +0 -0
  82. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/EdgeSwapping.h +0 -0
  83. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/FloatTetDelaunay.cpp +0 -0
  84. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/FloatTetDelaunay.h +0 -0
  85. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/FloatTetwild.cpp +0 -0
  86. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/FloatTetwild.h +0 -0
  87. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/LocalOperations.h +0 -0
  88. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/Logger.cpp +0 -0
  89. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/Logger.hpp +0 -0
  90. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/Mesh.cpp +0 -0
  91. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/Mesh.hpp +0 -0
  92. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/MeshIO.cpp +0 -0
  93. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/MeshIO.hpp +0 -0
  94. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/MeshImprovement.h +0 -0
  95. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/Simplification.h +0 -0
  96. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/Statistics.h +0 -0
  97. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/TriangleInsertion.h +0 -0
  98. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/Types.hpp +0 -0
  99. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/VertexSmoothing.h +0 -0
  100. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/auto_table.cpp +0 -0
  101. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/auto_table.hpp +0 -0
  102. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/external/Exception.h +0 -0
  103. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/external/FastWindingNumber.hpp +0 -0
  104. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/external/MshLoader.cpp +0 -0
  105. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/external/MshLoader.h +0 -0
  106. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/external/MshSaver.cpp +0 -0
  107. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/external/MshSaver.h +0 -0
  108. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/external/Predicates.cpp +0 -0
  109. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/external/Predicates.hpp +0 -0
  110. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/external/Rational.h +0 -0
  111. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/external/bfs_orient.cpp +0 -0
  112. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/external/bfs_orient.h +0 -0
  113. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/external/getRSS.c +0 -0
  114. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/external/get_mem.cpp +0 -0
  115. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/external/get_mem.h +0 -0
  116. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/external/mesh_AABB.cpp +0 -0
  117. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/external/mesh_AABB.h +0 -0
  118. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/external/predicates.c +0 -0
  119. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/external/triangle_triangle_intersection.cpp +0 -0
  120. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/external/triangle_triangle_intersection_old.cpp +0 -0
  121. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/intersections.cpp +0 -0
  122. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/src/intersections.h +0 -0
  123. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/tests/bunny.off +0 -0
  124. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/tests/main.cpp +0 -0
  125. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/tests/test_subdivision.cpp +0 -0
  126. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/tests/test_table.cpp +0 -0
  127. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/tests/test_tree.cpp +0 -0
  128. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/fTetWild/tests/tests.cpp +0 -0
  129. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.appveyor.yml +0 -0
  130. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.clang-format +0 -0
  131. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.clang-tidy +0 -0
  132. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.cmake-format.yaml +0 -0
  133. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.codespell-ignore-lines +0 -0
  134. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.gitattributes +0 -0
  135. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.github/CODEOWNERS +0 -0
  136. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.github/CONTRIBUTING.md +0 -0
  137. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.github/ISSUE_TEMPLATE/bug-report.yml +0 -0
  138. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.github/ISSUE_TEMPLATE/config.yml +0 -0
  139. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.github/dependabot.yml +0 -0
  140. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.github/labeler.yml +0 -0
  141. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.github/labeler_merged.yml +0 -0
  142. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.github/matchers/pylint.json +0 -0
  143. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.github/pull_request_template.md +0 -0
  144. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.github/workflows/ci.yml +0 -0
  145. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.github/workflows/configure.yml +0 -0
  146. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.github/workflows/format.yml +0 -0
  147. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.github/workflows/labeler.yml +0 -0
  148. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.github/workflows/pip.yml +0 -0
  149. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.github/workflows/upstream.yml +0 -0
  150. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.gitignore +0 -0
  151. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.pre-commit-config.yaml +0 -0
  152. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/.readthedocs.yml +0 -0
  153. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/CMakeLists.txt +0 -0
  154. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/LICENSE +0 -0
  155. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/MANIFEST.in +0 -0
  156. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/README.rst +0 -0
  157. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/SECURITY.md +0 -0
  158. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/Doxyfile +0 -0
  159. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/_static/css/custom.css +0 -0
  160. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/advanced/cast/chrono.rst +0 -0
  161. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/advanced/cast/custom.rst +0 -0
  162. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/advanced/cast/eigen.rst +0 -0
  163. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/advanced/cast/functional.rst +0 -0
  164. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/advanced/cast/index.rst +0 -0
  165. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/advanced/cast/overview.rst +0 -0
  166. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/advanced/cast/stl.rst +0 -0
  167. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/advanced/cast/strings.rst +0 -0
  168. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/advanced/classes.rst +0 -0
  169. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/advanced/embedding.rst +0 -0
  170. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/advanced/exceptions.rst +0 -0
  171. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/advanced/functions.rst +0 -0
  172. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/advanced/misc.rst +0 -0
  173. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/advanced/pycpp/index.rst +0 -0
  174. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/advanced/pycpp/numpy.rst +0 -0
  175. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/advanced/pycpp/object.rst +0 -0
  176. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/advanced/pycpp/utilities.rst +0 -0
  177. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/advanced/smart_ptrs.rst +0 -0
  178. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/basics.rst +0 -0
  179. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/benchmark.py +0 -0
  180. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/benchmark.rst +0 -0
  181. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/changelog.rst +0 -0
  182. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/classes.rst +0 -0
  183. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/cmake/index.rst +0 -0
  184. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/compiling.rst +0 -0
  185. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/conf.py +0 -0
  186. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/faq.rst +0 -0
  187. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/index.rst +0 -0
  188. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/installing.rst +0 -0
  189. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/limitations.rst +0 -0
  190. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/pybind11-logo.png +0 -0
  191. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/pybind11_vs_boost_python1.png +0 -0
  192. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/pybind11_vs_boost_python1.svg +0 -0
  193. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/pybind11_vs_boost_python2.png +0 -0
  194. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/pybind11_vs_boost_python2.svg +0 -0
  195. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/reference.rst +0 -0
  196. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/release.rst +0 -0
  197. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/requirements.txt +0 -0
  198. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/docs/upgrade.rst +0 -0
  199. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/attr.h +0 -0
  200. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/buffer_info.h +0 -0
  201. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/cast.h +0 -0
  202. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/chrono.h +0 -0
  203. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/common.h +0 -0
  204. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/complex.h +0 -0
  205. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/detail/class.h +0 -0
  206. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/detail/common.h +0 -0
  207. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/detail/descr.h +0 -0
  208. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/detail/init.h +0 -0
  209. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/detail/internals.h +0 -0
  210. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/detail/type_caster_base.h +0 -0
  211. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/detail/typeid.h +0 -0
  212. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/eigen/common.h +0 -0
  213. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/eigen/matrix.h +0 -0
  214. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/eigen/tensor.h +0 -0
  215. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/eigen.h +0 -0
  216. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/embed.h +0 -0
  217. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/eval.h +0 -0
  218. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/functional.h +0 -0
  219. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/gil.h +0 -0
  220. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/gil_safe_call_once.h +0 -0
  221. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/iostream.h +0 -0
  222. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/numpy.h +0 -0
  223. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/operators.h +0 -0
  224. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/options.h +0 -0
  225. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/pybind11.h +0 -0
  226. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/pytypes.h +0 -0
  227. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/stl/filesystem.h +0 -0
  228. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/stl.h +0 -0
  229. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/stl_bind.h +0 -0
  230. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/type_caster_pyobject_ptr.h +0 -0
  231. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/include/pybind11/typing.h +0 -0
  232. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/noxfile.py +0 -0
  233. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/pybind11/__init__.py +0 -0
  234. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/pybind11/__main__.py +0 -0
  235. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/pybind11/_version.py +0 -0
  236. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/pybind11/commands.py +0 -0
  237. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/pybind11/py.typed +0 -0
  238. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/pybind11/setup_helpers.py +0 -0
  239. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/pyproject.toml +0 -0
  240. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/setup.cfg +0 -0
  241. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/setup.py +0 -0
  242. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/CMakeLists.txt +0 -0
  243. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/conftest.py +0 -0
  244. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/constructor_stats.h +0 -0
  245. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/cross_module_gil_utils.cpp +0 -0
  246. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/cross_module_interleaved_error_already_set.cpp +0 -0
  247. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/eigen_tensor_avoid_stl_array.cpp +0 -0
  248. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/env.py +0 -0
  249. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/extra_python_package/pytest.ini +0 -0
  250. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/extra_python_package/test_files.py +0 -0
  251. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/extra_setuptools/pytest.ini +0 -0
  252. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/extra_setuptools/test_setuphelper.py +0 -0
  253. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/local_bindings.h +0 -0
  254. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/object.h +0 -0
  255. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/pybind11_cross_module_tests.cpp +0 -0
  256. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/pybind11_tests.cpp +0 -0
  257. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/pybind11_tests.h +0 -0
  258. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/pytest.ini +0 -0
  259. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/requirements.txt +0 -0
  260. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_async.cpp +0 -0
  261. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_async.py +0 -0
  262. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_buffers.cpp +0 -0
  263. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_buffers.py +0 -0
  264. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_builtin_casters.cpp +0 -0
  265. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_builtin_casters.py +0 -0
  266. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_call_policies.cpp +0 -0
  267. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_call_policies.py +0 -0
  268. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_callbacks.cpp +0 -0
  269. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_callbacks.py +0 -0
  270. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_chrono.cpp +0 -0
  271. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_chrono.py +0 -0
  272. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_class.cpp +0 -0
  273. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_class.py +0 -0
  274. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_cmake_build/CMakeLists.txt +0 -0
  275. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_cmake_build/embed.cpp +0 -0
  276. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_cmake_build/installed_embed/CMakeLists.txt +0 -0
  277. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_cmake_build/installed_function/CMakeLists.txt +0 -0
  278. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_cmake_build/installed_target/CMakeLists.txt +0 -0
  279. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_cmake_build/main.cpp +0 -0
  280. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_cmake_build/subdirectory_embed/CMakeLists.txt +0 -0
  281. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_cmake_build/subdirectory_function/CMakeLists.txt +0 -0
  282. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_cmake_build/subdirectory_target/CMakeLists.txt +0 -0
  283. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_cmake_build/test.py +0 -0
  284. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_const_name.cpp +0 -0
  285. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_const_name.py +0 -0
  286. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_constants_and_functions.cpp +0 -0
  287. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_constants_and_functions.py +0 -0
  288. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_copy_move.cpp +0 -0
  289. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_copy_move.py +0 -0
  290. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_custom_type_casters.cpp +0 -0
  291. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_custom_type_casters.py +0 -0
  292. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_custom_type_setup.cpp +0 -0
  293. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_custom_type_setup.py +0 -0
  294. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_docstring_options.cpp +0 -0
  295. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_docstring_options.py +0 -0
  296. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_eigen_matrix.cpp +0 -0
  297. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_eigen_matrix.py +0 -0
  298. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_eigen_tensor.cpp +0 -0
  299. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_eigen_tensor.inl +0 -0
  300. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_eigen_tensor.py +0 -0
  301. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_embed/CMakeLists.txt +0 -0
  302. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_embed/catch.cpp +0 -0
  303. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_embed/external_module.cpp +0 -0
  304. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_embed/test_interpreter.cpp +0 -0
  305. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_embed/test_interpreter.py +0 -0
  306. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_embed/test_trampoline.py +0 -0
  307. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_enum.cpp +0 -0
  308. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_enum.py +0 -0
  309. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_eval.cpp +0 -0
  310. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_eval.py +0 -0
  311. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_eval_call.py +0 -0
  312. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_exceptions.cpp +0 -0
  313. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_exceptions.h +0 -0
  314. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_exceptions.py +0 -0
  315. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_factory_constructors.cpp +0 -0
  316. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_factory_constructors.py +0 -0
  317. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_gil_scoped.cpp +0 -0
  318. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_gil_scoped.py +0 -0
  319. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_iostream.cpp +0 -0
  320. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_iostream.py +0 -0
  321. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_kwargs_and_defaults.cpp +0 -0
  322. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_kwargs_and_defaults.py +0 -0
  323. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_local_bindings.cpp +0 -0
  324. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_local_bindings.py +0 -0
  325. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_methods_and_attributes.cpp +0 -0
  326. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_methods_and_attributes.py +0 -0
  327. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_modules.cpp +0 -0
  328. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_modules.py +0 -0
  329. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_multiple_inheritance.cpp +0 -0
  330. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_multiple_inheritance.py +0 -0
  331. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_numpy_array.cpp +0 -0
  332. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_numpy_array.py +0 -0
  333. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_numpy_dtypes.cpp +0 -0
  334. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_numpy_dtypes.py +0 -0
  335. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_numpy_vectorize.cpp +0 -0
  336. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_numpy_vectorize.py +0 -0
  337. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_opaque_types.cpp +0 -0
  338. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_opaque_types.py +0 -0
  339. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_operator_overloading.cpp +0 -0
  340. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_operator_overloading.py +0 -0
  341. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_pickling.cpp +0 -0
  342. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_pickling.py +0 -0
  343. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_python_multiple_inheritance.cpp +0 -0
  344. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_python_multiple_inheritance.py +0 -0
  345. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_pytypes.cpp +0 -0
  346. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_pytypes.py +0 -0
  347. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_sequences_and_iterators.cpp +0 -0
  348. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_sequences_and_iterators.py +0 -0
  349. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_smart_ptr.cpp +0 -0
  350. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_smart_ptr.py +0 -0
  351. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_stl.cpp +0 -0
  352. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_stl.py +0 -0
  353. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_stl_binders.cpp +0 -0
  354. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_stl_binders.py +0 -0
  355. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_tagbased_polymorphic.cpp +0 -0
  356. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_tagbased_polymorphic.py +0 -0
  357. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_thread.cpp +0 -0
  358. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_thread.py +0 -0
  359. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_type_caster_pyobject_ptr.cpp +0 -0
  360. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_type_caster_pyobject_ptr.py +0 -0
  361. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_union.cpp +0 -0
  362. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_union.py +0 -0
  363. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_unnamed_namespace_a.cpp +0 -0
  364. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_unnamed_namespace_a.py +0 -0
  365. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_unnamed_namespace_b.cpp +0 -0
  366. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_unnamed_namespace_b.py +0 -0
  367. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_vector_unique_ptr_member.cpp +0 -0
  368. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_vector_unique_ptr_member.py +0 -0
  369. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_virtual_functions.cpp +0 -0
  370. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/test_virtual_functions.py +0 -0
  371. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/valgrind-numpy-scipy.supp +0 -0
  372. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tests/valgrind-python.supp +0 -0
  373. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tools/FindCatch.cmake +0 -0
  374. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tools/FindEigen3.cmake +0 -0
  375. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tools/FindPythonLibsNew.cmake +0 -0
  376. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tools/JoinPaths.cmake +0 -0
  377. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tools/check-style.sh +0 -0
  378. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tools/cmake_uninstall.cmake.in +0 -0
  379. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tools/codespell_ignore_lines_from_errors.py +0 -0
  380. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tools/libsize.py +0 -0
  381. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tools/make_changelog.py +0 -0
  382. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tools/pybind11.pc.in +0 -0
  383. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tools/pybind11Common.cmake +0 -0
  384. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tools/pybind11Config.cmake.in +0 -0
  385. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tools/pybind11NewTools.cmake +0 -0
  386. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tools/pybind11Tools.cmake +0 -0
  387. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tools/pyproject.toml +0 -0
  388. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tools/setup_global.py.in +0 -0
  389. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pybind11/tools/setup_main.py.in +0 -0
  390. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/src/pytetwild/py.typed +0 -0
  391. {pytetwild-0.1.dev1 → pytetwild-0.1.1}/tests/test_data/test_surf.ply +0 -0
  392. {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@v4
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.3
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@v2.16.5
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@v4
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@v4
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@v4
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.1.11
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.3.9
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.6.0
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.2.6
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: v4.5.0
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: v17.0.6
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.7.0
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.27.3
64
+ rev: 0.34.1
65
65
  hooks:
66
66
  - id: check-github-workflows
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.1
1
+ Metadata-Version: 2.2
2
2
  Name: pytetwild
3
- Version: 0.1.dev1
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:: pycon
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 diagional. The
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:: pycon
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 diagional. The
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.dev1"
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
- include = ["src/pytetwild/py.typed"]
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 = "cp38-* cp39-* cp310-* cp311-* cp312-*" # Only build Python 3.8-3.12 wheels
43
- skip = ["pp*", "*musllinux*"] # disable PyPy and musl-based wheels
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
- before-all = "yum install gmp gmp-devel -y"
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 &params = 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