1. 02 Mar, 2022 1 commit
  2. 10 Feb, 2022 4 commits
  3. 09 Feb, 2022 2 commits
  4. 08 Feb, 2022 1 commit
  5. 06 Feb, 2022 1 commit
    • Michał Górny's avatar
      tests: update catch to 2.13.5 to fix glibc 2.34 failures (#3679) · 96b943be
      Michał Górny authored
      * Download catch for MinGw
      
      * Fix rest of MinGW
      
      * fix: update catch to 2.13.5 to fix glibc 2.34 failures
      
      Update the downloaded Catch version to 2.13.5, in order to fix build
      failure on glibc 2.34:
      
      ```
      In file included from /usr/include/signal.h:328,
                       from /tmp/pybind11/.nox/tests-3-9/tmp/tests/catch/catch.hpp:8030,
                       from /tmp/pybind11/tests/test_embed/catch.cpp:13:
      /tmp/pybind11/.nox/tests-3-9/tmp/tests/catch/catch.hpp:10818:58: error: call to non-‘constexpr’ function ‘long int sysconf(int)’
      10818 |     static constexpr std::size_t sigStackSize = 32768 >= MINSIGSTKSZ ? 32768 : MINSIGSTKSZ;
            |                                                          ^~~~~~~~~~~
      In file included from /usr/include/python3.9/Python.h:36,
                       from /tmp/pybind11/include/pybind11/detail/common.h:215,
                       from /tmp/pybind11/include/pybind11/pytypes.h:12,
                       from /tmp/pybind11/include/pybind11/cast.h:13,
                       from /tmp/pybind11/include/pybind11/attr.h:13,
                       from /tmp/pybind11/include/pybind11/pybind11.h:13,
                       from /tmp/pybind11/include/pybind11/embed.h:12,
                       from /tmp/pybind11/tests/test_embed/catch.cpp:4:
      /usr/include/unistd.h:640:17: note: ‘long int sysconf(int)’ declared here
        640 | extern long int sysconf (int __name) __THROW;
            |                 ^~~~~~~
      In file included from /tmp/pybind11/tests/test_embed/catch.cpp:13:
      /tmp/pybind11/.nox/tests-3-9/tmp/tests/catch/catch.hpp:10877:45: error: size of array ‘altStackMem’ is not an integral constant-expression
      10877 |     char FatalConditionHandler::altStackMem[sigStackSize] = {};
            |                                             ^~~~~~~~~~~~
      ```
      
      The newest Catch version cannot be used yet because of regression:
      https://github.com/catchorg/Catch2/pull/2364
      
      
      
      * fix: add option for _ check, only define on pybind11
      
      * Revert "fix: add option for _ check, only define on pybind11"
      
      This reverts commit 86817db488c547816e21e20d678db318bb286384.
      
      * fix: only undef _ for catch cpp creation.
      Co-authored-by: default avatarAaron Gokaslan <skylion.aaron@gmail.com>
      Co-authored-by: default avatarHenry Schreiner <henryschreineriii@gmail.com>
      96b943be
  6. 03 Feb, 2022 1 commit
  7. 31 Jan, 2022 1 commit
  8. 27 Jan, 2022 1 commit
  9. 16 Jan, 2022 1 commit
  10. 14 Jan, 2022 1 commit
    • Aaron Gokaslan's avatar
      Add support for nested C++11 exceptions (#3608) · d2ec8367
      Aaron Gokaslan authored
      * Add support for nested C++11 exceptions
      
      * Remove wrong include
      
      * Fix if directive
      
      * Fix missing skipif
      
      * Simplify code and try to work around MSVC bug
      
      * Clarify comment
      
      * Further simplify code
      
      * Remove the last extra throw statement
      
      * Qualify auto
      
      * Fix typo
      
      * Add missing return for consistency
      
      * Fix clang-tidy complaint
      
      * Fix python2 stub
      
      * Make clang-tidy happy
      
      * Fix compile error
      
      * Fix python2 function signature
      
      * Extract C++20 utility and backport
      
      * Cleanup code a bit more
      
      * Improve test case
      
      * Consolidate code and fix signature
      
      * Fix typo
      d2ec8367
  11. 12 Jan, 2022 2 commits
  12. 11 Jan, 2022 2 commits
  13. 29 Dec, 2021 1 commit
    • Ralf W. Grosse-Kunstleve's avatar
      Adding dedicated test_const_name. (#3578) · 1bbaeb34
      Ralf W. Grosse-Kunstleve authored
      * Adding dedicated test_const_name.
      
      Also exercises pybind11::detail::_ backward compatibility.
      
      See also: PR #3423
      
      * Backing out tests involving int_to_str (requires C++17 or higher).
      
      * Suppressing clang-tidy errors.
      
      * Disabling test_const_name for MSVC 2015 due to bizarre failures.
      
      * Stacking @pytest.mark.parametrize (thanks to @skylion007 for pointing out).
      1bbaeb34
  14. 21 Dec, 2021 1 commit
  15. 03 Dec, 2021 1 commit
    • Jason Rhinelander's avatar
      Expand std::string_view support to str, bytes, memoryview (#3521) · b4939fcb
      Jason Rhinelander authored
      * Expand string_view support to str, bytes, memoryview
      
      1. Allows constructing a str or bytes implicitly from a string_view;
         this is essentially a small shortcut allowing a caller to write
         `py::bytes{sv}` rather than `py::bytes{sv.data(), sv.size()}`.
      
      2. Allows implicit conversion *to* string_view from py::bytes -- this
         saves a fair bit more as currently there is no simple way to get such
         a view of the bytes without copying it (or resorting to Python API
         calls).
      
         (This is not done for `str` because when the str contains unicode we
         have to allocate to a temporary and so there might not be some string
         data we can properly view without owning.)
      
      3. Allows `memoryview::from_memory` to accept a string_view.  As with
         the other from_memory calls, it's entirely your responsibility to
         keep it alive.
      
      This also required moving the string_view availability detection into
      detail/common.h because this PR needs it in pytypes.h, which is higher
      up the include chain than cast.h where it was being detected currently.
      
      * Move string_view include to pytypes.h
      
      * CI-testing a fix for the "ambiguous conversion" issue.
      
      This change is known to fix the `tensorflow::tstring` issue reported under https://github.com/pybind/pybind11/pull/3521#issuecomment-985100965
      
      
      
      TODO: Minimal reproducer for the `tensorflow::tstring` issue.
      
      * Make clang-tidy happy (hopefully).
      
      * Adding minimal reproducer for the `tensorflow::tstring` issue.
      
      Error without the enable_if trick:
      
      ```
      /usr/local/google/home/rwgk/forked/pybind11/tests/test_builtin_casters.cpp:169:16: error: ambiguous conversion for functional-style cast from 'TypeWithBothOperatorStringAndStringView' to 'py::bytes'
              return py::bytes(TypeWithBothOperatorStringAndStringView());
                     ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      /usr/local/google/home/rwgk/forked/pybind11/include/pybind11/detail/../pytypes.h:1174:5: note: candidate constructor
          bytes(const std::string &s) : bytes(s.data(), s.size()) { }
          ^
      /usr/local/google/home/rwgk/forked/pybind11/include/pybind11/detail/../pytypes.h:1191:5: note: candidate constructor
          bytes(std::string_view s) : bytes(s.data(), s.size()) { }
          ^
      ```
      
      * Adding missing NOLINTNEXTLINE
      
      * Also apply ambiguous conversion workaround to str()
      Co-authored-by: default avatarRalf W. Grosse-Kunstleve <rwgk@google.com>
      b4939fcb
  16. 22 Nov, 2021 1 commit
  17. 21 Nov, 2021 1 commit
    • Jason Rhinelander's avatar
      Fix py::kw_only when used before the first arg of a method (#3488) · 673b4be3
      Jason Rhinelander authored
      * Fix py::kw_only when used before the first arg of a method
      
      The implicit space for the `self` argument isn't added until we hit the
      first argument, but this wasn't being done for kw_only or pos_only, and
      so a kw_only before the first argument would break.
      
      This fixes it by properly checking whether we need to add the self arg.
      
      (The pos_only issue here was extremely mild -- you didn't get the `/` in
      the docstring, but AFAICT it has no other effect since there are no
      meaningful arguments before it anyway).
      
      * Style changes
      
      - rename check_have_self_arg -> append_self_arg_if_needed
      
      - move the argument name inline comments before the args instead of
        after
      673b4be3
  18. 18 Nov, 2021 1 commit
  19. 17 Nov, 2021 1 commit
  20. 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
  21. 08 Nov, 2021 1 commit
    • Antony Lee's avatar
      fix(setup =_helpers): don't add -g0 CFLAGS sets -g (#3436) · b11ff912
      Antony Lee authored
      On Unix, setuptools prepends $CFLAGS and $CPPFLAGS to the compiler flags
      (they always come before extra_compile_args and anything else; see
      distutils.sysconfig.customize_compiler).  In practice, the environment
      variables are useful e.g. to quickly generate a debug build (e.g. by
      setting CFLAGS=-g), but Pybind11Extension currently unconditionally
      overwrites this with -g0.
      
      Instead, check the environment variables and only insert -g0 if not
      overridden by them.
      b11ff912
  22. 07 Nov, 2021 1 commit
  23. 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
  24. 26 Oct, 2021 2 commits
    • 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
    • Ryan Cahoon's avatar
      fix: the types for return_value_policy_override in optional_caster (#3376) · c2d3e220
      Ryan Cahoon authored
      
      
      * 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: default avatarAaron Gokaslan <skylion.aaron@gmail.com>
      Co-authored-by: default avatarHenry Schreiner <HenrySchreinerIII@gmail.com>
      c2d3e220
  25. 22 Oct, 2021 1 commit
  26. 19 Oct, 2021 1 commit
  27. 11 Oct, 2021 2 commits
    • Ralf W. Grosse-Kunstleve's avatar
      Correct options on Eigen::MappedSparseMatrix & adding MSVC C4127 suppression... · 7c580586
      Ralf W. Grosse-Kunstleve authored
      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).
      7c580586
    • 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. 08 Oct, 2021 1 commit
  29. 04 Oct, 2021 2 commits
  30. 01 Oct, 2021 1 commit
    • Bruce Merry's avatar
      feat: add `.keys` and `.values` to bind_map (#3310) · b3573ac9
      Bruce Merry authored
      
      
      * Add `.keys` and `.values` to bind_map
      
      Both of these implement views (rather than just iterators), and `.items`
      is also upgraded to a view. In practical terms, this allows a view to be
      iterated multiple times and have its size taken, neither of which works
      with an iterator.
      
      The views implement `__len__`, `__iter__`, and the keys view implements
      `__contains__`. Testing membership also works in item and value views
      because Python falls back to iteration. This won't be optimal
      for item values since it's linear rather than O(log n) or O(1), but I
      didn't fancy trying to get all the corner cases to match Python
      behaviour (tuple of wrong types, wrong length tuple, not a tuple etc).
      
      Missing relative to Python dictionary views is `__reversed__` (only
      added to Python in 3.8). Implementing that could break code that binds
      custom map classes which don't provide `rbegin`/`rend` (at least without
      doing clever things with SFINAE), so I've not tried.
      
      The size increase on my system is 131072 bytes, which is rather large
      (5%) but also suspiciously round (2^17) and makes me suspect some
      quantisation effect.
      
      * bind_map: support any object in __contains__
      
      Add extra overload of `__contains__` (for both the map itself and
      KeysView) which takes an arbitrary object and returns false.
      
      * Take py::object by const reference in __contains__
      
      To keep clang-tidy happy.
      
      * Removing stray `py::` (detected via interactive testing in Google environment).
      Co-authored-by: default avatarRalf W. Grosse-Kunstleve <rwgk@google.com>
      b3573ac9
  31. 24 Sep, 2021 1 commit
    • Jeremy Maitin-Shepard's avatar
      Add `custom_type_setup` attribute (#3287) · 62c4909c
      Jeremy Maitin-Shepard authored
      * Fix `pybind11::object::operator=` to be safe if `*this` is accessible from Python
      
      * Add `custom_type_setup` attribute
      
      This allows for custom modifications to the PyHeapTypeObject prior to
      calling `PyType_Ready`.  This may be used, for example, to define
      `tp_traverse` and `tp_clear` functions.
      62c4909c