1. 10 Aug, 2023 1 commit
  2. 08 Aug, 2023 2 commits
    • Add `py::set_error()`, use in updated `py::exception<>` documentation (#4772) · 690a115d
      * Copy clang 17 compatibility fixes from PR #4762 to a separate PR.
      
      * static py::exception<> -> static py::handle
      
      * Add `py::set_error()` but also try the suggestion of @malfet (https://github.com/pytorch/pytorch/pull/106401#pullrequestreview-1559961407).
      
      * clang 17 compatibility fixes (#4767)
      
      * Copy clang 17 compatibility fixes from PR #4762 to a separate PR.
      
      * Add gcc:13 C++20
      
      * Add silkeh/clang:16-bullseye C++20
      
      * chore(deps): update pre-commit hooks (#4770)
      
      updates:
      - [github.com/psf/black: 23.3.0 → 23.7.0](https://github.com/psf/black/compare/23.3.0...23.7.0)
      - [github.com/astral-sh/ruff-pre-commit: v0.0.276 → v0.0.281](https://github.com/astral-sh/ruff-pre-commit/compare/v0.0.276...v0.0.281)
      - [github.com/asottile/blacken-docs: 1.14.0 → 1.15.0](https://github.com/asottile/blacken-docs/compare/1.14.0...1.15.0)
      
      Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
      
      * docs: Remove upper bound on pybind11 in example pyproject.toml for setuptools (#4774)
      
      * docs: Remove upper bound on pybind11 in example pyproject.toml for setuptools
      
      * Update docs/compiling.rst
      
      ---------
      
      Co-authored-by: Henry Schreiner <HenrySchreinerIII@gmail.com>
      
      * Provide better type hints for a variety of generic types (#4259)
      
      * Provide better type hints for a variety of generic types
      
      * Makes better documentation
      * tuple, dict, list, set, function
      
      * Move to py::typing
      
      * style: pre-commit fixes
      
      * Update copyright line with correct year and actual author. The author information was copy-pasted from the git log output.
      
      ---------
      
      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>
      
      * Use `py::set_error()` everywhere possible (only one special case, in common.h).
      Overload `py::set_error(py::handle, py::handle)`.
      Change back to `static py::handle exc = ... .release();`
      Deprecate `py::exception<>::operator()`
      
      * Add `PYBIND11_WARNING_DISABLE` for INTEL and MSVC (and sort alphabetically).
      
      * `PYBIND11_WARNING_DISABLE_INTEL(10441)` does not work.
      
      For ICC only, falling back to the recommended `py::set_error()` to keep the testing simple.
      
      It is troublesome to add `--diag-disable=10441` specifically for test_exceptions.cpp, even that is non-ideal because it covers the entire file, not just the one line we need it for, and the value of exercising the trivial deprecated `operator()` on this one extra platform is practically zero.
      
      * Fix silly oversight.
      
      * NVHPC 23.5.0 generates deprecation warnings. They are currently not treated as errors, but falling back to using `py::set_error()` to not have to deal with that distraction.
      
      ---------
      
      Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
      Co-authored-by: Keto D. Zhang <keto.zhang@gmail.com>
      Co-authored-by: Henry Schreiner <HenrySchreinerIII@gmail.com>
      Co-authored-by: Dustin Spicuzza <dustin@virtualroadside.com>
      Ralf W. Grosse-Kunstleve committed
  3. 04 Aug, 2023 4 commits
  4. 03 Aug, 2023 1 commit
  5. 23 Jul, 2023 1 commit
    • Add command to check for vX.Y.Z tag vs pybind11/_version.py consistency. (#4757) · f3e06028
      * Add command to check for vX.Y.Z tag vs pybind11/_version.py consistency. Piggy-backing hints for converting changelog to release message.
      
      * Simpler way of double-checking version number in sources vs. git tag
      
      * Even simpler.
      
      * Fix rst rendering (hopefully) and remove stray dots.
      
      * [ci skip] Trying more to make GitHub rst renderer show this nicely.
      
      * [ci skip] Fix up RST rendering issues.
      
      Lesson learned:
      
      This is NOT GOOD:
      
      ```
      - Bullet nesting level 1.
          - Bullet nesting level 2.
      ```
      
      This is BETTER:
      
      ```
      - Bullet nesting level 1.
        - Bullet nesting level 2.
      ```
      
      Also consistently adding empty lines between bullet points, to make the .rst
      file easier to read.
      
      Also piggy-backing a few very minor enhancements.
      Ralf W. Grosse-Kunstleve committed
  6. 17 Jul, 2023 2 commits
  7. 15 Jul, 2023 2 commits
  8. 14 Jul, 2023 2 commits
  9. 12 Jul, 2023 4 commits
  10. 11 Jul, 2023 1 commit
  11. 10 Jul, 2023 1 commit
  12. 09 Jul, 2023 1 commit
  13. 04 Jul, 2023 1 commit
  14. 27 Jun, 2023 1 commit
  15. 24 Jun, 2023 1 commit
  16. 21 Jun, 2023 1 commit
  17. 17 Jun, 2023 1 commit
  18. 16 Jun, 2023 1 commit
  19. 10 Jun, 2023 1 commit
  20. 07 Jun, 2023 3 commits
  21. 25 May, 2023 1 commit
    • Use annotated for array (#4679) · d0232b11
      * use Annotated for std::array docstring
      
      * add tests
      
      * fix test
      
      * style: pre-commit fixes
      
      * fix valarray annotation
      
      * style: pre-commit fixes
      
      * refix test
      
      * add FixedSize
      
      * style: pre-commit fixes
      
      * Update test_stl.py
      
      * style: pre-commit fixes
      
      ---------
      
      Co-authored-by: Taiju Yamada <taiju.yamada@mujin.co.jp>
      Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
      T.Yamada committed
  22. 23 May, 2023 3 commits
    • Add `format_descriptor<>` & `npy_format_descriptor<>` `PyObject *` specializations. (#4674) · 8e1f9d5c
      * Add `npy_format_descriptor<PyObject *>` to enable `py::array_t<PyObject *>` to/from-python conversions.
      
      * resolve clang-tidy warning
      
      * Use existing constructor instead of adding a static method. Thanks @Skylion007 for pointing out.
      
      * Add `format_descriptor<PyObject *>`
      
      Trivial addition, but still in search for a meaningful test.
      
      * Add test_format_descriptor_format
      
      * Ensure the Eigen `type_caster`s do not segfault when loading arrays with dtype=object
      
      * Use `static_assert()` `!std::is_pointer<>` to replace runtime guards.
      
      * Add comments to explain how to check for ref-count bugs. (NO code changes.)
      
      * Make the "Pointer types ... are not supported" message Eigen-specific, as suggested by @Lalaland. Move to new pybind11/eigen/common.h header.
      
      * Change "format_descriptor_format" implementation as suggested by @Lalaland. Additional tests meant to ensure consistency between py::format_descriptor<>, np.array, np.format_parser turn out to be useful only to highlight long-standing inconsistencies.
      
      * resolve clang-tidy warning
      
      * Account for np.float128, np.complex256 not being available on Windows, in a future-proof way.
      
      * Fully address i|q|l ambiguity (hopefully).
      
      * Remove the new `np.format_parser()`-based test, it's much more distracting than useful.
      
      * Use bi.itemsize to disambiguate "l" or "L"
      
      * Use `py::detail::compare_buffer_info<T>::compare()` to validate the `format_descriptor<T>::format()` strings.
      
      * Add `buffer_info::compare<T>` to make `detail::compare_buffer_info<T>::compare` more visible & accessible.
      
      * silence clang-tidy warning
      
      * pytest-compatible access to np.float128, np.complex256
      
      * Revert "pytest-compatible access to np.float128, np.complex256"
      
      This reverts commit e9a289c50fc07199806d14ded644215ab6f03afa.
      
      * Use `sizeof(long double) == sizeof(double)` instead of `std::is_same<>`
      
      * Report skipped `long double` tests.
      
      * Change the name of the new `buffer_info` member function to `item_type_is_equivalent_to`. Add comment defining "equivalent" by example.
      
      * Change `item_type_is_equivalent_to<>()` from `static` function to member function, as suggested by @Lalaland
      Ralf W. Grosse-Kunstleve committed
    • Create s Security Policy (#4671) · 6e6bcca5
      * Create SECURITY.md
      
      * Update test_files.py to include SECURITY.md file
      
      * Update MANIFEST.in to include SECURITY.md file
      Joyce committed
    • Python 3.11+: Add `__notes__` to `error_already_set::what()` output. (#4678) · ce9bbc0a
      * First version adding `__notes__` to `error_already_set::what()` output.
      
      * Fix trivial oversight (missing adjustment in existing test).
      
      * Minor enhancements of new code.
      
      * Re-enable `cmake --target cpptest -j 2`
      
      * Revert "Re-enable `cmake --target cpptest -j 2`"
      
      This reverts commit 60816285e9e7b95b7d33a60805888b80b2bec641.
      
      * Add general comment explaining why the `error_fetch_and_normalize` code is so unusual.
      Ralf W. Grosse-Kunstleve committed
  23. 22 May, 2023 1 commit
    • chore: update changelog, with target date for v2.11.0 release (#4677) · 19816f0d
      * Remove .dev1 from version number.
      
      * [skip ci] Update changelog.rst
      
      * [ci skip] Fix pre-commit: rst ``code`` is two backticks
      
      * Apply fix suggested by @henryiii
      
      * [ci skip] Set target date for the release to June 2, 2023
      
      * [ci skip] Apply more fixes suggested by @henryiii (I missed those before).
      
      * [ci skip] Revert "Remove .dev1 from version number."
      
      This reverts commit afc80134cb1035be2913fd8153a16a864181c52c.
      Ralf W. Grosse-Kunstleve committed
  24. 15 May, 2023 1 commit
    • ci: set minimal permissions to github workflows (#4665) · d72ffb44
      * set ci.yml minimal permissions
      
      Signed-off-by: Joyce <joycebrum@google.com>
      
      * set configure.yml minimal permissions
      
      Signed-off-by: Joyce <joycebrum@google.com>
      
      * set format.yml minimal permissions
      
      Signed-off-by: Joyce <joycebrum@google.com>
      
      * set pip.yml minimal permissions
      
      Signed-off-by: Joyce <joycebrum@google.com>
      
      * set upstream.yml minimal permissions
      
      Signed-off-by: Joyce <joycebrum@google.com>
      
      * set labeler.yml minimal permissions
      
      Signed-off-by: Joyce <joycebrum@google.com>
      
      * Update ci.yml to read all
      
      Signed-off-by: Joyce <joycebrum@google.com>
      
      * test labeler.yml
      
      Signed-off-by: Joyce <joycebrum@google.com>
      
      * restore the if at labeler.yml
      
      Signed-off-by: Joyce <joycebrum@google.com>
      
      ---------
      
      Signed-off-by: Joyce <joycebrum@google.com>
      Joyce committed
  25. 09 May, 2023 1 commit
    • Update errors in string "Explicit conversions" docs (#4658) · cca4c51c
      `PyUnicode_DecodeLatin1` requires you to pass in the `error`
      parameter. The code as it is in the docs didn't compile.
      
      There is a reference leak in the example
      code. `PyUnicode_DecodeLatin1` returns a new reference. Calling
      `py::str(PyObject*)` calls `PyObject_Str`, which also returns a new
      reference. That reference is managed by the `py::str`
      constructor (which correctly steals the reference, using the
      `stolen_t` constructor), but the original reference returned by
      `PyUnicode_DecodeLatin1` is never decref'd: it never makes it into an
      `object`, and it's never manually decremented.
      
      This fixes both of those issues. The code compiles, and I viewed the
      sphinx docs locally.
      Tim Stumbaugh committed
  26. 08 May, 2023 1 commit
    • Elide to-python conversion of setter return values (#4621) · e9b961d9
      * Reproducer for property setter with return type that is not wrapped.
      
      * Use `py::class_<OptionsBase>()` to work around the return value conversion issue.
      
      * WIP drop_return_value
      
      * Remove struct drop_return_value
      
      * Introduce `return_value_policy::return_none` for use by setters.
      
      * Add `is_setter` to attr.h and use from `.def_property()`
      
      * Merge the new test into test_methods_and_attributes
      
      * Remove return_none return_value_policy again.
      
      * Fix oversight (NOLINTNEXTLINE placement).
      
      * Simplification (for the better) found while searching for a way to resolve GCC build failures.
      
      Example of failure resolved by this change:
      
      g++ (Ubuntu 9.4.0-1ubuntu1~20.04.1) 9.4.0
      
      ```
      cd /build/tests && /usr/bin/c++ -DPYBIND11_TEST_EIGEN -Dpybind11_tests_EXPORTS -I/mounted_pybind11/include -isystem /usr/include/python3.8 -isystem /build/_deps/eigen-src -g -std=c++17 -fPIC -fvisibility=hidden -Wall -Wextra -Wconversion -Wcast-qual -Wdeprecated -Wundef -Wnon-virtual-dtor -MD -MT tests/CMakeFiles/pybind11_tests.dir/test_buffers.cpp.o -MF CMakeFiles/pybind11_tests.dir/test_buffers.cpp.o.d -o CMakeFiles/pybind11_tests.dir/test_buffers.cpp.o -c /mounted_pybind11/tests/test_buffers.cpp
      In file included from /mounted_pybind11/include/pybind11/stl.h:12,
                       from /mounted_pybind11/tests/test_buffers.cpp:10:
      /mounted_pybind11/include/pybind11/pybind11.h: In instantiation of ‘pybind11::class_<type_, options>& pybind11::class_<type_, options>::def_property(const char*, const Getter&, const Setter&, const Extra& ...) [with Getter = pybind11::cpp_function; Setter = std::nullptr_t; Extra = {pybind11::return_value_policy}; type_ = pybind11::buffer_info; options = {}]’:
      /mounted_pybind11/include/pybind11/pybind11.h:1716:58:   required from ‘pybind11::class_<type_, options>& pybind11::class_<type_, options>::def_property_readonly(const char*, const pybind11::cpp_function&, const Extra& ...) [with Extra = {pybind11::return_value_policy}; type_ = pybind11::buffer_info; options = {}]’
      /mounted_pybind11/include/pybind11/pybind11.h:1684:9:   required from ‘pybind11::class_<type_, options>& pybind11::class_<type_, options>::def_readonly(const char*, const D C::*, const Extra& ...) [with C = pybind11::buffer_info; D = long int; Extra = {}; type_ = pybind11::buffer_info; options = {}]’
      /mounted_pybind11/tests/test_buffers.cpp:209:61:   required from here
      /mounted_pybind11/include/pybind11/pybind11.h:1740:25: error: call of overloaded ‘cpp_function(std::nullptr_t&, pybind11::is_setter)’ is ambiguous
       1740 |             name, fget, cpp_function(method_adaptor<type>(fset), is_setter()), extra...);
            |                         ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      /mounted_pybind11/include/pybind11/pybind11.h:101:5: note: candidate: ‘pybind11::cpp_function::cpp_function(Func&&, const Extra& ...) [with Func = std::nullptr_t&; Extra = {pybind11::is_setter}; <template-parameter-1-3> = void]’
        101 |     cpp_function(Func &&f, const Extra &...extra) {
            |     ^~~~~~~~~~~~
      In file included from /mounted_pybind11/include/pybind11/stl.h:12,
                       from /mounted_pybind11/tests/test_buffers.cpp:10:
      /mounted_pybind11/include/pybind11/pybind11.h:87:5: note: candidate: ‘pybind11::cpp_function::cpp_function(std::nullptr_t, const Extra& ...) [with Extra = {pybind11::is_setter}; std::nullptr_t = std::nullptr_t]’
         87 |     cpp_function(std::nullptr_t, const Extra &...) {}
            |     ^~~~~~~~~~~~
      ```
      
      * Bug fix: obvious in hindsight. I thought the original version was incrementing the reference count for None, but no.
      
      Discovered via many failing tests in the wild (10s of thousands).
      
      It is very tricky to construct a meaningful unit test for this bug specifically. It's unlikely to come back, because 10s of thousands of tests will fail again.
      Ralf W. Grosse-Kunstleve committed