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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


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

Files changed (324) hide show
  1. xcoll/__init__.py +2 -1
  2. xcoll/beam_elements/__init__.py +9 -2
  3. xcoll/beam_elements/absorber.py +2 -2
  4. xcoll/beam_elements/base.py +105 -67
  5. xcoll/beam_elements/blowup.py +198 -0
  6. xcoll/beam_elements/{collimators_src → elements_src}/black_absorber.h +21 -3
  7. xcoll/beam_elements/{collimators_src → elements_src}/black_crystal.h +20 -2
  8. xcoll/beam_elements/elements_src/blowup.h +42 -0
  9. xcoll/beam_elements/elements_src/emittance_monitor.h +109 -0
  10. xcoll/beam_elements/{collimators_src → elements_src}/everest_block.h +19 -2
  11. xcoll/beam_elements/{collimators_src → elements_src}/everest_collimator.h +19 -3
  12. xcoll/beam_elements/{collimators_src → elements_src}/everest_crystal.h +30 -9
  13. xcoll/beam_elements/everest.py +5 -6
  14. xcoll/beam_elements/monitor.py +428 -0
  15. xcoll/colldb.py +103 -74
  16. xcoll/general.py +4 -4
  17. xcoll/initial_distribution.py +18 -6
  18. xcoll/install.py +3 -1
  19. xcoll/interaction_record/interaction_record.py +127 -81
  20. xcoll/interaction_record/interaction_record_src/interaction_record.h +43 -43
  21. xcoll/line_tools.py +8 -9
  22. xcoll/lossmap.py +48 -38
  23. xcoll/scattering_routines/everest/amorphous.h +4 -11
  24. xcoll/scattering_routines/everest/channeling.h +3 -8
  25. xcoll/scattering_routines/everest/everest.h +4 -1
  26. xcoll/scattering_routines/everest/jaw.h +4 -3
  27. xcoll/scattering_routines/everest/materials.py +35 -15
  28. xcoll/scattering_routines/everest/multiple_coulomb_scattering.h +2 -2
  29. xcoll/scattering_routines/everest/nuclear_interaction.h +1 -1
  30. xcoll/scattering_routines/everest/properties.h +6 -1
  31. xcoll/scattering_routines/fluka/flukaio/lib/libFlukaIO64.a +0 -0
  32. xcoll/scattering_routines/geant4/collimasim/.git +1 -0
  33. xcoll/scattering_routines/geant4/collimasim/.gitignore +12 -0
  34. xcoll/scattering_routines/geant4/collimasim/.gitmodules +3 -0
  35. xcoll/scattering_routines/geant4/collimasim/CMakeLists.txt +26 -0
  36. xcoll/scattering_routines/geant4/collimasim/README.md +21 -0
  37. xcoll/scattering_routines/geant4/collimasim/docs/Makefile +20 -0
  38. xcoll/scattering_routines/geant4/collimasim/docs/make.bat +35 -0
  39. xcoll/scattering_routines/geant4/collimasim/docs/source/collimasim.rst +10 -0
  40. xcoll/scattering_routines/geant4/collimasim/docs/source/conf.py +59 -0
  41. xcoll/scattering_routines/geant4/collimasim/docs/source/index.rst +26 -0
  42. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.appveyor.yml +37 -0
  43. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.clang-format +19 -0
  44. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.clang-tidy +65 -0
  45. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.cmake-format.yaml +73 -0
  46. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.git +1 -0
  47. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/CODEOWNERS +9 -0
  48. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/CONTRIBUTING.md +386 -0
  49. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/ISSUE_TEMPLATE/bug-report.yml +45 -0
  50. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/ISSUE_TEMPLATE/config.yml +8 -0
  51. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/dependabot.yml +16 -0
  52. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/labeler.yml +8 -0
  53. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/labeler_merged.yml +3 -0
  54. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/pull_request_template.md +19 -0
  55. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/workflows/ci.yml +969 -0
  56. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/workflows/configure.yml +84 -0
  57. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/workflows/format.yml +48 -0
  58. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/workflows/labeler.yml +16 -0
  59. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/workflows/pip.yml +103 -0
  60. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.gitignore +45 -0
  61. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.pre-commit-config.yaml +151 -0
  62. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.readthedocs.yml +3 -0
  63. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/CMakeLists.txt +297 -0
  64. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/LICENSE +29 -0
  65. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/MANIFEST.in +6 -0
  66. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/README.rst +180 -0
  67. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/Doxyfile +23 -0
  68. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/Makefile +192 -0
  69. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/_static/theme_overrides.css +11 -0
  70. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/chrono.rst +81 -0
  71. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/custom.rst +93 -0
  72. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/eigen.rst +310 -0
  73. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/functional.rst +109 -0
  74. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/index.rst +43 -0
  75. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/overview.rst +171 -0
  76. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/stl.rst +251 -0
  77. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/strings.rst +305 -0
  78. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/classes.rst +1297 -0
  79. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/embedding.rst +262 -0
  80. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/exceptions.rst +396 -0
  81. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/functions.rst +568 -0
  82. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/misc.rst +337 -0
  83. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/pycpp/index.rst +13 -0
  84. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/pycpp/numpy.rst +463 -0
  85. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/pycpp/object.rst +286 -0
  86. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/pycpp/utilities.rst +155 -0
  87. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/smart_ptrs.rst +174 -0
  88. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/basics.rst +308 -0
  89. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/benchmark.py +91 -0
  90. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/benchmark.rst +95 -0
  91. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/changelog.rst +2050 -0
  92. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/classes.rst +542 -0
  93. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/cmake/index.rst +8 -0
  94. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/compiling.rst +648 -0
  95. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/conf.py +381 -0
  96. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/faq.rst +343 -0
  97. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/index.rst +48 -0
  98. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/installing.rst +105 -0
  99. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/limitations.rst +72 -0
  100. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/pybind11-logo.png +0 -0
  101. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/pybind11_vs_boost_python1.png +0 -0
  102. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/pybind11_vs_boost_python1.svg +427 -0
  103. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/pybind11_vs_boost_python2.png +0 -0
  104. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/pybind11_vs_boost_python2.svg +427 -0
  105. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/reference.rst +130 -0
  106. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/release.rst +96 -0
  107. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/requirements.txt +8 -0
  108. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/upgrade.rst +548 -0
  109. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/attr.h +605 -0
  110. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/buffer_info.h +144 -0
  111. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/cast.h +1432 -0
  112. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/chrono.h +213 -0
  113. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/common.h +2 -0
  114. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/complex.h +65 -0
  115. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/class.h +709 -0
  116. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/common.h +1021 -0
  117. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/descr.h +104 -0
  118. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/init.h +346 -0
  119. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/internals.h +467 -0
  120. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/type_caster_base.h +978 -0
  121. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/typeid.h +55 -0
  122. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/eigen.h +606 -0
  123. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/embed.h +284 -0
  124. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/eval.h +163 -0
  125. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/functional.h +121 -0
  126. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/gil.h +193 -0
  127. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/iostream.h +275 -0
  128. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/numpy.h +1741 -0
  129. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/operators.h +163 -0
  130. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/options.h +65 -0
  131. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/pybind11.h +2497 -0
  132. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/pytypes.h +1879 -0
  133. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/stl/filesystem.h +103 -0
  134. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/stl.h +375 -0
  135. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/stl_bind.h +747 -0
  136. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/noxfile.py +88 -0
  137. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/__init__.py +11 -0
  138. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/__main__.py +52 -0
  139. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/_version.py +12 -0
  140. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/_version.pyi +6 -0
  141. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/commands.py +21 -0
  142. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/py.typed +0 -0
  143. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/setup_helpers.py +482 -0
  144. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/setup_helpers.pyi +63 -0
  145. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pyproject.toml +41 -0
  146. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/setup.cfg +56 -0
  147. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/setup.py +155 -0
  148. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/CMakeLists.txt +503 -0
  149. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/conftest.py +208 -0
  150. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/constructor_stats.h +275 -0
  151. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/cross_module_gil_utils.cpp +73 -0
  152. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/env.py +33 -0
  153. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/extra_python_package/pytest.ini +0 -0
  154. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/extra_python_package/test_files.py +279 -0
  155. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/extra_setuptools/pytest.ini +0 -0
  156. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/extra_setuptools/test_setuphelper.py +143 -0
  157. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/local_bindings.h +85 -0
  158. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/object.h +179 -0
  159. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/pybind11_cross_module_tests.cpp +151 -0
  160. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/pybind11_tests.cpp +91 -0
  161. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/pybind11_tests.h +85 -0
  162. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/pytest.ini +19 -0
  163. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/requirements.txt +12 -0
  164. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_async.cpp +26 -0
  165. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_async.py +25 -0
  166. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_buffers.cpp +216 -0
  167. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_buffers.py +163 -0
  168. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_builtin_casters.cpp +286 -0
  169. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_builtin_casters.py +536 -0
  170. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_call_policies.cpp +107 -0
  171. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_call_policies.py +248 -0
  172. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_callbacks.cpp +227 -0
  173. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_callbacks.py +202 -0
  174. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_chrono.cpp +84 -0
  175. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_chrono.py +210 -0
  176. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_class.cpp +550 -0
  177. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_class.py +473 -0
  178. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/CMakeLists.txt +84 -0
  179. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/embed.cpp +21 -0
  180. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/installed_embed/CMakeLists.txt +28 -0
  181. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/installed_function/CMakeLists.txt +39 -0
  182. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/installed_target/CMakeLists.txt +46 -0
  183. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/main.cpp +6 -0
  184. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/subdirectory_embed/CMakeLists.txt +41 -0
  185. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/subdirectory_function/CMakeLists.txt +35 -0
  186. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/subdirectory_target/CMakeLists.txt +41 -0
  187. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/test.py +10 -0
  188. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_constants_and_functions.cpp +165 -0
  189. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_constants_and_functions.py +53 -0
  190. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_copy_move.cpp +238 -0
  191. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_copy_move.py +126 -0
  192. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_custom_type_casters.cpp +141 -0
  193. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_custom_type_casters.py +117 -0
  194. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_custom_type_setup.cpp +41 -0
  195. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_custom_type_setup.py +50 -0
  196. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_docstring_options.cpp +69 -0
  197. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_docstring_options.py +42 -0
  198. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_eigen.cpp +348 -0
  199. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_eigen.py +771 -0
  200. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_embed/CMakeLists.txt +47 -0
  201. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_embed/catch.cpp +22 -0
  202. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_embed/external_module.cpp +23 -0
  203. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_embed/test_interpreter.cpp +326 -0
  204. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_embed/test_interpreter.py +15 -0
  205. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_enum.cpp +148 -0
  206. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_enum.py +272 -0
  207. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_eval.cpp +119 -0
  208. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_eval.py +51 -0
  209. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_eval_call.py +5 -0
  210. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_exceptions.cpp +285 -0
  211. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_exceptions.h +12 -0
  212. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_exceptions.py +265 -0
  213. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_factory_constructors.cpp +397 -0
  214. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_factory_constructors.py +520 -0
  215. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_gil_scoped.cpp +49 -0
  216. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_gil_scoped.py +94 -0
  217. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_iostream.cpp +125 -0
  218. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_iostream.py +331 -0
  219. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_kwargs_and_defaults.cpp +153 -0
  220. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_kwargs_and_defaults.py +284 -0
  221. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_local_bindings.cpp +107 -0
  222. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_local_bindings.py +257 -0
  223. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_methods_and_attributes.cpp +412 -0
  224. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_methods_and_attributes.py +517 -0
  225. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_modules.cpp +102 -0
  226. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_modules.py +92 -0
  227. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_multiple_inheritance.cpp +233 -0
  228. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_multiple_inheritance.py +360 -0
  229. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_numpy_array.cpp +472 -0
  230. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_numpy_array.py +593 -0
  231. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_numpy_dtypes.cpp +524 -0
  232. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_numpy_dtypes.py +441 -0
  233. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_numpy_vectorize.cpp +103 -0
  234. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_numpy_vectorize.py +267 -0
  235. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_opaque_types.cpp +73 -0
  236. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_opaque_types.py +59 -0
  237. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_operator_overloading.cpp +235 -0
  238. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_operator_overloading.py +146 -0
  239. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_pickling.cpp +189 -0
  240. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_pickling.py +82 -0
  241. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_pytypes.cpp +560 -0
  242. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_pytypes.py +651 -0
  243. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_sequences_and_iterators.cpp +500 -0
  244. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_sequences_and_iterators.py +253 -0
  245. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_smart_ptr.cpp +452 -0
  246. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_smart_ptr.py +318 -0
  247. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_stl.cpp +342 -0
  248. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_stl.py +291 -0
  249. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_stl_binders.cpp +131 -0
  250. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_stl_binders.py +318 -0
  251. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_tagbased_polymorphic.cpp +144 -0
  252. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_tagbased_polymorphic.py +29 -0
  253. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_thread.cpp +66 -0
  254. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_thread.py +44 -0
  255. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_union.cpp +22 -0
  256. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_union.py +9 -0
  257. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_virtual_functions.cpp +510 -0
  258. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_virtual_functions.py +408 -0
  259. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/valgrind-numpy-scipy.supp +140 -0
  260. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/valgrind-python.supp +117 -0
  261. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/FindCatch.cmake +70 -0
  262. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/FindEigen3.cmake +86 -0
  263. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/FindPythonLibsNew.cmake +257 -0
  264. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/check-style.sh +44 -0
  265. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/cmake_uninstall.cmake.in +23 -0
  266. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/libsize.py +39 -0
  267. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/make_changelog.py +64 -0
  268. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/pybind11Common.cmake +402 -0
  269. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/pybind11Config.cmake.in +233 -0
  270. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/pybind11NewTools.cmake +276 -0
  271. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/pybind11Tools.cmake +214 -0
  272. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/pyproject.toml +3 -0
  273. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/setup_global.py.in +65 -0
  274. xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/setup_main.py.in +41 -0
  275. xcoll/scattering_routines/geant4/collimasim/pyproject.toml +8 -0
  276. xcoll/scattering_routines/geant4/collimasim/setup.py +144 -0
  277. xcoll/scattering_routines/geant4/collimasim/src/collimasim/BDSPyATInterface.cpp +403 -0
  278. xcoll/scattering_routines/geant4/collimasim/src/collimasim/BDSPyATInterface.hh +100 -0
  279. xcoll/scattering_routines/geant4/collimasim/src/collimasim/BDSXtrackInterface.cpp +763 -0
  280. xcoll/scattering_routines/geant4/collimasim/src/collimasim/BDSXtrackInterface.hh +118 -0
  281. xcoll/scattering_routines/geant4/collimasim/src/collimasim/__init__.py +8 -0
  282. xcoll/scattering_routines/geant4/collimasim/src/collimasim/bindings.cpp +63 -0
  283. xcoll/scattering_routines/geant4/collimasim/src/collimasim/pyCollimatorPass.py +142 -0
  284. xcoll/scattering_routines/geant4/collimasim/src/collimasim/xtrack_collimator.py +556 -0
  285. xcoll/scattering_routines/geant4/collimasim/src/collimasim.egg-info/PKG-INFO +6 -0
  286. xcoll/scattering_routines/geant4/collimasim/src/collimasim.egg-info/SOURCES.txt +24 -0
  287. xcoll/scattering_routines/geant4/collimasim/src/collimasim.egg-info/dependency_links.txt +1 -0
  288. xcoll/scattering_routines/geant4/collimasim/src/collimasim.egg-info/not-zip-safe +1 -0
  289. xcoll/scattering_routines/geant4/collimasim/src/collimasim.egg-info/top_level.txt +1 -0
  290. xcoll/scattering_routines/geant4/collimasim/tests/README.md +25 -0
  291. xcoll/scattering_routines/geant4/collimasim/tests/resources/CollDB_forions.dat +25 -0
  292. xcoll/scattering_routines/geant4/collimasim/tests/resources/CollDB_new_example.dat +18 -0
  293. xcoll/scattering_routines/geant4/collimasim/tests/resources/CollDB_old_example.dat +68 -0
  294. xcoll/scattering_routines/geant4/collimasim/tests/resources/CollDB_testing.dat +15 -0
  295. xcoll/scattering_routines/geant4/collimasim/tests/resources/CollDB_yaml_example.yaml +110 -0
  296. xcoll/scattering_routines/geant4/collimasim/tests/resources/collgaps.dat +7 -0
  297. xcoll/scattering_routines/geant4/collimasim/tests/resources/collgaps_pyat_test.dat +3 -0
  298. xcoll/scattering_routines/geant4/collimasim/tests/resources/collonly_twiss_file_example.tfs +54 -0
  299. xcoll/scattering_routines/geant4/collimasim/tests/resources/settings.gmad +3 -0
  300. xcoll/scattering_routines/geant4/collimasim/tests/resources/settings_black_absorber.gmad +3 -0
  301. xcoll/scattering_routines/geant4/collimasim/tests/resources/settings_ions.gmad +5 -0
  302. xcoll/scattering_routines/geant4/collimasim/tests/resources/twiss_file_testing.tfs +51 -0
  303. xcoll/scattering_routines/geant4/collimasim/tests/test_pyat.py +65 -0
  304. xcoll/scattering_routines/geant4/collimasim/tests/test_pyat_passmethod.py +59 -0
  305. xcoll/scattering_routines/geant4/collimasim/tests/test_pyat_tracking.py +102 -0
  306. xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack.py +75 -0
  307. xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_angle.py +74 -0
  308. xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_colldb_load.py +84 -0
  309. xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_interaction.py +159 -0
  310. xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_interaction_ion.py +99 -0
  311. xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_ions.py +78 -0
  312. xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_lost_energy.py +88 -0
  313. xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_tilt.py +80 -0
  314. xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_tracking.py +97 -0
  315. xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_tracking_ions.py +96 -0
  316. xcoll/scattering_routines/geometry/collimator_geometry.h +9 -10
  317. xcoll/scattering_routines/geometry/crystal_geometry.h +9 -6
  318. {xcoll-0.4.0.dist-info → xcoll-0.5.1.dist-info}/METADATA +1 -1
  319. xcoll-0.5.1.dist-info/RECORD +413 -0
  320. xcoll/scattering_routines/fluka/build_fluka_input.py +0 -58
  321. xcoll-0.4.0.dist-info/RECORD +0 -126
  322. {xcoll-0.4.0.dist-info → xcoll-0.5.1.dist-info}/LICENSE +0 -0
  323. {xcoll-0.4.0.dist-info → xcoll-0.5.1.dist-info}/NOTICE +0 -0
  324. {xcoll-0.4.0.dist-info → xcoll-0.5.1.dist-info}/WHEEL +0 -0
