xcoll 0.4.0__py3-none-any.whl → 0.5.0__py3-none-any.whl

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.

Potentially problematic release.


This version of xcoll might be problematic. Click here for more details.

Files changed (324) hide show
  1. xcoll/__init__.py +2 -1
  2. xcoll/beam_elements/__init__.py +7 -1
  3. xcoll/beam_elements/absorber.py +2 -2
  4. xcoll/beam_elements/base.py +105 -67
  5. xcoll/beam_elements/blowup.py +198 -0
  6. xcoll/beam_elements/{collimators_src → elements_src}/black_absorber.h +21 -3
  7. xcoll/beam_elements/{collimators_src → elements_src}/black_crystal.h +20 -2
  8. xcoll/beam_elements/elements_src/blowup.h +42 -0
  9. xcoll/beam_elements/elements_src/emittance_monitor.h +109 -0
  10. xcoll/beam_elements/{collimators_src → elements_src}/everest_block.h +19 -2
  11. xcoll/beam_elements/{collimators_src → elements_src}/everest_collimator.h +19 -3
  12. xcoll/beam_elements/{collimators_src → elements_src}/everest_crystal.h +30 -9
  13. xcoll/beam_elements/everest.py +5 -6
  14. xcoll/beam_elements/monitor.py +428 -0
  15. xcoll/colldb.py +103 -74
  16. xcoll/general.py +4 -4
  17. xcoll/initial_distribution.py +18 -6
  18. xcoll/install.py +3 -1
  19. xcoll/interaction_record/interaction_record.py +126 -80
  20. xcoll/interaction_record/interaction_record_src/interaction_record.h +43 -43
  21. xcoll/line_tools.py +8 -9
  22. xcoll/lossmap.py +48 -38
  23. xcoll/scattering_routines/everest/amorphous.h +4 -11
  24. xcoll/scattering_routines/everest/channeling.h +3 -8
  25. xcoll/scattering_routines/everest/everest.h +4 -1
  26. xcoll/scattering_routines/everest/jaw.h +4 -3
  27. xcoll/scattering_routines/everest/materials.py +35 -15
  28. xcoll/scattering_routines/everest/multiple_coulomb_scattering.h +2 -2
  29. xcoll/scattering_routines/everest/nuclear_interaction.h +1 -1
  30. xcoll/scattering_routines/everest/properties.h +6 -1
  31. xcoll/scattering_routines/fluka/flukaio/lib/libFlukaIO64.a +0 -0
  32. xcoll/scattering_routines/geant4/collimasim/.git +1 -0
  33. xcoll/scattering_routines/geant4/collimasim/.gitignore +12 -0
  34. xcoll/scattering_routines/geant4/collimasim/.gitmodules +3 -0
  35. xcoll/scattering_routines/geant4/collimasim/CMakeLists.txt +26 -0
  36. xcoll/scattering_routines/geant4/collimasim/README.md +21 -0
  37. xcoll/scattering_routines/geant4/collimasim/docs/Makefile +20 -0
  38. xcoll/scattering_routines/geant4/collimasim/docs/make.bat +35 -0
  39. xcoll/scattering_routines/geant4/collimasim/docs/source/collimasim.rst +10 -0
  40. xcoll/scattering_routines/geant4/collimasim/docs/source/conf.py +59 -0
  41. xcoll/scattering_routines/geant4/collimasim/docs/source/index.rst +26 -0
  42. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.appveyor.yml +37 -0
  43. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.clang-format +19 -0
  44. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.clang-tidy +65 -0
  45. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.cmake-format.yaml +73 -0
  46. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.git +1 -0
  47. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/CODEOWNERS +9 -0
  48. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/CONTRIBUTING.md +386 -0
  49. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/ISSUE_TEMPLATE/bug-report.yml +45 -0
  50. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/ISSUE_TEMPLATE/config.yml +8 -0
  51. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/dependabot.yml +16 -0
  52. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/labeler.yml +8 -0
  53. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/labeler_merged.yml +3 -0
  54. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/pull_request_template.md +19 -0
  55. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/workflows/ci.yml +969 -0
  56. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/workflows/configure.yml +84 -0
  57. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/workflows/format.yml +48 -0
  58. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/workflows/labeler.yml +16 -0
  59. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/workflows/pip.yml +103 -0
  60. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.gitignore +45 -0
  61. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.pre-commit-config.yaml +151 -0
  62. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.readthedocs.yml +3 -0
  63. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/CMakeLists.txt +297 -0
  64. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/LICENSE +29 -0
  65. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/MANIFEST.in +6 -0
  66. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/README.rst +180 -0
  67. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/Doxyfile +23 -0
  68. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/Makefile +192 -0
  69. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/_static/theme_overrides.css +11 -0
  70. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/chrono.rst +81 -0
  71. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/custom.rst +93 -0
  72. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/eigen.rst +310 -0
  73. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/functional.rst +109 -0
  74. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/index.rst +43 -0
  75. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/overview.rst +171 -0
  76. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/stl.rst +251 -0
  77. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/strings.rst +305 -0
  78. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/classes.rst +1297 -0
  79. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/embedding.rst +262 -0
  80. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/exceptions.rst +396 -0
  81. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/functions.rst +568 -0
  82. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/misc.rst +337 -0
  83. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/pycpp/index.rst +13 -0
  84. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/pycpp/numpy.rst +463 -0
  85. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/pycpp/object.rst +286 -0
  86. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/pycpp/utilities.rst +155 -0
  87. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/smart_ptrs.rst +174 -0
  88. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/basics.rst +308 -0
  89. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/benchmark.py +91 -0
  90. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/benchmark.rst +95 -0
  91. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/changelog.rst +2050 -0
  92. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/classes.rst +542 -0
  93. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/cmake/index.rst +8 -0
  94. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/compiling.rst +648 -0
  95. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/conf.py +381 -0
  96. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/faq.rst +343 -0
  97. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/index.rst +48 -0
  98. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/installing.rst +105 -0
  99. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/limitations.rst +72 -0
  100. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/pybind11-logo.png +0 -0
  101. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/pybind11_vs_boost_python1.png +0 -0
  102. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/pybind11_vs_boost_python1.svg +427 -0
  103. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/pybind11_vs_boost_python2.png +0 -0
  104. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/pybind11_vs_boost_python2.svg +427 -0
  105. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/reference.rst +130 -0
  106. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/release.rst +96 -0
  107. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/requirements.txt +8 -0
  108. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/upgrade.rst +548 -0
  109. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/attr.h +605 -0
  110. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/buffer_info.h +144 -0
  111. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/cast.h +1432 -0
  112. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/chrono.h +213 -0
  113. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/common.h +2 -0
  114. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/complex.h +65 -0
  115. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/class.h +709 -0
  116. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/common.h +1021 -0
  117. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/descr.h +104 -0
  118. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/init.h +346 -0
  119. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/internals.h +467 -0
  120. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/type_caster_base.h +978 -0
  121. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/typeid.h +55 -0
  122. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/eigen.h +606 -0
  123. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/embed.h +284 -0
  124. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/eval.h +163 -0
  125. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/functional.h +121 -0
  126. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/gil.h +193 -0
  127. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/iostream.h +275 -0
  128. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/numpy.h +1741 -0
  129. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/operators.h +163 -0
  130. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/options.h +65 -0
  131. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/pybind11.h +2497 -0
  132. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/pytypes.h +1879 -0
  133. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/stl/filesystem.h +103 -0
  134. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/stl.h +375 -0
  135. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/stl_bind.h +747 -0
  136. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/noxfile.py +88 -0
  137. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/__init__.py +11 -0
  138. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/__main__.py +52 -0
  139. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/_version.py +12 -0
  140. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/_version.pyi +6 -0
  141. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/commands.py +21 -0
  142. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/py.typed +0 -0
  143. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/setup_helpers.py +482 -0
  144. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/setup_helpers.pyi +63 -0
  145. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pyproject.toml +41 -0
  146. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/setup.cfg +56 -0
  147. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/setup.py +155 -0
  148. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/CMakeLists.txt +503 -0
  149. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/conftest.py +208 -0
  150. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/constructor_stats.h +275 -0
  151. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/cross_module_gil_utils.cpp +73 -0
  152. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/env.py +33 -0
  153. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/extra_python_package/pytest.ini +0 -0
  154. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/extra_python_package/test_files.py +279 -0
  155. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/extra_setuptools/pytest.ini +0 -0
  156. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/extra_setuptools/test_setuphelper.py +143 -0
  157. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/local_bindings.h +85 -0
  158. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/object.h +179 -0
  159. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/pybind11_cross_module_tests.cpp +151 -0
  160. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/pybind11_tests.cpp +91 -0
  161. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/pybind11_tests.h +85 -0
  162. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/pytest.ini +19 -0
  163. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/requirements.txt +12 -0
  164. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_async.cpp +26 -0
  165. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_async.py +25 -0
  166. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_buffers.cpp +216 -0
  167. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_buffers.py +163 -0
  168. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_builtin_casters.cpp +286 -0
  169. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_builtin_casters.py +536 -0
  170. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_call_policies.cpp +107 -0
  171. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_call_policies.py +248 -0
  172. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_callbacks.cpp +227 -0
  173. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_callbacks.py +202 -0
  174. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_chrono.cpp +84 -0
  175. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_chrono.py +210 -0
  176. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_class.cpp +550 -0
  177. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_class.py +473 -0
  178. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/CMakeLists.txt +84 -0
  179. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/embed.cpp +21 -0
  180. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/installed_embed/CMakeLists.txt +28 -0
  181. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/installed_function/CMakeLists.txt +39 -0
  182. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/installed_target/CMakeLists.txt +46 -0
  183. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/main.cpp +6 -0
  184. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/subdirectory_embed/CMakeLists.txt +41 -0
  185. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/subdirectory_function/CMakeLists.txt +35 -0
  186. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/subdirectory_target/CMakeLists.txt +41 -0
  187. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/test.py +10 -0
  188. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_constants_and_functions.cpp +165 -0
  189. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_constants_and_functions.py +53 -0
  190. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_copy_move.cpp +238 -0
  191. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_copy_move.py +126 -0
  192. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_custom_type_casters.cpp +141 -0
  193. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_custom_type_casters.py +117 -0
  194. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_custom_type_setup.cpp +41 -0
  195. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_custom_type_setup.py +50 -0
  196. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_docstring_options.cpp +69 -0
  197. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_docstring_options.py +42 -0
  198. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_eigen.cpp +348 -0
  199. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_eigen.py +771 -0
  200. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_embed/CMakeLists.txt +47 -0
  201. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_embed/catch.cpp +22 -0
  202. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_embed/external_module.cpp +23 -0
  203. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_embed/test_interpreter.cpp +326 -0
  204. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_embed/test_interpreter.py +15 -0
  205. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_enum.cpp +148 -0
  206. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_enum.py +272 -0
  207. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_eval.cpp +119 -0
  208. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_eval.py +51 -0
  209. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_eval_call.py +5 -0
  210. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_exceptions.cpp +285 -0
  211. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_exceptions.h +12 -0
  212. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_exceptions.py +265 -0
  213. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_factory_constructors.cpp +397 -0
  214. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_factory_constructors.py +520 -0
  215. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_gil_scoped.cpp +49 -0
  216. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_gil_scoped.py +94 -0
  217. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_iostream.cpp +125 -0
  218. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_iostream.py +331 -0
  219. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_kwargs_and_defaults.cpp +153 -0
  220. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_kwargs_and_defaults.py +284 -0
  221. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_local_bindings.cpp +107 -0
  222. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_local_bindings.py +257 -0
  223. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_methods_and_attributes.cpp +412 -0
  224. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_methods_and_attributes.py +517 -0
  225. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_modules.cpp +102 -0
  226. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_modules.py +92 -0
  227. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_multiple_inheritance.cpp +233 -0
  228. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_multiple_inheritance.py +360 -0
  229. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_numpy_array.cpp +472 -0
  230. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_numpy_array.py +593 -0
  231. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_numpy_dtypes.cpp +524 -0
  232. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_numpy_dtypes.py +441 -0
  233. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_numpy_vectorize.cpp +103 -0
  234. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_numpy_vectorize.py +267 -0
  235. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_opaque_types.cpp +73 -0
  236. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_opaque_types.py +59 -0
  237. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_operator_overloading.cpp +235 -0
  238. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_operator_overloading.py +146 -0
  239. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_pickling.cpp +189 -0
  240. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_pickling.py +82 -0
  241. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_pytypes.cpp +560 -0
  242. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_pytypes.py +651 -0
  243. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_sequences_and_iterators.cpp +500 -0
  244. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_sequences_and_iterators.py +253 -0
  245. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_smart_ptr.cpp +452 -0
  246. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_smart_ptr.py +318 -0
  247. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_stl.cpp +342 -0
  248. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_stl.py +291 -0
  249. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_stl_binders.cpp +131 -0
  250. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_stl_binders.py +318 -0
  251. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_tagbased_polymorphic.cpp +144 -0
  252. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_tagbased_polymorphic.py +29 -0
  253. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_thread.cpp +66 -0
  254. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_thread.py +44 -0
  255. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_union.cpp +22 -0
  256. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_union.py +9 -0
  257. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_virtual_functions.cpp +510 -0
  258. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_virtual_functions.py +408 -0
  259. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/valgrind-numpy-scipy.supp +140 -0
  260. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/valgrind-python.supp +117 -0
  261. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/FindCatch.cmake +70 -0
  262. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/FindEigen3.cmake +86 -0
  263. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/FindPythonLibsNew.cmake +257 -0
  264. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/check-style.sh +44 -0
  265. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/cmake_uninstall.cmake.in +23 -0
  266. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/libsize.py +39 -0
  267. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/make_changelog.py +64 -0
  268. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/pybind11Common.cmake +402 -0
  269. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/pybind11Config.cmake.in +233 -0
  270. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/pybind11NewTools.cmake +276 -0
  271. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/pybind11Tools.cmake +214 -0
  272. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/pyproject.toml +3 -0
  273. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/setup_global.py.in +65 -0
  274. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/setup_main.py.in +41 -0
  275. xcoll/scattering_routines/geant4/collimasim/pyproject.toml +8 -0
  276. xcoll/scattering_routines/geant4/collimasim/setup.py +144 -0
  277. xcoll/scattering_routines/geant4/collimasim/src/collimasim/BDSPyATInterface.cpp +403 -0
  278. xcoll/scattering_routines/geant4/collimasim/src/collimasim/BDSPyATInterface.hh +100 -0
  279. xcoll/scattering_routines/geant4/collimasim/src/collimasim/BDSXtrackInterface.cpp +763 -0
  280. xcoll/scattering_routines/geant4/collimasim/src/collimasim/BDSXtrackInterface.hh +118 -0
  281. xcoll/scattering_routines/geant4/collimasim/src/collimasim/__init__.py +8 -0
  282. xcoll/scattering_routines/geant4/collimasim/src/collimasim/bindings.cpp +63 -0
  283. xcoll/scattering_routines/geant4/collimasim/src/collimasim/pyCollimatorPass.py +142 -0
  284. xcoll/scattering_routines/geant4/collimasim/src/collimasim/xtrack_collimator.py +556 -0
  285. xcoll/scattering_routines/geant4/collimasim/src/collimasim.egg-info/PKG-INFO +6 -0
  286. xcoll/scattering_routines/geant4/collimasim/src/collimasim.egg-info/SOURCES.txt +24 -0
  287. xcoll/scattering_routines/geant4/collimasim/src/collimasim.egg-info/dependency_links.txt +1 -0
  288. xcoll/scattering_routines/geant4/collimasim/src/collimasim.egg-info/not-zip-safe +1 -0
  289. xcoll/scattering_routines/geant4/collimasim/src/collimasim.egg-info/top_level.txt +1 -0
  290. xcoll/scattering_routines/geant4/collimasim/tests/README.md +25 -0
  291. xcoll/scattering_routines/geant4/collimasim/tests/resources/CollDB_forions.dat +25 -0
  292. xcoll/scattering_routines/geant4/collimasim/tests/resources/CollDB_new_example.dat +18 -0
  293. xcoll/scattering_routines/geant4/collimasim/tests/resources/CollDB_old_example.dat +68 -0
  294. xcoll/scattering_routines/geant4/collimasim/tests/resources/CollDB_testing.dat +15 -0
  295. xcoll/scattering_routines/geant4/collimasim/tests/resources/CollDB_yaml_example.yaml +110 -0
  296. xcoll/scattering_routines/geant4/collimasim/tests/resources/collgaps.dat +7 -0
  297. xcoll/scattering_routines/geant4/collimasim/tests/resources/collgaps_pyat_test.dat +3 -0
  298. xcoll/scattering_routines/geant4/collimasim/tests/resources/collonly_twiss_file_example.tfs +54 -0
  299. xcoll/scattering_routines/geant4/collimasim/tests/resources/settings.gmad +3 -0
  300. xcoll/scattering_routines/geant4/collimasim/tests/resources/settings_black_absorber.gmad +3 -0
  301. xcoll/scattering_routines/geant4/collimasim/tests/resources/settings_ions.gmad +5 -0
  302. xcoll/scattering_routines/geant4/collimasim/tests/resources/twiss_file_testing.tfs +51 -0
  303. xcoll/scattering_routines/geant4/collimasim/tests/test_pyat.py +65 -0
  304. xcoll/scattering_routines/geant4/collimasim/tests/test_pyat_passmethod.py +59 -0
  305. xcoll/scattering_routines/geant4/collimasim/tests/test_pyat_tracking.py +102 -0
  306. xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack.py +75 -0
  307. xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_angle.py +74 -0
  308. xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_colldb_load.py +84 -0
  309. xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_interaction.py +159 -0
  310. xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_interaction_ion.py +99 -0
  311. xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_ions.py +78 -0
  312. xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_lost_energy.py +88 -0
  313. xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_tilt.py +80 -0
  314. xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_tracking.py +97 -0
  315. xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_tracking_ions.py +96 -0
  316. xcoll/scattering_routines/geometry/collimator_geometry.h +9 -10
  317. xcoll/scattering_routines/geometry/crystal_geometry.h +9 -6
  318. {xcoll-0.4.0.dist-info → xcoll-0.5.0.dist-info}/METADATA +1 -1
  319. xcoll-0.5.0.dist-info/RECORD +413 -0
  320. xcoll/scattering_routines/fluka/build_fluka_input.py +0 -58
  321. xcoll-0.4.0.dist-info/RECORD +0 -126
  322. {xcoll-0.4.0.dist-info → xcoll-0.5.0.dist-info}/LICENSE +0 -0
  323. {xcoll-0.4.0.dist-info → xcoll-0.5.0.dist-info}/NOTICE +0 -0
  324. {xcoll-0.4.0.dist-info → xcoll-0.5.0.dist-info}/WHEEL +0 -0
