1. 14 Nov, 2021 1 commit
  2. 12 Nov, 2021 1 commit
  3. 10 Nov, 2021 1 commit
  4. 08 Nov, 2021 2 commits
  5. 07 Nov, 2021 1 commit
  6. 06 Nov, 2021 1 commit
  7. 01 Nov, 2021 2 commits
  8. 29 Oct, 2021 1 commit
    • feat: allow kw-only args after a py::args (#3402) · e7c9753f
      * Simply has_kw_only_args handling
      
      This simplifies tracking the number of kw-only args by instead tracking
      the number of positional arguments (which is really what we care about
      everywhere this is used).
      
      * Allow keyword-only arguments to follow py::args
      
      This removes the constraint that py::args has to be last (or
      second-last, with py::kwargs) and instead makes py::args imply
      py::kw_only for any remaining arguments, allowing you to bind a function
      that works the same way as a Python function such as:
      
          def f(a, *args, b):
              return a * b + sum(args)
      
          f(10, 1, 2, 3, b=20)  # == 206
      
      With this change, you can bind such a function using:
      
          m.def("f", [](int a, py::args args, int b) { /* ... */ },
              "a"_a, "b"_a);
      
      Or, to be more explicit about the keyword-only arguments:
      
          m.def("g", [](int a, py::args args, int b) { /* ... */ },
              "a"_a, py::kw_only{}, "b"_a);
      
      (The only difference between the two is that the latter will fail at
      binding time if the `kw_only{}` doesn't match the `py::args` position).
      
      This doesn't affect backwards compatibility at all because, currently,
      you can't have a py::args anywhere except the end/2nd-last.
      
      * Take args/kwargs by const lvalue ref
      
      Co-authored-by: Henry Schreiner <HenrySchreinerIII@gmail.com>
      
      Co-authored-by: Henry Schreiner <HenrySchreinerIII@gmail.com>
      Jason Rhinelander committed
  9. 27 Oct, 2021 4 commits
  10. 26 Oct, 2021 2 commits
    • fix: improve support for Python 3.11-dev (#3368) · e7e2c79f
      * ci: support Python 3.11-dev
      
      Also update 3.10 to final, better PyPy usage
      
      * fix: use PyFrame_GetCode on Python 3.9+
      
      * ci: some bitiness of pypy not supported on win
      
      * chore: update CMake support to 3.22rc1 to quiet warning
      
      * fix: use dev version of py to fix Py 3.11
      
      * tests: print proper Eigen version
      
      * ci: include pypy2, not sure why
      
      * ci: avoid running on Python 3.11 for now
      
      * ci: fix runs
      
      * ci: simpler PyPy usage, drop unmaintained scipy + pypy index
      
      * ci: only binary numpy, wait on pypy 3.8
      
      * refactor: address review
      Henry Schreiner committed
    • fix: the types for return_value_policy_override in optional_caster (#3376) · c2d3e220
      * fix: the types for return_value_policy_override in optional_caster
      
      `return_value_policy_override` was not being applied correctly in
      `optional_caster` in two ways:
      - The `is_lvalue_reference` condition referenced `T`, which was the
      `optional<T>` type parameter from the class, when it should have used `T_`,
      which was the parameter to the `cast` function. `T_` can potentially be a
      reference type, but `T` will never be.
      - The type parameter passed to `return_value_policy_override` should be
      `T::value_type`, not `T`. This matches the way that the other STL container
      type casters work.
      
      The result of these issues was that a method/property definition which used a
      `reference` or `reference_internal` return value policy would create a Python
      value that's bound by reference to a temporary C++ object, resulting in
      undefined behavior. For reasons that I was not able to figure out fully, it
      seems like this causes problems when using old versions of `boost::optional`,
      but not with recent versions of `boost::optional` or the `libstdc++`
      implementation of `std::optional`. The issue (that the override to
      `return_value_policy::move` is never being applied) is present for all
      implementations, it just seems like that somehow doesn't result in problems for
      the some implementation of `optional`. This change includes a regression type
      with a custom optional-like type which was able to reproduce the issue.
      
      Part of the issue with using the wrong types may have stemmed from the type
      variables `T` and `T_` having very similar names. This also changes the type
      variables in `optional_caster` to use slightly more descriptive names, which
      also more closely follow the naming convention used by the other STL casters.
      
      Fixes #3330
      
      * Fix clang-tidy complaints
      
      * Add missing NOLINT
      
      * Apply a couple more fixes
      
      * fix: support GCC 4.8
      
      * tests: avoid warning about unknown compiler for compilers missing C++17
      
      * Remove unneeded test module attribute
      
      * Change test enum to have more unique int values
      
      Co-authored-by: Aaron Gokaslan <skylion.aaron@gmail.com>
      Co-authored-by: Henry Schreiner <HenrySchreinerIII@gmail.com>
      Ryan Cahoon committed
  11. 25 Oct, 2021 2 commits
  12. 23 Oct, 2021 1 commit
  13. 22 Oct, 2021 2 commits
  14. 21 Oct, 2021 1 commit
  15. 19 Oct, 2021 1 commit
  16. 18 Oct, 2021 2 commits
  17. 11 Oct, 2021 3 commits
    • Correct options on Eigen::MappedSparseMatrix & adding MSVC C4127 suppression… · 7c580586
      Correct options on Eigen::MappedSparseMatrix & adding MSVC C4127 suppression around Eigen includes. (#3352)
      
      * Adding MSVC C4127 suppression around Eigen includes.
      
      * For MSVC 2015 only: also adding the C4127 suppression to test_eigen.cpp
      
      * Copying original change from PR #3343, with extra line breaks to not run past 99 columns (our desired but currently not enforced limit).
      Ralf W. Grosse-Kunstleve committed
    • [pre-commit.ci] pre-commit autoupdate (#3353) · 02c05573
      updates:
      - [github.com/PyCQA/flake8: 3.9.2 → 4.0.1](https://github.com/PyCQA/flake8/compare/3.9.2...4.0.1)
      
      Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
      pre-commit-ci[bot] committed
    • Fix make_key_iterator/make_value_iterator for prvalue iterators (#3348) · 8a7c266d
      * Add a test showing a flaw in make_key_iterator/make_value_iterator
      
      If the iterator dereference operator returns a value rather than a
      reference (and that pair also does not *contain* references),
      make_key_iterator and make_value_iterator will return a reference to a
      temporary, causing a segfault.
      
      * Fix make_key_iterator/make_value_iterator for prvalue iterators
      
      If an iterator returns a pair<T1, T2> rather than a reference to a pair
      or a pair of references, make_key_iterator and make_value_iterator would
      return a reference to a temporary, typically leading to a segfault. This
      is because the value category of member access to a prvalue is an
      xvalue, not a prvalue, so decltype produces an rvalue reference type.
      Fix the type calculation to handle this case.
      
      I also removed some decltype parentheses that weren't needed, either
      because the expression isn't one of the special cases for decltype or
      because decltype was only used for SFINAE. Hopefully that makes the code
      a bit more readable.
      
      Closes #3347
      
      * Attempt a workaround for nvcc
      Bruce Merry committed
  18. 09 Oct, 2021 1 commit
  19. 08 Oct, 2021 3 commits
  20. 04 Oct, 2021 8 commits