mirror of
https://github.com/pybind/pybind11.git
synced 2025-02-18 14:40:49 +00:00
Merge branch 'master' into smart_holder
This commit is contained in:
commit
a011e1257e
4
.github/pull_request_template.md
vendored
4
.github/pull_request_template.md
vendored
@ -1,3 +1,7 @@
|
|||||||
|
<!--
|
||||||
|
Title (above): please place [branch_name] at the beginning if you are targeting a branch other than master. *Do not target stable*.
|
||||||
|
It is recommended to use conventional commit format, see conventionalcommits.org, but not required.
|
||||||
|
-->
|
||||||
## Description
|
## Description
|
||||||
|
|
||||||
<!-- Include relevant issues or PRs here, describe what changed and why -->
|
<!-- Include relevant issues or PRs here, describe what changed and why -->
|
||||||
|
@ -34,7 +34,7 @@ repos:
|
|||||||
exclude: ^noxfile.py$
|
exclude: ^noxfile.py$
|
||||||
|
|
||||||
- repo: https://github.com/asottile/pyupgrade
|
- repo: https://github.com/asottile/pyupgrade
|
||||||
rev: v2.26.0
|
rev: v2.28.0
|
||||||
hooks:
|
hooks:
|
||||||
- id: pyupgrade
|
- id: pyupgrade
|
||||||
|
|
||||||
|
@ -38,21 +38,42 @@ New features:
|
|||||||
* Implemented ``reshape`` on arrays.
|
* Implemented ``reshape`` on arrays.
|
||||||
`#984 <https://github.com/pybind/pybind11/pull/984>`_
|
`#984 <https://github.com/pybind/pybind11/pull/984>`_
|
||||||
|
|
||||||
|
* Enable defining custom ``__new__`` methods on classes by fixing bug
|
||||||
|
preventing overriding methods if they have non-pybind11 siblings.
|
||||||
|
`#3265 <https://github.com/pybind/pybind11/pull/3265>`_
|
||||||
|
|
||||||
|
* Add ``make_value_iterator()``, and fix ``make_key_iterator()`` to return
|
||||||
|
references instead of copies.
|
||||||
|
`#3293 <https://github.com/pybind/pybind11/pull/3293>`_
|
||||||
|
|
||||||
|
* ``pybind11::custom_type_setup`` was added, for customizing the
|
||||||
|
``PyHeapTypeObject`` corresponding to a class, which may be useful for
|
||||||
|
enabling garbage collection support, among other things.
|
||||||
|
`#3287 <https://github.com/pybind/pybind11/pull/3287>`_
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Changes:
|
Changes:
|
||||||
|
|
||||||
* Set ``__file__`` constant when running ``eval_file`` in an embedded interpreter.
|
* Set ``__file__`` constant when running ``eval_file`` in an embedded interpreter.
|
||||||
`#3233 <https://github.com/pybind/pybind11/pull/3233>`_
|
`#3233 <https://github.com/pybind/pybind11/pull/3233>`_
|
||||||
|
|
||||||
|
* Python objects and (C++17) ``std::optional`` now accepted in ``py::slice``
|
||||||
|
constructor.
|
||||||
|
`#1101 <https://github.com/pybind/pybind11/pull/1101>`_
|
||||||
|
|
||||||
* The pybind11 proxy types ``str``, ``bytes``, ``bytearray``, ``tuple``,
|
* The pybind11 proxy types ``str``, ``bytes``, ``bytearray``, ``tuple``,
|
||||||
``list`` now consistently support passing ``ssize_t`` values for sizes and
|
``list`` now consistently support passing ``ssize_t`` values for sizes and
|
||||||
indexes. Previously, only ``size_t`` was accepted in several interfaces.
|
indexes. Previously, only ``size_t`` was accepted in several interfaces.
|
||||||
`#3219 <https://github.com/pybind/pybind11/pull/3219>`_
|
`#3219 <https://github.com/pybind/pybind11/pull/3219>`_
|
||||||
|
|
||||||
|
* Avoid evaluating ``PYBIND11_TLS_REPLACE_VALUE`` arguments more than once.
|
||||||
|
`#3290 <https://github.com/pybind/pybind11/pull/3290>`_
|
||||||
|
|
||||||
Fixes:
|
Fixes:
|
||||||
|
|
||||||
* Bug fix: enum value's ``__int__`` returning non-int when underlying type is bool or of char type.
|
* Bug fix: enum value's ``__int__`` returning non-int when underlying type is
|
||||||
|
bool or of char type.
|
||||||
`#1334 <https://github.com/pybind/pybind11/pull/1334>`_
|
`#1334 <https://github.com/pybind/pybind11/pull/1334>`_
|
||||||
|
|
||||||
* Fixes bug in setting error state in Capsule's pointer methods.
|
* Fixes bug in setting error state in Capsule's pointer methods.
|
||||||
@ -61,7 +82,8 @@ Fixes:
|
|||||||
* A long-standing memory leak in ``py::cpp_function::initialize`` was fixed.
|
* A long-standing memory leak in ``py::cpp_function::initialize`` was fixed.
|
||||||
`#3229 <https://github.com/pybind/pybind11/pull/3229>`_
|
`#3229 <https://github.com/pybind/pybind11/pull/3229>`_
|
||||||
|
|
||||||
* Fixes thread safety for some ``pybind11::type_caster`` which require lifetime extension, such as for ``std::string_view``.
|
* Fixes thread safety for some ``pybind11::type_caster`` which require lifetime
|
||||||
|
extension, such as for ``std::string_view``.
|
||||||
`#3237 <https://github.com/pybind/pybind11/pull/3237>`_
|
`#3237 <https://github.com/pybind/pybind11/pull/3237>`_
|
||||||
|
|
||||||
* Restore compatibility with gcc 4.8.4 as distributed by ubuntu-trusty, linuxmint-17.
|
* Restore compatibility with gcc 4.8.4 as distributed by ubuntu-trusty, linuxmint-17.
|
||||||
@ -73,12 +95,26 @@ Build system improvements:
|
|||||||
* Fix regression in CMake Python package config: improper use of absolute path.
|
* Fix regression in CMake Python package config: improper use of absolute path.
|
||||||
`#3144 <https://github.com/pybind/pybind11/pull/3144>`_
|
`#3144 <https://github.com/pybind/pybind11/pull/3144>`_
|
||||||
|
|
||||||
|
* Cached Python version information could become stale when CMake was re-run
|
||||||
|
with a different Python version. The build system now detects this and
|
||||||
|
updates this information.
|
||||||
|
`#3299 <https://github.com/pybind/pybind11/pull/3299>`_
|
||||||
|
|
||||||
* Specified UTF8-encoding in setup.py calls of open().
|
* Specified UTF8-encoding in setup.py calls of open().
|
||||||
`#3137 <https://github.com/pybind/pybind11/pull/3137>`_
|
`#3137 <https://github.com/pybind/pybind11/pull/3137>`_
|
||||||
|
|
||||||
|
* Fix a harmless warning from CMake 3.21 with the classic Python discovery.
|
||||||
|
`#3220 <https://github.com/pybind/pybind11/pull/3220>`_
|
||||||
|
|
||||||
|
|
||||||
Backend and tidying up:
|
Backend and tidying up:
|
||||||
|
|
||||||
|
* Reduced thread-local storage required for keeping alive temporary data for
|
||||||
|
type conversion to one key per ABI version, rather than one key per extension
|
||||||
|
module. This makes the total thread-local storage required by pybind11 2
|
||||||
|
keys per ABI version.
|
||||||
|
`#3275 <https://github.com/pybind/pybind11/pull/3275>`_
|
||||||
|
|
||||||
* Optimize NumPy array construction with additional moves.
|
* Optimize NumPy array construction with additional moves.
|
||||||
`#3183 <https://github.com/pybind/pybind11/pull/3183>`_
|
`#3183 <https://github.com/pybind/pybind11/pull/3183>`_
|
||||||
|
|
||||||
|
@ -446,8 +446,7 @@ you can use ``py::detail::overload_cast_impl`` with an additional set of parenth
|
|||||||
Enumerations and internal types
|
Enumerations and internal types
|
||||||
===============================
|
===============================
|
||||||
|
|
||||||
Let's now suppose that the example class contains an internal enumeration type,
|
Let's now suppose that the example class contains internal types like enumerations, e.g.:
|
||||||
e.g.:
|
|
||||||
|
|
||||||
.. code-block:: cpp
|
.. code-block:: cpp
|
||||||
|
|
||||||
@ -457,10 +456,15 @@ e.g.:
|
|||||||
Cat
|
Cat
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct Attributes {
|
||||||
|
float age = 0;
|
||||||
|
};
|
||||||
|
|
||||||
Pet(const std::string &name, Kind type) : name(name), type(type) { }
|
Pet(const std::string &name, Kind type) : name(name), type(type) { }
|
||||||
|
|
||||||
std::string name;
|
std::string name;
|
||||||
Kind type;
|
Kind type;
|
||||||
|
Attributes attr;
|
||||||
};
|
};
|
||||||
|
|
||||||
The binding code for this example looks as follows:
|
The binding code for this example looks as follows:
|
||||||
@ -471,15 +475,21 @@ The binding code for this example looks as follows:
|
|||||||
|
|
||||||
pet.def(py::init<const std::string &, Pet::Kind>())
|
pet.def(py::init<const std::string &, Pet::Kind>())
|
||||||
.def_readwrite("name", &Pet::name)
|
.def_readwrite("name", &Pet::name)
|
||||||
.def_readwrite("type", &Pet::type);
|
.def_readwrite("type", &Pet::type)
|
||||||
|
.def_readwrite("attr", &Pet::attr);
|
||||||
|
|
||||||
py::enum_<Pet::Kind>(pet, "Kind")
|
py::enum_<Pet::Kind>(pet, "Kind")
|
||||||
.value("Dog", Pet::Kind::Dog)
|
.value("Dog", Pet::Kind::Dog)
|
||||||
.value("Cat", Pet::Kind::Cat)
|
.value("Cat", Pet::Kind::Cat)
|
||||||
.export_values();
|
.export_values();
|
||||||
|
|
||||||
To ensure that the ``Kind`` type is created within the scope of ``Pet``, the
|
py::class_<Pet::Attributes> attributes(pet, "Attributes")
|
||||||
``pet`` :class:`class_` instance must be supplied to the :class:`enum_`.
|
.def(py::init<>())
|
||||||
|
.def_readwrite("age", &Pet::Attributes::age);
|
||||||
|
|
||||||
|
|
||||||
|
To ensure that the nested types ``Kind`` and ``Attributes`` are created within the scope of ``Pet``, the
|
||||||
|
``pet`` :class:`class_` instance must be supplied to the :class:`enum_` and :class:`class_`
|
||||||
constructor. The :func:`enum_::export_values` function exports the enum entries
|
constructor. The :func:`enum_::export_values` function exports the enum entries
|
||||||
into the parent scope, which should be skipped for newer C++11-style strongly
|
into the parent scope, which should be skipped for newer C++11-style strongly
|
||||||
typed enums.
|
typed enums.
|
||||||
|
@ -340,7 +340,7 @@ standard explicitly with
|
|||||||
|
|
||||||
set(CMAKE_CXX_STANDARD 14 CACHE STRING "C++ version selection") # or 11, 14, 17, 20
|
set(CMAKE_CXX_STANDARD 14 CACHE STRING "C++ version selection") # or 11, 14, 17, 20
|
||||||
set(CMAKE_CXX_STANDARD_REQUIRED ON) # optional, ensure standard is supported
|
set(CMAKE_CXX_STANDARD_REQUIRED ON) # optional, ensure standard is supported
|
||||||
set(CMAKE_CXX_EXTENSIONS OFF) # optional, keep compiler extensionsn off
|
set(CMAKE_CXX_EXTENSIONS OFF) # optional, keep compiler extensions off
|
||||||
|
|
||||||
The variables can also be set when calling CMake from the command line using
|
The variables can also be set when calling CMake from the command line using
|
||||||
the ``-D<variable>=<value>`` flag. You can also manually set ``CXX_STANDARD``
|
the ``-D<variable>=<value>`` flag. You can also manually set ``CXX_STANDARD``
|
||||||
|
@ -82,11 +82,11 @@ if(NOT DEFINED ${_Python}_EXECUTABLE)
|
|||||||
|
|
||||||
endif()
|
endif()
|
||||||
|
|
||||||
if(NOT ${_Python}_EXECUTABLE STREQUAL PYTHON_EXECUTABLE_LAST)
|
if(NOT ${_Python}_EXECUTABLE STREQUAL PYBIND11_PYTHON_EXECUTABLE_LAST)
|
||||||
# Detect changes to the Python version/binary in subsequent CMake runs, and refresh config if needed
|
# Detect changes to the Python version/binary in subsequent CMake runs, and refresh config if needed
|
||||||
unset(PYTHON_IS_DEBUG CACHE)
|
unset(PYTHON_IS_DEBUG CACHE)
|
||||||
unset(PYTHON_MODULE_EXTENSION CACHE)
|
unset(PYTHON_MODULE_EXTENSION CACHE)
|
||||||
set(PYTHON_EXECUTABLE_LAST
|
set(PYBIND11_PYTHON_EXECUTABLE_LAST
|
||||||
"${${_Python}_EXECUTABLE}"
|
"${${_Python}_EXECUTABLE}"
|
||||||
CACHE INTERNAL "Python executable during the last CMake run")
|
CACHE INTERNAL "Python executable during the last CMake run")
|
||||||
endif()
|
endif()
|
||||||
|
Loading…
Reference in New Issue
Block a user