@@ -0,0 +1,275 @@
1
+ #pragma once
2
+ /*
3
+ tests/constructor_stats.h -- framework for printing and tracking object
4
+ instance lifetimes in example/test code.
5
+
6
+ Copyright (c) 2016 Jason Rhinelander <jason@imaginary.ca>
7
+
8
+ All rights reserved. Use of this source code is governed by a
9
+ BSD-style license that can be found in the LICENSE file.
10
+
11
+ This header provides a few useful tools for writing examples or tests that want to check and/or
12
+ display object instance lifetimes. It requires that you include this header and add the following
13
+ function calls to constructors:
14
+
15
+ class MyClass {
16
+ MyClass() { ...; print_default_created(this); }
17
+ ~MyClass() { ...; print_destroyed(this); }
18
+ MyClass(const MyClass &c) { ...; print_copy_created(this); }
19
+ MyClass(MyClass &&c) { ...; print_move_created(this); }
20
+ MyClass(int a, int b) { ...; print_created(this, a, b); }
21
+ MyClass &operator=(const MyClass &c) { ...; print_copy_assigned(this); }
22
+ MyClass &operator=(MyClass &&c) { ...; print_move_assigned(this); }
23
+
24
+ ...
25
+ }
26
+
27
+ You can find various examples of these in several of the existing testing .cpp files. (Of course
28
+ you don't need to add any of the above constructors/operators that you don't actually have, except
29
+ for the destructor).
30
+
31
+ Each of these will print an appropriate message such as:
32
+
33
+ ### MyClass @ 0x2801910 created via default constructor
34
+ ### MyClass @ 0x27fa780 created 100 200
35
+ ### MyClass @ 0x2801910 destroyed
36
+ ### MyClass @ 0x27fa780 destroyed
37
+
38
+ You can also include extra arguments (such as the 100, 200 in the output above, coming from the
39
+ value constructor) for all of the above methods which will be included in the output.
40
+
41
+ For testing, each of these also keeps track the created instances and allows you to check how many
42
+ of the various constructors have been invoked from the Python side via code such as:
43
+
44
+ from pybind11_tests import ConstructorStats
45
+ cstats = ConstructorStats.get(MyClass)
46
+ print(cstats.alive())
47
+ print(cstats.default_constructions)
48
+
49
+ Note that `.alive()` should usually be the first thing you call as it invokes Python's garbage
50
+ collector to actually destroy objects that aren't yet referenced.
51
+
52
+ For everything except copy and move constructors and destructors, any extra values given to the
53
+ print_...() function is stored in a class-specific values list which you can retrieve and inspect
54
+ from the ConstructorStats instance `.values()` method.
55
+
56
+ In some cases, when you need to track instances of a C++ class not registered with pybind11, you
57
+ need to add a function returning the ConstructorStats for the C++ class; this can be done with:
58
+
59
+ m.def("get_special_cstats", &ConstructorStats::get<SpecialClass>, py::return_value_policy::reference)
60
+
61
+ Finally, you can suppress the output messages, but keep the constructor tracking (for
62
+ inspection/testing in python) by using the functions with `print_` replaced with `track_` (e.g.
63
+ `track_copy_created(this)`).
64
+
65
+ */
66
+
67
+ #include "pybind11_tests.h"
68
+ #include <unordered_map>
69
+ #include <list>
70
+ #include <typeindex>
71
+ #include <sstream>
72
+
73
+ class ConstructorStats {
74
+ protected:
75
+ std::unordered_map<void*, int> _instances; // Need a map rather than set because members can shared address with parents
76
+ std::list<std::string> _values; // Used to track values (e.g. of value constructors)
77
+ public:
78
+ int default_constructions = 0;
79
+ int copy_constructions = 0;
80
+ int move_constructions = 0;
81
+ int copy_assignments = 0;
82
+ int move_assignments = 0;
83
+
84
+ void copy_created(void *inst) {
85
+ created(inst);
86
+ copy_constructions++;
87
+ }
88
+
89
+ void move_created(void *inst) {
90
+ created(inst);
91
+ move_constructions++;
92
+ }
93
+
94
+ void default_created(void *inst) {
95
+ created(inst);
96
+ default_constructions++;
97
+ }
98
+
99
+ void created(void *inst) {
100
+ ++_instances[inst];
101
+ }
102
+
103
+ void destroyed(void *inst) {
104
+ if (--_instances[inst] < 0)
105
+ throw std::runtime_error("cstats.destroyed() called with unknown "
106
+ "instance; potential double-destruction "
107
+ "or a missing cstats.created()");
108
+ }
109
+
110
+ static void gc() {
111
+ // Force garbage collection to ensure any pending destructors are invoked:
112
+ #if defined(PYPY_VERSION)
113
+ PyObject *globals = PyEval_GetGlobals();
114
+ PyObject *result = PyRun_String(
115
+ "import gc\n"
116
+ "for i in range(2):"
117
+ " gc.collect()\n",
118
+ Py_file_input, globals, globals);
119
+ if (result == nullptr)
120
+ throw py::error_already_set();
121
+ Py_DECREF(result);
122
+ #else
123
+ py::module_::import("gc").attr("collect")();
124
+ #endif
125
+ }
126
+
127
+ int alive() {
128
+ gc();
129
+ int total = 0;
130
+ for (const auto &p : _instances)
131
+ if (p.second > 0)
132
+ total += p.second;
133
+ return total;
134
+ }
135
+
136
+ void value() {} // Recursion terminator
137
+ // Takes one or more values, converts them to strings, then stores them.
138
+ template <typename T, typename... Tmore> void value(const T &v, Tmore &&...args) {
139
+ std::ostringstream oss;
140
+ oss << v;
141
+ _values.push_back(oss.str());
142
+ value(std::forward<Tmore>(args)...);
143
+ }
144
+
145
+ // Move out stored values
146
+ py::list values() {
147
+ py::list l;
148
+ for (const auto &v : _values) l.append(py::cast(v));
149
+ _values.clear();
150
+ return l;
151
+ }
152
+
153
+ // Gets constructor stats from a C++ type index
154
+ static ConstructorStats& get(std::type_index type) {
155
+ static std::unordered_map<std::type_index, ConstructorStats> all_cstats;
156
+ return all_cstats[type];
157
+ }
158
+
159
+ // Gets constructor stats from a C++ type
160
+ template <typename T> static ConstructorStats& get() {
161
+ #if defined(PYPY_VERSION)
162
+ gc();
163
+ #endif
164
+ return get(typeid(T));
165
+ }
166
+
167
+ // Gets constructor stats from a Python class
168
+ static ConstructorStats& get(py::object class_) {
169
+ auto &internals = py::detail::get_internals();
170
+ const std::type_index *t1 = nullptr, *t2 = nullptr;
171
+ try {
172
+ auto *type_info = internals.registered_types_py.at((PyTypeObject *) class_.ptr()).at(0);
173
+ for (auto &p : internals.registered_types_cpp) {
174
+ if (p.second == type_info) {
175
+ if (t1) {
176
+ t2 = &p.first;
177
+ break;
178
+ }
179
+ t1 = &p.first;
180
+ }
181
+ }
182
+ }
183
+ catch (const std::out_of_range&) {}
184
+ if (!t1) throw std::runtime_error("Unknown class passed to ConstructorStats::get()");
185
+ auto &cs1 = get(*t1);
186
+ // If we have both a t1 and t2 match, one is probably the trampoline class; return whichever
187
+ // has more constructions (typically one or the other will be 0)
188
+ if (t2) {
189
+ auto &cs2 = get(*t2);
190
+ int cs1_total = cs1.default_constructions + cs1.copy_constructions + cs1.move_constructions + (int) cs1._values.size();
191
+ int cs2_total = cs2.default_constructions + cs2.copy_constructions + cs2.move_constructions + (int) cs2._values.size();
192
+ if (cs2_total > cs1_total) return cs2;
193
+ }
194
+ return cs1;
195
+ }
196
+ };
197
+
198
+ // To track construction/destruction, you need to call these methods from the various
199
+ // constructors/operators. The ones that take extra values record the given values in the
200
+ // constructor stats values for later inspection.
201
+ template <class T> void track_copy_created(T *inst) { ConstructorStats::get<T>().copy_created(inst); }
202
+ template <class T> void track_move_created(T *inst) { ConstructorStats::get<T>().move_created(inst); }
203
+ template <class T, typename... Values> void track_copy_assigned(T *, Values &&...values) {
204
+ auto &cst = ConstructorStats::get<T>();
205
+ cst.copy_assignments++;
206
+ cst.value(std::forward<Values>(values)...);
207
+ }
208
+ template <class T, typename... Values> void track_move_assigned(T *, Values &&...values) {
209
+ auto &cst = ConstructorStats::get<T>();
210
+ cst.move_assignments++;
211
+ cst.value(std::forward<Values>(values)...);
212
+ }
213
+ template <class T, typename... Values> void track_default_created(T *inst, Values &&...values) {
214
+ auto &cst = ConstructorStats::get<T>();
215
+ cst.default_created(inst);
216
+ cst.value(std::forward<Values>(values)...);
217
+ }
218
+ template <class T, typename... Values> void track_created(T *inst, Values &&...values) {
219
+ auto &cst = ConstructorStats::get<T>();
220
+ cst.created(inst);
221
+ cst.value(std::forward<Values>(values)...);
222
+ }
223
+ template <class T, typename... Values> void track_destroyed(T *inst) {
224
+ ConstructorStats::get<T>().destroyed(inst);
225
+ }
226
+ template <class T, typename... Values> void track_values(T *, Values &&...values) {
227
+ ConstructorStats::get<T>().value(std::forward<Values>(values)...);
228
+ }
229
+
230
+ /// Don't cast pointers to Python, print them as strings
231
+ inline const char *format_ptrs(const char *p) { return p; }
232
+ template <typename T>
233
+ py::str format_ptrs(T *p) { return "{:#x}"_s.format(reinterpret_cast<std::uintptr_t>(p)); }
234
+ template <typename T>
235
+ auto format_ptrs(T &&x) -> decltype(std::forward<T>(x)) { return std::forward<T>(x); }
236
+
237
+ template <class T, typename... Output>
238
+ void print_constr_details(T *inst, const std::string &action, Output &&...output) {
239
+ py::print("###", py::type_id<T>(), "@", format_ptrs(inst), action,
240
+ format_ptrs(std::forward<Output>(output))...);
241
+ }
242
+
243
+ // Verbose versions of the above:
244
+ template <class T, typename... Values> void print_copy_created(T *inst, Values &&...values) { // NB: this prints, but doesn't store, given values
245
+ print_constr_details(inst, "created via copy constructor", values...);
246
+ track_copy_created(inst);
247
+ }
248
+ template <class T, typename... Values> void print_move_created(T *inst, Values &&...values) { // NB: this prints, but doesn't store, given values
249
+ print_constr_details(inst, "created via move constructor", values...);
250
+ track_move_created(inst);
251
+ }
252
+ template <class T, typename... Values> void print_copy_assigned(T *inst, Values &&...values) {
253
+ print_constr_details(inst, "assigned via copy assignment", values...);
254
+ track_copy_assigned(inst, values...);
255
+ }
256
+ template <class T, typename... Values> void print_move_assigned(T *inst, Values &&...values) {
257
+ print_constr_details(inst, "assigned via move assignment", values...);
258
+ track_move_assigned(inst, values...);
259
+ }
260
+ template <class T, typename... Values> void print_default_created(T *inst, Values &&...values) {
261
+ print_constr_details(inst, "created via default constructor", values...);
262
+ track_default_created(inst, values...);
263
+ }
264
+ template <class T, typename... Values> void print_created(T *inst, Values &&...values) {
265
+ print_constr_details(inst, "created", values...);
266
+ track_created(inst, values...);
267
+ }
268
+ template <class T, typename... Values> void print_destroyed(T *inst, Values &&...values) { // Prints but doesn't store given values
269
+ print_constr_details(inst, "destroyed", values...);
270
+ track_destroyed(inst);
271
+ }
272
+ template <class T, typename... Values> void print_values(T *inst, Values &&...values) {
273
+ print_constr_details(inst, ":", values...);
274
+ track_values(inst, values...);
275
+ }
@@ -0,0 +1,73 @@
1
+ /*
2
+ tests/cross_module_gil_utils.cpp -- tools for acquiring GIL from a different module
3
+
4
+ Copyright (c) 2019 Google LLC
5
+
6
+ All rights reserved. Use of this source code is governed by a
7
+ BSD-style license that can be found in the LICENSE file.
8
+ */
9
+ #include <pybind11/pybind11.h>
10
+ #include <cstdint>
11
+
12
+ // This file mimics a DSO that makes pybind11 calls but does not define a
13
+ // PYBIND11_MODULE. The purpose is to test that such a DSO can create a
14
+ // py::gil_scoped_acquire when the running thread is in a GIL-released state.
15
+ //
16
+ // Note that we define a Python module here for convenience, but in general
17
+ // this need not be the case. The typical scenario would be a DSO that implements
18
+ // shared logic used internally by multiple pybind11 modules.
19
+
20
+ namespace {
21
+
22
+ namespace py = pybind11;
23
+ void gil_acquire() { py::gil_scoped_acquire gil; }
24
+
25
+ constexpr char kModuleName[] = "cross_module_gil_utils";
26
+
27
+ #if PY_MAJOR_VERSION >= 3
28
+ struct PyModuleDef moduledef = {
29
+ PyModuleDef_HEAD_INIT,
30
+ kModuleName,
31
+ NULL,
32
+ 0,
33
+ NULL,
34
+ NULL,
35
+ NULL,
36
+ NULL,
37
+ NULL
38
+ };
39
+ #else
40
+ PyMethodDef module_methods[] = {
41
+ {NULL, NULL, 0, NULL}
42
+ };
43
+ #endif
44
+
45
+ } // namespace
46
+
47
+ extern "C" PYBIND11_EXPORT
48
+ #if PY_MAJOR_VERSION >= 3
49
+ PyObject* PyInit_cross_module_gil_utils()
50
+ #else
51
+ void initcross_module_gil_utils()
52
+ #endif
53
+ {
54
+
55
+ PyObject* m =
56
+ #if PY_MAJOR_VERSION >= 3
57
+ PyModule_Create(&moduledef);
58
+ #else
59
+ Py_InitModule(kModuleName, module_methods);
60
+ #endif
61
+
62
+ if (m != NULL) {
63
+ static_assert(
64
+ sizeof(&gil_acquire) == sizeof(void*),
65
+ "Function pointer must have the same size as void*");
66
+ PyModule_AddObject(m, "gil_acquire_funcaddr",
67
+ PyLong_FromVoidPtr(reinterpret_cast<void*>(&gil_acquire)));
68
+ }
69
+
70
+ #if PY_MAJOR_VERSION >= 3
71
+ return m;
72
+ #endif
73
+ }
@@ -0,0 +1,33 @@
1
+ # -*- coding: utf-8 -*-
2
+ import platform
3
+ import sys
4
+
5
+ import pytest
6
+
7
+ LINUX = sys.platform.startswith("linux")
8
+ MACOS = sys.platform.startswith("darwin")
9
+ WIN = sys.platform.startswith("win32") or sys.platform.startswith("cygwin")
10
+
11
+ CPYTHON = platform.python_implementation() == "CPython"
12
+ PYPY = platform.python_implementation() == "PyPy"
13
+
14
+ PY2 = sys.version_info.major == 2
15
+
16
+ PY = sys.version_info
17
+
18
+
19
+ def deprecated_call():
20
+ """
21
+ pytest.deprecated_call() seems broken in pytest<3.9.x; concretely, it
22
+ doesn't work on CPython 3.8.0 with pytest==3.3.2 on Ubuntu 18.04 (#2922).
23
+
24
+ This is a narrowed reimplementation of the following PR :(
25
+ https://github.com/pytest-dev/pytest/pull/4104
26
+ """
27
+ # TODO: Remove this when testing requires pytest>=3.9.
28
+ pieces = pytest.__version__.split(".")
29
+ pytest_major_minor = (int(pieces[0]), int(pieces[1]))
30
+ if pytest_major_minor < (3, 9):
31
+ return pytest.warns((DeprecationWarning, PendingDeprecationWarning))
32
+ else:
33
+ return pytest.deprecated_call()
@@ -0,0 +1,279 @@
1
+ # -*- coding: utf-8 -*-
2
+ import contextlib
3
+ import os
4
+ import string
5
+ import subprocess
6
+ import sys
7
+ import tarfile
8
+ import zipfile
9
+
10
+ # These tests must be run explicitly
11
+ # They require CMake 3.15+ (--install)
12
+
13
+ DIR = os.path.abspath(os.path.dirname(__file__))
14
+ MAIN_DIR = os.path.dirname(os.path.dirname(DIR))
15
+
16
+
17
+ main_headers = {
18
+ "include/pybind11/attr.h",
19
+ "include/pybind11/buffer_info.h",
20
+ "include/pybind11/cast.h",
21
+ "include/pybind11/chrono.h",
22
+ "include/pybind11/common.h",
23
+ "include/pybind11/complex.h",
24
+ "include/pybind11/eigen.h",
25
+ "include/pybind11/embed.h",
26
+ "include/pybind11/eval.h",
27
+ "include/pybind11/functional.h",
28
+ "include/pybind11/gil.h",
29
+ "include/pybind11/iostream.h",
30
+ "include/pybind11/numpy.h",
31
+ "include/pybind11/operators.h",
32
+ "include/pybind11/options.h",
33
+ "include/pybind11/pybind11.h",
34
+ "include/pybind11/pytypes.h",
35
+ "include/pybind11/stl.h",
36
+ "include/pybind11/stl_bind.h",
37
+ }
38
+
39
+ detail_headers = {
40
+ "include/pybind11/detail/class.h",
41
+ "include/pybind11/detail/common.h",
42
+ "include/pybind11/detail/descr.h",
43
+ "include/pybind11/detail/init.h",
44
+ "include/pybind11/detail/internals.h",
45
+ "include/pybind11/detail/type_caster_base.h",
46
+ "include/pybind11/detail/typeid.h",
47
+ }
48
+
49
+ stl_headers = {
50
+ "include/pybind11/stl/filesystem.h",
51
+ }
52
+
53
+ cmake_files = {
54
+ "share/cmake/pybind11/FindPythonLibsNew.cmake",
55
+ "share/cmake/pybind11/pybind11Common.cmake",
56
+ "share/cmake/pybind11/pybind11Config.cmake",
57
+ "share/cmake/pybind11/pybind11ConfigVersion.cmake",
58
+ "share/cmake/pybind11/pybind11NewTools.cmake",
59
+ "share/cmake/pybind11/pybind11Targets.cmake",
60
+ "share/cmake/pybind11/pybind11Tools.cmake",
61
+ }
62
+
63
+ py_files = {
64
+ "__init__.py",
65
+ "__main__.py",
66
+ "_version.py",
67
+ "_version.pyi",
68
+ "commands.py",
69
+ "py.typed",
70
+ "setup_helpers.py",
71
+ "setup_helpers.pyi",
72
+ }
73
+
74
+ headers = main_headers | detail_headers | stl_headers
75
+ src_files = headers | cmake_files
76
+ all_files = src_files | py_files
77
+
78
+
79
+ sdist_files = {
80
+ "pybind11",
81
+ "pybind11/include",
82
+ "pybind11/include/pybind11",
83
+ "pybind11/include/pybind11/detail",
84
+ "pybind11/include/pybind11/stl",
85
+ "pybind11/share",
86
+ "pybind11/share/cmake",
87
+ "pybind11/share/cmake/pybind11",
88
+ "pyproject.toml",
89
+ "setup.cfg",
90
+ "setup.py",
91
+ "LICENSE",
92
+ "MANIFEST.in",
93
+ "README.rst",
94
+ "PKG-INFO",
95
+ }
96
+
97
+ local_sdist_files = {
98
+ ".egg-info",
99
+ ".egg-info/PKG-INFO",
100
+ ".egg-info/SOURCES.txt",
101
+ ".egg-info/dependency_links.txt",
102
+ ".egg-info/not-zip-safe",
103
+ ".egg-info/top_level.txt",
104
+ }
105
+
106
+
107
+ def test_build_sdist(monkeypatch, tmpdir):
108
+
109
+ monkeypatch.chdir(MAIN_DIR)
110
+
111
+ out = subprocess.check_output(
112
+ [
113
+ sys.executable,
114
+ "setup.py",
115
+ "sdist",
116
+ "--formats=tar",
117
+ "--dist-dir",
118
+ str(tmpdir),
119
+ ]
120
+ )
121
+ if hasattr(out, "decode"):
122
+ out = out.decode()
123
+
124
+ (sdist,) = tmpdir.visit("*.tar")
125
+
126
+ with tarfile.open(str(sdist)) as tar:
127
+ start = tar.getnames()[0] + "/"
128
+ version = start[9:-1]
129
+ simpler = {n.split("/", 1)[-1] for n in tar.getnames()[1:]}
130
+
131
+ with contextlib.closing(
132
+ tar.extractfile(tar.getmember(start + "setup.py"))
133
+ ) as f:
134
+ setup_py = f.read()
135
+
136
+ with contextlib.closing(
137
+ tar.extractfile(tar.getmember(start + "pyproject.toml"))
138
+ ) as f:
139
+ pyproject_toml = f.read()
140
+
141
+ with contextlib.closing(
142
+ tar.extractfile(
143
+ tar.getmember(
144
+ start + "pybind11/share/cmake/pybind11/pybind11Config.cmake"
145
+ )
146
+ )
147
+ ) as f:
148
+ contents = f.read().decode("utf8")
149
+ assert 'set(pybind11_INCLUDE_DIR "${PACKAGE_PREFIX_DIR}/include")' in contents
150
+
151
+ files = {"pybind11/{}".format(n) for n in all_files}
152
+ files |= sdist_files
153
+ files |= {"pybind11{}".format(n) for n in local_sdist_files}
154
+ files.add("pybind11.egg-info/entry_points.txt")
155
+ files.add("pybind11.egg-info/requires.txt")
156
+ assert simpler == files
157
+
158
+ with open(os.path.join(MAIN_DIR, "tools", "setup_main.py.in"), "rb") as f:
159
+ contents = (
160
+ string.Template(f.read().decode())
161
+ .substitute(version=version, extra_cmd="")
162
+ .encode()
163
+ )
164
+ assert setup_py == contents
165
+
166
+ with open(os.path.join(MAIN_DIR, "tools", "pyproject.toml"), "rb") as f:
167
+ contents = f.read()
168
+ assert pyproject_toml == contents
169
+
170
+
171
+ def test_build_global_dist(monkeypatch, tmpdir):
172
+
173
+ monkeypatch.chdir(MAIN_DIR)
174
+ monkeypatch.setenv("PYBIND11_GLOBAL_SDIST", "1")
175
+
176
+ out = subprocess.check_output(
177
+ [
178
+ sys.executable,
179
+ "setup.py",
180
+ "sdist",
181
+ "--formats=tar",
182
+ "--dist-dir",
183
+ str(tmpdir),
184
+ ]
185
+ )
186
+ if hasattr(out, "decode"):
187
+ out = out.decode()
188
+
189
+ (sdist,) = tmpdir.visit("*.tar")
190
+
191
+ with tarfile.open(str(sdist)) as tar:
192
+ start = tar.getnames()[0] + "/"
193
+ version = start[16:-1]
194
+ simpler = {n.split("/", 1)[-1] for n in tar.getnames()[1:]}
195
+
196
+ with contextlib.closing(
197
+ tar.extractfile(tar.getmember(start + "setup.py"))
198
+ ) as f:
199
+ setup_py = f.read()
200
+
201
+ with contextlib.closing(
202
+ tar.extractfile(tar.getmember(start + "pyproject.toml"))
203
+ ) as f:
204
+ pyproject_toml = f.read()
205
+
206
+ files = {"pybind11/{}".format(n) for n in all_files}
207
+ files |= sdist_files
208
+ files |= {"pybind11_global{}".format(n) for n in local_sdist_files}
209
+ assert simpler == files
210
+
211
+ with open(os.path.join(MAIN_DIR, "tools", "setup_global.py.in"), "rb") as f:
212
+ contents = (
213
+ string.Template(f.read().decode())
214
+ .substitute(version=version, extra_cmd="")
215
+ .encode()
216
+ )
217
+ assert setup_py == contents
218
+
219
+ with open(os.path.join(MAIN_DIR, "tools", "pyproject.toml"), "rb") as f:
220
+ contents = f.read()
221
+ assert pyproject_toml == contents
222
+
223
+
224
+ def tests_build_wheel(monkeypatch, tmpdir):
225
+ monkeypatch.chdir(MAIN_DIR)
226
+
227
+ subprocess.check_output(
228
+ [sys.executable, "-m", "pip", "wheel", ".", "-w", str(tmpdir)]
229
+ )
230
+
231
+ (wheel,) = tmpdir.visit("*.whl")
232
+
233
+ files = {"pybind11/{}".format(n) for n in all_files}
234
+ files |= {
235
+ "dist-info/LICENSE",
236
+ "dist-info/METADATA",
237
+ "dist-info/RECORD",
238
+ "dist-info/WHEEL",
239
+ "dist-info/entry_points.txt",
240
+ "dist-info/top_level.txt",
241
+ }
242
+
243
+ with zipfile.ZipFile(str(wheel)) as z:
244
+ names = z.namelist()
245
+
246
+ trimmed = {n for n in names if "dist-info" not in n}
247
+ trimmed |= {
248
+ "dist-info/{}".format(n.split("/", 1)[-1]) for n in names if "dist-info" in n
249
+ }
250
+ assert files == trimmed
251
+
252
+
253
+ def tests_build_global_wheel(monkeypatch, tmpdir):
254
+ monkeypatch.chdir(MAIN_DIR)
255
+ monkeypatch.setenv("PYBIND11_GLOBAL_SDIST", "1")
256
+
257
+ subprocess.check_output(
258
+ [sys.executable, "-m", "pip", "wheel", ".", "-w", str(tmpdir)]
259
+ )
260
+
261
+ (wheel,) = tmpdir.visit("*.whl")
262
+
263
+ files = {"data/data/{}".format(n) for n in src_files}
264
+ files |= {"data/headers/{}".format(n[8:]) for n in headers}
265
+ files |= {
266
+ "dist-info/LICENSE",
267
+ "dist-info/METADATA",
268
+ "dist-info/WHEEL",
269
+ "dist-info/top_level.txt",
270
+ "dist-info/RECORD",
271
+ }
272
+
273
+ with zipfile.ZipFile(str(wheel)) as z:
274
+ names = z.namelist()
275
+
276
+ beginning = names[0].split("/", 1)[0].rsplit(".", 1)[0]
277
+ trimmed = {n[len(beginning) + 1 :] for n in names}
278
+
279
+ assert files == trimmed