pybind11/tests
Jason Rhinelander e7c9753f1d
feat: allow kw-only args after a py::args (#3402)
* Simply has_kw_only_args handling

This simplifies tracking the number of kw-only args by instead tracking
the number of positional arguments (which is really what we care about
everywhere this is used).

* Allow keyword-only arguments to follow py::args

This removes the constraint that py::args has to be last (or
second-last, with py::kwargs) and instead makes py::args imply
py::kw_only for any remaining arguments, allowing you to bind a function
that works the same way as a Python function such as:

    def f(a, *args, b):
        return a * b + sum(args)

    f(10, 1, 2, 3, b=20)  # == 206

With this change, you can bind such a function using:

    m.def("f", [](int a, py::args args, int b) { /* ... */ },
        "a"_a, "b"_a);

Or, to be more explicit about the keyword-only arguments:

    m.def("g", [](int a, py::args args, int b) { /* ... */ },
        "a"_a, py::kw_only{}, "b"_a);

(The only difference between the two is that the latter will fail at
binding time if the `kw_only{}` doesn't match the `py::args` position).

This doesn't affect backwards compatibility at all because, currently,
you can't have a py::args anywhere except the end/2nd-last.

* Take args/kwargs by const lvalue ref

Co-authored-by: Henry Schreiner <HenrySchreinerIII@gmail.com>

Co-authored-by: Henry Schreiner <HenrySchreinerIII@gmail.com>
2021-10-28 23:16:55 -04:00
..
extra_python_package fix: the CMake config in Python package had a hard coded path (#3144) 2021-07-27 17:23:52 -04:00
extra_setuptools maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_cmake_build fix: Set __file__ constant when using eval_file (#1300) (#3233) 2021-09-09 14:06:33 -04:00
test_embed fix: replace free() with std::free() (#3321) 2021-10-03 20:15:37 -04:00
CMakeLists.txt fix: improve support for Python 3.11-dev (#3368) 2021-10-26 14:50:34 -04:00
conftest.py style: use Black everywhere (#2594) 2020-10-16 16:38:13 -04:00
constructor_stats.h refactor: module -> module_ with typedef (#2544) 2020-10-03 13:38:03 -04:00
cross_module_gil_utils.cpp Make sure detail::get_internals acquires the GIL before making Python calls. (#1836) 2019-07-15 16:47:02 +02:00
env.py env: Add surrogate for pytest.deprecated_call for ptyest<3.9 (#2923) 2021-04-02 14:34:09 -04:00
local_bindings.h CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
object.h CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
pybind11_cross_module_tests.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
pybind11_tests.cpp refactor: module -> module_ with typedef (#2544) 2020-10-03 13:38:03 -04:00
pybind11_tests.h CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
pytest.ini Make sure all warnings in pytest get turned into errors (#2838) 2021-02-01 14:52:20 +01:00
requirements.txt fix: improve support for Python 3.11-dev (#3368) 2021-10-26 14:50:34 -04:00
test_async.cpp refactor: module -> module_ with typedef (#2544) 2020-10-03 13:38:03 -04:00
test_async.py tests: cleanup and ci hardening (#2397) 2020-08-16 16:02:12 -04:00
test_buffers.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
test_buffers.py maint: Add additional linter-related pre-commit hooks (#3337) 2021-10-08 08:38:04 -04:00
test_builtin_casters.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
test_builtin_casters.py maint: Add additional linter-related pre-commit hooks (#3337) 2021-10-08 08:38:04 -04:00
test_call_policies.cpp functions: Add doc on incorrect argument index (#2979) 2021-05-06 10:13:30 -04:00
test_call_policies.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_callbacks.cpp fix: memory leak in cpp_function (#3228) (#3229) 2021-08-30 21:48:33 -04:00
test_callbacks.py maint: Add additional linter-related pre-commit hooks (#3337) 2021-10-08 08:38:04 -04:00
test_chrono.cpp fix: allow assignment of time points of resolutions other than that of a system clock (#2481) 2020-09-13 10:24:00 -04:00
test_chrono.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_class.cpp Fix test case with __new__ (#3285) 2021-09-20 16:03:21 -04:00
test_class.py Enable defining custom __new__ (#3265) 2021-09-20 10:42:14 -04:00
test_constants_and_functions.cpp Removing __INTEL_COMPILER section from pragma block at the top of pybind11.h (#3135) 2021-07-27 15:33:31 -07:00
test_constants_and_functions.py Plug leaking function_records in cpp_function initialization in case of exceptions (found by Valgrind in #2746) (#2756) 2021-01-14 19:34:32 +01:00
test_copy_move.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
test_copy_move.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_custom_type_casters.cpp fix(clang-tidy): performance fixes applied in tests and CI (#3051) 2021-06-22 12:11:54 -04:00
test_custom_type_casters.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_custom_type_setup.cpp Add custom_type_setup attribute (#3287) 2021-09-24 12:08:22 -07:00
test_custom_type_setup.py Add custom_type_setup attribute (#3287) 2021-09-24 12:08:22 -07:00
test_docstring_options.cpp fix: do not set docstring for function when empty (#2745) 2020-12-27 22:56:30 -05:00
test_docstring_options.py fix: do not set docstring for function when empty (#2745) 2020-12-27 22:56:30 -05:00
test_eigen.cpp Correct options on Eigen::MappedSparseMatrix & adding MSVC C4127 suppression around Eigen includes. (#3352) 2021-10-11 13:13:01 -07:00
test_eigen.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_enum.cpp Fix enum value's __int__ returning non-int when underlying type is bool or of char type (#1334) 2021-08-26 14:34:24 -07:00
test_enum.py maint: Add additional linter-related pre-commit hooks (#3337) 2021-10-08 08:38:04 -04:00
test_eval_call.py style: use Black everywhere (#2594) 2020-10-16 16:38:13 -04:00
test_eval.cpp test_eval: Show example of working closure (#2743) 2021-08-06 15:51:53 -04:00
test_eval.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_exceptions.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
test_exceptions.h fix: Mingw64 corrected and add a CI job to test it (#3132) 2021-07-30 13:48:41 -04:00
test_exceptions.py Clone of @virtuald's PR #2112 with minor enhancements. (#3215) 2021-08-23 17:30:01 -07:00
test_factory_constructors.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
test_factory_constructors.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_gil_scoped.cpp fix(clang-tidy): performance fixes applied in tests and CI (#3051) 2021-06-22 12:11:54 -04:00
test_gil_scoped.py style: use Black everywhere (#2594) 2020-10-16 16:38:13 -04:00
test_iostream.cpp Adding iostream.h thread-safety documentation. (#2995) 2021-07-12 13:39:06 -07:00
test_iostream.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_kwargs_and_defaults.cpp feat: allow kw-only args after a py::args (#3402) 2021-10-28 23:16:55 -04:00
test_kwargs_and_defaults.py feat: allow kw-only args after a py::args (#3402) 2021-10-28 23:16:55 -04:00
test_local_bindings.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
test_local_bindings.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_methods_and_attributes.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
test_methods_and_attributes.py maint: Add additional linter-related pre-commit hooks (#3337) 2021-10-08 08:38:04 -04:00
test_modules.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
test_modules.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_multiple_inheritance.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
test_multiple_inheritance.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_numpy_array.cpp view for numpy arrays (#987) 2021-08-26 14:11:01 -07:00
test_numpy_array.py view for numpy arrays (#987) 2021-08-26 14:11:01 -07:00
test_numpy_dtypes.cpp maint(clang-tidy): Bugprone enable checks (#3166) 2021-08-06 14:30:28 -04:00
test_numpy_dtypes.py ci: extend msys2 mingw CI (#3207) 2021-08-19 14:42:55 -04:00
test_numpy_vectorize.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
test_numpy_vectorize.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_opaque_types.cpp fix(clang-tidy): performance fixes applied in tests and CI (#3051) 2021-06-22 12:11:54 -04:00
test_opaque_types.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_operator_overloading.cpp fix(clang-tidy): performance fixes applied in tests and CI (#3051) 2021-06-22 12:11:54 -04:00
test_operator_overloading.py maint(precommit): Apply isort (#3195) 2021-08-13 12:37:05 -04:00
test_pickling.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
test_pickling.py maint: Add additional linter-related pre-commit hooks (#3337) 2021-10-08 08:38:04 -04:00
test_pytypes.cpp fix: deprecate make_simple_namespace, fix Python 3.11 (#3374) 2021-10-19 14:39:29 -04:00
test_pytypes.py maint: Add additional linter-related pre-commit hooks (#3337) 2021-10-08 08:38:04 -04:00
test_sequences_and_iterators.cpp Fix make_key_iterator/make_value_iterator for prvalue iterators (#3348) 2021-10-11 08:35:39 -07:00
test_sequences_and_iterators.py Fix make_key_iterator/make_value_iterator for prvalue iterators (#3348) 2021-10-11 08:35:39 -07:00
test_smart_ptr.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
test_smart_ptr.py Fix various minor memory leaks in the tests (found by Valgrind in #2746) (#2758) 2021-01-01 17:05:22 +01:00
test_stl_binders.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
test_stl_binders.py maint: Add additional linter-related pre-commit hooks (#3337) 2021-10-08 08:38:04 -04:00
test_stl.cpp fix: the types for return_value_policy_override in optional_caster (#3376) 2021-10-25 19:04:45 -07:00
test_stl.py fix: the types for return_value_policy_override in optional_caster (#3376) 2021-10-25 19:04:45 -07:00
test_tagbased_polymorphic.cpp CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) 2021-09-08 18:53:38 -07:00
test_tagbased_polymorphic.py style: use Black everywhere (#2594) 2020-10-16 16:38:13 -04:00
test_thread.cpp Fix thread safety for pybind11 loader_life_support (#3237) 2021-09-10 12:29:21 -04:00
test_thread.py Fix thread safety for pybind11 loader_life_support (#3237) 2021-09-10 12:29:21 -04:00
test_union.cpp Fix assertion failure for unions (#1685) (#1709) 2019-06-11 23:28:58 +02:00
test_union.py ci: GHA basic format & pre-commit (#2309) 2020-07-20 13:35:21 -04:00
test_virtual_functions.cpp tests: test recursive dispatch using visitor pattern (#3365) 2021-10-22 17:09:15 -04:00
test_virtual_functions.py tests: test recursive dispatch using visitor pattern (#3365) 2021-10-22 17:09:15 -04:00
valgrind-numpy-scipy.supp docs: fix various typos (#3075) 2021-07-04 19:58:35 -04:00
valgrind-python.supp chore: get PyPy 3.7 wheels using NumPy 1.20 (#2837) 2021-01-31 17:29:09 -05:00