1. 04 Oct, 2021 2 commits
  2. 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
  3. 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
  4. 23 Sep, 2021 3 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
    • Jeremy Maitin-Shepard's avatar
    • Henry Schreiner's avatar
      Revert "Add make_value_iterator (#3271)" · 2fa3fcfd
      Henry Schreiner authored
      This reverts commit ee0c5ee4.
      2fa3fcfd
  5. 22 Sep, 2021 1 commit
    • Henry Schreiner's avatar
      feat: Slice allowing None with py::object or std::optional (#1101) · b06a6f4f
      Henry Schreiner authored
      * Adding nullptr slices
      
      Using example from #1095
      
      Some fixes from @wjakob's review
      
      Stop clang-tidy from complaining
      
      New proposal for py::slice constructor
      
      Eric's suggested changes: simplify testing; shift def's
      
      * chore: drop MSVC pragma (hopefully unneeded)
      
      * Apply suggestions from code review
      b06a6f4f
  6. 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
  7. 20 Sep, 2021 2 commits
  8. 15 Sep, 2021 1 commit
  9. 13 Sep, 2021 1 commit
    • Ralf W. Grosse-Kunstleve's avatar
      Follow-on to PR #3254, to address user code breakages. (#3263) · 6c65ab59
      Ralf W. Grosse-Kunstleve authored
      * Restoring `const` removed from pytypes.h in PR #3254, adding tests reflective of user code that breaks when those `const` are removed.
      
      * clang-tidy NOLINTs (and one collateral fix).
      
      * Inserting PYBIND11_CONST_FOR_STRICT_PLATFORMS
      
      * Trying `defined(__APPLE__)`
      
      * Trying again: `auto it` for strict platforms.
      
      * Adding NOLINTNEXTLINE(bugprone-macro-parentheses), expanding comments.
      
      * Labeling all changes with `PR #3263`, for easy reference, and to make it easy to undo these changes if we decide to do so in the future.
      6c65ab59
  10. 10 Sep, 2021 4 commits
    • Aaron Gokaslan's avatar
      Fix capsule bug (#3261) · 9978ed58
      Aaron Gokaslan authored
      Thanks Aaron for jumping in fixing this!
      9978ed58
    • Laramie Leavitt's avatar
      Fix thread safety for pybind11 loader_life_support (#3237) · 0e599589
      Laramie Leavitt authored
      * 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: default avatarpre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
      Co-authored-by: default avatarAaron Gokaslan <skylion.aaron@gmail.com>
      0e599589
    • Ralf W. Grosse-Kunstleve's avatar
      Fixing NOLINT mishap (#3260) · 121b91f9
      Ralf W. Grosse-Kunstleve authored
      * Removing NOLINT pointed out by Aaron.
      
      * Removing another NOLINT.
      121b91f9
    • Aaron Gokaslan's avatar
      maint(Clang-Tidy): readability-const-return (#3254) · ae07d4c6
      Aaron Gokaslan authored
      * Enable clang-tidy readability-const-return
      
      * PyTest functional
      
      * Fix regression
      
      * Fix actual regression
      
      * Remove one more NOLINT
      
      * Update comment
      ae07d4c6
  11. 09 Sep, 2021 3 commits
    • Jeremy Maitin-Shepard's avatar
    • Aaron Gokaslan's avatar
      fix: Set __file__ constant when using eval_file (#1300) (#3233) · 4c6bee35
      Aaron Gokaslan authored
      * 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
      4c6bee35
    • Ralf W. Grosse-Kunstleve's avatar
      CodeHealth: Enabling clang-tidy google-explicit-constructor (#3250) · 6abf2baa
      Ralf W. Grosse-Kunstleve authored
      * 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.
      6abf2baa
  12. 02 Sep, 2021 1 commit
  13. 31 Aug, 2021 1 commit
    • Tailing Yuan's avatar
      fix: memory leak in cpp_function (#3228) (#3229) · d6474ed7
      Tailing Yuan authored
      
      
      * 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: default avatarRalf W. Grosse-Kunstleve <rwgk@google.com>
      d6474ed7
  14. 28 Aug, 2021 1 commit
    • Ralf W. Grosse-Kunstleve's avatar
      Adding `ssize_t_cast` to support passing `size_t` or `ssize_t` values where... · 777352fc
      Ralf W. Grosse-Kunstleve authored
      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.
      777352fc
  15. 26 Aug, 2021 5 commits
  16. 24 Aug, 2021 1 commit
  17. 23 Aug, 2021 1 commit
  18. 19 Aug, 2021 1 commit
    • Ralf W. Grosse-Kunstleve's avatar
      Cleanup of file-scoped and globally-scoped warning suppression pragmas across... · 998d45e4
      Ralf W. Grosse-Kunstleve authored
      Cleanup of file-scoped and globally-scoped warning suppression pragmas across pybind11 header files. (#3201)
      
      * Removing all MSVC C4127 warning suppression pragmas.
      
      * Removing MSVC /WX (WERROR). To get a full list of all warnings.
      
      * Inserting PYBIND11_SILENCE_MSVC_C4127. Changing one runtime if to #if.
      
      * Changing PYBIND11_SILENCE_MSVC_C4127 macro to use absolute namespace (for use outside pybind11 include directory).
      
      * Restoring MSVC /WX (WERROR).
      
      * Removing globally-scoped suppression for clang -Wunsequenced. Based on an experiment under PR #3202 it is obsolete and can simply be removed.
      998d45e4
  19. 17 Aug, 2021 1 commit
    • Ralf W. Grosse-Kunstleve's avatar
      Removing obsolete eigen.h warning suppression pragmas. (#3198) · 774b5ff9
      Ralf W. Grosse-Kunstleve authored
      * Removing all pragma from eigen.h
      
      * Removing -Werror or equivalent from tests/CMakeLists.txt
      
      * Restoring tests/CMakeLists.txt from master.
      
      * Adding 4 PYBIND11_SILENCE_MSVC_C4127.
      
      * Compatibility with -Wconversion, -Wdeprecated
      
      * Introducing PYBIND11_COMPATIBILITY_WDEPRECATED_COPY
      
      * Systematically using --verbose for compilations where possible (cmake 3.14 or newer).
      
      Also changing all `cmake -t` to `--target`, `-v` to `--verbose`, `check` to `pytest`, for consistency (to make it easier to pin-point all commands of a certain type).
      
      Also removing one `-j 2` for `pytest` in hopes of reducing flakes due to races in test_iostream and in prints from destructors.
      
      * Commenting out pragmas as an experiment to reproduce previous observation.
      
      * Removing all (newly added, but already commented-out) pragma code, adding HINT use -isystem (as cmake does).
      
      * Restoring ci.yml from master. Those changes are better handled separately. BTW: in the last CI run there was still a test_iostream flake, even without the -j 2 for running the tests (verfied by inspecting the log).
      774b5ff9
  20. 14 Aug, 2021 2 commits
    • Aaron Gokaslan's avatar
      [Bugfix] Fix errant const methods (#3194) · 617cb653
      Aaron Gokaslan authored
      * Fix errant const methods
      
      * Remove NOLINT since clang-tidy is pretty conservative
      
      * Missed one
      
      * Fix a few more errors
      
      * Add reviewer suggested comments
      
      * Run clang-format
      617cb653
    • Ralf W. Grosse-Kunstleve's avatar
      Removing last remnants of pragma block at the top of pybind11.h (#3186) · 1bcd94c4
      Ralf W. Grosse-Kunstleve authored
      * Removing last remnants of pragma block at the top of pybind11.h, defaulting CUDA, GCC7, GCC8 to PYBIND11_NOINLINE_DISABLED, with the option to define PYBIND11_NOINLINE_FORCED.
      
      * Unique SOSIZE prefix to make it easier to extract the sosizes from the GitHub logs.
      
      * Commenting out PYBIND11_WERROR block, for noinline testing.
      
      * Undoing accidental change.
      
      * `#define PYBIND11_NOINLINE_FORCED`
      
      * [pre-commit.ci] auto fixes from pre-commit.com hooks
      
      for more information, see https://pre-commit.ci
      
      
      
      * `#define PYBIND11_NOINLINE_DISABLED`
      
      * Going back to default (removing `#define PYBIND11_NOINLINE_DISABLED`).
      
      * `#define PYBIND11_NOINLINE_FORCED`
      
      * Undoing all changes releated to measuring sosizes.
      
      * Rollback of PR #3030 (Working around Centos 8 failure).
      
      * Disabling -Werror for GNU (experiment).
      
      * Commenting out the entire `if(PYBIND11_WERROR)` again (although that is not expected to make a difference, but who knows what I am overlooking).
      
      * Adding `-DCMAKE_BUILD_TYPE=Release`
      
      * Undoing change to tests/CMakeLists.txt (uncommenting `if(PYBIND11_WERROR)` block).
      
      * post `git rebase master -X theirs` fixups.
      
      * Adding measurements to comment for `PYBIND11_NOINLINE_FORCED`.
      Co-authored-by: default avatarpre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
      1bcd94c4
  21. 09 Aug, 2021 2 commits
    • Ralf W. Grosse-Kunstleve's avatar
      PYBIND11_NOINLINE-related cleanup. (#3179) · 4c7e509f
      Ralf W. Grosse-Kunstleve authored
      * Removing pragma for GCC -Wattributes, fixing forward declarations.
      
      * Introducing PYBIND11_NOINLINE_FWD to deal with CUDA, GCC7, GCC8.
      
      * Updating PYBIND11_NOINLINE_DCL in Doxyfile.
      
      * Trying noinline, noinline for {CUDA, GCC7, GCC8}
      
      * Trying noinline, inline for {CUDA, GCC7, GCC8}
      
      * Adding GCC -Wattributes `pragma` in 3 header files.
      
      * Introducing PYBIND11_NOINLINE_GCC_PRAGMA_ATTRIBUTES_NEEDED, used in 9 header files.
      
      * Removing ICC pragma 2196, to see if it is still needed.
      
      * Trying noinline, noinline for ICC
      
      * Trying noinline, inline for ICC
      
      * Restoring ICC pragma 2196, introducing PYBIND11_NOINLINE_FORCED, defined for testing.
      
      * Removing code accidentally left in (was for experimentation only).
      
      * Removing one-time-test define.
      
      * Removing PYBIND11_NOINLINE_FWD macro (after learning that it makes no sense).
      
      * Testing with PYBIND11_NOINLINE_DISABLED. Minor non-functional enhancements.
      
      * Removing #define PYBIND11_NOINLINE_DISABLED (test was successful).
      
      * Removing PYBIND11_NOINLINE_FORCED and enhancing comments for PYBIND11_NOINLINE.
      
      * WIP stripping back
      
      * Making -Wattributes pragma in pybind11 specific to GCC7, GCC8, CUDA.
      4c7e509f
    • Aaron Gokaslan's avatar
      maint(perf): Optimize Numpy constructor to remove copies by value. (#3183) · ff590c12
      Aaron Gokaslan authored
      * maint(perf): Optimize Numpy Constructor with additional std::move
      
      * Add more moves
      ff590c12
  22. 06 Aug, 2021 4 commits
    • Ralf W. Grosse-Kunstleve's avatar
      Removing GCC -Wunused-but-set-parameter from pragma block at the top of pybind11.h (#3164) · af700733
      Ralf W. Grosse-Kunstleve authored
      
      
      * Cleanup triggered by work on pragma for GCC -Wunused-but-set-parameter.
      
      * Backing out changes to eigen.h (to be worked on later).
      
      * Adding PYBIND11_WORKAROUND_INCORRECT_GCC_UNUSED_BUT_SET_PARAMETER in type_caster_base.h (apparently needed only for older GCCs).
      
      * Apparently older compilers need a simpler overload for silence_unused_warnings().
      
      * clang C++11 compatibility: removing constexpr
      
      * Special case for MSVC 2017: `constexpr void` return
      
      * Trying again without the silence_unused_warnings(const int *) overload.
      
      * Separate macros for ALL_GCC, OLD_GCC_UNUSED_BUT_SET_PARAMETER
      
      * Changing to __GNUC__ <= 2 (turning off)
      
      * Refined condition for PYBIND11_WORKAROUND_INCORRECT_OLD_GCC_UNUSED_BUT_SET_PARAMETER.
      
      * Quick experiment trying out suggestion by @henryiii
      
      * Introducing macro: PYBIND11_INT_ARRAY_WORKING_AROUND_MSVC_CLANG_ISSUES
      
      * Trying henryiii@ (void) expander idea.
      
      * fix: apply simpler expression with fewer workarounds
      
      * Purging new-but-already-obsoleted  macro, made possible by @henryiii's commit.
      
      * Renaming `ALL_GCC` macro back to just `GCC` (because there is no `OLD` anymore, luckily).
      
      * [actions skip] Adding "All GCC versions" to comment, to be clear about it.
      Co-authored-by: default avatarHenry Schreiner <henryschreineriii@gmail.com>
      af700733
    • Aaron Gokaslan's avatar
      maint(clang-tidy): Bugprone enable checks (#3166) · 3893f37b
      Aaron Gokaslan authored
      * Enable bugprone checks
      
      * Reset delta and massage config
      
      * Start to apply bugprone fixes
      
      * try to fix minor bug
      
      * Fix later
      
      * Fix perfect forwarding bugprone
      
      * Remove nolint
      
      * undo constructor delete
      
      * Fix bugprone-perfect-forwarding again
      
      * Remove TODO
      
      * Add another nolint for bugprone-exception-escape in scoped interpreter
      
      * Fix remaining bugprone errors
      
      * Properly apply bugprone-macro-parantheses
      
      * Redo formatting and remove bugprone nolint
      
      * Add coment and revert more whitespace changes
      
      * Fix typo
      
      * Fix parsing bug
      
      * Add back comma
      
      * Fix clang-tidy issue
      
      * Apply remaining clang-tidy fixes
      3893f37b
    • Henry Schreiner's avatar
      Revert "fix: apply simpler expression with fewer workarounds" · 089328f7
      Henry Schreiner authored
      This reverts commit 1fafd1b4.
      089328f7
    • Henry Schreiner's avatar
      1fafd1b4