xcoll 0.5.11__py3-none-any.whl → 0.6.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 +5 -18
- xcoll/beam_elements/__init__.py +1 -0
- xcoll/beam_elements/absorber.py +12 -2
- xcoll/beam_elements/base.py +162 -62
- xcoll/beam_elements/blowup.py +1 -0
- xcoll/beam_elements/elements_src/black_absorber.h +57 -58
- xcoll/beam_elements/elements_src/black_crystal.h +49 -50
- xcoll/beam_elements/elements_src/everest_block.h +21 -11
- xcoll/beam_elements/elements_src/everest_collimator.h +100 -91
- xcoll/beam_elements/elements_src/everest_crystal.h +145 -140
- xcoll/beam_elements/elements_src/transparent_collimator.h +126 -0
- xcoll/beam_elements/elements_src/transparent_crystal.h +118 -0
- xcoll/beam_elements/everest.py +16 -5
- xcoll/beam_elements/monitor.py +1 -0
- xcoll/beam_elements/transparent.py +83 -0
- xcoll/colldb.py +15 -6
- xcoll/general.py +1 -1
- xcoll/headers/particle_states.py +51 -0
- xcoll/initial_distribution.py +129 -103
- xcoll/interaction_record/interaction_record.py +2 -1
- xcoll/interaction_record/interaction_types.py +2 -2
- xcoll/line_tools.py +163 -74
- xcoll/lossmap.py +519 -127
- xcoll/plot.py +109 -0
- xcoll/rf_sweep.py +6 -0
- xcoll/scattering_routines/engine.py +600 -0
- xcoll/scattering_routines/environment.py +297 -0
- xcoll/scattering_routines/everest/amorphous.h +95 -71
- xcoll/scattering_routines/everest/{channeling.h → channelling.h} +121 -112
- xcoll/scattering_routines/everest/constants.h +1 -1
- xcoll/scattering_routines/everest/crystal_parameters.h +9 -9
- xcoll/scattering_routines/everest/everest.h +8 -3
- xcoll/scattering_routines/everest/everest.py +2 -1
- xcoll/scattering_routines/everest/ionisation_loss.h +141 -0
- xcoll/scattering_routines/everest/jaw.h +19 -24
- xcoll/scattering_routines/everest/materials.py +2 -0
- xcoll/scattering_routines/everest/multiple_coulomb_scattering.h +2 -2
- xcoll/scattering_routines/everest/nuclear_interaction.h +35 -19
- xcoll/scattering_routines/everest/properties.h +4 -73
- xcoll/xaux.py +73 -0
- {xcoll-0.5.11.dist-info → xcoll-0.6.0.dist-info}/METADATA +5 -5
- xcoll-0.6.0.dist-info/RECORD +135 -0
- xcoll/_manager.py +0 -22
- xcoll/headers/particle_states.h +0 -25
- xcoll/install.py +0 -35
- xcoll/scattering_routines/geant4/collimasim/.git +0 -1
- xcoll/scattering_routines/geant4/collimasim/.gitignore +0 -12
- xcoll/scattering_routines/geant4/collimasim/.gitmodules +0 -3
- xcoll/scattering_routines/geant4/collimasim/CMakeLists.txt +0 -26
- xcoll/scattering_routines/geant4/collimasim/README.md +0 -21
- xcoll/scattering_routines/geant4/collimasim/docs/Makefile +0 -20
- xcoll/scattering_routines/geant4/collimasim/docs/make.bat +0 -35
- xcoll/scattering_routines/geant4/collimasim/docs/source/collimasim.rst +0 -10
- xcoll/scattering_routines/geant4/collimasim/docs/source/conf.py +0 -59
- xcoll/scattering_routines/geant4/collimasim/docs/source/index.rst +0 -26
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.appveyor.yml +0 -37
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.clang-format +0 -19
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.clang-tidy +0 -65
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.cmake-format.yaml +0 -73
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.git +0 -1
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/CODEOWNERS +0 -9
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/CONTRIBUTING.md +0 -386
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/ISSUE_TEMPLATE/bug-report.yml +0 -45
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/ISSUE_TEMPLATE/config.yml +0 -8
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/dependabot.yml +0 -16
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/labeler.yml +0 -8
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/labeler_merged.yml +0 -3
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/pull_request_template.md +0 -19
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/workflows/ci.yml +0 -969
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/workflows/configure.yml +0 -84
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/workflows/format.yml +0 -48
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/workflows/labeler.yml +0 -16
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.github/workflows/pip.yml +0 -103
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.gitignore +0 -45
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.pre-commit-config.yaml +0 -151
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/.readthedocs.yml +0 -3
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/CMakeLists.txt +0 -297
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/LICENSE +0 -29
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/MANIFEST.in +0 -6
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/README.rst +0 -180
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/Doxyfile +0 -23
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/Makefile +0 -192
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/_static/theme_overrides.css +0 -11
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/chrono.rst +0 -81
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/custom.rst +0 -93
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/eigen.rst +0 -310
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/functional.rst +0 -109
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/index.rst +0 -43
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/overview.rst +0 -171
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/stl.rst +0 -251
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/cast/strings.rst +0 -305
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/classes.rst +0 -1297
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/embedding.rst +0 -262
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/exceptions.rst +0 -396
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/functions.rst +0 -568
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/misc.rst +0 -337
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/pycpp/index.rst +0 -13
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/pycpp/numpy.rst +0 -463
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/pycpp/object.rst +0 -286
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/pycpp/utilities.rst +0 -155
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/advanced/smart_ptrs.rst +0 -174
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/basics.rst +0 -308
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/benchmark.py +0 -91
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/benchmark.rst +0 -95
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/changelog.rst +0 -2050
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/classes.rst +0 -542
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/cmake/index.rst +0 -8
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/compiling.rst +0 -648
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/conf.py +0 -381
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/faq.rst +0 -343
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/index.rst +0 -48
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/installing.rst +0 -105
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/limitations.rst +0 -72
- 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 +0 -427
- 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 +0 -427
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/reference.rst +0 -130
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/release.rst +0 -96
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/requirements.txt +0 -8
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/docs/upgrade.rst +0 -548
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/attr.h +0 -605
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/buffer_info.h +0 -144
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/cast.h +0 -1432
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/chrono.h +0 -213
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/common.h +0 -2
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/complex.h +0 -65
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/class.h +0 -709
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/common.h +0 -1021
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/descr.h +0 -104
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/init.h +0 -346
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/internals.h +0 -467
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/type_caster_base.h +0 -978
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/detail/typeid.h +0 -55
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/eigen.h +0 -606
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/embed.h +0 -284
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/eval.h +0 -163
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/functional.h +0 -121
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/gil.h +0 -193
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/iostream.h +0 -275
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/numpy.h +0 -1741
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/operators.h +0 -163
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/options.h +0 -65
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/pybind11.h +0 -2497
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/pytypes.h +0 -1879
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/stl/filesystem.h +0 -103
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/stl.h +0 -375
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/include/pybind11/stl_bind.h +0 -747
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/noxfile.py +0 -88
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/__init__.py +0 -11
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/__main__.py +0 -52
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/_version.py +0 -12
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/_version.pyi +0 -6
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/commands.py +0 -21
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/py.typed +0 -0
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/setup_helpers.py +0 -482
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pybind11/setup_helpers.pyi +0 -63
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/pyproject.toml +0 -41
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/setup.cfg +0 -56
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/setup.py +0 -155
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/CMakeLists.txt +0 -503
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/conftest.py +0 -208
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/constructor_stats.h +0 -275
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/cross_module_gil_utils.cpp +0 -73
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/env.py +0 -33
- 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 +0 -279
- 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 +0 -143
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/local_bindings.h +0 -85
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/object.h +0 -179
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/pybind11_cross_module_tests.cpp +0 -151
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/pybind11_tests.cpp +0 -91
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/pybind11_tests.h +0 -85
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/pytest.ini +0 -19
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/requirements.txt +0 -12
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_async.cpp +0 -26
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_async.py +0 -25
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_buffers.cpp +0 -216
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_buffers.py +0 -163
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_builtin_casters.cpp +0 -286
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_builtin_casters.py +0 -536
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_call_policies.cpp +0 -107
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_call_policies.py +0 -248
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_callbacks.cpp +0 -227
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_callbacks.py +0 -202
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_chrono.cpp +0 -84
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_chrono.py +0 -210
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_class.cpp +0 -550
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_class.py +0 -473
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/CMakeLists.txt +0 -84
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/embed.cpp +0 -21
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/installed_embed/CMakeLists.txt +0 -28
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/installed_function/CMakeLists.txt +0 -39
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/installed_target/CMakeLists.txt +0 -46
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/main.cpp +0 -6
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/subdirectory_embed/CMakeLists.txt +0 -41
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/subdirectory_function/CMakeLists.txt +0 -35
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/subdirectory_target/CMakeLists.txt +0 -41
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_cmake_build/test.py +0 -10
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_constants_and_functions.cpp +0 -165
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_constants_and_functions.py +0 -53
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_copy_move.cpp +0 -238
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_copy_move.py +0 -126
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_custom_type_casters.cpp +0 -141
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_custom_type_casters.py +0 -117
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_custom_type_setup.cpp +0 -41
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_custom_type_setup.py +0 -50
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_docstring_options.cpp +0 -69
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_docstring_options.py +0 -42
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_eigen.cpp +0 -348
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_eigen.py +0 -771
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_embed/CMakeLists.txt +0 -47
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_embed/catch.cpp +0 -22
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_embed/external_module.cpp +0 -23
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_embed/test_interpreter.cpp +0 -326
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_embed/test_interpreter.py +0 -15
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_enum.cpp +0 -148
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_enum.py +0 -272
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_eval.cpp +0 -119
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_eval.py +0 -51
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_eval_call.py +0 -5
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_exceptions.cpp +0 -285
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_exceptions.h +0 -12
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_exceptions.py +0 -265
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_factory_constructors.cpp +0 -397
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_factory_constructors.py +0 -520
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_gil_scoped.cpp +0 -49
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_gil_scoped.py +0 -94
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_iostream.cpp +0 -125
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_iostream.py +0 -331
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_kwargs_and_defaults.cpp +0 -153
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_kwargs_and_defaults.py +0 -284
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_local_bindings.cpp +0 -107
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_local_bindings.py +0 -257
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_methods_and_attributes.cpp +0 -412
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_methods_and_attributes.py +0 -517
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_modules.cpp +0 -102
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_modules.py +0 -92
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_multiple_inheritance.cpp +0 -233
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_multiple_inheritance.py +0 -360
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_numpy_array.cpp +0 -472
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_numpy_array.py +0 -593
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_numpy_dtypes.cpp +0 -524
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_numpy_dtypes.py +0 -441
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_numpy_vectorize.cpp +0 -103
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_numpy_vectorize.py +0 -267
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_opaque_types.cpp +0 -73
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_opaque_types.py +0 -59
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_operator_overloading.cpp +0 -235
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_operator_overloading.py +0 -146
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_pickling.cpp +0 -189
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_pickling.py +0 -82
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_pytypes.cpp +0 -560
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_pytypes.py +0 -651
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_sequences_and_iterators.cpp +0 -500
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_sequences_and_iterators.py +0 -253
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_smart_ptr.cpp +0 -452
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_smart_ptr.py +0 -318
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_stl.cpp +0 -342
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_stl.py +0 -291
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_stl_binders.cpp +0 -131
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_stl_binders.py +0 -318
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_tagbased_polymorphic.cpp +0 -144
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_tagbased_polymorphic.py +0 -29
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_thread.cpp +0 -66
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_thread.py +0 -44
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_union.cpp +0 -22
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_union.py +0 -9
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_virtual_functions.cpp +0 -510
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/test_virtual_functions.py +0 -408
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/valgrind-numpy-scipy.supp +0 -140
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tests/valgrind-python.supp +0 -117
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/FindCatch.cmake +0 -70
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/FindEigen3.cmake +0 -86
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/FindPythonLibsNew.cmake +0 -257
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/check-style.sh +0 -44
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/cmake_uninstall.cmake.in +0 -23
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/libsize.py +0 -39
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/make_changelog.py +0 -64
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/pybind11Common.cmake +0 -402
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/pybind11Config.cmake.in +0 -233
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/pybind11NewTools.cmake +0 -276
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/pybind11Tools.cmake +0 -214
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/pyproject.toml +0 -3
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/setup_global.py.in +0 -65
- xcoll/scattering_routines/geant4/collimasim/lib/pybind11/tools/setup_main.py.in +0 -41
- xcoll/scattering_routines/geant4/collimasim/pyproject.toml +0 -8
- xcoll/scattering_routines/geant4/collimasim/setup.py +0 -144
- xcoll/scattering_routines/geant4/collimasim/src/collimasim/BDSPyATInterface.cpp +0 -403
- xcoll/scattering_routines/geant4/collimasim/src/collimasim/BDSPyATInterface.hh +0 -100
- xcoll/scattering_routines/geant4/collimasim/src/collimasim/BDSXtrackInterface.cpp +0 -763
- xcoll/scattering_routines/geant4/collimasim/src/collimasim/BDSXtrackInterface.hh +0 -118
- xcoll/scattering_routines/geant4/collimasim/src/collimasim/__init__.py +0 -8
- xcoll/scattering_routines/geant4/collimasim/src/collimasim/bindings.cpp +0 -63
- xcoll/scattering_routines/geant4/collimasim/src/collimasim/pyCollimatorPass.py +0 -142
- xcoll/scattering_routines/geant4/collimasim/src/collimasim/xtrack_collimator.py +0 -556
- xcoll/scattering_routines/geant4/collimasim/src/collimasim.egg-info/PKG-INFO +0 -6
- xcoll/scattering_routines/geant4/collimasim/src/collimasim.egg-info/SOURCES.txt +0 -24
- xcoll/scattering_routines/geant4/collimasim/src/collimasim.egg-info/dependency_links.txt +0 -1
- xcoll/scattering_routines/geant4/collimasim/src/collimasim.egg-info/not-zip-safe +0 -1
- xcoll/scattering_routines/geant4/collimasim/src/collimasim.egg-info/top_level.txt +0 -1
- xcoll/scattering_routines/geant4/collimasim/tests/README.md +0 -25
- xcoll/scattering_routines/geant4/collimasim/tests/resources/CollDB_forions.dat +0 -25
- xcoll/scattering_routines/geant4/collimasim/tests/resources/CollDB_new_example.dat +0 -18
- xcoll/scattering_routines/geant4/collimasim/tests/resources/CollDB_old_example.dat +0 -68
- xcoll/scattering_routines/geant4/collimasim/tests/resources/CollDB_testing.dat +0 -15
- xcoll/scattering_routines/geant4/collimasim/tests/resources/CollDB_yaml_example.yaml +0 -110
- xcoll/scattering_routines/geant4/collimasim/tests/resources/collgaps.dat +0 -7
- xcoll/scattering_routines/geant4/collimasim/tests/resources/collgaps_pyat_test.dat +0 -3
- xcoll/scattering_routines/geant4/collimasim/tests/resources/collonly_twiss_file_example.tfs +0 -54
- xcoll/scattering_routines/geant4/collimasim/tests/resources/settings.gmad +0 -3
- xcoll/scattering_routines/geant4/collimasim/tests/resources/settings_black_absorber.gmad +0 -3
- xcoll/scattering_routines/geant4/collimasim/tests/resources/settings_ions.gmad +0 -5
- xcoll/scattering_routines/geant4/collimasim/tests/resources/twiss_file_testing.tfs +0 -51
- xcoll/scattering_routines/geant4/collimasim/tests/test_pyat.py +0 -65
- xcoll/scattering_routines/geant4/collimasim/tests/test_pyat_passmethod.py +0 -59
- xcoll/scattering_routines/geant4/collimasim/tests/test_pyat_tracking.py +0 -102
- xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack.py +0 -75
- xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_angle.py +0 -74
- xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_colldb_load.py +0 -84
- xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_interaction.py +0 -159
- xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_interaction_ion.py +0 -99
- xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_ions.py +0 -78
- xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_lost_energy.py +0 -88
- xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_tilt.py +0 -80
- xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_tracking.py +0 -97
- xcoll/scattering_routines/geant4/collimasim/tests/test_xtrack_tracking_ions.py +0 -96
- xcoll-0.5.11.dist-info/RECORD +0 -413
- {xcoll-0.5.11.dist-info → xcoll-0.6.0.dist-info}/LICENSE +0 -0
- {xcoll-0.5.11.dist-info → xcoll-0.6.0.dist-info}/NOTICE +0 -0
- {xcoll-0.5.11.dist-info → xcoll-0.6.0.dist-info}/WHEEL +0 -0
|
@@ -1,308 +0,0 @@
|
|
|
1
|
-
.. _basics:
|
|
2
|
-
|
|
3
|
-
First steps
|
|
4
|
-
###########
|
|
5
|
-
|
|
6
|
-
This sections demonstrates the basic features of pybind11. Before getting
|
|
7
|
-
started, make sure that development environment is set up to compile the
|
|
8
|
-
included set of test cases.
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
Compiling the test cases
|
|
12
|
-
========================
|
|
13
|
-
|
|
14
|
-
Linux/macOS
|
|
15
|
-
-----------
|
|
16
|
-
|
|
17
|
-
On Linux you'll need to install the **python-dev** or **python3-dev** packages as
|
|
18
|
-
well as **cmake**. On macOS, the included python version works out of the box,
|
|
19
|
-
but **cmake** must still be installed.
|
|
20
|
-
|
|
21
|
-
After installing the prerequisites, run
|
|
22
|
-
|
|
23
|
-
.. code-block:: bash
|
|
24
|
-
|
|
25
|
-
mkdir build
|
|
26
|
-
cd build
|
|
27
|
-
cmake ..
|
|
28
|
-
make check -j 4
|
|
29
|
-
|
|
30
|
-
The last line will both compile and run the tests.
|
|
31
|
-
|
|
32
|
-
Windows
|
|
33
|
-
-------
|
|
34
|
-
|
|
35
|
-
On Windows, only **Visual Studio 2015** and newer are supported since pybind11 relies
|
|
36
|
-
on various C++11 language features that break older versions of Visual Studio.
|
|
37
|
-
|
|
38
|
-
.. Note::
|
|
39
|
-
|
|
40
|
-
To use the C++17 in Visual Studio 2017 (MSVC 14.1), pybind11 requires the flag
|
|
41
|
-
``/permissive-`` to be passed to the compiler `to enforce standard conformance`_. When
|
|
42
|
-
building with Visual Studio 2019, this is not strictly necessary, but still advised.
|
|
43
|
-
|
|
44
|
-
.. _`to enforce standard conformance`: https://docs.microsoft.com/en-us/cpp/build/reference/permissive-standards-conformance?view=vs-2017
|
|
45
|
-
|
|
46
|
-
To compile and run the tests:
|
|
47
|
-
|
|
48
|
-
.. code-block:: batch
|
|
49
|
-
|
|
50
|
-
mkdir build
|
|
51
|
-
cd build
|
|
52
|
-
cmake ..
|
|
53
|
-
cmake --build . --config Release --target check
|
|
54
|
-
|
|
55
|
-
This will create a Visual Studio project, compile and run the target, all from the
|
|
56
|
-
command line.
|
|
57
|
-
|
|
58
|
-
.. Note::
|
|
59
|
-
|
|
60
|
-
If all tests fail, make sure that the Python binary and the testcases are compiled
|
|
61
|
-
for the same processor type and bitness (i.e. either **i386** or **x86_64**). You
|
|
62
|
-
can specify **x86_64** as the target architecture for the generated Visual Studio
|
|
63
|
-
project using ``cmake -A x64 ..``.
|
|
64
|
-
|
|
65
|
-
.. seealso::
|
|
66
|
-
|
|
67
|
-
Advanced users who are already familiar with Boost.Python may want to skip
|
|
68
|
-
the tutorial and look at the test cases in the :file:`tests` directory,
|
|
69
|
-
which exercise all features of pybind11.
|
|
70
|
-
|
|
71
|
-
Header and namespace conventions
|
|
72
|
-
================================
|
|
73
|
-
|
|
74
|
-
For brevity, all code examples assume that the following two lines are present:
|
|
75
|
-
|
|
76
|
-
.. code-block:: cpp
|
|
77
|
-
|
|
78
|
-
#include <pybind11/pybind11.h>
|
|
79
|
-
|
|
80
|
-
namespace py = pybind11;
|
|
81
|
-
|
|
82
|
-
Some features may require additional headers, but those will be specified as needed.
|
|
83
|
-
|
|
84
|
-
.. _simple_example:
|
|
85
|
-
|
|
86
|
-
Creating bindings for a simple function
|
|
87
|
-
=======================================
|
|
88
|
-
|
|
89
|
-
Let's start by creating Python bindings for an extremely simple function, which
|
|
90
|
-
adds two numbers and returns their result:
|
|
91
|
-
|
|
92
|
-
.. code-block:: cpp
|
|
93
|
-
|
|
94
|
-
int add(int i, int j) {
|
|
95
|
-
return i + j;
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
For simplicity [#f1]_, we'll put both this function and the binding code into
|
|
99
|
-
a file named :file:`example.cpp` with the following contents:
|
|
100
|
-
|
|
101
|
-
.. code-block:: cpp
|
|
102
|
-
|
|
103
|
-
#include <pybind11/pybind11.h>
|
|
104
|
-
|
|
105
|
-
int add(int i, int j) {
|
|
106
|
-
return i + j;
|
|
107
|
-
}
|
|
108
|
-
|
|
109
|
-
PYBIND11_MODULE(example, m) {
|
|
110
|
-
m.doc() = "pybind11 example plugin"; // optional module docstring
|
|
111
|
-
|
|
112
|
-
m.def("add", &add, "A function which adds two numbers");
|
|
113
|
-
}
|
|
114
|
-
|
|
115
|
-
.. [#f1] In practice, implementation and binding code will generally be located
|
|
116
|
-
in separate files.
|
|
117
|
-
|
|
118
|
-
The :func:`PYBIND11_MODULE` macro creates a function that will be called when an
|
|
119
|
-
``import`` statement is issued from within Python. The module name (``example``)
|
|
120
|
-
is given as the first macro argument (it should not be in quotes). The second
|
|
121
|
-
argument (``m``) defines a variable of type :class:`py::module_ <module>` which
|
|
122
|
-
is the main interface for creating bindings. The method :func:`module_::def`
|
|
123
|
-
generates binding code that exposes the ``add()`` function to Python.
|
|
124
|
-
|
|
125
|
-
.. note::
|
|
126
|
-
|
|
127
|
-
Notice how little code was needed to expose our function to Python: all
|
|
128
|
-
details regarding the function's parameters and return value were
|
|
129
|
-
automatically inferred using template metaprogramming. This overall
|
|
130
|
-
approach and the used syntax are borrowed from Boost.Python, though the
|
|
131
|
-
underlying implementation is very different.
|
|
132
|
-
|
|
133
|
-
pybind11 is a header-only library, hence it is not necessary to link against
|
|
134
|
-
any special libraries and there are no intermediate (magic) translation steps.
|
|
135
|
-
On Linux, the above example can be compiled using the following command:
|
|
136
|
-
|
|
137
|
-
.. code-block:: bash
|
|
138
|
-
|
|
139
|
-
$ c++ -O3 -Wall -shared -std=c++11 -fPIC $(python3 -m pybind11 --includes) example.cpp -o example$(python3-config --extension-suffix)
|
|
140
|
-
|
|
141
|
-
.. note::
|
|
142
|
-
|
|
143
|
-
If you used :ref:`include_as_a_submodule` to get the pybind11 source, then
|
|
144
|
-
use ``$(python3-config --includes) -Iextern/pybind11/include`` instead of
|
|
145
|
-
``$(python3 -m pybind11 --includes)`` in the above compilation, as
|
|
146
|
-
explained in :ref:`building_manually`.
|
|
147
|
-
|
|
148
|
-
For more details on the required compiler flags on Linux and macOS, see
|
|
149
|
-
:ref:`building_manually`. For complete cross-platform compilation instructions,
|
|
150
|
-
refer to the :ref:`compiling` page.
|
|
151
|
-
|
|
152
|
-
The `python_example`_ and `cmake_example`_ repositories are also a good place
|
|
153
|
-
to start. They are both complete project examples with cross-platform build
|
|
154
|
-
systems. The only difference between the two is that `python_example`_ uses
|
|
155
|
-
Python's ``setuptools`` to build the module, while `cmake_example`_ uses CMake
|
|
156
|
-
(which may be preferable for existing C++ projects).
|
|
157
|
-
|
|
158
|
-
.. _python_example: https://github.com/pybind/python_example
|
|
159
|
-
.. _cmake_example: https://github.com/pybind/cmake_example
|
|
160
|
-
|
|
161
|
-
Building the above C++ code will produce a binary module file that can be
|
|
162
|
-
imported to Python. Assuming that the compiled module is located in the
|
|
163
|
-
current directory, the following interactive Python session shows how to
|
|
164
|
-
load and execute the example:
|
|
165
|
-
|
|
166
|
-
.. code-block:: pycon
|
|
167
|
-
|
|
168
|
-
$ python
|
|
169
|
-
Python 2.7.10 (default, Aug 22 2015, 20:33:39)
|
|
170
|
-
[GCC 4.2.1 Compatible Apple LLVM 7.0.0 (clang-700.0.59.1)] on darwin
|
|
171
|
-
Type "help", "copyright", "credits" or "license" for more information.
|
|
172
|
-
>>> import example
|
|
173
|
-
>>> example.add(1, 2)
|
|
174
|
-
3L
|
|
175
|
-
>>>
|
|
176
|
-
|
|
177
|
-
.. _keyword_args:
|
|
178
|
-
|
|
179
|
-
Keyword arguments
|
|
180
|
-
=================
|
|
181
|
-
|
|
182
|
-
With a simple code modification, it is possible to inform Python about the
|
|
183
|
-
names of the arguments ("i" and "j" in this case).
|
|
184
|
-
|
|
185
|
-
.. code-block:: cpp
|
|
186
|
-
|
|
187
|
-
m.def("add", &add, "A function which adds two numbers",
|
|
188
|
-
py::arg("i"), py::arg("j"));
|
|
189
|
-
|
|
190
|
-
:class:`arg` is one of several special tag classes which can be used to pass
|
|
191
|
-
metadata into :func:`module_::def`. With this modified binding code, we can now
|
|
192
|
-
call the function using keyword arguments, which is a more readable alternative
|
|
193
|
-
particularly for functions taking many parameters:
|
|
194
|
-
|
|
195
|
-
.. code-block:: pycon
|
|
196
|
-
|
|
197
|
-
>>> import example
|
|
198
|
-
>>> example.add(i=1, j=2)
|
|
199
|
-
3L
|
|
200
|
-
|
|
201
|
-
The keyword names also appear in the function signatures within the documentation.
|
|
202
|
-
|
|
203
|
-
.. code-block:: pycon
|
|
204
|
-
|
|
205
|
-
>>> help(example)
|
|
206
|
-
|
|
207
|
-
....
|
|
208
|
-
|
|
209
|
-
FUNCTIONS
|
|
210
|
-
add(...)
|
|
211
|
-
Signature : (i: int, j: int) -> int
|
|
212
|
-
|
|
213
|
-
A function which adds two numbers
|
|
214
|
-
|
|
215
|
-
A shorter notation for named arguments is also available:
|
|
216
|
-
|
|
217
|
-
.. code-block:: cpp
|
|
218
|
-
|
|
219
|
-
// regular notation
|
|
220
|
-
m.def("add1", &add, py::arg("i"), py::arg("j"));
|
|
221
|
-
// shorthand
|
|
222
|
-
using namespace pybind11::literals;
|
|
223
|
-
m.def("add2", &add, "i"_a, "j"_a);
|
|
224
|
-
|
|
225
|
-
The :var:`_a` suffix forms a C++11 literal which is equivalent to :class:`arg`.
|
|
226
|
-
Note that the literal operator must first be made visible with the directive
|
|
227
|
-
``using namespace pybind11::literals``. This does not bring in anything else
|
|
228
|
-
from the ``pybind11`` namespace except for literals.
|
|
229
|
-
|
|
230
|
-
.. _default_args:
|
|
231
|
-
|
|
232
|
-
Default arguments
|
|
233
|
-
=================
|
|
234
|
-
|
|
235
|
-
Suppose now that the function to be bound has default arguments, e.g.:
|
|
236
|
-
|
|
237
|
-
.. code-block:: cpp
|
|
238
|
-
|
|
239
|
-
int add(int i = 1, int j = 2) {
|
|
240
|
-
return i + j;
|
|
241
|
-
}
|
|
242
|
-
|
|
243
|
-
Unfortunately, pybind11 cannot automatically extract these parameters, since they
|
|
244
|
-
are not part of the function's type information. However, they are simple to specify
|
|
245
|
-
using an extension of :class:`arg`:
|
|
246
|
-
|
|
247
|
-
.. code-block:: cpp
|
|
248
|
-
|
|
249
|
-
m.def("add", &add, "A function which adds two numbers",
|
|
250
|
-
py::arg("i") = 1, py::arg("j") = 2);
|
|
251
|
-
|
|
252
|
-
The default values also appear within the documentation.
|
|
253
|
-
|
|
254
|
-
.. code-block:: pycon
|
|
255
|
-
|
|
256
|
-
>>> help(example)
|
|
257
|
-
|
|
258
|
-
....
|
|
259
|
-
|
|
260
|
-
FUNCTIONS
|
|
261
|
-
add(...)
|
|
262
|
-
Signature : (i: int = 1, j: int = 2) -> int
|
|
263
|
-
|
|
264
|
-
A function which adds two numbers
|
|
265
|
-
|
|
266
|
-
The shorthand notation is also available for default arguments:
|
|
267
|
-
|
|
268
|
-
.. code-block:: cpp
|
|
269
|
-
|
|
270
|
-
// regular notation
|
|
271
|
-
m.def("add1", &add, py::arg("i") = 1, py::arg("j") = 2);
|
|
272
|
-
// shorthand
|
|
273
|
-
m.def("add2", &add, "i"_a=1, "j"_a=2);
|
|
274
|
-
|
|
275
|
-
Exporting variables
|
|
276
|
-
===================
|
|
277
|
-
|
|
278
|
-
To expose a value from C++, use the ``attr`` function to register it in a
|
|
279
|
-
module as shown below. Built-in types and general objects (more on that later)
|
|
280
|
-
are automatically converted when assigned as attributes, and can be explicitly
|
|
281
|
-
converted using the function ``py::cast``.
|
|
282
|
-
|
|
283
|
-
.. code-block:: cpp
|
|
284
|
-
|
|
285
|
-
PYBIND11_MODULE(example, m) {
|
|
286
|
-
m.attr("the_answer") = 42;
|
|
287
|
-
py::object world = py::cast("World");
|
|
288
|
-
m.attr("what") = world;
|
|
289
|
-
}
|
|
290
|
-
|
|
291
|
-
These are then accessible from Python:
|
|
292
|
-
|
|
293
|
-
.. code-block:: pycon
|
|
294
|
-
|
|
295
|
-
>>> import example
|
|
296
|
-
>>> example.the_answer
|
|
297
|
-
42
|
|
298
|
-
>>> example.what
|
|
299
|
-
'World'
|
|
300
|
-
|
|
301
|
-
.. _supported_types:
|
|
302
|
-
|
|
303
|
-
Supported data types
|
|
304
|
-
====================
|
|
305
|
-
|
|
306
|
-
A large number of data types are supported out of the box and can be used
|
|
307
|
-
seamlessly as functions arguments, return values or with ``py::cast`` in general.
|
|
308
|
-
For a full overview, see the :doc:`advanced/cast/index` section.
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
import datetime as dt
|
|
3
|
-
import os
|
|
4
|
-
import random
|
|
5
|
-
|
|
6
|
-
nfns = 4 # Functions per class
|
|
7
|
-
nargs = 4 # Arguments per function
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
def generate_dummy_code_pybind11(nclasses=10):
|
|
11
|
-
decl = ""
|
|
12
|
-
bindings = ""
|
|
13
|
-
|
|
14
|
-
for cl in range(nclasses):
|
|
15
|
-
decl += "class cl%03i;\n" % cl
|
|
16
|
-
decl += "\n"
|
|
17
|
-
|
|
18
|
-
for cl in range(nclasses):
|
|
19
|
-
decl += "class cl%03i {\n" % cl
|
|
20
|
-
decl += "public:\n"
|
|
21
|
-
bindings += ' py::class_<cl%03i>(m, "cl%03i")\n' % (cl, cl)
|
|
22
|
-
for fn in range(nfns):
|
|
23
|
-
ret = random.randint(0, nclasses - 1)
|
|
24
|
-
params = [random.randint(0, nclasses - 1) for i in range(nargs)]
|
|
25
|
-
decl += " cl%03i *fn_%03i(" % (ret, fn)
|
|
26
|
-
decl += ", ".join("cl%03i *" % p for p in params)
|
|
27
|
-
decl += ");\n"
|
|
28
|
-
bindings += ' .def("fn_%03i", &cl%03i::fn_%03i)\n' % (fn, cl, fn)
|
|
29
|
-
decl += "};\n\n"
|
|
30
|
-
bindings += " ;\n"
|
|
31
|
-
|
|
32
|
-
result = "#include <pybind11/pybind11.h>\n\n"
|
|
33
|
-
result += "namespace py = pybind11;\n\n"
|
|
34
|
-
result += decl + "\n"
|
|
35
|
-
result += "PYBIND11_MODULE(example, m) {\n"
|
|
36
|
-
result += bindings
|
|
37
|
-
result += "}"
|
|
38
|
-
return result
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
def generate_dummy_code_boost(nclasses=10):
|
|
42
|
-
decl = ""
|
|
43
|
-
bindings = ""
|
|
44
|
-
|
|
45
|
-
for cl in range(nclasses):
|
|
46
|
-
decl += "class cl%03i;\n" % cl
|
|
47
|
-
decl += "\n"
|
|
48
|
-
|
|
49
|
-
for cl in range(nclasses):
|
|
50
|
-
decl += "class cl%03i {\n" % cl
|
|
51
|
-
decl += "public:\n"
|
|
52
|
-
bindings += ' py::class_<cl%03i>("cl%03i")\n' % (cl, cl)
|
|
53
|
-
for fn in range(nfns):
|
|
54
|
-
ret = random.randint(0, nclasses - 1)
|
|
55
|
-
params = [random.randint(0, nclasses - 1) for i in range(nargs)]
|
|
56
|
-
decl += " cl%03i *fn_%03i(" % (ret, fn)
|
|
57
|
-
decl += ", ".join("cl%03i *" % p for p in params)
|
|
58
|
-
decl += ");\n"
|
|
59
|
-
bindings += (
|
|
60
|
-
' .def("fn_%03i", &cl%03i::fn_%03i, py::return_value_policy<py::manage_new_object>())\n'
|
|
61
|
-
% (fn, cl, fn)
|
|
62
|
-
)
|
|
63
|
-
decl += "};\n\n"
|
|
64
|
-
bindings += " ;\n"
|
|
65
|
-
|
|
66
|
-
result = "#include <boost/python.hpp>\n\n"
|
|
67
|
-
result += "namespace py = boost::python;\n\n"
|
|
68
|
-
result += decl + "\n"
|
|
69
|
-
result += "BOOST_PYTHON_MODULE(example) {\n"
|
|
70
|
-
result += bindings
|
|
71
|
-
result += "}"
|
|
72
|
-
return result
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
for codegen in [generate_dummy_code_pybind11, generate_dummy_code_boost]:
|
|
76
|
-
print("{")
|
|
77
|
-
for i in range(0, 10):
|
|
78
|
-
nclasses = 2 ** i
|
|
79
|
-
with open("test.cpp", "w") as f:
|
|
80
|
-
f.write(codegen(nclasses))
|
|
81
|
-
n1 = dt.datetime.now()
|
|
82
|
-
os.system(
|
|
83
|
-
"g++ -Os -shared -rdynamic -undefined dynamic_lookup "
|
|
84
|
-
"-fvisibility=hidden -std=c++14 test.cpp -I include "
|
|
85
|
-
"-I /System/Library/Frameworks/Python.framework/Headers -o test.so"
|
|
86
|
-
)
|
|
87
|
-
n2 = dt.datetime.now()
|
|
88
|
-
elapsed = (n2 - n1).total_seconds()
|
|
89
|
-
size = os.stat("test.so").st_size
|
|
90
|
-
print(" {%i, %f, %i}," % (nclasses * nfns, elapsed, size))
|
|
91
|
-
print("}")
|
|
@@ -1,95 +0,0 @@
|
|
|
1
|
-
Benchmark
|
|
2
|
-
=========
|
|
3
|
-
|
|
4
|
-
The following is the result of a synthetic benchmark comparing both compilation
|
|
5
|
-
time and module size of pybind11 against Boost.Python. A detailed report about a
|
|
6
|
-
Boost.Python to pybind11 conversion of a real project is available here: [#f1]_.
|
|
7
|
-
|
|
8
|
-
.. [#f1] http://graylab.jhu.edu/RosettaCon2016/PyRosetta-4.pdf
|
|
9
|
-
|
|
10
|
-
Setup
|
|
11
|
-
-----
|
|
12
|
-
|
|
13
|
-
A python script (see the ``docs/benchmark.py`` file) was used to generate a set
|
|
14
|
-
of files with dummy classes whose count increases for each successive benchmark
|
|
15
|
-
(between 1 and 2048 classes in powers of two). Each class has four methods with
|
|
16
|
-
a randomly generated signature with a return value and four arguments. (There
|
|
17
|
-
was no particular reason for this setup other than the desire to generate many
|
|
18
|
-
unique function signatures whose count could be controlled in a simple way.)
|
|
19
|
-
|
|
20
|
-
Here is an example of the binding code for one class:
|
|
21
|
-
|
|
22
|
-
.. code-block:: cpp
|
|
23
|
-
|
|
24
|
-
...
|
|
25
|
-
class cl034 {
|
|
26
|
-
public:
|
|
27
|
-
cl279 *fn_000(cl084 *, cl057 *, cl065 *, cl042 *);
|
|
28
|
-
cl025 *fn_001(cl098 *, cl262 *, cl414 *, cl121 *);
|
|
29
|
-
cl085 *fn_002(cl445 *, cl297 *, cl145 *, cl421 *);
|
|
30
|
-
cl470 *fn_003(cl200 *, cl323 *, cl332 *, cl492 *);
|
|
31
|
-
};
|
|
32
|
-
...
|
|
33
|
-
|
|
34
|
-
PYBIND11_MODULE(example, m) {
|
|
35
|
-
...
|
|
36
|
-
py::class_<cl034>(m, "cl034")
|
|
37
|
-
.def("fn_000", &cl034::fn_000)
|
|
38
|
-
.def("fn_001", &cl034::fn_001)
|
|
39
|
-
.def("fn_002", &cl034::fn_002)
|
|
40
|
-
.def("fn_003", &cl034::fn_003)
|
|
41
|
-
...
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
The Boost.Python version looks almost identical except that a return value
|
|
45
|
-
policy had to be specified as an argument to ``def()``. For both libraries,
|
|
46
|
-
compilation was done with
|
|
47
|
-
|
|
48
|
-
.. code-block:: bash
|
|
49
|
-
|
|
50
|
-
Apple LLVM version 7.0.2 (clang-700.1.81)
|
|
51
|
-
|
|
52
|
-
and the following compilation flags
|
|
53
|
-
|
|
54
|
-
.. code-block:: bash
|
|
55
|
-
|
|
56
|
-
g++ -Os -shared -rdynamic -undefined dynamic_lookup -fvisibility=hidden -std=c++14
|
|
57
|
-
|
|
58
|
-
Compilation time
|
|
59
|
-
----------------
|
|
60
|
-
|
|
61
|
-
The following log-log plot shows how the compilation time grows for an
|
|
62
|
-
increasing number of class and function declarations. pybind11 includes many
|
|
63
|
-
fewer headers, which initially leads to shorter compilation times, but the
|
|
64
|
-
performance is ultimately fairly similar (pybind11 is 19.8 seconds faster for
|
|
65
|
-
the largest largest file with 2048 classes and a total of 8192 methods -- a
|
|
66
|
-
modest **1.2x** speedup relative to Boost.Python, which required 116.35
|
|
67
|
-
seconds).
|
|
68
|
-
|
|
69
|
-
.. only:: not latex
|
|
70
|
-
|
|
71
|
-
.. image:: pybind11_vs_boost_python1.svg
|
|
72
|
-
|
|
73
|
-
.. only:: latex
|
|
74
|
-
|
|
75
|
-
.. image:: pybind11_vs_boost_python1.png
|
|
76
|
-
|
|
77
|
-
Module size
|
|
78
|
-
-----------
|
|
79
|
-
|
|
80
|
-
Differences between the two libraries become much more pronounced when
|
|
81
|
-
considering the file size of the generated Python plugin: for the largest file,
|
|
82
|
-
the binary generated by Boost.Python required 16.8 MiB, which was **2.17
|
|
83
|
-
times** / **9.1 megabytes** larger than the output generated by pybind11. For
|
|
84
|
-
very small inputs, Boost.Python has an edge in the plot below -- however, note
|
|
85
|
-
that it stores many definitions in an external library, whose size was not
|
|
86
|
-
included here, hence the comparison is slightly shifted in Boost.Python's
|
|
87
|
-
favor.
|
|
88
|
-
|
|
89
|
-
.. only:: not latex
|
|
90
|
-
|
|
91
|
-
.. image:: pybind11_vs_boost_python2.svg
|
|
92
|
-
|
|
93
|
-
.. only:: latex
|
|
94
|
-
|
|
95
|
-
.. image:: pybind11_vs_boost_python2.png
|