1. 12 Nov, 2021 1 commit
  2. 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
  3. 23 Oct, 2021 1 commit
  4. 19 Oct, 2021 1 commit
  5. 08 Oct, 2021 1 commit
  6. 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
  7. 22 Sep, 2021 1 commit
  8. 17 Sep, 2021 1 commit
  9. 26 Aug, 2021 1 commit
  10. 24 Aug, 2021 1 commit
  11. 21 Jul, 2021 1 commit
    • jesse-sony's avatar
      Feature/local exception translator (#2650) · d65edfb0
      jesse-sony authored
      * Create a module_internals struct
      
      Since we now have two things that are going to be module local, it felt
      correct to add a struct to manage them.
      
      * Add local exception translators
      
      These are added via the  register_local_exception_translator function
      and are then applied before the global translators
      
      * Add unit tests to show the local exception translator works
      
      * Fix a bug in the unit test with the string value of KeyError
      
      * Fix a formatting issue
      
      * Rename registered_local_types_cpp()
      
      Rename it to get_registered_local_types_cpp() to disambiguate from the
      new member of module_internals
      
      * Add additional comments to new local exception code path
      
      * Add a register_local_exception function
      
      * Add additional unit tests for register_local_exception
      
      * Use get_local_internals like get_internals
      
      * Update documentation for new local exception feature
      
      * Add back a missing space
      
      * Clean-up some issues in the docs
      
      * Remove the code duplication when translating exceptions
      
      Separated out the exception processing into a standalone function in the
      details namespace.
      
      Clean-up some comments as per PR notes as well
      
      * Remove the code duplication in register_exception
      
      * Cleanup some formatting things caught by clang-format
      
      * Remove the templates from exception translators
      
      But I added a using declaration to alias the type.
      
      * Remove the extra local from local_internals variable names
      
      * Add an extra explanatory comment to local_internals
      
      * Fix a typo in the code
      d65edfb0
  12. 12 Jul, 2021 3 commits
  13. 10 Jul, 2021 1 commit
  14. 02 Jul, 2021 1 commit
  15. 17 Jun, 2021 2 commits
  16. 27 May, 2021 1 commit
  17. 06 May, 2021 1 commit
  18. 02 Apr, 2021 1 commit
  19. 25 Feb, 2021 1 commit
  20. 14 Jan, 2021 2 commits
  21. 08 Dec, 2020 1 commit
  22. 19 Nov, 2020 1 commit
  23. 15 Oct, 2020 1 commit
  24. 06 Oct, 2020 1 commit
    • Henry Schreiner's avatar
      feat: py::prepend tag (#1131) · 9a0c96dd
      Henry Schreiner authored
      * feat: add a priority overload with py::prepend
      
      * doc: fix wording as suggested by rwgk
      
      * feat: add get_pointer
      
      * refactor: is_prepended -> prepend (internal)
      
      * docs: suggestion from @wjakob
      
      * tests: add test covering get_pointer/set_pointer
      9a0c96dd
  25. 05 Oct, 2020 1 commit
  26. 04 Oct, 2020 1 commit
  27. 03 Oct, 2020 1 commit
  28. 15 Sep, 2020 3 commits
    • Henry Schreiner's avatar
      fix: use OVERRIDE instead of OVERLOAD (#2490) · dabbbf31
      Henry Schreiner authored
      * fix: use OVERRIDE instead of OVERLOAD
      
      * docs: more accurate statement
      dabbbf31
    • Yannick Jadoul's avatar
      Change base parameter type in register_exception and exception constructor... · 16f199f8
      Yannick Jadoul authored
      Change base parameter type in register_exception and exception constructor from PyObject* to handle (#2467)
      
      * Change base parameter type in register_exception and excepion constructor from PyObject* to handle
      
      * Fix compilation error passing `handle` to `PyObject*`
      16f199f8
    • Yannick Jadoul's avatar
      Resolve empty statement warning when using PYBIND11_OVERLOAD_PURE_NAME and... · d65e34d6
      Yannick Jadoul authored
      Resolve empty statement warning when using PYBIND11_OVERLOAD_PURE_NAME and PYBIND11_OVERLOAD_PURE (#2325)
      
      * Wrap PYBIND11_OVERLOAD_NAME and PYBIND11_OVERLOAD_PURE_NAME in do { ... } while (false), and resolve trailing semicolon
      
      * Deprecate PYBIND11_OVERLOAD_* and get_overload in favor of PYBIND11_OVERRIDE_* and get_override
      
      * Correct erroneous usage of 'overload' instead of 'override' in the implementation and internals
      
      * Fix tests to use non-deprecated PYBIND11_OVERRIDE_* macros
      
      * Update docs to use override instead of overload where appropriate, and add warning about deprecated aliases
      
      * Add semicolons to deprecated PYBIND11_OVERLOAD macros to match original behavior
      
      * Remove deprecation of PYBIND11_OVERLOAD_* macros and get_overload
      
      * Add note to changelog and upgrade guide
      d65e34d6
  29. 14 Sep, 2020 2 commits
  30. 09 Sep, 2020 1 commit
  31. 08 Sep, 2020 1 commit
  32. 06 Sep, 2020 1 commit
  33. 05 Sep, 2020 1 commit
    • Henry Schreiner's avatar
      feat: py::pos_only (#2459) · 0dbda6e8
      Henry Schreiner authored
      * feat: py::pos_only
      
      * fix: review points from @YannickJadoul
      
      * fix: review points from @bstaletic
      
      * refactor: kwonly -> kw_only
      0dbda6e8