xcoll 0.3.6__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 (350) hide show
  1. xcoll/__init__.py +13 -4
  2. xcoll/beam_elements/__init__.py +14 -6
  3. xcoll/beam_elements/absorber.py +41 -7
  4. xcoll/beam_elements/base.py +1202 -247
  5. xcoll/beam_elements/blowup.py +198 -0
  6. xcoll/beam_elements/elements_src/black_absorber.h +136 -0
  7. xcoll/beam_elements/elements_src/black_crystal.h +129 -0
  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 +59 -30
  11. xcoll/beam_elements/elements_src/everest_collimator.h +237 -0
  12. xcoll/beam_elements/elements_src/everest_crystal.h +280 -0
  13. xcoll/beam_elements/everest.py +65 -119
  14. xcoll/beam_elements/monitor.py +428 -0
  15. xcoll/colldb.py +276 -747
  16. xcoll/general.py +5 -5
  17. xcoll/headers/checks.h +1 -1
  18. xcoll/headers/particle_states.h +2 -2
  19. xcoll/initial_distribution.py +207 -0
  20. xcoll/install.py +179 -0
  21. xcoll/interaction_record/__init__.py +1 -0
  22. xcoll/interaction_record/interaction_record.py +298 -0
  23. xcoll/interaction_record/interaction_record_src/interaction_record.h +98 -0
  24. xcoll/{impacts → interaction_record}/interaction_types.py +11 -4
  25. xcoll/line_tools.py +82 -0
  26. xcoll/lossmap.py +219 -0
  27. xcoll/manager.py +2 -937
  28. xcoll/rf_sweep.py +1 -1
  29. xcoll/scattering_routines/everest/amorphous.h +232 -0
  30. xcoll/scattering_routines/everest/channeling.h +240 -0
  31. xcoll/scattering_routines/everest/crystal_parameters.h +137 -0
  32. xcoll/scattering_routines/everest/everest.h +11 -30
  33. xcoll/scattering_routines/everest/everest.py +13 -10
  34. xcoll/scattering_routines/everest/jaw.h +28 -197
  35. xcoll/scattering_routines/everest/materials.py +37 -15
  36. xcoll/scattering_routines/everest/multiple_coulomb_scattering.h +31 -10
  37. xcoll/scattering_routines/everest/nuclear_interaction.h +86 -0
  38. xcoll/scattering_routines/everest/properties.h +6 -1
  39. xcoll/scattering_routines/fluka/flukaio/lib/libFlukaIO64.a +0 -0
  40. xcoll/scattering_routines/geant4/collimasim/.git +1 -0
  41. xcoll/scattering_routines/geant4/collimasim/.gitignore +12 -0
  42. xcoll/scattering_routines/geant4/collimasim/.gitmodules +3 -0
  43. xcoll/scattering_routines/geant4/collimasim/CMakeLists.txt +26 -0
  44. xcoll/scattering_routines/geant4/collimasim/README.md +21 -0
  45. xcoll/scattering_routines/geant4/collimasim/docs/Makefile +20 -0
  46. xcoll/scattering_routines/geant4/collimasim/docs/make.bat +35 -0
  47. xcoll/scattering_routines/geant4/collimasim/docs/source/collimasim.rst +10 -0
  48. xcoll/scattering_routines/geant4/collimasim/docs/source/conf.py +59 -0
  49. xcoll/scattering_routines/geant4/collimasim/docs/source/index.rst +26 -0
  50. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.appveyor.yml +37 -0
  51. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.clang-format +19 -0
  52. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.clang-tidy +65 -0
  53. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.cmake-format.yaml +73 -0
  54. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.git +1 -0
  55. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/CODEOWNERS +9 -0
  56. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/CONTRIBUTING.md +386 -0
  57. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/ISSUE_TEMPLATE/bug-report.yml +45 -0
  58. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/ISSUE_TEMPLATE/config.yml +8 -0
  59. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/dependabot.yml +16 -0
  60. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/labeler.yml +8 -0
  61. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/labeler_merged.yml +3 -0
  62. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/pull_request_template.md +19 -0
  63. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/workflows/ci.yml +969 -0
  64. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/workflows/configure.yml +84 -0
  65. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/workflows/format.yml +48 -0
  66. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/workflows/labeler.yml +16 -0
  67. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/workflows/pip.yml +103 -0
  68. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.gitignore +45 -0
  69. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.pre-commit-config.yaml +151 -0
  70. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.readthedocs.yml +3 -0
  71. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/CMakeLists.txt +297 -0
  72. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/LICENSE +29 -0
  73. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/MANIFEST.in +6 -0
  74. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/README.rst +180 -0
  75. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/Doxyfile +23 -0
  76. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/Makefile +192 -0
  77. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/_static/theme_overrides.css +11 -0
  78. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/chrono.rst +81 -0
  79. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/custom.rst +93 -0
  80. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/eigen.rst +310 -0
  81. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/functional.rst +109 -0
  82. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/index.rst +43 -0
  83. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/overview.rst +171 -0
  84. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/stl.rst +251 -0
  85. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/strings.rst +305 -0
  86. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/classes.rst +1297 -0
  87. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/embedding.rst +262 -0
  88. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/exceptions.rst +396 -0
  89. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/functions.rst +568 -0
  90. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/misc.rst +337 -0
  91. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/pycpp/index.rst +13 -0
  92. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/pycpp/numpy.rst +463 -0
  93. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/pycpp/object.rst +286 -0
  94. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/pycpp/utilities.rst +155 -0
  95. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/smart_ptrs.rst +174 -0
  96. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/basics.rst +308 -0
  97. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/benchmark.py +91 -0
  98. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/benchmark.rst +95 -0
  99. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/changelog.rst +2050 -0
  100. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/classes.rst +542 -0
  101. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/cmake/index.rst +8 -0
  102. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/compiling.rst +648 -0
  103. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/conf.py +381 -0
  104. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/faq.rst +343 -0
  105. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/index.rst +48 -0
  106. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/installing.rst +105 -0
  107. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/limitations.rst +72 -0
  108. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/pybind11-logo.png +0 -0
  109. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/pybind11_vs_boost_python1.png +0 -0
  110. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/pybind11_vs_boost_python1.svg +427 -0
  111. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/pybind11_vs_boost_python2.png +0 -0
  112. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/pybind11_vs_boost_python2.svg +427 -0
  113. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/reference.rst +130 -0
  114. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/release.rst +96 -0
  115. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/requirements.txt +8 -0
  116. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/upgrade.rst +548 -0
  117. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/attr.h +605 -0
  118. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/buffer_info.h +144 -0
  119. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/cast.h +1432 -0
  120. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/chrono.h +213 -0
  121. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/common.h +2 -0
  122. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/complex.h +65 -0
  123. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/class.h +709 -0
  124. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/common.h +1021 -0
  125. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/descr.h +104 -0
  126. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/init.h +346 -0
  127. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/internals.h +467 -0
  128. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/type_caster_base.h +978 -0
  129. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/typeid.h +55 -0
  130. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/eigen.h +606 -0
  131. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/embed.h +284 -0
  132. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/eval.h +163 -0
  133. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/functional.h +121 -0
  134. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/gil.h +193 -0
  135. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/iostream.h +275 -0
  136. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/numpy.h +1741 -0
  137. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/operators.h +163 -0
  138. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/options.h +65 -0
  139. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/pybind11.h +2497 -0
  140. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/pytypes.h +1879 -0
  141. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/stl/filesystem.h +103 -0
  142. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/stl.h +375 -0
  143. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/stl_bind.h +747 -0
  144. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/noxfile.py +88 -0
  145. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/__init__.py +11 -0
  146. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/__main__.py +52 -0
  147. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/_version.py +12 -0
  148. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/_version.pyi +6 -0
  149. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/commands.py +21 -0
  150. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/py.typed +0 -0
  151. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/setup_helpers.py +482 -0
  152. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/setup_helpers.pyi +63 -0
  153. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pyproject.toml +41 -0
  154. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/setup.cfg +56 -0
  155. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/setup.py +155 -0
  156. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/CMakeLists.txt +503 -0
  157. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/conftest.py +208 -0
  158. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/constructor_stats.h +275 -0
  159. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/cross_module_gil_utils.cpp +73 -0
  160. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/env.py +33 -0
  161. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/extra_python_package/pytest.ini +0 -0
  162. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/extra_python_package/test_files.py +279 -0
  163. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/extra_setuptools/pytest.ini +0 -0
  164. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/extra_setuptools/test_setuphelper.py +143 -0
  165. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/local_bindings.h +85 -0
  166. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/object.h +179 -0
  167. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/pybind11_cross_module_tests.cpp +151 -0
  168. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/pybind11_tests.cpp +91 -0
  169. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/pybind11_tests.h +85 -0
  170. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/pytest.ini +19 -0
  171. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/requirements.txt +12 -0
  172. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_async.cpp +26 -0
  173. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_async.py +25 -0
  174. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_buffers.cpp +216 -0
  175. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_buffers.py +163 -0
  176. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_builtin_casters.cpp +286 -0
  177. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_builtin_casters.py +536 -0
  178. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_call_policies.cpp +107 -0
  179. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_call_policies.py +248 -0
  180. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_callbacks.cpp +227 -0
  181. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_callbacks.py +202 -0
  182. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_chrono.cpp +84 -0
  183. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_chrono.py +210 -0
  184. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_class.cpp +550 -0
  185. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_class.py +473 -0
  186. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/CMakeLists.txt +84 -0
  187. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/embed.cpp +21 -0
  188. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/installed_embed/CMakeLists.txt +28 -0
  189. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/installed_function/CMakeLists.txt +39 -0
  190. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/installed_target/CMakeLists.txt +46 -0
  191. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/main.cpp +6 -0
  192. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/subdirectory_embed/CMakeLists.txt +41 -0
  193. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/subdirectory_function/CMakeLists.txt +35 -0
  194. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/subdirectory_target/CMakeLists.txt +41 -0
  195. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/test.py +10 -0
  196. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_constants_and_functions.cpp +165 -0
  197. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_constants_and_functions.py +53 -0
  198. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_copy_move.cpp +238 -0
  199. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_copy_move.py +126 -0
  200. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_custom_type_casters.cpp +141 -0
  201. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_custom_type_casters.py +117 -0
  202. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_custom_type_setup.cpp +41 -0
  203. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_custom_type_setup.py +50 -0
  204. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_docstring_options.cpp +69 -0
  205. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_docstring_options.py +42 -0
  206. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_eigen.cpp +348 -0
  207. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_eigen.py +771 -0
  208. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_embed/CMakeLists.txt +47 -0
  209. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_embed/catch.cpp +22 -0
  210. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_embed/external_module.cpp +23 -0
  211. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_embed/test_interpreter.cpp +326 -0
  212. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_embed/test_interpreter.py +15 -0
  213. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_enum.cpp +148 -0
  214. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_enum.py +272 -0
  215. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_eval.cpp +119 -0
  216. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_eval.py +51 -0
  217. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_eval_call.py +5 -0
  218. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_exceptions.cpp +285 -0
  219. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_exceptions.h +12 -0
  220. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_exceptions.py +265 -0
  221. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_factory_constructors.cpp +397 -0
  222. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_factory_constructors.py +520 -0
  223. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_gil_scoped.cpp +49 -0
  224. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_gil_scoped.py +94 -0
  225. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_iostream.cpp +125 -0
  226. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_iostream.py +331 -0
  227. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_kwargs_and_defaults.cpp +153 -0
  228. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_kwargs_and_defaults.py +284 -0
  229. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_local_bindings.cpp +107 -0
  230. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_local_bindings.py +257 -0
  231. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_methods_and_attributes.cpp +412 -0
  232. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_methods_and_attributes.py +517 -0
  233. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_modules.cpp +102 -0
  234. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_modules.py +92 -0
  235. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_multiple_inheritance.cpp +233 -0
  236. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_multiple_inheritance.py +360 -0
  237. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_numpy_array.cpp +472 -0
  238. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_numpy_array.py +593 -0
  239. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_numpy_dtypes.cpp +524 -0
  240. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_numpy_dtypes.py +441 -0
  241. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_numpy_vectorize.cpp +103 -0
  242. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_numpy_vectorize.py +267 -0
  243. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_opaque_types.cpp +73 -0
  244. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_opaque_types.py +59 -0
  245. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_operator_overloading.cpp +235 -0
  246. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_operator_overloading.py +146 -0
  247. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_pickling.cpp +189 -0
  248. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_pickling.py +82 -0
  249. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_pytypes.cpp +560 -0
  250. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_pytypes.py +651 -0
  251. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_sequences_and_iterators.cpp +500 -0
  252. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_sequences_and_iterators.py +253 -0
  253. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_smart_ptr.cpp +452 -0
  254. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_smart_ptr.py +318 -0
  255. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_stl.cpp +342 -0
  256. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_stl.py +291 -0
  257. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_stl_binders.cpp +131 -0
  258. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_stl_binders.py +318 -0
  259. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_tagbased_polymorphic.cpp +144 -0
  260. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_tagbased_polymorphic.py +29 -0
  261. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_thread.cpp +66 -0
  262. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_thread.py +44 -0
  263. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_union.cpp +22 -0
  264. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_union.py +9 -0
  265. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_virtual_functions.cpp +510 -0
  266. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_virtual_functions.py +408 -0
  267. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/valgrind-numpy-scipy.supp +140 -0
  268. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/valgrind-python.supp +117 -0
  269. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/FindCatch.cmake +70 -0
  270. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/FindEigen3.cmake +86 -0
  271. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/FindPythonLibsNew.cmake +257 -0
  272. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/check-style.sh +44 -0
  273. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/cmake_uninstall.cmake.in +23 -0
  274. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/libsize.py +39 -0
  275. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/make_changelog.py +64 -0
  276. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/pybind11Common.cmake +402 -0
  277. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/pybind11Config.cmake.in +233 -0
  278. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/pybind11NewTools.cmake +276 -0
  279. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/pybind11Tools.cmake +214 -0
  280. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/pyproject.toml +3 -0
  281. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/setup_global.py.in +65 -0
  282. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/setup_main.py.in +41 -0
  283. xcoll/scattering_routines/geant4/collimasim/pyproject.toml +8 -0
  284. xcoll/scattering_routines/geant4/collimasim/setup.py +144 -0
  285. xcoll/scattering_routines/geant4/collimasim/src/collimasim/BDSPyATInterface.cpp +403 -0
  286. xcoll/scattering_routines/geant4/collimasim/src/collimasim/BDSPyATInterface.hh +100 -0
  287. xcoll/scattering_routines/geant4/collimasim/src/collimasim/BDSXtrackInterface.cpp +763 -0
  288. xcoll/scattering_routines/geant4/collimasim/src/collimasim/BDSXtrackInterface.hh +118 -0
  289. xcoll/scattering_routines/geant4/collimasim/src/collimasim/__init__.py +8 -0
  290. xcoll/scattering_routines/geant4/collimasim/src/collimasim/bindings.cpp +63 -0
  291. xcoll/scattering_routines/geant4/collimasim/src/collimasim/pyCollimatorPass.py +142 -0
  292. xcoll/scattering_routines/geant4/collimasim/src/collimasim/xtrack_collimator.py +556 -0
  293. xcoll/scattering_routines/geant4/collimasim/src/collimasim.egg-info/PKG-INFO +6 -0
  294. xcoll/scattering_routines/geant4/collimasim/src/collimasim.egg-info/SOURCES.txt +24 -0
  295. xcoll/scattering_routines/geant4/collimasim/src/collimasim.egg-info/dependency_links.txt +1 -0
  296. xcoll/scattering_routines/geant4/collimasim/src/collimasim.egg-info/not-zip-safe +1 -0
  297. xcoll/scattering_routines/geant4/collimasim/src/collimasim.egg-info/top_level.txt +1 -0
  298. xcoll/scattering_routines/geant4/collimasim/tests/README.md +25 -0
  299. xcoll/scattering_routines/geant4/collimasim/tests/resources/CollDB_forions.dat +25 -0
  300. xcoll/scattering_routines/geant4/collimasim/tests/resources/CollDB_new_example.dat +18 -0
  301. xcoll/scattering_routines/geant4/collimasim/tests/resources/CollDB_old_example.dat +68 -0
  302. xcoll/scattering_routines/geant4/collimasim/tests/resources/CollDB_testing.dat +15 -0
  303. xcoll/scattering_routines/geant4/collimasim/tests/resources/CollDB_yaml_example.yaml +110 -0
  304. xcoll/scattering_routines/geant4/collimasim/tests/resources/collgaps.dat +7 -0
  305. xcoll/scattering_routines/geant4/collimasim/tests/resources/collgaps_pyat_test.dat +3 -0
  306. xcoll/scattering_routines/geant4/collimasim/tests/resources/collonly_twiss_file_example.tfs +54 -0
  307. xcoll/scattering_routines/geant4/collimasim/tests/resources/settings.gmad +3 -0
  308. xcoll/scattering_routines/geant4/collimasim/tests/resources/settings_black_absorber.gmad +3 -0
  309. xcoll/scattering_routines/geant4/collimasim/tests/resources/settings_ions.gmad +5 -0
  310. xcoll/scattering_routines/geant4/collimasim/tests/resources/twiss_file_testing.tfs +51 -0
  311. xcoll/scattering_routines/geant4/collimasim/tests/test_pyat.py +65 -0
  312. xcoll/scattering_routines/geant4/collimasim/tests/test_pyat_passmethod.py +59 -0
  313. xcoll/scattering_routines/geant4/collimasim/tests/test_pyat_tracking.py +102 -0
  314. xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack.py +75 -0
  315. xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_angle.py +74 -0
  316. xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_colldb_load.py +84 -0
  317. xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_interaction.py +159 -0
  318. xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_interaction_ion.py +99 -0
  319. xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_ions.py +78 -0
  320. xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_lost_energy.py +88 -0
  321. xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_tilt.py +80 -0
  322. xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_tracking.py +97 -0
  323. xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_tracking_ions.py +96 -0
  324. xcoll/scattering_routines/geometry/__init__.py +6 -0
  325. xcoll/scattering_routines/geometry/collimator_geometry.h +218 -0
  326. xcoll/scattering_routines/geometry/crystal_geometry.h +153 -0
  327. xcoll/scattering_routines/geometry/geometry.py +26 -0
  328. xcoll/scattering_routines/geometry/get_s.h +92 -0
  329. xcoll/scattering_routines/geometry/methods.h +111 -0
  330. xcoll/scattering_routines/geometry/objects.h +154 -0
  331. xcoll/scattering_routines/geometry/rotation.h +23 -0
  332. xcoll/scattering_routines/geometry/segments.h +226 -0
  333. xcoll/scattering_routines/geometry/sort.h +184 -0
  334. {xcoll-0.3.6.dist-info → xcoll-0.5.0.dist-info}/METADATA +1 -1
  335. xcoll-0.5.0.dist-info/RECORD +413 -0
  336. xcoll/beam_elements/collimators_src/absorber.h +0 -141
  337. xcoll/beam_elements/collimators_src/everest_collimator.h +0 -142
  338. xcoll/beam_elements/collimators_src/everest_crystal.h +0 -115
  339. xcoll/collimator_settings.py +0 -457
  340. xcoll/impacts/__init__.py +0 -1
  341. xcoll/impacts/impacts.py +0 -102
  342. xcoll/impacts/impacts_src/impacts.h +0 -99
  343. xcoll/scattering_routines/everest/crystal.h +0 -1302
  344. xcoll/scattering_routines/everest/scatter.h +0 -169
  345. xcoll/scattering_routines/everest/scatter_crystal.h +0 -260
  346. xcoll/scattering_routines/fluka/build_fluka_input.py +0 -58
  347. xcoll-0.3.6.dist-info/RECORD +0 -111
  348. {xcoll-0.3.6.dist-info → xcoll-0.5.0.dist-info}/LICENSE +0 -0
  349. {xcoll-0.3.6.dist-info → xcoll-0.5.0.dist-info}/NOTICE +0 -0
  350. {xcoll-0.3.6.dist-info → xcoll-0.5.0.dist-info}/WHEEL +0 -0
