1. Jun 11, 2023
  2. Jun 08, 2023
  3. May 25, 2023
  4. May 24, 2023
    • Ralf W. Grosse-Kunstleve's avatar
      78658b80
    • Ralf W. Grosse-Kunstleve's avatar
      Add `format_descriptor<>` & `npy_format_descriptor<>` `PyObject *` specializations. (#4674) · 8e1f9d5c
      Ralf W. Grosse-Kunstleve authored
      * 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
      8e1f9d5c
    • Joyce's avatar
      Create s Security Policy (#4671) · 6e6bcca5
      Joyce authored
      * Create SECURITY.md
      
      * Update test_files.py to include SECURITY.md file
      
      * Update MANIFEST.in to include SECURITY.md file
      6e6bcca5
    • Ralf W. Grosse-Kunstleve's avatar
      Python 3.11+: Add `__notes__` to `error_already_set::what()` output. (#4678) · ce9bbc0a
      Ralf W. Grosse-Kunstleve authored
      * 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.
      ce9bbc0a
  5. May 23, 2023
    • Ralf W. Grosse-Kunstleve's avatar
      chore: update changelog, with target date for v2.11.0 release (#4677) · 19816f0d
      Ralf W. Grosse-Kunstleve authored
      * 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.
      19816f0d
  6. May 16, 2023
  7. May 09, 2023
    • Tim Stumbaugh's avatar
      Update errors in string "Explicit conversions" docs (#4658) · cca4c51c
      Tim Stumbaugh authored
      `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.
      cca4c51c
    • Ralf W. Grosse-Kunstleve's avatar
      eb456b15
    • Ralf W. Grosse-Kunstleve's avatar
      Elide to-python conversion of setter return values (#4621) · e9b961d9
      Ralf W. Grosse-Kunstleve authored
      * 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.
      e9b961d9
  8. May 08, 2023
    • Ralf W. Grosse-Kunstleve's avatar
      Add handling of `return_value_policy::_clif_automatic` in... · bd69f7aa
      Ralf W. Grosse-Kunstleve authored
      Add handling of `return_value_policy::_clif_automatic` in type_caster_pyobject_ptr.h (backported from https://github.com/google/pywrapcc/pull/30021)
      bd69f7aa
    • Ralf W. Grosse-Kunstleve's avatar
      ba3d14d4
    • Ralf W. Grosse-Kunstleve's avatar
      Add `type_caster<PyObject>` (#4601) · 90312a6e
      Ralf W. Grosse-Kunstleve authored
      * 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.
      ```
      90312a6e
  9. May 05, 2023
    • Ralf W. Grosse-Kunstleve's avatar
      9651d3bd
    • Franz Pöschel's avatar
      Introduce recursive_container_traits (#4623) · f7016546
      Franz Pöschel authored
      
      
      * 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: default avatarpre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
      f7016546
  10. May 03, 2023
  11. May 01, 2023
  12. Apr 29, 2023
  13. Apr 27, 2023
  14. Apr 26, 2023
    • Ralf W. Grosse-Kunstleve's avatar
      Use `std::hash<std::type_index>`, `std::equal_to<std::type_index>` everywhere... · 6de6191a
      Ralf W. Grosse-Kunstleve authored
      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).
      6de6191a
    • Ralf W. Grosse-Kunstleve's avatar
      1. Fully test unstable ABI (#4635) · ff7f5dfc
      Ralf W. Grosse-Kunstleve authored
      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
      ```
      ff7f5dfc
  15. Apr 24, 2023