Commit Graph

3024 Commits

Author SHA1 Message Date
Ralf W. Grosse-Kunstleve
95e9053f7f Boilerplate changes: Skip all test_class_sh_* if PYBIND11_HAVE_INTERNALS_WITH_SMART_HOLDER_SUPPORT is not defined. 2024-07-19 09:54:40 -07:00
Ralf W. Grosse-Kunstleve
6fb8b5157d Add back original copyable_holder_caster check_holder_compat() in the std::shared_ptr specialization and remove pytest.skip("BAKEIN_EXPECTED: ...) in test_smart_ptr.py 2024-07-19 09:00:03 -07:00
Ralf W. Grosse-Kunstleve
cc2a428142 Bring in ci.yml, ci_sh_def.yml, ci_sh_def.yml.patch from smart_holder branch as-is. 2024-07-19 00:59:42 -07:00
Ralf W. Grosse-Kunstleve
7296c39705 Introduce detail/using_smart_holder.h and remove pybindit::memory:: in most places. 2024-07-19 00:55:15 -07:00
Ralf W. Grosse-Kunstleve
583c07bffd Use std::unique_ptr<T> as default holder again. 2024-07-19 00:03:49 -07:00
Ralf W. Grosse-Kunstleve
58a1b75e43 Reinterpret detail::type_info::default_holder as "uses std::unique_ptr holder" (which is the original meaning, and compatible with the original smart_holder branch). 2024-07-18 22:45:56 -07:00
Ralf W. Grosse-Kunstleve
cd4f5f6c5b PYBIND11_HAVE_INTERNALS_WITH_SMART_HOLDER_SUPPORT 2024-07-18 22:44:34 -07:00
Ralf W. Grosse-Kunstleve
1ea1787745 Remove overlooked BAKEIN_BREAK in test_class_sh_property_non_owning.cpp,py (tests pass without any further changes). 2024-07-18 22:43:39 -07:00
Ralf W. Grosse-Kunstleve
6d8952a283 Merge branch 'master' into bakein 2024-07-18 17:41:47 -07:00
Ralf W. Grosse-Kunstleve
6d4805ced1
Small cleanup/refactoring in support of PR #5213 (#5251)
* Factor out detail/value_and_holder.h (from detail/type_caster_base.h)

This is in support of PR #5213:

* trampoline_self_life_support.h depends on value_and_holder.h

* type_caster_base.h depends on trampoline_self_life_support.h

* Fix a minor and inconsequential inconsistency in `copyable_holder_caster`: the correct `load_value()` return type is `void` (as defined in `type_caster_generic`)

For easy future reference, this is the long-standing inconsistency:

* dbf848aff7/include/pybind11/detail/type_caster_base.h (L634)

* dbf848aff7/include/pybind11/cast.h (L797)

Noticed in passing while working on PR #5213.

* Add `DANGER ZONE` comment in detail/init.h, similar to a comment added on the smart_holder branch (all the way back in 2021).
2024-07-18 17:34:06 -07:00
Henry Schreiner
a582ca8a8e
tests: run on pyodide (#4745)
* tests: run on pyodide

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

* ci: use cibuildwheel for pyodide test

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

* tests: revert changes to test_embed

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

---------

Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
2024-07-18 14:50:38 -04:00
Ralf W. Grosse-Kunstleve
4aa2f6b8eb Merge branch 'bakein_prep_on_master' into bakein 2024-07-18 01:29:47 -07:00
Ralf W. Grosse-Kunstleve
92d7724de4 Add DANGER ZONE comment in detail/init.h, similar to a comment added on the smart_holder branch (all the way back in 2021). 2024-07-18 01:25:36 -07:00
Ralf W. Grosse-Kunstleve
1ca810e8c7 Undo DANGER ZONE comment (brought in from smart_holder branch; before adding to PR #5251). 2024-07-18 01:21:38 -07:00
Ralf W. Grosse-Kunstleve
9a27e29ebd Leverage PR #5251 to bring back trampoline_self_life_support.h from smart_holder branch almost as-is.
This ensures IWYU correctness in client code.

The only change in trampoline_self_life_support.h is to replace `#include "detail/type_caster_base.h"` with "#include detail/value_and_holder.h".
2024-07-18 01:13:41 -07:00
Ralf W. Grosse-Kunstleve
7fa6dd9d1c Merge branch 'bakein_prep_on_master' into bakein 2024-07-18 01:01:05 -07:00
Ralf W. Grosse-Kunstleve
54fd559117 Fix a minor and inconsequential inconsistency in copyable_holder_caster: the correct load_value() return type is void (as defined in type_caster_generic)
For easy future reference, this is the long-standing inconsistency:

* dbf848aff7/include/pybind11/detail/type_caster_base.h (L634)

* dbf848aff7/include/pybind11/cast.h (L797)

Noticed in passing while working on PR #5213.
2024-07-18 00:51:10 -07:00
Ralf W. Grosse-Kunstleve
5e30064ee6 Factor out detail/value_and_holder.h (from detail/type_caster_base.h)
This is in support of PR #5213:

* trampoline_self_life_support.h depends on value_and_holder.h

* type_caster_base.h depends on trampoline_self_life_support.h
2024-07-18 00:41:39 -07:00
Ralf W. Grosse-Kunstleve
8ca559340c Merge branch 'master' into bakein 2024-07-18 00:12:07 -07:00
Ralf Gommers
dbf848aff7
docs: extend PYBIND11_MODULE documentation, mention mod_gil_not_used (#5250)
This follows up on PR 5148, which introduced support for free-threaded CPython.
2024-07-17 23:26:45 -07:00
Ralf W. Grosse-Kunstleve
ed27c37c4e Merge branch 'master' into bakein 2024-07-16 11:14:30 -07:00
Sam Gross
43de8014f9
fix: make gil_safe_call_once thread-safe in free-threaded CPython (#5246)
* fix: Make gil_safe_call_once thread-safe in free-threaded CPython

The "is_initialized_" flags is not protected by the GIL in free-threaded
Python, so it needs to be an atomic field.

Fixes #5245

* style: pre-commit fixes

* Apply changes from code review

---------

Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
2024-07-16 11:06:54 -07:00
dependabot[bot]
ccefee4c31
chore(deps): bump actions/attest-build-provenance in the actions group (#5243)
Bumps the actions group with 1 update: [actions/attest-build-provenance](https://github.com/actions/attest-build-provenance).


Updates `actions/attest-build-provenance` from 1.3.2 to 1.3.3
- [Release notes](https://github.com/actions/attest-build-provenance/releases)
- [Changelog](https://github.com/actions/attest-build-provenance/blob/main/RELEASE.md)
- [Commits](bdd51370e0...5e9cb68e95)

---
updated-dependencies:
- dependency-name: actions/attest-build-provenance
  dependency-type: direct:production
  update-type: version-update:semver-patch
  dependency-group: actions
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-07-15 16:51:27 -04:00
Ralf W. Grosse-Kunstleve
ecd01da7ac smart_holder_from_unique_ptr: also accept return_value_policy::take_ownership
There are no strong reasons for accepting or rejecting `return_value_policy::take_ownership`.

Accepting to accommodate existing use cases in the wild.
2024-07-15 01:33:15 -07:00
Ralf W. Grosse-Kunstleve
12f384bcbb smart_holder_from_unique_ptr: also accept return_value_policy::reference
There are no strong reasons for accepting or rejecting `return_value_policy::reference`.

Accepting to accommodate existing use cases in the wild.
2024-07-14 23:52:54 -07:00
Ralf W. Grosse-Kunstleve
884305e953 Add "_sh_baked_in" to PYBIND11_INTERNALS_ID, PYBIND11_MODULE_LOCAL_ID 2024-07-14 21:56:36 -07:00
Ralf W. Grosse-Kunstleve
0f874deee2 Move must_be_member_function_pointer to the detail namespace. 2024-07-14 21:39:33 -07:00
Ralf W. Grosse-Kunstleve
ff3693f1bb Introduce detail::both_t_and_d_use_type_caster_base<T, D> helper and use systematically in all property_cpp_function<> specializations.
This fixes a PyTorch build error (using the Google-internal toolchain):

```
In file included from third_party/py/torch/torch/csrc/distributed/c10d/init.cpp:15:
In file included from third_party/py/torch/torch/csrc/distributed/c10d/PyProcessGroup.hpp:4:
In file included from third_party/py/torch/torch/csrc/jit/python/pybind_utils.h:7:
In file included from third_party/pybind11/include/pybind11/complex.h:14:
In file included from third_party/pybind11/include/pybind11/pybind11.h:14:
In file included from third_party/pybind11/include/pybind11/detail/class.h:14:
In file included from third_party/pybind11/include/pybind11/detail/../attr.h:16:
third_party/pybind11/include/pybind11/detail/../cast.h:856:19: error: static assertion failed due to requirement 'std::is_base_of<pybind11::detail::type_caster_base<c10::intrusive_ptr<c10d::Store, c10::detail::intrusive_target_default_null_type<c10d::Store>>>, pybind11::detail::type_caster<c10::intrusive_ptr<c10d::Store, c10::detail::intrusive_target_default_null_type<c10d::Store>>, void>>::value': Holder classes are only supported for custom types
  856 |     static_assert(std::is_base_of<base, type_caster<type>>::value,
      |                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
third_party/pybind11/include/pybind11/detail/../cast.h:982:48: note: in instantiation of template class 'pybind11::detail::copyable_holder_caster<c10::intrusive_ptr<c10d::Store>, std::shared_ptr<c10::intrusive_ptr<c10d::Store>>>' requested here
  982 | class type_caster<std::shared_ptr<T>> : public copyable_holder_caster<T, std::shared_ptr<T>> {};
      |                                                ^
third_party/crosstool/v18/stable/src/libcxx/include/__type_traits/is_base_of.h:22:91: note: in instantiation of template class 'pybind11::detail::type_caster<std::shared_ptr<c10::intrusive_ptr<c10d::Store>>>' requested here
   22 | struct _LIBCPP_TEMPLATE_VIS is_base_of : public integral_constant<bool, __is_base_of(_Bp, _Dp)> {};
      |                                                                                           ^
third_party/pybind11/include/pybind11/detail/../cast.h:1382:30: note: in instantiation of template class 'std::is_base_of<pybind11::detail::type_caster_generic, pybind11::detail::type_caster<std::shared_ptr<c10::intrusive_ptr<c10d::Store>>>>' requested here
 1382 |     detail::enable_if_t<std::is_base_of<type_caster_generic, make_caster<Return>>::value, void>> {
      |                              ^
third_party/pybind11/include/pybind11/pybind11.h:287:19: note: during template argument deduction for class template partial specialization 'return_value_policy_override<Return, detail::enable_if_t<std::is_base_of<type_caster_generic, make_caster<Return>>::value, void>>' [with Return = std::shared_ptr<c10::intrusive_ptr<c10d::Store>>]
  287 |                 = return_value_policy_override<Return>::policy(call.func.policy);
      |                   ^
third_party/pybind11/include/pybind11/pybind11.h:287:19: note: in instantiation of template class 'pybind11::detail::return_value_policy_override<std::shared_ptr<c10::intrusive_ptr<c10d::Store>>>' requested here
third_party/pybind11/include/pybind11/pybind11.h:269:55: note: while substituting into a lambda expression here
  269 |         rec->impl = [](function_call &call) -> handle {
      |                                                       ^
third_party/pybind11/include/pybind11/pybind11.h:147:9: note: in instantiation of function template specialization 'pybind11::cpp_function::initialize<(lambda at third_party/pybind11/include/pybind11/pybind11.h:1714:17), std::shared_ptr<c10::intrusive_ptr<c10d::Store>>, pybind11::handle, pybind11::is_method>' requested here
  147 |         initialize(
      |         ^
third_party/pybind11/include/pybind11/pybind11.h:1713:20: note: in instantiation of function template specialization 'pybind11::cpp_function::cpp_function<(lambda at third_party/pybind11/include/pybind11/pybind11.h:1714:17), pybind11::is_method, void>' requested here
 1713 |             return cpp_function(
      |                    ^
third_party/pybind11/include/pybind11/pybind11.h:1964:54: note: in instantiation of function template specialization 'pybind11::property_cpp_function<c10d::DistributedBackendOptions, c10::intrusive_ptr<c10d::Store>>::read<c10::intrusive_ptr<c10d::Store> c10d::DistributedBackendOptions::*, 0>' requested here
 1964 |                      property_cpp_function<type, D>::read(pm, *this),
      |                                                      ^
third_party/py/torch/torch/csrc/distributed/c10d/init.cpp:945:8: note: in instantiation of function template specialization 'pybind11::class_<c10d::DistributedBackendOptions>::def_readwrite<c10d::DistributedBackendOptions, c10::intrusive_ptr<c10d::Store>>' requested here
  945 |       .def_readwrite("store", &::c10d::DistributedBackendOptions::store)
      |        ^
1 error generated.
```
2024-07-14 21:19:50 -07:00
Ralf W. Grosse-Kunstleve
89da1e2ef7 Use memcpy instead of strcpy to resolve MSVC errors. 2024-07-14 01:15:37 -07:00
Ralf W. Grosse-Kunstleve
c65d5dfaa8 Systematically use is_base_of<type_caster_generic, make_caster<D>> in property_cpp_function<> specializations. 2024-07-14 00:54:41 -07:00
Ralf W. Grosse-Kunstleve
3406be6877 New test_class_sh_property_bakein.py
Use cases in the wild:

* `test_readonly_char6_member()`: 4410c44ae6/torch/csrc/cuda/Module.cpp (L961)

* `test_readonly_const_char_ptr_member()`: 862a439a84/include/permonst.h (L43)
2024-07-13 23:46:36 -07:00
Ralf W. Grosse-Kunstleve
2600bb67c5 Remove test_ccccccccccccccccccccc.cpp,py (not needed anymore). 2024-07-13 01:15:09 -07:00
Ralf W. Grosse-Kunstleve
6fa0a2e439 PYBIND11_HAVE_HOLDER_CASTER_WITH_SMART_HOLDER_SUPPORT
Introduce two helper types:

* copyable_holder_caster_shared_ptr_with_smart_holder_support_enabled

* move_only_holder_caster_unique_ptr_with_smart_holder_support_enabled
2024-07-13 00:07:57 -07:00
Ralf W. Grosse-Kunstleve
092d236b4e Remove test_wip.cpp,py (not needed anymore). 2024-07-12 08:33:55 -07:00
Ralf W. Grosse-Kunstleve
d021bb10aa Remove redundant check_holder_compat() no-op implementation. 2024-07-12 08:31:35 -07:00
Ralf W. Grosse-Kunstleve
63044cc199 Bring in default_holder_type from smart_holder branch including using it in pybind11/stl_bind.h 2024-07-12 08:26:34 -07:00
Ralf W. Grosse-Kunstleve
d373a082ad Remove remaining BAKEIN_BREAK in test_class_sh_property.cpp,py and adjust (simplify) the property_cpp_function<...unique_ptr...>::write implementation (all tests pass).
This PR (#5213) at this commit also passes ASAN, MSAN, UBSAN testing with the Google-internal toolchain.
2024-07-12 02:38:14 -07:00
Ralf W. Grosse-Kunstleve
0b14d5bce9 test_class_sh_property.py test_valu_getter() works without any further changes. 2024-07-12 02:24:27 -07:00
Ralf W. Grosse-Kunstleve
048e36df40 Bring in shared_ptr_with_responsible_parent() from smart_holder branch:
smart_holder branch:

```
    static std::shared_ptr<type> shared_ptr_from_python(handle responsible_parent)
```

Renamed in this commit:

```
    static std::shared_ptr<type> shared_ptr_with_responsible_parent(handle responsible_parent)
```

Use in `property_cpp_function<>` specializations.

Fixes all 8 test failures introduced with the previous commit (1bcf572780):

```
FAILED test_class_sh_property_non_owning.py::test_core_fld_common[core_fld_value_ro-expected0-True] - RuntimeError: Non-owning holder (loaded_as_shared_ptr).
FAILED test_class_sh_property_non_owning.py::test_core_fld_common[core_fld_value_rw-expected1-True] - RuntimeError: Non-owning holder (loaded_as_shared_ptr).
FAILED test_class_sh_property_non_owning.py::test_core_fld_common[core_fld_value_rw-expected1-False] - RuntimeError: Non-owning holder (loaded_as_shared_ptr).
FAILED test_class_sh_property_non_owning.py::test_core_fld_common[core_fld_raw_ptr_ro-expected4-True] - RuntimeError: Non-owning holder (loaded_as_shared_ptr).
FAILED test_class_sh_property_non_owning.py::test_core_fld_common[core_fld_raw_ptr_ro-expected4-False] - RuntimeError: Non-owning holder (loaded_as_shared_ptr).
FAILED test_class_sh_property_non_owning.py::test_core_fld_common[core_fld_raw_ptr_rw-expected5-True] - RuntimeError: Non-owning holder (loaded_as_shared_ptr).
FAILED test_class_sh_property_non_owning.py::test_core_fld_common[core_fld_value_ro-expected0-False] - RuntimeError: Non-owning holder (loaded_as_shared_ptr).
FAILED test_class_sh_property_non_owning.py::test_core_fld_common[core_fld_raw_ptr_rw-expected5-False] - RuntimeError: Non-owning holder (loaded_as_shared_ptr).
```
2024-07-12 02:11:09 -07:00
Ralf W. Grosse-Kunstleve
1bcf572780 First pass adapting all property_cpp_function<> implementations. Still needs debugging and more testing:
```
========================================================= short test summary info ==========================================================
SKIPPED [2] test_class_sh_property.py:19: BAKEIN_BREAK: Failed: DID NOT RAISE <class 'ValueError'>
SKIPPED [1] test_class_sh_property.py:87: BAKEIN_BREAK: m_uqcp_readwrite does not build
SKIPPED [1] test_class_sh_property.py:140: BAKEIN_BREAK: m_uqmp_readwrite does not build
SKIPPED [1] test_class_sh_property.py:140: BAKEIN_BREAK: m_uqcp_readwrite does not build
SKIPPED [1] test_class_sh_basic.py:156: unconditional skip
SKIPPED [1] test_class_sh_property.py:87: BAKEIN_BREAK: m_uqmp_readwrite does not build
SKIPPED [1] test_stl.py:149: no <experimental/optional>
SKIPPED [1] test_smart_ptr.py:301: BAKEIN_EXPECTED: Failed: DID NOT RAISE <class 'RuntimeError'>
FAILED test_class_sh_property_non_owning.py::test_core_fld_common[core_fld_value_rw-expected1-True] - RuntimeError: Non-owning holder (loaded_as_shared_ptr).
FAILED test_class_sh_property_non_owning.py::test_core_fld_common[core_fld_value_rw-expected1-False] - RuntimeError: Non-owning holder (loaded_as_shared_ptr).
FAILED test_class_sh_property_non_owning.py::test_core_fld_common[core_fld_value_ro-expected0-True] - RuntimeError: Non-owning holder (loaded_as_shared_ptr).
FAILED test_class_sh_property_non_owning.py::test_core_fld_common[core_fld_raw_ptr_ro-expected4-True] - RuntimeError: Non-owning holder (loaded_as_shared_ptr).
FAILED test_class_sh_property_non_owning.py::test_core_fld_common[core_fld_raw_ptr_ro-expected4-False] - RuntimeError: Non-owning holder (loaded_as_shared_ptr).
FAILED test_class_sh_property_non_owning.py::test_core_fld_common[core_fld_raw_ptr_rw-expected5-True] - RuntimeError: Non-owning holder (loaded_as_shared_ptr).
FAILED test_class_sh_property_non_owning.py::test_core_fld_common[core_fld_value_ro-expected0-False] - RuntimeError: Non-owning holder (loaded_as_shared_ptr).
FAILED test_class_sh_property_non_owning.py::test_core_fld_common[core_fld_raw_ptr_rw-expected5-False] - RuntimeError: Non-owning holder (loaded_as_shared_ptr).
================================================ 8 failed, 1056 passed, 9 skipped in 3.96s =================================================
```
2024-07-10 15:21:09 -07:00
Ralf W. Grosse-Kunstleve
f852cf5714 Copy code property_cpp_function<> code from smart_holder branch as-is. Ifdef out all but the "classic" implementation. 2024-07-10 15:16:59 -07:00
Ralf W. Grosse-Kunstleve
127058cb16 Replace loaded_v_h.type = get_type_info(typeid(type)) with loaded_v_h.type = typeinfo in unique_ptr type_caster and remove pytest.skip() in test_class_sh_disowning_mi.py 2024-07-10 08:18:24 -07:00
Ralf W. Grosse-Kunstleve
f855283be4 Restore test_class_sh_disowning_mi.cpp,py as it last worked with GHA (commit 575919098a). 2024-07-09 20:52:03 -07:00
Ralf W. Grosse-Kunstleve
7e1eced440 test_ccccccccccccccccccccc 2024-07-09 20:51:06 -07:00
Ralf W. Grosse-Kunstleve
d3537e4236 Reducing 2: rename C++ namespace from class_sh_disowning_mi to wip. 2024-07-09 20:37:47 -07:00
Ralf W. Grosse-Kunstleve
1ea3855b22 Reducing 1. 2024-07-09 20:29:58 -07:00
Ralf W. Grosse-Kunstleve
575919098a Remove all LOOOK in type_caster_base.h 2024-07-09 15:14:05 -07:00
Ralf W. Grosse-Kunstleve
e254264cc5 Restore original test_class_sh_disowning.py from smart_holder branch. 2024-07-09 15:09:39 -07:00
Ralf W. Grosse-Kunstleve
c6a87e8897 Call new load_helper.get_void_ptr_or_nullptr() instead of calling type_caster_generic::load_value() in shared_ptr and unique_ptr casters. 2024-07-09 15:07:10 -07:00
Ralf W. Grosse-Kunstleve
36bbac1b47 LOOOK to trace disowning 2024-07-09 14:09:38 -07:00