1. 13 Sep, 2024 2 commits
    • [v2.11] Backport: Enable type-safe interoperability between different… · 854cf728
      [v2.11] Backport: Enable type-safe interoperability between different independent Python/C++ bindings systems. (#5370)
      
      * Enable type-safe interoperability between different independent Python/C++ bindings systems. (#5296)
      
      * `self.__cpp_transporter__()` proof of concept: Enable passing C++ pointers across extensions even if the `PYBIND11_INTERNALS_VERSION`s do not match.
      
      * Include cleanup (mainly to resolve PyPy build failures).
      
      * Fix clang-tidy errors.
      
      * Resolve `error: extra
      
      * factor out platform_abi_id.h from internals.h (no functional changes)
      
      * factor out internals_version.h from internals.h (no functional changes)
      
      * Update CMakeLists.txt, tests/extra_python_package/test_files.py
      
      * Revert "factor out internals_version.h from internals.h (no functional changes)"
      
      This reverts commit 3ccea8cd4302cfaf2b6842f77ee3a2eefd61182a.
      
      * Remove internals_version.h from CMakeLists.txt, tests/extra_python_package/test_files.py
      
      * `.__cpp_transporter__()` implementation: compare `pybind11_platform_abi_id`, `cpp_typeid_name`
      
      * Add PremiumTraveler
      
      * Rename test_cpp_transporter_traveler_type.h -> test_cpp_transporter_traveler_types.h
      
      * Expand tests: `PremiumTraveler`, `get_points()`
      
      * Shuffle order of tests (no real changes).
      
      * Move `__cpp_transporter__` lambda to `py::cpp_transporter()` regular function.
      
      * Use `type_caster_generic::load(self)` instead of `cast<T *>(self)`
      
      * Pass `const std::type_info *` via `py::capsule` (instead of `cpp_typeid_name`).
      
      * Make platform_abi_id.h completely stand-alone.
      
      * rename exo_planet.cpp -> exo_planet_pybind11.cpp
      
      * Add exo_planet_c_api.cpp (incomplete).
      
      * Fix silly oversight (wrong filename in `#include`).
      
      * Resolve clang-tidy errors:
      
      ```
      /__w/pybind11/pybind11/tests/exo_planet_c_api.cpp:10:18: error: 'wrapGetLuggage' is a static definition in anonymous namespace; static is redundant here [readability-static-definition-in-anonymous-namespace,-warnings-as-errors]
         10 | static PyObject *wrapGetLuggage(PyObject *, PyObject *) { return PyUnicode_FromString("TODO"); }
            | ~~~~~~           ^
      /__w/pybind11/pybind11/tests/exo_planet_c_api.cpp:14:20: error: 'ThisMethodDef' is a static definition in anonymous namespace; static is redundant here [readability-static-definition-in-anonymous-namespace,-warnings-as-errors]
         14 | static PyMethodDef ThisMethodDef[]
            | ~~~~~~             ^
      /__w/pybind11/pybind11/tests/exo_planet_c_api.cpp:17:27: error: 'ThisModuleDef' is a static definition in anonymous namespace; static is redundant here [readability-static-definition-in-anonymous-namespace,-warnings-as-errors]
         17 | static struct PyModuleDef ThisModuleDef = {
            | ~~~~~~                    ^
      ```
      
      * Implement exo_planet_c_api GetLuggage(), GetPoints()
      
      * Move new code from test_cpp_transporter_traveler_bindings.h to pybind11/detail/type_caster_base.h, under the name `class_dunder_cpp_transporter()`
      
      * Fix oversight.
      
      * Unconditionally add `__cpp_transporter__` method to all `py::class_` objects, but do not include that magic method in docstring signatures.
      
      * Back out pybind11/detail/platform_abi_id.h for now. Maximizing reusability can be handled separately, later.
      
      * Small cleanup.
      
      * Restore and add to `test_call_cpp_transporter_*()`
      
      * Ensure https://github.com/pybind/pybind11/issues/3788 does not bite again.
      
      * `class_dunder_cpp_transporter()`: replace `obj.cast<std::string>()` with `std::string(obj)`
      
      * Add (simple) copyright notices in all newly added files.
      
      * Globally replace cpp_transporter with cpp_conduit
      
      * style: pre-commit fixes
      
      * IWYU fixes
      
      * Rename `class_dunder_cpp_conduit()` -> `cpp_conduit_method()`
      
      * Change `pybind11_platform_abi_id`, `pointer_kind` argument types from `str` to `bytes`.
      
      This avoids the unicode decode/encode roundtrips:
      
      * More robust (no decode/encode errors).
      
      * Minor runtime optimization.
      
      * Systematically rename `cap_cpp_type_info` -> `cpp_type_info_capsule` (no functional changes).
      
      * Systematically replace `cpp_type_info_capsule` `name`: `"const std::type_info *"` -> `typeid(std::type_info).name()` (this IS a functional change).
      
      This provides an extra layer of protection against C++ ABI mismatches:
      
      * The first and most important layer is that the `PYBIND11_PLATFORM_ABI_ID`s must match between extensions.
      
      * The second layer is that the `typeid(std::type_info).name()`s must match between extensions.
      
      * Fix sort order accident in tests/CMakeLists.txt
      
      * Apply suggestions from code review
      
      Co-authored-by: Aaron Gokaslan <aaronGokaslan@gmail.com>
      
      * style: pre-commit fixes
      
      * refactor: rename to _pybind_conduit_v1_
      
      Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
      
      * Add test_home_planet_wrap_very_lonely_traveler(), test_exo_planet_pybind11_wrap_very_lonely_traveler()
      
      * Resolve clang-tidy errors:
      
      ```
      /__w/pybind11/pybind11/tests/test_cpp_conduit_traveler_bindings.h:39:32: error: parameter 'm' is passed by value and only copied once; consider moving it to avoid unnecessary copies [performance-unnecessary-value-param,-warnings-as-errors]
         10 |     py::class_<LonelyTraveler>(m, "LonelyTraveler");
            |                                ^
            |                                std::move( )
      /__w/pybind11/pybind11/tests/test_cpp_conduit_traveler_bindings.h:43:52: error: parameter 'm' is passed by value and only copied once; consider moving it to avoid unnecessary copies [performance-unnecessary-value-param,-warnings-as-errors]
         43 |     py::class_<VeryLonelyTraveler, LonelyTraveler>(m, "VeryLonelyTraveler");
            |                                                    ^
            |                                                    std::move( )
      ```
      
      ---------
      
      Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
      Co-authored-by: Ralf W. Grosse-Kunstleve <rwgk@google.com>
      Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
      Co-authored-by: Henry Schreiner <HenrySchreinerIII@gmail.com>
      Co-authored-by: Aaron Gokaslan <aaronGokaslan@gmail.com>
      
      * Remove `from __future__ import annotations`
      
      ---------
      
      Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
      Co-authored-by: Ralf W. Grosse-Kunstleve <rwgk@google.com>
      Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
      Co-authored-by: Henry Schreiner <HenrySchreinerIII@gmail.com>
      Co-authored-by: Aaron Gokaslan <aaronGokaslan@gmail.com>
      Ralf W. Grosse-Kunstleve committed
  2. 17 Jul, 2023 2 commits
    • Preparation for v2.11.1 patch release (#4752) · 2965fa8d
      * Update README.rst - Add missing comma in the list of acknowlegements (#4750)
      
      * Disable `PYBIND11_ASSERT_GIL_HELD_INCREF_DECREF` generally for PyPy (not just PyPy Windows). (#4751)
      
      * Update changelog
      
      * Provide `PYBIND11_NO_ASSERT_GIL_HELD_INCREF_DECREF` as an option (#4753)
      
      * Remove GIL checks
      
      * Update common.h
      
      * Add flag
      
      * style: pre-commit fixes
      
      * Update pytypes.h
      
      * style: pre-commit fixes
      
      * Update common.h
      
      * style: pre-commit fixes
      
      * Update pytypes.h
      
      * style: pre-commit fixes
      
      * Update common.h
      
      * style: pre-commit fixes
      
      ---------
      
      Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
      
      * Update changelog: PR #4753
      
      ---------
      
      Co-authored-by: bzaar <slepov@gmail.com>
      Co-authored-by: Ethan Steinberg <ethan.steinberg@gmail.com>
      Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
      Ralf W. Grosse-Kunstleve committed
  3. 14 Jul, 2023 1 commit
    • docs: preparation for v2.11.0 release (#4744) · 1a917f18
      * Remove .dev1 from version number.
      
      * Update Changelog (starting from `nox -s make_changelog` output)
      
      * Miscellaneous minor fixes from proofreading in GitHub web view.
      
      * docs: minor changelog updates
      
      Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
      
      ---------
      
      Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
      Co-authored-by: Henry Schreiner <henryschreineriii@gmail.com>
      Ralf W. Grosse-Kunstleve committed
  4. 12 Jul, 2023 4 commits
  5. 11 Jul, 2023 1 commit
  6. 10 Jul, 2023 1 commit
  7. 09 Jul, 2023 1 commit
  8. 04 Jul, 2023 1 commit
  9. 27 Jun, 2023 1 commit
  10. 24 Jun, 2023 1 commit
  11. 21 Jun, 2023 1 commit
  12. 17 Jun, 2023 1 commit
  13. 16 Jun, 2023 1 commit
  14. 10 Jun, 2023 1 commit
  15. 07 Jun, 2023 3 commits
  16. 25 May, 2023 1 commit
    • Use annotated for array (#4679) · d0232b11
      * use Annotated for std::array docstring
      
      * add tests
      
      * fix test
      
      * style: pre-commit fixes
      
      * fix valarray annotation
      
      * style: pre-commit fixes
      
      * refix test
      
      * add FixedSize
      
      * style: pre-commit fixes
      
      * Update test_stl.py
      
      * style: pre-commit fixes
      
      ---------
      
      Co-authored-by: Taiju Yamada <taiju.yamada@mujin.co.jp>
      Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
      T.Yamada committed
  17. 23 May, 2023 3 commits
    • Add `format_descriptor<>` & `npy_format_descriptor<>` `PyObject *` specializations. (#4674) · 8e1f9d5c
      * Add `npy_format_descriptor<PyObject *>` to enable `py::array_t<PyObject *>` to/from-python conversions.
      
      * resolve clang-tidy warning
      
      * Use existing constructor instead of adding a static method. Thanks @Skylion007 for pointing out.
      
      * Add `format_descriptor<PyObject *>`
      
      Trivial addition, but still in search for a meaningful test.
      
      * Add test_format_descriptor_format
      
      * Ensure the Eigen `type_caster`s do not segfault when loading arrays with dtype=object
      
      * Use `static_assert()` `!std::is_pointer<>` to replace runtime guards.
      
      * Add comments to explain how to check for ref-count bugs. (NO code changes.)
      
      * Make the "Pointer types ... are not supported" message Eigen-specific, as suggested by @Lalaland. Move to new pybind11/eigen/common.h header.
      
      * Change "format_descriptor_format" implementation as suggested by @Lalaland. Additional tests meant to ensure consistency between py::format_descriptor<>, np.array, np.format_parser turn out to be useful only to highlight long-standing inconsistencies.
      
      * resolve clang-tidy warning
      
      * Account for np.float128, np.complex256 not being available on Windows, in a future-proof way.
      
      * Fully address i|q|l ambiguity (hopefully).
      
      * Remove the new `np.format_parser()`-based test, it's much more distracting than useful.
      
      * Use bi.itemsize to disambiguate "l" or "L"
      
      * Use `py::detail::compare_buffer_info<T>::compare()` to validate the `format_descriptor<T>::format()` strings.
      
      * Add `buffer_info::compare<T>` to make `detail::compare_buffer_info<T>::compare` more visible & accessible.
      
      * silence clang-tidy warning
      
      * pytest-compatible access to np.float128, np.complex256
      
      * Revert "pytest-compatible access to np.float128, np.complex256"
      
      This reverts commit e9a289c50fc07199806d14ded644215ab6f03afa.
      
      * Use `sizeof(long double) == sizeof(double)` instead of `std::is_same<>`
      
      * Report skipped `long double` tests.
      
      * Change the name of the new `buffer_info` member function to `item_type_is_equivalent_to`. Add comment defining "equivalent" by example.
      
      * Change `item_type_is_equivalent_to<>()` from `static` function to member function, as suggested by @Lalaland
      Ralf W. Grosse-Kunstleve committed
    • Create s Security Policy (#4671) · 6e6bcca5
      * Create SECURITY.md
      
      * Update test_files.py to include SECURITY.md file
      
      * Update MANIFEST.in to include SECURITY.md file
      Joyce committed
    • Python 3.11+: Add `__notes__` to `error_already_set::what()` output. (#4678) · ce9bbc0a
      * First version adding `__notes__` to `error_already_set::what()` output.
      
      * Fix trivial oversight (missing adjustment in existing test).
      
      * Minor enhancements of new code.
      
      * Re-enable `cmake --target cpptest -j 2`
      
      * Revert "Re-enable `cmake --target cpptest -j 2`"
      
      This reverts commit 60816285e9e7b95b7d33a60805888b80b2bec641.
      
      * Add general comment explaining why the `error_fetch_and_normalize` code is so unusual.
      Ralf W. Grosse-Kunstleve committed
  18. 22 May, 2023 1 commit
    • chore: update changelog, with target date for v2.11.0 release (#4677) · 19816f0d
      * Remove .dev1 from version number.
      
      * [skip ci] Update changelog.rst
      
      * [ci skip] Fix pre-commit: rst ``code`` is two backticks
      
      * Apply fix suggested by @henryiii
      
      * [ci skip] Set target date for the release to June 2, 2023
      
      * [ci skip] Apply more fixes suggested by @henryiii (I missed those before).
      
      * [ci skip] Revert "Remove .dev1 from version number."
      
      This reverts commit afc80134cb1035be2913fd8153a16a864181c52c.
      Ralf W. Grosse-Kunstleve committed
  19. 15 May, 2023 1 commit
    • ci: set minimal permissions to github workflows (#4665) · d72ffb44
      * set ci.yml minimal permissions
      
      Signed-off-by: Joyce <joycebrum@google.com>
      
      * set configure.yml minimal permissions
      
      Signed-off-by: Joyce <joycebrum@google.com>
      
      * set format.yml minimal permissions
      
      Signed-off-by: Joyce <joycebrum@google.com>
      
      * set pip.yml minimal permissions
      
      Signed-off-by: Joyce <joycebrum@google.com>
      
      * set upstream.yml minimal permissions
      
      Signed-off-by: Joyce <joycebrum@google.com>
      
      * set labeler.yml minimal permissions
      
      Signed-off-by: Joyce <joycebrum@google.com>
      
      * Update ci.yml to read all
      
      Signed-off-by: Joyce <joycebrum@google.com>
      
      * test labeler.yml
      
      Signed-off-by: Joyce <joycebrum@google.com>
      
      * restore the if at labeler.yml
      
      Signed-off-by: Joyce <joycebrum@google.com>
      
      ---------
      
      Signed-off-by: Joyce <joycebrum@google.com>
      Joyce committed
  20. 09 May, 2023 1 commit
    • Update errors in string "Explicit conversions" docs (#4658) · cca4c51c
      `PyUnicode_DecodeLatin1` requires you to pass in the `error`
      parameter. The code as it is in the docs didn't compile.
      
      There is a reference leak in the example
      code. `PyUnicode_DecodeLatin1` returns a new reference. Calling
      `py::str(PyObject*)` calls `PyObject_Str`, which also returns a new
      reference. That reference is managed by the `py::str`
      constructor (which correctly steals the reference, using the
      `stolen_t` constructor), but the original reference returned by
      `PyUnicode_DecodeLatin1` is never decref'd: it never makes it into an
      `object`, and it's never manually decremented.
      
      This fixes both of those issues. The code compiles, and I viewed the
      sphinx docs locally.
      Tim Stumbaugh committed
  21. 08 May, 2023 1 commit
    • Elide to-python conversion of setter return values (#4621) · e9b961d9
      * Reproducer for property setter with return type that is not wrapped.
      
      * Use `py::class_<OptionsBase>()` to work around the return value conversion issue.
      
      * WIP drop_return_value
      
      * Remove struct drop_return_value
      
      * Introduce `return_value_policy::return_none` for use by setters.
      
      * Add `is_setter` to attr.h and use from `.def_property()`
      
      * Merge the new test into test_methods_and_attributes
      
      * Remove return_none return_value_policy again.
      
      * Fix oversight (NOLINTNEXTLINE placement).
      
      * Simplification (for the better) found while searching for a way to resolve GCC build failures.
      
      Example of failure resolved by this change:
      
      g++ (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0
      
      ```
      cd /build/tests && /usr/bin/c++ -DPYBIND11_TEST_EIGEN -Dpybind11_tests_EXPORTS -I/mounted_pybind11/include -isystem /usr/include/python3.8 -isystem /build/_deps/eigen-src -g -std=c++17 -fPIC -fvisibility=hidden -Wall -Wextra -Wconversion -Wcast-qual -Wdeprecated -Wundef -Wnon-virtual-dtor -MD -MT tests/CMakeFiles/pybind11_tests.dir/test_buffers.cpp.o -MF CMakeFiles/pybind11_tests.dir/test_buffers.cpp.o.d -o CMakeFiles/pybind11_tests.dir/test_buffers.cpp.o -c /mounted_pybind11/tests/test_buffers.cpp
      In file included from /mounted_pybind11/include/pybind11/stl.h:12,
                       from /mounted_pybind11/tests/test_buffers.cpp:10:
      /mounted_pybind11/include/pybind11/pybind11.h: In instantiation of ‘pybind11::class_<type_, options>& pybind11::class_<type_, options>::def_property(const char*, const Getter&, const Setter&, const Extra& ...) [with Getter = pybind11::cpp_function; Setter = std::nullptr_t; Extra = {pybind11::return_value_policy}; type_ = pybind11::buffer_info; options = {}]’:
      /mounted_pybind11/include/pybind11/pybind11.h:1716:58:   required from ‘pybind11::class_<type_, options>& pybind11::class_<type_, options>::def_property_readonly(const char*, const pybind11::cpp_function&, const Extra& ...) [with Extra = {pybind11::return_value_policy}; type_ = pybind11::buffer_info; options = {}]’
      /mounted_pybind11/include/pybind11/pybind11.h:1684:9:   required from ‘pybind11::class_<type_, options>& pybind11::class_<type_, options>::def_readonly(const char*, const D C::*, const Extra& ...) [with C = pybind11::buffer_info; D = long int; Extra = {}; type_ = pybind11::buffer_info; options = {}]’
      /mounted_pybind11/tests/test_buffers.cpp:209:61:   required from here
      /mounted_pybind11/include/pybind11/pybind11.h:1740:25: error: call of overloaded ‘cpp_function(std::nullptr_t&, pybind11::is_setter)’ is ambiguous
       1740 |             name, fget, cpp_function(method_adaptor<type>(fset), is_setter()), extra...);
            |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      /mounted_pybind11/include/pybind11/pybind11.h:101:5: note: candidate: ‘pybind11::cpp_function::cpp_function(Func&&, const Extra& ...) [with Func = std::nullptr_t&; Extra = {pybind11::is_setter}; <template-parameter-1-3> = void]’
        101 |     cpp_function(Func &&f, const Extra &...extra) {
            |     ^~~~~~~~~~~~
      In file included from /mounted_pybind11/include/pybind11/stl.h:12,
                       from /mounted_pybind11/tests/test_buffers.cpp:10:
      /mounted_pybind11/include/pybind11/pybind11.h:87:5: note: candidate: ‘pybind11::cpp_function::cpp_function(std::nullptr_t, const Extra& ...) [with Extra = {pybind11::is_setter}; std::nullptr_t = std::nullptr_t]’
         87 |     cpp_function(std::nullptr_t, const Extra &...) {}
            |     ^~~~~~~~~~~~
      ```
      
      * Bug fix: obvious in hindsight. I thought the original version was incrementing the reference count for None, but no.
      
      Discovered via many failing tests in the wild (10s of thousands).
      
      It is very tricky to construct a meaningful unit test for this bug specifically. It's unlikely to come back, because 10s of thousands of tests will fail again.
      Ralf W. Grosse-Kunstleve committed
  22. 07 May, 2023 1 commit
    • Add `type_caster<PyObject>` (#4601) · 90312a6e
      * Add `type_caster<PyObject>` (tests are still incomplete).
      
      * Fix oversight (`const PyObject *`).
      
      * Ensure `type_caster<PyObject>` only works for `PyObject *`
      
      * Move `is_same_ignoring_cvref` into `detail` namespace.
      
      * Add test_cast_nullptr
      
      * Change is_same_ignoring_cvref from variable template to using.
      
      ```
      test_type_caster_pyobject_ptr.cpp:8:23: error: variable templates only available with ‘-std=c++14’ or ‘-std=gnu++14’ [-Werror]
          8 | static constexpr bool is_same_ignoring_cvref = std::is_same<detail::remove_cvref_t<T>, U>::value;
            |                       ^~~~~~~~~~~~~~~~~~~~~~
      ```
      
      * Remove `return_value_policy::reference_internal` `keep_alive` feature (because of doubts about it actually being useful).
      
      * Add missing test, fix bug (missing `throw error_already_set();`), various cosmetic changes.
      
      * Move `type_caster<PyObject>` from test to new include (pybind11/type_caster_pyobject_ptr.h)
      
      * Add new header file to CMakeLists.txt and tests/extra_python_package/test_files.py
      
      * Backport changes from https://github.com/google/pywrapcc/pull/30021 to https://github.com/pybind/pybind11/pull/4601
      
      * Fix oversight in test (to resolve a valgrind leak detection error) and add a related comment in cast.h.
      
      No production code changes.
      
      Make tests more sensitive by using `ValueHolder` instead of empty tuples and dicts.
      
      Manual leak checks with `while True:` & top command repeated for all tests.
      
      * Add tests for interop with stl.h `list_caster`
      
      (No production code changes.)
      
      * Bug fix in test. Minor comment enhancements.
      
      * Change `type_caster<PyObject>::name` to `object`, as suggested by @Skylion007
      
      * Expand comment for the new `T cast(const handle &handle)` [`T` = `PyObject *`]
      
      * Add `T cast(object &&obj)` overload as suggested by @Skylion007
      
      The original suggestion leads to `error: call to 'cast' is ambiguous` (full error message below), therefore SFINAE guarding is needed.
      
      ```
      clang++ -o pybind11/tests/test_type_caster_pyobject_ptr.os -c -std=c++17 -fPIC -fvisibility=hidden -O0 -g -Wall -Wextra -Wconversion -Wcast-qual -Wdeprecated -Wundef -Wnon-virtual-dtor -Wunused-result -Werror -isystem /usr/include/python3.10 -isystem /usr/include/eigen3 -DPYBIND11_STRICT_ASSERTS_CLASS_HOLDER_VS_TYPE_CASTER_MIX -DPYBIND11_ENABLE_TYPE_CASTER_ODR_GUARD_IF_AVAILABLE -DPYBIND11_TEST_BOOST -Ipybind11/include -I/usr/local/google/home/rwgk/forked/pybind11/include -I/usr/local/google/home/rwgk/clone/pybind11/include /usr/local/google/home/rwgk/forked/pybind11/tests/test_type_caster_pyobject_ptr.cpp
      In file included from /usr/local/google/home/rwgk/forked/pybind11/tests/test_type_caster_pyobject_ptr.cpp:1:
      In file included from /usr/local/google/home/rwgk/forked/pybind11/include/pybind11/functional.h:12:
      In file included from /usr/local/google/home/rwgk/forked/pybind11/include/pybind11/pybind11.h:13:
      In file included from /usr/local/google/home/rwgk/forked/pybind11/include/pybind11/detail/class.h:12:
      In file included from /usr/local/google/home/rwgk/forked/pybind11/include/pybind11/attr.h:14:
      /usr/local/google/home/rwgk/forked/pybind11/include/pybind11/cast.h:1165:12: error: call to 'cast' is ambiguous
          return pybind11::cast<T>(std::move(*this));
                 ^~~~~~~~~~~~~~~~~
      /usr/local/google/home/rwgk/forked/pybind11/include/pybind11/functional.h:109:70: note: in instantiation of function template specialization 'pybind11::object::cast<_object *>' requested here
                      return hfunc.f(std::forward<Args>(args)...).template cast<Return>();
                                                                           ^
      /usr/local/google/home/rwgk/forked/pybind11/include/pybind11/functional.h:103:16: note: in instantiation of member function 'pybind11::detail::type_caster<std::function<_object *(int)>>::load(pybind11::handle, bool)::func_wrapper::operator()' requested here
              struct func_wrapper {
                     ^
      /usr/local/google/home/rwgk/forked/pybind11/include/pybind11/cast.h:1456:47: note: in instantiation of member function 'pybind11::detail::type_caster<std::function<_object *(int)>>::load' requested here
              if ((... || !std::get<Is>(argcasters).load(call.args[Is], call.args_convert[Is]))) {
                                                    ^
      /usr/local/google/home/rwgk/forked/pybind11/include/pybind11/cast.h:1434:50: note: in instantiation of function template specialization 'pybind11::detail::argument_loader<const std::function<_object *(int)> &, int>::load_impl_sequence<0UL, 1UL>' requested here
          bool load_args(function_call &call) { return load_impl_sequence(call, indices{}); }
                                                       ^
      /usr/local/google/home/rwgk/forked/pybind11/include/pybind11/pybind11.h:227:33: note: in instantiation of member function 'pybind11::detail::argument_loader<const std::function<_object *(int)> &, int>::load_args' requested here
                  if (!args_converter.load_args(call)) {
                                      ^
      /usr/local/google/home/rwgk/forked/pybind11/include/pybind11/pybind11.h:101:9: note: in instantiation of function template specialization 'pybind11::cpp_function::initialize<(lambda at /usr/local/google/home/rwgk/forked/pybind11/tests/test_type_caster_pyobject_ptr.cpp:50:9), _object *, const std::function<_object *(int)> &, int, pybind11::name, pybind11::scope, pybind11::sibling, pybind11::return_value_policy>' requested here
              initialize(
              ^
      /usr/local/google/home/rwgk/forked/pybind11/include/pybind11/pybind11.h:1163:22: note: in instantiation of function template specialization 'pybind11::cpp_function::cpp_function<(lambda at /usr/local/google/home/rwgk/forked/pybind11/tests/test_type_caster_pyobject_ptr.cpp:50:9), pybind11::name, pybind11::scope, pybind11::sibling, pybind11::return_value_policy, void>' requested here
              cpp_function func(std::forward<Func>(f),
                           ^
      /usr/local/google/home/rwgk/forked/pybind11/tests/test_type_caster_pyobject_ptr.cpp:48:7: note: in instantiation of function template specialization 'pybind11::module_::def<(lambda at /usr/local/google/home/rwgk/forked/pybind11/tests/test_type_caster_pyobject_ptr.cpp:50:9), pybind11::return_value_policy>' requested here
          m.def(
            ^
      /usr/local/google/home/rwgk/forked/pybind11/include/pybind11/cast.h:1077:3: note: candidate function [with T = _object *, $1 = 0]
      T cast(object &&obj) {
        ^
      /usr/local/google/home/rwgk/forked/pybind11/include/pybind11/cast.h:1149:1: note: candidate function [with T = _object *]
      cast(object &&object) {
      ^
      1 error generated.
      ```
      Ralf W. Grosse-Kunstleve committed
  23. 05 May, 2023 1 commit
    • Introduce recursive_container_traits (#4623) · f7016546
      * Testing
      
      * Similar fix for std::vector
      
      * Fix infinite recursion check:
      
      1) Apply to is_copy_assignable additionally
      2) Check infinite recursion for map-like types
      
      * style: pre-commit fixes
      
      * Optional commit that demonstrates the limitations of this PR
      
      * Fix positioning of container bindings
      
      The bindings were previously in a block that was only activated if numpy
      was available.
      
      * Suggestions from code review: API side
      
      * Suggestions from code review: Test side
      
      * Suggestions from code review
      
      1) Renaming: is_recursive_container and
         MutuallyRecursiveContainerPair(MV|VM)
      2) Avoid ambiguous specializations of is_recursive_container
      
      * Some little fixes
      
      * Reordering of structs
      
      * Add recursive checks for is_move_constructible
      
      * Static testing for pybind11 type traits
      
      * More precise checking of recursive types
      
      Instead of a trait `is_recursive_container`, use a trait
      `recursive_container_traits` with dependent type
      `recursive_container_traits::type_to_check_recursively`.
      So, instead of just checking if a type is recursive and then trying to
      somehow deal with it, recursively-defined traits such as
      is_move_constructible can now directly ask this trait where the
      recursion should proceed.
      
      * Review suggestions
      
      1. Use std::conditional
      2. Fix typo
      
      * Remove leftover include from test
      
      ---------
      
      Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
      Franz Pöschel committed
  24. 03 May, 2023 2 commits
  25. 01 May, 2023 1 commit
    • fix: remove -stdlib=libc++ from setup helpers, not needed on modern Pythons (#4639) · da919262
      * Inject -stdlib=libc++ on macOS only when it's supported, close #4637.
      
      On macOS, by default, pybind11 currently unconditionally set the compiler
      flag "-stdlib=libc++" in Pybind11Extension.__init__(), regardless of which
      compiler is used. This flag is required for clang, but is invalid for GCC.
      If GCC is used, it causes compilation failures in all Python projects that
      use pybind11, with the error message:
      
          arm64-apple-darwin22-gcc: error: unrecognized command-line option -stdlib=libc++.
      
      This commit uses has_flag() to detect whether "-stdlib=libc++" on macOS,
      and injects this flag from build_ext.build_extensions(), rather than
      setting it unconditionally.
      
      Signed-off-by: Yifeng Li <tomli@tomli.me>
      
      * revert: just remove flags
      
      ---------
      
      Signed-off-by: Yifeng Li <tomli@tomli.me>
      Co-authored-by: Henry Schreiner <HenrySchreinerIII@gmail.com>
      biergaizi committed
  26. 29 Apr, 2023 1 commit
  27. 28 Apr, 2023 1 commit
  28. 27 Apr, 2023 1 commit
  29. 25 Apr, 2023 2 commits
    • Use `std::hash<std::type_index>`, `std::equal_to<std::type_index>` everywhere… · 6de6191a
      Use `std::hash<std::type_index>`, `std::equal_to<std::type_index>` everywhere **except when libc++ is in use** (#4319)
      
      * Try using `std::hash<std::type_index>`, `std::equal_to<std::type_index>` everywhere.
      
      From PR #4316 we know that types in the unnamed namespace in different translation units do not compare equal, as desired.
      
      But do types in named namespaces compare equal, as desired?
      
      * Revert "Try using `std::hash<std::type_index>`, `std::equal_to<std::type_index>` everywhere."
      
      This reverts commit a06949a9265014b3c581396c4f37c45ccc03dea6.
      
      * Use "our own name-based hash and equality functions" for `std::type_index` only under macOS, based on results shown under https://github.com/pybind/pybind11/pull/4316#issuecomment-1305097879
      
      * Patch in PR #4313: Minimal reproducer for clash when binding types defined in the unnamed namespace.
      
      * test_unnamed_namespace_b xfail for clang
      
      * `PYBIND11_INTERNALS_VERSION 5`
      
      * Add a note to docs/classes.rst
      
      * For compatibility with Google-internal testing, test_unnamed_namespace_a & test_unnamed_namespace_b need to work when imported in any order.
      
      * Trying "__GLIBCXX__ or Windows", based on observations from Google-internal testing.
      
      * Try _LIBCPP_VERSION
      
      * Account for libc++ behavior in tests and documentation.
      
      * Adjust expectations for Windows Clang (and make code less redundant).
      
      * Add WindowsClang to ci.yml
      
      Added block transferred from PR #4321
      
      * Add clang-latest to name that appears in the GitHub Actions web view.
      
      * Tweak the note in classes.rst again.
      
      * Add `pip install --upgrade pip`, Show env, cosmetic changes
      
      Already tested under PR #4321
      
      * Add macos_brew_install_llvm to ci.yml
      
      Added block transferred from PR #4324
      
      * `test_cross_module_exception_translator` xfail 'Homebrew Clang'
      
      * Revert back to base version of .github/workflows/ci.yml (the ci.yml changes were merged under #4323 and #4326)
      
      * Fixes for ruff
      
      * Make updated condition in internals.h dependent on ABI version.
      
      * Remove PYBIND11_TEST_OVERRIDE when testing with PYBIND11_INTERNALS_VERSION=10000000
      
      * Selectively exercise cmake `-DPYBIND11_TEST_OVERRIDE`: ubuntu, macos, windows
      
      Extra work added to quick jobs, based on timings below, to not increase the GHA start-to-last-job-finished time.
      
      ```
      Duration
      ^              Number of pytest runs
      ^              ^ Job identifier
      ^              ^ ^
      0:03:48.024227 1 1___3___Clang_3.6___C++11___x64.txt
      0:03:58.992814 1 2___3___Clang_3.7___C++11___x64.txt
      0:04:25.758942 1 1___3.7___Debian___x86____Install.txt
      0:04:50.148276 1 4___3___Clang_7___C++11___x64.txt
      0:04:55.784558 1 13___3___Clang_15___C++20___x64.txt
      0:04:57.048754 1 6___3___Clang_dev___C++11___x64.txt
      0:05:00.485181 1 7___3___Clang_5___C++14___x64.txt
      0:05:03.744964 1 2___3___almalinux8___x64.txt
      0:05:06.222752 1 5___3___Clang_9___C++11___x64.txt
      0:05:11.767022 1 2___3___GCC_7___C++17__x64.txt
      0:05:18.634930 1 2___3.11__deadsnakes____x64.txt
      0:05:22.810995 1 1___3___GCC_7___C++11__x64.txt
      0:05:25.275317 1 12___3___Clang_14___C++20___x64.txt
      0:05:32.058174 1 5___3___GCC_10___C++17__x64.txt
      0:05:39.381351 1 7___3___GCC_12___C++20__x64.txt
      0:05:40.502252 1 8___3___Clang_10___C++17___x64.txt
      0:05:59.344905 1 3___3___Clang_3.9___C++11___x64.txt
      0:06:10.825147 1 6___3___GCC_11___C++20__x64.txt
      0:06:20.655443 1 3___3___almalinux9___x64.txt
      0:06:22.472061 1 3___3___GCC_8___C++14__x64.txt
      0:06:42.647406 1 11___3___Clang_13___C++20___x64.txt
      0:06:53.352720 1 1___3.10___CUDA_11.7___Ubuntu_22.04.txt
      0:07:07.357801 1 2___3.7___MSVC_2019___x86_-DCMAKE_CXX_STANDARD=14.txt
      0:07:09.057603 1 1___3___centos7___x64.txt
      0:07:15.546282 1 1___3.8___MSVC_2019__Debug____x86_-DCMAKE_CXX_STANDARD=17.txt
      0:07:22.566022 1 4___3___GCC_8___C++17__x64.txt
      0:08:13.592674 1 2___3.9___MSVC_2019__Debug____x86_-DCMAKE_CXX_STANDARD=20.txt
      0:08:16.422768 1 9___3___Clang_11___C++20___x64.txt
      0:08:21.168457 1 3___3.8___MSVC_2019___x86_-DCMAKE_CXX_STANDARD=17.txt
      0:08:27.129468 1 10___3___Clang_12___C++20___x64.txt
      0:09:35.045470 1 1___3.10___windows-latest___clang-latest.txt
      0:09:57.361843 1 1___3.9___MSVC_2022_C++20___x64.txt
      0:10:35.187767 1 1___3.6___MSVC_2019___x86.txt
      0:11:14.691200 4 2___3.9___ubuntu-20.04___x64.txt
      0:11:37.701167 1 1_macos-latest___brew_install_llvm.txt
      0:11:38.688299 4 4___3.11___ubuntu-20.04___x64.txt
      0:11:52.720216 1 4___3.9___MSVC_2019___x86_-DCMAKE_CXX_STANDARD=20.txt
      0:13:23.456591 4 6___pypy-3.8___ubuntu-20.04___x64_-DPYBIND11_FINDPYTHON=ON.txt
      0:13:25.863592 2 1___3___ICC_latest___x64.txt
      0:13:32.411758 3 9___3.9___windows-2022___x64.txt
      0:13:45.473377 4 3___3.10___ubuntu-20.04___x64.txt
      0:13:55.366447 4 5___pypy-3.7___ubuntu-20.04___x64.txt
      0:13:57.969502 3 10___3.10___windows-2022___x64.txt
      0:14:19.837475 3 11___3.11___windows-2022___x64.txt
      0:14:33.316770 4 1___3.6___ubuntu-20.04___x64_-DPYBIND11_FINDPYTHON=ON_-DCMA.txt
      0:15:34.449278 4 22___3.6___windows-2019___x64_-DPYBIND11_FINDPYTHON=ON.txt
      0:16:25.189055 2 1___3.9-dbg__deadsnakes____Valgrind___x64.txt
      0:17:20.956667 4 15___3.6___macos-latest___x64.txt
      0:17:27.513891 4 23___3.9___windows-2019___x64.txt
      0:17:58.783286 3 8___3.6___windows-2022___x64.txt
      0:18:25.917828 4 7___pypy-3.9___ubuntu-20.04___x64.txt
      0:19:17.399820 3 13___pypy-3.8___windows-2022___x64.txt
      0:19:45.002122 3 12___pypy-3.7___windows-2022___x64.txt
      0:20:03.201926 4 16___3.9___macos-latest___x64.txt
      0:20:15.415178 4 17___3.10___macos-latest___x64.txt
      0:20:20.263216 4 20___pypy-3.8___macos-latest___x64.txt
      0:20:31.998226 3 1___3___windows-latest___mingw64.txt
      0:20:40.812286 4 18___3.11___macos-latest___x64.txt
      0:22:47.714749 4 19___pypy-3.7___macos-latest___x64.txt
      0:23:04.435859 3 2___3___windows-latest___mingw32.txt
      0:25:48.719597 3 14___pypy-3.9___windows-2022___x64.txt
      0:26:01.211688 4 21___pypy-3.9___macos-latest___x64.txt
      0:28:19.971015 1 1___3___CentOS7__PGI_22.9___x64.txt
      ```
      
      * Update skipif for Python 3.12a7 (the WIP needs to be handled in a separate PR).
      Ralf W. Grosse-Kunstleve committed
    • 1. Fully test unstable ABI (#4635) · ff7f5dfc
      2. Selectively exercise cmake `-DPYBIND11_TEST_OVERRIDE`: ubuntu, macos, windows
      
      Extra work added to quick jobs, based on timings below, to not increase the GHA start-to-last-job-finished time.
      
      ```
      Duration
      ^              Number of pytest runs
      ^              ^ Job identifier
      ^              ^ ^
      0:03:48.024227 1 1___3___Clang_3.6___C++11___x64.txt
      0:03:58.992814 1 2___3___Clang_3.7___C++11___x64.txt
      0:04:25.758942 1 1___3.7___Debian___x86____Install.txt
      0:04:50.148276 1 4___3___Clang_7___C++11___x64.txt
      0:04:55.784558 1 13___3___Clang_15___C++20___x64.txt
      0:04:57.048754 1 6___3___Clang_dev___C++11___x64.txt
      0:05:00.485181 1 7___3___Clang_5___C++14___x64.txt
      0:05:03.744964 1 2___3___almalinux8___x64.txt
      0:05:06.222752 1 5___3___Clang_9___C++11___x64.txt
      0:05:11.767022 1 2___3___GCC_7___C++17__x64.txt
      0:05:18.634930 1 2___3.11__deadsnakes____x64.txt
      0:05:22.810995 1 1___3___GCC_7___C++11__x64.txt
      0:05:25.275317 1 12___3___Clang_14___C++20___x64.txt
      0:05:32.058174 1 5___3___GCC_10___C++17__x64.txt
      0:05:39.381351 1 7___3___GCC_12___C++20__x64.txt
      0:05:40.502252 1 8___3___Clang_10___C++17___x64.txt
      0:05:59.344905 1 3___3___Clang_3.9___C++11___x64.txt
      0:06:10.825147 1 6___3___GCC_11___C++20__x64.txt
      0:06:20.655443 1 3___3___almalinux9___x64.txt
      0:06:22.472061 1 3___3___GCC_8___C++14__x64.txt
      0:06:42.647406 1 11___3___Clang_13___C++20___x64.txt
      0:06:53.352720 1 1___3.10___CUDA_11.7___Ubuntu_22.04.txt
      0:07:07.357801 1 2___3.7___MSVC_2019___x86_-DCMAKE_CXX_STANDARD=14.txt
      0:07:09.057603 1 1___3___centos7___x64.txt
      0:07:15.546282 1 1___3.8___MSVC_2019__Debug____x86_-DCMAKE_CXX_STANDARD=17.txt
      0:07:22.566022 1 4___3___GCC_8___C++17__x64.txt
      0:08:13.592674 1 2___3.9___MSVC_2019__Debug____x86_-DCMAKE_CXX_STANDARD=20.txt
      0:08:16.422768 1 9___3___Clang_11___C++20___x64.txt
      0:08:21.168457 1 3___3.8___MSVC_2019___x86_-DCMAKE_CXX_STANDARD=17.txt
      0:08:27.129468 1 10___3___Clang_12___C++20___x64.txt
      0:09:35.045470 1 1___3.10___windows-latest___clang-latest.txt
      0:09:57.361843 1 1___3.9___MSVC_2022_C++20___x64.txt
      0:10:35.187767 1 1___3.6___MSVC_2019___x86.txt
      0:11:14.691200 4 2___3.9___ubuntu-20.04___x64.txt
      0:11:37.701167 1 1_macos-latest___brew_install_llvm.txt
      0:11:38.688299 4 4___3.11___ubuntu-20.04___x64.txt
      0:11:52.720216 1 4___3.9___MSVC_2019___x86_-DCMAKE_CXX_STANDARD=20.txt
      0:13:23.456591 4 6___pypy-3.8___ubuntu-20.04___x64_-DPYBIND11_FINDPYTHON=ON.txt
      0:13:25.863592 2 1___3___ICC_latest___x64.txt
      0:13:32.411758 3 9___3.9___windows-2022___x64.txt
      0:13:45.473377 4 3___3.10___ubuntu-20.04___x64.txt
      0:13:55.366447 4 5___pypy-3.7___ubuntu-20.04___x64.txt
      0:13:57.969502 3 10___3.10___windows-2022___x64.txt
      0:14:19.837475 3 11___3.11___windows-2022___x64.txt
      0:14:33.316770 4 1___3.6___ubuntu-20.04___x64_-DPYBIND11_FINDPYTHON=ON_-DCMA.txt
      0:15:34.449278 4 22___3.6___windows-2019___x64_-DPYBIND11_FINDPYTHON=ON.txt
      0:16:25.189055 2 1___3.9-dbg__deadsnakes____Valgrind___x64.txt
      0:17:20.956667 4 15___3.6___macos-latest___x64.txt
      0:17:27.513891 4 23___3.9___windows-2019___x64.txt
      0:17:58.783286 3 8___3.6___windows-2022___x64.txt
      0:18:25.917828 4 7___pypy-3.9___ubuntu-20.04___x64.txt
      0:19:17.399820 3 13___pypy-3.8___windows-2022___x64.txt
      0:19:45.002122 3 12___pypy-3.7___windows-2022___x64.txt
      0:20:03.201926 4 16___3.9___macos-latest___x64.txt
      0:20:15.415178 4 17___3.10___macos-latest___x64.txt
      0:20:20.263216 4 20___pypy-3.8___macos-latest___x64.txt
      0:20:31.998226 3 1___3___windows-latest___mingw64.txt
      0:20:40.812286 4 18___3.11___macos-latest___x64.txt
      0:22:47.714749 4 19___pypy-3.7___macos-latest___x64.txt
      0:23:04.435859 3 2___3___windows-latest___mingw32.txt
      0:25:48.719597 3 14___pypy-3.9___windows-2022___x64.txt
      0:26:01.211688 4 21___pypy-3.9___macos-latest___x64.txt
      0:28:19.971015 1 1___3___CentOS7__PGI_22.9___x64.txt
      ```
      Ralf W. Grosse-Kunstleve committed