@@ -0,0 +1,560 @@
1
+ /*
2
+ tests/test_pytypes.cpp -- Python type casters
3
+
4
+ Copyright (c) 2017 Wenzel Jakob <wenzel.jakob@epfl.ch>
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
+
10
+ #include <utility>
11
+
12
+ #include "pybind11_tests.h"
13
+
14
+
15
+ TEST_SUBMODULE(pytypes, m) {
16
+ // test_int
17
+ m.def("get_int", []{return py::int_(0);});
18
+ // test_iterator
19
+ m.def("get_iterator", []{return py::iterator();});
20
+ // test_iterable
21
+ m.def("get_iterable", []{return py::iterable();});
22
+ // test_list
23
+ m.def("list_no_args", []() { return py::list{}; });
24
+ m.def("list_ssize_t", []() { return py::list{(py::ssize_t) 0}; });
25
+ m.def("list_size_t", []() { return py::list{(py::size_t) 0}; });
26
+ m.def("list_insert_ssize_t", [](py::list *l) { return l->insert((py::ssize_t) 1, 83); });
27
+ m.def("list_insert_size_t", [](py::list *l) { return l->insert((py::size_t) 3, 57); });
28
+ m.def("get_list", []() {
29
+ py::list list;
30
+ list.append("value");
31
+ py::print("Entry at position 0:", list[0]);
32
+ list[0] = py::str("overwritten");
33
+ list.insert(0, "inserted-0");
34
+ list.insert(2, "inserted-2");
35
+ return list;
36
+ });
37
+ m.def("print_list", [](const py::list &list) {
38
+ int index = 0;
39
+ for (auto item : list)
40
+ py::print("list item {}: {}"_s.format(index++, item));
41
+ });
42
+ // test_none
43
+ m.def("get_none", []{return py::none();});
44
+ m.def("print_none", [](const py::none &none) { py::print("none: {}"_s.format(none)); });
45
+
46
+ // test_set
47
+ m.def("get_set", []() {
48
+ py::set set;
49
+ set.add(py::str("key1"));
50
+ set.add("key2");
51
+ set.add(std::string("key3"));
52
+ return set;
53
+ });
54
+ m.def("print_set", [](const py::set &set) {
55
+ for (auto item : set)
56
+ py::print("key:", item);
57
+ });
58
+ m.def("set_contains",
59
+ [](const py::set &set, const py::object &key) { return set.contains(key); });
60
+ m.def("set_contains", [](const py::set &set, const char *key) { return set.contains(key); });
61
+
62
+ // test_dict
63
+ m.def("get_dict", []() { return py::dict("key"_a="value"); });
64
+ m.def("print_dict", [](const py::dict &dict) {
65
+ for (auto item : dict)
66
+ py::print("key: {}, value={}"_s.format(item.first, item.second));
67
+ });
68
+ m.def("dict_keyword_constructor", []() {
69
+ auto d1 = py::dict("x"_a=1, "y"_a=2);
70
+ auto d2 = py::dict("z"_a=3, **d1);
71
+ return d2;
72
+ });
73
+ m.def("dict_contains",
74
+ [](const py::dict &dict, py::object val) { return dict.contains(val); });
75
+ m.def("dict_contains",
76
+ [](const py::dict &dict, const char *val) { return dict.contains(val); });
77
+
78
+ // test_tuple
79
+ m.def("tuple_no_args", []() { return py::tuple{}; });
80
+ m.def("tuple_ssize_t", []() { return py::tuple{(py::ssize_t) 0}; });
81
+ m.def("tuple_size_t", []() { return py::tuple{(py::size_t) 0}; });
82
+ m.def("get_tuple", []() { return py::make_tuple(42, py::none(), "spam"); });
83
+
84
+ #if PY_VERSION_HEX >= 0x03030000
85
+ // test_simple_namespace
86
+ m.def("get_simple_namespace", []() {
87
+ auto ns = py::module_::import("types").attr("SimpleNamespace")("attr"_a=42, "x"_a="foo", "wrong"_a=1);
88
+ py::delattr(ns, "wrong");
89
+ py::setattr(ns, "right", py::int_(2));
90
+ return ns;
91
+ });
92
+ #endif
93
+
94
+ // test_str
95
+ m.def("str_from_char_ssize_t", []() { return py::str{"red", (py::ssize_t) 3}; });
96
+ m.def("str_from_char_size_t", []() { return py::str{"blue", (py::size_t) 4}; });
97
+ m.def("str_from_string", []() { return py::str(std::string("baz")); });
98
+ m.def("str_from_bytes", []() { return py::str(py::bytes("boo", 3)); });
99
+ m.def("str_from_object", [](const py::object& obj) { return py::str(obj); });
100
+ m.def("repr_from_object", [](const py::object& obj) { return py::repr(obj); });
101
+ m.def("str_from_handle", [](py::handle h) { return py::str(h); });
102
+ m.def("str_from_string_from_str", [](const py::str& obj) {
103
+ return py::str(static_cast<std::string>(obj));
104
+ });
105
+
106
+ m.def("str_format", []() {
107
+ auto s1 = "{} + {} = {}"_s.format(1, 2, 3);
108
+ auto s2 = "{a} + {b} = {c}"_s.format("a"_a=1, "b"_a=2, "c"_a=3);
109
+ return py::make_tuple(s1, s2);
110
+ });
111
+
112
+ // test_bytes
113
+ m.def("bytes_from_char_ssize_t", []() { return py::bytes{"green", (py::ssize_t) 5}; });
114
+ m.def("bytes_from_char_size_t", []() { return py::bytes{"purple", (py::size_t) 6}; });
115
+ m.def("bytes_from_string", []() { return py::bytes(std::string("foo")); });
116
+ m.def("bytes_from_str", []() { return py::bytes(py::str("bar", 3)); });
117
+
118
+ // test bytearray
119
+ m.def("bytearray_from_char_ssize_t", []() { return py::bytearray{"$%", (py::ssize_t) 2}; });
120
+ m.def("bytearray_from_char_size_t", []() { return py::bytearray{"@$!", (py::size_t) 3}; });
121
+ m.def("bytearray_from_string", []() { return py::bytearray(std::string("foo")); });
122
+ m.def("bytearray_size", []() { return py::bytearray("foo").size(); });
123
+
124
+ // test_capsule
125
+ m.def("return_capsule_with_destructor", []() {
126
+ py::print("creating capsule");
127
+ return py::capsule([]() {
128
+ py::print("destructing capsule");
129
+ });
130
+ });
131
+
132
+ m.def("return_capsule_with_destructor_2", []() {
133
+ py::print("creating capsule");
134
+ return py::capsule((void *) 1234, [](void *ptr) {
135
+ py::print("destructing capsule: {}"_s.format((size_t) ptr));
136
+ });
137
+ });
138
+
139
+ m.def("return_capsule_with_name_and_destructor", []() {
140
+ auto capsule = py::capsule((void *) 12345, "pointer type description", [](PyObject *ptr) {
141
+ if (ptr) {
142
+ auto name = PyCapsule_GetName(ptr);
143
+ py::print("destructing capsule ({}, '{}')"_s.format(
144
+ (size_t) PyCapsule_GetPointer(ptr, name), name
145
+ ));
146
+ }
147
+ });
148
+
149
+ capsule.set_pointer((void *) 1234);
150
+
151
+ // Using get_pointer<T>()
152
+ void* contents1 = static_cast<void*>(capsule);
153
+ void* contents2 = capsule.get_pointer();
154
+ void* contents3 = capsule.get_pointer<void>();
155
+
156
+ auto result1 = reinterpret_cast<size_t>(contents1);
157
+ auto result2 = reinterpret_cast<size_t>(contents2);
158
+ auto result3 = reinterpret_cast<size_t>(contents3);
159
+
160
+ py::print("created capsule ({}, '{}')"_s.format(result1 & result2 & result3, capsule.name()));
161
+ return capsule;
162
+ });
163
+
164
+ // test_accessors
165
+ m.def("accessor_api", [](const py::object &o) {
166
+ auto d = py::dict();
167
+
168
+ d["basic_attr"] = o.attr("basic_attr");
169
+
170
+ auto l = py::list();
171
+ for (auto item : o.attr("begin_end")) {
172
+ l.append(item);
173
+ }
174
+ d["begin_end"] = l;
175
+
176
+ d["operator[object]"] = o.attr("d")["operator[object]"_s];
177
+ d["operator[char *]"] = o.attr("d")["operator[char *]"];
178
+
179
+ d["attr(object)"] = o.attr("sub").attr("attr_obj");
180
+ d["attr(char *)"] = o.attr("sub").attr("attr_char");
181
+ try {
182
+ o.attr("sub").attr("missing").ptr();
183
+ } catch (const py::error_already_set &) {
184
+ d["missing_attr_ptr"] = "raised"_s;
185
+ }
186
+ try {
187
+ o.attr("missing").attr("doesn't matter");
188
+ } catch (const py::error_already_set &) {
189
+ d["missing_attr_chain"] = "raised"_s;
190
+ }
191
+
192
+ d["is_none"] = o.attr("basic_attr").is_none();
193
+
194
+ d["operator()"] = o.attr("func")(1);
195
+ d["operator*"] = o.attr("func")(*o.attr("begin_end"));
196
+
197
+ // Test implicit conversion
198
+ py::list implicit_list = o.attr("begin_end");
199
+ d["implicit_list"] = implicit_list;
200
+ py::dict implicit_dict = o.attr("__dict__");
201
+ d["implicit_dict"] = implicit_dict;
202
+
203
+ return d;
204
+ });
205
+
206
+ m.def("tuple_accessor", [](const py::tuple &existing_t) {
207
+ try {
208
+ existing_t[0] = 1;
209
+ } catch (const py::error_already_set &) {
210
+ // --> Python system error
211
+ // Only new tuples (refcount == 1) are mutable
212
+ auto new_t = py::tuple(3);
213
+ for (size_t i = 0; i < new_t.size(); ++i) {
214
+ new_t[i] = i;
215
+ }
216
+ return new_t;
217
+ }
218
+ return py::tuple();
219
+ });
220
+
221
+ m.def("accessor_assignment", []() {
222
+ auto l = py::list(1);
223
+ l[0] = 0;
224
+
225
+ auto d = py::dict();
226
+ d["get"] = l[0];
227
+ auto var = l[0];
228
+ d["deferred_get"] = var;
229
+ l[0] = 1;
230
+ d["set"] = l[0];
231
+ var = 99; // this assignment should not overwrite l[0]
232
+ d["deferred_set"] = l[0];
233
+ d["var"] = var;
234
+
235
+ return d;
236
+ });
237
+
238
+ // test_constructors
239
+ m.def("default_constructors", []() {
240
+ return py::dict(
241
+ "bytes"_a=py::bytes(),
242
+ "bytearray"_a=py::bytearray(),
243
+ "str"_a=py::str(),
244
+ "bool"_a=py::bool_(),
245
+ "int"_a=py::int_(),
246
+ "float"_a=py::float_(),
247
+ "tuple"_a=py::tuple(),
248
+ "list"_a=py::list(),
249
+ "dict"_a=py::dict(),
250
+ "set"_a=py::set()
251
+ );
252
+ });
253
+
254
+ m.def("converting_constructors", [](const py::dict &d) {
255
+ return py::dict(
256
+ "bytes"_a=py::bytes(d["bytes"]),
257
+ "bytearray"_a=py::bytearray(d["bytearray"]),
258
+ "str"_a=py::str(d["str"]),
259
+ "bool"_a=py::bool_(d["bool"]),
260
+ "int"_a=py::int_(d["int"]),
261
+ "float"_a=py::float_(d["float"]),
262
+ "tuple"_a=py::tuple(d["tuple"]),
263
+ "list"_a=py::list(d["list"]),
264
+ "dict"_a=py::dict(d["dict"]),
265
+ "set"_a=py::set(d["set"]),
266
+ "memoryview"_a=py::memoryview(d["memoryview"])
267
+ );
268
+ });
269
+
270
+ m.def("cast_functions", [](const py::dict &d) {
271
+ // When converting between Python types, obj.cast<T>() should be the same as T(obj)
272
+ return py::dict(
273
+ "bytes"_a=d["bytes"].cast<py::bytes>(),
274
+ "bytearray"_a=d["bytearray"].cast<py::bytearray>(),
275
+ "str"_a=d["str"].cast<py::str>(),
276
+ "bool"_a=d["bool"].cast<py::bool_>(),
277
+ "int"_a=d["int"].cast<py::int_>(),
278
+ "float"_a=d["float"].cast<py::float_>(),
279
+ "tuple"_a=d["tuple"].cast<py::tuple>(),
280
+ "list"_a=d["list"].cast<py::list>(),
281
+ "dict"_a=d["dict"].cast<py::dict>(),
282
+ "set"_a=d["set"].cast<py::set>(),
283
+ "memoryview"_a=d["memoryview"].cast<py::memoryview>()
284
+ );
285
+ });
286
+
287
+ m.def("convert_to_pybind11_str", [](const py::object &o) { return py::str(o); });
288
+
289
+ m.def("nonconverting_constructor",
290
+ [](const std::string &type, py::object value, bool move) -> py::object {
291
+ if (type == "bytes") {
292
+ return move ? py::bytes(std::move(value)) : py::bytes(value);
293
+ }
294
+ if (type == "none") {
295
+ return move ? py::none(std::move(value)) : py::none(value);
296
+ }
297
+ if (type == "ellipsis") {
298
+ return move ? py::ellipsis(std::move(value)) : py::ellipsis(value);
299
+ }
300
+ if (type == "type") {
301
+ return move ? py::type(std::move(value)) : py::type(value);
302
+ }
303
+ throw std::runtime_error("Invalid type");
304
+ });
305
+
306
+ m.def("get_implicit_casting", []() {
307
+ py::dict d;
308
+ d["char*_i1"] = "abc";
309
+ const char *c2 = "abc";
310
+ d["char*_i2"] = c2;
311
+ d["char*_e"] = py::cast(c2);
312
+ d["char*_p"] = py::str(c2);
313
+
314
+ d["int_i1"] = 42;
315
+ int i = 42;
316
+ d["int_i2"] = i;
317
+ i++;
318
+ d["int_e"] = py::cast(i);
319
+ i++;
320
+ d["int_p"] = py::int_(i);
321
+
322
+ d["str_i1"] = std::string("str");
323
+ std::string s2("str1");
324
+ d["str_i2"] = s2;
325
+ s2[3] = '2';
326
+ d["str_e"] = py::cast(s2);
327
+ s2[3] = '3';
328
+ d["str_p"] = py::str(s2);
329
+
330
+ py::list l(2);
331
+ l[0] = 3;
332
+ l[1] = py::cast(6);
333
+ l.append(9);
334
+ l.append(py::cast(12));
335
+ l.append(py::int_(15));
336
+
337
+ return py::dict(
338
+ "d"_a=d,
339
+ "l"_a=l
340
+ );
341
+ });
342
+
343
+ // test_print
344
+ m.def("print_function", []() {
345
+ py::print("Hello, World!");
346
+ py::print(1, 2.0, "three", true, std::string("-- multiple args"));
347
+ auto args = py::make_tuple("and", "a", "custom", "separator");
348
+ py::print("*args", *args, "sep"_a="-");
349
+ py::print("no new line here", "end"_a=" -- ");
350
+ py::print("next print");
351
+
352
+ auto py_stderr = py::module_::import("sys").attr("stderr");
353
+ py::print("this goes to stderr", "file"_a=py_stderr);
354
+
355
+ py::print("flush", "flush"_a=true);
356
+
357
+ py::print("{a} + {b} = {c}"_s.format("a"_a="py::print", "b"_a="str.format", "c"_a="this"));
358
+ });
359
+
360
+ m.def("print_failure", []() { py::print(42, UnregisteredType()); });
361
+
362
+ m.def("hash_function", [](py::object obj) { return py::hash(std::move(obj)); });
363
+
364
+ m.def("test_number_protocol", [](const py::object &a, const py::object &b) {
365
+ py::list l;
366
+ l.append(a.equal(b));
367
+ l.append(a.not_equal(b));
368
+ l.append(a < b);
369
+ l.append(a <= b);
370
+ l.append(a > b);
371
+ l.append(a >= b);
372
+ l.append(a + b);
373
+ l.append(a - b);
374
+ l.append(a * b);
375
+ l.append(a / b);
376
+ l.append(a | b);
377
+ l.append(a & b);
378
+ l.append(a ^ b);
379
+ l.append(a >> b);
380
+ l.append(a << b);
381
+ return l;
382
+ });
383
+
384
+ m.def("test_list_slicing", [](const py::list &a) { return a[py::slice(0, -1, 2)]; });
385
+
386
+ // See #2361
387
+ m.def("issue2361_str_implicit_copy_none", []() {
388
+ py::str is_this_none = py::none();
389
+ return is_this_none;
390
+ });
391
+ m.def("issue2361_dict_implicit_copy_none", []() {
392
+ py::dict is_this_none = py::none();
393
+ return is_this_none;
394
+ });
395
+
396
+ m.def("test_memoryview_object", [](const py::buffer &b) { return py::memoryview(b); });
397
+
398
+ m.def("test_memoryview_buffer_info",
399
+ [](const py::buffer &b) { return py::memoryview(b.request()); });
400
+
401
+ m.def("test_memoryview_from_buffer", [](bool is_unsigned) {
402
+ static const int16_t si16[] = { 3, 1, 4, 1, 5 };
403
+ static const uint16_t ui16[] = { 2, 7, 1, 8 };
404
+ if (is_unsigned)
405
+ return py::memoryview::from_buffer(
406
+ ui16, { 4 }, { sizeof(uint16_t) });
407
+ return py::memoryview::from_buffer(si16, {5}, {sizeof(int16_t)});
408
+ });
409
+
410
+ m.def("test_memoryview_from_buffer_nativeformat", []() {
411
+ static const char* format = "@i";
412
+ static const int32_t arr[] = { 4, 7, 5 };
413
+ return py::memoryview::from_buffer(
414
+ arr, sizeof(int32_t), format, { 3 }, { sizeof(int32_t) });
415
+ });
416
+
417
+ m.def("test_memoryview_from_buffer_empty_shape", []() {
418
+ static const char* buf = "";
419
+ return py::memoryview::from_buffer(buf, 1, "B", { }, { });
420
+ });
421
+
422
+ m.def("test_memoryview_from_buffer_invalid_strides", []() {
423
+ static const char* buf = "\x02\x03\x04";
424
+ return py::memoryview::from_buffer(buf, 1, "B", { 3 }, { });
425
+ });
426
+
427
+ m.def("test_memoryview_from_buffer_nullptr", []() {
428
+ return py::memoryview::from_buffer(
429
+ static_cast<void*>(nullptr), 1, "B", { }, { });
430
+ });
431
+
432
+ #if PY_MAJOR_VERSION >= 3
433
+ m.def("test_memoryview_from_memory", []() {
434
+ const char* buf = "\xff\xe1\xab\x37";
435
+ return py::memoryview::from_memory(
436
+ buf, static_cast<py::ssize_t>(strlen(buf)));
437
+ });
438
+ #endif
439
+
440
+ // test_builtin_functions
441
+ m.def("get_len", [](py::handle h) { return py::len(h); });
442
+
443
+ #ifdef PYBIND11_STR_LEGACY_PERMISSIVE
444
+ m.attr("PYBIND11_STR_LEGACY_PERMISSIVE") = true;
445
+ #endif
446
+
447
+ m.def("isinstance_pybind11_bytes",
448
+ [](py::object o) { return py::isinstance<py::bytes>(std::move(o)); });
449
+ m.def("isinstance_pybind11_str",
450
+ [](py::object o) { return py::isinstance<py::str>(std::move(o)); });
451
+
452
+ m.def("pass_to_pybind11_bytes", [](py::bytes b) { return py::len(std::move(b)); });
453
+ m.def("pass_to_pybind11_str", [](py::str s) { return py::len(std::move(s)); });
454
+ m.def("pass_to_std_string", [](const std::string &s) { return s.size(); });
455
+
456
+ // test_weakref
457
+ m.def("weakref_from_handle",
458
+ [](py::handle h) { return py::weakref(h); });
459
+ m.def("weakref_from_handle_and_function",
460
+ [](py::handle h, py::function f) { return py::weakref(h, std::move(f)); });
461
+ m.def("weakref_from_object", [](const py::object &o) { return py::weakref(o); });
462
+ m.def("weakref_from_object_and_function",
463
+ [](py::object o, py::function f) { return py::weakref(std::move(o), std::move(f)); });
464
+
465
+ // See PR #3263 for background (https://github.com/pybind/pybind11/pull/3263):
466
+ // pytypes.h could be changed to enforce the "most correct" user code below, by removing
467
+ // `const` from iterator `reference` using type aliases, but that will break existing
468
+ // user code.
469
+ #if (defined(__APPLE__) && defined(__clang__)) || defined(PYPY_VERSION)
470
+ // This is "most correct" and enforced on these platforms.
471
+ # define PYBIND11_AUTO_IT auto it
472
+ #else
473
+ // This works on many platforms and is (unfortunately) reflective of existing user code.
474
+ // NOLINTNEXTLINE(bugprone-macro-parentheses)
475
+ # define PYBIND11_AUTO_IT auto &it
476
+ #endif
477
+
478
+ m.def("tuple_iterator", []() {
479
+ auto tup = py::make_tuple(5, 7);
480
+ int tup_sum = 0;
481
+ for (PYBIND11_AUTO_IT : tup) {
482
+ tup_sum += it.cast<int>();
483
+ }
484
+ return tup_sum;
485
+ });
486
+
487
+ m.def("dict_iterator", []() {
488
+ py::dict dct;
489
+ dct[py::int_(3)] = 5;
490
+ dct[py::int_(7)] = 11;
491
+ int kv_sum = 0;
492
+ for (PYBIND11_AUTO_IT : dct) {
493
+ kv_sum += it.first.cast<int>() * 100 + it.second.cast<int>();
494
+ }
495
+ return kv_sum;
496
+ });
497
+
498
+ m.def("passed_iterator", [](const py::iterator &py_it) {
499
+ int elem_sum = 0;
500
+ for (PYBIND11_AUTO_IT : py_it) {
501
+ elem_sum += it.cast<int>();
502
+ }
503
+ return elem_sum;
504
+ });
505
+
506
+ #undef PYBIND11_AUTO_IT
507
+
508
+ // Tests below this line are for pybind11 IMPLEMENTATION DETAILS:
509
+
510
+ m.def("sequence_item_get_ssize_t", [](const py::object &o) {
511
+ return py::detail::accessor_policies::sequence_item::get(o, (py::ssize_t) 1);
512
+ });
513
+ m.def("sequence_item_set_ssize_t", [](const py::object &o) {
514
+ auto s = py::str{"peppa", 5};
515
+ py::detail::accessor_policies::sequence_item::set(o, (py::ssize_t) 1, s);
516
+ });
517
+ m.def("sequence_item_get_size_t", [](const py::object &o) {
518
+ return py::detail::accessor_policies::sequence_item::get(o, (py::size_t) 2);
519
+ });
520
+ m.def("sequence_item_set_size_t", [](const py::object &o) {
521
+ auto s = py::str{"george", 6};
522
+ py::detail::accessor_policies::sequence_item::set(o, (py::size_t) 2, s);
523
+ });
524
+ m.def("list_item_get_ssize_t", [](const py::object &o) {
525
+ return py::detail::accessor_policies::list_item::get(o, (py::ssize_t) 3);
526
+ });
527
+ m.def("list_item_set_ssize_t", [](const py::object &o) {
528
+ auto s = py::str{"rebecca", 7};
529
+ py::detail::accessor_policies::list_item::set(o, (py::ssize_t) 3, s);
530
+ });
531
+ m.def("list_item_get_size_t", [](const py::object &o) {
532
+ return py::detail::accessor_policies::list_item::get(o, (py::size_t) 4);
533
+ });
534
+ m.def("list_item_set_size_t", [](const py::object &o) {
535
+ auto s = py::str{"richard", 7};
536
+ py::detail::accessor_policies::list_item::set(o, (py::size_t) 4, s);
537
+ });
538
+ m.def("tuple_item_get_ssize_t", [](const py::object &o) {
539
+ return py::detail::accessor_policies::tuple_item::get(o, (py::ssize_t) 5);
540
+ });
541
+ m.def("tuple_item_set_ssize_t", []() {
542
+ auto s0 = py::str{"emely", 5};
543
+ auto s1 = py::str{"edmond", 6};
544
+ auto o = py::tuple{2};
545
+ py::detail::accessor_policies::tuple_item::set(o, (py::ssize_t) 0, s0);
546
+ py::detail::accessor_policies::tuple_item::set(o, (py::ssize_t) 1, s1);
547
+ return o;
548
+ });
549
+ m.def("tuple_item_get_size_t", [](const py::object &o) {
550
+ return py::detail::accessor_policies::tuple_item::get(o, (py::size_t) 6);
551
+ });
552
+ m.def("tuple_item_set_size_t", []() {
553
+ auto s0 = py::str{"candy", 5};
554
+ auto s1 = py::str{"cat", 3};
555
+ auto o = py::tuple{2};
556
+ py::detail::accessor_policies::tuple_item::set(o, (py::size_t) 1, s1);
557
+ py::detail::accessor_policies::tuple_item::set(o, (py::size_t) 0, s0);
558
+ return o;
559
+ });
560
+ }