1. 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
  2. 03 May, 2023 2 commits
  3. 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
  4. 29 Apr, 2023 1 commit
  5. 28 Apr, 2023 1 commit
  6. 27 Apr, 2023 1 commit
  7. 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
  8. 24 Apr, 2023 1 commit
  9. 23 Apr, 2023 1 commit
  10. 07 Apr, 2023 1 commit
  11. 03 Apr, 2023 1 commit
  12. 30 Mar, 2023 1 commit
    • ci: Python 3.12 optional test job (#4575) · 4ce05175
      * ci: Python 3.12 optional testing
      
      Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
      
      * Skip test_flaky_exception_failure_point_init() for Python 3.12.0a6 (similar to https://github.com/google/pywrapcc/commit/af5c6536aba77b1db99bb16995d3a684351efb93#diff-f46006e3f43ffb1dd5d6862005427f6620f4dcfb1fa2f883d8482550069eeecc).
      
      * Disable tests/test_embed/test_interpreter.cpp (broken with Python 3.12.0alpha6)
      
      ```
      free(): invalid pointer
      
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      test_embed is a Catch v2.13.9 host application.
      Run with -? for options
      
      -------------------------------------------------------------------------------
      Custom PyConfig
      -------------------------------------------------------------------------------
      /home/runner/work/pybind11/pybind11/tests/test_embed/test_interpreter.cpp:175
      ...............................................................................
      
      /home/runner/work/pybind11/pybind11/tests/test_embed/test_interpreter.cpp:179: FAILED:
        {Unknown expression after the reported line}
      due to a fatal error condition:
        SIGABRT - Abort (abnormal termination) signal
      
      ===============================================================================
      test cases:    6 |    5 passed | 1 failed
      assertions: 1518 | 1517 passed | 1 failed
      ```
      
      ---------
      
      Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
      Co-authored-by: Ralf W. Grosse-Kunstleve <rwgk@google.com>
      Henry Schreiner committed
  13. 28 Mar, 2023 2 commits
  14. 27 Mar, 2023 1 commit
  15. 24 Mar, 2023 1 commit
  16. 23 Mar, 2023 1 commit
  17. 16 Mar, 2023 3 commits
  18. 09 Mar, 2023 1 commit
  19. 07 Mar, 2023 1 commit
  20. 23 Feb, 2023 1 commit
    • add --version option to pybind11-config (#4526) · 3cc7e425
      Without this, it's impossible to get feature parity between detection
      mechanisms. Both the pkg-config file and the cmake config set their
      versions, but the python probe script didn't provide an option for this.
      
      So you could print the compiler flags for using it, but you could not
      check what you got.
      Eli Schwartz committed
  21. 22 Feb, 2023 1 commit
  22. 20 Feb, 2023 1 commit
  23. 17 Feb, 2023 3 commits
  24. 16 Feb, 2023 2 commits
  25. 10 Feb, 2023 1 commit
  26. 09 Feb, 2023 1 commit
  27. 08 Feb, 2023 2 commits
  28. 07 Feb, 2023 1 commit
  29. 06 Feb, 2023 2 commits
  30. 04 Feb, 2023 1 commit