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.
- xcoll/__init__.py +13 -4
- xcoll/beam_elements/__init__.py +14 -6
- xcoll/beam_elements/absorber.py +41 -7
- xcoll/beam_elements/base.py +1202 -247
- xcoll/beam_elements/blowup.py +198 -0
- xcoll/beam_elements/elements_src/black_absorber.h +136 -0
- xcoll/beam_elements/elements_src/black_crystal.h +129 -0
- xcoll/beam_elements/elements_src/blowup.h +42 -0
- xcoll/beam_elements/elements_src/emittance_monitor.h +109 -0
- xcoll/beam_elements/{collimators_src → elements_src}/everest_block.h +59 -30
- xcoll/beam_elements/elements_src/everest_collimator.h +237 -0
- xcoll/beam_elements/elements_src/everest_crystal.h +280 -0
- xcoll/beam_elements/everest.py +65 -119
- xcoll/beam_elements/monitor.py +428 -0
- xcoll/colldb.py +276 -747
- xcoll/general.py +5 -5
- xcoll/headers/checks.h +1 -1
- xcoll/headers/particle_states.h +2 -2
- xcoll/initial_distribution.py +207 -0
- xcoll/install.py +179 -0
- xcoll/interaction_record/__init__.py +1 -0
- xcoll/interaction_record/interaction_record.py +298 -0
- xcoll/interaction_record/interaction_record_src/interaction_record.h +98 -0
- xcoll/{impacts → interaction_record}/interaction_types.py +11 -4
- xcoll/line_tools.py +82 -0
- xcoll/lossmap.py +219 -0
- xcoll/manager.py +2 -937
- xcoll/rf_sweep.py +1 -1
- xcoll/scattering_routines/everest/amorphous.h +232 -0
- xcoll/scattering_routines/everest/channeling.h +240 -0
- xcoll/scattering_routines/everest/crystal_parameters.h +137 -0
- xcoll/scattering_routines/everest/everest.h +11 -30
- xcoll/scattering_routines/everest/everest.py +13 -10
- xcoll/scattering_routines/everest/jaw.h +28 -197
- xcoll/scattering_routines/everest/materials.py +37 -15
- xcoll/scattering_routines/everest/multiple_coulomb_scattering.h +31 -10
- xcoll/scattering_routines/everest/nuclear_interaction.h +86 -0
- xcoll/scattering_routines/everest/properties.h +6 -1
- xcoll/scattering_routines/fluka/flukaio/lib/libFlukaIO64.a +0 -0
- xcoll/scattering_routines/geant4/collimasim/.git +1 -0
- xcoll/scattering_routines/geant4/collimasim/.gitignore +12 -0
- xcoll/scattering_routines/geant4/collimasim/.gitmodules +3 -0
- xcoll/scattering_routines/geant4/collimasim/CMakeLists.txt +26 -0
- xcoll/scattering_routines/geant4/collimasim/README.md +21 -0
- xcoll/scattering_routines/geant4/collimasim/docs/Makefile +20 -0
- xcoll/scattering_routines/geant4/collimasim/docs/make.bat +35 -0
- xcoll/scattering_routines/geant4/collimasim/docs/source/collimasim.rst +10 -0
- xcoll/scattering_routines/geant4/collimasim/docs/source/conf.py +59 -0
- xcoll/scattering_routines/geant4/collimasim/docs/source/index.rst +26 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.appveyor.yml +37 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.clang-format +19 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.clang-tidy +65 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.cmake-format.yaml +73 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.git +1 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/CODEOWNERS +9 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/CONTRIBUTING.md +386 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/ISSUE_TEMPLATE/bug-report.yml +45 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/ISSUE_TEMPLATE/config.yml +8 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/dependabot.yml +16 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/labeler.yml +8 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/labeler_merged.yml +3 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/pull_request_template.md +19 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/workflows/ci.yml +969 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/workflows/configure.yml +84 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/workflows/format.yml +48 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/workflows/labeler.yml +16 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/workflows/pip.yml +103 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.gitignore +45 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.pre-commit-config.yaml +151 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.readthedocs.yml +3 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/CMakeLists.txt +297 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/LICENSE +29 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/MANIFEST.in +6 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/README.rst +180 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/Doxyfile +23 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/Makefile +192 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/_static/theme_overrides.css +11 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/chrono.rst +81 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/custom.rst +93 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/eigen.rst +310 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/functional.rst +109 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/index.rst +43 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/overview.rst +171 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/stl.rst +251 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/strings.rst +305 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/classes.rst +1297 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/embedding.rst +262 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/exceptions.rst +396 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/functions.rst +568 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/misc.rst +337 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/pycpp/index.rst +13 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/pycpp/numpy.rst +463 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/pycpp/object.rst +286 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/pycpp/utilities.rst +155 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/smart_ptrs.rst +174 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/basics.rst +308 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/benchmark.py +91 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/benchmark.rst +95 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/changelog.rst +2050 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/classes.rst +542 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/cmake/index.rst +8 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/compiling.rst +648 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/conf.py +381 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/faq.rst +343 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/index.rst +48 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/installing.rst +105 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/limitations.rst +72 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/pybind11-logo.png +0 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/pybind11_vs_boost_python1.png +0 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/pybind11_vs_boost_python1.svg +427 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/pybind11_vs_boost_python2.png +0 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/pybind11_vs_boost_python2.svg +427 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/reference.rst +130 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/release.rst +96 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/requirements.txt +8 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/upgrade.rst +548 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/attr.h +605 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/buffer_info.h +144 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/cast.h +1432 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/chrono.h +213 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/common.h +2 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/complex.h +65 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/class.h +709 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/common.h +1021 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/descr.h +104 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/init.h +346 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/internals.h +467 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/type_caster_base.h +978 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/typeid.h +55 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/eigen.h +606 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/embed.h +284 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/eval.h +163 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/functional.h +121 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/gil.h +193 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/iostream.h +275 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/numpy.h +1741 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/operators.h +163 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/options.h +65 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/pybind11.h +2497 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/pytypes.h +1879 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/stl/filesystem.h +103 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/stl.h +375 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/stl_bind.h +747 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/noxfile.py +88 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/__init__.py +11 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/__main__.py +52 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/_version.py +12 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/_version.pyi +6 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/commands.py +21 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/py.typed +0 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/setup_helpers.py +482 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/setup_helpers.pyi +63 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pyproject.toml +41 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/setup.cfg +56 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/setup.py +155 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/CMakeLists.txt +503 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/conftest.py +208 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/constructor_stats.h +275 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/cross_module_gil_utils.cpp +73 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/env.py +33 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/extra_python_package/pytest.ini +0 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/extra_python_package/test_files.py +279 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/extra_setuptools/pytest.ini +0 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/extra_setuptools/test_setuphelper.py +143 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/local_bindings.h +85 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/object.h +179 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/pybind11_cross_module_tests.cpp +151 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/pybind11_tests.cpp +91 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/pybind11_tests.h +85 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/pytest.ini +19 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/requirements.txt +12 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_async.cpp +26 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_async.py +25 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_buffers.cpp +216 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_buffers.py +163 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_builtin_casters.cpp +286 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_builtin_casters.py +536 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_call_policies.cpp +107 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_call_policies.py +248 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_callbacks.cpp +227 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_callbacks.py +202 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_chrono.cpp +84 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_chrono.py +210 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_class.cpp +550 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_class.py +473 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/CMakeLists.txt +84 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/embed.cpp +21 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/installed_embed/CMakeLists.txt +28 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/installed_function/CMakeLists.txt +39 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/installed_target/CMakeLists.txt +46 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/main.cpp +6 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/subdirectory_embed/CMakeLists.txt +41 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/subdirectory_function/CMakeLists.txt +35 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/subdirectory_target/CMakeLists.txt +41 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/test.py +10 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_constants_and_functions.cpp +165 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_constants_and_functions.py +53 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_copy_move.cpp +238 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_copy_move.py +126 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_custom_type_casters.cpp +141 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_custom_type_casters.py +117 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_custom_type_setup.cpp +41 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_custom_type_setup.py +50 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_docstring_options.cpp +69 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_docstring_options.py +42 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_eigen.cpp +348 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_eigen.py +771 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_embed/CMakeLists.txt +47 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_embed/catch.cpp +22 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_embed/external_module.cpp +23 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_embed/test_interpreter.cpp +326 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_embed/test_interpreter.py +15 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_enum.cpp +148 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_enum.py +272 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_eval.cpp +119 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_eval.py +51 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_eval_call.py +5 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_exceptions.cpp +285 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_exceptions.h +12 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_exceptions.py +265 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_factory_constructors.cpp +397 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_factory_constructors.py +520 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_gil_scoped.cpp +49 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_gil_scoped.py +94 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_iostream.cpp +125 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_iostream.py +331 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_kwargs_and_defaults.cpp +153 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_kwargs_and_defaults.py +284 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_local_bindings.cpp +107 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_local_bindings.py +257 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_methods_and_attributes.cpp +412 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_methods_and_attributes.py +517 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_modules.cpp +102 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_modules.py +92 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_multiple_inheritance.cpp +233 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_multiple_inheritance.py +360 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_numpy_array.cpp +472 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_numpy_array.py +593 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_numpy_dtypes.cpp +524 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_numpy_dtypes.py +441 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_numpy_vectorize.cpp +103 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_numpy_vectorize.py +267 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_opaque_types.cpp +73 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_opaque_types.py +59 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_operator_overloading.cpp +235 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_operator_overloading.py +146 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_pickling.cpp +189 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_pickling.py +82 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_pytypes.cpp +560 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_pytypes.py +651 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_sequences_and_iterators.cpp +500 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_sequences_and_iterators.py +253 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_smart_ptr.cpp +452 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_smart_ptr.py +318 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_stl.cpp +342 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_stl.py +291 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_stl_binders.cpp +131 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_stl_binders.py +318 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_tagbased_polymorphic.cpp +144 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_tagbased_polymorphic.py +29 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_thread.cpp +66 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_thread.py +44 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_union.cpp +22 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_union.py +9 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_virtual_functions.cpp +510 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_virtual_functions.py +408 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/valgrind-numpy-scipy.supp +140 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/valgrind-python.supp +117 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/FindCatch.cmake +70 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/FindEigen3.cmake +86 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/FindPythonLibsNew.cmake +257 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/check-style.sh +44 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/cmake_uninstall.cmake.in +23 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/libsize.py +39 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/make_changelog.py +64 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/pybind11Common.cmake +402 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/pybind11Config.cmake.in +233 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/pybind11NewTools.cmake +276 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/pybind11Tools.cmake +214 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/pyproject.toml +3 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/setup_global.py.in +65 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/setup_main.py.in +41 -0
- xcoll/scattering_routines/geant4/collimasim/pyproject.toml +8 -0
- xcoll/scattering_routines/geant4/collimasim/setup.py +144 -0
- xcoll/scattering_routines/geant4/collimasim/src/collimasim/BDSPyATInterface.cpp +403 -0
- xcoll/scattering_routines/geant4/collimasim/src/collimasim/BDSPyATInterface.hh +100 -0
- xcoll/scattering_routines/geant4/collimasim/src/collimasim/BDSXtrackInterface.cpp +763 -0
- xcoll/scattering_routines/geant4/collimasim/src/collimasim/BDSXtrackInterface.hh +118 -0
- xcoll/scattering_routines/geant4/collimasim/src/collimasim/__init__.py +8 -0
- xcoll/scattering_routines/geant4/collimasim/src/collimasim/bindings.cpp +63 -0
- xcoll/scattering_routines/geant4/collimasim/src/collimasim/pyCollimatorPass.py +142 -0
- xcoll/scattering_routines/geant4/collimasim/src/collimasim/xtrack_collimator.py +556 -0
- xcoll/scattering_routines/geant4/collimasim/src/collimasim.egg-info/PKG-INFO +6 -0
- xcoll/scattering_routines/geant4/collimasim/src/collimasim.egg-info/SOURCES.txt +24 -0
- xcoll/scattering_routines/geant4/collimasim/src/collimasim.egg-info/dependency_links.txt +1 -0
- xcoll/scattering_routines/geant4/collimasim/src/collimasim.egg-info/not-zip-safe +1 -0
- xcoll/scattering_routines/geant4/collimasim/src/collimasim.egg-info/top_level.txt +1 -0
- xcoll/scattering_routines/geant4/collimasim/tests/README.md +25 -0
- xcoll/scattering_routines/geant4/collimasim/tests/resources/CollDB_forions.dat +25 -0
- xcoll/scattering_routines/geant4/collimasim/tests/resources/CollDB_new_example.dat +18 -0
- xcoll/scattering_routines/geant4/collimasim/tests/resources/CollDB_old_example.dat +68 -0
- xcoll/scattering_routines/geant4/collimasim/tests/resources/CollDB_testing.dat +15 -0
- xcoll/scattering_routines/geant4/collimasim/tests/resources/CollDB_yaml_example.yaml +110 -0
- xcoll/scattering_routines/geant4/collimasim/tests/resources/collgaps.dat +7 -0
- xcoll/scattering_routines/geant4/collimasim/tests/resources/collgaps_pyat_test.dat +3 -0
- xcoll/scattering_routines/geant4/collimasim/tests/resources/collonly_twiss_file_example.tfs +54 -0
- xcoll/scattering_routines/geant4/collimasim/tests/resources/settings.gmad +3 -0
- xcoll/scattering_routines/geant4/collimasim/tests/resources/settings_black_absorber.gmad +3 -0
- xcoll/scattering_routines/geant4/collimasim/tests/resources/settings_ions.gmad +5 -0
- xcoll/scattering_routines/geant4/collimasim/tests/resources/twiss_file_testing.tfs +51 -0
- xcoll/scattering_routines/geant4/collimasim/tests/test_pyat.py +65 -0
- xcoll/scattering_routines/geant4/collimasim/tests/test_pyat_passmethod.py +59 -0
- xcoll/scattering_routines/geant4/collimasim/tests/test_pyat_tracking.py +102 -0
- xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack.py +75 -0
- xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_angle.py +74 -0
- xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_colldb_load.py +84 -0
- xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_interaction.py +159 -0
- xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_interaction_ion.py +99 -0
- xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_ions.py +78 -0
- xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_lost_energy.py +88 -0
- xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_tilt.py +80 -0
- xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_tracking.py +97 -0
- xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_tracking_ions.py +96 -0
- xcoll/scattering_routines/geometry/__init__.py +6 -0
- xcoll/scattering_routines/geometry/collimator_geometry.h +218 -0
- xcoll/scattering_routines/geometry/crystal_geometry.h +153 -0
- xcoll/scattering_routines/geometry/geometry.py +26 -0
- xcoll/scattering_routines/geometry/get_s.h +92 -0
- xcoll/scattering_routines/geometry/methods.h +111 -0
- xcoll/scattering_routines/geometry/objects.h +154 -0
- xcoll/scattering_routines/geometry/rotation.h +23 -0
- xcoll/scattering_routines/geometry/segments.h +226 -0
- xcoll/scattering_routines/geometry/sort.h +184 -0
- {xcoll-0.3.6.dist-info → xcoll-0.5.0.dist-info}/METADATA +1 -1
- xcoll-0.5.0.dist-info/RECORD +413 -0
- xcoll/beam_elements/collimators_src/absorber.h +0 -141
- xcoll/beam_elements/collimators_src/everest_collimator.h +0 -142
- xcoll/beam_elements/collimators_src/everest_crystal.h +0 -115
- xcoll/collimator_settings.py +0 -457
- xcoll/impacts/__init__.py +0 -1
- xcoll/impacts/impacts.py +0 -102
- xcoll/impacts/impacts_src/impacts.h +0 -99
- xcoll/scattering_routines/everest/crystal.h +0 -1302
- xcoll/scattering_routines/everest/scatter.h +0 -169
- xcoll/scattering_routines/everest/scatter_crystal.h +0 -260
- xcoll/scattering_routines/fluka/build_fluka_input.py +0 -58
- xcoll-0.3.6.dist-info/RECORD +0 -111
- {xcoll-0.3.6.dist-info → xcoll-0.5.0.dist-info}/LICENSE +0 -0
- {xcoll-0.3.6.dist-info → xcoll-0.5.0.dist-info}/NOTICE +0 -0
- {xcoll-0.3.6.dist-info → xcoll-0.5.0.dist-info}/WHEEL +0 -0
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
/*
|
|
2
|
+
tests/test_custom-exceptions.cpp -- exception translation
|
|
3
|
+
|
|
4
|
+
Copyright (c) 2016 Pim Schellart <P.Schellart@princeton.edu>
|
|
5
|
+
|
|
6
|
+
All rights reserved. Use of this source code is governed by a
|
|
7
|
+
BSD-style license that can be found in the LICENSE file.
|
|
8
|
+
*/
|
|
9
|
+
#include "test_exceptions.h"
|
|
10
|
+
|
|
11
|
+
#include "local_bindings.h"
|
|
12
|
+
|
|
13
|
+
#include "pybind11_tests.h"
|
|
14
|
+
#include <utility>
|
|
15
|
+
|
|
16
|
+
// A type that should be raised as an exception in Python
|
|
17
|
+
class MyException : public std::exception {
|
|
18
|
+
public:
|
|
19
|
+
explicit MyException(const char * m) : message{m} {}
|
|
20
|
+
const char * what() const noexcept override {return message.c_str();}
|
|
21
|
+
private:
|
|
22
|
+
std::string message = "";
|
|
23
|
+
};
|
|
24
|
+
|
|
25
|
+
// A type that should be translated to a standard Python exception
|
|
26
|
+
class MyException2 : public std::exception {
|
|
27
|
+
public:
|
|
28
|
+
explicit MyException2(const char * m) : message{m} {}
|
|
29
|
+
const char * what() const noexcept override {return message.c_str();}
|
|
30
|
+
private:
|
|
31
|
+
std::string message = "";
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
// A type that is not derived from std::exception (and is thus unknown)
|
|
35
|
+
class MyException3 {
|
|
36
|
+
public:
|
|
37
|
+
explicit MyException3(const char * m) : message{m} {}
|
|
38
|
+
virtual const char * what() const noexcept {return message.c_str();}
|
|
39
|
+
// Rule of 5 BEGIN: to preempt compiler warnings.
|
|
40
|
+
MyException3(const MyException3&) = default;
|
|
41
|
+
MyException3(MyException3&&) = default;
|
|
42
|
+
MyException3& operator=(const MyException3&) = default;
|
|
43
|
+
MyException3& operator=(MyException3&&) = default;
|
|
44
|
+
virtual ~MyException3() = default;
|
|
45
|
+
// Rule of 5 END.
|
|
46
|
+
private:
|
|
47
|
+
std::string message = "";
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
// A type that should be translated to MyException
|
|
51
|
+
// and delegated to its exception translator
|
|
52
|
+
class MyException4 : public std::exception {
|
|
53
|
+
public:
|
|
54
|
+
explicit MyException4(const char * m) : message{m} {}
|
|
55
|
+
const char * what() const noexcept override {return message.c_str();}
|
|
56
|
+
private:
|
|
57
|
+
std::string message = "";
|
|
58
|
+
};
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
// Like the above, but declared via the helper function
|
|
62
|
+
class MyException5 : public std::logic_error {
|
|
63
|
+
public:
|
|
64
|
+
explicit MyException5(const std::string &what) : std::logic_error(what) {}
|
|
65
|
+
};
|
|
66
|
+
|
|
67
|
+
// Inherits from MyException5
|
|
68
|
+
class MyException5_1 : public MyException5 {
|
|
69
|
+
using MyException5::MyException5;
|
|
70
|
+
};
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
// Exception that will be caught via the module local translator.
|
|
74
|
+
class MyException6 : public std::exception {
|
|
75
|
+
public:
|
|
76
|
+
explicit MyException6(const char * m) : message{m} {}
|
|
77
|
+
const char * what() const noexcept override {return message.c_str();}
|
|
78
|
+
private:
|
|
79
|
+
std::string message = "";
|
|
80
|
+
};
|
|
81
|
+
|
|
82
|
+
|
|
83
|
+
struct PythonCallInDestructor {
|
|
84
|
+
explicit PythonCallInDestructor(const py::dict &d) : d(d) {}
|
|
85
|
+
~PythonCallInDestructor() { d["good"] = true; }
|
|
86
|
+
|
|
87
|
+
py::dict d;
|
|
88
|
+
};
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
struct PythonAlreadySetInDestructor {
|
|
93
|
+
explicit PythonAlreadySetInDestructor(const py::str &s) : s(s) {}
|
|
94
|
+
~PythonAlreadySetInDestructor() {
|
|
95
|
+
py::dict foo;
|
|
96
|
+
try {
|
|
97
|
+
// Assign to a py::object to force read access of nonexistent dict entry
|
|
98
|
+
py::object o = foo["bar"];
|
|
99
|
+
}
|
|
100
|
+
catch (py::error_already_set& ex) {
|
|
101
|
+
ex.discard_as_unraisable(s);
|
|
102
|
+
}
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
py::str s;
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
|
|
109
|
+
TEST_SUBMODULE(exceptions, m) {
|
|
110
|
+
m.def("throw_std_exception", []() {
|
|
111
|
+
throw std::runtime_error("This exception was intentionally thrown.");
|
|
112
|
+
});
|
|
113
|
+
|
|
114
|
+
// make a new custom exception and use it as a translation target
|
|
115
|
+
static py::exception<MyException> ex(m, "MyException");
|
|
116
|
+
py::register_exception_translator([](std::exception_ptr p) {
|
|
117
|
+
try {
|
|
118
|
+
if (p) std::rethrow_exception(p);
|
|
119
|
+
} catch (const MyException &e) {
|
|
120
|
+
// Set MyException as the active python error
|
|
121
|
+
ex(e.what());
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
|
|
125
|
+
// register new translator for MyException2
|
|
126
|
+
// no need to store anything here because this type will
|
|
127
|
+
// never by visible from Python
|
|
128
|
+
py::register_exception_translator([](std::exception_ptr p) {
|
|
129
|
+
try {
|
|
130
|
+
if (p) std::rethrow_exception(p);
|
|
131
|
+
} catch (const MyException2 &e) {
|
|
132
|
+
// Translate this exception to a standard RuntimeError
|
|
133
|
+
PyErr_SetString(PyExc_RuntimeError, e.what());
|
|
134
|
+
}
|
|
135
|
+
});
|
|
136
|
+
|
|
137
|
+
// register new translator for MyException4
|
|
138
|
+
// which will catch it and delegate to the previously registered
|
|
139
|
+
// translator for MyException by throwing a new exception
|
|
140
|
+
py::register_exception_translator([](std::exception_ptr p) {
|
|
141
|
+
try {
|
|
142
|
+
if (p) std::rethrow_exception(p);
|
|
143
|
+
} catch (const MyException4 &e) {
|
|
144
|
+
throw MyException(e.what());
|
|
145
|
+
}
|
|
146
|
+
});
|
|
147
|
+
|
|
148
|
+
// A simple exception translation:
|
|
149
|
+
auto ex5 = py::register_exception<MyException5>(m, "MyException5");
|
|
150
|
+
// A slightly more complicated one that declares MyException5_1 as a subclass of MyException5
|
|
151
|
+
py::register_exception<MyException5_1>(m, "MyException5_1", ex5.ptr());
|
|
152
|
+
|
|
153
|
+
//py::register_local_exception<LocalSimpleException>(m, "LocalSimpleException")
|
|
154
|
+
|
|
155
|
+
py::register_local_exception_translator([](std::exception_ptr p) {
|
|
156
|
+
try {
|
|
157
|
+
if (p) {
|
|
158
|
+
std::rethrow_exception(p);
|
|
159
|
+
}
|
|
160
|
+
} catch (const MyException6 &e) {
|
|
161
|
+
PyErr_SetString(PyExc_RuntimeError, e.what());
|
|
162
|
+
}
|
|
163
|
+
});
|
|
164
|
+
|
|
165
|
+
m.def("throws1", []() { throw MyException("this error should go to a custom type"); });
|
|
166
|
+
m.def("throws2", []() { throw MyException2("this error should go to a standard Python exception"); });
|
|
167
|
+
m.def("throws3", []() { throw MyException3("this error cannot be translated"); });
|
|
168
|
+
m.def("throws4", []() { throw MyException4("this error is rethrown"); });
|
|
169
|
+
m.def("throws5", []() { throw MyException5("this is a helper-defined translated exception"); });
|
|
170
|
+
m.def("throws5_1", []() { throw MyException5_1("MyException5 subclass"); });
|
|
171
|
+
m.def("throws6", []() { throw MyException6("MyException6 only handled in this module"); });
|
|
172
|
+
m.def("throws_logic_error", []() { throw std::logic_error("this error should fall through to the standard handler"); });
|
|
173
|
+
m.def("throws_overflow_error", []() { throw std::overflow_error(""); });
|
|
174
|
+
m.def("throws_local_error", []() { throw LocalException("never caught"); });
|
|
175
|
+
m.def("throws_local_simple_error", []() { throw LocalSimpleException("this mod"); });
|
|
176
|
+
m.def("exception_matches", []() {
|
|
177
|
+
py::dict foo;
|
|
178
|
+
try {
|
|
179
|
+
// Assign to a py::object to force read access of nonexistent dict entry
|
|
180
|
+
py::object o = foo["bar"];
|
|
181
|
+
}
|
|
182
|
+
catch (py::error_already_set& ex) {
|
|
183
|
+
if (!ex.matches(PyExc_KeyError)) throw;
|
|
184
|
+
return true;
|
|
185
|
+
}
|
|
186
|
+
return false;
|
|
187
|
+
});
|
|
188
|
+
m.def("exception_matches_base", []() {
|
|
189
|
+
py::dict foo;
|
|
190
|
+
try {
|
|
191
|
+
// Assign to a py::object to force read access of nonexistent dict entry
|
|
192
|
+
py::object o = foo["bar"];
|
|
193
|
+
}
|
|
194
|
+
catch (py::error_already_set &ex) {
|
|
195
|
+
if (!ex.matches(PyExc_Exception)) throw;
|
|
196
|
+
return true;
|
|
197
|
+
}
|
|
198
|
+
return false;
|
|
199
|
+
});
|
|
200
|
+
m.def("modulenotfound_exception_matches_base", []() {
|
|
201
|
+
try {
|
|
202
|
+
// On Python >= 3.6, this raises a ModuleNotFoundError, a subclass of ImportError
|
|
203
|
+
py::module_::import("nonexistent");
|
|
204
|
+
}
|
|
205
|
+
catch (py::error_already_set &ex) {
|
|
206
|
+
if (!ex.matches(PyExc_ImportError)) throw;
|
|
207
|
+
return true;
|
|
208
|
+
}
|
|
209
|
+
return false;
|
|
210
|
+
});
|
|
211
|
+
|
|
212
|
+
m.def("throw_already_set", [](bool err) {
|
|
213
|
+
if (err)
|
|
214
|
+
PyErr_SetString(PyExc_ValueError, "foo");
|
|
215
|
+
try {
|
|
216
|
+
throw py::error_already_set();
|
|
217
|
+
} catch (const std::runtime_error& e) {
|
|
218
|
+
if ((err && e.what() != std::string("ValueError: foo")) ||
|
|
219
|
+
(!err && e.what() != std::string("Unknown internal error occurred")))
|
|
220
|
+
{
|
|
221
|
+
PyErr_Clear();
|
|
222
|
+
throw std::runtime_error("error message mismatch");
|
|
223
|
+
}
|
|
224
|
+
}
|
|
225
|
+
PyErr_Clear();
|
|
226
|
+
if (err)
|
|
227
|
+
PyErr_SetString(PyExc_ValueError, "foo");
|
|
228
|
+
throw py::error_already_set();
|
|
229
|
+
});
|
|
230
|
+
|
|
231
|
+
m.def("python_call_in_destructor", [](const py::dict &d) {
|
|
232
|
+
bool retval = false;
|
|
233
|
+
try {
|
|
234
|
+
PythonCallInDestructor set_dict_in_destructor(d);
|
|
235
|
+
PyErr_SetString(PyExc_ValueError, "foo");
|
|
236
|
+
throw py::error_already_set();
|
|
237
|
+
} catch (const py::error_already_set&) {
|
|
238
|
+
retval = true;
|
|
239
|
+
}
|
|
240
|
+
return retval;
|
|
241
|
+
});
|
|
242
|
+
|
|
243
|
+
m.def("python_alreadyset_in_destructor", [](const py::str &s) {
|
|
244
|
+
PythonAlreadySetInDestructor alreadyset_in_destructor(s);
|
|
245
|
+
return true;
|
|
246
|
+
});
|
|
247
|
+
|
|
248
|
+
// test_nested_throws
|
|
249
|
+
m.def("try_catch",
|
|
250
|
+
[m](const py::object &exc_type, const py::function &f, const py::args &args) {
|
|
251
|
+
try {
|
|
252
|
+
f(*args);
|
|
253
|
+
} catch (py::error_already_set &ex) {
|
|
254
|
+
if (ex.matches(exc_type))
|
|
255
|
+
py::print(ex.what());
|
|
256
|
+
else
|
|
257
|
+
throw;
|
|
258
|
+
}
|
|
259
|
+
});
|
|
260
|
+
|
|
261
|
+
// Test repr that cannot be displayed
|
|
262
|
+
m.def("simple_bool_passthrough", [](bool x) {return x;});
|
|
263
|
+
|
|
264
|
+
m.def("throw_should_be_translated_to_key_error", []() { throw shared_exception(); });
|
|
265
|
+
|
|
266
|
+
#if PY_VERSION_HEX >= 0x03030000
|
|
267
|
+
|
|
268
|
+
m.def("raise_from", []() {
|
|
269
|
+
PyErr_SetString(PyExc_ValueError, "inner");
|
|
270
|
+
py::raise_from(PyExc_ValueError, "outer");
|
|
271
|
+
throw py::error_already_set();
|
|
272
|
+
});
|
|
273
|
+
|
|
274
|
+
m.def("raise_from_already_set", []() {
|
|
275
|
+
try {
|
|
276
|
+
PyErr_SetString(PyExc_ValueError, "inner");
|
|
277
|
+
throw py::error_already_set();
|
|
278
|
+
} catch (py::error_already_set& e) {
|
|
279
|
+
py::raise_from(e, PyExc_ValueError, "outer");
|
|
280
|
+
throw py::error_already_set();
|
|
281
|
+
}
|
|
282
|
+
});
|
|
283
|
+
|
|
284
|
+
#endif
|
|
285
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
#pragma once
|
|
2
|
+
#include "pybind11_tests.h"
|
|
3
|
+
#include <stdexcept>
|
|
4
|
+
|
|
5
|
+
// shared exceptions for cross_module_tests
|
|
6
|
+
|
|
7
|
+
class PYBIND11_EXPORT_EXCEPTION shared_exception : public pybind11::builtin_exception {
|
|
8
|
+
public:
|
|
9
|
+
using builtin_exception::builtin_exception;
|
|
10
|
+
explicit shared_exception() : shared_exception("") {}
|
|
11
|
+
void set_error() const override { PyErr_SetString(PyExc_RuntimeError, what()); }
|
|
12
|
+
};
|
|
@@ -0,0 +1,265 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
import sys
|
|
3
|
+
|
|
4
|
+
import pytest
|
|
5
|
+
|
|
6
|
+
import env # noqa: F401
|
|
7
|
+
import pybind11_cross_module_tests as cm
|
|
8
|
+
from pybind11_tests import exceptions as m
|
|
9
|
+
|
|
10
|
+
|
|
11
|
+
def test_std_exception(msg):
|
|
12
|
+
with pytest.raises(RuntimeError) as excinfo:
|
|
13
|
+
m.throw_std_exception()
|
|
14
|
+
assert msg(excinfo.value) == "This exception was intentionally thrown."
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def test_error_already_set(msg):
|
|
18
|
+
with pytest.raises(RuntimeError) as excinfo:
|
|
19
|
+
m.throw_already_set(False)
|
|
20
|
+
assert msg(excinfo.value) == "Unknown internal error occurred"
|
|
21
|
+
|
|
22
|
+
with pytest.raises(ValueError) as excinfo:
|
|
23
|
+
m.throw_already_set(True)
|
|
24
|
+
assert msg(excinfo.value) == "foo"
|
|
25
|
+
|
|
26
|
+
|
|
27
|
+
@pytest.mark.skipif("env.PY2")
|
|
28
|
+
def test_raise_from(msg):
|
|
29
|
+
with pytest.raises(ValueError) as excinfo:
|
|
30
|
+
m.raise_from()
|
|
31
|
+
assert msg(excinfo.value) == "outer"
|
|
32
|
+
assert msg(excinfo.value.__cause__) == "inner"
|
|
33
|
+
|
|
34
|
+
|
|
35
|
+
@pytest.mark.skipif("env.PY2")
|
|
36
|
+
def test_raise_from_already_set(msg):
|
|
37
|
+
with pytest.raises(ValueError) as excinfo:
|
|
38
|
+
m.raise_from_already_set()
|
|
39
|
+
assert msg(excinfo.value) == "outer"
|
|
40
|
+
assert msg(excinfo.value.__cause__) == "inner"
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def test_cross_module_exceptions(msg):
|
|
44
|
+
with pytest.raises(RuntimeError) as excinfo:
|
|
45
|
+
cm.raise_runtime_error()
|
|
46
|
+
assert str(excinfo.value) == "My runtime error"
|
|
47
|
+
|
|
48
|
+
with pytest.raises(ValueError) as excinfo:
|
|
49
|
+
cm.raise_value_error()
|
|
50
|
+
assert str(excinfo.value) == "My value error"
|
|
51
|
+
|
|
52
|
+
with pytest.raises(ValueError) as excinfo:
|
|
53
|
+
cm.throw_pybind_value_error()
|
|
54
|
+
assert str(excinfo.value) == "pybind11 value error"
|
|
55
|
+
|
|
56
|
+
with pytest.raises(TypeError) as excinfo:
|
|
57
|
+
cm.throw_pybind_type_error()
|
|
58
|
+
assert str(excinfo.value) == "pybind11 type error"
|
|
59
|
+
|
|
60
|
+
with pytest.raises(StopIteration) as excinfo:
|
|
61
|
+
cm.throw_stop_iteration()
|
|
62
|
+
|
|
63
|
+
with pytest.raises(cm.LocalSimpleException) as excinfo:
|
|
64
|
+
cm.throw_local_simple_error()
|
|
65
|
+
assert msg(excinfo.value) == "external mod"
|
|
66
|
+
|
|
67
|
+
with pytest.raises(KeyError) as excinfo:
|
|
68
|
+
cm.throw_local_error()
|
|
69
|
+
# KeyError is a repr of the key, so it has an extra set of quotes
|
|
70
|
+
assert str(excinfo.value) == "'just local'"
|
|
71
|
+
|
|
72
|
+
|
|
73
|
+
# TODO: FIXME
|
|
74
|
+
@pytest.mark.xfail(
|
|
75
|
+
"env.PYPY and env.MACOS",
|
|
76
|
+
raises=RuntimeError,
|
|
77
|
+
reason="Expected failure with PyPy and libc++ (Issue #2847 & PR #2999)",
|
|
78
|
+
)
|
|
79
|
+
def test_cross_module_exception_translator():
|
|
80
|
+
with pytest.raises(KeyError):
|
|
81
|
+
# translator registered in cross_module_tests
|
|
82
|
+
m.throw_should_be_translated_to_key_error()
|
|
83
|
+
|
|
84
|
+
|
|
85
|
+
def test_python_call_in_catch():
|
|
86
|
+
d = {}
|
|
87
|
+
assert m.python_call_in_destructor(d) is True
|
|
88
|
+
assert d["good"] is True
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def ignore_pytest_unraisable_warning(f):
|
|
92
|
+
unraisable = "PytestUnraisableExceptionWarning"
|
|
93
|
+
if hasattr(pytest, unraisable): # Python >= 3.8 and pytest >= 6
|
|
94
|
+
dec = pytest.mark.filterwarnings("ignore::pytest.{}".format(unraisable))
|
|
95
|
+
return dec(f)
|
|
96
|
+
else:
|
|
97
|
+
return f
|
|
98
|
+
|
|
99
|
+
|
|
100
|
+
@ignore_pytest_unraisable_warning
|
|
101
|
+
def test_python_alreadyset_in_destructor(monkeypatch, capsys):
|
|
102
|
+
hooked = False
|
|
103
|
+
triggered = [False] # mutable, so Python 2.7 closure can modify it
|
|
104
|
+
|
|
105
|
+
if hasattr(sys, "unraisablehook"): # Python 3.8+
|
|
106
|
+
hooked = True
|
|
107
|
+
# Don't take `sys.unraisablehook`, as that's overwritten by pytest
|
|
108
|
+
default_hook = sys.__unraisablehook__
|
|
109
|
+
|
|
110
|
+
def hook(unraisable_hook_args):
|
|
111
|
+
exc_type, exc_value, exc_tb, err_msg, obj = unraisable_hook_args
|
|
112
|
+
if obj == "already_set demo":
|
|
113
|
+
triggered[0] = True
|
|
114
|
+
default_hook(unraisable_hook_args)
|
|
115
|
+
return
|
|
116
|
+
|
|
117
|
+
# Use monkeypatch so pytest can apply and remove the patch as appropriate
|
|
118
|
+
monkeypatch.setattr(sys, "unraisablehook", hook)
|
|
119
|
+
|
|
120
|
+
assert m.python_alreadyset_in_destructor("already_set demo") is True
|
|
121
|
+
if hooked:
|
|
122
|
+
assert triggered[0] is True
|
|
123
|
+
|
|
124
|
+
_, captured_stderr = capsys.readouterr()
|
|
125
|
+
# Error message is different in Python 2 and 3, check for words that appear in both
|
|
126
|
+
assert "ignored" in captured_stderr and "already_set demo" in captured_stderr
|
|
127
|
+
|
|
128
|
+
|
|
129
|
+
def test_exception_matches():
|
|
130
|
+
assert m.exception_matches()
|
|
131
|
+
assert m.exception_matches_base()
|
|
132
|
+
assert m.modulenotfound_exception_matches_base()
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
def test_custom(msg):
|
|
136
|
+
# Can we catch a MyException?
|
|
137
|
+
with pytest.raises(m.MyException) as excinfo:
|
|
138
|
+
m.throws1()
|
|
139
|
+
assert msg(excinfo.value) == "this error should go to a custom type"
|
|
140
|
+
|
|
141
|
+
# Can we translate to standard Python exceptions?
|
|
142
|
+
with pytest.raises(RuntimeError) as excinfo:
|
|
143
|
+
m.throws2()
|
|
144
|
+
assert msg(excinfo.value) == "this error should go to a standard Python exception"
|
|
145
|
+
|
|
146
|
+
# Can we handle unknown exceptions?
|
|
147
|
+
with pytest.raises(RuntimeError) as excinfo:
|
|
148
|
+
m.throws3()
|
|
149
|
+
assert msg(excinfo.value) == "Caught an unknown exception!"
|
|
150
|
+
|
|
151
|
+
# Can we delegate to another handler by rethrowing?
|
|
152
|
+
with pytest.raises(m.MyException) as excinfo:
|
|
153
|
+
m.throws4()
|
|
154
|
+
assert msg(excinfo.value) == "this error is rethrown"
|
|
155
|
+
|
|
156
|
+
# Can we fall-through to the default handler?
|
|
157
|
+
with pytest.raises(RuntimeError) as excinfo:
|
|
158
|
+
m.throws_logic_error()
|
|
159
|
+
assert (
|
|
160
|
+
msg(excinfo.value) == "this error should fall through to the standard handler"
|
|
161
|
+
)
|
|
162
|
+
|
|
163
|
+
# OverFlow error translation.
|
|
164
|
+
with pytest.raises(OverflowError) as excinfo:
|
|
165
|
+
m.throws_overflow_error()
|
|
166
|
+
|
|
167
|
+
# Can we handle a helper-declared exception?
|
|
168
|
+
with pytest.raises(m.MyException5) as excinfo:
|
|
169
|
+
m.throws5()
|
|
170
|
+
assert msg(excinfo.value) == "this is a helper-defined translated exception"
|
|
171
|
+
|
|
172
|
+
# Exception subclassing:
|
|
173
|
+
with pytest.raises(m.MyException5) as excinfo:
|
|
174
|
+
m.throws5_1()
|
|
175
|
+
assert msg(excinfo.value) == "MyException5 subclass"
|
|
176
|
+
assert isinstance(excinfo.value, m.MyException5_1)
|
|
177
|
+
|
|
178
|
+
with pytest.raises(m.MyException5_1) as excinfo:
|
|
179
|
+
m.throws5_1()
|
|
180
|
+
assert msg(excinfo.value) == "MyException5 subclass"
|
|
181
|
+
|
|
182
|
+
with pytest.raises(m.MyException5) as excinfo:
|
|
183
|
+
try:
|
|
184
|
+
m.throws5()
|
|
185
|
+
except m.MyException5_1:
|
|
186
|
+
raise RuntimeError("Exception error: caught child from parent")
|
|
187
|
+
assert msg(excinfo.value) == "this is a helper-defined translated exception"
|
|
188
|
+
|
|
189
|
+
|
|
190
|
+
def test_nested_throws(capture):
|
|
191
|
+
"""Tests nested (e.g. C++ -> Python -> C++) exception handling"""
|
|
192
|
+
|
|
193
|
+
def throw_myex():
|
|
194
|
+
raise m.MyException("nested error")
|
|
195
|
+
|
|
196
|
+
def throw_myex5():
|
|
197
|
+
raise m.MyException5("nested error 5")
|
|
198
|
+
|
|
199
|
+
# In the comments below, the exception is caught in the first step, thrown in the last step
|
|
200
|
+
|
|
201
|
+
# C++ -> Python
|
|
202
|
+
with capture:
|
|
203
|
+
m.try_catch(m.MyException5, throw_myex5)
|
|
204
|
+
assert str(capture).startswith("MyException5: nested error 5")
|
|
205
|
+
|
|
206
|
+
# Python -> C++ -> Python
|
|
207
|
+
with pytest.raises(m.MyException) as excinfo:
|
|
208
|
+
m.try_catch(m.MyException5, throw_myex)
|
|
209
|
+
assert str(excinfo.value) == "nested error"
|
|
210
|
+
|
|
211
|
+
def pycatch(exctype, f, *args):
|
|
212
|
+
try:
|
|
213
|
+
f(*args)
|
|
214
|
+
except m.MyException as e:
|
|
215
|
+
print(e)
|
|
216
|
+
|
|
217
|
+
# C++ -> Python -> C++ -> Python
|
|
218
|
+
with capture:
|
|
219
|
+
m.try_catch(
|
|
220
|
+
m.MyException5,
|
|
221
|
+
pycatch,
|
|
222
|
+
m.MyException,
|
|
223
|
+
m.try_catch,
|
|
224
|
+
m.MyException,
|
|
225
|
+
throw_myex5,
|
|
226
|
+
)
|
|
227
|
+
assert str(capture).startswith("MyException5: nested error 5")
|
|
228
|
+
|
|
229
|
+
# C++ -> Python -> C++
|
|
230
|
+
with capture:
|
|
231
|
+
m.try_catch(m.MyException, pycatch, m.MyException5, m.throws4)
|
|
232
|
+
assert capture == "this error is rethrown"
|
|
233
|
+
|
|
234
|
+
# Python -> C++ -> Python -> C++
|
|
235
|
+
with pytest.raises(m.MyException5) as excinfo:
|
|
236
|
+
m.try_catch(m.MyException, pycatch, m.MyException, m.throws5)
|
|
237
|
+
assert str(excinfo.value) == "this is a helper-defined translated exception"
|
|
238
|
+
|
|
239
|
+
|
|
240
|
+
# This can often happen if you wrap a pybind11 class in a Python wrapper
|
|
241
|
+
def test_invalid_repr():
|
|
242
|
+
class MyRepr(object):
|
|
243
|
+
def __repr__(self):
|
|
244
|
+
raise AttributeError("Example error")
|
|
245
|
+
|
|
246
|
+
with pytest.raises(TypeError):
|
|
247
|
+
m.simple_bool_passthrough(MyRepr())
|
|
248
|
+
|
|
249
|
+
|
|
250
|
+
def test_local_translator(msg):
|
|
251
|
+
"""Tests that a local translator works and that the local translator from
|
|
252
|
+
the cross module is not applied"""
|
|
253
|
+
with pytest.raises(RuntimeError) as excinfo:
|
|
254
|
+
m.throws6()
|
|
255
|
+
assert msg(excinfo.value) == "MyException6 only handled in this module"
|
|
256
|
+
|
|
257
|
+
with pytest.raises(RuntimeError) as excinfo:
|
|
258
|
+
m.throws_local_error()
|
|
259
|
+
assert not isinstance(excinfo.value, KeyError)
|
|
260
|
+
assert msg(excinfo.value) == "never caught"
|
|
261
|
+
|
|
262
|
+
with pytest.raises(Exception) as excinfo:
|
|
263
|
+
m.throws_local_simple_error()
|
|
264
|
+
assert not isinstance(excinfo.value, cm.LocalSimpleException)
|
|
265
|
+
assert msg(excinfo.value) == "this mod"
|