xcoll 0.4.0__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 +2 -1
- xcoll/beam_elements/__init__.py +7 -1
- xcoll/beam_elements/absorber.py +2 -2
- xcoll/beam_elements/base.py +105 -67
- xcoll/beam_elements/blowup.py +198 -0
- xcoll/beam_elements/{collimators_src → elements_src}/black_absorber.h +21 -3
- xcoll/beam_elements/{collimators_src → elements_src}/black_crystal.h +20 -2
- 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 +19 -2
- xcoll/beam_elements/{collimators_src → elements_src}/everest_collimator.h +19 -3
- xcoll/beam_elements/{collimators_src → elements_src}/everest_crystal.h +30 -9
- xcoll/beam_elements/everest.py +5 -6
- xcoll/beam_elements/monitor.py +428 -0
- xcoll/colldb.py +103 -74
- xcoll/general.py +4 -4
- xcoll/initial_distribution.py +18 -6
- xcoll/install.py +3 -1
- xcoll/interaction_record/interaction_record.py +126 -80
- xcoll/interaction_record/interaction_record_src/interaction_record.h +43 -43
- xcoll/line_tools.py +8 -9
- xcoll/lossmap.py +48 -38
- xcoll/scattering_routines/everest/amorphous.h +4 -11
- xcoll/scattering_routines/everest/channeling.h +3 -8
- xcoll/scattering_routines/everest/everest.h +4 -1
- xcoll/scattering_routines/everest/jaw.h +4 -3
- xcoll/scattering_routines/everest/materials.py +35 -15
- xcoll/scattering_routines/everest/multiple_coulomb_scattering.h +2 -2
- xcoll/scattering_routines/everest/nuclear_interaction.h +1 -1
- 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/collimator_geometry.h +9 -10
- xcoll/scattering_routines/geometry/crystal_geometry.h +9 -6
- {xcoll-0.4.0.dist-info → xcoll-0.5.0.dist-info}/METADATA +1 -1
- xcoll-0.5.0.dist-info/RECORD +413 -0
- xcoll/scattering_routines/fluka/build_fluka_input.py +0 -58
- xcoll-0.4.0.dist-info/RECORD +0 -126
- {xcoll-0.4.0.dist-info → xcoll-0.5.0.dist-info}/LICENSE +0 -0
- {xcoll-0.4.0.dist-info → xcoll-0.5.0.dist-info}/NOTICE +0 -0
- {xcoll-0.4.0.dist-info → xcoll-0.5.0.dist-info}/WHEEL +0 -0
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
/*
|
|
2
|
+
tests/test_iostream.cpp -- Usage of scoped_output_redirect
|
|
3
|
+
|
|
4
|
+
Copyright (c) 2017 Henry F. Schreiner
|
|
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
|
+
#if defined(_MSC_VER) && _MSC_VER < 1910 // VS 2015's MSVC
|
|
11
|
+
# pragma warning(disable: 4702) // unreachable code in system header (xatomic.h(382))
|
|
12
|
+
#endif
|
|
13
|
+
|
|
14
|
+
#include <pybind11/iostream.h>
|
|
15
|
+
#include "pybind11_tests.h"
|
|
16
|
+
#include <atomic>
|
|
17
|
+
#include <iostream>
|
|
18
|
+
#include <mutex>
|
|
19
|
+
#include <string>
|
|
20
|
+
#include <thread>
|
|
21
|
+
|
|
22
|
+
void noisy_function(const std::string &msg, bool flush) {
|
|
23
|
+
|
|
24
|
+
std::cout << msg;
|
|
25
|
+
if (flush)
|
|
26
|
+
std::cout << std::flush;
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
void noisy_funct_dual(const std::string &msg, const std::string &emsg) {
|
|
30
|
+
std::cout << msg;
|
|
31
|
+
std::cerr << emsg;
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
// object to manage C++ thread
|
|
35
|
+
// simply repeatedly write to std::cerr until stopped
|
|
36
|
+
// redirect is called at some point to test the safety of scoped_estream_redirect
|
|
37
|
+
struct TestThread {
|
|
38
|
+
TestThread() : stop_{false} {
|
|
39
|
+
auto thread_f = [this] {
|
|
40
|
+
static std::mutex cout_mutex;
|
|
41
|
+
while (!stop_) {
|
|
42
|
+
{
|
|
43
|
+
// #HelpAppreciated: Work on iostream.h thread safety.
|
|
44
|
+
// Without this lock, the clang ThreadSanitizer (tsan) reliably reports a
|
|
45
|
+
// data race, and this test is predictably flakey on Windows.
|
|
46
|
+
// For more background see the discussion under
|
|
47
|
+
// https://github.com/pybind/pybind11/pull/2982 and
|
|
48
|
+
// https://github.com/pybind/pybind11/pull/2995.
|
|
49
|
+
const std::lock_guard<std::mutex> lock(cout_mutex);
|
|
50
|
+
std::cout << "x" << std::flush;
|
|
51
|
+
}
|
|
52
|
+
std::this_thread::sleep_for(std::chrono::microseconds(50));
|
|
53
|
+
} };
|
|
54
|
+
t_ = new std::thread(std::move(thread_f));
|
|
55
|
+
}
|
|
56
|
+
|
|
57
|
+
~TestThread() {
|
|
58
|
+
delete t_;
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
void stop() { stop_ = true; }
|
|
62
|
+
|
|
63
|
+
void join() const {
|
|
64
|
+
py::gil_scoped_release gil_lock;
|
|
65
|
+
t_->join();
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
void sleep() {
|
|
69
|
+
py::gil_scoped_release gil_lock;
|
|
70
|
+
std::this_thread::sleep_for(std::chrono::milliseconds(50));
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
std::thread *t_{nullptr};
|
|
74
|
+
std::atomic<bool> stop_;
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
TEST_SUBMODULE(iostream, m) {
|
|
79
|
+
|
|
80
|
+
add_ostream_redirect(m);
|
|
81
|
+
|
|
82
|
+
// test_evals
|
|
83
|
+
|
|
84
|
+
m.def("captured_output_default", [](const std::string &msg) {
|
|
85
|
+
py::scoped_ostream_redirect redir;
|
|
86
|
+
std::cout << msg << std::flush;
|
|
87
|
+
});
|
|
88
|
+
|
|
89
|
+
m.def("captured_output", [](const std::string &msg) {
|
|
90
|
+
py::scoped_ostream_redirect redir(std::cout, py::module_::import("sys").attr("stdout"));
|
|
91
|
+
std::cout << msg << std::flush;
|
|
92
|
+
});
|
|
93
|
+
|
|
94
|
+
m.def("guard_output", &noisy_function,
|
|
95
|
+
py::call_guard<py::scoped_ostream_redirect>(),
|
|
96
|
+
py::arg("msg"), py::arg("flush")=true);
|
|
97
|
+
|
|
98
|
+
m.def("captured_err", [](const std::string &msg) {
|
|
99
|
+
py::scoped_ostream_redirect redir(std::cerr, py::module_::import("sys").attr("stderr"));
|
|
100
|
+
std::cerr << msg << std::flush;
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
m.def("noisy_function", &noisy_function, py::arg("msg"), py::arg("flush") = true);
|
|
104
|
+
|
|
105
|
+
m.def("dual_guard", &noisy_funct_dual,
|
|
106
|
+
py::call_guard<py::scoped_ostream_redirect, py::scoped_estream_redirect>(),
|
|
107
|
+
py::arg("msg"), py::arg("emsg"));
|
|
108
|
+
|
|
109
|
+
m.def("raw_output", [](const std::string &msg) { std::cout << msg << std::flush; });
|
|
110
|
+
|
|
111
|
+
m.def("raw_err", [](const std::string &msg) { std::cerr << msg << std::flush; });
|
|
112
|
+
|
|
113
|
+
m.def("captured_dual", [](const std::string &msg, const std::string &emsg) {
|
|
114
|
+
py::scoped_ostream_redirect redirout(std::cout, py::module_::import("sys").attr("stdout"));
|
|
115
|
+
py::scoped_ostream_redirect redirerr(std::cerr, py::module_::import("sys").attr("stderr"));
|
|
116
|
+
std::cout << msg << std::flush;
|
|
117
|
+
std::cerr << emsg << std::flush;
|
|
118
|
+
});
|
|
119
|
+
|
|
120
|
+
py::class_<TestThread>(m, "TestThread")
|
|
121
|
+
.def(py::init<>())
|
|
122
|
+
.def("stop", &TestThread::stop)
|
|
123
|
+
.def("join", &TestThread::join)
|
|
124
|
+
.def("sleep", &TestThread::sleep);
|
|
125
|
+
}
|
|
@@ -0,0 +1,331 @@
|
|
|
1
|
+
# -*- coding: utf-8 -*-
|
|
2
|
+
import sys
|
|
3
|
+
from contextlib import contextmanager
|
|
4
|
+
|
|
5
|
+
from pybind11_tests import iostream as m
|
|
6
|
+
|
|
7
|
+
try:
|
|
8
|
+
# Python 3
|
|
9
|
+
from io import StringIO
|
|
10
|
+
except ImportError:
|
|
11
|
+
# Python 2
|
|
12
|
+
try:
|
|
13
|
+
from cStringIO import StringIO
|
|
14
|
+
except ImportError:
|
|
15
|
+
from StringIO import StringIO
|
|
16
|
+
|
|
17
|
+
try:
|
|
18
|
+
# Python 3.4
|
|
19
|
+
from contextlib import redirect_stdout
|
|
20
|
+
except ImportError:
|
|
21
|
+
|
|
22
|
+
@contextmanager
|
|
23
|
+
def redirect_stdout(target):
|
|
24
|
+
original = sys.stdout
|
|
25
|
+
sys.stdout = target
|
|
26
|
+
yield
|
|
27
|
+
sys.stdout = original
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
try:
|
|
31
|
+
# Python 3.5
|
|
32
|
+
from contextlib import redirect_stderr
|
|
33
|
+
except ImportError:
|
|
34
|
+
|
|
35
|
+
@contextmanager
|
|
36
|
+
def redirect_stderr(target):
|
|
37
|
+
original = sys.stderr
|
|
38
|
+
sys.stderr = target
|
|
39
|
+
yield
|
|
40
|
+
sys.stderr = original
|
|
41
|
+
|
|
42
|
+
|
|
43
|
+
def test_captured(capsys):
|
|
44
|
+
msg = "I've been redirected to Python, I hope!"
|
|
45
|
+
m.captured_output(msg)
|
|
46
|
+
stdout, stderr = capsys.readouterr()
|
|
47
|
+
assert stdout == msg
|
|
48
|
+
assert stderr == ""
|
|
49
|
+
|
|
50
|
+
m.captured_output_default(msg)
|
|
51
|
+
stdout, stderr = capsys.readouterr()
|
|
52
|
+
assert stdout == msg
|
|
53
|
+
assert stderr == ""
|
|
54
|
+
|
|
55
|
+
m.captured_err(msg)
|
|
56
|
+
stdout, stderr = capsys.readouterr()
|
|
57
|
+
assert stdout == ""
|
|
58
|
+
assert stderr == msg
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
def test_captured_large_string(capsys):
|
|
62
|
+
# Make this bigger than the buffer used on the C++ side: 1024 chars
|
|
63
|
+
msg = "I've been redirected to Python, I hope!"
|
|
64
|
+
msg = msg * (1024 // len(msg) + 1)
|
|
65
|
+
|
|
66
|
+
m.captured_output_default(msg)
|
|
67
|
+
stdout, stderr = capsys.readouterr()
|
|
68
|
+
assert stdout == msg
|
|
69
|
+
assert stderr == ""
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
def test_captured_utf8_2byte_offset0(capsys):
|
|
73
|
+
msg = "\u07FF"
|
|
74
|
+
msg = "" + msg * (1024 // len(msg) + 1)
|
|
75
|
+
|
|
76
|
+
m.captured_output_default(msg)
|
|
77
|
+
stdout, stderr = capsys.readouterr()
|
|
78
|
+
assert stdout == msg
|
|
79
|
+
assert stderr == ""
|
|
80
|
+
|
|
81
|
+
|
|
82
|
+
def test_captured_utf8_2byte_offset1(capsys):
|
|
83
|
+
msg = "\u07FF"
|
|
84
|
+
msg = "1" + msg * (1024 // len(msg) + 1)
|
|
85
|
+
|
|
86
|
+
m.captured_output_default(msg)
|
|
87
|
+
stdout, stderr = capsys.readouterr()
|
|
88
|
+
assert stdout == msg
|
|
89
|
+
assert stderr == ""
|
|
90
|
+
|
|
91
|
+
|
|
92
|
+
def test_captured_utf8_3byte_offset0(capsys):
|
|
93
|
+
msg = "\uFFFF"
|
|
94
|
+
msg = "" + msg * (1024 // len(msg) + 1)
|
|
95
|
+
|
|
96
|
+
m.captured_output_default(msg)
|
|
97
|
+
stdout, stderr = capsys.readouterr()
|
|
98
|
+
assert stdout == msg
|
|
99
|
+
assert stderr == ""
|
|
100
|
+
|
|
101
|
+
|
|
102
|
+
def test_captured_utf8_3byte_offset1(capsys):
|
|
103
|
+
msg = "\uFFFF"
|
|
104
|
+
msg = "1" + msg * (1024 // len(msg) + 1)
|
|
105
|
+
|
|
106
|
+
m.captured_output_default(msg)
|
|
107
|
+
stdout, stderr = capsys.readouterr()
|
|
108
|
+
assert stdout == msg
|
|
109
|
+
assert stderr == ""
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def test_captured_utf8_3byte_offset2(capsys):
|
|
113
|
+
msg = "\uFFFF"
|
|
114
|
+
msg = "12" + msg * (1024 // len(msg) + 1)
|
|
115
|
+
|
|
116
|
+
m.captured_output_default(msg)
|
|
117
|
+
stdout, stderr = capsys.readouterr()
|
|
118
|
+
assert stdout == msg
|
|
119
|
+
assert stderr == ""
|
|
120
|
+
|
|
121
|
+
|
|
122
|
+
def test_captured_utf8_4byte_offset0(capsys):
|
|
123
|
+
msg = "\U0010FFFF"
|
|
124
|
+
msg = "" + msg * (1024 // len(msg) + 1)
|
|
125
|
+
|
|
126
|
+
m.captured_output_default(msg)
|
|
127
|
+
stdout, stderr = capsys.readouterr()
|
|
128
|
+
assert stdout == msg
|
|
129
|
+
assert stderr == ""
|
|
130
|
+
|
|
131
|
+
|
|
132
|
+
def test_captured_utf8_4byte_offset1(capsys):
|
|
133
|
+
msg = "\U0010FFFF"
|
|
134
|
+
msg = "1" + msg * (1024 // len(msg) + 1)
|
|
135
|
+
|
|
136
|
+
m.captured_output_default(msg)
|
|
137
|
+
stdout, stderr = capsys.readouterr()
|
|
138
|
+
assert stdout == msg
|
|
139
|
+
assert stderr == ""
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
def test_captured_utf8_4byte_offset2(capsys):
|
|
143
|
+
msg = "\U0010FFFF"
|
|
144
|
+
msg = "12" + msg * (1024 // len(msg) + 1)
|
|
145
|
+
|
|
146
|
+
m.captured_output_default(msg)
|
|
147
|
+
stdout, stderr = capsys.readouterr()
|
|
148
|
+
assert stdout == msg
|
|
149
|
+
assert stderr == ""
|
|
150
|
+
|
|
151
|
+
|
|
152
|
+
def test_captured_utf8_4byte_offset3(capsys):
|
|
153
|
+
msg = "\U0010FFFF"
|
|
154
|
+
msg = "123" + msg * (1024 // len(msg) + 1)
|
|
155
|
+
|
|
156
|
+
m.captured_output_default(msg)
|
|
157
|
+
stdout, stderr = capsys.readouterr()
|
|
158
|
+
assert stdout == msg
|
|
159
|
+
assert stderr == ""
|
|
160
|
+
|
|
161
|
+
|
|
162
|
+
def test_guard_capture(capsys):
|
|
163
|
+
msg = "I've been redirected to Python, I hope!"
|
|
164
|
+
m.guard_output(msg)
|
|
165
|
+
stdout, stderr = capsys.readouterr()
|
|
166
|
+
assert stdout == msg
|
|
167
|
+
assert stderr == ""
|
|
168
|
+
|
|
169
|
+
|
|
170
|
+
def test_series_captured(capture):
|
|
171
|
+
with capture:
|
|
172
|
+
m.captured_output("a")
|
|
173
|
+
m.captured_output("b")
|
|
174
|
+
assert capture == "ab"
|
|
175
|
+
|
|
176
|
+
|
|
177
|
+
def test_flush(capfd):
|
|
178
|
+
msg = "(not flushed)"
|
|
179
|
+
msg2 = "(flushed)"
|
|
180
|
+
|
|
181
|
+
with m.ostream_redirect():
|
|
182
|
+
m.noisy_function(msg, flush=False)
|
|
183
|
+
stdout, stderr = capfd.readouterr()
|
|
184
|
+
assert stdout == ""
|
|
185
|
+
|
|
186
|
+
m.noisy_function(msg2, flush=True)
|
|
187
|
+
stdout, stderr = capfd.readouterr()
|
|
188
|
+
assert stdout == msg + msg2
|
|
189
|
+
|
|
190
|
+
m.noisy_function(msg, flush=False)
|
|
191
|
+
|
|
192
|
+
stdout, stderr = capfd.readouterr()
|
|
193
|
+
assert stdout == msg
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
def test_not_captured(capfd):
|
|
197
|
+
msg = "Something that should not show up in log"
|
|
198
|
+
stream = StringIO()
|
|
199
|
+
with redirect_stdout(stream):
|
|
200
|
+
m.raw_output(msg)
|
|
201
|
+
stdout, stderr = capfd.readouterr()
|
|
202
|
+
assert stdout == msg
|
|
203
|
+
assert stderr == ""
|
|
204
|
+
assert stream.getvalue() == ""
|
|
205
|
+
|
|
206
|
+
stream = StringIO()
|
|
207
|
+
with redirect_stdout(stream):
|
|
208
|
+
m.captured_output(msg)
|
|
209
|
+
stdout, stderr = capfd.readouterr()
|
|
210
|
+
assert stdout == ""
|
|
211
|
+
assert stderr == ""
|
|
212
|
+
assert stream.getvalue() == msg
|
|
213
|
+
|
|
214
|
+
|
|
215
|
+
def test_err(capfd):
|
|
216
|
+
msg = "Something that should not show up in log"
|
|
217
|
+
stream = StringIO()
|
|
218
|
+
with redirect_stderr(stream):
|
|
219
|
+
m.raw_err(msg)
|
|
220
|
+
stdout, stderr = capfd.readouterr()
|
|
221
|
+
assert stdout == ""
|
|
222
|
+
assert stderr == msg
|
|
223
|
+
assert stream.getvalue() == ""
|
|
224
|
+
|
|
225
|
+
stream = StringIO()
|
|
226
|
+
with redirect_stderr(stream):
|
|
227
|
+
m.captured_err(msg)
|
|
228
|
+
stdout, stderr = capfd.readouterr()
|
|
229
|
+
assert stdout == ""
|
|
230
|
+
assert stderr == ""
|
|
231
|
+
assert stream.getvalue() == msg
|
|
232
|
+
|
|
233
|
+
|
|
234
|
+
def test_multi_captured(capfd):
|
|
235
|
+
stream = StringIO()
|
|
236
|
+
with redirect_stdout(stream):
|
|
237
|
+
m.captured_output("a")
|
|
238
|
+
m.raw_output("b")
|
|
239
|
+
m.captured_output("c")
|
|
240
|
+
m.raw_output("d")
|
|
241
|
+
stdout, stderr = capfd.readouterr()
|
|
242
|
+
assert stdout == "bd"
|
|
243
|
+
assert stream.getvalue() == "ac"
|
|
244
|
+
|
|
245
|
+
|
|
246
|
+
def test_dual(capsys):
|
|
247
|
+
m.captured_dual("a", "b")
|
|
248
|
+
stdout, stderr = capsys.readouterr()
|
|
249
|
+
assert stdout == "a"
|
|
250
|
+
assert stderr == "b"
|
|
251
|
+
|
|
252
|
+
|
|
253
|
+
def test_redirect(capfd):
|
|
254
|
+
msg = "Should not be in log!"
|
|
255
|
+
stream = StringIO()
|
|
256
|
+
with redirect_stdout(stream):
|
|
257
|
+
m.raw_output(msg)
|
|
258
|
+
stdout, stderr = capfd.readouterr()
|
|
259
|
+
assert stdout == msg
|
|
260
|
+
assert stream.getvalue() == ""
|
|
261
|
+
|
|
262
|
+
stream = StringIO()
|
|
263
|
+
with redirect_stdout(stream):
|
|
264
|
+
with m.ostream_redirect():
|
|
265
|
+
m.raw_output(msg)
|
|
266
|
+
stdout, stderr = capfd.readouterr()
|
|
267
|
+
assert stdout == ""
|
|
268
|
+
assert stream.getvalue() == msg
|
|
269
|
+
|
|
270
|
+
stream = StringIO()
|
|
271
|
+
with redirect_stdout(stream):
|
|
272
|
+
m.raw_output(msg)
|
|
273
|
+
stdout, stderr = capfd.readouterr()
|
|
274
|
+
assert stdout == msg
|
|
275
|
+
assert stream.getvalue() == ""
|
|
276
|
+
|
|
277
|
+
|
|
278
|
+
def test_redirect_err(capfd):
|
|
279
|
+
msg = "StdOut"
|
|
280
|
+
msg2 = "StdErr"
|
|
281
|
+
|
|
282
|
+
stream = StringIO()
|
|
283
|
+
with redirect_stderr(stream):
|
|
284
|
+
with m.ostream_redirect(stdout=False):
|
|
285
|
+
m.raw_output(msg)
|
|
286
|
+
m.raw_err(msg2)
|
|
287
|
+
stdout, stderr = capfd.readouterr()
|
|
288
|
+
assert stdout == msg
|
|
289
|
+
assert stderr == ""
|
|
290
|
+
assert stream.getvalue() == msg2
|
|
291
|
+
|
|
292
|
+
|
|
293
|
+
def test_redirect_both(capfd):
|
|
294
|
+
msg = "StdOut"
|
|
295
|
+
msg2 = "StdErr"
|
|
296
|
+
|
|
297
|
+
stream = StringIO()
|
|
298
|
+
stream2 = StringIO()
|
|
299
|
+
with redirect_stdout(stream):
|
|
300
|
+
with redirect_stderr(stream2):
|
|
301
|
+
with m.ostream_redirect():
|
|
302
|
+
m.raw_output(msg)
|
|
303
|
+
m.raw_err(msg2)
|
|
304
|
+
stdout, stderr = capfd.readouterr()
|
|
305
|
+
assert stdout == ""
|
|
306
|
+
assert stderr == ""
|
|
307
|
+
assert stream.getvalue() == msg
|
|
308
|
+
assert stream2.getvalue() == msg2
|
|
309
|
+
|
|
310
|
+
|
|
311
|
+
def test_threading():
|
|
312
|
+
with m.ostream_redirect(stdout=True, stderr=False):
|
|
313
|
+
# start some threads
|
|
314
|
+
threads = []
|
|
315
|
+
|
|
316
|
+
# start some threads
|
|
317
|
+
for _j in range(20):
|
|
318
|
+
threads.append(m.TestThread())
|
|
319
|
+
|
|
320
|
+
# give the threads some time to fail
|
|
321
|
+
threads[0].sleep()
|
|
322
|
+
|
|
323
|
+
# stop all the threads
|
|
324
|
+
for t in threads:
|
|
325
|
+
t.stop()
|
|
326
|
+
|
|
327
|
+
for t in threads:
|
|
328
|
+
t.join()
|
|
329
|
+
|
|
330
|
+
# if a thread segfaults, we don't get here
|
|
331
|
+
assert True
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/*
|
|
2
|
+
tests/test_kwargs_and_defaults.cpp -- keyword arguments and default values
|
|
3
|
+
|
|
4
|
+
Copyright (c) 2016 Wenzel Jakob <wenzel.jakob@epfl.ch>
|
|
5
|
+
|
|
6
|
+
All rights reserved. Use of this source code is governed by a
|
|
7
|
+
BSD-style license that can be found in the LICENSE file.
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
#include "pybind11_tests.h"
|
|
11
|
+
#include "constructor_stats.h"
|
|
12
|
+
#include <pybind11/stl.h>
|
|
13
|
+
|
|
14
|
+
#include <utility>
|
|
15
|
+
|
|
16
|
+
TEST_SUBMODULE(kwargs_and_defaults, m) {
|
|
17
|
+
auto kw_func = [](int x, int y) { return "x=" + std::to_string(x) + ", y=" + std::to_string(y); };
|
|
18
|
+
|
|
19
|
+
// test_named_arguments
|
|
20
|
+
m.def("kw_func0", kw_func);
|
|
21
|
+
m.def("kw_func1", kw_func, py::arg("x"), py::arg("y"));
|
|
22
|
+
m.def("kw_func2", kw_func, py::arg("x") = 100, py::arg("y") = 200);
|
|
23
|
+
m.def("kw_func3", [](const char *) { }, py::arg("data") = std::string("Hello world!"));
|
|
24
|
+
|
|
25
|
+
/* A fancier default argument */
|
|
26
|
+
std::vector<int> list{{13, 17}};
|
|
27
|
+
m.def("kw_func4", [](const std::vector<int> &entries) {
|
|
28
|
+
std::string ret = "{";
|
|
29
|
+
for (int i : entries)
|
|
30
|
+
ret += std::to_string(i) + " ";
|
|
31
|
+
ret.back() = '}';
|
|
32
|
+
return ret;
|
|
33
|
+
}, py::arg("myList") = list);
|
|
34
|
+
|
|
35
|
+
m.def("kw_func_udl", kw_func, "x"_a, "y"_a=300);
|
|
36
|
+
m.def("kw_func_udl_z", kw_func, "x"_a, "y"_a=0);
|
|
37
|
+
|
|
38
|
+
// test_args_and_kwargs
|
|
39
|
+
m.def("args_function", [](py::args args) -> py::tuple {
|
|
40
|
+
return std::move(args);
|
|
41
|
+
});
|
|
42
|
+
m.def("args_kwargs_function", [](const py::args &args, const py::kwargs &kwargs) {
|
|
43
|
+
return py::make_tuple(args, kwargs);
|
|
44
|
+
});
|
|
45
|
+
|
|
46
|
+
// test_mixed_args_and_kwargs
|
|
47
|
+
m.def("mixed_plus_args",
|
|
48
|
+
[](int i, double j, const py::args &args) { return py::make_tuple(i, j, args); });
|
|
49
|
+
m.def("mixed_plus_kwargs",
|
|
50
|
+
[](int i, double j, const py::kwargs &kwargs) { return py::make_tuple(i, j, kwargs); });
|
|
51
|
+
auto mixed_plus_both = [](int i, double j, const py::args &args, const py::kwargs &kwargs) {
|
|
52
|
+
return py::make_tuple(i, j, args, kwargs);
|
|
53
|
+
};
|
|
54
|
+
m.def("mixed_plus_args_kwargs", mixed_plus_both);
|
|
55
|
+
|
|
56
|
+
m.def("mixed_plus_args_kwargs_defaults", mixed_plus_both,
|
|
57
|
+
py::arg("i") = 1, py::arg("j") = 3.14159);
|
|
58
|
+
|
|
59
|
+
// test_args_refcount
|
|
60
|
+
// PyPy needs a garbage collection to get the reference count values to match CPython's behaviour
|
|
61
|
+
#ifdef PYPY_VERSION
|
|
62
|
+
#define GC_IF_NEEDED ConstructorStats::gc()
|
|
63
|
+
#else
|
|
64
|
+
#define GC_IF_NEEDED
|
|
65
|
+
#endif
|
|
66
|
+
m.def("arg_refcount_h", [](py::handle h) { GC_IF_NEEDED; return h.ref_count(); });
|
|
67
|
+
m.def("arg_refcount_h", [](py::handle h, py::handle, py::handle) { GC_IF_NEEDED; return h.ref_count(); });
|
|
68
|
+
m.def("arg_refcount_o", [](const py::object &o) {
|
|
69
|
+
GC_IF_NEEDED;
|
|
70
|
+
return o.ref_count();
|
|
71
|
+
});
|
|
72
|
+
m.def("args_refcount", [](py::args a) {
|
|
73
|
+
GC_IF_NEEDED;
|
|
74
|
+
py::tuple t(a.size());
|
|
75
|
+
for (size_t i = 0; i < a.size(); i++)
|
|
76
|
+
// Use raw Python API here to avoid an extra, intermediate incref on the tuple item:
|
|
77
|
+
t[i] = (int) Py_REFCNT(PyTuple_GET_ITEM(a.ptr(), static_cast<py::ssize_t>(i)));
|
|
78
|
+
return t;
|
|
79
|
+
});
|
|
80
|
+
m.def("mixed_args_refcount", [](const py::object &o, py::args a) {
|
|
81
|
+
GC_IF_NEEDED;
|
|
82
|
+
py::tuple t(a.size() + 1);
|
|
83
|
+
t[0] = o.ref_count();
|
|
84
|
+
for (size_t i = 0; i < a.size(); i++)
|
|
85
|
+
// Use raw Python API here to avoid an extra, intermediate incref on the tuple item:
|
|
86
|
+
t[i + 1] = (int) Py_REFCNT(PyTuple_GET_ITEM(a.ptr(), static_cast<py::ssize_t>(i)));
|
|
87
|
+
return t;
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
// pybind11 won't allow these to be bound: args and kwargs, if present, must be at the end.
|
|
91
|
+
// Uncomment these to test that the static_assert is indeed working:
|
|
92
|
+
// m.def("bad_args1", [](py::args, int) {});
|
|
93
|
+
// m.def("bad_args2", [](py::kwargs, int) {});
|
|
94
|
+
// m.def("bad_args3", [](py::kwargs, py::args) {});
|
|
95
|
+
// m.def("bad_args4", [](py::args, int, py::kwargs) {});
|
|
96
|
+
// m.def("bad_args5", [](py::args, py::kwargs, int) {});
|
|
97
|
+
// m.def("bad_args6", [](py::args, py::args) {});
|
|
98
|
+
// m.def("bad_args7", [](py::kwargs, py::kwargs) {});
|
|
99
|
+
|
|
100
|
+
// test_keyword_only_args
|
|
101
|
+
m.def("kw_only_all", [](int i, int j) { return py::make_tuple(i, j); },
|
|
102
|
+
py::kw_only(), py::arg("i"), py::arg("j"));
|
|
103
|
+
m.def("kw_only_some", [](int i, int j, int k) { return py::make_tuple(i, j, k); },
|
|
104
|
+
py::arg(), py::kw_only(), py::arg("j"), py::arg("k"));
|
|
105
|
+
m.def("kw_only_with_defaults", [](int i, int j, int k, int z) { return py::make_tuple(i, j, k, z); },
|
|
106
|
+
py::arg() = 3, "j"_a = 4, py::kw_only(), "k"_a = 5, "z"_a);
|
|
107
|
+
m.def("kw_only_mixed", [](int i, int j) { return py::make_tuple(i, j); },
|
|
108
|
+
"i"_a, py::kw_only(), "j"_a);
|
|
109
|
+
m.def(
|
|
110
|
+
"kw_only_plus_more",
|
|
111
|
+
[](int i, int j, int k, const py::kwargs &kwargs) {
|
|
112
|
+
return py::make_tuple(i, j, k, kwargs);
|
|
113
|
+
},
|
|
114
|
+
py::arg() /* positional */,
|
|
115
|
+
py::arg("j") = -1 /* both */,
|
|
116
|
+
py::kw_only(),
|
|
117
|
+
py::arg("k") /* kw-only */);
|
|
118
|
+
|
|
119
|
+
m.def("register_invalid_kw_only", [](py::module_ m) {
|
|
120
|
+
m.def("bad_kw_only", [](int i, int j) { return py::make_tuple(i, j); },
|
|
121
|
+
py::kw_only(), py::arg() /* invalid unnamed argument */, "j"_a);
|
|
122
|
+
});
|
|
123
|
+
|
|
124
|
+
// test_positional_only_args
|
|
125
|
+
m.def("pos_only_all", [](int i, int j) { return py::make_tuple(i, j); },
|
|
126
|
+
py::arg("i"), py::arg("j"), py::pos_only());
|
|
127
|
+
m.def("pos_only_mix", [](int i, int j) { return py::make_tuple(i, j); },
|
|
128
|
+
py::arg("i"), py::pos_only(), py::arg("j"));
|
|
129
|
+
m.def("pos_kw_only_mix", [](int i, int j, int k) { return py::make_tuple(i, j, k); },
|
|
130
|
+
py::arg("i"), py::pos_only(), py::arg("j"), py::kw_only(), py::arg("k"));
|
|
131
|
+
m.def("pos_only_def_mix", [](int i, int j, int k) { return py::make_tuple(i, j, k); },
|
|
132
|
+
py::arg("i"), py::arg("j") = 2, py::pos_only(), py::arg("k") = 3);
|
|
133
|
+
|
|
134
|
+
|
|
135
|
+
// These should fail to compile:
|
|
136
|
+
// argument annotations are required when using kw_only
|
|
137
|
+
// m.def("bad_kw_only1", [](int) {}, py::kw_only());
|
|
138
|
+
// can't specify both `py::kw_only` and a `py::args` argument
|
|
139
|
+
// m.def("bad_kw_only2", [](int i, py::args) {}, py::kw_only(), "i"_a);
|
|
140
|
+
|
|
141
|
+
// test_function_signatures (along with most of the above)
|
|
142
|
+
struct KWClass { void foo(int, float) {} };
|
|
143
|
+
py::class_<KWClass>(m, "KWClass")
|
|
144
|
+
.def("foo0", &KWClass::foo)
|
|
145
|
+
.def("foo1", &KWClass::foo, "x"_a, "y"_a);
|
|
146
|
+
|
|
147
|
+
// Make sure a class (not an instance) can be used as a default argument.
|
|
148
|
+
// The return value doesn't matter, only that the module is importable.
|
|
149
|
+
m.def(
|
|
150
|
+
"class_default_argument",
|
|
151
|
+
[](py::object a) { return py::repr(std::move(a)); },
|
|
152
|
+
"a"_a = py::module_::import("decimal").attr("Decimal"));
|
|
153
|
+
}
|