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,651 @@
1
+ # -*- coding: utf-8 -*-
2
+ from __future__ import division
3
+
4
+ import sys
5
+
6
+ import pytest
7
+
8
+ import env
9
+ from pybind11_tests import debug_enabled
10
+ from pybind11_tests import pytypes as m
11
+
12
+
13
+ def test_int(doc):
14
+ assert doc(m.get_int) == "get_int() -> int"
15
+
16
+
17
+ def test_iterator(doc):
18
+ assert doc(m.get_iterator) == "get_iterator() -> Iterator"
19
+
20
+
21
+ def test_iterable(doc):
22
+ assert doc(m.get_iterable) == "get_iterable() -> Iterable"
23
+
24
+
25
+ def test_list(capture, doc):
26
+ assert m.list_no_args() == []
27
+ assert m.list_ssize_t() == []
28
+ assert m.list_size_t() == []
29
+ lins = [1, 2]
30
+ m.list_insert_ssize_t(lins)
31
+ assert lins == [1, 83, 2]
32
+ m.list_insert_size_t(lins)
33
+ assert lins == [1, 83, 2, 57]
34
+
35
+ with capture:
36
+ lst = m.get_list()
37
+ assert lst == ["inserted-0", "overwritten", "inserted-2"]
38
+
39
+ lst.append("value2")
40
+ m.print_list(lst)
41
+ assert (
42
+ capture.unordered
43
+ == """
44
+ Entry at position 0: value
45
+ list item 0: inserted-0
46
+ list item 1: overwritten
47
+ list item 2: inserted-2
48
+ list item 3: value2
49
+ """
50
+ )
51
+
52
+ assert doc(m.get_list) == "get_list() -> list"
53
+ assert doc(m.print_list) == "print_list(arg0: list) -> None"
54
+
55
+
56
+ def test_none(capture, doc):
57
+ assert doc(m.get_none) == "get_none() -> None"
58
+ assert doc(m.print_none) == "print_none(arg0: None) -> None"
59
+
60
+
61
+ def test_set(capture, doc):
62
+ s = m.get_set()
63
+ assert s == {"key1", "key2", "key3"}
64
+
65
+ with capture:
66
+ s.add("key4")
67
+ m.print_set(s)
68
+ assert (
69
+ capture.unordered
70
+ == """
71
+ key: key1
72
+ key: key2
73
+ key: key3
74
+ key: key4
75
+ """
76
+ )
77
+
78
+ assert not m.set_contains(set(), 42)
79
+ assert m.set_contains({42}, 42)
80
+ assert m.set_contains({"foo"}, "foo")
81
+
82
+ assert doc(m.get_list) == "get_list() -> list"
83
+ assert doc(m.print_list) == "print_list(arg0: list) -> None"
84
+
85
+
86
+ def test_dict(capture, doc):
87
+ d = m.get_dict()
88
+ assert d == {"key": "value"}
89
+
90
+ with capture:
91
+ d["key2"] = "value2"
92
+ m.print_dict(d)
93
+ assert (
94
+ capture.unordered
95
+ == """
96
+ key: key, value=value
97
+ key: key2, value=value2
98
+ """
99
+ )
100
+
101
+ assert not m.dict_contains({}, 42)
102
+ assert m.dict_contains({42: None}, 42)
103
+ assert m.dict_contains({"foo": None}, "foo")
104
+
105
+ assert doc(m.get_dict) == "get_dict() -> dict"
106
+ assert doc(m.print_dict) == "print_dict(arg0: dict) -> None"
107
+
108
+ assert m.dict_keyword_constructor() == {"x": 1, "y": 2, "z": 3}
109
+
110
+
111
+ def test_tuple():
112
+ assert m.tuple_no_args() == ()
113
+ assert m.tuple_ssize_t() == ()
114
+ assert m.tuple_size_t() == ()
115
+ assert m.get_tuple() == (42, None, "spam")
116
+
117
+
118
+ @pytest.mark.skipif("env.PY2")
119
+ def test_simple_namespace():
120
+ ns = m.get_simple_namespace()
121
+ assert ns.attr == 42
122
+ assert ns.x == "foo"
123
+ assert ns.right == 2
124
+ assert not hasattr(ns, "wrong")
125
+
126
+
127
+ def test_str(doc):
128
+ assert m.str_from_char_ssize_t().encode().decode() == "red"
129
+ assert m.str_from_char_size_t().encode().decode() == "blue"
130
+ assert m.str_from_string().encode().decode() == "baz"
131
+ assert m.str_from_bytes().encode().decode() == "boo"
132
+
133
+ assert doc(m.str_from_bytes) == "str_from_bytes() -> str"
134
+
135
+ class A(object):
136
+ def __str__(self):
137
+ return "this is a str"
138
+
139
+ def __repr__(self):
140
+ return "this is a repr"
141
+
142
+ assert m.str_from_object(A()) == "this is a str"
143
+ assert m.repr_from_object(A()) == "this is a repr"
144
+ assert m.str_from_handle(A()) == "this is a str"
145
+
146
+ s1, s2 = m.str_format()
147
+ assert s1 == "1 + 2 = 3"
148
+ assert s1 == s2
149
+
150
+ malformed_utf8 = b"\x80"
151
+ if hasattr(m, "PYBIND11_STR_LEGACY_PERMISSIVE"):
152
+ assert m.str_from_object(malformed_utf8) is malformed_utf8
153
+ elif env.PY2:
154
+ with pytest.raises(UnicodeDecodeError):
155
+ m.str_from_object(malformed_utf8)
156
+ else:
157
+ assert m.str_from_object(malformed_utf8) == "b'\\x80'"
158
+ if env.PY2:
159
+ with pytest.raises(UnicodeDecodeError):
160
+ m.str_from_handle(malformed_utf8)
161
+ else:
162
+ assert m.str_from_handle(malformed_utf8) == "b'\\x80'"
163
+
164
+ assert m.str_from_string_from_str("this is a str") == "this is a str"
165
+ ucs_surrogates_str = u"\udcc3"
166
+ if env.PY2:
167
+ assert u"\udcc3" == m.str_from_string_from_str(ucs_surrogates_str)
168
+ else:
169
+ with pytest.raises(UnicodeEncodeError):
170
+ m.str_from_string_from_str(ucs_surrogates_str)
171
+
172
+
173
+ def test_bytes(doc):
174
+ assert m.bytes_from_char_ssize_t().decode() == "green"
175
+ assert m.bytes_from_char_size_t().decode() == "purple"
176
+ assert m.bytes_from_string().decode() == "foo"
177
+ assert m.bytes_from_str().decode() == "bar"
178
+
179
+ assert doc(m.bytes_from_str) == "bytes_from_str() -> {}".format(
180
+ "str" if env.PY2 else "bytes"
181
+ )
182
+
183
+
184
+ def test_bytearray(doc):
185
+ assert m.bytearray_from_char_ssize_t().decode() == "$%"
186
+ assert m.bytearray_from_char_size_t().decode() == "@$!"
187
+ assert m.bytearray_from_string().decode() == "foo"
188
+ assert m.bytearray_size() == len("foo")
189
+
190
+
191
+ def test_capsule(capture):
192
+ pytest.gc_collect()
193
+ with capture:
194
+ a = m.return_capsule_with_destructor()
195
+ del a
196
+ pytest.gc_collect()
197
+ assert (
198
+ capture.unordered
199
+ == """
200
+ creating capsule
201
+ destructing capsule
202
+ """
203
+ )
204
+
205
+ with capture:
206
+ a = m.return_capsule_with_destructor_2()
207
+ del a
208
+ pytest.gc_collect()
209
+ assert (
210
+ capture.unordered
211
+ == """
212
+ creating capsule
213
+ destructing capsule: 1234
214
+ """
215
+ )
216
+
217
+ with capture:
218
+ a = m.return_capsule_with_name_and_destructor()
219
+ del a
220
+ pytest.gc_collect()
221
+ assert (
222
+ capture.unordered
223
+ == """
224
+ created capsule (1234, 'pointer type description')
225
+ destructing capsule (1234, 'pointer type description')
226
+ """
227
+ )
228
+
229
+
230
+ def test_accessors():
231
+ class SubTestObject:
232
+ attr_obj = 1
233
+ attr_char = 2
234
+
235
+ class TestObject:
236
+ basic_attr = 1
237
+ begin_end = [1, 2, 3]
238
+ d = {"operator[object]": 1, "operator[char *]": 2}
239
+ sub = SubTestObject()
240
+
241
+ def func(self, x, *args):
242
+ return self.basic_attr + x + sum(args)
243
+
244
+ d = m.accessor_api(TestObject())
245
+ assert d["basic_attr"] == 1
246
+ assert d["begin_end"] == [1, 2, 3]
247
+ assert d["operator[object]"] == 1
248
+ assert d["operator[char *]"] == 2
249
+ assert d["attr(object)"] == 1
250
+ assert d["attr(char *)"] == 2
251
+ assert d["missing_attr_ptr"] == "raised"
252
+ assert d["missing_attr_chain"] == "raised"
253
+ assert d["is_none"] is False
254
+ assert d["operator()"] == 2
255
+ assert d["operator*"] == 7
256
+ assert d["implicit_list"] == [1, 2, 3]
257
+ assert all(x in TestObject.__dict__ for x in d["implicit_dict"])
258
+
259
+ assert m.tuple_accessor(tuple()) == (0, 1, 2)
260
+
261
+ d = m.accessor_assignment()
262
+ assert d["get"] == 0
263
+ assert d["deferred_get"] == 0
264
+ assert d["set"] == 1
265
+ assert d["deferred_set"] == 1
266
+ assert d["var"] == 99
267
+
268
+
269
+ def test_constructors():
270
+ """C++ default and converting constructors are equivalent to type calls in Python"""
271
+ types = [bytes, bytearray, str, bool, int, float, tuple, list, dict, set]
272
+ expected = {t.__name__: t() for t in types}
273
+ if env.PY2:
274
+ # Note that bytes.__name__ == 'str' in Python 2.
275
+ # pybind11::str is unicode even under Python 2.
276
+ expected["bytes"] = bytes()
277
+ expected["str"] = unicode() # noqa: F821
278
+ assert m.default_constructors() == expected
279
+
280
+ data = {
281
+ bytes: b"41", # Currently no supported or working conversions.
282
+ bytearray: bytearray(b"41"),
283
+ str: 42,
284
+ bool: "Not empty",
285
+ int: "42",
286
+ float: "+1e3",
287
+ tuple: range(3),
288
+ list: range(3),
289
+ dict: [("two", 2), ("one", 1), ("three", 3)],
290
+ set: [4, 4, 5, 6, 6, 6],
291
+ memoryview: b"abc",
292
+ }
293
+ inputs = {k.__name__: v for k, v in data.items()}
294
+ expected = {k.__name__: k(v) for k, v in data.items()}
295
+ if env.PY2: # Similar to the above. See comments above.
296
+ inputs["bytes"] = b"41"
297
+ inputs["str"] = 42
298
+ expected["bytes"] = b"41"
299
+ expected["str"] = u"42"
300
+
301
+ assert m.converting_constructors(inputs) == expected
302
+ assert m.cast_functions(inputs) == expected
303
+
304
+ # Converting constructors and cast functions should just reference rather
305
+ # than copy when no conversion is needed:
306
+ noconv1 = m.converting_constructors(expected)
307
+ for k in noconv1:
308
+ assert noconv1[k] is expected[k]
309
+
310
+ noconv2 = m.cast_functions(expected)
311
+ for k in noconv2:
312
+ assert noconv2[k] is expected[k]
313
+
314
+
315
+ def test_non_converting_constructors():
316
+ non_converting_test_cases = [
317
+ ("bytes", range(10)),
318
+ ("none", 42),
319
+ ("ellipsis", 42),
320
+ ("type", 42),
321
+ ]
322
+ for t, v in non_converting_test_cases:
323
+ for move in [True, False]:
324
+ with pytest.raises(TypeError) as excinfo:
325
+ m.nonconverting_constructor(t, v, move)
326
+ expected_error = "Object of type '{}' is not an instance of '{}'".format(
327
+ type(v).__name__, t
328
+ )
329
+ assert str(excinfo.value) == expected_error
330
+
331
+
332
+ def test_pybind11_str_raw_str():
333
+ # specifically to exercise pybind11::str::raw_str
334
+ cvt = m.convert_to_pybind11_str
335
+ assert cvt(u"Str") == u"Str"
336
+ assert cvt(b"Bytes") == u"Bytes" if env.PY2 else "b'Bytes'"
337
+ assert cvt(None) == u"None"
338
+ assert cvt(False) == u"False"
339
+ assert cvt(True) == u"True"
340
+ assert cvt(42) == u"42"
341
+ assert cvt(2 ** 65) == u"36893488147419103232"
342
+ assert cvt(-1.50) == u"-1.5"
343
+ assert cvt(()) == u"()"
344
+ assert cvt((18,)) == u"(18,)"
345
+ assert cvt([]) == u"[]"
346
+ assert cvt([28]) == u"[28]"
347
+ assert cvt({}) == u"{}"
348
+ assert cvt({3: 4}) == u"{3: 4}"
349
+ assert cvt(set()) == u"set([])" if env.PY2 else "set()"
350
+ assert cvt({3, 3}) == u"set([3])" if env.PY2 else "{3}"
351
+
352
+ valid_orig = u"DZ"
353
+ valid_utf8 = valid_orig.encode("utf-8")
354
+ valid_cvt = cvt(valid_utf8)
355
+ if hasattr(m, "PYBIND11_STR_LEGACY_PERMISSIVE"):
356
+ assert valid_cvt is valid_utf8
357
+ else:
358
+ assert type(valid_cvt) is unicode if env.PY2 else str # noqa: F821
359
+ if env.PY2:
360
+ assert valid_cvt == valid_orig
361
+ else:
362
+ assert valid_cvt == "b'\\xc7\\xb1'"
363
+
364
+ malformed_utf8 = b"\x80"
365
+ if hasattr(m, "PYBIND11_STR_LEGACY_PERMISSIVE"):
366
+ assert cvt(malformed_utf8) is malformed_utf8
367
+ else:
368
+ if env.PY2:
369
+ with pytest.raises(UnicodeDecodeError):
370
+ cvt(malformed_utf8)
371
+ else:
372
+ malformed_cvt = cvt(malformed_utf8)
373
+ assert type(malformed_cvt) is str
374
+ assert malformed_cvt == "b'\\x80'"
375
+
376
+
377
+ def test_implicit_casting():
378
+ """Tests implicit casting when assigning or appending to dicts and lists."""
379
+ z = m.get_implicit_casting()
380
+ assert z["d"] == {
381
+ "char*_i1": "abc",
382
+ "char*_i2": "abc",
383
+ "char*_e": "abc",
384
+ "char*_p": "abc",
385
+ "str_i1": "str",
386
+ "str_i2": "str1",
387
+ "str_e": "str2",
388
+ "str_p": "str3",
389
+ "int_i1": 42,
390
+ "int_i2": 42,
391
+ "int_e": 43,
392
+ "int_p": 44,
393
+ }
394
+ assert z["l"] == [3, 6, 9, 12, 15]
395
+
396
+
397
+ def test_print(capture):
398
+ with capture:
399
+ m.print_function()
400
+ assert (
401
+ capture
402
+ == """
403
+ Hello, World!
404
+ 1 2.0 three True -- multiple args
405
+ *args-and-a-custom-separator
406
+ no new line here -- next print
407
+ flush
408
+ py::print + str.format = this
409
+ """
410
+ )
411
+ assert capture.stderr == "this goes to stderr"
412
+
413
+ with pytest.raises(RuntimeError) as excinfo:
414
+ m.print_failure()
415
+ assert str(excinfo.value) == "Unable to convert call argument " + (
416
+ "'1' of type 'UnregisteredType' to Python object"
417
+ if debug_enabled
418
+ else "to Python object (compile in debug mode for details)"
419
+ )
420
+
421
+
422
+ def test_hash():
423
+ class Hashable(object):
424
+ def __init__(self, value):
425
+ self.value = value
426
+
427
+ def __hash__(self):
428
+ return self.value
429
+
430
+ class Unhashable(object):
431
+ __hash__ = None
432
+
433
+ assert m.hash_function(Hashable(42)) == 42
434
+ with pytest.raises(TypeError):
435
+ m.hash_function(Unhashable())
436
+
437
+
438
+ def test_number_protocol():
439
+ for a, b in [(1, 1), (3, 5)]:
440
+ li = [
441
+ a == b,
442
+ a != b,
443
+ a < b,
444
+ a <= b,
445
+ a > b,
446
+ a >= b,
447
+ a + b,
448
+ a - b,
449
+ a * b,
450
+ a / b,
451
+ a | b,
452
+ a & b,
453
+ a ^ b,
454
+ a >> b,
455
+ a << b,
456
+ ]
457
+ assert m.test_number_protocol(a, b) == li
458
+
459
+
460
+ def test_list_slicing():
461
+ li = list(range(100))
462
+ assert li[::2] == m.test_list_slicing(li)
463
+
464
+
465
+ def test_issue2361():
466
+ # See issue #2361
467
+ assert m.issue2361_str_implicit_copy_none() == "None"
468
+ with pytest.raises(TypeError) as excinfo:
469
+ assert m.issue2361_dict_implicit_copy_none()
470
+ assert "NoneType" in str(excinfo.value)
471
+ assert "iterable" in str(excinfo.value)
472
+
473
+
474
+ @pytest.mark.parametrize(
475
+ "method, args, fmt, expected_view",
476
+ [
477
+ (m.test_memoryview_object, (b"red",), "B", b"red"),
478
+ (m.test_memoryview_buffer_info, (b"green",), "B", b"green"),
479
+ (m.test_memoryview_from_buffer, (False,), "h", [3, 1, 4, 1, 5]),
480
+ (m.test_memoryview_from_buffer, (True,), "H", [2, 7, 1, 8]),
481
+ (m.test_memoryview_from_buffer_nativeformat, (), "@i", [4, 7, 5]),
482
+ ],
483
+ )
484
+ def test_memoryview(method, args, fmt, expected_view):
485
+ view = method(*args)
486
+ assert isinstance(view, memoryview)
487
+ assert view.format == fmt
488
+ if isinstance(expected_view, bytes) or not env.PY2:
489
+ view_as_list = list(view)
490
+ else:
491
+ # Using max to pick non-zero byte (big-endian vs little-endian).
492
+ view_as_list = [max(ord(c) for c in s) for s in view]
493
+ assert view_as_list == list(expected_view)
494
+
495
+
496
+ @pytest.mark.xfail("env.PYPY", reason="getrefcount is not available")
497
+ @pytest.mark.parametrize(
498
+ "method",
499
+ [
500
+ m.test_memoryview_object,
501
+ m.test_memoryview_buffer_info,
502
+ ],
503
+ )
504
+ def test_memoryview_refcount(method):
505
+ buf = b"\x0a\x0b\x0c\x0d"
506
+ ref_before = sys.getrefcount(buf)
507
+ view = method(buf)
508
+ ref_after = sys.getrefcount(buf)
509
+ assert ref_before < ref_after
510
+ assert list(view) == list(buf)
511
+
512
+
513
+ def test_memoryview_from_buffer_empty_shape():
514
+ view = m.test_memoryview_from_buffer_empty_shape()
515
+ assert isinstance(view, memoryview)
516
+ assert view.format == "B"
517
+ if env.PY2:
518
+ # Python 2 behavior is weird, but Python 3 (the future) is fine.
519
+ # PyPy3 has <memoryview, while CPython 2 has <memory
520
+ assert bytes(view).startswith(b"<memory")
521
+ else:
522
+ assert bytes(view) == b""
523
+
524
+
525
+ def test_test_memoryview_from_buffer_invalid_strides():
526
+ with pytest.raises(RuntimeError):
527
+ m.test_memoryview_from_buffer_invalid_strides()
528
+
529
+
530
+ def test_test_memoryview_from_buffer_nullptr():
531
+ if env.PY2:
532
+ m.test_memoryview_from_buffer_nullptr()
533
+ else:
534
+ with pytest.raises(ValueError):
535
+ m.test_memoryview_from_buffer_nullptr()
536
+
537
+
538
+ @pytest.mark.skipif("env.PY2")
539
+ def test_memoryview_from_memory():
540
+ view = m.test_memoryview_from_memory()
541
+ assert isinstance(view, memoryview)
542
+ assert view.format == "B"
543
+ assert bytes(view) == b"\xff\xe1\xab\x37"
544
+
545
+
546
+ def test_builtin_functions():
547
+ assert m.get_len([i for i in range(42)]) == 42
548
+ with pytest.raises(TypeError) as exc_info:
549
+ m.get_len(i for i in range(42))
550
+ assert str(exc_info.value) in [
551
+ "object of type 'generator' has no len()",
552
+ "'generator' has no length",
553
+ ] # PyPy
554
+
555
+
556
+ def test_isinstance_string_types():
557
+ assert m.isinstance_pybind11_bytes(b"")
558
+ assert not m.isinstance_pybind11_bytes(u"")
559
+
560
+ assert m.isinstance_pybind11_str(u"")
561
+ if hasattr(m, "PYBIND11_STR_LEGACY_PERMISSIVE"):
562
+ assert m.isinstance_pybind11_str(b"")
563
+ else:
564
+ assert not m.isinstance_pybind11_str(b"")
565
+
566
+
567
+ def test_pass_bytes_or_unicode_to_string_types():
568
+ assert m.pass_to_pybind11_bytes(b"Bytes") == 5
569
+ with pytest.raises(TypeError):
570
+ m.pass_to_pybind11_bytes(u"Str")
571
+
572
+ if hasattr(m, "PYBIND11_STR_LEGACY_PERMISSIVE") or env.PY2:
573
+ assert m.pass_to_pybind11_str(b"Bytes") == 5
574
+ else:
575
+ with pytest.raises(TypeError):
576
+ m.pass_to_pybind11_str(b"Bytes")
577
+ assert m.pass_to_pybind11_str(u"Str") == 3
578
+
579
+ assert m.pass_to_std_string(b"Bytes") == 5
580
+ assert m.pass_to_std_string(u"Str") == 3
581
+
582
+ malformed_utf8 = b"\x80"
583
+ if hasattr(m, "PYBIND11_STR_LEGACY_PERMISSIVE"):
584
+ assert m.pass_to_pybind11_str(malformed_utf8) == 1
585
+ elif env.PY2:
586
+ with pytest.raises(UnicodeDecodeError):
587
+ m.pass_to_pybind11_str(malformed_utf8)
588
+ else:
589
+ with pytest.raises(TypeError):
590
+ m.pass_to_pybind11_str(malformed_utf8)
591
+
592
+
593
+ @pytest.mark.parametrize(
594
+ "create_weakref, create_weakref_with_callback",
595
+ [
596
+ (m.weakref_from_handle, m.weakref_from_handle_and_function),
597
+ (m.weakref_from_object, m.weakref_from_object_and_function),
598
+ ],
599
+ )
600
+ def test_weakref(create_weakref, create_weakref_with_callback):
601
+ from weakref import getweakrefcount
602
+
603
+ # Apparently, you cannot weakly reference an object()
604
+ class WeaklyReferenced(object):
605
+ pass
606
+
607
+ def callback(wr):
608
+ # No `nonlocal` in Python 2
609
+ callback.called = True
610
+
611
+ obj = WeaklyReferenced()
612
+ assert getweakrefcount(obj) == 0
613
+ wr = create_weakref(obj)
614
+ assert getweakrefcount(obj) == 1
615
+
616
+ obj = WeaklyReferenced()
617
+ assert getweakrefcount(obj) == 0
618
+ callback.called = False
619
+ wr = create_weakref_with_callback(obj, callback) # noqa: F841
620
+ assert getweakrefcount(obj) == 1
621
+ assert not callback.called
622
+ del obj
623
+ pytest.gc_collect()
624
+ assert callback.called
625
+
626
+
627
+ def test_cpp_iterators():
628
+ assert m.tuple_iterator() == 12
629
+ assert m.dict_iterator() == 305 + 711
630
+ assert m.passed_iterator(iter((-7, 3))) == -4
631
+
632
+
633
+ def test_implementation_details():
634
+ lst = [39, 43, 92, 49, 22, 29, 93, 98, 26, 57, 8]
635
+ tup = tuple(lst)
636
+ assert m.sequence_item_get_ssize_t(lst) == 43
637
+ assert m.sequence_item_set_ssize_t(lst) is None
638
+ assert lst[1] == "peppa"
639
+ assert m.sequence_item_get_size_t(lst) == 92
640
+ assert m.sequence_item_set_size_t(lst) is None
641
+ assert lst[2] == "george"
642
+ assert m.list_item_get_ssize_t(lst) == 49
643
+ assert m.list_item_set_ssize_t(lst) is None
644
+ assert lst[3] == "rebecca"
645
+ assert m.list_item_get_size_t(lst) == 22
646
+ assert m.list_item_set_size_t(lst) is None
647
+ assert lst[4] == "richard"
648
+ assert m.tuple_item_get_ssize_t(tup) == 29
649
+ assert m.tuple_item_set_ssize_t() == ("emely", "edmond")
650
+ assert m.tuple_item_get_size_t(tup) == 93
651
+ assert m.tuple_item_set_size_t() == ("candy", "cat")