@@ -0,0 +1,88 @@
1
+ import nox
2
+
3
+ nox.options.sessions = ["lint", "tests", "tests_packaging"]
4
+
5
+ PYTHON_VERISONS = ["2.7", "3.5", "3.6", "3.7", "3.8", "3.9", "3.10"]
6
+
7
+
8
+ @nox.session(reuse_venv=True)
9
+ def lint(session: nox.Session) -> None:
10
+ """
11
+ Lint the codebase (except for clang-format/tidy).
12
+ """
13
+ session.install("pre-commit")
14
+ session.run("pre-commit", "run", "-a")
15
+
16
+
17
+ @nox.session(python=PYTHON_VERISONS)
18
+ def tests(session: nox.Session) -> None:
19
+ """
20
+ Run the tests (requires a compiler).
21
+ """
22
+ tmpdir = session.create_tmp()
23
+ session.install("pytest", "cmake")
24
+ session.run(
25
+ "cmake",
26
+ "-S",
27
+ ".",
28
+ "-B",
29
+ tmpdir,
30
+ "-DPYBIND11_WERROR=ON",
31
+ "-DDOWNLOAD_CATCH=ON",
32
+ "-DDOWNLOAD_EIGEN=ON",
33
+ *session.posargs
34
+ )
35
+ session.run("cmake", "--build", tmpdir)
36
+ session.run("cmake", "--build", tmpdir, "--config=Release", "--target", "check")
37
+
38
+
39
+ @nox.session
40
+ def tests_packaging(session: nox.Session) -> None:
41
+ """
42
+ Run the packaging tests.
43
+ """
44
+
45
+ session.install("-r", "tests/requirements.txt", "--prefer-binary")
46
+ session.run("pytest", "tests/extra_python_package")
47
+
48
+
49
+ @nox.session(reuse_venv=True)
50
+ def docs(session: nox.Session) -> None:
51
+ """
52
+ Build the docs. Pass "serve" to serve.
53
+ """
54
+
55
+ session.install("-r", "docs/requirements.txt")
56
+ session.chdir("docs")
57
+
58
+ if "pdf" in session.posargs:
59
+ session.run("sphinx-build", "-M", "latexpdf", ".", "_build")
60
+ return
61
+
62
+ session.run("sphinx-build", "-M", "html", ".", "_build")
63
+
64
+ if "serve" in session.posargs:
65
+ session.log("Launching docs at http://localhost:8000/ - use Ctrl-C to quit")
66
+ session.run("python", "-m", "http.server", "8000", "-d", "_build/html")
67
+ elif session.posargs:
68
+ session.error("Unsupported argument to docs")
69
+
70
+
71
+ @nox.session(reuse_venv=True)
72
+ def make_changelog(session: nox.Session) -> None:
73
+ """
74
+ Inspect the closed issues and make entries for a changelog.
75
+ """
76
+ session.install("ghapi", "rich")
77
+ session.run("python", "tools/make_changelog.py")
78
+
79
+
80
+ @nox.session(reuse_venv=True)
81
+ def build(session: nox.Session) -> None:
82
+ """
83
+ Build SDists and wheels.
84
+ """
85
+
86
+ session.install("build")
87
+ session.run("python", "-m", "build")
88
+ session.run("python", "-m", "build", env={"PYBIND11_GLOBAL_SDIST": "1"})
@@ -0,0 +1,11 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ from ._version import __version__, version_info
4
+ from .commands import get_cmake_dir, get_include
5
+
6
+ __all__ = (
7
+ "version_info",
8
+ "__version__",
9
+ "get_include",
10
+ "get_cmake_dir",
11
+ )
@@ -0,0 +1,52 @@
1
+ # -*- coding: utf-8 -*-
2
+ from __future__ import print_function
3
+
4
+ import argparse
5
+ import sys
6
+ import sysconfig
7
+
8
+ from .commands import get_cmake_dir, get_include
9
+
10
+
11
+ def print_includes():
12
+ # type: () -> None
13
+ dirs = [
14
+ sysconfig.get_path("include"),
15
+ sysconfig.get_path("platinclude"),
16
+ get_include(),
17
+ ]
18
+
19
+ # Make unique but preserve order
20
+ unique_dirs = []
21
+ for d in dirs:
22
+ if d and d not in unique_dirs:
23
+ unique_dirs.append(d)
24
+
25
+ print(" ".join("-I" + d for d in unique_dirs))
26
+
27
+
28
+ def main():
29
+ # type: () -> None
30
+
31
+ parser = argparse.ArgumentParser()
32
+ parser.add_argument(
33
+ "--includes",
34
+ action="store_true",
35
+ help="Include flags for both pybind11 and Python headers.",
36
+ )
37
+ parser.add_argument(
38
+ "--cmakedir",
39
+ action="store_true",
40
+ help="Print the CMake module directory, ideal for setting -Dpybind11_ROOT in CMake.",
41
+ )
42
+ args = parser.parse_args()
43
+ if not sys.argv[1:]:
44
+ parser.print_help()
45
+ if args.includes:
46
+ print_includes()
47
+ if args.cmakedir:
48
+ print(get_cmake_dir())
49
+
50
+
51
+ if __name__ == "__main__":
52
+ main()
@@ -0,0 +1,12 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+
4
+ def _to_int(s):
5
+ try:
6
+ return int(s)
7
+ except ValueError:
8
+ return s
9
+
10
+
11
+ __version__ = "2.9.0.dev1"
12
+ version_info = tuple(_to_int(s) for s in __version__.split("."))
@@ -0,0 +1,6 @@
1
+ from typing import Tuple, Union
2
+
3
+ def _to_int(s: str) -> Union[int, str]: ...
4
+
5
+ __version__: str
6
+ version_info: Tuple[Union[int, str], ...]
@@ -0,0 +1,21 @@
1
+ # -*- coding: utf-8 -*-
2
+ import os
3
+
4
+ DIR = os.path.abspath(os.path.dirname(__file__))
5
+
6
+
7
+ def get_include(user=False):
8
+ # type: (bool) -> str
9
+ installed_path = os.path.join(DIR, "include")
10
+ source_path = os.path.join(os.path.dirname(DIR), "include")
11
+ return installed_path if os.path.exists(installed_path) else source_path
12
+
13
+
14
+ def get_cmake_dir():
15
+ # type: () -> str
16
+ cmake_installed_path = os.path.join(DIR, "share", "cmake", "pybind11")
17
+ if os.path.exists(cmake_installed_path):
18
+ return cmake_installed_path
19
+ else:
20
+ msg = "pybind11 not installed, installation required to access the CMake files"
21
+ raise ImportError(msg)
@@ -0,0 +1,482 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ """
4
+ This module provides helpers for C++11+ projects using pybind11.
5
+
6
+ LICENSE:
7
+
8
+ Copyright (c) 2016 Wenzel Jakob <wenzel.jakob@epfl.ch>, All rights reserved.
9
+
10
+ Redistribution and use in source and binary forms, with or without
11
+ modification, are permitted provided that the following conditions are met:
12
+
13
+ 1. Redistributions of source code must retain the above copyright notice, this
14
+ list of conditions and the following disclaimer.
15
+
16
+ 2. Redistributions in binary form must reproduce the above copyright notice,
17
+ this list of conditions and the following disclaimer in the documentation
18
+ and/or other materials provided with the distribution.
19
+
20
+ 3. Neither the name of the copyright holder nor the names of its contributors
21
+ may be used to endorse or promote products derived from this software
22
+ without specific prior written permission.
23
+
24
+ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
25
+ ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
26
+ WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
27
+ DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
28
+ FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
29
+ DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
30
+ SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
31
+ CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
32
+ OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
33
+ OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
34
+ """
35
+
36
+ # IMPORTANT: If you change this file in the pybind11 repo, also review
37
+ # setup_helpers.pyi for matching changes.
38
+ #
39
+ # If you copy this file in, you don't
40
+ # need the .pyi file; it's just an interface file for static type checkers.
41
+
42
+ import contextlib
43
+ import os
44
+ import platform
45
+ import shutil
46
+ import sys
47
+ import sysconfig
48
+ import tempfile
49
+ import threading
50
+ import warnings
51
+
52
+ try:
53
+ from setuptools import Extension as _Extension
54
+ from setuptools.command.build_ext import build_ext as _build_ext
55
+ except ImportError:
56
+ from distutils.command.build_ext import build_ext as _build_ext
57
+ from distutils.extension import Extension as _Extension
58
+
59
+ import distutils.ccompiler
60
+ import distutils.errors
61
+
62
+ WIN = sys.platform.startswith("win32") and "mingw" not in sysconfig.get_platform()
63
+ PY2 = sys.version_info[0] < 3
64
+ MACOS = sys.platform.startswith("darwin")
65
+ STD_TMPL = "/std:c++{}" if WIN else "-std=c++{}"
66
+
67
+
68
+ # It is recommended to use PEP 518 builds if using this module. However, this
69
+ # file explicitly supports being copied into a user's project directory
70
+ # standalone, and pulling pybind11 with the deprecated setup_requires feature.
71
+ # If you copy the file, remember to add it to your MANIFEST.in, and add the current
72
+ # directory into your path if it sits beside your setup.py.
73
+
74
+
75
+ class Pybind11Extension(_Extension):
76
+ """
77
+ Build a C++11+ Extension module with pybind11. This automatically adds the
78
+ recommended flags when you init the extension and assumes C++ sources - you
79
+ can further modify the options yourself.
80
+
81
+ The customizations are:
82
+
83
+ * ``/EHsc`` and ``/bigobj`` on Windows
84
+ * ``stdlib=libc++`` on macOS
85
+ * ``visibility=hidden`` and ``-g0`` on Unix
86
+
87
+ Finally, you can set ``cxx_std`` via constructor or afterwards to enable
88
+ flags for C++ std, and a few extra helper flags related to the C++ standard
89
+ level. It is _highly_ recommended you either set this, or use the provided
90
+ ``build_ext``, which will search for the highest supported extension for
91
+ you if the ``cxx_std`` property is not set. Do not set the ``cxx_std``
92
+ property more than once, as flags are added when you set it. Set the
93
+ property to None to disable the addition of C++ standard flags.
94
+
95
+ If you want to add pybind11 headers manually, for example for an exact
96
+ git checkout, then set ``include_pybind11=False``.
97
+
98
+ Warning: do not use property-based access to the instance on Python 2 -
99
+ this is an ugly old-style class due to Distutils.
100
+ """
101
+
102
+ # flags are prepended, so that they can be further overridden, e.g. by
103
+ # ``extra_compile_args=["-g"]``.
104
+
105
+ def _add_cflags(self, flags):
106
+ self.extra_compile_args[:0] = flags
107
+
108
+ def _add_ldflags(self, flags):
109
+ self.extra_link_args[:0] = flags
110
+
111
+ def __init__(self, *args, **kwargs):
112
+
113
+ self._cxx_level = 0
114
+ cxx_std = kwargs.pop("cxx_std", 0)
115
+
116
+ if "language" not in kwargs:
117
+ kwargs["language"] = "c++"
118
+
119
+ include_pybind11 = kwargs.pop("include_pybind11", True)
120
+
121
+ # Can't use super here because distutils has old-style classes in
122
+ # Python 2!
123
+ _Extension.__init__(self, *args, **kwargs)
124
+
125
+ # Include the installed package pybind11 headers
126
+ if include_pybind11:
127
+ # If using setup_requires, this fails the first time - that's okay
128
+ try:
129
+ import pybind11
130
+
131
+ pyinc = pybind11.get_include()
132
+
133
+ if pyinc not in self.include_dirs:
134
+ self.include_dirs.append(pyinc)
135
+ except ImportError:
136
+ pass
137
+
138
+ # Have to use the accessor manually to support Python 2 distutils
139
+ Pybind11Extension.cxx_std.__set__(self, cxx_std)
140
+
141
+ cflags = []
142
+ ldflags = []
143
+ if WIN:
144
+ cflags += ["/EHsc", "/bigobj"]
145
+ else:
146
+ cflags += ["-fvisibility=hidden", "-g0"]
147
+ if MACOS:
148
+ cflags += ["-stdlib=libc++"]
149
+ ldflags += ["-stdlib=libc++"]
150
+ self._add_cflags(cflags)
151
+ self._add_ldflags(ldflags)
152
+
153
+ @property
154
+ def cxx_std(self):
155
+ """
156
+ The CXX standard level. If set, will add the required flags. If left
157
+ at 0, it will trigger an automatic search when pybind11's build_ext
158
+ is used. If None, will have no effect. Besides just the flags, this
159
+ may add a register warning/error fix for Python 2 or macos-min 10.9
160
+ or 10.14.
161
+ """
162
+ return self._cxx_level
163
+
164
+ @cxx_std.setter
165
+ def cxx_std(self, level):
166
+
167
+ if self._cxx_level:
168
+ warnings.warn("You cannot safely change the cxx_level after setting it!")
169
+
170
+ # MSVC 2015 Update 3 and later only have 14 (and later 17) modes, so
171
+ # force a valid flag here.
172
+ if WIN and level == 11:
173
+ level = 14
174
+
175
+ self._cxx_level = level
176
+
177
+ if not level:
178
+ return
179
+
180
+ cflags = [STD_TMPL.format(level)]
181
+ ldflags = []
182
+
183
+ if MACOS and "MACOSX_DEPLOYMENT_TARGET" not in os.environ:
184
+ # C++17 requires a higher min version of macOS. An earlier version
185
+ # (10.12 or 10.13) can be set manually via environment variable if
186
+ # you are careful in your feature usage, but 10.14 is the safest
187
+ # setting for general use. However, never set higher than the
188
+ # current macOS version!
189
+ current_macos = tuple(int(x) for x in platform.mac_ver()[0].split(".")[:2])
190
+ desired_macos = (10, 9) if level < 17 else (10, 14)
191
+ macos_string = ".".join(str(x) for x in min(current_macos, desired_macos))
192
+ macosx_min = "-mmacosx-version-min=" + macos_string
193
+ cflags += [macosx_min]
194
+ ldflags += [macosx_min]
195
+
196
+ if PY2:
197
+ if WIN:
198
+ # Will be ignored on MSVC 2015, where C++17 is not supported so
199
+ # this flag is not valid.
200
+ cflags += ["/wd5033"]
201
+ elif level >= 17:
202
+ cflags += ["-Wno-register"]
203
+ elif level >= 14:
204
+ cflags += ["-Wno-deprecated-register"]
205
+
206
+ self._add_cflags(cflags)
207
+ self._add_ldflags(ldflags)
208
+
209
+
210
+ # Just in case someone clever tries to multithread
211
+ tmp_chdir_lock = threading.Lock()
212
+ cpp_cache_lock = threading.Lock()
213
+
214
+
215
+ @contextlib.contextmanager
216
+ def tmp_chdir():
217
+ "Prepare and enter a temporary directory, cleanup when done"
218
+
219
+ # Threadsafe
220
+ with tmp_chdir_lock:
221
+ olddir = os.getcwd()
222
+ try:
223
+ tmpdir = tempfile.mkdtemp()
224
+ os.chdir(tmpdir)
225
+ yield tmpdir
226
+ finally:
227
+ os.chdir(olddir)
228
+ shutil.rmtree(tmpdir)
229
+
230
+
231
+ # cf http://bugs.python.org/issue26689
232
+ def has_flag(compiler, flag):
233
+ """
234
+ Return the flag if a flag name is supported on the
235
+ specified compiler, otherwise None (can be used as a boolean).
236
+ If multiple flags are passed, return the first that matches.
237
+ """
238
+
239
+ with tmp_chdir():
240
+ fname = "flagcheck.cpp"
241
+ with open(fname, "w") as f:
242
+ # Don't trigger -Wunused-parameter.
243
+ f.write("int main (int, char **) { return 0; }")
244
+
245
+ try:
246
+ compiler.compile([fname], extra_postargs=[flag])
247
+ except distutils.errors.CompileError:
248
+ return False
249
+ return True
250
+
251
+
252
+ # Every call will cache the result
253
+ cpp_flag_cache = None
254
+
255
+
256
+ def auto_cpp_level(compiler):
257
+ """
258
+ Return the max supported C++ std level (17, 14, or 11). Returns latest on Windows.
259
+ """
260
+
261
+ if WIN:
262
+ return "latest"
263
+
264
+ global cpp_flag_cache
265
+
266
+ # If this has been previously calculated with the same args, return that
267
+ with cpp_cache_lock:
268
+ if cpp_flag_cache:
269
+ return cpp_flag_cache
270
+
271
+ levels = [17, 14, 11]
272
+
273
+ for level in levels:
274
+ if has_flag(compiler, STD_TMPL.format(level)):
275
+ with cpp_cache_lock:
276
+ cpp_flag_cache = level
277
+ return level
278
+
279
+ msg = "Unsupported compiler -- at least C++11 support is needed!"
280
+ raise RuntimeError(msg)
281
+
282
+
283
+ class build_ext(_build_ext): # noqa: N801
284
+ """
285
+ Customized build_ext that allows an auto-search for the highest supported
286
+ C++ level for Pybind11Extension. This is only needed for the auto-search
287
+ for now, and is completely optional otherwise.
288
+ """
289
+
290
+ def build_extensions(self):
291
+ """
292
+ Build extensions, injecting C++ std for Pybind11Extension if needed.
293
+ """
294
+
295
+ for ext in self.extensions:
296
+ if hasattr(ext, "_cxx_level") and ext._cxx_level == 0:
297
+ # Python 2 syntax - old-style distutils class
298
+ ext.__class__.cxx_std.__set__(ext, auto_cpp_level(self.compiler))
299
+
300
+ # Python 2 doesn't allow super here, since distutils uses old-style
301
+ # classes!
302
+ _build_ext.build_extensions(self)
303
+
304
+
305
+ def intree_extensions(paths, package_dir=None):
306
+ """
307
+ Generate Pybind11Extensions from source files directly located in a Python
308
+ source tree.
309
+
310
+ ``package_dir`` behaves as in ``setuptools.setup``. If unset, the Python
311
+ package root parent is determined as the first parent directory that does
312
+ not contain an ``__init__.py`` file.
313
+ """
314
+ exts = []
315
+ for path in paths:
316
+ if package_dir is None:
317
+ parent, _ = os.path.split(path)
318
+ while os.path.exists(os.path.join(parent, "__init__.py")):
319
+ parent, _ = os.path.split(parent)
320
+ relname, _ = os.path.splitext(os.path.relpath(path, parent))
321
+ qualified_name = relname.replace(os.path.sep, ".")
322
+ exts.append(Pybind11Extension(qualified_name, [path]))
323
+ else:
324
+ found = False
325
+ for prefix, parent in package_dir.items():
326
+ if path.startswith(parent):
327
+ found = True
328
+ relname, _ = os.path.splitext(os.path.relpath(path, parent))
329
+ qualified_name = relname.replace(os.path.sep, ".")
330
+ if prefix:
331
+ qualified_name = prefix + "." + qualified_name
332
+ exts.append(Pybind11Extension(qualified_name, [path]))
333
+ if not found:
334
+ raise ValueError(
335
+ "path {} is not a child of any of the directories listed "
336
+ "in 'package_dir' ({})".format(path, package_dir)
337
+ )
338
+ return exts
339
+
340
+
341
+ def naive_recompile(obj, src):
342
+ """
343
+ This will recompile only if the source file changes. It does not check
344
+ header files, so a more advanced function or Ccache is better if you have
345
+ editable header files in your package.
346
+ """
347
+ return os.stat(obj).st_mtime < os.stat(src).st_mtime
348
+
349
+
350
+ def no_recompile(obg, src):
351
+ """
352
+ This is the safest but slowest choice (and is the default) - will always
353
+ recompile sources.
354
+ """
355
+ return True
356
+
357
+
358
+ # Optional parallel compile utility
359
+ # inspired by: http://stackoverflow.com/questions/11013851/speeding-up-build-process-with-distutils
360
+ # and: https://github.com/tbenthompson/cppimport/blob/stable/cppimport/build_module.py
361
+ # and NumPy's parallel distutils module:
362
+ # https://github.com/numpy/numpy/blob/master/numpy/distutils/ccompiler.py
363
+ class ParallelCompile(object):
364
+ """
365
+ Make a parallel compile function. Inspired by
366
+ numpy.distutils.ccompiler.CCompiler_compile and cppimport.
367
+
368
+ This takes several arguments that allow you to customize the compile
369
+ function created:
370
+
371
+ envvar:
372
+ Set an environment variable to control the compilation threads, like
373
+ NPY_NUM_BUILD_JOBS
374
+ default:
375
+ 0 will automatically multithread, or 1 will only multithread if the
376
+ envvar is set.
377
+ max:
378
+ The limit for automatic multithreading if non-zero
379
+ needs_recompile:
380
+ A function of (obj, src) that returns True when recompile is needed. No
381
+ effect in isolated mode; use ccache instead, see
382
+ https://github.com/matplotlib/matplotlib/issues/1507/
383
+
384
+ To use::
385
+
386
+ ParallelCompile("NPY_NUM_BUILD_JOBS").install()
387
+
388
+ or::
389
+
390
+ with ParallelCompile("NPY_NUM_BUILD_JOBS"):
391
+ setup(...)
392
+
393
+ By default, this assumes all files need to be recompiled. A smarter
394
+ function can be provided via needs_recompile. If the output has not yet
395
+ been generated, the compile will always run, and this function is not
396
+ called.
397
+ """
398
+
399
+ __slots__ = ("envvar", "default", "max", "_old", "needs_recompile")
400
+
401
+ def __init__(self, envvar=None, default=0, max=0, needs_recompile=no_recompile):
402
+ self.envvar = envvar
403
+ self.default = default
404
+ self.max = max
405
+ self.needs_recompile = needs_recompile
406
+ self._old = []
407
+
408
+ def function(self):
409
+ """
410
+ Builds a function object usable as distutils.ccompiler.CCompiler.compile.
411
+ """
412
+
413
+ def compile_function(
414
+ compiler,
415
+ sources,
416
+ output_dir=None,
417
+ macros=None,
418
+ include_dirs=None,
419
+ debug=0,
420
+ extra_preargs=None,
421
+ extra_postargs=None,
422
+ depends=None,
423
+ ):
424
+
425
+ # These lines are directly from distutils.ccompiler.CCompiler
426
+ macros, objects, extra_postargs, pp_opts, build = compiler._setup_compile(
427
+ output_dir, macros, include_dirs, sources, depends, extra_postargs
428
+ )
429
+ cc_args = compiler._get_cc_args(pp_opts, debug, extra_preargs)
430
+
431
+ # The number of threads; start with default.
432
+ threads = self.default
433
+
434
+ # Determine the number of compilation threads, unless set by an environment variable.
435
+ if self.envvar is not None:
436
+ threads = int(os.environ.get(self.envvar, self.default))
437
+
438
+ def _single_compile(obj):
439
+ try:
440
+ src, ext = build[obj]
441
+ except KeyError:
442
+ return
443
+
444
+ if not os.path.exists(obj) or self.needs_recompile(obj, src):
445
+ compiler._compile(obj, src, ext, cc_args, extra_postargs, pp_opts)
446
+
447
+ try:
448
+ # Importing .synchronize checks for platforms that have some multiprocessing
449
+ # capabilities but lack semaphores, such as AWS Lambda and Android Termux.
450
+ import multiprocessing.synchronize
451
+ from multiprocessing.pool import ThreadPool
452
+ except ImportError:
453
+ threads = 1
454
+
455
+ if threads == 0:
456
+ try:
457
+ threads = multiprocessing.cpu_count()
458
+ threads = self.max if self.max and self.max < threads else threads
459
+ except NotImplementedError:
460
+ threads = 1
461
+
462
+ if threads > 1:
463
+ for _ in ThreadPool(threads).imap_unordered(_single_compile, objects):
464
+ pass
465
+ else:
466
+ for ob in objects:
467
+ _single_compile(ob)
468
+
469
+ return objects
470
+
471
+ return compile_function
472
+
473
+ def install(self):
474
+ distutils.ccompiler.CCompiler.compile = self.function()
475
+ return self
476
+
477
+ def __enter__(self):
478
+ self._old.append(distutils.ccompiler.CCompiler.compile)
479
+ return self.install()
480
+
481
+ def __exit__(self, *args):
482
+ distutils.ccompiler.CCompiler.compile = self._old.pop()