1. 28 May, 2022 1 commit
  2. 25 May, 2022 1 commit
  3. 17 May, 2022 1 commit
  4. 02 May, 2022 1 commit
  5. 26 Apr, 2022 1 commit
  6. 18 Apr, 2022 1 commit
  7. 11 Apr, 2022 2 commits
  8. 24 Mar, 2022 1 commit
  9. 02 Mar, 2022 2 commits
  10. 01 Mar, 2022 1 commit
  11. 12 Feb, 2022 1 commit
  12. 11 Feb, 2022 1 commit
    • Ralf W. Grosse-Kunstleve's avatar
      Python 2 removal part 1: tests (C++ code is intentionally ~untouched) (#3688) · 6493f496
      Ralf W. Grosse-Kunstleve authored
      
      
      * `#error BYE_BYE_GOLDEN_SNAKE`
      
      * Removing everything related to 2.7 from ci.yml
      
      * Commenting-out Centos7
      
      * Removing `PYTHON: 27` from .appveyor.yml
      
      * "PY2" removal, mainly from tests. C++ code is not touched.
      
      * Systematic removal of `u` prefix from `u"..."` and `u'...'` literals. Collateral cleanup of a couple minor other things.
      
      * Cleaning up around case-insensitive hits for `[^a-z]py.*2` in tests/.
      
      * Removing obsolete Python 2 mention in compiling.rst
      
      * Proper `#error` for Python 2.
      
      * Using PY_VERSION_HEX to guard `#error "PYTHON 2 IS NO LONGER SUPPORTED.`
      
      * chore: bump pre-commit
      
      * style: run pre-commit for pyupgrade 3+
      
      * tests: use sys.version_info, not PY
      
      * chore: more Python 2 removal
      
      * Uncommenting Centos7 block (PR #3691 showed that it is working again).
      
      * Update pre-commit hooks
      
      * Fix pre-commit hook
      
      * refactor: remove Python 2 from CMake
      
      * refactor: remove Python 2 from setup code
      
      * refactor: simplify, better static typing
      
      * feat: fail with nice messages
      
      * refactor: drop Python 2 C++ code
      
      * docs: cleanup for Python 3
      
      * revert: intree
      
      revert: intree
      
      * docs: minor touchup to py2 statement
      Co-authored-by: default avatarHenry Schreiner <henryschreineriii@gmail.com>
      Co-authored-by: default avatarAaron Gokaslan <skylion.aaron@gmail.com>
      6493f496
  13. 10 Feb, 2022 3 commits
  14. 09 Feb, 2022 1 commit
  15. 08 Feb, 2022 3 commits
  16. 02 Feb, 2022 1 commit
  17. 31 Jan, 2022 2 commits
  18. 27 Jan, 2022 1 commit
  19. 11 Jan, 2022 2 commits
  20. 21 Dec, 2021 1 commit
  21. 17 Nov, 2021 1 commit
  22. 15 Nov, 2021 1 commit
    • Trigve's avatar
      [master] Wrong caching of overrides (#3465) · afdc09de
      Trigve authored
      * override: Fix wrong caching of the overrides
      
      There was a problem when the python type, which was stored in override
      cache for C++ functions, was destroyed and  the record wasn't removed from the
      override cache. Therefor, dangling pointer was stored there. Then when the
      memory was reused and new type was allocated at the given address and the
      method with the same name (as previously stored in the cache) was actually
      overridden in python, it would wrongly find it in the override cache for C++
      functions and therefor override from python wouldn't be called.
      The fix is to erase the type from the override cache when the type is destroyed.
      
      * test: Pass by const ref instead of by value (clang-tidy)
      
      * test: Rename classes and move to different files
      
      Rename the classes and files so they're no too generic. Also, better place to
      test the stuff is in test_virtual_functions.cpp/.py as we're basically testing
      the virtual functions/trampolines.
      
      * Add TODO for erasure code
      
      * [pre-commit.ci] auto fixes from pre-commit.com hooks
      
      for more information, see https://pre-commit.ci
      
      Co-authored-by: default avatarpre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
      afdc09de
  23. 07 Nov, 2021 1 commit
  24. 29 Oct, 2021 1 commit
    • Jason Rhinelander's avatar
      feat: allow kw-only args after a py::args (#3402) · e7c9753f
      Jason Rhinelander authored
      
      
      * 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: default avatarHenry Schreiner <HenrySchreinerIII@gmail.com>
      Co-authored-by: default avatarHenry Schreiner <HenrySchreinerIII@gmail.com>
      e7c9753f
  25. 26 Oct, 2021 1 commit
    • Henry Schreiner's avatar
      fix: improve support for Python 3.11-dev (#3368) · e7e2c79f
      Henry Schreiner authored
      * 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
      e7e2c79f
  26. 19 Oct, 2021 1 commit
  27. 11 Oct, 2021 1 commit
    • Bruce Merry's avatar
      Fix make_key_iterator/make_value_iterator for prvalue iterators (#3348) · 8a7c266d
      Bruce Merry authored
      * 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
      8a7c266d
  28. 04 Oct, 2021 1 commit
  29. 23 Sep, 2021 2 commits
    • Henry Schreiner's avatar
      feat: reapply fixed version of #3271 (#3293) · 21282e64
      Henry Schreiner authored
      * Add make_value_iterator (#3271)
      
      * Add make_value_iterator
      
      This is the counterpart to make_key_iterator, and will allow
      implementing a `value` method in `bind_map` (although doing so is left
      for a subsequent PR).
      
      I made a few design changes to reduce copy-and-paste boilerplate.
      Previously detail::iterator_state had a boolean template parameter to
      indicate whether it was being used for make_iterator or
      make_key_iterator. I replaced the boolean with a class that determines
      how to dereference the iterator. This allows for a generic
      implementation of `__next__`.
      
      I also added the ValueType and Extra... parameters to the iterator_state
      template args, because I think it was a bug that they were missing: if
      make_iterator is called twice with different values of these, only the
      first set has effect (because the state class is only registered once).
      There is still a potential issue in that the *values* of the extra
      arguments are latched on the first call, but since most policies are
      empty classes this should be even less common.
      
      * Add some remove_cv_t to appease clang-tidy
      
      * Make iterator_access and friends take reference
      
      For some reason I'd accidentally made it take a const value, which
      caused some issues with third-party packages.
      
      * Another attempt to remove remove_cv_t from iterators
      
      Some of the return types were const (non-reference) types because of the
      pecularities of decltype: `decltype((*it).first)` is the *declared* type
      of the member of the pair, rather than the type of the expression. So if
      the reference type of the iterator is `pair<const int, int> &`, then the
      decltype is `const int`. Wrapping an extra set of parentheses to form
      `decltype(((*it).first))` would instead give `const int &`.
      
      This means that the existing make_key_iterator actually returns by value
      from `__next__`, rather than by reference. Since for mapping types, keys
      are always const, this probably hasn't been noticed, but it will affect
      make_value_iterator if the Python code tries to mutate the returned
      objects. I've changed things to use double parentheses so that
      make_iterator, make_key_iterator and make_value_iterator should now all
      return the reference type of the iterator. I'll still need to add a test
      for that; for now I'm just checking whether I can keep Clang-Tidy happy.
      
      * Add back some NOLINTNEXTLINE to appease Clang-Tidy
      
      This is favoured over using remove_cv_t because in some cases a const
      value return type is deliberate (particularly for Eigen).
      
      * Add a unit test for iterator referencing
      
      Ensure that make_iterator, make_key_iterator and make_value_iterator
      return references to the container elements, rather than copies. The
      test for make_key_iterator fails to compile on master, which gives me
      confidence that this branch has fixed it.
      
      * Make the iterator_access etc operator() const
      
      I'm actually a little surprised it compiled at all given that the
      operator() is called on a temporary, but I don't claim to fully
      understand all the different value types in C++11.
      
      * Attempt to work around compiler bugs
      
      https://godbolt.org/
      
       shows an example where ICC gets the wrong result
      for a decltype used as the default for a template argument, and CI also
      showed problems with PGI. This is a shot in the dark to see if it fixes
      things.
      
      * Make a test constructor explicit (Clang-Tidy)
      
      * Fix unit test on GCC 4.8.5
      
      It seems to require the arguments to the std::pair constructor to be
      implicitly convertible to the types in the pair, rather than just
      requiring is_constructible.
      
      * Remove DOXYGEN_SHOULD_SKIP_THIS guards
      
      Now that a complex decltype expression has been replaced by a simpler
      nested type, I'm hoping Doxygen will be able to build it without issues.
      
      * Add comment to explain iterator_state template params
      
      * fix: regression in #3271
      Co-authored-by: default avatarBruce Merry <1963944+bmerry@users.noreply.github.com>
      21282e64
    • Henry Schreiner's avatar
      Revert "Add make_value_iterator (#3271)" · 2fa3fcfd
      Henry Schreiner authored
      This reverts commit ee0c5ee4.
      2fa3fcfd
  30. 21 Sep, 2021 1 commit
    • Bruce Merry's avatar
      Add make_value_iterator (#3271) · ee0c5ee4
      Bruce Merry authored
      * Add make_value_iterator
      
      This is the counterpart to make_key_iterator, and will allow
      implementing a `value` method in `bind_map` (although doing so is left
      for a subsequent PR).
      
      I made a few design changes to reduce copy-and-paste boilerplate.
      Previously detail::iterator_state had a boolean template parameter to
      indicate whether it was being used for make_iterator or
      make_key_iterator. I replaced the boolean with a class that determines
      how to dereference the iterator. This allows for a generic
      implementation of `__next__`.
      
      I also added the ValueType and Extra... parameters to the iterator_state
      template args, because I think it was a bug that they were missing: if
      make_iterator is called twice with different values of these, only the
      first set has effect (because the state class is only registered once).
      There is still a potential issue in that the *values* of the extra
      arguments are latched on the first call, but since most policies are
      empty classes this should be even less common.
      
      * Add some remove_cv_t to appease clang-tidy
      
      * Make iterator_access and friends take reference
      
      For some reason I'd accidentally made it take a const value, which
      caused some issues with third-party packages.
      
      * Another attempt to remove remove_cv_t from iterators
      
      Some of the return types were const (non-reference) types because of the
      pecularities of decltype: `decltype((*it).first)` is the *declared* type
      of the member of the pair, rather than the type of the expression. So if
      the reference type of the iterator is `pair<const int, int> &`, then the
      decltype is `const int`. Wrapping an extra set of parentheses to form
      `decltype(((*it).first))` would instead give `const int &`.
      
      This means that the existing make_key_iterator actually returns by value
      from `__next__`, rather than by reference. Since for mapping types, keys
      are always const, this probably hasn't been noticed, but it will affect
      make_value_iterator if the Python code tries to mutate the returned
      objects. I've changed things to use double parentheses so that
      make_iterator, make_key_iterator and make_value_iterator should now all
      return the reference type of the iterator. I'll still need to add a test
      for that; for now I'm just checking whether I can keep Clang-Tidy happy.
      
      * Add back some NOLINTNEXTLINE to appease Clang-Tidy
      
      This is favoured over using remove_cv_t because in some cases a const
      value return type is deliberate (particularly for Eigen).
      
      * Add a unit test for iterator referencing
      
      Ensure that make_iterator, make_key_iterator and make_value_iterator
      return references to the container elements, rather than copies. The
      test for make_key_iterator fails to compile on master, which gives me
      confidence that this branch has fixed it.
      
      * Make the iterator_access etc operator() const
      
      I'm actually a little surprised it compiled at all given that the
      operator() is called on a temporary, but I don't claim to fully
      understand all the different value types in C++11.
      
      * Attempt to work around compiler bugs
      
      https://godbolt.org/ shows an example where ICC gets the wrong result
      for a decltype used as the default for a template argument, and CI also
      showed problems with PGI. This is a shot in the dark to see if it fixes
      things.
      
      * Make a test constructor explicit (Clang-Tidy)
      
      * Fix unit test on GCC 4.8.5
      
      It seems to require the arguments to the std::pair constructor to be
      implicitly convertible to the types in the pair, rather than just
      requiring is_constructible.
      
      * Remove DOXYGEN_SHOULD_SKIP_THIS guards
      
      Now that a complex decltype expression has been replaced by a simpler
      nested type, I'm hoping Doxygen will be able to build it without issues.
      
      * Add comment to explain iterator_state template params
      ee0c5ee4
  31. 20 Sep, 2021 1 commit