Version 2.8.0
New features:
- Added
py::raise_fromto enable chaining exceptions. #3215 - Allow exception translators to be optionally registered local to a module instead of applying globally across all pybind11 modules. Use
register_local_exception_translator(ExceptionTranslator&& translator)instead ofregister_exception_translator(ExceptionTranslator&& translator)to keep your exception remapping code local to the module. #2650 - Add
make_simple_namespacefunction for instantiating PythonSimpleNamespaceobjects. #2840 pybind11::scoped_interpreterandinitialize_interpreterhave new arguments to allowsys.argvinitialization. #2341- Allow Python builtins to be used as callbacks in CPython. #1413
- Added
viewto view arrays with a different datatype. #987 - Implemented
reshapeon arrays. #984 - Enable defining custom
__new__methods on classes by fixing bug preventing overriding methods if they have non-pybind11 siblings. #3265 - Add
make_value_iterator(), and fixmake_key_iterator()to return references instead of copies. #3293 - Improve the classes generated by
bind_map: #3310- Change
.itemsfrom an iterator to a dictionary view. - Add
.keysand.values(both dictionary views). - Allow
__contains__to take any object.
- Change
pybind11::custom_type_setupwas added, for customizing thePyHeapTypeObjectcorresponding to a class, which may be useful for enabling garbage collection support, among other things. #3287
Changes:
- Set
__file__constant when runningeval_filein an embedded interpreter. #3233 - Python objects and (C++17)
std::optionalnow accepted inpy::sliceconstructor. #1101 - The pybind11 proxy types
str,bytes,bytearray,tuple,listnow consistently support passingssize_tvalues for sizes and indexes. Previously, onlysize_twas accepted in several interfaces. #3219 - Avoid evaluating
PYBIND11_TLS_REPLACE_VALUEarguments more than once. #3290
Fixes:
- Bug fix: enum value's
__int__returning non-int when underlying type is bool or of char type #1334 - Fixes bug in setting error state in Capsule's pointer methods. #3261
- A long-standing memory leak in
py::cpp_function::initializewas fixed. #3229 - Fixes thread safety for some
pybind11::type_casterwhich require lifetime extension, such as forstd::string_view. #3237 - Restore compatibility with gcc 4.8.4 as distributed by ubuntu-trusty, linuxmint-17. #3270
Build system improvements:
- Fix regression in CMake Python package config: improper use of absolute path. #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
- Specified UTF8-encoding in setup.py calls of open(). #3137
- Fix a harmless warning from CMake 3.21 with the classic Python discovery. #3220
- Eigen repo and version can now be specified as cmake options. #3324
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
- Optimize NumPy array construction with additional moves. #3183
- Conversion to
std::stringandstd::string_viewnow avoids making an extra copy of the data on Python >= 3.3. #3257 - Remove const modifier from certain C++ methods on Python collections (
list,set,dict) such as (clear(),append(),insert(), etc...) and annotated them withpy-non-const. - Enable readability
clang-tidy-const-returnand remove useless consts. #3254 #3194 - The clang-tidy
google-explicit-constructoroption was enabled. #3250 - Mark a pytype move constructor as noexcept (perf). #3236
- Enable clang-tidy check to guard against inheritance slicing. #3210
- Legacy warning suppression pragma were removed from eigen.h. On Unix platforms, please use -isystem for Eigen include directories, to suppress compiler warnings originating from Eigen headers. Note that CMake does this by default. No adjustments are needed for Windows. #3198
- Format pybind11 with isort consistent ordering of imports #3195
- The warnings-suppression "pragma clamp" at the top/bottom of pybind11 was removed, clearing the path to refactoring and IWYU cleanup. #3186
- Enable most bugprone checks in clang-tidy and fix the found potential bugs and poor coding styles. #3166
- Add
clang-tidy-readabilityrules to make boolean casts explicit improving code readability. Also enabled other misc and readability clang-tidy checks. #3148 - Move object in
.pop()for list. #3116