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,472 @@
1
+ /*
2
+ tests/test_numpy_array.cpp -- test core array functionality
3
+
4
+ Copyright (c) 2016 Ivan Smirnov <i.s.smirnov@gmail.com>
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 "pybind11_tests.h"
11
+
12
+ #include <pybind11/numpy.h>
13
+ #include <pybind11/stl.h>
14
+
15
+ #include <cstdint>
16
+ #include <utility>
17
+
18
+ // Size / dtype checks.
19
+ struct DtypeCheck {
20
+ py::dtype numpy{};
21
+ py::dtype pybind11{};
22
+ };
23
+
24
+ template <typename T>
25
+ DtypeCheck get_dtype_check(const char* name) {
26
+ py::module_ np = py::module_::import("numpy");
27
+ DtypeCheck check{};
28
+ check.numpy = np.attr("dtype")(np.attr(name));
29
+ check.pybind11 = py::dtype::of<T>();
30
+ return check;
31
+ }
32
+
33
+ std::vector<DtypeCheck> get_concrete_dtype_checks() {
34
+ return {
35
+ // Normalization
36
+ get_dtype_check<std::int8_t>("int8"),
37
+ get_dtype_check<std::uint8_t>("uint8"),
38
+ get_dtype_check<std::int16_t>("int16"),
39
+ get_dtype_check<std::uint16_t>("uint16"),
40
+ get_dtype_check<std::int32_t>("int32"),
41
+ get_dtype_check<std::uint32_t>("uint32"),
42
+ get_dtype_check<std::int64_t>("int64"),
43
+ get_dtype_check<std::uint64_t>("uint64")
44
+ };
45
+ }
46
+
47
+ struct DtypeSizeCheck {
48
+ std::string name{};
49
+ int size_cpp{};
50
+ int size_numpy{};
51
+ // For debugging.
52
+ py::dtype dtype{};
53
+ };
54
+
55
+ template <typename T>
56
+ DtypeSizeCheck get_dtype_size_check() {
57
+ DtypeSizeCheck check{};
58
+ check.name = py::type_id<T>();
59
+ check.size_cpp = sizeof(T);
60
+ check.dtype = py::dtype::of<T>();
61
+ check.size_numpy = check.dtype.attr("itemsize").template cast<int>();
62
+ return check;
63
+ }
64
+
65
+ std::vector<DtypeSizeCheck> get_platform_dtype_size_checks() {
66
+ return {
67
+ get_dtype_size_check<short>(),
68
+ get_dtype_size_check<unsigned short>(),
69
+ get_dtype_size_check<int>(),
70
+ get_dtype_size_check<unsigned int>(),
71
+ get_dtype_size_check<long>(),
72
+ get_dtype_size_check<unsigned long>(),
73
+ get_dtype_size_check<long long>(),
74
+ get_dtype_size_check<unsigned long long>(),
75
+ };
76
+ }
77
+
78
+ // Arrays.
79
+ using arr = py::array;
80
+ using arr_t = py::array_t<uint16_t, 0>;
81
+ static_assert(std::is_same<arr_t::value_type, uint16_t>::value, "");
82
+
83
+ template<typename... Ix> arr data(const arr& a, Ix... index) {
84
+ return arr(a.nbytes() - a.offset_at(index...), (const uint8_t *) a.data(index...));
85
+ }
86
+
87
+ template<typename... Ix> arr data_t(const arr_t& a, Ix... index) {
88
+ return arr(a.size() - a.index_at(index...), a.data(index...));
89
+ }
90
+
91
+ template<typename... Ix> arr& mutate_data(arr& a, Ix... index) {
92
+ auto ptr = (uint8_t *) a.mutable_data(index...);
93
+ for (py::ssize_t i = 0; i < a.nbytes() - a.offset_at(index...); i++)
94
+ ptr[i] = (uint8_t) (ptr[i] * 2);
95
+ return a;
96
+ }
97
+
98
+ template<typename... Ix> arr_t& mutate_data_t(arr_t& a, Ix... index) {
99
+ auto ptr = a.mutable_data(index...);
100
+ for (py::ssize_t i = 0; i < a.size() - a.index_at(index...); i++)
101
+ ptr[i]++;
102
+ return a;
103
+ }
104
+
105
+ template<typename... Ix> py::ssize_t index_at(const arr& a, Ix... idx) { return a.index_at(idx...); }
106
+ template<typename... Ix> py::ssize_t index_at_t(const arr_t& a, Ix... idx) { return a.index_at(idx...); }
107
+ template<typename... Ix> py::ssize_t offset_at(const arr& a, Ix... idx) { return a.offset_at(idx...); }
108
+ template<typename... Ix> py::ssize_t offset_at_t(const arr_t& a, Ix... idx) { return a.offset_at(idx...); }
109
+ template<typename... Ix> py::ssize_t at_t(const arr_t& a, Ix... idx) { return a.at(idx...); }
110
+ template<typename... Ix> arr_t& mutate_at_t(arr_t& a, Ix... idx) { a.mutable_at(idx...)++; return a; }
111
+
112
+ #define def_index_fn(name, type) \
113
+ sm.def(#name, [](type a) { return name(a); }); \
114
+ sm.def(#name, [](type a, int i) { return name(a, i); }); \
115
+ sm.def(#name, [](type a, int i, int j) { return name(a, i, j); }); \
116
+ sm.def(#name, [](type a, int i, int j, int k) { return name(a, i, j, k); });
117
+
118
+ template <typename T, typename T2> py::handle auxiliaries(T &&r, T2 &&r2) {
119
+ if (r.ndim() != 2) throw std::domain_error("error: ndim != 2");
120
+ py::list l;
121
+ l.append(*r.data(0, 0));
122
+ l.append(*r2.mutable_data(0, 0));
123
+ l.append(r.data(0, 1) == r2.mutable_data(0, 1));
124
+ l.append(r.ndim());
125
+ l.append(r.itemsize());
126
+ l.append(r.shape(0));
127
+ l.append(r.shape(1));
128
+ l.append(r.size());
129
+ l.append(r.nbytes());
130
+ return l.release();
131
+ }
132
+
133
+ // note: declaration at local scope would create a dangling reference!
134
+ static int data_i = 42;
135
+
136
+ TEST_SUBMODULE(numpy_array, sm) {
137
+ try { py::module_::import("numpy"); }
138
+ catch (...) { return; }
139
+
140
+ // test_dtypes
141
+ py::class_<DtypeCheck>(sm, "DtypeCheck")
142
+ .def_readonly("numpy", &DtypeCheck::numpy)
143
+ .def_readonly("pybind11", &DtypeCheck::pybind11)
144
+ .def("__repr__", [](const DtypeCheck& self) {
145
+ return py::str("<DtypeCheck numpy={} pybind11={}>").format(
146
+ self.numpy, self.pybind11);
147
+ });
148
+ sm.def("get_concrete_dtype_checks", &get_concrete_dtype_checks);
149
+
150
+ py::class_<DtypeSizeCheck>(sm, "DtypeSizeCheck")
151
+ .def_readonly("name", &DtypeSizeCheck::name)
152
+ .def_readonly("size_cpp", &DtypeSizeCheck::size_cpp)
153
+ .def_readonly("size_numpy", &DtypeSizeCheck::size_numpy)
154
+ .def("__repr__", [](const DtypeSizeCheck& self) {
155
+ return py::str("<DtypeSizeCheck name='{}' size_cpp={} size_numpy={} dtype={}>").format(
156
+ self.name, self.size_cpp, self.size_numpy, self.dtype);
157
+ });
158
+ sm.def("get_platform_dtype_size_checks", &get_platform_dtype_size_checks);
159
+
160
+ // test_array_attributes
161
+ sm.def("ndim", [](const arr& a) { return a.ndim(); });
162
+ sm.def("shape", [](const arr& a) { return arr(a.ndim(), a.shape()); });
163
+ sm.def("shape", [](const arr& a, py::ssize_t dim) { return a.shape(dim); });
164
+ sm.def("strides", [](const arr& a) { return arr(a.ndim(), a.strides()); });
165
+ sm.def("strides", [](const arr& a, py::ssize_t dim) { return a.strides(dim); });
166
+ sm.def("writeable", [](const arr& a) { return a.writeable(); });
167
+ sm.def("size", [](const arr& a) { return a.size(); });
168
+ sm.def("itemsize", [](const arr& a) { return a.itemsize(); });
169
+ sm.def("nbytes", [](const arr& a) { return a.nbytes(); });
170
+ sm.def("owndata", [](const arr& a) { return a.owndata(); });
171
+
172
+ // test_index_offset
173
+ def_index_fn(index_at, const arr&);
174
+ def_index_fn(index_at_t, const arr_t&);
175
+ def_index_fn(offset_at, const arr&);
176
+ def_index_fn(offset_at_t, const arr_t&);
177
+ // test_data
178
+ def_index_fn(data, const arr&);
179
+ def_index_fn(data_t, const arr_t&);
180
+ // test_mutate_data, test_mutate_readonly
181
+ def_index_fn(mutate_data, arr&);
182
+ def_index_fn(mutate_data_t, arr_t&);
183
+ def_index_fn(at_t, const arr_t&);
184
+ def_index_fn(mutate_at_t, arr_t&);
185
+
186
+ // test_make_c_f_array
187
+ sm.def("make_f_array", [] { return py::array_t<float>({ 2, 2 }, { 4, 8 }); });
188
+ sm.def("make_c_array", [] { return py::array_t<float>({ 2, 2 }, { 8, 4 }); });
189
+
190
+ // test_empty_shaped_array
191
+ sm.def("make_empty_shaped_array", [] { return py::array(py::dtype("f"), {}, {}); });
192
+ // test numpy scalars (empty shape, ndim==0)
193
+ sm.def("scalar_int", []() { return py::array(py::dtype("i"), {}, {}, &data_i); });
194
+
195
+ // test_wrap
196
+ sm.def("wrap", [](const py::array &a) {
197
+ return py::array(
198
+ a.dtype(),
199
+ {a.shape(), a.shape() + a.ndim()},
200
+ {a.strides(), a.strides() + a.ndim()},
201
+ a.data(),
202
+ a
203
+ );
204
+ });
205
+
206
+ // test_numpy_view
207
+ struct ArrayClass {
208
+ int data[2] = { 1, 2 };
209
+ ArrayClass() { py::print("ArrayClass()"); }
210
+ ~ArrayClass() { py::print("~ArrayClass()"); }
211
+ };
212
+ py::class_<ArrayClass>(sm, "ArrayClass")
213
+ .def(py::init<>())
214
+ .def("numpy_view", [](py::object &obj) {
215
+ py::print("ArrayClass::numpy_view()");
216
+ auto &a = obj.cast<ArrayClass&>();
217
+ return py::array_t<int>({2}, {4}, a.data, obj);
218
+ }
219
+ );
220
+
221
+ // test_cast_numpy_int64_to_uint64
222
+ sm.def("function_taking_uint64", [](uint64_t) { });
223
+
224
+ // test_isinstance
225
+ sm.def("isinstance_untyped", [](py::object yes, py::object no) {
226
+ return py::isinstance<py::array>(std::move(yes))
227
+ && !py::isinstance<py::array>(std::move(no));
228
+ });
229
+ sm.def("isinstance_typed", [](const py::object &o) {
230
+ return py::isinstance<py::array_t<double>>(o) && !py::isinstance<py::array_t<int>>(o);
231
+ });
232
+
233
+ // test_constructors
234
+ sm.def("default_constructors", []() {
235
+ return py::dict(
236
+ "array"_a=py::array(),
237
+ "array_t<int32>"_a=py::array_t<std::int32_t>(),
238
+ "array_t<double>"_a=py::array_t<double>()
239
+ );
240
+ });
241
+ sm.def("converting_constructors", [](const py::object &o) {
242
+ return py::dict(
243
+ "array"_a=py::array(o),
244
+ "array_t<int32>"_a=py::array_t<std::int32_t>(o),
245
+ "array_t<double>"_a=py::array_t<double>(o)
246
+ );
247
+ });
248
+
249
+ // test_overload_resolution
250
+ sm.def("overloaded", [](const py::array_t<double> &) { return "double"; });
251
+ sm.def("overloaded", [](const py::array_t<float> &) { return "float"; });
252
+ sm.def("overloaded", [](const py::array_t<int> &) { return "int"; });
253
+ sm.def("overloaded", [](const py::array_t<unsigned short> &) { return "unsigned short"; });
254
+ sm.def("overloaded", [](const py::array_t<long long> &) { return "long long"; });
255
+ sm.def("overloaded",
256
+ [](const py::array_t<std::complex<double>> &) { return "double complex"; });
257
+ sm.def("overloaded", [](const py::array_t<std::complex<float>> &) { return "float complex"; });
258
+
259
+ sm.def("overloaded2",
260
+ [](const py::array_t<std::complex<double>> &) { return "double complex"; });
261
+ sm.def("overloaded2", [](const py::array_t<double> &) { return "double"; });
262
+ sm.def("overloaded2",
263
+ [](const py::array_t<std::complex<float>> &) { return "float complex"; });
264
+ sm.def("overloaded2", [](const py::array_t<float> &) { return "float"; });
265
+
266
+ // [workaround(intel)] ICC 20/21 breaks with py::arg().stuff, using py::arg{}.stuff works.
267
+
268
+ // Only accept the exact types:
269
+ sm.def(
270
+ "overloaded3", [](const py::array_t<int> &) { return "int"; }, py::arg{}.noconvert());
271
+ sm.def(
272
+ "overloaded3",
273
+ [](const py::array_t<double> &) { return "double"; },
274
+ py::arg{}.noconvert());
275
+
276
+ // Make sure we don't do unsafe coercion (e.g. float to int) when not using forcecast, but
277
+ // rather that float gets converted via the safe (conversion to double) overload:
278
+ sm.def("overloaded4", [](const py::array_t<long long, 0> &) { return "long long"; });
279
+ sm.def("overloaded4", [](const py::array_t<double, 0> &) { return "double"; });
280
+
281
+ // But we do allow conversion to int if forcecast is enabled (but only if no overload matches
282
+ // without conversion)
283
+ sm.def("overloaded5", [](const py::array_t<unsigned int> &) { return "unsigned int"; });
284
+ sm.def("overloaded5", [](const py::array_t<double> &) { return "double"; });
285
+
286
+ // test_greedy_string_overload
287
+ // Issue 685: ndarray shouldn't go to std::string overload
288
+ sm.def("issue685", [](const std::string &) { return "string"; });
289
+ sm.def("issue685", [](const py::array &) { return "array"; });
290
+ sm.def("issue685", [](const py::object &) { return "other"; });
291
+
292
+ // test_array_unchecked_fixed_dims
293
+ sm.def("proxy_add2", [](py::array_t<double> a, double v) {
294
+ auto r = a.mutable_unchecked<2>();
295
+ for (py::ssize_t i = 0; i < r.shape(0); i++)
296
+ for (py::ssize_t j = 0; j < r.shape(1); j++)
297
+ r(i, j) += v;
298
+ }, py::arg{}.noconvert(), py::arg());
299
+
300
+ sm.def("proxy_init3", [](double start) {
301
+ py::array_t<double, py::array::c_style> a({ 3, 3, 3 });
302
+ auto r = a.mutable_unchecked<3>();
303
+ for (py::ssize_t i = 0; i < r.shape(0); i++)
304
+ for (py::ssize_t j = 0; j < r.shape(1); j++)
305
+ for (py::ssize_t k = 0; k < r.shape(2); k++)
306
+ r(i, j, k) = start++;
307
+ return a;
308
+ });
309
+ sm.def("proxy_init3F", [](double start) {
310
+ py::array_t<double, py::array::f_style> a({ 3, 3, 3 });
311
+ auto r = a.mutable_unchecked<3>();
312
+ for (py::ssize_t k = 0; k < r.shape(2); k++)
313
+ for (py::ssize_t j = 0; j < r.shape(1); j++)
314
+ for (py::ssize_t i = 0; i < r.shape(0); i++)
315
+ r(i, j, k) = start++;
316
+ return a;
317
+ });
318
+ sm.def("proxy_squared_L2_norm", [](const py::array_t<double> &a) {
319
+ auto r = a.unchecked<1>();
320
+ double sumsq = 0;
321
+ for (py::ssize_t i = 0; i < r.shape(0); i++)
322
+ sumsq += r[i] * r(i); // Either notation works for a 1D array
323
+ return sumsq;
324
+ });
325
+
326
+ sm.def("proxy_auxiliaries2", [](py::array_t<double> a) {
327
+ auto r = a.unchecked<2>();
328
+ auto r2 = a.mutable_unchecked<2>();
329
+ return auxiliaries(r, r2);
330
+ });
331
+
332
+ sm.def("proxy_auxiliaries1_const_ref", [](py::array_t<double> a) {
333
+ const auto &r = a.unchecked<1>();
334
+ const auto &r2 = a.mutable_unchecked<1>();
335
+ return r(0) == r2(0) && r[0] == r2[0];
336
+ });
337
+
338
+ sm.def("proxy_auxiliaries2_const_ref", [](py::array_t<double> a) {
339
+ const auto &r = a.unchecked<2>();
340
+ const auto &r2 = a.mutable_unchecked<2>();
341
+ return r(0, 0) == r2(0, 0);
342
+ });
343
+
344
+ // test_array_unchecked_dyn_dims
345
+ // Same as the above, but without a compile-time dimensions specification:
346
+ sm.def("proxy_add2_dyn", [](py::array_t<double> a, double v) {
347
+ auto r = a.mutable_unchecked();
348
+ if (r.ndim() != 2) throw std::domain_error("error: ndim != 2");
349
+ for (py::ssize_t i = 0; i < r.shape(0); i++)
350
+ for (py::ssize_t j = 0; j < r.shape(1); j++)
351
+ r(i, j) += v;
352
+ }, py::arg{}.noconvert(), py::arg());
353
+ sm.def("proxy_init3_dyn", [](double start) {
354
+ py::array_t<double, py::array::c_style> a({ 3, 3, 3 });
355
+ auto r = a.mutable_unchecked();
356
+ if (r.ndim() != 3) throw std::domain_error("error: ndim != 3");
357
+ for (py::ssize_t i = 0; i < r.shape(0); i++)
358
+ for (py::ssize_t j = 0; j < r.shape(1); j++)
359
+ for (py::ssize_t k = 0; k < r.shape(2); k++)
360
+ r(i, j, k) = start++;
361
+ return a;
362
+ });
363
+ sm.def("proxy_auxiliaries2_dyn", [](py::array_t<double> a) {
364
+ return auxiliaries(a.unchecked(), a.mutable_unchecked());
365
+ });
366
+
367
+ sm.def("array_auxiliaries2", [](py::array_t<double> a) {
368
+ return auxiliaries(a, a);
369
+ });
370
+
371
+ // test_array_failures
372
+ // Issue #785: Uninformative "Unknown internal error" exception when constructing array from empty object:
373
+ sm.def("array_fail_test", []() { return py::array(py::object()); });
374
+ sm.def("array_t_fail_test", []() { return py::array_t<double>(py::object()); });
375
+ // Make sure the error from numpy is being passed through:
376
+ sm.def("array_fail_test_negative_size", []() { int c = 0; return py::array(-1, &c); });
377
+
378
+ // test_initializer_list
379
+ // Issue (unnumbered; reported in #788): regression: initializer lists can be ambiguous
380
+ sm.def("array_initializer_list1", []() { return py::array_t<float>(1); }); // { 1 } also works, but clang warns about it
381
+ sm.def("array_initializer_list2", []() { return py::array_t<float>({ 1, 2 }); });
382
+ sm.def("array_initializer_list3", []() { return py::array_t<float>({ 1, 2, 3 }); });
383
+ sm.def("array_initializer_list4", []() { return py::array_t<float>({ 1, 2, 3, 4 }); });
384
+
385
+ // test_array_resize
386
+ // reshape array to 2D without changing size
387
+ sm.def("array_reshape2", [](py::array_t<double> a) {
388
+ const auto dim_sz = (py::ssize_t)std::sqrt(a.size());
389
+ if (dim_sz * dim_sz != a.size())
390
+ throw std::domain_error("array_reshape2: input array total size is not a squared integer");
391
+ a.resize({dim_sz, dim_sz});
392
+ });
393
+
394
+ // resize to 3D array with each dimension = N
395
+ sm.def("array_resize3", [](py::array_t<double> a, size_t N, bool refcheck) {
396
+ a.resize({N, N, N}, refcheck);
397
+ });
398
+
399
+ // test_array_create_and_resize
400
+ // return 2D array with Nrows = Ncols = N
401
+ sm.def("create_and_resize", [](size_t N) {
402
+ py::array_t<double> a;
403
+ a.resize({N, N});
404
+ std::fill(a.mutable_data(), a.mutable_data() + a.size(), 42.);
405
+ return a;
406
+ });
407
+
408
+ sm.def("array_view",
409
+ [](py::array_t<uint8_t> a, const std::string &dtype) { return a.view(dtype); });
410
+
411
+ sm.def("reshape_initializer_list", [](py::array_t<int> a, size_t N, size_t M, size_t O) {
412
+ return a.reshape({N, M, O});
413
+ });
414
+ sm.def("reshape_tuple", [](py::array_t<int> a, const std::vector<int> &new_shape) {
415
+ return a.reshape(new_shape);
416
+ });
417
+
418
+ sm.def("index_using_ellipsis",
419
+ [](const py::array &a) { return a[py::make_tuple(0, py::ellipsis(), 0)]; });
420
+
421
+ // test_argument_conversions
422
+ sm.def(
423
+ "accept_double", [](const py::array_t<double, 0> &) {}, py::arg("a"));
424
+ sm.def(
425
+ "accept_double_forcecast",
426
+ [](const py::array_t<double, py::array::forcecast> &) {},
427
+ py::arg("a"));
428
+ sm.def(
429
+ "accept_double_c_style",
430
+ [](const py::array_t<double, py::array::c_style> &) {},
431
+ py::arg("a"));
432
+ sm.def(
433
+ "accept_double_c_style_forcecast",
434
+ [](const py::array_t<double, py::array::forcecast | py::array::c_style> &) {},
435
+ py::arg("a"));
436
+ sm.def(
437
+ "accept_double_f_style",
438
+ [](const py::array_t<double, py::array::f_style> &) {},
439
+ py::arg("a"));
440
+ sm.def(
441
+ "accept_double_f_style_forcecast",
442
+ [](const py::array_t<double, py::array::forcecast | py::array::f_style> &) {},
443
+ py::arg("a"));
444
+ sm.def(
445
+ "accept_double_noconvert", [](const py::array_t<double, 0> &) {}, "a"_a.noconvert());
446
+ sm.def(
447
+ "accept_double_forcecast_noconvert",
448
+ [](const py::array_t<double, py::array::forcecast> &) {},
449
+ "a"_a.noconvert());
450
+ sm.def(
451
+ "accept_double_c_style_noconvert",
452
+ [](const py::array_t<double, py::array::c_style> &) {},
453
+ "a"_a.noconvert());
454
+ sm.def(
455
+ "accept_double_c_style_forcecast_noconvert",
456
+ [](const py::array_t<double, py::array::forcecast | py::array::c_style> &) {},
457
+ "a"_a.noconvert());
458
+ sm.def(
459
+ "accept_double_f_style_noconvert",
460
+ [](const py::array_t<double, py::array::f_style> &) {},
461
+ "a"_a.noconvert());
462
+ sm.def(
463
+ "accept_double_f_style_forcecast_noconvert",
464
+ [](const py::array_t<double, py::array::forcecast | py::array::f_style> &) {},
465
+ "a"_a.noconvert());
466
+
467
+ // Check that types returns correct npy format descriptor
468
+ sm.def("test_fmt_desc_float", [](const py::array_t<float> &) {});
469
+ sm.def("test_fmt_desc_double", [](const py::array_t<double> &) {});
470
+ sm.def("test_fmt_desc_const_float", [](const py::array_t<const float> &) {});
471
+ sm.def("test_fmt_desc_const_double", [](const py::array_t<const double> &) {});
472
+ }