1. 23 Sep, 2021 5 commits
    • feat: reapply fixed version of #3271 (#3293) · 21282e64
      * 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: Bruce Merry <1963944+bmerry@users.noreply.github.com>
      Henry Schreiner committed
    • Revert "Add make_value_iterator (#3271)" · 2fa3fcfd
      This reverts commit ee0c5ee4.
      Henry Schreiner committed
    • chore(deps): bump jwlawson/actions-setup-cmake from 1.10 to 1.11 (#3294) · 1dc9a23c
      Bumps [jwlawson/actions-setup-cmake](https://github.com/jwlawson/actions-setup-cmake) from 1.10 to 1.11.
      - [Release notes](https://github.com/jwlawson/actions-setup-cmake/releases)
      - [Commits](https://github.com/jwlawson/actions-setup-cmake/compare/v1.10...v1.11)
      
      ---
      updated-dependencies:
      - dependency-name: jwlawson/actions-setup-cmake
        dependency-type: direct:production
        update-type: version-update:semver-minor
      ...
      
      Signed-off-by: dependabot[bot] <support@github.com>
      
      Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
      dependabot[bot] committed
  2. 22 Sep, 2021 2 commits
  3. 21 Sep, 2021 1 commit
    • Add make_value_iterator (#3271) · ee0c5ee4
      * 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
      Bruce Merry committed
  4. 20 Sep, 2021 4 commits
  5. 17 Sep, 2021 1 commit
  6. 15 Sep, 2021 1 commit
  7. 13 Sep, 2021 2 commits
  8. 10 Sep, 2021 4 commits
    • Fix capsule bug (#3261) · 9978ed58
      Thanks Aaron for jumping in fixing this!
      Aaron Gokaslan committed
    • Fix thread safety for pybind11 loader_life_support (#3237) · 0e599589
      * Fix thread safety for pybind11 loader_life_support
      
      Fixes issue: https://github.com/pybind/pybind11/issues/2765
      
      This converts the vector of PyObjects to either a single void* or
      a per-thread void* depending on the WITH_THREAD define.
      
      The new field is used by each thread to construct a stack
      of loader_life_support frames that can extend the life of python
      objects.
      
      The pointer is updated when the loader_life_support object is allocated
      (which happens before a call) as well as on release.
      
      Each loader_life_support maintains a set of PyObject references
      that need to be lifetime extended; this is done by storing them
      in a c++ std::unordered_set and clearing the references when the
      method completes.
      
      * Also update the internals version as the internal struct is no longer compatible
      
      * Add test demonstrating threading works correctly.
      
      It may be appropriate to run this under msan/tsan/etc.
      
      * [pre-commit.ci] auto fixes from pre-commit.com hooks
      
      for more information, see https://pre-commit.ci
      
      * Update test to use lifetime-extended references rather than
      std::string_view, as that's a C++ 17 feature.
      
      * [pre-commit.ci] auto fixes from pre-commit.com hooks
      
      for more information, see https://pre-commit.ci
      
      * Make loader_life_support members private
      
      * Update version to dev2
      
      * Update test to use python threading rather than concurrent.futures
      
      * [pre-commit.ci] auto fixes from pre-commit.com hooks
      
      for more information, see https://pre-commit.ci
      
      * Remove unnecessary env in test
      
      * Remove unnecessary pytest in test
      
      * Use native C++ thread_local in place of python per-thread data structures to retain compatability
      
      * clang-format test_thread.cpp
      
      * Add a note about debugging the py::cast() error
      
      * thread_test.py now propagates exceptions on join() calls.
      
      * [pre-commit.ci] auto fixes from pre-commit.com hooks
      
      for more information, see https://pre-commit.ci
      
      * remove unused sys / merge
      
      * Update include order in test_thread.cpp
      
      * Remove spurious whitespace
      
      * Update comment / whitespace.
      
      * Address review comments
      
      * lint cleanup
      
      * Fix test IntStruct constructor.
      
      * Add explicit to constructor
      
      Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
      Co-authored-by: Aaron Gokaslan <skylion.aaron@gmail.com>
      Laramie Leavitt committed
    • Fixing NOLINT mishap (#3260) · 121b91f9
      * Removing NOLINT pointed out by Aaron.
      
      * Removing another NOLINT.
      Ralf W. Grosse-Kunstleve committed
    • maint(Clang-Tidy): readability-const-return (#3254) · ae07d4c6
      * Enable clang-tidy readability-const-return
      
      * PyTest functional
      
      * Fix regression
      
      * Fix actual regression
      
      * Remove one more NOLINT
      
      * Update comment
      Aaron Gokaslan committed
  9. 09 Sep, 2021 3 commits
    • fix: Set __file__ constant when using eval_file (#1300) (#3233) · 4c6bee35
      * Set __file__ constant when using eval_file
      
      * Use const ref
      
      * Use a move instead
      
      * Revert
      
      * Improve test
      
      * Guard test with Python version
      
      * Fix tests
      
      * Dont support Python2 API
      
      * Drop Python2 eval __file__ support
      
      * Hack
      
      * Semisupport Python2
      
      * Take2
      
      * Remove Python2 support
      Aaron Gokaslan committed
    • CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) · 6abf2baa
      * Adding google-explicit-constructor to .clang-tidy
      
      * clang-tidy explicit attr.h (all automatic)
      
      * clang-tidy explicit cast.h (all automatic)
      
      * clang-tidy detail/init.h (1 NOLINT)
      
      * clang-tidy detail/type_caster_base.h (2 NOLINT)
      
      * clang-tidy pybind11.h (7 NOLINT)
      
      * clang-tidy detail/common.h (3 NOLINT)
      
      * clang-tidy detail/descr.h (2 NOLINT)
      
      * clang-tidy pytypes.h (23 NOLINT, only 1 explicit)
      
      * clang-tidy eigen.h (7 NOLINT, 0 explicit)
      
      * Adding 2 explicit in functional.h
      
      * Adding 4 explicit in iostream.h
      
      * clang-tidy numpy.h (1 NOLINT, 1 explicit)
      
      * clang-tidy embed.h (0 NOLINT, 1 explicit)
      
      * clang-tidy tests/local_bindings.h (0 NOLINT, 4 explicit)
      
      * clang-tidy tests/pybind11_cross_module_tests.cpp (0 NOLINT, 1 explicit)
      
      * clang-tidy tests/pybind11_tests.h (0 NOLINT, 2 explicit)
      
      * clang-tidy tests/test_buffers.cpp (0 NOLINT, 2 explicit)
      
      * clang-tidy tests/test_builtin_casters.cpp (0 NOLINT, 4 explicit)
      
      * clang-tidy tests/test_class.cpp (0 NOLINT, 6 explicit)
      
      * clang-tidy tests/test_copy_move.cpp (0 NOLINT, 7 explicit)
      
      * clang-tidy tests/test_embed/external_module.cpp (0 NOLINT, 1 explicit)
      
      * clang-tidy tests/test_embed/test_interpreter.cpp (0 NOLINT, 1 explicit)
      
      * clang-tidy tests/object.h (0 NOLINT, 2 explicit)
      
      * clang-tidy batch of fully automatic fixes.
      
      * Workaround for MSVC 19.16.27045.0 C++17 Python 2 C++ syntax error.
      Ralf W. Grosse-Kunstleve committed
  10. 08 Sep, 2021 1 commit
  11. 02 Sep, 2021 1 commit
  12. 31 Aug, 2021 3 commits
    • Minor follow-on to PR #1334 (Fix enum value's __int__ returning non-int when… · 49173e47
      Minor follow-on to PR #1334 (Fix enum value's __int__ returning non-int when underlying type is bool or of char type) (#3232)
      
      * Minor tweaks.
      
      * Restoring tests/pybind11_tests.h version from master, removing just the comment and empty line that was added in PR #3087; those were made obsolete by the pragma cleanup that concluded with PR #3186.
      
      * More-to-the-point test for Python 3.
      Ralf W. Grosse-Kunstleve committed
    • Minor tweaks. (#3230) · a46f6237
      * Minor tweaks.
      
      * Restoring tests/pybind11_tests.h version from master, removing just the comment and empty line that was added in PR #3087; those were made obsolete by the pragma cleanup that concluded with PR #3186.
      
      * [ci skip] Restoring tests/test_enum.py from master.
      Ralf W. Grosse-Kunstleve committed
    • fix: memory leak in cpp_function (#3228) (#3229) · d6474ed7
      * fix: memory leak in cpp_function (#3228)
      
      * add a test case to check objects are deconstructed in cpp_function
      
      * update the test case about cpp_function
      
      * fix the test case about cpp_function: remove "noexcept"
      
      * Actually calling func. CHECK(stat.alive() == 2); Manually verified that the new tests fails without the change in pybind11.h
      
      * Moving new test to test_callbacks.cpp,py, with small enhancements.
      
      * Removing new test from test_interpreter.cpp (after it was moved to test_callbacks.cpp,py). This restores test_interpreter.cpp to the current state on master.
      
      * Using py::detail::silence_unused_warnings(py_func); to make the intent clear.
      
      Co-authored-by: Ralf W. Grosse-Kunstleve <rwgk@google.com>
      Tailing Yuan committed
  13. 30 Aug, 2021 1 commit
  14. 28 Aug, 2021 1 commit
    • Adding `ssize_t_cast` to support passing `size_t` or `ssize_t` values where… · 777352fc
      Adding `ssize_t_cast` to support passing `size_t` or `ssize_t` values where `ssize_t` is needed. (#3219)
      
      * Trivial change to avoid (ssize_t) cast.
      
      * Demo for safe_ssize_t idea.
      
      * Removing safe_ssize_t.cpp (proof-of-concept code) to not upset the GHA Format workflow.
      
      * Completing changes in pytypes.h
      
      * New ssize_t_cast (better replacement for safe_ssize_t).
      
      * clang-format-diff (no manual changes).
      
      * bytes_ssize_t -Wnarrowing reproducer (see PR #2692).
      
      * Backing out tuple(), list() ssize_t support, for compatibility with older compilers (to resolve link failures).
      
      * Bug fix: missing `py::` for `py::ssize_t`
      
      * Restoring tuple(), list() ssize_t support, but passing `size` by value, for compatibility with older compilers (to resolve link failures).
      
      * Full test coverage of all functions with modified signatures.
      Ralf W. Grosse-Kunstleve committed
  15. 26 Aug, 2021 6 commits
    • Fix enum value's __int__ returning non-int when underlying type is bool or of char type (#1334) · cb60ed49
      * Use equivalent_integer for enum's Scalar decision
      
      * Add test for char underlying enum
      
      * Support translating bool type in enum's Scalar
      
      * Add test for bool underlying enum
      
      * Fix comment in test
      
      * Switch from `PYBIND11_CPP20` macro to `PYBIND11_HAS_U8STRING`
      
      * Refine tests
      
      Co-authored-by: Aaron Gokaslan <skylion.aaron@gmail.com>
      Ye Zhihao committed
    • Call PySys_SetArgv when initializing interpreter. (#2341) · 930bb16c
      * Call PySys_SetArgv when initializing interpreter.
      
      * Document argc/argv parameters in initialize_interpreter.
      
      * Remove manual memory management from set_interpreter_argv in favor of smart pointers.
      
      * Use size_t for indexers in set_interpreter_argv.
      
      * Minimize macros for flow control in set_interpreter_argv.
      
      * Fix 'unused variable' warning on Py2
      
      * whitespace
      
      * Define wide_char_arg_deleter outside set_interpreter_argv.
      
      * Do sys.path workaround in C++ rather than eval.
      
      * Factor out wchar conversion to a separate function.
      
      * Restore widened_argv variable declaration.
      
      * Fix undeclared widened_arg variable on some paths.
      
      * Use delete[] to match new wchar_t[].
      
      * Fix compiler errors
      
      * Use PY_VERSION_HEX for a cleaner CVE-2008-5983 mode check.
      
      * Fix typo
      
      * Use explicit type for deleter so delete[] works cross-compiler.
      
      * Always use PySys_SetArgvEx because pybind11 doesn't support pythons that don't include it.
      
      * Remove pointless ternary operator.
      
      * Use unique_ptr.reset instead of a second initialization.
      
      * Rename add_program_dir_to_path parameter to clarify intent.
      
      * Add defined() check before evaluating HAVE_BROKEN_MBSTOWCS.
      
      * Apply clang-tidy fixes
      
      * Pre-commit
      
      * refactor: use const for set_interpreter_argv
      
      * Try to fix const issue and allocate vector properly
      
      * fix: copy strings on Python 2
      
      * Applying clang-format-diff relative to master.
      
      The only manual change is an added empty line between pybind11 and system `#include`s.
      
      ```
      git diff -U0 --no-color master | python3 $HOME/clone/llvm-project/clang/tools/clang-format/clang-format-diff.py -p1 -style=file -i
      ```
      
      Co-authored-by: Boris Staletic <boris.staletic@gmail.com>
      Co-authored-by: Aaron Gokaslan <skylion.aaron@gmail.com>
      Co-authored-by: Henry Schreiner <henryschreineriii@gmail.com>
      Co-authored-by: Ralf W. Grosse-Kunstleve <rwgk@google.com>
      Dan committed
    • view for numpy arrays (#987) · 503ff2a6
      * reshape
      
      * more tests
      
      * Update numpy.h
      
      * Update test_numpy_array.py
      
      * array view
      
      * test
      
      * Update test_numpy_array.cpp
      
      * Update numpy.h
      
      * Update numpy.h
      
      * Update test_numpy_array.cpp
      
      * [pre-commit.ci] auto fixes from pre-commit.com hooks
      
      for more information, see https://pre-commit.ci
      
      * Fix merge bug
      
      * Make clang-tidy happy
      
      * Add xfail for PyPy
      
      * Fix casting issue
      
      * Fix formatting
      
      * Apply clang-tidy
      
      * Address reviews on additional tests
      
      * Fix ordering
      
      * Do a little more reordering
      
      * Fix typo
      
      * Try improving tests
      
      * Fix error in reshape
      
      * Add one more reshape test
      
      * Fix bugs and add test
      
      * Relax test
      
      * streamlining new tests; removing a few stray msg
      
      * Fix style revert
      
      * Fix clang-tidy
      
      * Misc tweaks:
      * Comment: matching style in file (///), responsibility sentence, consistent punctuation.
      * Replacing `unsigned char` with `uint8_t` for max consistency.
      * Removing `1` from `array_view1` because there is only one.
      
      * Partial clang-format-diff.
      
      Co-authored-by: ncullen93 <ncullen.th@dartmouth.edu>
      Co-authored-by: NC Cullen <nicholas.c.cullen.th@dartmouth.edu>
      Co-authored-by: Aaron Gokaslan <skylion.aaron@gmail.com>
      Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
      Co-authored-by: Ralf Grosse-Kunstleve <rwgk@google.com>
      Nick Cullen committed
    • reshape for numpy arrays (#984) · 59ad1e7d
      * reshape
      
      * more tests
      
      * Update numpy.h
      
      * Update test_numpy_array.py
      
      * Update numpy.h
      
      * Update numpy.h
      
      * Update test_numpy_array.cpp
      
      * [pre-commit.ci] auto fixes from pre-commit.com hooks
      
      for more information, see https://pre-commit.ci
      
      * Fix merge bug
      
      * Make clang-tidy happy
      
      * Add xfail for PyPy
      
      * Fix casting issue
      
      * Address reviews on additional tests
      
      * Fix ordering
      
      * Do a little more reordering
      
      * Fix typo
      
      * Try improving tests
      
      * Fix error in reshape
      
      * Add one more reshape test
      
      * streamlining new tests; removing a few stray msg
      
      Co-authored-by: ncullen93 <ncullen.th@dartmouth.edu>
      Co-authored-by: NC Cullen <nicholas.c.cullen.th@dartmouth.edu>
      Co-authored-by: Aaron Gokaslan <skylion.aaron@gmail.com>
      Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
      Co-authored-by: Ralf Grosse-Kunstleve <rwgk@google.com>
      Nick Cullen committed
    • Add make_simple_namespace function and tests (#2840) · 031a700d
      Co-authored-by: Jouke Witteveen <j.witteveen@cosine.nl>
      Jouke Witteveen committed
  16. 24 Aug, 2021 1 commit
  17. 23 Aug, 2021 3 commits