1. 26 Aug, 2024 2 commits
  2. 22 Aug, 2024 3 commits
    • docs: prepare for 2.13.5 (#5327) · c2291e59
      * docs: prepare for 2.13.5
      
      Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
      
      * Update docs/changelog.rst
      
      ---------
      
      Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
      Henry Schreiner committed
    • docs: clarify requirements for including pybind11 (#5326) · efa2b20d
      * DOC: Clarify requirements for including pybind11
      
      Inherited from requirements for including Python.h
      
      Closes #4999
      
      * style: pre-commit fixes
      
      ---------
      
      Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
      DWesl committed
    • fix: allow -Wpedantic in C++20 mode (#5322) · 9966ad40
      * fix: allow -Wpedantic again
      
      Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
      
      * tests: ignore pedantic warning for PYBIND11_DECLARE_HOLDER_TYPE
      
      Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
      
      * tests: try just turning off pedantic for one file
      
      Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
      
      * tests: only run pedantic in C++20 mode
      
      Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
      
      * Update tests/local_bindings.h
      
      ---------
      
      Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
      Henry Schreiner committed
  3. 21 Aug, 2024 2 commits
    • fix: `<ranges>` support for `py::tuple` and `py::list` (#5314) · 2baf9d68
      * feat: add `<ranges>` support for `py::tuple` and `py::list`
      
      * fix: format the code
      
      * fix: disable `ranges` in clang < 16
      
      * refactor: move `<ranges>` test macro to `test_pytypes.h`
      
      * refactor: seperate `ranges` test into 3 funcs
      
      * style: compress the if statement
      
      * style: pre-commit fixes
      
      * style: better formatting
      
      ---------
      
      Co-authored-by: Henry Schreiner <HenrySchreinerIII@gmail.com>
      Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
      ObeliskGate committed
    • fix: never use `..` in a header include (#5321) · 7d85baa6
      * fix: never use `..` in a header include
      
      Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
      
      * fix: one more parent include
      
      Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
      
      ---------
      
      Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
      Henry Schreiner committed
  4. 15 Aug, 2024 2 commits
  5. 14 Aug, 2024 4 commits
  6. 13 Aug, 2024 5 commits
    • Make stl.h `list|set|map_caster` more user friendly. (#4686) · 0d44d720
      * Add `test_pass_std_vector_int()`, `test_pass_std_set_int()` in test_stl
      
      * Change `list_caster` to also accept generator objects (`PyGen_Check(src.ptr()`).
      
      Note for completeness: This is a more conservative change than https://github.com/google/pywrapcc/pull/30042
      
      * Drop in (currently unpublished) PyCLIF code, use in `list_caster`, adjust tests.
      
      * Use `PyObjectTypeIsConvertibleToStdSet()` in `set_caster`, adjust tests.
      
      * Use `PyObjectTypeIsConvertibleToStdMap()` in `map_caster`, add tests.
      
      * Simplify `list_caster` `load()` implementation, push str/bytes check into `PyObjectTypeIsConvertibleToStdVector()`.
      
      * clang-tidy cleanup with a few extra `(... != 0)` to be more consistent.
      
      * Also use `PyObjectTypeIsConvertibleToStdVector()` in `array_caster`.
      
      * Update comment pointing to clif/python/runtime.cc (code is unchanged).
      
      * Comprehensive test coverage, enhanced set_caster load implementation.
      
      * Resolve clang-tidy eror.
      
      * Add a long C++ comment explaining what led to the `PyObjectTypeIsConvertibleTo*()` implementations.
      
      * Minor function name change in test.
      
      * strcmp -> std::strcmp (thanks @Skylion007 for catching this)
      
      * Add `PyCallable_Check(items)` in `PyObjectTypeIsConvertibleToStdMap()`
      
      * Resolve clang-tidy error
      
      * Use `PyMapping_Items()` instead of `src.attr("items")()`, to be internally consistent with `PyMapping_Check()`
      
      * Update link to PyCLIF sources.
      
      * Fix typo (thanks @wangxf123456 for catching this)
      
      * Add `test_pass_std_vector_int()`, `test_pass_std_set_int()` in test_stl
      
      * Change `list_caster` to also accept generator objects (`PyGen_Check(src.ptr()`).
      
      Note for completeness: This is a more conservative change than https://github.com/google/pywrapcc/pull/30042
      
      * Drop in (currently unpublished) PyCLIF code, use in `list_caster`, adjust tests.
      
      * Use `PyObjectTypeIsConvertibleToStdSet()` in `set_caster`, adjust tests.
      
      * Use `PyObjectTypeIsConvertibleToStdMap()` in `map_caster`, add tests.
      
      * Simplify `list_caster` `load()` implementation, push str/bytes check into `PyObjectTypeIsConvertibleToStdVector()`.
      
      * clang-tidy cleanup with a few extra `(... != 0)` to be more consistent.
      
      * Also use `PyObjectTypeIsConvertibleToStdVector()` in `array_caster`.
      
      * Update comment pointing to clif/python/runtime.cc (code is unchanged).
      
      * Comprehensive test coverage, enhanced set_caster load implementation.
      
      * Resolve clang-tidy eror.
      
      * Add a long C++ comment explaining what led to the `PyObjectTypeIsConvertibleTo*()` implementations.
      
      * Minor function name change in test.
      
      * strcmp -> std::strcmp (thanks @Skylion007 for catching this)
      
      * Add `PyCallable_Check(items)` in `PyObjectTypeIsConvertibleToStdMap()`
      
      * Resolve clang-tidy error
      
      * Use `PyMapping_Items()` instead of `src.attr("items")()`, to be internally consistent with `PyMapping_Check()`
      
      * Update link to PyCLIF sources.
      
      * Fix typo (thanks @wangxf123456 for catching this)
      
      * Fix typo discovered by new version of codespell.
      Ralf W. Grosse-Kunstleve committed
    • docs: prepare for 2.13.3 · 4a06eca5
      Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
      Henry Schreiner committed
    • fix: quote paths from pybind11-config (#5302) · 8d9f4d50
      Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
      Henry Schreiner committed
    • fix: emscripten cmake issue (#5301) · 1fe92c7b
      Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
      Henry Schreiner committed
    • docs: prepare for 2.13.2 (#5299) · 40f2c786
      * docs: prepare for 2.13.2
      
      Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
      
      * Update changelog.rst
      
      * Update changelog.rst
      
      ---------
      
      Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
      Henry Schreiner committed
  7. 12 Aug, 2024 2 commits
  8. 09 Aug, 2024 1 commit
    • Add `type_caster_std_function_specializations` feature. (#4597) · 89879448
      * Allow specializations based on callback function return values.
      
      * clang-tidy auto fix
      
      * Add a test case for function specialization.
      
      * Add test for callback function that raises Python exception.
      
      * Fix test failures.
      
      * style: pre-commit fixes
      
      * Add `#define PYBIND11_HAS_TYPE_CASTER_STD_FUNCTION_SPECIALIZATIONS`
      
      ---------
      
      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>
      Xiaofei Wang committed
  9. 06 Aug, 2024 1 commit
  10. 05 Aug, 2024 1 commit
  11. 02 Aug, 2024 1 commit
  12. 30 Jul, 2024 1 commit
    • feat: remove Python 3.7 support (#5191) · 72330728
      * First pass updating misc files, informed by https://github.com/pybind/pybind11/pull/5177/commits
      
      * Remove jobs using silkeh/clang and gcc docker containers that come with Python 3.7
      
      * Add silkeh/clang:17-bookworm
      
      * Add job using GCC 7
      
      * Revert "Add job using GCC 7"
      
      This reverts commit 518515a761ac37dc2cf5d0980da82d0de39edc28.
      
      * Try running in ubuntu-18.04 container under ubuntu-latest (to get GCC 7)
      
      * Fix `-` vs `:` mixup.
      
      * This reverts commit b1c4304475b8ad129c12330c7ed7eb85d15ba14a.
      
      Revert "Try running in ubuntu:18.04 container under ubuntu-latest (to get GCC 7)"
      
      This reverts commit b203a294bb444fc6ae57a0100fa91dc91b8d3264.
      
      * `git grep 0x03080000` cleanup.
      
      * `git grep -I -E '3\.7'` cleanup.
      
      Removes two changes made under pybind/pybind11#3702
      
      * Revert "`git grep -I -E '3\.7'` cleanup."
      
      This reverts commit bb5b9d187bffbfb61e2977d7eee46b766fa1cce9.
      
      * Remove comments that are evidently incorrect:
      
      ```
      ...
      -- The CXX compiler identification is Clang 15.0.7
      ...
      - Found Python: /usr/bin/python3.9 (found suitable version "3.9.2", minimum required is "3.7") found components: Interpreter Development.Module Development.Embed
      ...
      /__w/pybind11/pybind11/include/pybind11/gil.h:150:13: error: 'auto key' can be declared as 'auto *key' [readability-qualified-auto,-warnings-as-errors]
                  auto key = internals.tstate;
                  ^~~~~
                  auto *
      /__w/pybind11/pybind11/include/pybind11/gil.h:174:13: error: 'auto key' can be declared as 'auto *key' [readability-qualified-auto,-warnings-as-errors]
                  auto key = detail::get_internals().tstate;
                  ^~~~~
                  auto *
      ```
      
      * .github/workflows/configure.yml: Change from Python 3.7 to 3.8
      
      * Misc cleanup pass
      
      * Miscellaneous changes based on manual review of the `git grep` matches below:
      
      ```
      git_grep_37_38.sh |& sort | uniq -c
      ```
      
      With git_grep_37_38.sh:
      
      ```
      set -x
      git grep 0x0307
      git grep 0x0308
      git grep PY_MINOR_VERSION
      git grep PYPY_VERSION
      git grep -I -E '3\.7'
      git grep -I -E '3\.8'
      git grep -I -E '\(3, 7'
      git grep -I -E '\(3, 8'
      git grep -I -E '3[^A-Za-z0-9.]+7'
      git grep -I -E '3[^A-Za-z0-9.]+8'
      ```
      
      Output:
      
      ```
            1 .appveyor.yml:    $env:CMAKE_INCLUDE_PATH = "eigen-3.3.7;$env:CMAKE_INCLUDE_PATH"
            1 .appveyor.yml:    7z x eigen-3.3.7.zip -y > $null
            1 .appveyor.yml:    Start-FileDownload 'https://gitlab.com/libeigen/eigen/-/archive/3.3.7/eigen-3.3.7.zip'
            1 CMakeLists.txt:    # Bug in macOS CMake < 3.7 is unable to download catch
            1 CMakeLists.txt:  elseif(WINDOWS AND CMAKE_VERSION VERSION_LESS 3.8)
            1 CMakeLists.txt:  if(OSX AND CMAKE_VERSION VERSION_LESS 3.7)
            1 CMakeLists.txt:    message(WARNING "CMAKE 3.7+ needed on macOS to download catch, and newer HIGHLY recommended")
            1 CMakeLists.txt:    message(WARNING "CMAKE 3.8+ tested on Windows, previous versions untested")
            1 CMakeLists.txt:    # Only tested with 3.8+ in CI.
            1 docs/advanced/functions.rst:Python 3.8 introduced a new positional-only argument syntax, using ``/`` in the
            1 docs/changelog.rst:* Adapt pybind11 to a C API convention change in Python 3.8. `#1950
            1 docs/changelog.rst:* Allow thread termination to be avoided during shutdown for CPython 3.7+ via
            1 docs/changelog.rst:  considered as conversion, consistent with Python 3.8+.
            1 docs/changelog.rst:  CPython 3.8 and 3.9 debug builds.
            1 docs/changelog.rst:* Enum now has an ``__index__`` method on Python <3.8 too.
            1 docs/changelog.rst:  on Python 3.8. `#1780 <https://github.com/pybind/pybind11/pull/1780>`_.
            1 docs/changelog.rst:* PyPy 3.10 support was added, PyPy 3.7 support was dropped.
            2 docs/changelog.rst:* Support PyPy 7.3.7 and the PyPy3.8 beta. Test python-3.11 on PRs with the
            1 docs/changelog.rst:* Use ``macos-13`` (Intel) for CI jobs for now (will drop Python 3.7 soon).
            1 docs/changelog.rst:* Use new Python 3.7 Thread Specific Storage (TSS) implementation if available.
            1 docs/compiling.rst:    cmake -DPYBIND11_PYTHON_VERSION=3.8 ..
            1 docs/compiling.rst:    find_package(Python 3.8 COMPONENTS Interpreter Development REQUIRED)
            1 docs/limitations.rst:- PyPy3 7.3.1 and 7.3.2 have issues with several tests on 32-bit Windows.
            1 docs/requirements.txt:idna==3.7 \
            1 + git grep 0x0307
            1 + git grep 0x0308
            1 + git grep -I -E '\(3, 7'
            1 + git grep -I -E '3\.7'
            1 + git grep -I -E '\(3, 8'
            1 + git grep -I -E '3\.8'
            1 + git grep -I -E '3[^A-Za-z0-9.]+7'
            1 + git grep -I -E '3[^A-Za-z0-9.]+8'
            1 + git grep PY_MINOR_VERSION
            1 + git grep PYPY_VERSION
            2 .github/workflows/ci.yml:        - '3.8'
            1 .github/workflows/ci.yml:        - 3.8
            1 .github/workflows/ci.yml:    - name: Add Python 3.8
            1 .github/workflows/ci.yml:        - 'pypy-3.8'
            2 .github/workflows/ci.yml:            python: '3.8'
            1 .github/workflows/ci.yml:          - python: '3.8'
            1 .github/workflows/ci.yml:          - python: 3.8
            1 .github/workflows/ci.yml:            python: 'pypy-3.8'
            1 .github/workflows/configure.yml:          cmake: "3.8"
            1 .github/workflows/configure.yml:    name: 🐍 3.8 • CMake ${{ matrix.cmake }} • ${{ matrix.runs-on }}
            1 .github/workflows/configure.yml:    - name: Setup Python 3.8
            1 .github/workflows/configure.yml:        python-version: 3.8
            1 .github/workflows/pip.yml:    name: 🐍 3.8 • 📦 & 📦 tests • ubuntu-latest
            1 .github/workflows/pip.yml:    name: 🐍 3.8 • 📦 tests • windows-latest
            2 .github/workflows/pip.yml:    - name: Setup 🐍 3.8
            2 .github/workflows/pip.yml:        python-version: 3.8
            2 include/pybind11/cast.h:#if !defined(PYPY_VERSION)
            2 include/pybind11/cast.h:#if defined(PYPY_VERSION)
            2 include/pybind11/cast.h:            // PyPy: 7.3.7's 3.8 does not implement PyLong_*'s __index__ calls.
            5 include/pybind11/detail/class.h:#if !defined(PYPY_VERSION)
            1 include/pybind11/detail/class.h:#if defined(PYPY_VERSION)
            1 include/pybind11/detail/class.h:    // This was not needed before Python 3.8 (Python issue 35810)
            1 include/pybind11/detail/common.h:    && !defined(PYPY_VERSION) && !defined(PYBIND11_ASSERT_GIL_HELD_INCREF_DECREF)
            2 include/pybind11/detail/common.h:#    error "PYTHON < 3.8 IS UNSUPPORTED. pybind11 v2.13 was the last to support Python 3.7."
            1 include/pybind11/detail/common.h:#if defined(PYPY_VERSION) && !defined(PYBIND11_SIMPLE_GIL_MANAGEMENT)
            1 include/pybind11/detail/common.h:#if PY_VERSION_HEX < 0x03080000
            1 include/pybind11/detail/common.h:            = PYBIND11_TOSTRING(PY_MAJOR_VERSION) "." PYBIND11_TOSTRING(PY_MINOR_VERSION);        \
            1 include/pybind11/detail/internals.h:        // called. PYBIND11_TLS_FREE is PyThread_tss_free on python 3.7+. On older python, it does
            1 include/pybind11/detail/internals.h:#if PYBIND11_INTERNALS_VERSION <= 4 || defined(PYPY_VERSION)
            1 include/pybind11/detail/internals.h:// The old Python Thread Local Storage (TLS) API is deprecated in Python 3.7 in favor of the new
            1 include/pybind11/detail/type_caster_base.h:#if defined(PYPY_VERSION)
            1 include/pybind11/embed.h:#    define PYBIND11_PYCONFIG_SUPPORT_PY_VERSION_HEX (0x03080000)
            1 include/pybind11/embed.h:#if defined(PYPY_VERSION)
            1 include/pybind11/eval.h:    // globals if not yet present.  Python 3.8 made PyRun_String behave
            2 include/pybind11/eval.h:#if defined(PYPY_VERSION)
            2 include/pybind11/eval.h:    // was missing from PyPy3.8 7.3.7.
            2 include/pybind11/gil.h:    /// allowed during shutdown. Check _Py_IsFinalizing() on Python 3.7+, and
            1 include/pybind11/pybind11.h:#if !defined(PYPY_VERSION)
            4 include/pybind11/pybind11.h:#if !defined(PYPY_VERSION) && PY_MAJOR_VERSION == 3 && PY_MINOR_VERSION == 9
            1 include/pybind11/pytypes.h:#endif //! defined(PYPY_VERSION)
            2 include/pybind11/pytypes.h:#if !defined(PYPY_VERSION)
            1 include/pybind11/pytypes.h:#    if defined(PYPY_VERSION_NUM) && PYPY_VERSION_NUM < 0x07030a00
            1 include/pybind11/pytypes.h:#ifdef PYPY_VERSION
            1 include/pybind11/stl/filesystem.h:#    if !defined(PYPY_VERSION)
            2 pybind11/__init__.py:if sys.version_info < (3, 8):
            2 pybind11/__init__.py:    msg = "pybind11 does not support Python < 3.8. v2.13 was the last release supporting Python 3.7."
            1 pyproject.toml:master.py-version = "3.8"
            1 pyproject.toml:python_version = "3.8"
            1 README.rst:lines of code and depend on Python (3.8+, or PyPy) and the C++
            2 README.rst:- Python 3.8+, and PyPy3 7.3 are supported with an implementation-agnostic
            1 setup.cfg:    Programming Language :: Python :: 3.8
            1 setup.cfg:python_requires = >=3.8
            1 setup.py:# TODO: use literals & overload (typing extensions or Python 3.8)
            1 tests/CMakeLists.txt:if(NOT CMAKE_VERSION VERSION_LESS 3.8)
            2 tests/constructor_stats.h:#if defined(PYPY_VERSION)
            1 tests/env.py:    doesn't work on CPython 3.8.0 with pytest==3.3.2 on Ubuntu 18.04 (#2922).
            1 tests/requirements.txt:build~=1.0; python_version>="3.8"
            1 tests/requirements.txt:numpy~=1.21.5; platform_python_implementation!="PyPy" and python_version>="3.8" and python_version<"3.10"
            1 tests/requirements.txt:numpy~=1.23.0; python_version=="3.8" and platform_python_implementation=="PyPy"
            1 tests/test_buffers.py:    env.PYPY, reason="PyPy 7.3.7 doesn't clear this anymore", strict=False
            1 tests/test_builtin_casters.py:    # Before Python 3.8, `PyLong_AsLong` does not pick up on `obj.__index__`,
            2 tests/test_builtin_casters.py:    if (3, 8) <= sys.version_info < (3, 10) and env.CPYTHON:
            4 tests/test_builtin_casters.py:    # TODO: PyPy 3.8 does not behave like CPython 3.8 here yet (7.3.7)
            1 tests/test_callbacks.py:    assert m.test_callback3(z.double) == "func(43) = 86"
            2 tests/test_call_policies.cpp:#if !defined(PYPY_VERSION)
            1 tests/test_chrono.py:    diff = m.test_chrono_float_diff(43.789012, 1.123456)
            1 tests/test_constants_and_functions.py:    assert m.f3(86) == 89
            1 tests/test_eigen_matrix.py:    a_copy3[8, 1] = 11
            1 tests/test_eigen_matrix.py:    assert np.all(cornersc == np.array([[1.0, 3], [7, 9]]))
            1 tests/test_eigen_matrix.py:    assert np.all(cornersr == np.array([[1.0, 3], [7, 9]]))
            1 tests/test_eigen_matrix.py:        mymat = chol(np.array([[1.0, 2, 4], [2, 13, 23], [4, 23, 77]]))
            1 tests/test_exceptions.py:    if hasattr(pytest, unraisable):  # Python >= 3.8 and pytest >= 6
            2 tests/test_exceptions.py:@pytest.mark.xfail(env.PYPY, reason="Failure on PyPy 3.8 (7.3.7)", strict=False)
            1 tests/test_factory_constructors.py:    assert [i.alive() for i in cstats] == [13, 7]
            1 tests/test_kwargs_and_defaults.cpp:#ifdef PYPY_VERSION
            1 tests/test_local_bindings.py:    assert i1.get3() == 8
            1 tests/test_methods_and_attributes.cpp:#if !defined(PYPY_VERSION)
            1 tests/test_numpy_array.py:    a = np.arange(3 * 7 * 2) + 1
            1 tests/test_numpy_array.py:    assert str(excinfo.value) == "cannot reshape array of size 42 into shape (3,7,1)"
            2 tests/test_numpy_array.py:    assert x.shape == (3, 7, 2)
            2 tests/test_numpy_array.py:        m.reshape_tuple(a, (3, 7, 1))
            2 tests/test_numpy_array.py:    x = m.reshape_tuple(a, (3, 7, 2))
            1 tests/test_numpy_vectorize.py:    assert np.isclose(m.vectorized_func3(np.array(3 + 7j)), [6 + 14j])
            1 tests/test_pickling.cpp:#if !defined(PYPY_VERSION)
            1 tests/test_pytypes.cpp:#if (defined(__APPLE__) && defined(__clang__)) || defined(PYPY_VERSION)
            1 tests/test_smart_ptr.cpp:    m.def("make_myobject3_1", []() { return new MyObject3(8); });
            1 tests/test_smart_ptr.py:    assert cstats.values() == ["MyObject3[9]", "MyObject3[8]", "MyObject3[9]"]
            1 tests/test_stl_binders.py:    assert v_int2 == m.VectorInt([0, 99, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 88])
            1 tests/test_stl_binders.py:    assert v_int2 == m.VectorInt([0, 99, 2, 3, 4, 5, 6, 7, 0, 1, 2, 3, 88, 4])
            1 tests/test_type_caster_pyobject_ptr.cpp:#if !defined(PYPY_VERSION) // It is not worth the trouble doing something special for PyPy.
            1 tools/FindPythonLibsNew.cmake:  set(PythonLibsNew_FIND_VERSION "3.8")
            1 tools/JoinPaths.cmake:# https://docs.python.org/3.7/library/os.path.html#os.path.join
            1 tools/pybind11NewTools.cmake:    Python 3.8 REQUIRED COMPONENTS ${_pybind11_interp_component} ${_pybind11_dev_component}
            1 tools/pybind11NewTools.cmake:# Python debug libraries expose slightly different objects before 3.8
            1 tools/pybind11Tools.cmake:    "3.12;3.11;3.10;3.9;3.8"
            1 tools/pybind11Tools.cmake:    if(NOT DEFINED PYPY_VERSION)
            1 tools/pybind11Tools.cmake:    message(STATUS "PYPY ${PYPY_VERSION} (Py ${PYTHON_VERSION})")
            1 tools/pybind11Tools.cmake:# Python debug libraries expose slightly different objects before 3.8
            1 tools/pybind11Tools.cmake:      set(PYPY_VERSION
      ```
      
      * Change `[tool.ruff]` `target-version` to `"py38"`, as suggested by @Skylion007
      Ralf W. Grosse-Kunstleve committed
  13. 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
  14. 24 Jul, 2024 1 commit
  15. 19 Jul, 2024 1 commit
  16. 18 Jul, 2024 2 commits
  17. 16 Jul, 2024 1 commit
  18. 15 Jul, 2024 1 commit
  19. 06 Jul, 2024 1 commit
  20. 02 Jul, 2024 2 commits
  21. 01 Jul, 2024 1 commit
  22. 30 Jun, 2024 1 commit
  23. 28 Jun, 2024 3 commits