1. Dec 16, 2020
    • Laramie Leavitt's avatar
      Adjusting `type_caster<std::reference_wrapper<T>>` to support const/non-const... · 5469c238
      Laramie Leavitt authored
      Adjusting `type_caster<std::reference_wrapper<T>>` to support const/non-const propagation in `cast_op`. (#2705)
      
      
      * Allow type_caster of std::reference_wrapper<T> to be the same as a native reference.
      
      Before, both std::reference_wrapper<T> and std::reference_wrapper<const T> would
      invoke cast_op<type>. This doesn't allow the type_caster<> specialization for T
      to distinguish reference_wrapper types from value types.
      
      After, the type_caster<> specialization invokes cast_op<type&>, which allows
      reference_wrapper to behave in the same way as a native reference type.
      
      * Add tests/examples for std::reference_wrapper<const T>
      
      * Add tests which use mutable/immutable variants
      
      This test is a chimera; it blends the pybind11 casters with a custom
      pytype implementation that supports immutable and mutable calls.
      
      In order to detect the immutable/mutable state, the cast_op needs
      to propagate it, even through e.g. std::reference<const T>
      
      Note: This is still a work in progress; some things are crashing,
      which likely means that I have a refcounting bug or something else
      missing.
      
      * Add/finish tests that distinguish const& from &
      
      Fixes the bugs in my custom python type implementation,
      demonstrate test that requires const& and reference_wrapper<const T>
      being treated differently from Non-const.
      
      * Add passing a const to non-const method.
      
      * Demonstrate non-const conversion of reference_wrapper in tests.
      
      Apply formatting presubmit check.
      
      * Fix build errors from presubmit checks.
      
      * Try and fix a few more CI errors
      
      * More CI fixes.
      
      * More CI fixups.
      
      * Try and get PyPy to work.
      
      * Additional minor fixups. Getting close to CI green.
      
      * More ci fixes?
      
      * fix clang-tidy warnings from presubmit
      
      * fix more clang-tidy warnings
      
      * minor comment and consistency cleanups
      
      * PyDECREF -> Py_DECREF
      
      * copy/move constructors
      
      * Resolve codereview comments
      
      * more review comment fixes
      
      * review comments: remove spurious &
      
      * Make the test fail even when the static_assert is commented out.
      
      This expands the test_freezable_type_caster a bit by:
      1/ adding accessors .is_immutable and .addr to compare identity
      from python.
      2/ Changing the default cast_op of the type_caster<> specialization
      to return a non-const value. In normal codepaths this is a reasonable
      default.
      3/ adding roundtrip variants to exercise the by reference, by pointer
      and by reference_wrapper in all call paths.  In conjunction with 2/, this
      demonstrates the failure case of the existing std::reference_wrpper conversion,
      which now loses const in a similar way that happens when using the default cast_op_type<>.
      
      * apply presubmit formatting
      
      * Revert inclusion of test_freezable_type_caster
      
      There's some concern that this test is a bit unwieldly because of the use
      of the raw <Python.h> functions. Removing for now.
      
      * Add a test that validates const references propagation.
      
      This test verifies that cast_op may be used to correctly detect
      const reference types when used with std::reference_wrapper.
      
      * mend
      
      * Review comments based changes.
      
      1. std::add_lvalue_reference<type> -> type&
      2. Simplify the test a little more; we're never returning the ConstRefCaster
      type so the class_ definition can be removed.
      
      * formatted files again.
      
      * Move const_ref_caster test to builtin_casters
      
      * Review comments: use cast_op and adjust some comments.
      
      * Simplify ConstRefCasted test
      
      I like this version better as it moves the assertion that matters
      back into python.
      5469c238
  2. Dec 09, 2020
  3. Nov 25, 2020
  4. Nov 24, 2020
  5. Nov 23, 2020
  6. Nov 19, 2020
  7. Nov 16, 2020
  8. Nov 13, 2020
  9. Nov 12, 2020
  10. Nov 11, 2020
  11. Nov 10, 2020
  12. Nov 06, 2020
  13. Nov 04, 2020
  14. Nov 03, 2020
  15. Oct 29, 2020
  16. Oct 28, 2020
  17. Oct 23, 2020
  18. Oct 22, 2020
  19. Oct 21, 2020
    • Boris Staletic's avatar
      Remove friend declaration of py::class_ in py::detail::generic_type (#2613) · 4038542b
      Boris Staletic authored
      This line had two bugs:
      
      1. It declares `py::detail::class_` as `friend`.
      2. After fixing that, we would have to change it to
         `template <typename, typename...>`
      
      The first one was introduced ~5 years ago, when a large refactoring was
      made, probably as an intermediate step during refactoring.
      
      The second was made when `generic_type` was made to be agnostic with
      respect to the order of `py::class_` template parameters.
      
      &nbsp;
      
      We're removing the declaration altogether, because it was never relied
      on. This is what makes me think that it was an intermediate step in
      refactoring that shouldn't have ended up in commit history.
      4038542b
    • Mana Borwornpadungkitti's avatar
      fix: Reject keyword argument `None` with `.none(false)` (#2611) · 6edd0e6d
      Mana Borwornpadungkitti authored
      
      
      * demo kwarg with none(false)
      
      * Reorder and extend tests for arg::none(false) in test_methods_and_attributes.py::test_accepts_none
      
      * Fix arg::none() for keyword arguments
      
      * Add changelog note
      
      * Fix names of no_none_kw test functions
      
      Co-authored-by: default avatarYannick Jadoul <yannick.jadoul@belgacom.net>
      6edd0e6d
    • Wenzel Jakob's avatar
      Thanks, Google! · 7f9445a6
      Wenzel Jakob authored
      7f9445a6
  20. Oct 20, 2020