Commit Graph

831 Commits

Author SHA1 Message Date
Ralf W. Grosse-Kunstleve
d57ed515a8 Adjustments related to pybind/pybind11#4985 2024-04-02 20:35:57 -07:00
Ralf W. Grosse-Kunstleve
8c5bb07995 Merge branch 'master' into annotated_any 2024-04-02 20:27:03 -07:00
pre-commit-ci[bot]
f33f6afb66
chore(deps): update pre-commit hooks (#5084)
* chore(deps): update pre-commit hooks

updates:
- [github.com/pre-commit/mirrors-clang-format: v17.0.6 → v18.1.2](https://github.com/pre-commit/mirrors-clang-format/compare/v17.0.6...v18.1.2)
- [github.com/astral-sh/ruff-pre-commit: v0.2.0 → v0.3.5](https://github.com/astral-sh/ruff-pre-commit/compare/v0.2.0...v0.3.5)
- [github.com/pre-commit/mirrors-mypy: v1.8.0 → v1.9.0](https://github.com/pre-commit/mirrors-mypy/compare/v1.8.0...v1.9.0)
- [github.com/Lucas-C/pre-commit-hooks: v1.5.4 → v1.5.5](https://github.com/Lucas-C/pre-commit-hooks/compare/v1.5.4...v1.5.5)
- [github.com/sirosen/texthooks: 0.6.4 → 0.6.6](https://github.com/sirosen/texthooks/compare/0.6.4...0.6.6)
- [github.com/shellcheck-py/shellcheck-py: v0.9.0.6 → v0.10.0.1](https://github.com/shellcheck-py/shellcheck-py/compare/v0.9.0.6...v0.10.0.1)
- [github.com/PyCQA/pylint: v3.0.3 → v3.1.0](https://github.com/PyCQA/pylint/compare/v3.0.3...v3.1.0)
- [github.com/python-jsonschema/check-jsonschema: 0.28.0 → 0.28.1](https://github.com/python-jsonschema/check-jsonschema/compare/0.28.0...0.28.1)

* style: pre-commit fixes

* fix(types): correction for better typing

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>

---------

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Henry Schreiner <henryschreineriii@gmail.com>
2024-04-02 11:14:08 -04:00
Ralf W. Grosse-Kunstleve
67c41cc838 Merge branch 'master' into annotated_any 2024-04-01 09:55:51 -07:00
Henry Schreiner
7f2214bc68
chore: bump cmake to 3.29 (#5075)
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
2024-03-27 20:11:13 -04:00
Matthias Volk
67c9c5687b
fix: fully qualify usages of concat to protect against ADL (#4955)
* Call concat with proper namespace in cast.h

* Apply suggestions from code review

* tests: add test for ADL on concat

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>

* fix: fully qualify all usages of concat

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>

---------

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
Co-authored-by: Henry Schreiner <HenrySchreinerIII@gmail.com>
2024-03-27 16:51:03 -04:00
Ralf W. Grosse-Kunstleve
0efff79f01
Bug fixes: Add missing handle_type_name specializations. (#5073)
* Transfer bug fixes from #4888 wholesale. Full test coverage for all fixes is still missing.

* Add cmake option(PYBIND11_DISABLE_HANDLE_TYPE_NAME_DEFAULT_IMPLEMENTATION) and use in some tests.
2024-03-27 12:39:05 -07:00
pre-commit-ci[bot]
bf6077affc style: pre-commit fixes 2024-03-27 06:21:36 +00:00
Ralf W. Grosse-Kunstleve
1e6bea27f7 Merge branch 'master' into annotated_any 2024-03-26 23:20:13 -07:00
Sebastian Berg
705efccecd
feat: make numpy.h compatible with both NumPy 1.x and 2.x (#5050)
* API: Make `numpy.h` compatible with both NumPy 1.x and 2.x

* TST: Update numpy dtype flags test to not covert flags to char

* API: Add `numpy2.h` instead and make `numpy.h` safe

This means that users of `numpy.h` cannot be broken, but need to
update to `numpy2.h` if they want to compile for NumPy 2.

Using Macros simply and didn't bother to try to remove unnecessary
code paths.

* API: Rather than `numpy2.h` use a define for the user.

* Thread `PYBIND11_NUMPY2_SUPPORT` through things and try to adept test matrix

* Small fixups (shouldn't matter)?

* Fixup.  Does upgrading scipy help?  (it shouldn't?)

(Some other small fixup)

* Use NumPy 2 nightlies for ubuntu-latest job also

* BUG: Fix numpy.bool check

* TST: Fix complexwarning

* BUG: Fix the fact that only the 50 slot is filled with the copy alias

(There were 3 functions all doing the same, only this slot survived 2.x)

* TST: One more test tweak

* TST: Use "long" name for long, since it changed on windows

* TST: Apparently we didn't always have ulong, so just use `L`

* TST: Enforce dtype='l' for test as default isn't long anymore on windows

* Rename macro and invert logic to PYBIND11_NUMPY_1_ONLY

* PYBIND11_INTERNAL_NUMPY_1_ONLY_DETECTED

* Test and code comment expansion

* CI: Use pre-releases of numpy/scipy from pip via explicit version

* CI: NumPy 2 only available on almalinux (as it is Python >=3.9)

* MAINT: Match name more exactly and adopt error phrasing

* MAINT: Pushed early, move helper to be private member

* fix error message compilation when using NumPy 1.x-only backcompat

* silence name shadowing warning

* chore: minor optimization

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>

---------

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
Co-authored-by: Ralf W. Grosse-Kunstleve <rwgk@google.com>
Co-authored-by: Henry Schreiner <henryschreineriii@gmail.com>
2024-03-26 18:20:11 -04:00
Henry Schreiner
e0f2c71596
tests: hide warning on clang (#5069)
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
2024-03-26 13:57:05 -04:00
Jason Watson
65370f330e
Create handle_type_name specialization to type-hint variable length tuples (#5051) 2024-03-21 03:24:19 -04:00
Henry Schreiner
ec73bdaf1f
ci: skipping test for Windows Clang failure (#5062)
* ci: trying things for Windows Clang failure

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>

* WIP: try using older clang

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>

* tests: skip broken test

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>

* tests: try to skip test in tests

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>

* fix(tests): Prefer __version__ over MSVC

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>

* chore: avoid warning on Clang

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>

* Update tests/test_exceptions.py

* Update tests/test_exceptions.py

---------

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
2024-03-21 02:27:58 -04:00
Huanchen Zhai
31b7e14052
bugfix: removing typing and duplicate `class_` for KeysView/ValuesView/ItemsView. Fix #4529 (#4985)
* remove typing for KeysView/ValuesView/ItemsView

* add tests for map view types
2024-01-13 11:07:36 -08:00
Christoph Grüninger
976fea05a3
Fix Clazy warnings (#4988)
* stl.h: Use C++11 range-loops with const reference

This saves copy-ctor and dtor for non-trivial types by value
Found by clazy (range-loop-reference)

* test_smart_ptr.cpp cleanup

Introduce `pointer_set<T>`

https://github.com/boostorg/unordered/issues/139

> Based on the standard, the first move should leave a in a "valid but unspecified state";

---------

Co-authored-by: Ralf W. Grosse-Kunstleve <rwgk@google.com>
2023-12-29 21:59:47 -08:00
Ralf W. Grosse-Kunstleve
d14d91e02a Remove handle_type_name default implementation, add explicit specializations, adjust tests.
The primary change is:

```diff
 template <typename T>
-struct handle_type_name {
-    static constexpr auto name = const_name<T>();
-};
+struct handle_type_name;
+
```

All other changes are adjustments to restore successful build & test.
2023-12-16 19:06:16 -08:00
Ralf W. Grosse-Kunstleve
66ee131d84 Test changes to adjust to previous commit (Change annotated_any() to quote_cpp_type_name()) 2023-12-16 16:52:07 -08:00
Ralf W. Grosse-Kunstleve
6b771d548a Merge branch 'master' into annotated_any 2023-12-16 16:37:15 -08:00
Victor Stinner
dc477fac0e
fix: Use PyObject_VisitManagedDict() of Python 3.13 (#4973)
* fix: Use PyObject_VisitManagedDict() of Python 3.13

Use PyObject_VisitManagedDict() and PyObject_ClearManagedDict() in
pybind11_traverse() and pybind11_clear() on Python 3.13 and newer.

* Add Python 3.13 CI

* tests: don't get numpy/scipy on 3.13 yet

* ci: move 3.13 to upstream

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>

---------

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
Co-authored-by: Henry Schreiner <HenrySchreinerIII@gmail.com>
2023-12-14 18:42:55 -08:00
Pol Mesalles
daea1130b4
fix(cmake): upgrade maximum supported CMake version to 3.27 (#4786)
* Upgrade maximum supported CMake version to 3.27 to fix warning with CMP0148 policy (#4785)

* Update `macos_brew_install_llvm` pipeline to use expected Python installation

* Fix `Python_EXECUTABLE` Cmake variable typo

* Apply suggestions from code review

* fix: use FindPython for CMake 3.18+ by default for pybind11's tests

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>

* tests: fix issues with finding Python

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>

* tests: also set executable on subdir tests

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>

* fix(cmake): correct logic for FindPython

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>

* Update ci.yml

* Revert "Update ci.yml"

This reverts commit 33798adf3f.

---------

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
Co-authored-by: Henry Schreiner <HenrySchreinerIII@gmail.com>
2023-12-14 14:36:45 -05:00
Antoine Prouvost
a67d786571
fix(stl_bind): Enable bind_map with using declarations. (#4952)
* Enable `bind_map` with `using` declarations.

* style: pre-commit fixes

* Enable directives in bind_vector

* Add tests for bind_ and using directives

* style: pre-commit fixes

* Remove C++17 functions

* Fix test comment

* Add minimal user like map py test

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2023-11-29 12:56:25 -08:00
Ralf W. Grosse-Kunstleve
65661fee39 Change detail::annotated_any() to produce pybind11.CppType(...)
Background:

* https://github.com/python/mypy/issues/16306#issuecomment-1815191849

* https://github.com/python/mypy/issues/16306#issuecomment-1815246274
2023-11-16 12:51:42 -08:00
Ralf W. Grosse-Kunstleve
429a1f820d Make test_cases_for_stubgen.py much more compact, and the pytest -v output much easier to read. 2023-11-16 00:33:38 -08:00
Ralf W. Grosse-Kunstleve
bdbb10d9a3 Add some deeply nested test cases. 2023-11-16 00:08:23 -08:00
Ralf W. Grosse-Kunstleve
542438f2b6 Merge branch 'master' into annotated_any 2023-11-15 23:35:29 -08:00
Henry Schreiner
6831666f5c
ci: add more versions of numpy/scipy/pypy (#4714)
* ci: add more versions of numpy/scipy/pypy

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>

* Apply suggestions from code review

* style: pre-commit fixes

* Update requirements.txt

* Update requirements.txt

* Apply suggestions from code review

---------

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2023-11-16 00:52:05 -05:00
Ralf W. Grosse-Kunstleve
2376f6e953 Use py::handle instead of py::object to avoid clang-tidy errors. 2023-11-14 23:46:42 -08:00
Ralf W. Grosse-Kunstleve
79f6bdca36 Replace .stl_binders. with .cases_for_stubgen. 2023-11-14 23:40:33 -08:00
Ralf W. Grosse-Kunstleve
1a2e8a6624 C++11 compatibility. 2023-11-14 23:35:28 -08:00
Ralf W. Grosse-Kunstleve
69dac469fe Add m.basics tests in ntest_cases_for_stubgen.py 2023-11-14 23:19:48 -08:00
Ralf W. Grosse-Kunstleve
1fa0065967 pre-commit clang-format, NO manual changes. 2023-11-14 22:55:01 -08:00
Ralf W. Grosse-Kunstleve
644d15054e Minimal changes to make the basics code build. 2023-11-14 22:52:49 -08:00
Ralf W. Grosse-Kunstleve
1b4fa7172b Unmodified copy of c6cb3c6282/test-data/pybind11_mypy_demo/src/main.cpp 2023-11-14 22:50:34 -08:00
Ralf W. Grosse-Kunstleve
d1694d9ac5 Use locally defined bindings to avoid dependency on test_stl. 2023-11-14 22:44:42 -08:00
Ralf W. Grosse-Kunstleve
e5f210e61b Rename user_type to UserType 2023-11-14 14:08:59 -08:00
Ralf W. Grosse-Kunstleve
11040768ca Add Annotated[Any, "..."] wrapping in type_info_description() 2023-11-14 13:50:20 -08:00
Ralf W. Grosse-Kunstleve
61ee34ee07 Pull in Annotated[list[int], FixedSize(2)] from test_stl 2023-11-14 13:23:11 -08:00
Ralf W. Grosse-Kunstleve
781304e431 Add test_cases_for_stubgen
Material to inform https://github.com/python/mypy/issues/16306
2023-11-14 13:14:14 -08:00
Ralf W. Grosse-Kunstleve
0b984334d9 Remove CppTypePybind11() wrapping for now. 2023-11-14 12:59:19 -08:00
Ralf W. Grosse-Kunstleve
9548fa5e4e Merge branch 'master' into annotated_any 2023-11-11 08:56:35 -08:00
Ralf W. Grosse-Kunstleve
e250155afa
Fix a long-standing bug in the handling of Python multiple inheritance (#4762)
* Equivalent of 5718e4d080

* Resolve clang-tidy errors.

* Moving test_PPCCInit() first changes the behavior!

* Resolve new Clang dev C++11 errors:

```
The CXX compiler identification is Clang 17.0.0
```

```
pytypes.h:1615:23: error: identifier '_s' preceded by whitespace in a literal operator declaration is deprecated [-Werror,-Wdeprecated-literal-operator]
```

```
cast.h:1380:26: error: identifier '_a' preceded by whitespace in a literal operator declaration is deprecated [-Werror,-Wdeprecated-literal-operator]
```

* Resolve gcc 4.8.5 error:

```
pytypes.h:1615:12: error: missing space between '""' and suffix identifier
```

* Specifically exclude `__clang__`

* Snapshot of debugging code (does NOT pass pre-commit checks).

* Revert "Snapshot of debugging code (does NOT pass pre-commit checks)."

This reverts commit 1d4f9ff263.

* [ci skip] Order Dependence Demo

* Revert "[ci skip] Order Dependence Demo"

This reverts commit d37b5409d4.

* One way to deal with the order dependency issue. This is not the best way, more like a proof of concept.

* Move test_PC() first again.

* Add `all_type_info_add_base_most_derived_first()`, use in `all_type_info_populate()`

* Revert "One way to deal with the order dependency issue. This is not the best way, more like a proof of concept."

This reverts commit eb09c6c1b9.

* clang-tidy fixes (automatic)

* Add `is_redundant_value_and_holder()` and use to avoid forcing `__init__` overrides when they are not needed.

* Streamline implementation and avoid unsafe `reinterpret_cast<instance *>()` introduced with PR #2152

The `reinterpret_cast<instance *>(self)` is unsafe if `__new__` is mocked,
which was actually found in the wild: the mock returned `None` for `self`.
This was inconsequential because `inst` is currently cast straight back to
`PyObject *` to compute `all_type_info()`, which is empty if `self` is not
a pybind11 `instance`, and then `inst` is never dereferenced. However, the
unsafe detour through `instance *` is easily avoided and the updated
implementation is less prone to accidents while debugging or refactoring.

* Fix actual undefined behavior exposed by previous changes.

It turns out the previous commit message is incorrect, the `inst` pointer is actually dereferenced, in the `value_and_holder` ctor here:

f3e0602802/include/pybind11/detail/type_caster_base.h (L262-L263)

```
259     // Main constructor for a found value/holder:
260     value_and_holder(instance *i, const detail::type_info *type, size_t vpos, size_t index)
261         : inst{i}, index{index}, type{type},
262           vh{inst->simple_layout ? inst->simple_value_holder
263                                  : &inst->nonsimple.values_and_holders[vpos]} {}
```

* Add test_mock_new()

* Experiment: specify indirect bases

* Revert "Experiment: specify indirect bases"

This reverts commit 4f90d85f9f.

* Add `all_type_info_check_for_divergence()` and some tests.

* Call `all_type_info_check_for_divergence()` also from `type_caster_generic::load_impl<>`

* Resolve clang-tidy error:

```
include/pybind11/detail/type_caster_base.h:795:21: error: the 'empty' method should be used to check for emptiness instead of 'size' [readability-container-size-empty,-warnings-as-errors]
                if (matching_bases.size() != 0) {
                    ^~~~~~~~~~~~~~~~~~~~~~~~~~
                    !matching_bases.empty()
```

* Revert "Resolve clang-tidy error:"

This reverts commit df27188dc6.

* Revert "Call `all_type_info_check_for_divergence()` also from `type_caster_generic::load_impl<>`"

This reverts commit 5f5fd6a68e.

* Revert "Add `all_type_info_check_for_divergence()` and some tests."

This reverts commit 0a9599f775.
2023-11-08 12:44:04 -08:00
Henry Schreiner
c758b81f3b
chore: move to ruff-format (#4912)
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
Co-authored-by: Ralf W. Grosse-Kunstleve <rwgk@google.com>
2023-11-07 23:42:54 -08:00
Henry Schreiner
3aece819fd
chore: update hooks and Ruff config (#4904)
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
2023-10-27 01:26:28 -04:00
Ralf W. Grosse-Kunstleve
169b0e57eb Add test returning py::exception<void> (fails at runtime).
Passing `py::exception<void>` does not compile:

```
pytypes.h:459:36: error: could not convert ‘{h, pybind11::object::borrowed_t()}’ from ‘<brace-enclosed initializer list>’ to ‘pybind11::exception<void>’
  459 |     return {h, object::borrowed_t{}};
```
2023-10-22 09:14:33 -07:00
Ralf W. Grosse-Kunstleve
7c8991a0a0 Use Union[set, frozenset] for internal consistency. 2023-10-21 13:03:25 -07:00
Ralf W. Grosse-Kunstleve
ace70b077f Render anyset as set | frozenset as suggested by @sizmailov:
https://github.com/pybind/pybind11/pull/4888#discussion_r1367785281
2023-10-21 12:43:08 -07:00
Ralf W. Grosse-Kunstleve
70a510c305 Adjust test_numpy_dtypes test_signature to new behavior. 2023-10-21 11:22:40 -07:00
Ralf W. Grosse-Kunstleve
7280380378 Fix handle_type_name<anyset> as suggested by @sizmailov:
https://github.com/pybind/pybind11/pull/4888#discussion_r1367775289

NOTE: This is actually a bug fix, in its own right.
2023-10-21 11:22:40 -07:00
Sergei Izmailov
74439a64a2
feature: Use typed iterators in make_*iterator (#4876) 2023-10-17 12:04:46 -07:00
Pablo Speciale
0cbd92bab8
Update pytest to version 7.2.0 (which removes their dependency on py) (#4880)
* Update pytest (which removes their dependency on py)

The py library through 1.11.0 for Python allows remote attackers to conduct a ReDoS (Regular expression Denial of Service) attack via a Subversion repository with crafted info data, because the InfoSvnCommand argument is mishandled.

The particular codepath in question is the regular expression at py._path.svnurl.InfoSvnCommand.lspattern and is only relevant when dealing with subversion (svn) projects. Notably the codepath is not used in the popular pytest project. The developers of the pytest package have released version 7.2.0 which removes their dependency on py. Users of pytest seeing alerts relating to this advisory may update to version 7.2.0 of pytest to resolve this issue. See https://github.com/pytest-dev/py/issues/287#issuecomment-1290407715 for additional context.

* Added conditions so that we keep using 7.0.0 on python 3.6
2023-10-16 07:42:30 -07:00