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,285 @@
1
+ /*
2
+ tests/test_custom-exceptions.cpp -- exception translation
3
+
4
+ Copyright (c) 2016 Pim Schellart <P.Schellart@princeton.edu>
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 "test_exceptions.h"
10
+
11
+ #include "local_bindings.h"
12
+
13
+ #include "pybind11_tests.h"
14
+ #include <utility>
15
+
16
+ // A type that should be raised as an exception in Python
17
+ class MyException : public std::exception {
18
+ public:
19
+ explicit MyException(const char * m) : message{m} {}
20
+ const char * what() const noexcept override {return message.c_str();}
21
+ private:
22
+ std::string message = "";
23
+ };
24
+
25
+ // A type that should be translated to a standard Python exception
26
+ class MyException2 : public std::exception {
27
+ public:
28
+ explicit MyException2(const char * m) : message{m} {}
29
+ const char * what() const noexcept override {return message.c_str();}
30
+ private:
31
+ std::string message = "";
32
+ };
33
+
34
+ // A type that is not derived from std::exception (and is thus unknown)
35
+ class MyException3 {
36
+ public:
37
+ explicit MyException3(const char * m) : message{m} {}
38
+ virtual const char * what() const noexcept {return message.c_str();}
39
+ // Rule of 5 BEGIN: to preempt compiler warnings.
40
+ MyException3(const MyException3&) = default;
41
+ MyException3(MyException3&&) = default;
42
+ MyException3& operator=(const MyException3&) = default;
43
+ MyException3& operator=(MyException3&&) = default;
44
+ virtual ~MyException3() = default;
45
+ // Rule of 5 END.
46
+ private:
47
+ std::string message = "";
48
+ };
49
+
50
+ // A type that should be translated to MyException
51
+ // and delegated to its exception translator
52
+ class MyException4 : public std::exception {
53
+ public:
54
+ explicit MyException4(const char * m) : message{m} {}
55
+ const char * what() const noexcept override {return message.c_str();}
56
+ private:
57
+ std::string message = "";
58
+ };
59
+
60
+
61
+ // Like the above, but declared via the helper function
62
+ class MyException5 : public std::logic_error {
63
+ public:
64
+ explicit MyException5(const std::string &what) : std::logic_error(what) {}
65
+ };
66
+
67
+ // Inherits from MyException5
68
+ class MyException5_1 : public MyException5 {
69
+ using MyException5::MyException5;
70
+ };
71
+
72
+
73
+ // Exception that will be caught via the module local translator.
74
+ class MyException6 : public std::exception {
75
+ public:
76
+ explicit MyException6(const char * m) : message{m} {}
77
+ const char * what() const noexcept override {return message.c_str();}
78
+ private:
79
+ std::string message = "";
80
+ };
81
+
82
+
83
+ struct PythonCallInDestructor {
84
+ explicit PythonCallInDestructor(const py::dict &d) : d(d) {}
85
+ ~PythonCallInDestructor() { d["good"] = true; }
86
+
87
+ py::dict d;
88
+ };
89
+
90
+
91
+
92
+ struct PythonAlreadySetInDestructor {
93
+ explicit PythonAlreadySetInDestructor(const py::str &s) : s(s) {}
94
+ ~PythonAlreadySetInDestructor() {
95
+ py::dict foo;
96
+ try {
97
+ // Assign to a py::object to force read access of nonexistent dict entry
98
+ py::object o = foo["bar"];
99
+ }
100
+ catch (py::error_already_set& ex) {
101
+ ex.discard_as_unraisable(s);
102
+ }
103
+ }
104
+
105
+ py::str s;
106
+ };
107
+
108
+
109
+ TEST_SUBMODULE(exceptions, m) {
110
+ m.def("throw_std_exception", []() {
111
+ throw std::runtime_error("This exception was intentionally thrown.");
112
+ });
113
+
114
+ // make a new custom exception and use it as a translation target
115
+ static py::exception<MyException> ex(m, "MyException");
116
+ py::register_exception_translator([](std::exception_ptr p) {
117
+ try {
118
+ if (p) std::rethrow_exception(p);
119
+ } catch (const MyException &e) {
120
+ // Set MyException as the active python error
121
+ ex(e.what());
122
+ }
123
+ });
124
+
125
+ // register new translator for MyException2
126
+ // no need to store anything here because this type will
127
+ // never by visible from Python
128
+ py::register_exception_translator([](std::exception_ptr p) {
129
+ try {
130
+ if (p) std::rethrow_exception(p);
131
+ } catch (const MyException2 &e) {
132
+ // Translate this exception to a standard RuntimeError
133
+ PyErr_SetString(PyExc_RuntimeError, e.what());
134
+ }
135
+ });
136
+
137
+ // register new translator for MyException4
138
+ // which will catch it and delegate to the previously registered
139
+ // translator for MyException by throwing a new exception
140
+ py::register_exception_translator([](std::exception_ptr p) {
141
+ try {
142
+ if (p) std::rethrow_exception(p);
143
+ } catch (const MyException4 &e) {
144
+ throw MyException(e.what());
145
+ }
146
+ });
147
+
148
+ // A simple exception translation:
149
+ auto ex5 = py::register_exception<MyException5>(m, "MyException5");
150
+ // A slightly more complicated one that declares MyException5_1 as a subclass of MyException5
151
+ py::register_exception<MyException5_1>(m, "MyException5_1", ex5.ptr());
152
+
153
+ //py::register_local_exception<LocalSimpleException>(m, "LocalSimpleException")
154
+
155
+ py::register_local_exception_translator([](std::exception_ptr p) {
156
+ try {
157
+ if (p) {
158
+ std::rethrow_exception(p);
159
+ }
160
+ } catch (const MyException6 &e) {
161
+ PyErr_SetString(PyExc_RuntimeError, e.what());
162
+ }
163
+ });
164
+
165
+ m.def("throws1", []() { throw MyException("this error should go to a custom type"); });
166
+ m.def("throws2", []() { throw MyException2("this error should go to a standard Python exception"); });
167
+ m.def("throws3", []() { throw MyException3("this error cannot be translated"); });
168
+ m.def("throws4", []() { throw MyException4("this error is rethrown"); });
169
+ m.def("throws5", []() { throw MyException5("this is a helper-defined translated exception"); });
170
+ m.def("throws5_1", []() { throw MyException5_1("MyException5 subclass"); });
171
+ m.def("throws6", []() { throw MyException6("MyException6 only handled in this module"); });
172
+ m.def("throws_logic_error", []() { throw std::logic_error("this error should fall through to the standard handler"); });
173
+ m.def("throws_overflow_error", []() { throw std::overflow_error(""); });
174
+ m.def("throws_local_error", []() { throw LocalException("never caught"); });
175
+ m.def("throws_local_simple_error", []() { throw LocalSimpleException("this mod"); });
176
+ m.def("exception_matches", []() {
177
+ py::dict foo;
178
+ try {
179
+ // Assign to a py::object to force read access of nonexistent dict entry
180
+ py::object o = foo["bar"];
181
+ }
182
+ catch (py::error_already_set& ex) {
183
+ if (!ex.matches(PyExc_KeyError)) throw;
184
+ return true;
185
+ }
186
+ return false;
187
+ });
188
+ m.def("exception_matches_base", []() {
189
+ py::dict foo;
190
+ try {
191
+ // Assign to a py::object to force read access of nonexistent dict entry
192
+ py::object o = foo["bar"];
193
+ }
194
+ catch (py::error_already_set &ex) {
195
+ if (!ex.matches(PyExc_Exception)) throw;
196
+ return true;
197
+ }
198
+ return false;
199
+ });
200
+ m.def("modulenotfound_exception_matches_base", []() {
201
+ try {
202
+ // On Python >= 3.6, this raises a ModuleNotFoundError, a subclass of ImportError
203
+ py::module_::import("nonexistent");
204
+ }
205
+ catch (py::error_already_set &ex) {
206
+ if (!ex.matches(PyExc_ImportError)) throw;
207
+ return true;
208
+ }
209
+ return false;
210
+ });
211
+
212
+ m.def("throw_already_set", [](bool err) {
213
+ if (err)
214
+ PyErr_SetString(PyExc_ValueError, "foo");
215
+ try {
216
+ throw py::error_already_set();
217
+ } catch (const std::runtime_error& e) {
218
+ if ((err && e.what() != std::string("ValueError: foo")) ||
219
+ (!err && e.what() != std::string("Unknown internal error occurred")))
220
+ {
221
+ PyErr_Clear();
222
+ throw std::runtime_error("error message mismatch");
223
+ }
224
+ }
225
+ PyErr_Clear();
226
+ if (err)
227
+ PyErr_SetString(PyExc_ValueError, "foo");
228
+ throw py::error_already_set();
229
+ });
230
+
231
+ m.def("python_call_in_destructor", [](const py::dict &d) {
232
+ bool retval = false;
233
+ try {
234
+ PythonCallInDestructor set_dict_in_destructor(d);
235
+ PyErr_SetString(PyExc_ValueError, "foo");
236
+ throw py::error_already_set();
237
+ } catch (const py::error_already_set&) {
238
+ retval = true;
239
+ }
240
+ return retval;
241
+ });
242
+
243
+ m.def("python_alreadyset_in_destructor", [](const py::str &s) {
244
+ PythonAlreadySetInDestructor alreadyset_in_destructor(s);
245
+ return true;
246
+ });
247
+
248
+ // test_nested_throws
249
+ m.def("try_catch",
250
+ [m](const py::object &exc_type, const py::function &f, const py::args &args) {
251
+ try {
252
+ f(*args);
253
+ } catch (py::error_already_set &ex) {
254
+ if (ex.matches(exc_type))
255
+ py::print(ex.what());
256
+ else
257
+ throw;
258
+ }
259
+ });
260
+
261
+ // Test repr that cannot be displayed
262
+ m.def("simple_bool_passthrough", [](bool x) {return x;});
263
+
264
+ m.def("throw_should_be_translated_to_key_error", []() { throw shared_exception(); });
265
+
266
+ #if PY_VERSION_HEX >= 0x03030000
267
+
268
+ m.def("raise_from", []() {
269
+ PyErr_SetString(PyExc_ValueError, "inner");
270
+ py::raise_from(PyExc_ValueError, "outer");
271
+ throw py::error_already_set();
272
+ });
273
+
274
+ m.def("raise_from_already_set", []() {
275
+ try {
276
+ PyErr_SetString(PyExc_ValueError, "inner");
277
+ throw py::error_already_set();
278
+ } catch (py::error_already_set& e) {
279
+ py::raise_from(e, PyExc_ValueError, "outer");
280
+ throw py::error_already_set();
281
+ }
282
+ });
283
+
284
+ #endif
285
+ }
@@ -0,0 +1,12 @@
1
+ #pragma once
2
+ #include "pybind11_tests.h"
3
+ #include <stdexcept>
4
+
5
+ // shared exceptions for cross_module_tests
6
+
7
+ class PYBIND11_EXPORT_EXCEPTION shared_exception : public pybind11::builtin_exception {
8
+ public:
9
+ using builtin_exception::builtin_exception;
10
+ explicit shared_exception() : shared_exception("") {}
11
+ void set_error() const override { PyErr_SetString(PyExc_RuntimeError, what()); }
12
+ };
@@ -0,0 +1,265 @@
1
+ # -*- coding: utf-8 -*-
2
+ import sys
3
+
4
+ import pytest
5
+
6
+ import env # noqa: F401
7
+ import pybind11_cross_module_tests as cm
8
+ from pybind11_tests import exceptions as m
9
+
10
+
11
+ def test_std_exception(msg):
12
+ with pytest.raises(RuntimeError) as excinfo:
13
+ m.throw_std_exception()
14
+ assert msg(excinfo.value) == "This exception was intentionally thrown."
15
+
16
+
17
+ def test_error_already_set(msg):
18
+ with pytest.raises(RuntimeError) as excinfo:
19
+ m.throw_already_set(False)
20
+ assert msg(excinfo.value) == "Unknown internal error occurred"
21
+
22
+ with pytest.raises(ValueError) as excinfo:
23
+ m.throw_already_set(True)
24
+ assert msg(excinfo.value) == "foo"
25
+
26
+
27
+ @pytest.mark.skipif("env.PY2")
28
+ def test_raise_from(msg):
29
+ with pytest.raises(ValueError) as excinfo:
30
+ m.raise_from()
31
+ assert msg(excinfo.value) == "outer"
32
+ assert msg(excinfo.value.__cause__) == "inner"
33
+
34
+
35
+ @pytest.mark.skipif("env.PY2")
36
+ def test_raise_from_already_set(msg):
37
+ with pytest.raises(ValueError) as excinfo:
38
+ m.raise_from_already_set()
39
+ assert msg(excinfo.value) == "outer"
40
+ assert msg(excinfo.value.__cause__) == "inner"
41
+
42
+
43
+ def test_cross_module_exceptions(msg):
44
+ with pytest.raises(RuntimeError) as excinfo:
45
+ cm.raise_runtime_error()
46
+ assert str(excinfo.value) == "My runtime error"
47
+
48
+ with pytest.raises(ValueError) as excinfo:
49
+ cm.raise_value_error()
50
+ assert str(excinfo.value) == "My value error"
51
+
52
+ with pytest.raises(ValueError) as excinfo:
53
+ cm.throw_pybind_value_error()
54
+ assert str(excinfo.value) == "pybind11 value error"
55
+
56
+ with pytest.raises(TypeError) as excinfo:
57
+ cm.throw_pybind_type_error()
58
+ assert str(excinfo.value) == "pybind11 type error"
59
+
60
+ with pytest.raises(StopIteration) as excinfo:
61
+ cm.throw_stop_iteration()
62
+
63
+ with pytest.raises(cm.LocalSimpleException) as excinfo:
64
+ cm.throw_local_simple_error()
65
+ assert msg(excinfo.value) == "external mod"
66
+
67
+ with pytest.raises(KeyError) as excinfo:
68
+ cm.throw_local_error()
69
+ # KeyError is a repr of the key, so it has an extra set of quotes
70
+ assert str(excinfo.value) == "'just local'"
71
+
72
+
73
+ # TODO: FIXME
74
+ @pytest.mark.xfail(
75
+ "env.PYPY and env.MACOS",
76
+ raises=RuntimeError,
77
+ reason="Expected failure with PyPy and libc++ (Issue #2847 & PR #2999)",
78
+ )
79
+ def test_cross_module_exception_translator():
80
+ with pytest.raises(KeyError):
81
+ # translator registered in cross_module_tests
82
+ m.throw_should_be_translated_to_key_error()
83
+
84
+
85
+ def test_python_call_in_catch():
86
+ d = {}
87
+ assert m.python_call_in_destructor(d) is True
88
+ assert d["good"] is True
89
+
90
+
91
+ def ignore_pytest_unraisable_warning(f):
92
+ unraisable = "PytestUnraisableExceptionWarning"
93
+ if hasattr(pytest, unraisable): # Python >= 3.8 and pytest >= 6
94
+ dec = pytest.mark.filterwarnings("ignore::pytest.{}".format(unraisable))
95
+ return dec(f)
96
+ else:
97
+ return f
98
+
99
+
100
+ @ignore_pytest_unraisable_warning
101
+ def test_python_alreadyset_in_destructor(monkeypatch, capsys):
102
+ hooked = False
103
+ triggered = [False] # mutable, so Python 2.7 closure can modify it
104
+
105
+ if hasattr(sys, "unraisablehook"): # Python 3.8+
106
+ hooked = True
107
+ # Don't take `sys.unraisablehook`, as that's overwritten by pytest
108
+ default_hook = sys.__unraisablehook__
109
+
110
+ def hook(unraisable_hook_args):
111
+ exc_type, exc_value, exc_tb, err_msg, obj = unraisable_hook_args
112
+ if obj == "already_set demo":
113
+ triggered[0] = True
114
+ default_hook(unraisable_hook_args)
115
+ return
116
+
117
+ # Use monkeypatch so pytest can apply and remove the patch as appropriate
118
+ monkeypatch.setattr(sys, "unraisablehook", hook)
119
+
120
+ assert m.python_alreadyset_in_destructor("already_set demo") is True
121
+ if hooked:
122
+ assert triggered[0] is True
123
+
124
+ _, captured_stderr = capsys.readouterr()
125
+ # Error message is different in Python 2 and 3, check for words that appear in both
126
+ assert "ignored" in captured_stderr and "already_set demo" in captured_stderr
127
+
128
+
129
+ def test_exception_matches():
130
+ assert m.exception_matches()
131
+ assert m.exception_matches_base()
132
+ assert m.modulenotfound_exception_matches_base()
133
+
134
+
135
+ def test_custom(msg):
136
+ # Can we catch a MyException?
137
+ with pytest.raises(m.MyException) as excinfo:
138
+ m.throws1()
139
+ assert msg(excinfo.value) == "this error should go to a custom type"
140
+
141
+ # Can we translate to standard Python exceptions?
142
+ with pytest.raises(RuntimeError) as excinfo:
143
+ m.throws2()
144
+ assert msg(excinfo.value) == "this error should go to a standard Python exception"
145
+
146
+ # Can we handle unknown exceptions?
147
+ with pytest.raises(RuntimeError) as excinfo:
148
+ m.throws3()
149
+ assert msg(excinfo.value) == "Caught an unknown exception!"
150
+
151
+ # Can we delegate to another handler by rethrowing?
152
+ with pytest.raises(m.MyException) as excinfo:
153
+ m.throws4()
154
+ assert msg(excinfo.value) == "this error is rethrown"
155
+
156
+ # Can we fall-through to the default handler?
157
+ with pytest.raises(RuntimeError) as excinfo:
158
+ m.throws_logic_error()
159
+ assert (
160
+ msg(excinfo.value) == "this error should fall through to the standard handler"
161
+ )
162
+
163
+ # OverFlow error translation.
164
+ with pytest.raises(OverflowError) as excinfo:
165
+ m.throws_overflow_error()
166
+
167
+ # Can we handle a helper-declared exception?
168
+ with pytest.raises(m.MyException5) as excinfo:
169
+ m.throws5()
170
+ assert msg(excinfo.value) == "this is a helper-defined translated exception"
171
+
172
+ # Exception subclassing:
173
+ with pytest.raises(m.MyException5) as excinfo:
174
+ m.throws5_1()
175
+ assert msg(excinfo.value) == "MyException5 subclass"
176
+ assert isinstance(excinfo.value, m.MyException5_1)
177
+
178
+ with pytest.raises(m.MyException5_1) as excinfo:
179
+ m.throws5_1()
180
+ assert msg(excinfo.value) == "MyException5 subclass"
181
+
182
+ with pytest.raises(m.MyException5) as excinfo:
183
+ try:
184
+ m.throws5()
185
+ except m.MyException5_1:
186
+ raise RuntimeError("Exception error: caught child from parent")
187
+ assert msg(excinfo.value) == "this is a helper-defined translated exception"
188
+
189
+
190
+ def test_nested_throws(capture):
191
+ """Tests nested (e.g. C++ -> Python -> C++) exception handling"""
192
+
193
+ def throw_myex():
194
+ raise m.MyException("nested error")
195
+
196
+ def throw_myex5():
197
+ raise m.MyException5("nested error 5")
198
+
199
+ # In the comments below, the exception is caught in the first step, thrown in the last step
200
+
201
+ # C++ -> Python
202
+ with capture:
203
+ m.try_catch(m.MyException5, throw_myex5)
204
+ assert str(capture).startswith("MyException5: nested error 5")
205
+
206
+ # Python -> C++ -> Python
207
+ with pytest.raises(m.MyException) as excinfo:
208
+ m.try_catch(m.MyException5, throw_myex)
209
+ assert str(excinfo.value) == "nested error"
210
+
211
+ def pycatch(exctype, f, *args):
212
+ try:
213
+ f(*args)
214
+ except m.MyException as e:
215
+ print(e)
216
+
217
+ # C++ -> Python -> C++ -> Python
218
+ with capture:
219
+ m.try_catch(
220
+ m.MyException5,
221
+ pycatch,
222
+ m.MyException,
223
+ m.try_catch,
224
+ m.MyException,
225
+ throw_myex5,
226
+ )
227
+ assert str(capture).startswith("MyException5: nested error 5")
228
+
229
+ # C++ -> Python -> C++
230
+ with capture:
231
+ m.try_catch(m.MyException, pycatch, m.MyException5, m.throws4)
232
+ assert capture == "this error is rethrown"
233
+
234
+ # Python -> C++ -> Python -> C++
235
+ with pytest.raises(m.MyException5) as excinfo:
236
+ m.try_catch(m.MyException, pycatch, m.MyException, m.throws5)
237
+ assert str(excinfo.value) == "this is a helper-defined translated exception"
238
+
239
+
240
+ # This can often happen if you wrap a pybind11 class in a Python wrapper
241
+ def test_invalid_repr():
242
+ class MyRepr(object):
243
+ def __repr__(self):
244
+ raise AttributeError("Example error")
245
+
246
+ with pytest.raises(TypeError):
247
+ m.simple_bool_passthrough(MyRepr())
248
+
249
+
250
+ def test_local_translator(msg):
251
+ """Tests that a local translator works and that the local translator from
252
+ the cross module is not applied"""
253
+ with pytest.raises(RuntimeError) as excinfo:
254
+ m.throws6()
255
+ assert msg(excinfo.value) == "MyException6 only handled in this module"
256
+
257
+ with pytest.raises(RuntimeError) as excinfo:
258
+ m.throws_local_error()
259
+ assert not isinstance(excinfo.value, KeyError)
260
+ assert msg(excinfo.value) == "never caught"
261
+
262
+ with pytest.raises(Exception) as excinfo:
263
+ m.throws_local_simple_error()
264
+ assert not isinstance(excinfo.value, cm.LocalSimpleException)
265
+ assert msg(excinfo.value) == "this mod"