1. 29 Jul, 2024 1 commit
    • clang-tidy upgrade (to version 18) (#5272) · 2e260b06
      * `container: silkeh/clang:18-bookworm` in .github/workflows/format.yml
      
      * clang-tidy auto-fix (trivial, in test only)
      
      * Disable `performance-enum-size` (noisy, low value)
      
      * Temporarily turn off 3 diagnostics (to be tackled one-by-one).
      
      * Add explicit `switch` `default` to resolve clang-tidy `bugprone-switch-missing-default-case`
      
      Debian clang version 18.1.8 (++20240718080534+3b5b5c1ec4a3-1~exp1~20240718200641.143)
      Target: x86_64-pc-linux-gnu
      
      tests/test_numpy_dtypes.cpp:212:5: warning: switching on non-enum value without default case may not cover all cases [bugprone-switch-missing-default-case]
      
      * Add clang-17 and clang-18 testing.
      
      * Add `NOLINTNEXTLINE(clang-analyzer-optin.core.EnumCastOutOfRange)` in test_tagbased_polymorphic.cpp
      
      Debian clang version 18.1.8 (++20240718080534+3b5b5c1ec4a3-1~exp1~20240718200641.143)
      Target: x86_64-pc-linux-gnu
      
      tests/test_tagbased_polymorphic.cpp:77:40: warning: The value '150' provided to the cast expression is not in the valid range of values for 'Kind' [clang-analyzer-optin.core.EnumCastOutOfRange]
      
      * Fix inconsistent pybind11/eigen/tensor.h behavior:
      
      This existing comment in pybind11/eigen/tensor.h
      
      ```
                      // move, take_ownership don't make any sense for a ref/map:
      ```
      
      is at odds with the `delete src;` three lines up.
      
      In real-world client code `take_ownership` will not exist (unless the client code is untested and unused). I.e. the `delete` is essentially only useful to avoid leaks in the pybind11 unit tests.
      
      While upgrading to clang-tidy 18, the warning below appeared. Apparently it is produced during LTO, and it appears difficult to suppress. Regardless, the best way to resolve this is to remove the `delete` and to simply make the test objects `static` in the unit test code.
      
      ________
      
      Debian clang version 18.1.8 (++20240718080534+3b5b5c1ec4a3-1~exp1~20240718200641.143)
      Target: x86_64-pc-linux-gnu
      ________
      
      ```
      lto-wrapper: warning: using serial compilation of 3 LTRANS jobs
      lto-wrapper: note: see the ‘-flto’ option documentation for more information
      In function ‘cast_impl’,
          inlined from ‘cast’ at /mounted_pybind11/include/pybind11/eigen/tensor.h:414:25,
          inlined from ‘operator()’ at /mounted_pybind11/include/pybind11/eigen/../pybind11.h:296:40,
          inlined from ‘_FUN’ at /mounted_pybind11/include/pybind11/eigen/../pybind11.h:267:21:
      /mounted_pybind11/include/pybind11/eigen/tensor.h:475:17: warning: ‘operator delete’ called on unallocated object ‘<anonymous>’ [-Wfree-nonheap-object]
        475 |                 delete src;
            |                 ^
      /mounted_pybind11/include/pybind11/eigen/../pybind11.h: In function ‘_FUN’:
      /mounted_pybind11/include/pybind11/eigen/../pybind11.h:297:75: note: declared here
        297 |                     std::move(args_converter).template call<Return, Guard>(cap->f),
            |                                                                           ^
      ```
      
      * Disable `bugprone-chained-comparison`: this clang-tidy check is incompatible with the Catch2 `REQUIRE` macro (26 warnings like the one below).
      ________
      
      Debian clang version 18.1.8 (++20240718080534+3b5b5c1ec4a3-1~exp1~20240718200641.143)
      Target: x86_64-pc-linux-gnu
      ________
      
      ```
      /mounted_pybind11/tests/test_embed/test_interpreter.cpp:127:9: warning: chained comparison 'v0 <= v1 == v2' may generate unintended results, use parentheses to specify order of evaluation or a logical operator to separate comparison expressions [bugprone-chained-comparison]
        127 |         REQUIRE(ret == 42);
            |         ^
      /build/tests/catch/catch.hpp:17670:24: note: expanded from macro 'REQUIRE'
       17670 | #define REQUIRE( ... ) INTERNAL_CATCH_TEST( "REQUIRE", Catch::ResultDisposition::Normal, __VA_ARGS__  )
             |                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      /build/tests/catch/catch.hpp:2710:47: note: expanded from macro 'INTERNAL_CATCH_TEST'
       2710 |             catchAssertionHandler.handleExpr( Catch::Decomposer() <= __VA_ARGS__ ); \
            |                                               ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      /mounted_pybind11/tests/test_embed/test_interpreter.cpp:127:9: note: operand 'v0' is here
        127 |         REQUIRE(ret == 42);
            |         ^
      /build/tests/catch/catch.hpp:17670:24: note: expanded from macro 'REQUIRE'
       17670 | #define REQUIRE( ... ) INTERNAL_CATCH_TEST( "REQUIRE", Catch::ResultDisposition::Normal, __VA_ARGS__  )
             |                        ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      /build/tests/catch/catch.hpp:2710:47: note: expanded from macro 'INTERNAL_CATCH_TEST'
       2710 |             catchAssertionHandler.handleExpr( Catch::Decomposer() <= __VA_ARGS__ ); \
            |                                               ^~~~~~~~~~~~~~~~~~~
      /mounted_pybind11/tests/test_embed/test_interpreter.cpp:127:17: note: operand 'v1' is here
        127 |         REQUIRE(ret == 42);
            |                 ^
      /build/tests/catch/catch.hpp:17670:90: note: expanded from macro 'REQUIRE'
       17670 | #define REQUIRE( ... ) INTERNAL_CATCH_TEST( "REQUIRE", Catch::ResultDisposition::Normal, __VA_ARGS__  )
             |                                                                                          ^~~~~~~~~~~
      /build/tests/catch/catch.hpp:2710:70: note: expanded from macro 'INTERNAL_CATCH_TEST'
       2710 |             catchAssertionHandler.handleExpr( Catch::Decomposer() <= __VA_ARGS__ ); \
            |                                                                      ^~~~~~~~~~~
      /mounted_pybind11/tests/test_embed/test_interpreter.cpp:127:24: note: operand 'v2' is here
        127 |         REQUIRE(ret == 42);
            |                        ^
      /build/tests/catch/catch.hpp:17670:90: note: expanded from macro 'REQUIRE'
       17670 | #define REQUIRE( ... ) INTERNAL_CATCH_TEST( "REQUIRE", Catch::ResultDisposition::Normal, __VA_ARGS__  )
             |                                                                                          ^~~~~~~~~~~
      /build/tests/catch/catch.hpp:2710:70: note: expanded from macro 'INTERNAL_CATCH_TEST'
       2710 |             catchAssertionHandler.handleExpr( Catch::Decomposer() <= __VA_ARGS__ ); \
            |                                                                      ^~~~~~~~~~~
      ```
      
      * Add 8 `// NOLINT(bugprone-empty-catch)`
      
      * Resolve clang-tidy `bugprone-multi-level-implicit-pointer-conversion` warnings.
      ________
      Debian clang version 18.1.8 (++20240718080534+3b5b5c1ec4a3-1~exp1~20240718200641.143)
      Target: x86_64-pc-linux-gnu
      ________
      ```
      pybind11/detail/internals.h:556:53: warning: multilevel pointer conversion from 'internals **' to 'const void *', please use explicit cast [bugprone-multi-level-implicit-pointer-conversion]
      
      pybind11/detail/type_caster_base.h:431:20: warning: multilevel pointer conversion from 'void **' to 'void *', please use explicit cast [bugprone-multi-level-implicit-pointer-conversion]
      
      pybind11/numpy.h:904:81: warning: multilevel pointer conversion from '_object *const *' to 'const void *', please use explicit cast [bugprone-multi-level-implicit-pointer-conversion]
      pybind11/numpy.h:1989:39: warning: multilevel pointer conversion from 'typename vectorize_arg<const double *>::type *' (aka 'const double **') to 'void *', please use explicit cast [bugprone-multi-level-implicit-pointer-conversion]
      pybind11/numpy.h:1989:39: warning: multilevel pointer conversion from 'typename vectorize_arg<const VectorizeTestClass *>::type *' (aka 'const VectorizeTestClass **') to 'void *', please use explicit cast [bugprone-multi-level-implicit-pointer-conversion]
      
      pybind11/stl/filesystem.h:75:44: warning: multilevel pointer conversion from 'PyObject **' (aka '_object **') to 'void *', please use explicit cast [bugprone-multi-level-implicit-pointer-conversion]
      pybind11/stl/filesystem.h:83:42: warning: multilevel pointer conversion from 'PyObject **' (aka '_object **') to 'void *', please use explicit cast [bugprone-multi-level-implicit-pointer-conversion]
      ```
      
      * Introduce `PYBIND11_REINTERPRET_CAST_VOID_PTR_IF_NOT_PYPY` to resolve PyPy build errors:
      
      ```
      In file included from /Users/runner/work/pybind11/pybind11/tests/test_stl.cpp:18:
      /Users/runner/work/pybind11/pybind11/include/pybind11/stl/filesystem.h:75:17: error: no matching function for call to 'PyPyUnicode_FSConverter'
                  if (PyUnicode_FSConverter(buf, reinterpret_cast<void *>(&native)) != 0) {
                      ^~~~~~~~~~~~~~~~~~~~~
      /Users/runner/hostedtoolcache/PyPy/3.10.14/x64/include/pypy3.10/pypy_decl.h:969:31: note: expanded from macro 'PyUnicode_FSConverter'
                                    ^~~~~~~~~~~~~~~~~~~~~~~
      /Users/runner/hostedtoolcache/PyPy/3.10.14/x64/include/pypy3.10/pypy_decl.h:970:17: note: candidate function not viable: cannot convert argument of incomplete type 'void *' to 'struct _object **' for 2nd argument
      PyAPI_FUNC(int) PyUnicode_FSConverter(struct _object *arg0, struct _object **arg1);
                      ^
      /Users/runner/hostedtoolcache/PyPy/3.10.14/x64/include/pypy3.10/pypy_decl.h:969:31: note: expanded from macro 'PyUnicode_FSConverter'
                                    ^
      In file included from /Users/runner/work/pybind11/pybind11/tests/test_stl.cpp:18:
      /Users/runner/work/pybind11/pybind11/include/pybind11/stl/filesystem.h:83:17: error: no matching function for call to 'PyPyUnicode_FSDecoder'
                  if (PyUnicode_FSDecoder(buf, reinterpret_cast<void *>(&native)) != 0) {
                      ^~~~~~~~~~~~~~~~~~~
      /Users/runner/hostedtoolcache/PyPy/3.10.14/x64/include/pypy3.10/pypy_decl.h:971:29: note: expanded from macro 'PyUnicode_FSDecoder'
                                  ^~~~~~~~~~~~~~~~~~~~~
      /Users/runner/hostedtoolcache/PyPy/3.10.14/x64/include/pypy3.10/pypy_decl.h:972:17: note: candidate function not viable: cannot convert argument of incomplete type 'void *' to 'struct _object **' for 2nd argument
      PyAPI_FUNC(int) PyUnicode_FSDecoder(struct _object *arg0, struct _object **arg1);
                      ^
      /Users/runner/hostedtoolcache/PyPy/3.10.14/x64/include/pypy3.10/pypy_decl.h:971:29: note: expanded from macro 'PyUnicode_FSDecoder'
                                  ^
      ```
      
      * clang-tidy auto-fix
      
      * Fix silly oversight.
      Ralf W. Grosse-Kunstleve committed
  2. 24 Jul, 2024 1 commit
  3. 19 Jul, 2024 1 commit
  4. 18 Jul, 2024 2 commits
  5. 16 Jul, 2024 1 commit
  6. 15 Jul, 2024 1 commit
  7. 06 Jul, 2024 1 commit
  8. 02 Jul, 2024 2 commits
  9. 01 Jul, 2024 1 commit
  10. 30 Jun, 2024 1 commit
  11. 28 Jun, 2024 3 commits
  12. 26 Jun, 2024 8 commits
  13. 25 Jun, 2024 3 commits
    • feat(types): add support for typing.Literal type (#5192) · 183059f9
      * typevar prototype
      
      * style: pre-commit fixes
      
      * change to NameT
      
      * style: pre-commit fixes
      
      * make string const
      
      * add missing closing bracket
      
      * style: pre-commit fixes
      
      * clean up handle_type_name
      
      * style: pre-commit fixes
      
      * add back missing <
      
      * style: pre-commit fixes
      
      * add back NameT
      
      * try fixed_string
      
      * style: pre-commit fixes
      
      * std::basic_fixed_string
      
      * test c++20
      
      * style: pre-commit fixes
      
      * cleanup
      
      * fix object to typevar conversion
      
      * style: pre-commit fixes
      
      * And CPP20 checks
      
      * style: pre-commit fixes
      
      * add missing cpp20++ check
      
      * style: pre-commit fixes
      
      * Add C++20 check to python
      
      * Fix python if {
      
      * style: pre-commit fixes
      
      * update test name
      
      * style: pre-commit fixes
      
      * remove call on cpp_std
      
      * make field const
      
      * test nontype_template
      
      * update feature check
      
      * update name of guard
      
      * fix try except in test
      
      * fix pre commit
      
      * remove extra semi colon
      
      * except AttributeError
      
      * fix try except in test
      
      * remove const
      
      * Clean up tests
      
      * style: pre-commit fixes
      
      * start string literal
      
      * start int literal
      
      * func declare
      
      * commit clean
      
      * use contextlib.suppres
      
      * resolve stash
      
      * more literal type
      
      * fix annotation name
      
      * stash
      
      * request changes
      
      * lint
      
      * Add comments
      
      * style: pre-commit fixes
      
      * Add support for unions and optionals to be compatible with object
      
      * lint
      
      * remove comment
      
      * Create Literal Type implementation
      
      * clean up
      
      * Update comment
      
      * remove incorrect comment
      
      * rerun CI
      
      * rerun CI
      
      * fix extra line
      
      * lint
      
      * move if defined block
      
      * style: pre-commit fixes
      
      ---------
      
      Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
      Michael Carlstrom committed
    • Add TypeVars / method generics typing (#5167) · aebcd704
      * typevar prototype
      
      * style: pre-commit fixes
      
      * change to NameT
      
      * style: pre-commit fixes
      
      * make string const
      
      * add missing closing bracket
      
      * style: pre-commit fixes
      
      * clean up handle_type_name
      
      * style: pre-commit fixes
      
      * add back missing <
      
      * style: pre-commit fixes
      
      * add back NameT
      
      * try fixed_string
      
      * style: pre-commit fixes
      
      * std::basic_fixed_string
      
      * test c++20
      
      * style: pre-commit fixes
      
      * cleanup
      
      * fix object to typevar conversion
      
      * style: pre-commit fixes
      
      * And CPP20 checks
      
      * style: pre-commit fixes
      
      * add missing cpp20++ check
      
      * style: pre-commit fixes
      
      * Add C++20 check to python
      
      * Fix python if {
      
      * style: pre-commit fixes
      
      * update test name
      
      * style: pre-commit fixes
      
      * remove call on cpp_std
      
      * make field const
      
      * test nontype_template
      
      * update feature check
      
      * update name of guard
      
      * fix try except in test
      
      * fix pre commit
      
      * remove extra semi colon
      
      * except AttributeError
      
      * fix try except in test
      
      * remove const
      
      * Clean up tests
      
      * style: pre-commit fixes
      
      * use contextlib.suppres
      
      * request changes
      
      * lint
      
      * Add comments
      
      * style: pre-commit fixes
      
      * Add support for unions and optionals to be compatible with object
      
      * lint
      
      * remove comment
      
      ---------
      
      Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
      Michael Carlstrom committed
    • docs: prepare for 2.13.0 (#5187) · 9ec64e37
      * docs: prepare for 2.13.0
      
      Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
      
      * docs: reword cross-compiling entry
      
      Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
      
      * Update changelog.rst
      
      ---------
      
      Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
      Henry Schreiner committed
  14. 24 Jun, 2024 1 commit
    • fix: use `std::addressof` in type_caster_base.h (#5189) · a406a62e
      * Add tests only. Fails to build with this error message:
      
      ```
      g++ -o pybind11/tests/test_copy_move.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.11 -isystem /usr/include/eigen3 -DPYBIND11_STRICT_ASSERTS_CLASS_HOLDER_VS_TYPE_CASTER_MIX -DPYBIND11_ENABLE_TYPE_CASTER_ODR_GUARD_IF_AVAILABLE -DPYBIND11_TEST_BOOST -DPYBIND11_INTERNALS_VERSION=10000000 -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_copy_move.cpp
      In file included from /usr/local/google/home/rwgk/forked/pybind11/include/pybind11/detail/../cast.h:15,
                       from /usr/local/google/home/rwgk/forked/pybind11/include/pybind11/detail/../attr.h:14,
                       from /usr/local/google/home/rwgk/forked/pybind11/include/pybind11/detail/class.h:12,
                       from /usr/local/google/home/rwgk/forked/pybind11/include/pybind11/pybind11.h:13,
                       from /usr/local/google/home/rwgk/forked/pybind11/include/pybind11/stl.h:12,
                       from /usr/local/google/home/rwgk/forked/pybind11/tests/test_copy_move.cpp:11:
      /usr/local/google/home/rwgk/forked/pybind11/include/pybind11/detail/../detail/type_caster_base.h: In instantiation of ‘static pybind11::handle pybind11::detail::type_caster_base<type>::cast(const itype&, pybind11::return_value_policy, pybind11::handle) [with type = UnusualOpRef; itype = UnusualOpRef]’:
      /usr/local/google/home/rwgk/forked/pybind11/include/pybind11/detail/../cast.h:1230:37:   required from ‘pybind11::object pybind11::cast(T&&, return_value_policy, handle) [with T = const UnusualOpRef&; typename std::enable_if<(! std::is_base_of<detail::pyobject_tag, typename std::remove_reference<_Tp>::type>::value), int>::type <anonymous> = 0]’
      /usr/local/google/home/rwgk/forked/pybind11/tests/test_copy_move.cpp:162:80:   required from here
      /usr/local/google/home/rwgk/forked/pybind11/include/pybind11/detail/../detail/type_caster_base.h:1110:20: error: no matching function for call to ‘pybind11::detail::type_caster_base<UnusualOpRef>::cast(const UnusualOpRef::NonTrivialType, pybind11::return_value_policy&, pybind11::handle&)’
       1110 |         return cast(&src, policy, parent);
            |                ~~~~^~~~~~~~~~~~~~~~~~~~~~
      /usr/local/google/home/rwgk/forked/pybind11/include/pybind11/detail/../detail/type_caster_base.h:1105:19: note: candidate: ‘static pybind11::handle pybind11::detail::type_caster_base<type>::cast(const itype&, pybind11::return_value_policy, pybind11::handle) [with type = UnusualOpRef; itype = UnusualOpRef]’
       1105 |     static handle cast(const itype &src, return_value_policy policy, handle parent) {
            |                   ^~~~
      /usr/local/google/home/rwgk/forked/pybind11/include/pybind11/detail/../detail/type_caster_base.h:1105:37: note:   no known conversion for argument 1 from ‘const UnusualOpRef::NonTrivialType’ {aka ‘const std::shared_ptr<int>’} to ‘const pybind11::detail::type_caster_base<UnusualOpRef>::itype&’ {aka ‘const UnusualOpRef&’}
       1105 |     static handle cast(const itype &src, return_value_policy policy, handle parent) {
            |                        ~~~~~~~~~~~~~^~~
      /usr/local/google/home/rwgk/forked/pybind11/include/pybind11/detail/../detail/type_caster_base.h:1113:19: note: candidate: ‘static pybind11::handle pybind11::detail::type_caster_base<type>::cast(itype&&, pybind11::return_value_policy, pybind11::handle) [with type = UnusualOpRef; itype = UnusualOpRef]’
       1113 |     static handle cast(itype &&src, return_value_policy, handle parent) {
            |                   ^~~~
      /usr/local/google/home/rwgk/forked/pybind11/include/pybind11/detail/../detail/type_caster_base.h:1113:32: note:   no known conversion for argument 1 from ‘const UnusualOpRef::NonTrivialType’ {aka ‘const std::shared_ptr<int>’} to ‘pybind11::detail::type_caster_base<UnusualOpRef>::itype&&’ {aka ‘UnusualOpRef&&’}
       1113 |     static handle cast(itype &&src, return_value_policy, handle parent) {
            |                        ~~~~~~~~^~~
      /usr/local/google/home/rwgk/forked/pybind11/include/pybind11/detail/../detail/type_caster_base.h:1142:19: note: candidate: ‘static pybind11::handle pybind11::detail::type_caster_base<type>::cast(const itype*, pybind11::return_value_policy, pybind11::handle) [with type = UnusualOpRef; itype = UnusualOpRef]’
       1142 |     static handle cast(const itype *src, return_value_policy policy, handle parent) {
            |                   ^~~~
      /usr/local/google/home/rwgk/forked/pybind11/include/pybind11/detail/../detail/type_caster_base.h:1142:37: note:   no known conversion for argument 1 from ‘const UnusualOpRef::NonTrivialType’ {aka ‘const std::shared_ptr<int>’} to ‘const pybind11::detail::type_caster_base<UnusualOpRef>::itype*’ {aka ‘const UnusualOpRef*’}
       1142 |     static handle cast(const itype *src, return_value_policy policy, handle parent) {
            |                        ~~~~~~~~~~~~~^~~
      /usr/local/google/home/rwgk/forked/pybind11/include/pybind11/detail/../detail/type_caster_base.h: In instantiation of ‘static pybind11::handle pybind11::detail::type_caster_base<type>::cast(itype&&, pybind11::return_value_policy, pybind11::handle) [with type = UnusualOpRef; itype = UnusualOpRef]’:
      /usr/local/google/home/rwgk/forked/pybind11/include/pybind11/detail/../cast.h:1230:37:   required from ‘pybind11::object pybind11::cast(T&&, return_value_policy, handle) [with T = UnusualOpRef; typename std::enable_if<(! std::is_base_of<detail::pyobject_tag, typename std::remove_reference<_Tp>::type>::value), int>::type <anonymous> = 0]’
      /usr/local/google/home/rwgk/forked/pybind11/tests/test_copy_move.cpp:163:74:   required from here
      /usr/local/google/home/rwgk/forked/pybind11/include/pybind11/detail/../detail/type_caster_base.h:1114:20: error: no matching function for call to ‘pybind11::detail::type_caster_base<UnusualOpRef>::cast(UnusualOpRef::NonTrivialType, pybind11::return_value_policy, pybind11::handle&)’
       1114 |         return cast(&src, return_value_policy::move, parent);
            |                ~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      /usr/local/google/home/rwgk/forked/pybind11/include/pybind11/detail/../detail/type_caster_base.h:1105:19: note: candidate: ‘static pybind11::handle pybind11::detail::type_caster_base<type>::cast(const itype&, pybind11::return_value_policy, pybind11::handle) [with type = UnusualOpRef; itype = UnusualOpRef]’
       1105 |     static handle cast(const itype &src, return_value_policy policy, handle parent) {
            |                   ^~~~
      /usr/local/google/home/rwgk/forked/pybind11/include/pybind11/detail/../detail/type_caster_base.h:1105:37: note:   no known conversion for argument 1 from ‘UnusualOpRef::NonTrivialType’ {aka ‘std::shared_ptr<int>’} to ‘const pybind11::detail::type_caster_base<UnusualOpRef>::itype&’ {aka ‘const UnusualOpRef&’}
       1105 |     static handle cast(const itype &src, return_value_policy policy, handle parent) {
            |                        ~~~~~~~~~~~~~^~~
      /usr/local/google/home/rwgk/forked/pybind11/include/pybind11/detail/../detail/type_caster_base.h:1113:19: note: candidate: ‘static pybind11::handle pybind11::detail::type_caster_base<type>::cast(itype&&, pybind11::return_value_policy, pybind11::handle) [with type = UnusualOpRef; itype = UnusualOpRef]’
       1113 |     static handle cast(itype &&src, return_value_policy, handle parent) {
            |                   ^~~~
      /usr/local/google/home/rwgk/forked/pybind11/include/pybind11/detail/../detail/type_caster_base.h:1113:32: note:   no known conversion for argument 1 from ‘UnusualOpRef::NonTrivialType’ {aka ‘std::shared_ptr<int>’} to ‘pybind11::detail::type_caster_base<UnusualOpRef>::itype&&’ {aka ‘UnusualOpRef&&’}
       1113 |     static handle cast(itype &&src, return_value_policy, handle parent) {
            |                        ~~~~~~~~^~~
      /usr/local/google/home/rwgk/forked/pybind11/include/pybind11/detail/../detail/type_caster_base.h:1142:19: note: candidate: ‘static pybind11::handle pybind11::detail::type_caster_base<type>::cast(const itype*, pybind11::return_value_policy, pybind11::handle) [with type = UnusualOpRef; itype = UnusualOpRef]’
       1142 |     static handle cast(const itype *src, return_value_policy policy, handle parent) {
            |                   ^~~~
      /usr/local/google/home/rwgk/forked/pybind11/include/pybind11/detail/../detail/type_caster_base.h:1142:37: note:   no known conversion for argument 1 from ‘UnusualOpRef::NonTrivialType’ {aka ‘std::shared_ptr<int>’} to ‘const pybind11::detail::type_caster_base<UnusualOpRef>::itype*’ {aka ‘const UnusualOpRef*’}
       1142 |     static handle cast(const itype *src, return_value_policy policy, handle parent) {
            |                        ~~~~~~~~~~~~~^~~
      ```
      
      * Replace `&src` with `std::addressof(src)` to fix the error building the added tests.
      
      * Fix accident (not sure how the `const` slipped in here when transferring the diff from pybind11k).
      Ralf W. Grosse-Kunstleve committed
  15. 22 Jun, 2024 1 commit
    • feat: remove Python 3.6 support (#5177) · f1a2e03d
      * Change Python version guard: PYTHON < 3.7 IS UNSUPPORTED.
      
      * Replace or remove Python 3.6 jobs.
      
      * Move appveyor to Python 3.8
      
      * Change `[tool.pylint]` `master.py-version` from `3.6` to `3.8`
      
      * Change `[tool.pylint]` `master.py-version` to `3.7`
      
      * Remove `centos:7` job; Change almalinux:8 job to use Python 3.8
      
      * Try 🐍 3.8 • ubuntu-20.04 • x64 without `-DCMAKE_CXX_FLAGS="-D_=1"`
      
      * Update setup.cfg as suggested by @henryiii
      
      * Try running `cmake --build . --target cpptest` on all platforms (`standard` job).
      
      * Disable deadsnakes jobs entirely.
      
      * Apply PR #5179: Add Python 3.10, 3.11, 3.12 to win32 job matrix.
      
      * Add back `-DCMAKE_CXX_FLAGS="-D_=1"` but do not install boost in that case.
      
      * PY_VERSION_HEX < 3.7 cleanup pass: include/pybind11
      
      * WITH_THREAD cleanup pass: include/pybind11
      
      * Undo incorrect change.
      
      * Revert "Disable deadsnakes jobs entirely."
      
      This reverts commit bbcd0087b2d52e0130f96792dd5dd03704280a57.
      
      * WITH_THREAD cleanup pass: tests/
      
      * Change Python version guard in pybind11/__init__.py: pybind11 does not support Python < 3.7.
      
      * Misc cleanup pass
      
      * chore: use future imports
      
      Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
      
      * Update tests/test_numpy_array.py
      
      * Update test_numpy_array.py
      
      ---------
      
      Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
      Co-authored-by: Henry Schreiner <henryschreineriii@gmail.com>
      Ralf W. Grosse-Kunstleve committed
  16. 21 Jun, 2024 1 commit
  17. 18 Jun, 2024 3 commits
  18. 17 Jun, 2024 1 commit
  19. 15 Jun, 2024 2 commits
    • Add type[T] support to typing.h (#5166) · 7c4ac91d
      * add type[T]
      
      * style: pre-commit fixes
      
      * fix merge
      
      ---------
      
      Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
      Michael Carlstrom committed
    • Add `Union` and `Optional` to typing.h (#5165) · 68405a11
      * add type unions and optionals
      
      * add type inheritance
      
      * style: pre-commit fixes
      
      * switch to inheriting from object
      
      * style: pre-commit fixes
      
      * fix text case
      
      * style: pre-commit fixes
      
      * fix bind call
      
      * fix function name
      
      * add std::move for older code
      
      * remove std::move
      
      * move away from object creation
      
      * style: pre-commit fixes
      
      ---------
      
      Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
      Michael Carlstrom committed
  20. 11 Jun, 2024 1 commit
    • Fix refcount bug involving trampoline functions with `PyObject *` return type. (#5156) · ab955f15
      * Transfer diff from pybind11k fork as-is. New tests are still missing.
      
      * Add `PYBIND11_WARNING_DISABLE_MSVC(4127)` into `PYBIND11_OVERRIDE_IMPL` macro.
      
      * Add test_trampoline_with_pyobject_ptr_return()
      
      * Resolve clang-tidy error: use auto when initializing with a template cast to avoid duplicating the type name [modernize-use-auto,-warnings-as-errors]
      
      * Disabled checking refcount when building with PyPy.
      
      * Clang 3.6, 3.7, 3.9 compatibility.
      
      ```
      /__w/pybind11/pybind11/tests/test_type_caster_pyobject_ptr.cpp:23:13: error: definition of implicit copy constructor for 'WithPyObjectPtrReturn' is deprecated because it has a user-declared destructor [-Werror,-Wdeprecated]
          virtual ~WithPyObjectPtrReturn() = default;
                  ^
      ```
      
      * Minor clean-up of production code changes.
      
      * Add missing `override` (to resolve clang-tidy error).
      
      * Move PYBIND11_WARNING_POP for a better clang-format outcome.
      Ralf W. Grosse-Kunstleve committed
  21. 07 Jun, 2024 1 commit
  22. 06 Jun, 2024 2 commits
  23. 30 May, 2024 1 commit