diff --git a/.github/labeler.yml b/.github/labeler.yml index e5a8de751..050933934 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -2,7 +2,7 @@ docs: all: - changed-files: - all-globs-to-all-files: - - '!docs/changelog.rst' + - '!docs/changelog.md' - '!docs/upgrade.rst' - base-branch: "^(?!dependabot).*" - base-branch: "^(?!pre-commit-ci).*" diff --git a/.github/labeler_merged.yml b/.github/labeler_merged.yml index cf6c1f293..479530d85 100644 --- a/.github/labeler_merged.yml +++ b/.github/labeler_merged.yml @@ -3,6 +3,6 @@ needs changelog: - all: - changed-files: - - all-globs-to-all-files: "!docs/changelog.rst" + - all-globs-to-all-files: "!docs/changelog.md" - base-branch: "^(?!dependabot).*" - base-branch: "^(?!pre-commit-ci).*" diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index 54b7f5100..34c98633c 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -9,11 +9,7 @@ It is recommended to use conventional commit format, see conventionalcommits.org ## Suggested changelog entry: - + -```rst - -``` - - +* Placeholder. diff --git a/docs/changelog.md b/docs/changelog.md new file mode 100644 index 000000000..365f97f9a --- /dev/null +++ b/docs/changelog.md @@ -0,0 +1,3070 @@ +# Changelog + + + +Starting with version 1.8.0, pybind11 releases use a [semantic +versioning](http://semver.org) policy. + +Changes will be added here periodically from the "Suggested changelog +entry" block in pull request descriptions. + +## 3.0.0 RC 1 + +We may add one more opt-in feature (embedded subinterperters) before the +final release. + +New Features: + +- The `smart-holder` branch has been merged, enabling + `py::class_`, which handles two-way conversion + with `std::unique_ptr` and `std::shared_ptr` (simultaneously), + disowning a Python object being passed to `std::unique_ptr`, + trampoline objects, and `std::enable_shared_from_this`. + [#5542](https://github.com/pybind/pybind11/pull/5542) + +- Changed `PYBIND11_MODULE` macro implementation to perform multi-phase + module initialization (PEP 489) behind the scenes. + [#5574](https://github.com/pybind/pybind11/pull/5574) + +- Support for sub-interpreters (both isolated (with separate GILs) and + legacy (with a global GIL). Add the + `py::multiple_interpreters::per_interpreter_gil()` tag (or, + `py::multiple_interpreters::shared_gil()` for legacy interpreter + support) to `PYBIND11_MODULE` calls (as the third parameter) to + indicate that a module supports running with sub-interpreters. + [#5564](https://github.com/pybind/pybind11/pull/5564) + +- Changed `PYBIND11_EMBEDDED_MODULE` macro implementation to perform + multi-phase module initialization (PEP 489) behind the scenes and to + support `py::mod_gil_not_used()`, + `py::multiple_interpreters::per_interpreter_gil()` and + `py::multiple_interpreters::shared_gil()`. + [#5665](https://github.com/pybind/pybind11/pull/5665) + +- `py::native_enum` was added, for conversions between Python's native + (stdlib) enum types and C++ enums. + [#5555](https://github.com/pybind/pybind11/pull/5555) + + - Add class doc string to `py::native_enum`. + [#5617](https://github.com/pybind/pybind11/pull/5617). + + - Fix signature for functions with a native_enum in the signature. + [#5619](https://github.com/pybind/pybind11/pull/5619) + +- A `py::release_gil_before_calling_cpp_dtor` option (for `py::class_`) + was added to resolve the long-standing issue \#1446. + [#5522](https://github.com/pybind/pybind11/pull/5522) + +- Add `dtype::normalized_num` and `dtype::num_of`. + [#5429](https://github.com/pybind/pybind11/pull/5429) + +- Add support for `array_t` and `array_t`. + [#5427](https://github.com/pybind/pybind11/pull/5427) + +- Added `py::warnings` namespace with `py::warnings::warn` and + `py::warnings::new_warning_type` that provides the interface for + Python warnings. + [#5291](https://github.com/pybind/pybind11/pull/5291) + +- stl.h `list|set|map_caster` were made more user friendly: it is no + longer necessary to explicitly convert Python iterables to `tuple()`, + `set()`, or `map()` in many common situations. + [#4686](https://github.com/pybind/pybind11/pull/4686) + +- The `array_caster` in pybind11/stl.h was enhanced to support value + types that are not default-constructible. + [#5305](https://github.com/pybind/pybind11/pull/5305) + +- `pybind11/conduit/pybind11_platform_abi_id.h` was factored out, to + maximize reusability of `PYBIND11_PLATFORM_ABI_ID` (for other + Python/C++ binding systems). + [#5375](https://github.com/pybind/pybind11/pull/5375) + +- Added support for finding pybind11 using pkgconf distributed on pypi. + [#5552](https://github.com/pybind/pybind11/pull/5552) + +- Support `--extension-suffix` on the pybind11 command. + [#5360](https://github.com/pybind/pybind11/pull/5360) + +- Add semi-public API: `pybind11::detail::is_holder_constructed` and + update example for `pybind11::custom_type_setup` in documentation. + [#5669](https://github.com/pybind/pybind11/pull/5669) + +New Features (typing): + +- Added option for different arg/return type hints to `type_caster`. + Updated `stl/filesystem` to use correct arg/return type hints. Updated + `pybind11::typing` to use correct arg/return type hints for nested + types. [#5450](https://github.com/pybind/pybind11/pull/5450) +- Updated type hint for `py::capsule` to `type.CapsuleType`. + [#5567](https://github.com/pybind/pybind11/pull/5567) +- Adds support for `typing.SupportsInt` and `typing.SupportsFloat`. + Update `Final` to be narrower type hint. Make `std::function` match + `Callable` type. Fix `io_name` bug in `attr_with_type_hint`. + [#5540](https://github.com/pybind/pybind11/pull/5540) +- Rework of arg/return type hints to support `.noconvert()`. + [#5486](https://github.com/pybind/pybind11/pull/5486) +- Add `attr_with_type` for declaring attribute types and `Final`, + `ClassVar` type annotations. + [#5460](https://github.com/pybind/pybind11/pull/5460) +- Allow annotate methods with `py::pos_only` when only have the `self` + argument. Make arguments for auto-generated dunder methods + positional-only. + [#5403](https://github.com/pybind/pybind11/pull/5403) +- Added `py::Args` and `py::KWArgs` to enable custom type hinting of + `*args` and `**kwargs` (see PEP 484). + [#5357](https://github.com/pybind/pybind11/pull/5357) +- Switched to `numpy.typing.NDArray` and `numpy.typing.ArrayLike`. + [#5212](https://github.com/pybind/pybind11/pull/5212) + + + +- Use `numpy.object_` instead of `object`. + [#5571](https://github.com/pybind/pybind11/pull/5571) +- Fix module type hint. + [#5469](https://github.com/pybind/pybind11/pull/5469) +- Fix Buffer type hint. + [#5662](https://github.com/pybind/pybind11/pull/5662) +- Added support for `collections.abc` in type hints and convertible + checks of STL casters and `py::buffer`. + [#5566](https://github.com/pybind/pybind11/pull/5566) + +Removals: + +- Remove support for pybind11 v2 internals versions (4, 5, 6). (The + internals version number has been bumped for pybind11 v3.) + [#5512](https://github.com/pybind/pybind11/pull/5512) \| + [#5530](https://github.com/pybind/pybind11/pull/5530) +- Remove `make_simple_namespace` (added in 2.8.0, deprecated in 2.8.1). + [#5597](https://github.com/pybind/pybind11/pull/5597) +- Legacy-mode option `PYBIND11_NUMPY_1_ONLY` has been removed. + [#5595](https://github.com/pybind/pybind11/pull/5595) +- Add a deprecation warning to `.get_type` (deprecated in pybind11 2.6 + in 2020). [#5596](https://github.com/pybind/pybind11/pull/5596) + +Bug fixes: + +- Set `__file__` on submodules. + [#5584](https://github.com/pybind/pybind11/pull/5584). Except on + embedded modules. + [#5650](https://github.com/pybind/pybind11/pull/5650) +- pybind11-bound functions are now pickleable. + [#5580](https://github.com/pybind/pybind11/pull/5580) +- Fix bug in `attr_with_type_hint` to allow objects to be in + `attr_with_type_hint`. + [#5576](https://github.com/pybind/pybind11/pull/5576) +- A `-Wmaybe-uninitialized` warning suppression was added in + `pybind11/eigen/matrix.h`. + [#5516](https://github.com/pybind/pybind11/pull/5516) +- `PYBIND11_WARNING_POP` was incorrectly defined as + `PYBIND11_PRAGMA(clang diagnostic push)`. + [#5448](https://github.com/pybind/pybind11/pull/5448) +- `PYBIND11_PLATFORM_ABI_ID` (which is used in composing + `PYBIND11_INTERNALS_ID`) was modernized to reflect actual ABI + compatibility more accurately. + [#4953](https://github.com/pybind/pybind11/pull/4953) \| + [#5439](https://github.com/pybind/pybind11/pull/5439) +- Fix buffer protocol implementation. + [#5407](https://github.com/pybind/pybind11/pull/5407) +- Fix iterator increment operator does not skip first item. + [#5400](https://github.com/pybind/pybind11/pull/5400) +- When getting or deleting an element in a container bound by + `bind_map`, print the key in `KeyError` if it does not exist. + [#5397](https://github.com/pybind/pybind11/pull/5397) +- `pybind11::builtin_exception` is now explicitly exported when linked + to libc++. [#5390](https://github.com/pybind/pybind11/pull/5390) +- Allow subclasses of `py::args` and `py::kwargs`. + [#5381](https://github.com/pybind/pybind11/pull/5381) +- Disable false-positive GCC 12 Bound Check warning. + [#5355](https://github.com/pybind/pybind11/pull/5355) +- fix: using `__cpp_nontype_template_args` instead of + `__cpp_nontype_template_parameter_class`. + [#5330](https://github.com/pybind/pybind11/pull/5330) +- Properly translate C++ exception to Python exception when creating + Python buffer from wrapped object. + [#5324](https://github.com/pybind/pybind11/pull/5324) +- Update the dict when restoring pickles, instead of assigning a + replacement dict. + [#5658](https://github.com/pybind/pybind11/pull/5658) +- Properly define `_DEBUG` macro to `1` instead of defining it without + value. [#5639](https://github.com/pybind/pybind11/pull/5639) +- Fix a missing time cast causing a compile error for newer ICC. + [#5621](https://github.com/pybind/pybind11/pull/5621) +- Change the behavior of the default constructor of `py::slice` to be + equivalent to `::` in Python. + [#5620](https://github.com/pybind/pybind11/pull/5620) + +Bug fixes (CMake): + +- (CMake) Enable FindPython mode by default, with a `COMPAT` mode that + sets some of the old variables to ease transition. + [#5553](https://github.com/pybind/pybind11/pull/5553) +- Add an author warning that auto-calculated `PYTHON_MODULE_EXTENSION` + may not respect `SETUPTOOLS_EXT_SUFFIX` during cross-compilation. + [#5495](https://github.com/pybind/pybind11/pull/5495) +- Don't strip with `CMAKE_BUILD_TYPE` None. + [#5392](https://github.com/pybind/pybind11/pull/5392) +- Fix an issue with `NO_EXTRAS` adding `pybind11::windows_extras` + anyway. [#5378](https://github.com/pybind/pybind11/pull/5378) +- Fix issue with NEW/OLD message showing up. + [#5656](https://github.com/pybind/pybind11/pull/5656) +- Use CMake's warnings as errors if available (CMake 3.24+). + [#5612](https://github.com/pybind/pybind11/pull/5612) +- Add support for running pybind11's tests via presets in CMake 3.25+. + [#5655](https://github.com/pybind/pybind11/pull/5655) +- Restructure venv support to support `--fresh`, make in build folder. + [#5668](https://github.com/pybind/pybind11/pull/5668) + +Bug fixes (free-threading): + +- Fix data race in free threaded CPython when accessing a shared static + variable. [#5494](https://github.com/pybind/pybind11/pull/5494) +- A free-threading data race in `all_type_info()` was fixed. + [#5419](https://github.com/pybind/pybind11/pull/5419) +- Added exception translator specific mutex used with + `try_translate_exceptions` in the free-threaded build for internal + locking. [#5362](https://github.com/pybind/pybind11/pull/5362) + +Internals: + +- Consolidated all `PYBIND11_HAS_...` feature macros into + `pybind11/detail/common.h` to streamline backward compatibility checks and + simplify internal refactoring. This change ensures consistent macro + availability regardless of header inclusion order. + [#5647](https://github.com/pybind/pybind11/pull/5647) + +- `pybind11/gil_simple.h` was factored out from `pybind11/gil.h`, so + that it can easily be reused. + [#5614](https://github.com/pybind/pybind11/pull/5614) + +Documentation: + +- Improved `reference_internal` policy documentation. + [#5528](https://github.com/pybind/pybind11/pull/5528) +- A new "Double locking, deadlocking, GIL" document was added. + [#5394](https://github.com/pybind/pybind11/pull/5394) +- Adds an answer (FAQ) for "What is a highly conclusive and simple way + to find memory leaks?". + [#5340](https://github.com/pybind/pybind11/pull/5340) +- Add documenting for free-threading and subinterpreters. + [#5659](https://github.com/pybind/pybind11/pull/5659) + +Tests: + +- Download the final Catch2 2.x release if Catch download is requested. + [#5568](https://github.com/pybind/pybind11/pull/5568) + +- Explicitly used `signed char` for two numpy dtype tests. As seen when + compiling using `clang` on Linux with the `-funsigned-char` flag. + [#5545](https://github.com/pybind/pybind11/pull/5545) + +- Test PyPy3.11 in CI. + [#5534](https://github.com/pybind/pybind11/pull/5534) +- CI testing now includes + `-Wwrite-strings -Wunreachable-code -Wpointer-arith -Wredundant-decls` + in some jobs. [#5523](https://github.com/pybind/pybind11/pull/5523) + +New and removed platforms: + +- Support Python 3.14 (beta 1). + [#5646](https://github.com/pybind/pybind11/pull/5646) +- Added support for GraalPy Python implementation + (). + [#5380](https://github.com/pybind/pybind11/pull/5380) +- Support for PyPy 3.11 added. + [#5508](https://github.com/pybind/pybind11/pull/5508) +- Support for PyPy 3.8 and 3.9 was dropped. + [#5578](https://github.com/pybind/pybind11/pull/5578) +- Support for Python 3.7 was removed. (Official end-of-life: + 2023-06-27). [#5191](https://github.com/pybind/pybind11/pull/5191) +- Support for CMake older than 3.15 removed. CMake 3.15-4.0 supported. + [#5304](https://github.com/pybind/pybind11/pull/5304) +- Use scikit-build-core for the build backend for the PyPI `pybind11`. + The CMake generation has been moved to the sdist-\>wheel step. + `PYBIND11_GLOBAL_PREFIX` has been removed. + [#5598](https://github.com/pybind/pybind11/pull/5598) + +## Version 2.13.6 (September 13, 2024) + +New Features: + +- A new `self._pybind11_conduit_v1_()` method is automatically added to + all `py::class_`-wrapped types, to enable type-safe interoperability + between different independent Python/C++ bindings systems, including + pybind11 versions with different `PYBIND11_INTERNALS_VERSION`'s. + Supported on pybind11 2.11.2, 2.12.1, and 2.13.6+. + [#5296](https://github.com/pybind/pybind11/pull/5296) + +Bug fixes: + +- Using `__cpp_nontype_template_args` instead of + `__cpp_nontype_template_parameter_class`. + [#5330](https://github.com/pybind/pybind11/pull/5330) +- Properly translate C++ exception to Python exception when creating + Python buffer from wrapped object. + [#5324](https://github.com/pybind/pybind11/pull/5324) + +Documentation: + +- Adds an answer (FAQ) for "What is a highly conclusive and simple way + to find memory leaks?". + [#5340](https://github.com/pybind/pybind11/pull/5340) + +## Version 2.13.5 (August 22, 2024) + +Bug fixes: + +- Fix includes when using Windows long paths (`\\?\` prefix). + [#5321](https://github.com/pybind/pybind11/pull/5321) +- Support `-Wpedantic` in C++20 mode. + [#5322](https://github.com/pybind/pybind11/pull/5322) +- Fix and test `` support for `py::tuple` and `py::list`. + [#5314](https://github.com/pybind/pybind11/pull/5314) + +## Version 2.13.4 (August 14, 2024) + +Bug fixes: + +- Fix paths with spaces, including on Windows. (Replaces regression from + [#5302](https://github.com/pybind/pybind11/pull/5302)) + [#4874](https://github.com/pybind/pybind11/pull/4874) + +Documentation: + +- Remove repetitive words. + [#5308](https://github.com/pybind/pybind11/pull/5308) + +## Version 2.13.3 (August 13, 2024) + +Bug fixes: + +- Quote paths from pybind11-config + [#5302](https://github.com/pybind/pybind11/pull/5302) +- Fix typo in Emscripten support when in config mode (CMake) + [#5301](https://github.com/pybind/pybind11/pull/5301) + +## Version 2.13.2 (August 13, 2024) + +New Features: + +- A `pybind11::detail::type_caster_std_function_specializations` feature + was added, to support specializations for `std::function`'s with + return types that require custom to-Python conversion behavior (to + primary use case is to catch and convert exceptions). + [#4597](https://github.com/pybind/pybind11/pull/4597) + +Changes: + +- Use `PyMutex` instead of `std::mutex` for internal locking in the + free-threaded build. + [#5219](https://github.com/pybind/pybind11/pull/5219) +- Add a special type annotation for C++ empty tuple. + [#5214](https://github.com/pybind/pybind11/pull/5214) +- When compiling for WebAssembly, add the required exception flags + (CMake 3.13+). [#5298](https://github.com/pybind/pybind11/pull/5298) + +Bug fixes: + +- Make `gil_safe_call_once_and_store` thread-safe in free-threaded + CPython. [#5246](https://github.com/pybind/pybind11/pull/5246) +- A missing `#include ` in pybind11/typing.h was added to fix + build errors (in case user code does not already depend on that + include). [#5208](https://github.com/pybind/pybind11/pull/5208) +- Fix regression introduced in \#5201 for GCC\<10.3 in C++20 mode. + [#5205](https://github.com/pybind/pybind11/pull/5205) + + + +- Remove extra = when assigning flto value in the case for Clang in + CMake. [#5207](https://github.com/pybind/pybind11/pull/5207) + +Tests: + +- Adding WASM testing to our CI (Pyodide / Emscripten via + scikit-build-core). + [#4745](https://github.com/pybind/pybind11/pull/4745) +- clang-tidy (in GitHub Actions) was updated from clang 15 to clang 18. + [#5272](https://github.com/pybind/pybind11/pull/5272) + +## Version 2.13.1 (June 26, 2024) + +New Features: + +- Add support for `Typing.Callable[..., T]`. + [#5202](https://github.com/pybind/pybind11/pull/5202) + +Bug fixes: + +- Avoid aligned allocation in free-threaded build in order to support + macOS versions before 10.14. + [#5200](https://github.com/pybind/pybind11/pull/5200) + +## Version 2.13.0 (June 25, 2024) + +New Features: + +- Support free-threaded CPython (3.13t). Add `py::mod_gil_not_used()` + tag to indicate if a module supports running with the GIL disabled. + [#5148](https://github.com/pybind/pybind11/pull/5148) +- Support for Python 3.6 was removed. (Official end-of-life: + 2021-12-23). [#5177](https://github.com/pybind/pybind11/pull/5177) +- `py::list` gained a `.clear()` method. + [#5153](https://github.com/pybind/pybind11/pull/5153) + + + +- Support for `Union`, `Optional`, `type[T]`, `typing.TypeGuard`, + `typing.TypeIs`, `typing.Never`, `typing.NoReturn` and + `typing.Literal` was added to `pybind11/typing.h`. + [#5166](https://github.com/pybind/pybind11/pull/5166) + [#5165](https://github.com/pybind/pybind11/pull/5165) + [#5194](https://github.com/pybind/pybind11/pull/5194) + [#5193](https://github.com/pybind/pybind11/pull/5193) + [#5192](https://github.com/pybind/pybind11/pull/5192) + + + +- In CMake, if `PYBIND11_USE_CROSSCOMPILING` is enabled, then + `CMAKE_CROSSCOMPILING` will be respected and will keep pybind11 from + accessing the interpreter during configuration. Several CMake + variables will be required in this case, but can be deduced from the + environment variable `SETUPTOOLS_EXT_SUFFIX`. The default (currently + `OFF`) may be changed in the future. + [#5083](https://github.com/pybind/pybind11/pull/5083) + +Bug fixes: + +- A refcount bug (leading to heap-use-after-free) involving trampoline + functions with `PyObject *` return type was fixed. + [#5156](https://github.com/pybind/pybind11/pull/5156) +- Return `py::ssize_t` from `.ref_count()` instead of `int`. + [#5139](https://github.com/pybind/pybind11/pull/5139) +- A subtle bug involving C++ types with unusual `operator&` overrides + was fixed. [#5189](https://github.com/pybind/pybind11/pull/5189) +- Support Python 3.13 with minor fix, add to CI. + [#5127](https://github.com/pybind/pybind11/pull/5127) + + + +- Fix mistake affecting old cmake and old boost. + [#5149](https://github.com/pybind/pybind11/pull/5149) + +Documentation: + +- Build docs updated to feature scikit-build-core and meson-python, and + updated setuptools instructions. + [#5168](https://github.com/pybind/pybind11/pull/5168) + +Tests: + +- Avoid immortal objects in tests. + [#5150](https://github.com/pybind/pybind11/pull/5150) + +CI: + +- Compile against Python 3.13t in CI. +- Use `macos-13` (Intel) for CI jobs for now (will drop Python 3.7 + soon). [#5109](https://github.com/pybind/pybind11/pull/5109) +- Releases now have artifact attestations, visible at + . + [#5196](https://github.com/pybind/pybind11/pull/5196) + +Other: + +- Some cleanup in preparation for 3.13 support. + [#5137](https://github.com/pybind/pybind11/pull/5137) +- Avoid a warning by ensuring an iterator end check is included in + release mode. [#5129](https://github.com/pybind/pybind11/pull/5129) +- Bump max cmake to 3.29. + [#5075](https://github.com/pybind/pybind11/pull/5075) +- Update docs and noxfile. + [#5071](https://github.com/pybind/pybind11/pull/5071) + +## Version 2.12.1 (September 13, 2024) + +New Features: + +- A new `self._pybind11_conduit_v1_()` method is automatically added to + all `py::class_`-wrapped types, to enable type-safe interoperability + between different independent Python/C++ bindings systems, including + pybind11 versions with different `PYBIND11_INTERNALS_VERSION`'s. + Supported on pybind11 2.11.2, 2.12.1, and 2.13.6+. + [#5296](https://github.com/pybind/pybind11/pull/5296) + +## Version 2.12.0 (March 27, 2024) + +New Features: + +- `pybind11` now supports compiling for [NumPy + 2](https://numpy.org/devdocs/numpy_2_0_migration_guide.html). Most + code shouldn't change (see `upgrade-guide-2.12` for details). However, + if you experience issues you can define `PYBIND11_NUMPY_1_ONLY` to + disable the new support for now, but this will be removed in the + future. [#5050](https://github.com/pybind/pybind11/pull/5050) +- `pybind11/gil_safe_call_once.h` was added (it needs to be included + explicitly). The primary use case is GIL-safe initialization of C++ + `static` variables. + [#4877](https://github.com/pybind/pybind11/pull/4877) +- Support move-only iterators in `py::make_iterator`, + `py::make_key_iterator`, `py::make_value_iterator`. + [#4834](https://github.com/pybind/pybind11/pull/4834) +- Two simple `py::set_error()` functions were added and the + documentation was updated accordingly. In particular, + `py::exception<>::operator()` was deprecated (use one of the new + functions instead). The documentation for `py::exception<>` was + further updated to not suggest code that may result in undefined + behavior. [#4772](https://github.com/pybind/pybind11/pull/4772) + +Bug fixes: + +- Removes potential for Undefined Behavior during process teardown. + [#4897](https://github.com/pybind/pybind11/pull/4897) +- Improve compatibility with the nvcc compiler (especially CUDA + 12.1/12.2). [#4893](https://github.com/pybind/pybind11/pull/4893) +- `pybind11/numpy.h` now imports NumPy's `multiarray` and `_internal` + submodules with paths depending on the installed version of NumPy (for + compatibility with NumPy 2). + [#4857](https://github.com/pybind/pybind11/pull/4857) +- Builtins collections names in docstrings are now consistently rendered + in lowercase (list, set, dict, tuple), in accordance with PEP 585. + [#4833](https://github.com/pybind/pybind11/pull/4833) +- Added `py::typing::Iterator`, `py::typing::Iterable`. + [#4832](https://github.com/pybind/pybind11/pull/4832) +- Render `py::function` as `Callable` in docstring. + [#4829](https://github.com/pybind/pybind11/pull/4829) +- Also bump `PYBIND11_INTERNALS_VERSION` for MSVC, which unlocks two new + features without creating additional incompatibilities. + [#4819](https://github.com/pybind/pybind11/pull/4819) +- Guard against crashes/corruptions caused by modules built with + different MSVC versions. + [#4779](https://github.com/pybind/pybind11/pull/4779) +- A long-standing bug in the handling of Python multiple inheritance was + fixed. See PR \#4762 for the rather complex details. + [#4762](https://github.com/pybind/pybind11/pull/4762) +- Fix `bind_map` with `using` declarations. + [#4952](https://github.com/pybind/pybind11/pull/4952) +- Qualify `py::detail::concat` usage to avoid ADL selecting one from + somewhere else, such as modernjson's concat. + [#4955](https://github.com/pybind/pybind11/pull/4955) +- Use new PyCode API on Python 3.12+. + [#4916](https://github.com/pybind/pybind11/pull/4916) +- Minor cleanup from warnings reported by Clazy. + [#4988](https://github.com/pybind/pybind11/pull/4988) +- Remove typing and duplicate `class_` for + `KeysView`/`ValuesView`/`ItemsView`. + [#4985](https://github.com/pybind/pybind11/pull/4985) +- Use `PyObject_VisitManagedDict()` and `PyObject_ClearManagedDict()` on + Python 3.13 and newer. + [#4973](https://github.com/pybind/pybind11/pull/4973) +- Update `make_static_property_type()` to make it compatible with Python + 3.13. [#4971](https://github.com/pybind/pybind11/pull/4971) + + + +- Render typed iterators for `make_iterator`, `make_key_iterator`, + `make_value_iterator`. + [#4876](https://github.com/pybind/pybind11/pull/4876) +- Add several missing type name specializations. + [#5073](https://github.com/pybind/pybind11/pull/5073) +- Change docstring render for `py::buffer`, `py::sequence` and + `py::handle` (to `Buffer`, `Sequence`, `Any`). + [#4831](https://github.com/pybind/pybind11/pull/4831) +- Fixed `base_enum.__str__` docstring. + [#4827](https://github.com/pybind/pybind11/pull/4827) +- Enforce single line docstring signatures. + [#4735](https://github.com/pybind/pybind11/pull/4735) +- Special 'typed' wrappers now available in `typing.h` to annotate + tuple, dict, list, set, and function. + [#4259](https://github.com/pybind/pybind11/pull/4259) +- Create `handle_type_name` specialization to type-hint variable length + tuples. [#5051](https://github.com/pybind/pybind11/pull/5051) + + + +- Setting `PYBIND11_FINDPYTHON` to OFF will force the old FindPythonLibs + mechanism to be used. + [#5042](https://github.com/pybind/pybind11/pull/5042) +- Skip empty `PYBIND11_PYTHON_EXECUTABLE_LAST` for the first cmake run. + [#4856](https://github.com/pybind/pybind11/pull/4856) +- Fix FindPython mode exports & avoid `pkg_resources` if + `importlib.metadata` available. + [#4941](https://github.com/pybind/pybind11/pull/4941) +- `Python_ADDITIONAL_VERSIONS` (classic search) now includes 3.12. + [#4909](https://github.com/pybind/pybind11/pull/4909) +- `pybind11.pc` is now relocatable by default as long as install + destinations are not absolute paths. + [#4830](https://github.com/pybind/pybind11/pull/4830) +- Correctly detect CMake FindPython removal when used as a subdirectory. + [#4806](https://github.com/pybind/pybind11/pull/4806) +- Don't require the libs component on CMake 3.18+ when using + PYBIND11_FINDPYTHON (fixes manylinux builds). + [#4805](https://github.com/pybind/pybind11/pull/4805) +- `pybind11_strip` is no longer automatically applied when + `CMAKE_BUILD_TYPE` is unset. + [#4780](https://github.com/pybind/pybind11/pull/4780) +- Support `DEBUG_POSFIX` correctly for debug builds. + [#4761](https://github.com/pybind/pybind11/pull/4761) +- Hardcode lto/thin lto for Emscripten cross-compiles. + [#4642](https://github.com/pybind/pybind11/pull/4642) +- Upgrade maximum supported CMake version to 3.27 to fix CMP0148 + warnings. [#4786](https://github.com/pybind/pybind11/pull/4786) + +Documentation: + +- Small fix to grammar in `functions.rst`. + [#4791](https://github.com/pybind/pybind11/pull/4791) +- Remove upper bound in example pyproject.toml for setuptools. + [#4774](https://github.com/pybind/pybind11/pull/4774) + +CI: + +- CI: Update NVHPC to 23.5 and Ubuntu 20.04. + [#4764](https://github.com/pybind/pybind11/pull/4764) +- Test on PyPy 3.10. + [#4714](https://github.com/pybind/pybind11/pull/4714) + +Other: + +- Use Ruff formatter instead of Black. + [#4912](https://github.com/pybind/pybind11/pull/4912) +- An `assert()` was added to help Coverty avoid generating a false + positive. [#4817](https://github.com/pybind/pybind11/pull/4817) + +## Version 2.11.2 (September 13, 2024) + +New Features: + +- A new `self._pybind11_conduit_v1_()` method is automatically added to + all `py::class_`-wrapped types, to enable type-safe interoperability + between different independent Python/C++ bindings systems, including + pybind11 versions with different `PYBIND11_INTERNALS_VERSION`'s. + Supported on pybind11 2.11.2, 2.12.1, and 2.13.6+. + [#5296](https://github.com/pybind/pybind11/pull/5296) + +## Version 2.11.1 (July 17, 2023) + +Changes: + +- `PYBIND11_NO_ASSERT_GIL_HELD_INCREF_DECREF` is now provided as an + option for disabling the default-on `PyGILState_Check()`'s in + `pybind11::handle`'s `inc_ref()` & `dec_ref()`. + [#4753](https://github.com/pybind/pybind11/pull/4753) +- `PYBIND11_ASSERT_GIL_HELD_INCREF_DECREF` was disabled for PyPy in + general (not just PyPy Windows). + [#4751](https://github.com/pybind/pybind11/pull/4751) + +## Version 2.11.0 (July 14, 2023) + +New features: + +- The newly added `pybind11::detail::is_move_constructible` trait can be + specialized for cases in which `std::is_move_constructible` does not + work as needed. This is very similar to the long-established + `pybind11::detail::is_copy_constructible`. + [#4631](https://github.com/pybind/pybind11/pull/4631) +- Introduce `recursive_container_traits`. + [#4623](https://github.com/pybind/pybind11/pull/4623) +- `pybind11/type_caster_pyobject_ptr.h` was added to support automatic + wrapping of APIs that make use of `PyObject *`. This header needs to + included explicitly (i.e. it is not included implicitly with + `pybind/pybind11.h`). + [#4601](https://github.com/pybind/pybind11/pull/4601) +- `format_descriptor<>` & `npy_format_descriptor<>` `PyObject *` + specializations were added. The latter enables + `py::array_t` to/from-python conversions. + [#4674](https://github.com/pybind/pybind11/pull/4674) +- `buffer_info` gained an `item_type_is_equivalent_to()` member + function. [#4674](https://github.com/pybind/pybind11/pull/4674) +- The `capsule` API gained a user-friendly constructor + (`py::capsule(ptr, "name", dtor)`). + [#4720](https://github.com/pybind/pybind11/pull/4720) + +Changes: + +- `PyGILState_Check()`'s in `pybind11::handle`'s `inc_ref()` & + `dec_ref()` are now enabled by default again. + [#4246](https://github.com/pybind/pybind11/pull/4246) +- `py::initialize_interpreter()` using `PyConfig_InitPythonConfig()` + instead of `PyConfig_InitIsolatedConfig()`, to obtain complete + `sys.path`. [#4473](https://github.com/pybind/pybind11/pull/4473) +- Cast errors now always include Python type information, even if + `PYBIND11_DETAILED_ERROR_MESSAGES` is not defined. This increases + binary sizes slightly (~1.5%) but the error messages are much more + informative. [#4463](https://github.com/pybind/pybind11/pull/4463) +- The docstring generation for the `std::array`-list caster was fixed. + Previously, signatures included the size of the list in a + non-standard, non-spec compliant way. The new format conforms to + PEP 593. **Tooling for processing the docstrings may need to be + updated accordingly.** + [#4679](https://github.com/pybind/pybind11/pull/4679) +- Setter return values (which are inaccessible for all practical + purposes) are no longer converted to Python (only to be discarded). + [#4621](https://github.com/pybind/pybind11/pull/4621) +- Allow lambda specified to function definition to be `noexcept(true)` + in C++17. [#4593](https://github.com/pybind/pybind11/pull/4593) +- Get rid of recursive template instantiations for concatenating type + signatures on C++17 and higher. + [#4587](https://github.com/pybind/pybind11/pull/4587) +- Compatibility with Python 3.12 (beta). Note that the minimum pybind11 + ABI version for Python 3.12 is version 5. (The default ABI version for + Python versions up to and including 3.11 is still version 4.). + [#4570](https://github.com/pybind/pybind11/pull/4570) +- With `PYBIND11_INTERNALS_VERSION 5` (default for Python 3.12+), MSVC + builds use `std::hash` and + `std::equal_to` instead of string-based type + comparisons. This resolves issues when binding types defined in the + unnamed namespace. + [#4319](https://github.com/pybind/pybind11/pull/4319) +- Python exception `__notes__` (introduced with Python 3.11) are now + added to the `error_already_set::what()` output. + [#4678](https://github.com/pybind/pybind11/pull/4678) + +Build system improvements: + +- CMake 3.27 support was added, CMake 3.4 support was dropped. + FindPython will be used if `FindPythonInterp` is not present. + [#4719](https://github.com/pybind/pybind11/pull/4719) +- Update clang-tidy to 15 in CI. + [#4387](https://github.com/pybind/pybind11/pull/4387) +- Moved the linting framework over to Ruff. + [#4483](https://github.com/pybind/pybind11/pull/4483) +- Skip `lto` checks and target generation when + `CMAKE_INTERPROCEDURAL_OPTIMIZATION` is defined. + [#4643](https://github.com/pybind/pybind11/pull/4643) +- No longer inject `-stdlib=libc++`, not needed for modern Pythons + (macOS 10.9+). [#4639](https://github.com/pybind/pybind11/pull/4639) +- PyPy 3.10 support was added, PyPy 3.7 support was dropped. + [#4728](https://github.com/pybind/pybind11/pull/4728) +- Testing with Python 3.12 beta releases was added. + [#4713](https://github.com/pybind/pybind11/pull/4713) + +## Version 2.10.4 (Mar 16, 2023) + +Changes: + +- `python3 -m pybind11` gained a `--version` option (prints the version + and exits). [#4526](https://github.com/pybind/pybind11/pull/4526) + +Bug Fixes: + +- Fix a warning when pydebug is enabled on Python 3.11. + [#4461](https://github.com/pybind/pybind11/pull/4461) +- Ensure `gil_scoped_release` RAII is non-copyable. + [#4490](https://github.com/pybind/pybind11/pull/4490) +- Ensure the tests dir does not show up with new versions of setuptools. + [#4510](https://github.com/pybind/pybind11/pull/4510) +- Better stacklevel for a warning in setuptools helpers. + [#4516](https://github.com/pybind/pybind11/pull/4516) + +## Version 2.10.3 (Jan 3, 2023) + +Changes: + +- Temporarily made our GIL status assertions (added in 2.10.2) disabled + by default (re-enable manually by defining + `PYBIND11_ASSERT_GIL_HELD_INCREF_DECREF`, will be enabled in 2.11). + [#4432](https://github.com/pybind/pybind11/pull/4432) +- Improved error messages when `inc_ref`/`dec_ref` are called with an + invalid GIL state. + [#4427](https://github.com/pybind/pybind11/pull/4427) + [#4436](https://github.com/pybind/pybind11/pull/4436) + +Bug Fixes: + +- Some minor touchups found by static analyzers. + [#4440](https://github.com/pybind/pybind11/pull/4440) + +## Version 2.10.2 (Dec 20, 2022) + +Changes: + +- `scoped_interpreter` constructor taking `PyConfig`. + [#4330](https://github.com/pybind/pybind11/pull/4330) +- `pybind11/eigen/tensor.h` adds converters to and from `Eigen::Tensor` + and `Eigen::TensorMap`. + [#4201](https://github.com/pybind/pybind11/pull/4201) +- `PyGILState_Check()`'s were integrated to `pybind11::handle` + `inc_ref()` & `dec_ref()`. The added GIL checks are guarded by + `PYBIND11_ASSERT_GIL_HELD_INCREF_DECREF`, which is the default only if + `NDEBUG` is not defined. (Made non-default in 2.10.3, will be active + in 2.11) [#4246](https://github.com/pybind/pybind11/pull/4246) +- Add option for enable/disable enum members in docstring. + [#2768](https://github.com/pybind/pybind11/pull/2768) +- Fixed typing of `KeysView`, `ValuesView` and `ItemsView` in + `bind_map`. [#4353](https://github.com/pybind/pybind11/pull/4353) + +Bug fixes: + +- Bug fix affecting only Python 3.6 under very specific, uncommon + conditions: move `PyEval_InitThreads()` call to the correct location. + [#4350](https://github.com/pybind/pybind11/pull/4350) +- Fix segfault bug when passing foreign native functions to + functional.h. [#4254](https://github.com/pybind/pybind11/pull/4254) + +Build system improvements: + +- Support setting PYTHON_LIBRARIES manually for Windows ARM + cross-compilation (classic mode). + [#4406](https://github.com/pybind/pybind11/pull/4406) +- Extend IPO/LTO detection for ICX (a.k.a IntelLLVM) compiler. + [#4402](https://github.com/pybind/pybind11/pull/4402) +- Allow calling `find_package(pybind11 CONFIG)` multiple times from + separate directories in the same CMake project and properly link + Python (new mode). + [#4401](https://github.com/pybind/pybind11/pull/4401) +- `multiprocessing_set_spawn` in pytest fixture for added safety. + [#4377](https://github.com/pybind/pybind11/pull/4377) +- Fixed a bug in two pybind11/tools cmake scripts causing "Unknown + arguments specified" errors. + [#4327](https://github.com/pybind/pybind11/pull/4327) + +## Version 2.10.1 (Oct 31, 2022) + +This is the first version to fully support embedding the newly released +Python 3.11. + +Changes: + +- Allow `pybind11::capsule` constructor to take null destructor + pointers. [#4221](https://github.com/pybind/pybind11/pull/4221) +- `embed.h` was changed so that `PYTHONPATH` is used also with Python + 3.11 (established behavior). + [#4119](https://github.com/pybind/pybind11/pull/4119) +- A `PYBIND11_SIMPLE_GIL_MANAGEMENT` option was added (cmake, C++ + define), along with many additional tests in `test_gil_scoped.py`. The + option may be useful to try when debugging GIL-related issues, to + determine if the more complex default implementation is or is not to + blame. See \#4216 for background. WARNING: Please be careful to not + create ODR violations when using the option: everything that is linked + together with mutual symbol visibility needs to be rebuilt. + [#4216](https://github.com/pybind/pybind11/pull/4216) +- `PYBIND11_EXPORT_EXCEPTION` was made non-empty only under macOS. This + makes Linux builds safer, and enables the removal of warning + suppression pragmas for Windows. + [#4298](https://github.com/pybind/pybind11/pull/4298) + +Bug fixes: + +- Fixed a bug where `UnicodeDecodeError` was not propagated from various + `py::str` ctors when decoding surrogate utf characters. + [#4294](https://github.com/pybind/pybind11/pull/4294) +- Revert perfect forwarding for `make_iterator`. This broke at least one + valid use case. May revisit later. + [#4234](https://github.com/pybind/pybind11/pull/4234) +- Fix support for safe casts to `void*` (regression in 2.10.0). + [#4275](https://github.com/pybind/pybind11/pull/4275) +- Fix `char8_t` support (regression in 2.9). + [#4278](https://github.com/pybind/pybind11/pull/4278) +- Unicode surrogate character in Python exception message leads to + process termination in `error_already_set::what()`. + [#4297](https://github.com/pybind/pybind11/pull/4297) +- Fix MSVC 2019 v.1924 & C++14 mode error for `overload_cast`. + [#4188](https://github.com/pybind/pybind11/pull/4188) +- Make augmented assignment operators non-const for the object-api. + Behavior was previously broken for augmented assignment operators. + [#4065](https://github.com/pybind/pybind11/pull/4065) +- Add proper error checking to C++ bindings for Python list append and + insert. [#4208](https://github.com/pybind/pybind11/pull/4208) +- Work-around for Nvidia's CUDA nvcc compiler in versions 11.4.0 - + 11.8.0. [#4220](https://github.com/pybind/pybind11/pull/4220) +- A workaround for PyPy was added in the `py::error_already_set` + implementation, related to PR + [#1895](https://github.com/pybind/pybind11/pull/1895) released with + v2.10.0. [#4079](https://github.com/pybind/pybind11/pull/4079) +- Fixed compiler errors when C++23 `std::forward_like` is available. + [#4136](https://github.com/pybind/pybind11/pull/4136) +- Properly raise exceptions in contains methods (like when an object in + unhashable). [#4209](https://github.com/pybind/pybind11/pull/4209) +- Further improve another error in exception handling. + [#4232](https://github.com/pybind/pybind11/pull/4232) +- `get_local_internals()` was made compatible with + `finalize_interpreter()`, fixing potential freezes during interpreter + finalization. [#4192](https://github.com/pybind/pybind11/pull/4192) + +Performance and style: + +- Reserve space in set and STL map casters if possible. This will + prevent unnecessary rehashing / resizing by knowing the number of keys + ahead of time for Python to C++ casting. This improvement will greatly + speed up the casting of large unordered maps and sets. + [#4194](https://github.com/pybind/pybind11/pull/4194) +- GIL RAII scopes are non-copyable to avoid potential bugs. + [#4183](https://github.com/pybind/pybind11/pull/4183) +- Explicitly default all relevant ctors for pytypes in the + `PYBIND11_OBJECT` macros and enforce the clang-tidy checks + `modernize-use-equals-default` in macros as well. + [#4017](https://github.com/pybind/pybind11/pull/4017) +- Optimize iterator advancement in C++ bindings. + [#4237](https://github.com/pybind/pybind11/pull/4237) +- Use the modern `PyObject_GenericGetDict` and `PyObject_GenericSetDict` + for handling dynamic attribute dictionaries. + [#4106](https://github.com/pybind/pybind11/pull/4106) +- Document that users should use `PYBIND11_NAMESPACE` instead of using + `pybind11` when opening namespaces. Using namespace declarations and + namespace qualification remain the same as `pybind11`. This is done to + ensure consistent symbol visibility. + [#4098](https://github.com/pybind/pybind11/pull/4098) +- Mark `detail::forward_like` as constexpr. + [#4147](https://github.com/pybind/pybind11/pull/4147) +- Optimize unpacking_collector when processing `arg_v` arguments. + [#4219](https://github.com/pybind/pybind11/pull/4219) +- Optimize casting C++ object to `None`. + [#4269](https://github.com/pybind/pybind11/pull/4269) + +Build system improvements: + +- CMake: revert overwrite behavior, now opt-in with + `PYBIND11_PYTHONLIBS_OVERRWRITE OFF`. + [#4195](https://github.com/pybind/pybind11/pull/4195) +- Include a pkg-config file when installing pybind11, such as in the + Python package. [#4077](https://github.com/pybind/pybind11/pull/4077) +- Avoid stripping debug symbols when `CMAKE_BUILD_TYPE` is set to + `DEBUG` instead of `Debug`. + [#4078](https://github.com/pybind/pybind11/pull/4078) +- Followup to [#3948](https://github.com/pybind/pybind11/pull/3948), + fixing vcpkg again. + [#4123](https://github.com/pybind/pybind11/pull/4123) + +## Version 2.10.0 (Jul 15, 2022) + +Removed support for Python 2.7, Python 3.5, and MSVC 2015. Support for +MSVC 2017 is limited due to availability of CI runners; we highly +recommend MSVC 2019 or 2022 be used. Initial support added for Python +3.11. + +New features: + +- `py::anyset` & `py::frozenset` were added, with copying (cast) to + `std::set` (similar to `set`). + [#3901](https://github.com/pybind/pybind11/pull/3901) +- Support bytearray casting to string. + [#3707](https://github.com/pybind/pybind11/pull/3707) +- `type_caster` was added. `std::monostate` is a tag + type that allows `std::variant` to act as an optional, or allows + default construction of a `std::variant` holding a non-default + constructible type. + [#3818](https://github.com/pybind/pybind11/pull/3818) +- `pybind11::capsule::set_name` added to mutate the name of the capsule + instance. [#3866](https://github.com/pybind/pybind11/pull/3866) +- NumPy: dtype constructor from type number added, accessors + corresponding to Python API `dtype.num`, `dtype.byteorder`, + `dtype.flags` and `dtype.alignment` added. + [#3868](https://github.com/pybind/pybind11/pull/3868) + +Changes: + +- Python 3.6 is now the minimum supported version. + [#3688](https://github.com/pybind/pybind11/pull/3688) + [#3719](https://github.com/pybind/pybind11/pull/3719) +- The minimum version for MSVC is now 2017. + [#3722](https://github.com/pybind/pybind11/pull/3722) +- Fix issues with CPython 3.11 betas and add to supported test matrix. + [#3923](https://github.com/pybind/pybind11/pull/3923) +- `error_already_set` is now safer and more performant, especially for + exceptions with long tracebacks, by delaying computation. + [#1895](https://github.com/pybind/pybind11/pull/1895) +- Improve exception handling in python `str` bindings. + [#3826](https://github.com/pybind/pybind11/pull/3826) +- The bindings for capsules now have more consistent exception handling. + [#3825](https://github.com/pybind/pybind11/pull/3825) +- `PYBIND11_OBJECT_CVT` and `PYBIND11_OBJECT_CVT_DEFAULT` macro can now + be used to define classes in namespaces other than pybind11. + [#3797](https://github.com/pybind/pybind11/pull/3797) +- Error printing code now uses `PYBIND11_DETAILED_ERROR_MESSAGES` + instead of requiring `NDEBUG`, allowing use with release builds if + desired. [#3913](https://github.com/pybind/pybind11/pull/3913) +- Implicit conversion of the literal `0` to `pybind11::handle` is now + disabled. [#4008](https://github.com/pybind/pybind11/pull/4008) + +Bug fixes: + +- Fix exception handling when `pybind11::weakref()` fails. + [#3739](https://github.com/pybind/pybind11/pull/3739) +- `module_::def_submodule` was missing proper error handling. This is + fixed now. [#3973](https://github.com/pybind/pybind11/pull/3973) +- The behavior or `error_already_set` was made safer and the highly + opaque "Unknown internal error occurred" message was replaced with a + more helpful message. + [#3982](https://github.com/pybind/pybind11/pull/3982) +- `error_already_set::what()` now handles non-normalized exceptions + correctly. [#3971](https://github.com/pybind/pybind11/pull/3971) +- Support older C++ compilers where filesystem is not yet part of the + standard library and is instead included in + `std::experimental::filesystem`. + [#3840](https://github.com/pybind/pybind11/pull/3840) +- Fix `-Wfree-nonheap-object` warnings produced by GCC by avoiding + returning pointers to static objects with + `return_value_policy::take_ownership`. + [#3946](https://github.com/pybind/pybind11/pull/3946) +- Fix cast from pytype rvalue to another pytype. + [#3949](https://github.com/pybind/pybind11/pull/3949) +- Ensure proper behavior when garbage collecting classes with dynamic + attributes in Python \>=3.9. + [#4051](https://github.com/pybind/pybind11/pull/4051) +- A couple long-standing `PYBIND11_NAMESPACE` + `__attribute__((visibility("hidden")))` inconsistencies are now fixed + (affects only unusual environments). + [#4043](https://github.com/pybind/pybind11/pull/4043) +- `pybind11::detail::get_internals()` is now resilient to in-flight + Python exceptions. + [#3981](https://github.com/pybind/pybind11/pull/3981) +- Arrays with a dimension of size 0 are now properly converted to + dynamic Eigen matrices (more common in NumPy 1.23). + [#4038](https://github.com/pybind/pybind11/pull/4038) +- Avoid catching unrelated errors when importing NumPy. + [#3974](https://github.com/pybind/pybind11/pull/3974) + +Performance and style: + +- Added an accessor overload of `(object &&key)` to reference steal the + object when using python types as keys. This prevents unnecessary + reference count overhead for attr, dictionary, tuple, and sequence + look ups. Added additional regression tests. Fixed a performance bug + the caused accessor assignments to potentially perform unnecessary + copies. [#3970](https://github.com/pybind/pybind11/pull/3970) +- Perfect forward all args of `make_iterator`. + [#3980](https://github.com/pybind/pybind11/pull/3980) +- Avoid potential bug in pycapsule destructor by adding an `error_guard` + to one of the dtors. + [#3958](https://github.com/pybind/pybind11/pull/3958) +- Optimize dictionary access in `strip_padding` for numpy. + [#3994](https://github.com/pybind/pybind11/pull/3994) +- `stl_bind.h` bindings now take slice args as a const-ref. + [#3852](https://github.com/pybind/pybind11/pull/3852) +- Made slice constructor more consistent, and improve performance of + some casters by allowing reference stealing. + [#3845](https://github.com/pybind/pybind11/pull/3845) +- Change numpy dtype from_args method to use const ref. + [#3878](https://github.com/pybind/pybind11/pull/3878) +- Follow rule of three to ensure `PyErr_Restore` is called only once. + [#3872](https://github.com/pybind/pybind11/pull/3872) +- Added missing perfect forwarding for `make_iterator` functions. + [#3860](https://github.com/pybind/pybind11/pull/3860) +- Optimize c++ to python function casting by using the rvalue caster. + [#3966](https://github.com/pybind/pybind11/pull/3966) +- Optimize Eigen sparse matrix casting by removing unnecessary + temporary. [#4064](https://github.com/pybind/pybind11/pull/4064) +- Avoid potential implicit copy/assignment constructors causing double + free in `strdup_gaurd`. + [#3905](https://github.com/pybind/pybind11/pull/3905) +- Enable clang-tidy checks `misc-definitions-in-headers`, + `modernize-loop-convert`, and `modernize-use-nullptr`. + [#3881](https://github.com/pybind/pybind11/pull/3881) + [#3988](https://github.com/pybind/pybind11/pull/3988) + +Build system improvements: + +- CMake: Fix file extension on Windows with cp36 and cp37 using + FindPython. [#3919](https://github.com/pybind/pybind11/pull/3919) +- CMake: Support multiple Python targets (such as on vcpkg). + [#3948](https://github.com/pybind/pybind11/pull/3948) +- CMake: Fix issue with NVCC on Windows. + [#3947](https://github.com/pybind/pybind11/pull/3947) +- CMake: Drop the bitness check on cross compiles (like targeting + WebAssembly via Emscripten). + [#3959](https://github.com/pybind/pybind11/pull/3959) +- Add MSVC builds in debug mode to CI. + [#3784](https://github.com/pybind/pybind11/pull/3784) +- MSVC 2022 C++20 coverage was added to GitHub Actions, including Eigen. + [#3732](https://github.com/pybind/pybind11/pull/3732), + [#3741](https://github.com/pybind/pybind11/pull/3741) + +Backend and tidying up: + +- New theme for the documentation. + [#3109](https://github.com/pybind/pybind11/pull/3109) +- Remove idioms in code comments. Use more inclusive language. + [#3809](https://github.com/pybind/pybind11/pull/3809) +- `#include ` was removed from the `pybind11/stl.h` header. + Your project may break if it has a transitive dependency on this + include. The fix is to "Include What You Use". + [#3928](https://github.com/pybind/pybind11/pull/3928) +- Avoid `setup.py ` usage in internal tests. + [#3734](https://github.com/pybind/pybind11/pull/3734) + +## Version 2.9.2 (Mar 29, 2022) + +Changes: + +- Enum now has an `__index__` method on Python \<3.8 too. + [#3700](https://github.com/pybind/pybind11/pull/3700) +- Local internals are now cleared after finalizing the interpreter. + [#3744](https://github.com/pybind/pybind11/pull/3744) + +Bug fixes: + +- Better support for Python 3.11 alphas. + [#3694](https://github.com/pybind/pybind11/pull/3694) +- `PYBIND11_TYPE_CASTER` now uses fully qualified symbols, so it can be + used outside of `pybind11::detail`. + [#3758](https://github.com/pybind/pybind11/pull/3758) +- Some fixes for PyPy 3.9. + [#3768](https://github.com/pybind/pybind11/pull/3768) +- Fixed a potential memleak in PyPy in `get_type_override`. + [#3774](https://github.com/pybind/pybind11/pull/3774) +- Fix usage of `VISIBILITY_INLINES_HIDDEN`. + [#3721](https://github.com/pybind/pybind11/pull/3721) + +Build system improvements: + +- Uses `sysconfig` module to determine installation locations on Python + \>= 3.10, instead of `distutils` which has been deprecated. + [#3764](https://github.com/pybind/pybind11/pull/3764) +- Support Catch 2.13.5+ (supporting GLIBC 2.34+). + [#3679](https://github.com/pybind/pybind11/pull/3679) +- Fix test failures with numpy 1.22 by ignoring whitespace when + comparing `str()` of dtypes. + [#3682](https://github.com/pybind/pybind11/pull/3682) + +Backend and tidying up: + +- clang-tidy: added `readability-qualified-auto`, + `readability-braces-around-statements`, + `cppcoreguidelines-prefer-member-initializer`, + `clang-analyzer-optin.performance.Padding`, + `cppcoreguidelines-pro-type-static-cast-downcast`, and + `readability-inconsistent-declaration-parameter-name`. + [#3702](https://github.com/pybind/pybind11/pull/3702), + [#3699](https://github.com/pybind/pybind11/pull/3699), + [#3716](https://github.com/pybind/pybind11/pull/3716), + [#3709](https://github.com/pybind/pybind11/pull/3709) +- clang-format was added to the pre-commit actions, and the entire code + base automatically reformatted (after several iterations preparing for + this leap). [#3713](https://github.com/pybind/pybind11/pull/3713) + +## Version 2.9.1 (Feb 2, 2022) + +Changes: + +- If possible, attach Python exception with `py::raise_from` to + `TypeError` when casting from C++ to Python. This will give additional + info if Python exceptions occur in the caster. Adds a test case of + trying to convert a set from C++ to Python when the hash function is + not defined in Python. + [#3605](https://github.com/pybind/pybind11/pull/3605) +- Add a mapping of C++11 nested exceptions to their Python exception + equivalent using `py::raise_from`. This attaches the nested exceptions + in Python using the `__cause__` field. + [#3608](https://github.com/pybind/pybind11/pull/3608) +- Propagate Python exception traceback using `raise_from` if a pybind11 + function runs out of overloads. + [#3671](https://github.com/pybind/pybind11/pull/3671) +- `py::multiple_inheritance` is now only needed when C++ bases are + hidden from pybind11. + [#3650](https://github.com/pybind/pybind11/pull/3650) and + [#3659](https://github.com/pybind/pybind11/pull/3659) + +Bug fixes: + +- Remove a boolean cast in `numpy.h` that causes MSVC C4800 warnings + when compiling against Python 3.10 or newer. + [#3669](https://github.com/pybind/pybind11/pull/3669) +- Render `py::bool_` and `py::float_` as `bool` and `float` + respectively. [#3622](https://github.com/pybind/pybind11/pull/3622) + +Build system improvements: + +- Fix CMake extension suffix computation on Python 3.10+. + [#3663](https://github.com/pybind/pybind11/pull/3663) +- Allow `CMAKE_ARGS` to override CMake args in pybind11's own + `setup.py`. [#3577](https://github.com/pybind/pybind11/pull/3577) +- Remove a few deprecated c-headers. + [#3610](https://github.com/pybind/pybind11/pull/3610) +- More uniform handling of test targets. + [#3590](https://github.com/pybind/pybind11/pull/3590) +- Add clang-tidy readability check to catch potentially swapped function + args. [#3611](https://github.com/pybind/pybind11/pull/3611) + +## Version 2.9.0 (Dec 28, 2021) + +This is the last version to support Python 2.7 and 3.5. + +New Features: + +- Allow `py::args` to be followed by other arguments; the remaining + arguments are implicitly keyword-only, as if a `py::kw_only{}` + annotation had been used. + [#3402](https://github.com/pybind/pybind11/pull/3402) + +Changes: + +- Make str/bytes/memoryview more interoperable with `std::string_view`. + [#3521](https://github.com/pybind/pybind11/pull/3521) +- Replace `_` with `const_name` in internals, avoid defining `pybind::_` + if `_` defined as macro (common gettext usage) + [#3423](https://github.com/pybind/pybind11/pull/3423) + +Bug fixes: + +- Fix a rare warning about extra copy in an Eigen constructor. + [#3486](https://github.com/pybind/pybind11/pull/3486) +- Fix caching of the C++ overrides. + [#3465](https://github.com/pybind/pybind11/pull/3465) +- Add missing `std::forward` calls to some `cpp_function` overloads. + [#3443](https://github.com/pybind/pybind11/pull/3443) +- Support PyPy 7.3.7 and the PyPy3.8 beta. Test python-3.11 on PRs with + the `python dev` label. + [#3419](https://github.com/pybind/pybind11/pull/3419) +- Replace usage of deprecated `Eigen::MappedSparseMatrix` with + `Eigen::Map>` for Eigen 3.3+. + [#3499](https://github.com/pybind/pybind11/pull/3499) +- Tweaks to support Microsoft Visual Studio 2022. + [#3497](https://github.com/pybind/pybind11/pull/3497) + +Build system improvements: + +- Nicer CMake printout and IDE organisation for pybind11's own tests. + [#3479](https://github.com/pybind/pybind11/pull/3479) +- CMake: report version type as part of the version string to avoid a + spurious space in the package status message. + [#3472](https://github.com/pybind/pybind11/pull/3472) +- Flags starting with `-g` in `$CFLAGS` and `$CPPFLAGS` are no longer + overridden by `.Pybind11Extension`. + [#3436](https://github.com/pybind/pybind11/pull/3436) +- Ensure ThreadPool is closed in `setup_helpers`. + [#3548](https://github.com/pybind/pybind11/pull/3548) +- Avoid LTS on `mips64` and `ppc64le` (reported broken). + [#3557](https://github.com/pybind/pybind11/pull/3557) + +## v2.8.1 (Oct 27, 2021) + +Changes and additions: + +- The simple namespace creation shortcut added in 2.8.0 was deprecated + due to usage of CPython internal API, and will be removed soon. Use + `py::module_::import("types").attr("SimpleNamespace")`. + [#3374](https://github.com/pybinyyd/pybind11/pull/3374) +- Add C++ Exception type to throw and catch `AttributeError`. Useful for + defining custom `__setattr__` and `__getattr__` methods. + [#3387](https://github.com/pybind/pybind11/pull/3387) + +Fixes: + +- Fixed the potential for dangling references when using properties with + `std::optional` types. + [#3376](https://github.com/pybind/pybind11/pull/3376) +- Modernize usage of `PyCodeObject` on Python 3.9+ (moving toward + support for Python 3.11a1) + [#3368](https://github.com/pybind/pybind11/pull/3368) +- A long-standing bug in `eigen.h` was fixed (originally PR \#3343). The + bug was unmasked by newly added `static_assert`'s in the Eigen 3.4.0 + release. [#3352](https://github.com/pybind/pybind11/pull/3352) +- Support multiple raw inclusion of CMake helper files (Conan.io does + this for multi-config generators). + [#3420](https://github.com/pybind/pybind11/pull/3420) +- Fix harmless warning on upcoming CMake 3.22. + [#3368](https://github.com/pybind/pybind11/pull/3368) +- Fix 2.8.0 regression with MSVC 2017 + C++17 mode + Python 3. + [#3407](https://github.com/pybind/pybind11/pull/3407) +- Fix 2.8.0 regression that caused undefined behavior (typically + segfaults) in `make_key_iterator`/`make_value_iterator` if + dereferencing the iterator returned a temporary value instead of a + reference. [#3348](https://github.com/pybind/pybind11/pull/3348) + +## v2.8.0 (Oct 4, 2021) + +New features: + +- Added `py::raise_from` to enable chaining exceptions. + [#3215](https://github.com/pybind/pybind11/pull/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 of + `register_exception_translator(ExceptionTranslator&& translator)` to + keep your exception remapping code local to the module. + [#2650](https://github.com/pybinyyd/pybind11/pull/2650) +- Add `make_simple_namespace` function for instantiating Python + `SimpleNamespace` objects. **Deprecated in 2.8.1.** + [#2840](https://github.com/pybind/pybind11/pull/2840) +- `pybind11::scoped_interpreter` and `initialize_interpreter` have new + arguments to allow `sys.argv` initialization. + [#2341](https://github.com/pybind/pybind11/pull/2341) +- Allow Python builtins to be used as callbacks in CPython. + [#1413](https://github.com/pybind/pybind11/pull/1413) +- Added `view` to view arrays with a different datatype. + [#987](https://github.com/pybind/pybind11/pull/987) +- Implemented `reshape` on arrays. + [#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) +- Improve the classes generated by `bind_map`: + [#3310](https://github.com/pybind/pybind11/pull/3310) + - Change `.items` from an iterator to a dictionary view. + - Add `.keys` and `.values` (both dictionary views). + - Allow `__contains__` to take any object. +- `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: + +- Set `__file__` constant when running `eval_file` in an embedded + interpreter. [#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`, `list` + now consistently support passing `ssize_t` values for sizes and + indexes. Previously, only `size_t` was accepted in several interfaces. + [#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: + +- 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) +- Fixes bug in setting error state in Capsule's pointer methods. + [#3261](https://github.com/pybind/pybind11/pull/3261) +- A long-standing memory leak in `py::cpp_function::initialize` was + fixed. [#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`. + [#3237](https://github.com/pybind/pybind11/pull/3237) +- Restore compatibility with gcc 4.8.4 as distributed by ubuntu-trusty, + linuxmint-17. [#3270](https://github.com/pybind/pybind11/pull/3270) + +Build system improvements: + +- Fix regression in CMake Python package config: improper use of + absolute path. [#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(). + [#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) +- Eigen repo and version can now be specified as cmake options. + [#3324](https://github.com/pybind/pybind11/pull/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](https://github.com/pybind/pybind11/pull/3275) +- Optimize NumPy array construction with additional moves. + [#3183](https://github.com/pybind/pybind11/pull/3183) +- Conversion to `std::string` and `std::string_view` now avoids making + an extra copy of the data on Python \>= 3.3. + [#3257](https://github.com/pybind/pybind11/pull/3257) +- Remove const modifier from certain C++ methods on Python collections + (`list`, `set`, `dict`) such as (`clear()`, `append()`, `insert()`, + etc...) and annotated them with `py-non-const`. +- Enable readability `clang-tidy-const-return` and remove useless + consts. [#3254](https://github.com/pybind/pybind11/pull/3254) + [#3194](https://github.com/pybind/pybind11/pull/3194) +- The clang-tidy `google-explicit-constructor` option was enabled. + [#3250](https://github.com/pybind/pybind11/pull/3250) +- Mark a pytype move constructor as noexcept (perf). + [#3236](https://github.com/pybind/pybind11/pull/3236) +- Enable clang-tidy check to guard against inheritance slicing. + [#3210](https://github.com/pybind/pybind11/pull/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](https://github.com/pybind/pybind11/pull/3198) +- Format pybind11 with isort consistent ordering of imports + [#3195](https://github.com/pybind/pybind11/pull/3195) +- The warnings-suppression "pragma clamp" at the top/bottom of pybind11 + was removed, clearing the path to refactoring and IWYU cleanup. + [#3186](https://github.com/pybind/pybind11/pull/3186) +- Enable most bugprone checks in clang-tidy and fix the found potential + bugs and poor coding styles. + [#3166](https://github.com/pybind/pybind11/pull/3166) +- Add `clang-tidy-readability` rules to make boolean casts explicit + improving code readability. Also enabled other misc and readability + clang-tidy checks. + [#3148](https://github.com/pybind/pybind11/pull/3148) +- Move object in `.pop()` for list. + [#3116](https://github.com/pybind/pybind11/pull/3116) + +## v2.7.1 (Aug 3, 2021) + +Minor missing functionality added: + +- Allow Python builtins to be used as callbacks in CPython. + [#1413](https://github.com/pybind/pybind11/pull/1413) + +Bug fixes: + +- Fix regression in CMake Python package config: improper use of + absolute path. [#3144](https://github.com/pybind/pybind11/pull/3144) +- Fix Mingw64 and add to the CI testing matrix. + [#3132](https://github.com/pybind/pybind11/pull/3132) +- Specified UTF8-encoding in setup.py calls of open(). + [#3137](https://github.com/pybind/pybind11/pull/3137) +- Add clang-tidy-readability rules to make boolean casts explicit + improving code readability. Also enabled other misc and readability + clang-tidy checks. + [#3148](https://github.com/pybind/pybind11/pull/3148) +- Move object in `.pop()` for list. + [#3116](https://github.com/pybind/pybind11/pull/3116) + +Backend and tidying up: + +- Removed and fixed warning suppressions. + [#3127](https://github.com/pybind/pybind11/pull/3127) + [#3129](https://github.com/pybind/pybind11/pull/3129) + [#3135](https://github.com/pybind/pybind11/pull/3135) + [#3141](https://github.com/pybind/pybind11/pull/3141) + [#3142](https://github.com/pybind/pybind11/pull/3142) + [#3150](https://github.com/pybind/pybind11/pull/3150) + [#3152](https://github.com/pybind/pybind11/pull/3152) + [#3160](https://github.com/pybind/pybind11/pull/3160) + [#3161](https://github.com/pybind/pybind11/pull/3161) + +## v2.7.0 (Jul 16, 2021) + +New features: + +- Enable `py::implicitly_convertible` for + `py::class_`-wrapped types. + [#3059](https://github.com/pybind/pybind11/pull/3059) +- Allow function pointer extraction from overloaded functions. + [#2944](https://github.com/pybind/pybind11/pull/2944) +- NumPy: added `.char_()` to type which gives the NumPy public `char` + result, which also distinguishes types by bit length (unlike + `.kind()`). [#2864](https://github.com/pybind/pybind11/pull/2864) +- Add `pybind11::bytearray` to manipulate `bytearray` similar to + `bytes`. [#2799](https://github.com/pybind/pybind11/pull/2799) +- `pybind11/stl/filesystem.h` registers a type caster that, on + C++17/Python 3.6+, converts `std::filesystem::path` to `pathlib.Path` + and any `os.PathLike` to `std::filesystem::path`. + [#2730](https://github.com/pybind/pybind11/pull/2730) +- A `PYBIND11_VERSION_HEX` define was added, similar to + `PY_VERSION_HEX`. + [#3120](https://github.com/pybind/pybind11/pull/3120) + +Changes: + +- `py::str` changed to exclusively hold `PyUnicodeObject`. Previously + `py::str` could also hold `bytes`, which is probably surprising, was + never documented, and can mask bugs (e.g. accidental use of `py::str` + instead of `py::bytes`). + [#2409](https://github.com/pybind/pybind11/pull/2409) +- Add a safety guard to ensure that the Python GIL is held when C++ + calls back into Python via `object_api<>::operator()` (e.g. + `py::function` `__call__`). (This feature is available for Python 3.6+ + only.) [#2919](https://github.com/pybind/pybind11/pull/2919) +- Catch a missing `self` argument in calls to `__init__()`. + [#2914](https://github.com/pybind/pybind11/pull/2914) +- Use `std::string_view` if available to avoid a copy when passing an + object to a `std::ostream`. + [#3042](https://github.com/pybind/pybind11/pull/3042) +- An important warning about thread safety was added to the `iostream.h` + documentation; attempts to make `py::scoped_ostream_redirect` thread + safe have been removed, as it was only partially effective. + [#2995](https://github.com/pybind/pybind11/pull/2995) + +Fixes: + +- Performance: avoid unnecessary strlen calls. + [#3058](https://github.com/pybind/pybind11/pull/3058) +- Fix auto-generated documentation string when using `const T` in + `pyarray_t`. [#3020](https://github.com/pybind/pybind11/pull/3020) +- Unify error messages thrown by + `simple_collector`/`unpacking_collector`. + [#3013](https://github.com/pybind/pybind11/pull/3013) +- `pybind11::builtin_exception` is now explicitly exported, which means + the types included/defined in different modules are identical, and + exceptions raised in different modules can be caught correctly. The + documentation was updated to explain that custom exceptions that are + used across module boundaries need to be explicitly exported as well. + [#2999](https://github.com/pybind/pybind11/pull/2999) +- Fixed exception when printing UTF-8 to a `scoped_ostream_redirect`. + [#2982](https://github.com/pybind/pybind11/pull/2982) +- Pickle support enhancement: `setstate` implementation will attempt to + `setattr` `__dict__` only if the unpickled `dict` object is not empty, + to not force use of `py::dynamic_attr()` unnecessarily. + [#2972](https://github.com/pybind/pybind11/pull/2972) +- Allow negative timedelta values to roundtrip. + [#2870](https://github.com/pybind/pybind11/pull/2870) +- Fix unchecked errors could potentially swallow signals/other + exceptions. [#2863](https://github.com/pybind/pybind11/pull/2863) +- Add null pointer check with `std::localtime`. + [#2846](https://github.com/pybind/pybind11/pull/2846) +- Fix the `weakref` constructor from `py::object` to create a new + `weakref` on conversion. + [#2832](https://github.com/pybind/pybind11/pull/2832) +- Avoid relying on exceptions in C++17 when getting a `shared_ptr` + holder from a `shared_from_this` class. + [#2819](https://github.com/pybind/pybind11/pull/2819) +- Allow the codec's exception to be raised instead of `RuntimeError` + when casting from `py::str` to `std::string`. + [#2903](https://github.com/pybind/pybind11/pull/2903) + +Build system improvements: + +- In `setup_helpers.py`, test for platforms that have some + multiprocessing features but lack semaphores, which `ParallelCompile` + requires. [#3043](https://github.com/pybind/pybind11/pull/3043) +- Fix `pybind11_INCLUDE_DIR` in case `CMAKE_INSTALL_INCLUDEDIR` is + absolute. [#3005](https://github.com/pybind/pybind11/pull/3005) +- Fix bug not respecting `WITH_SOABI` or `WITHOUT_SOABI` to CMake. + [#2938](https://github.com/pybind/pybind11/pull/2938) +- Fix the default `Pybind11Extension` compilation flags with a Mingw64 + python. [#2921](https://github.com/pybind/pybind11/pull/2921) +- Clang on Windows: do not pass `/MP` (ignored flag). + [#2824](https://github.com/pybind/pybind11/pull/2824) +- `pybind11.setup_helpers.intree_extensions` can be used to generate + `Pybind11Extension` instances from cpp files placed in the Python + package source tree. + [#2831](https://github.com/pybind/pybind11/pull/2831) + +Backend and tidying up: + +- Enable clang-tidy performance, readability, and modernization checks + throughout the codebase to enforce best coding practices. + [#3046](https://github.com/pybind/pybind11/pull/3046), + [#3049](https://github.com/pybind/pybind11/pull/3049), + [#3051](https://github.com/pybind/pybind11/pull/3051), + [#3052](https://github.com/pybind/pybind11/pull/3052), + [#3080](https://github.com/pybind/pybind11/pull/3080), and + [#3094](https://github.com/pybind/pybind11/pull/3094) +- Checks for common misspellings were added to the pre-commit hooks. + [#3076](https://github.com/pybind/pybind11/pull/3076) +- Changed `Werror` to stricter `Werror-all` for Intel compiler and fixed + minor issues. [#2948](https://github.com/pybind/pybind11/pull/2948) +- Fixed compilation with GCC \< 5 when the user defines + `_GLIBCXX_USE_CXX11_ABI`. + [#2956](https://github.com/pybind/pybind11/pull/2956) +- Added nox support for easier local testing and linting of + contributions. [#3101](https://github.com/pybind/pybind11/pull/3101) + and [#3121](https://github.com/pybind/pybind11/pull/3121) +- Avoid RTD style issue with docutils 0.17+. + [#3119](https://github.com/pybind/pybind11/pull/3119) +- Support pipx run, such as `pipx run pybind11 --include` for a quick + compile. [#3117](https://github.com/pybind/pybind11/pull/3117) + +## v2.6.2 (Jan 26, 2021) + +Minor missing functionality added: + +- enum: add missing Enum.value property. + [#2739](https://github.com/pybind/pybind11/pull/2739) +- Allow thread termination to be avoided during shutdown for CPython + 3.7+ via `.disarm` for `gil_scoped_acquire`/`gil_scoped_release`. + [#2657](https://github.com/pybind/pybind11/pull/2657) + +Fixed or improved behavior in a few special cases: + +- Fix bug where the constructor of `object` subclasses would not throw + on being passed a Python object of the wrong type. + [#2701](https://github.com/pybind/pybind11/pull/2701) +- The `type_caster` for integers does not convert Python objects with + `__int__` anymore with `noconvert` or during the first round of trying + overloads. [#2698](https://github.com/pybind/pybind11/pull/2698) +- When casting to a C++ integer, `__index__` is always called and not + considered as conversion, consistent with Python 3.8+. + [#2801](https://github.com/pybind/pybind11/pull/2801) + +Build improvements: + +- Setup helpers: `extra_compile_args` and `extra_link_args` + automatically set by Pybind11Extension are now prepended, which allows + them to be overridden by user-set `extra_compile_args` and + `extra_link_args`. + [#2808](https://github.com/pybind/pybind11/pull/2808) +- Setup helpers: Don't trigger unused parameter warning. + [#2735](https://github.com/pybind/pybind11/pull/2735) +- CMake: Support running with `--warn-uninitialized` active. + [#2806](https://github.com/pybind/pybind11/pull/2806) +- CMake: Avoid error if included from two submodule directories. + [#2804](https://github.com/pybind/pybind11/pull/2804) +- CMake: Fix `STATIC` / `SHARED` being ignored in FindPython mode. + [#2796](https://github.com/pybind/pybind11/pull/2796) +- CMake: Respect the setting for `CMAKE_CXX_VISIBILITY_PRESET` if + defined. [#2793](https://github.com/pybind/pybind11/pull/2793) +- CMake: Fix issue with FindPython2/FindPython3 not working with + `pybind11::embed`. + [#2662](https://github.com/pybind/pybind11/pull/2662) +- CMake: mixing local and installed pybind11's would prioritize the + installed one over the local one (regression in 2.6.0). + [#2716](https://github.com/pybind/pybind11/pull/2716) + +Bug fixes: + +- Fixed segfault in multithreaded environments when using + `scoped_ostream_redirect`. + [#2675](https://github.com/pybind/pybind11/pull/2675) +- Leave docstring unset when all docstring-related options are disabled, + rather than set an empty string. + [#2745](https://github.com/pybind/pybind11/pull/2745) +- The module key in builtins that pybind11 uses to store its internals + changed from std::string to a python str type (more natural on Python + 2, no change on Python 3). + [#2814](https://github.com/pybind/pybind11/pull/2814) +- Fixed assertion error related to unhandled (later overwritten) + exception in CPython 3.8 and 3.9 debug builds. + [#2685](https://github.com/pybind/pybind11/pull/2685) +- Fix `py::gil_scoped_acquire` assert with CPython 3.9 debug build. + [#2683](https://github.com/pybind/pybind11/pull/2683) +- Fix issue with a test failing on pytest 6.2. + [#2741](https://github.com/pybind/pybind11/pull/2741) + +Warning fixes: + +- Fix warning modifying constructor parameter 'flag' that shadows a + field of 'set_flag' `[-Wshadow-field-in-constructor-modified]`. + [#2780](https://github.com/pybind/pybind11/pull/2780) +- Suppressed some deprecation warnings about old-style + `__init__`/`__setstate__` in the tests. + [#2759](https://github.com/pybind/pybind11/pull/2759) + +Valgrind work: + +- Fix invalid access when calling a pybind11 `__init__` on a + non-pybind11 class instance. + [#2755](https://github.com/pybind/pybind11/pull/2755) +- Fixed various minor memory leaks in pybind11's test suite. + [#2758](https://github.com/pybind/pybind11/pull/2758) +- Resolved memory leak in cpp_function initialization when exceptions + occurred. [#2756](https://github.com/pybind/pybind11/pull/2756) +- Added a Valgrind build, checking for leaks and memory-related UB, + to CI. [#2746](https://github.com/pybind/pybind11/pull/2746) + +Compiler support: + +- Intel compiler was not activating C++14 support due to a broken + define. [#2679](https://github.com/pybind/pybind11/pull/2679) +- Support ICC and NVIDIA HPC SDK in C++17 mode. + [#2729](https://github.com/pybind/pybind11/pull/2729) +- Support Intel OneAPI compiler (ICC 20.2) and add to CI. + [#2573](https://github.com/pybind/pybind11/pull/2573) + +## v2.6.1 (Nov 11, 2020) + +- `py::exec`, `py::eval`, and `py::eval_file` now add the builtins + module as `"__builtins__"` to their `globals` argument, better + matching `exec` and `eval` in pure Python. + [#2616](https://github.com/pybind/pybind11/pull/2616) +- `setup_helpers` will no longer set a minimum macOS version higher than + the current version. + [#2622](https://github.com/pybind/pybind11/pull/2622) +- Allow deleting static properties. + [#2629](https://github.com/pybind/pybind11/pull/2629) +- Seal a leak in `def_buffer`, cleaning up the `capture` object after + the `class_` object goes out of scope. + [#2634](https://github.com/pybind/pybind11/pull/2634) +- `pybind11_INCLUDE_DIRS` was incorrect, potentially causing a + regression if it was expected to include `PYTHON_INCLUDE_DIRS` (please + use targets instead). + [#2636](https://github.com/pybind/pybind11/pull/2636) +- Added parameter names to the `py::enum_` constructor and methods, + avoiding `arg0` in the generated docstrings. + [#2637](https://github.com/pybind/pybind11/pull/2637) +- Added `needs_recompile` optional function to the `ParallelCompiler` + helper, to allow a recompile to be skipped based on a user-defined + function. [#2643](https://github.com/pybind/pybind11/pull/2643) + +## v2.6.0 (Oct 21, 2020) + +See `upgrade-guide-2.6` for help upgrading to the new version. + +New features: + +- Keyword-only arguments supported in Python 2 or 3 with + `py::kw_only()`. + [#2100](https://github.com/pybind/pybind11/pull/2100) +- Positional-only arguments supported in Python 2 or 3 with + `py::pos_only()`. + [#2459](https://github.com/pybind/pybind11/pull/2459) +- `py::is_final()` class modifier to block subclassing (CPython only). + [#2151](https://github.com/pybind/pybind11/pull/2151) +- Added `py::prepend()`, allowing a function to be placed at the + beginning of the overload chain. + [#1131](https://github.com/pybind/pybind11/pull/1131) +- Access to the type object now provided with `py::type::of()` and + `py::type::of(h)`. + [#2364](https://github.com/pybind/pybind11/pull/2364) +- Perfect forwarding support for methods. + [#2048](https://github.com/pybind/pybind11/pull/2048) +- Added `py::error_already_set::discard_as_unraisable()`. + [#2372](https://github.com/pybind/pybind11/pull/2372) +- `py::hash` is now public. + [#2217](https://github.com/pybind/pybind11/pull/2217) +- `py::class_` is now supported. Note that writing to one + data member of the union and reading another (type punning) is UB in + C++. Thus pybind11-bound enums should never be used for such + conversions. [#2320](https://github.com/pybind/pybind11/pull/2320). +- Classes now check local scope when registering members, allowing a + subclass to have a member with the same name as a parent (such as an + enum). [#2335](https://github.com/pybind/pybind11/pull/2335) + +Code correctness features: + +- Error now thrown when `__init__` is forgotten on subclasses. + [#2152](https://github.com/pybind/pybind11/pull/2152) +- Throw error if conversion to a pybind11 type if the Python object + isn't a valid instance of that type, such as `py::bytes(o)` when + `py::object o` isn't a bytes instance. + [#2349](https://github.com/pybind/pybind11/pull/2349) +- Throw if conversion to `str` fails. + [#2477](https://github.com/pybind/pybind11/pull/2477) + +API changes: + +- `py::module` was renamed `py::module_` to avoid issues with C++20 when + used unqualified, but an alias `py::module` is provided for backward + compatibility. [#2489](https://github.com/pybind/pybind11/pull/2489) +- Public constructors for `py::module_` have been deprecated; please use + `pybind11::module_::create_extension_module` if you were using the + public constructor (fairly rare after `PYBIND11_MODULE` was + introduced). [#2552](https://github.com/pybind/pybind11/pull/2552) +- `PYBIND11_OVERLOAD*` macros and `get_overload` function replaced by + correctly-named `PYBIND11_OVERRIDE*` and `get_override`, fixing + inconsistencies in the presence of a closing `;` in these macros. + `get_type_overload` is deprecated. + [#2325](https://github.com/pybind/pybind11/pull/2325) + +Packaging / building improvements: + +- The Python package was reworked to be more powerful and useful. + [#2433](https://github.com/pybind/pybind11/pull/2433) + - `build-setuptools` is easier thanks to a new + `pybind11.setup_helpers` module, which provides utilities to use + setuptools with pybind11. It can be used via PEP 518, + `setup_requires`, or by directly importing or copying + `setup_helpers.py` into your project. + - CMake configuration files are now included in the Python package. + Use `pybind11.get_cmake_dir()` or `python -m pybind11 --cmakedir` to + get the directory with the CMake configuration files, or include the + site-packages location in your `CMAKE_MODULE_PATH`. Or you can use + the new `pybind11[global]` extra when you install `pybind11`, which + installs the CMake files and headers into your base environment in + the standard location. + - `pybind11-config` is another way to write `python -m pybind11` if + you have your PATH set up. + - Added external typing support to the helper module, code from + `import pybind11` can now be type checked. + [#2588](https://github.com/pybind/pybind11/pull/2588) +- Minimum CMake required increased to 3.4. + [#2338](https://github.com/pybind/pybind11/pull/2338) and + [#2370](https://github.com/pybind/pybind11/pull/2370) + - Full integration with CMake's C++ standard system and compile + features replaces `PYBIND11_CPP_STANDARD`. + - Generated config file is now portable to different + Python/compiler/CMake versions. + - Virtual environments prioritized if `PYTHON_EXECUTABLE` is not set + (`venv`, `virtualenv`, and `conda`) (similar to the new FindPython + mode). + - Other CMake features now natively supported, like + `CMAKE_INTERPROCEDURAL_OPTIMIZATION`, + `set(CMAKE_CXX_VISIBILITY_PRESET hidden)`. + - `CUDA` as a language is now supported. + - Helper functions `pybind11_strip`, `pybind11_extension`, + `pybind11_find_import` added, see `cmake/index`. + - Optional `find-python-mode` and `nopython-mode` with CMake. + [#2370](https://github.com/pybind/pybind11/pull/2370) +- Uninstall target added. + [#2265](https://github.com/pybind/pybind11/pull/2265) and + [#2346](https://github.com/pybind/pybind11/pull/2346) +- `pybind11_add_module()` now accepts an optional `OPT_SIZE` flag that + switches the binding target to size-based optimization if the global + build type can not always be fixed to `MinSizeRel` (except in debug + mode, where optimizations remain disabled). `MinSizeRel` or this flag + reduces binary size quite substantially (~25% on some platforms). + [#2463](https://github.com/pybind/pybind11/pull/2463) + +Smaller or developer focused features and fixes: + +- Moved `mkdoc.py` to a new repo, + [pybind11-mkdoc](https://github.com/pybind/pybind11-mkdoc). There are + no longer submodules in the main repo. +- `py::memoryview` segfault fix and update, with new + `py::memoryview::from_memory` in Python 3, and documentation. + [#2223](https://github.com/pybind/pybind11/pull/2223) +- Fix for `buffer_info` on Python 2. + [#2503](https://github.com/pybind/pybind11/pull/2503) +- If `__eq__` defined but not `__hash__`, `__hash__` is now set to + `None`. [#2291](https://github.com/pybind/pybind11/pull/2291) +- `py::ellipsis` now also works on Python 2. + [#2360](https://github.com/pybind/pybind11/pull/2360) +- Pointer to `std::tuple` & `std::pair` supported in cast. + [#2334](https://github.com/pybind/pybind11/pull/2334) +- Small fixes in NumPy support. `py::array` now uses `py::ssize_t` as + first argument type. + [#2293](https://github.com/pybind/pybind11/pull/2293) +- Added missing signature for `py::array`. + [#2363](https://github.com/pybind/pybind11/pull/2363) +- `unchecked_mutable_reference` has access to operator `()` and `[]` + when const. [#2514](https://github.com/pybind/pybind11/pull/2514) +- `py::vectorize` is now supported on functions that return void. + [#1969](https://github.com/pybind/pybind11/pull/1969) +- `py::capsule` supports `get_pointer` and `set_pointer`. + [#1131](https://github.com/pybind/pybind11/pull/1131) +- Fix crash when different instances share the same pointer of the same + type. [#2252](https://github.com/pybind/pybind11/pull/2252) +- Fix for `py::len` not clearing Python's error state when it fails and + throws. [#2575](https://github.com/pybind/pybind11/pull/2575) +- Bugfixes related to more extensive testing, new GitHub Actions CI. + [#2321](https://github.com/pybind/pybind11/pull/2321) +- Bug in timezone issue in Eastern hemisphere midnight fixed. + [#2438](https://github.com/pybind/pybind11/pull/2438) +- `std::chrono::time_point` now works when the resolution is not the + same as the system. + [#2481](https://github.com/pybind/pybind11/pull/2481) +- Bug fixed where `py::array_t` could accept arrays that did not match + the requested ordering. + [#2484](https://github.com/pybind/pybind11/pull/2484) +- Avoid a segfault on some compilers when types are removed in Python. + [#2564](https://github.com/pybind/pybind11/pull/2564) +- `py::arg::none()` is now also respected when passing keyword + arguments. [#2611](https://github.com/pybind/pybind11/pull/2611) +- PyPy fixes, PyPy 7.3.x now supported, including PyPy3. (Known issue + with PyPy2 and Windows + [#2596](https://github.com/pybind/pybind11/issues/2596)). + [#2146](https://github.com/pybind/pybind11/pull/2146) +- CPython 3.9.0 workaround for undefined behavior (macOS segfault). + [#2576](https://github.com/pybind/pybind11/pull/2576) +- CPython 3.9 warning fixes. + [#2253](https://github.com/pybind/pybind11/pull/2253) +- Improved C++20 support, now tested in CI. + [#2489](https://github.com/pybind/pybind11/pull/2489) + [#2599](https://github.com/pybind/pybind11/pull/2599) +- Improved but still incomplete debug Python interpreter support. + [#2025](https://github.com/pybind/pybind11/pull/2025) +- NVCC (CUDA 11) now supported and tested in CI. + [#2461](https://github.com/pybind/pybind11/pull/2461) +- NVIDIA PGI compilers now supported and tested in CI. + [#2475](https://github.com/pybind/pybind11/pull/2475) +- At least Intel 18 now explicitly required when compiling with Intel. + [#2577](https://github.com/pybind/pybind11/pull/2577) +- Extensive style checking in CI, with + [pre-commit](https://pre-commit.com) support. Code modernization, + checked by clang-tidy. +- Expanded docs, including new main page, new installing section, and + CMake helpers page, along with over a dozen new sections on existing + pages. +- In GitHub, new docs for contributing and new issue templates. + +## v2.5.0 (Mar 31, 2020) + +- Use C++17 fold expressions in type casters, if available. This can + improve performance during overload resolution when functions have + multiple arguments. + [#2043](https://github.com/pybind/pybind11/pull/2043). +- Changed include directory resolution in `pybind11/__init__.py` and + installation in `setup.py`. This fixes a number of open issues where + pybind11 headers could not be found in certain environments. + [#1995](https://github.com/pybind/pybind11/pull/1995). +- C++20 `char8_t` and `u8string` support. + [#2026](https://github.com/pybind/pybind11/pull/2026). +- CMake: search for Python 3.9. + [bb9c91](https://github.com/pybind/pybind11/commit/bb9c91). +- Fixes for MSYS-based build environments. + [#2087](https://github.com/pybind/pybind11/pull/2087), + [#2053](https://github.com/pybind/pybind11/pull/2053). +- STL bindings for `std::vector<...>::clear`. + [#2074](https://github.com/pybind/pybind11/pull/2074). +- Read-only flag for `py::buffer`. + [#1466](https://github.com/pybind/pybind11/pull/1466). +- Exception handling during module initialization. + [bf2b031](https://github.com/pybind/pybind11/commit/bf2b031). +- Support linking against a CPython debug build. + [#2025](https://github.com/pybind/pybind11/pull/2025). +- Fixed issues involving the availability and use of aligned `new` and + `delete`. [#1988](https://github.com/pybind/pybind11/pull/1988), + [759221](https://github.com/pybind/pybind11/commit/759221). +- Fixed a resource leak upon interpreter shutdown. + [#2020](https://github.com/pybind/pybind11/pull/2020). +- Fixed error handling in the boolean caster. + [#1976](https://github.com/pybind/pybind11/pull/1976). + +## v2.4.3 (Oct 15, 2019) + +- Adapt pybind11 to a C API convention change in Python 3.8. + [#1950](https://github.com/pybind/pybind11/pull/1950). + +## v2.4.2 (Sep 21, 2019) + +- Replaced usage of a C++14 only construct. + [#1929](https://github.com/pybind/pybind11/pull/1929). +- Made an ifdef future-proof for Python \>= 4. + [f3109d](https://github.com/pybind/pybind11/commit/f3109d). + +## v2.4.1 (Sep 20, 2019) + +- Fixed a problem involving implicit conversion from enumerations to + integers on Python 3.8. + [#1780](https://github.com/pybind/pybind11/pull/1780). + +## v2.4.0 (Sep 19, 2019) + +- Try harder to keep pybind11-internal data structures separate when + there are potential ABI incompatibilities. Fixes crashes that occurred + when loading multiple pybind11 extensions that were e.g. compiled by + GCC (libstdc++) and Clang (libc++). + [#1588](https://github.com/pybind/pybind11/pull/1588) and + [c9f5a](https://github.com/pybind/pybind11/commit/c9f5a). +- Added support for `__await__`, `__aiter__`, and `__anext__` protocols. + [#1842](https://github.com/pybind/pybind11/pull/1842). +- `pybind11_add_module()`: don't strip symbols when compiling in + `RelWithDebInfo` mode. + [#1980](https://github.com/pybind/pybind11/pull/1980). +- `enum_`: Reproduce Python behavior when comparing against invalid + values (e.g. `None`, strings, etc.). Add back support for + `__invert__()`. + [#1912](https://github.com/pybind/pybind11/pull/1912), + [#1907](https://github.com/pybind/pybind11/pull/1907). +- List insertion operation for `py::list`. Added `.empty()` to all + collection types. Added `py::set::contains()` and + `py::dict::contains()`. + [#1887](https://github.com/pybind/pybind11/pull/1887), + [#1884](https://github.com/pybind/pybind11/pull/1884), + [#1888](https://github.com/pybind/pybind11/pull/1888). +- `py::details::overload_cast_impl` is available in C++11 mode, can be + used like `overload_cast` with an additional set of parentheses. + [#1581](https://github.com/pybind/pybind11/pull/1581). +- Fixed `get_include()` on Conda. + [#1877](https://github.com/pybind/pybind11/pull/1877). +- `stl_bind.h`: negative indexing support. + [#1882](https://github.com/pybind/pybind11/pull/1882). +- Minor CMake fix to add MinGW compatibility. + [#1851](https://github.com/pybind/pybind11/pull/1851). +- GIL-related fixes. + [#1836](https://github.com/pybind/pybind11/pull/1836), + [8b90b](https://github.com/pybind/pybind11/commit/8b90b). +- Other very minor/subtle fixes and improvements. + [#1329](https://github.com/pybind/pybind11/pull/1329), + [#1910](https://github.com/pybind/pybind11/pull/1910), + [#1863](https://github.com/pybind/pybind11/pull/1863), + [#1847](https://github.com/pybind/pybind11/pull/1847), + [#1890](https://github.com/pybind/pybind11/pull/1890), + [#1860](https://github.com/pybind/pybind11/pull/1860), + [#1848](https://github.com/pybind/pybind11/pull/1848), + [#1821](https://github.com/pybind/pybind11/pull/1821), + [#1837](https://github.com/pybind/pybind11/pull/1837), + [#1833](https://github.com/pybind/pybind11/pull/1833), + [#1748](https://github.com/pybind/pybind11/pull/1748), + [#1852](https://github.com/pybind/pybind11/pull/1852). + +## v2.3.0 (June 11, 2019) + +- Significantly reduced module binary size (10-20%) when compiled in + C++11 mode with GCC/Clang, or in any mode with MSVC. Function + signatures are now always precomputed at compile time (this was + previously only available in C++14 mode for non-MSVC compilers). + [#934](https://github.com/pybind/pybind11/pull/934). + +- Add basic support for tag-based static polymorphism, where classes + provide a method to returns the desired type of an instance. + [#1326](https://github.com/pybind/pybind11/pull/1326). + +- Python type wrappers (`py::handle`, `py::object`, etc.) now support + map Python's number protocol onto C++ arithmetic operators such as + `operator+`, `operator/=`, etc. + [#1511](https://github.com/pybind/pybind11/pull/1511). + +- A number of improvements related to enumerations: + + > 1. The `enum_` implementation was rewritten from scratch to reduce + > code bloat. Rather than instantiating a full implementation for + > each enumeration, most code is now contained in a generic base + > class. [#1511](https://github.com/pybind/pybind11/pull/1511). + > 2. The `value()` method of `py::enum_` now accepts an optional + > docstring that will be shown in the documentation of the + > associated enumeration. + > [#1160](https://github.com/pybind/pybind11/pull/1160). + > 3. check for already existing enum value and throw an error if + > present. [#1453](https://github.com/pybind/pybind11/pull/1453). + +- Support for over-aligned type allocation via C++17's aligned `new` + statement. [#1582](https://github.com/pybind/pybind11/pull/1582). + +- Added `py::ellipsis()` method for slicing of multidimensional NumPy + arrays [#1502](https://github.com/pybind/pybind11/pull/1502). + +- Numerous Improvements to the `mkdoc.py` script for extracting + documentation from C++ header files. + [#1788](https://github.com/pybind/pybind11/pull/1788). + +- `pybind11_add_module()`: allow including Python as a `SYSTEM` include + path. [#1416](https://github.com/pybind/pybind11/pull/1416). + +- `pybind11/stl.h` does not convert strings to `vector` anymore. + [#1258](https://github.com/pybind/pybind11/issues/1258). + +- Mark static methods as such to fix auto-generated Sphinx + documentation. [#1732](https://github.com/pybind/pybind11/pull/1732). + +- Re-throw forced unwind exceptions (e.g. during pthread termination). + [#1208](https://github.com/pybind/pybind11/pull/1208). + +- Added `__contains__` method to the bindings of maps (`std::map`, + `std::unordered_map`). + [#1767](https://github.com/pybind/pybind11/pull/1767). + +- Improvements to `gil_scoped_acquire`. + [#1211](https://github.com/pybind/pybind11/pull/1211). + +- Type caster support for `std::deque`. + [#1609](https://github.com/pybind/pybind11/pull/1609). + +- Support for `std::unique_ptr` holders, whose deleters differ between a + base and derived class. + [#1353](https://github.com/pybind/pybind11/pull/1353). + +- Construction of STL array/vector-like data structures from iterators. + Added an `extend()` operation. + [#1709](https://github.com/pybind/pybind11/pull/1709), + +- CMake build system improvements for projects that include non-C++ + files (e.g. plain C, CUDA) in `pybind11_add_module` et al. + [#1678](https://github.com/pybind/pybind11/pull/1678). + +- Fixed asynchronous invocation and deallocation of Python functions + wrapped in `std::function`. + [#1595](https://github.com/pybind/pybind11/pull/1595). + +- Fixes regarding return value policy propagation in STL type casters. + [#1603](https://github.com/pybind/pybind11/pull/1603). + +- Fixed scoped enum comparisons. + [#1571](https://github.com/pybind/pybind11/pull/1571). + +- Fixed iostream redirection for code that releases the GIL. + [#1368](https://github.com/pybind/pybind11/pull/1368), + +- A number of CI-related fixes. + [#1757](https://github.com/pybind/pybind11/pull/1757), + [#1744](https://github.com/pybind/pybind11/pull/1744), + [#1670](https://github.com/pybind/pybind11/pull/1670). + +## v2.2.4 (September 11, 2018) + +- Use new Python 3.7 Thread Specific Storage (TSS) implementation if + available. [#1454](https://github.com/pybind/pybind11/pull/1454), + [#1517](https://github.com/pybind/pybind11/pull/1517). +- Fixes for newer MSVC versions and C++17 mode. + [#1347](https://github.com/pybind/pybind11/pull/1347), + [#1462](https://github.com/pybind/pybind11/pull/1462). +- Propagate return value policies to type-specific casters when casting + STL containers. + [#1455](https://github.com/pybind/pybind11/pull/1455). +- Allow ostream-redirection of more than 1024 characters. + [#1479](https://github.com/pybind/pybind11/pull/1479). +- Set `Py_DEBUG` define when compiling against a debug Python build. + [#1438](https://github.com/pybind/pybind11/pull/1438). +- Untangle integer logic in number type caster to work for custom types + that may only be castable to a restricted set of builtin types. + [#1442](https://github.com/pybind/pybind11/pull/1442). +- CMake build system: Remember Python version in cache file. + [#1434](https://github.com/pybind/pybind11/pull/1434). +- Fix for custom smart pointers: use `std::addressof` to obtain holder + address instead of `operator&`. + [#1435](https://github.com/pybind/pybind11/pull/1435). +- Properly report exceptions thrown during module initialization. + [#1362](https://github.com/pybind/pybind11/pull/1362). +- Fixed a segmentation fault when creating empty-shaped NumPy array. + [#1371](https://github.com/pybind/pybind11/pull/1371). +- The version of Intel C++ compiler must be \>= 2017, and this is now + checked by the header files. + [#1363](https://github.com/pybind/pybind11/pull/1363). +- A few minor typo fixes and improvements to the test suite, and patches + that silence compiler warnings. +- Vectors now support construction from generators, as well as + `extend()` from a list or generator. + [#1496](https://github.com/pybind/pybind11/pull/1496). + +## v2.2.3 (April 29, 2018) + +- The pybind11 header location detection was replaced by a new + implementation that no longer depends on `pip` internals (the recently + released `pip` 10 has restricted access to this API). + [#1190](https://github.com/pybind/pybind11/pull/1190). +- Small adjustment to an implementation detail to work around a compiler + segmentation fault in Clang 3.3/3.4. + [#1350](https://github.com/pybind/pybind11/pull/1350). +- The minimal supported version of the Intel compiler was \>= 17.0 since + pybind11 v2.1. This check is now explicit, and a compile-time error is + raised if the compiler meet the requirement. + [#1363](https://github.com/pybind/pybind11/pull/1363). +- Fixed an endianness-related fault in the test suite. + [#1287](https://github.com/pybind/pybind11/pull/1287). + +## v2.2.2 (February 7, 2018) + +- Fixed a segfault when combining embedded interpreter + shutdown/reinitialization with external loaded pybind11 modules. + [#1092](https://github.com/pybind/pybind11/pull/1092). +- Eigen support: fixed a bug where Nx1/1xN numpy inputs couldn't be + passed as arguments to Eigen vectors (which for Eigen are simply + compile-time fixed Nx1/1xN matrices). + [#1106](https://github.com/pybind/pybind11/pull/1106). +- Clarified to license by moving the licensing of contributions from + `LICENSE` into `CONTRIBUTING.md`: the licensing of contributions is + not actually part of the software license as distributed. This isn't + meant to be a substantial change in the licensing of the project, but + addresses concerns that the clause made the license non-standard. + [#1109](https://github.com/pybind/pybind11/issues/1109). +- Fixed a regression introduced in 2.1 that broke binding functions with + lvalue character literal arguments. + [#1128](https://github.com/pybind/pybind11/pull/1128). +- MSVC: fix for compilation failures under /permissive-, and added the + flag to the appveyor test suite. + [#1155](https://github.com/pybind/pybind11/pull/1155). +- Fixed `__qualname__` generation, and in turn, fixes how class names + (especially nested class names) are shown in generated docstrings. + [#1171](https://github.com/pybind/pybind11/pull/1171). +- Updated the FAQ with a suggested project citation reference. + [#1189](https://github.com/pybind/pybind11/pull/1189). +- Added fixes for deprecation warnings when compiled under C++17 with + `-Wdeprecated` turned on, and add `-Wdeprecated` to the test suite + compilation flags. + [#1191](https://github.com/pybind/pybind11/pull/1191). +- Fixed outdated PyPI URLs in `setup.py`. + [#1213](https://github.com/pybind/pybind11/pull/1213). +- Fixed a refcount leak for arguments that end up in a `py::args` + argument for functions with both fixed positional and `py::args` + arguments. [#1216](https://github.com/pybind/pybind11/pull/1216). +- Fixed a potential segfault resulting from possible premature + destruction of `py::args`/`py::kwargs` arguments with overloaded + functions. [#1223](https://github.com/pybind/pybind11/pull/1223). +- Fixed `del map[item]` for a `stl_bind.h` bound stl map. + [#1229](https://github.com/pybind/pybind11/pull/1229). +- Fixed a regression from v2.1.x where the aggregate initialization + could unintentionally end up at a constructor taking a templated + `std::initializer_list` argument. + [#1249](https://github.com/pybind/pybind11/pull/1249). +- Fixed an issue where calling a function with a keep_alive policy on + the same nurse/patient pair would cause the internal patient storage + to needlessly grow (unboundedly, if the nurse is long-lived). + [#1251](https://github.com/pybind/pybind11/issues/1251). +- Various other minor fixes. + +## v2.2.1 (September 14, 2017) + +- Added `py::module_::reload()` member function for reloading a module. + [#1040](https://github.com/pybind/pybind11/pull/1040). +- Fixed a reference leak in the number converter. + [#1078](https://github.com/pybind/pybind11/pull/1078). +- Fixed compilation with Clang on host GCC \< 5 (old libstdc++ which + isn't fully C++11 compliant). + [#1062](https://github.com/pybind/pybind11/pull/1062). +- Fixed a regression where the automatic `std::vector` caster + would fail to compile. The same fix also applies to any container + which returns element proxies instead of references. + [#1053](https://github.com/pybind/pybind11/pull/1053). +- Fixed a regression where the `py::keep_alive` policy could not be + applied to constructors. + [#1065](https://github.com/pybind/pybind11/pull/1065). +- Fixed a nullptr dereference when loading a `py::module_local` type + that's only registered in an external module. + [#1058](https://github.com/pybind/pybind11/pull/1058). +- Fixed implicit conversion of accessors to types derived from + `py::object`. [#1076](https://github.com/pybind/pybind11/pull/1076). +- The `name` in `PYBIND11_MODULE(name, variable)` can now be a macro. + [#1082](https://github.com/pybind/pybind11/pull/1082). +- Relaxed overly strict `py::pickle()` check for matching get and set + types. [#1064](https://github.com/pybind/pybind11/pull/1064). +- Conversion errors now try to be more informative when it's likely that + a missing header is the cause (e.g. forgetting ``). + [#1077](https://github.com/pybind/pybind11/pull/1077). + +## v2.2.0 (August 31, 2017) + +- Support for embedding the Python interpreter. See the + `documentation page ` for a full overview of the + new features. [#774](https://github.com/pybind/pybind11/pull/774), + [#889](https://github.com/pybind/pybind11/pull/889), + [#892](https://github.com/pybind/pybind11/pull/892), + [#920](https://github.com/pybind/pybind11/pull/920). + + ```cpp + #include + namespace py = pybind11; + + int main() { + py::scoped_interpreter guard{}; // start the interpreter and keep it alive + + py::print("Hello, World!"); // use the Python API + } + ``` + +- Support for inheriting from multiple C++ bases in Python. + [#693](https://github.com/pybind/pybind11/pull/693). + + ```python + from cpp_module import CppBase1, CppBase2 + + + class PyDerived(CppBase1, CppBase2): + def __init__(self): + CppBase1.__init__(self) # C++ bases must be initialized explicitly + CppBase2.__init__(self) + ``` + +- `PYBIND11_MODULE` is now the preferred way to create module entry + points. `PYBIND11_PLUGIN` is deprecated. See `macros` for details. + [#879](https://github.com/pybind/pybind11/pull/879). + + ```cpp + // new + PYBIND11_MODULE(example, m) { + m.def("add", [](int a, int b) { return a + b; }); + } + + // old + PYBIND11_PLUGIN(example) { + py::module m("example"); + m.def("add", [](int a, int b) { return a + b; }); + return m.ptr(); + } + ``` + +- pybind11's headers and build system now more strictly enforce hidden + symbol visibility for extension modules. This should be seamless for + most users, but see the `upgrade` if you use a custom build system. + [#995](https://github.com/pybind/pybind11/pull/995). + +- Support for `py::module_local` types which allow multiple modules to + export the same C++ types without conflicts. This is useful for opaque + types like `std::vector`. `py::bind_vector` and `py::bind_map` + now default to `py::module_local` if their elements are builtins or + local types. See `module_local` for details. + [#949](https://github.com/pybind/pybind11/pull/949), + [#981](https://github.com/pybind/pybind11/pull/981), + [#995](https://github.com/pybind/pybind11/pull/995), + [#997](https://github.com/pybind/pybind11/pull/997). + +- Custom constructors can now be added very easily using lambdas or + factory functions which return a class instance by value, pointer or + holder. This supersedes the old placement-new `__init__` technique. + See `custom_constructors` for details. + [#805](https://github.com/pybind/pybind11/pull/805), + [#1014](https://github.com/pybind/pybind11/pull/1014). + + ```cpp + struct Example { + Example(std::string); + }; + + py::class_(m, "Example") + .def(py::init()) // existing constructor + .def(py::init([](int n) { // custom constructor + return std::make_unique(std::to_string(n)); + })); + ``` + +- Similarly to custom constructors, pickling support functions are now + bound using the `py::pickle()` adaptor which improves type safety. See + the `upgrade` and `pickling` for details. + [#1038](https://github.com/pybind/pybind11/pull/1038). + +- Builtin support for converting C++17 standard library types and + general conversion improvements: + + 1. C++17 `std::variant` is supported right out of the box. C++11/14 + equivalents (e.g. `boost::variant`) can also be added with a + simple user-defined specialization. See `cpp17_container_casters` + for details. [#811](https://github.com/pybind/pybind11/pull/811), + [#845](https://github.com/pybind/pybind11/pull/845), + [#989](https://github.com/pybind/pybind11/pull/989). + 2. Out-of-the-box support for C++17 `std::string_view`. + [#906](https://github.com/pybind/pybind11/pull/906). + 3. Improved compatibility of the builtin `optional` converter. + [#874](https://github.com/pybind/pybind11/pull/874). + 4. The `bool` converter now accepts `numpy.bool_` and types which + define `__bool__` (Python 3.x) or `__nonzero__` (Python 2.7). + [#925](https://github.com/pybind/pybind11/pull/925). + 5. C++-to-Python casters are now more efficient and move elements out + of rvalue containers whenever possible. + [#851](https://github.com/pybind/pybind11/pull/851), + [#936](https://github.com/pybind/pybind11/pull/936), + [#938](https://github.com/pybind/pybind11/pull/938). + 6. Fixed `bytes` to `std::string/char*` conversion on Python 3. + [#817](https://github.com/pybind/pybind11/pull/817). + 7. Fixed lifetime of temporary C++ objects created in Python-to-C++ + conversions. [#924](https://github.com/pybind/pybind11/pull/924). + +- Scope guard call policy for RAII types, e.g. + `py::call_guard()`, + `py::call_guard()`. See `call_policies` + for details. [#740](https://github.com/pybind/pybind11/pull/740). + +- Utility for redirecting C++ streams to Python (e.g. `std::cout` -\> + `sys.stdout`). Scope guard `py::scoped_ostream_redirect` in C++ and a + context manager in Python. See `ostream_redirect`. + [#1009](https://github.com/pybind/pybind11/pull/1009). + +- Improved handling of types and exceptions across module boundaries. + [#915](https://github.com/pybind/pybind11/pull/915), + [#951](https://github.com/pybind/pybind11/pull/951), + [#995](https://github.com/pybind/pybind11/pull/995). + +- Fixed destruction order of `py::keep_alive` nurse/patient objects in + reference cycles. + [#856](https://github.com/pybind/pybind11/pull/856). + +- NumPy and buffer protocol related improvements: + + 1. Support for negative strides in Python buffer objects/numpy + arrays. This required changing integers from unsigned to signed + for the related C++ APIs. Note: If you have compiler warnings + enabled, you may notice some new conversion warnings after + upgrading. These can be resolved with `static_cast`. + [#782](https://github.com/pybind/pybind11/pull/782). + 2. Support `std::complex` and arrays inside `PYBIND11_NUMPY_DTYPE`. + [#831](https://github.com/pybind/pybind11/pull/831), + [#832](https://github.com/pybind/pybind11/pull/832). + 3. Support for constructing `py::buffer_info` and `py::arrays` using + arbitrary containers or iterators instead of requiring a + `std::vector`. + [#788](https://github.com/pybind/pybind11/pull/788), + [#822](https://github.com/pybind/pybind11/pull/822), + [#860](https://github.com/pybind/pybind11/pull/860). + 4. Explicitly check numpy version and require \>= 1.7.0. + [#819](https://github.com/pybind/pybind11/pull/819). + +- Support for allowing/prohibiting `None` for specific arguments and + improved `None` overload resolution order. See `none_arguments` for + details. [#843](https://github.com/pybind/pybind11/pull/843). + [#859](https://github.com/pybind/pybind11/pull/859). + +- Added `py::exec()` as a shortcut for `py::eval()` + and support for C++11 raw string literals as input. See `eval`. + [#766](https://github.com/pybind/pybind11/pull/766), + [#827](https://github.com/pybind/pybind11/pull/827). + +- `py::vectorize()` ignores non-vectorizable arguments and supports + member functions. + [#762](https://github.com/pybind/pybind11/pull/762). + +- Support for bound methods as callbacks (`pybind11/functional.h`). + [#815](https://github.com/pybind/pybind11/pull/815). + +- Allow aliasing pybind11 methods: `cls.attr("foo") = cls.attr("bar")`. + [#802](https://github.com/pybind/pybind11/pull/802). + +- Don't allow mixed static/non-static overloads. + [#804](https://github.com/pybind/pybind11/pull/804). + +- Fixed overriding static properties in derived classes. + [#784](https://github.com/pybind/pybind11/pull/784). + +- Added support for write only properties. + [#1144](https://github.com/pybind/pybind11/pull/1144). + +- Improved deduction of member functions of a derived class when its + bases aren't registered with pybind11. + [#855](https://github.com/pybind/pybind11/pull/855). + + ```cpp + struct Base { + int foo() { return 42; } + } + + struct Derived : Base {} + + // Now works, but previously required also binding `Base` + py::class_(m, "Derived") + .def("foo", &Derived::foo); // function is actually from `Base` + ``` + +- The implementation of `py::init<>` now uses C++11 brace initialization + syntax to construct instances, which permits binding implicit + constructors of aggregate types. + [#1015](https://github.com/pybind/pybind11/pull/1015). + + > ```cpp + > struct Aggregate { + > int a; + > std::string b; + > }; + > + > py::class_(m, "Aggregate") + > .def(py::init()); + > ``` + +- Fixed issues with multiple inheritance with offset base/derived + pointers. [#812](https://github.com/pybind/pybind11/pull/812), + [#866](https://github.com/pybind/pybind11/pull/866), + [#960](https://github.com/pybind/pybind11/pull/960). + +- Fixed reference leak of type objects. + [#1030](https://github.com/pybind/pybind11/pull/1030). + +- Improved support for the `/std:c++14` and `/std:c++latest` modes on + MSVC 2017. [#841](https://github.com/pybind/pybind11/pull/841), + [#999](https://github.com/pybind/pybind11/pull/999). + +- Fixed detection of private operator new on MSVC. + [#893](https://github.com/pybind/pybind11/pull/893), + [#918](https://github.com/pybind/pybind11/pull/918). + +- Intel C++ compiler compatibility fixes. + [#937](https://github.com/pybind/pybind11/pull/937). + +- Fixed implicit conversion of `py::enum_` to integer types on Python + 2.7. [#821](https://github.com/pybind/pybind11/pull/821). + +- Added `py::hash` to fetch the hash value of Python objects, and + `.def(hash(py::self))` to provide the C++ `std::hash` as the Python + `__hash__` method. + [#1034](https://github.com/pybind/pybind11/pull/1034). + +- Fixed `__truediv__` on Python 2 and `__itruediv__` on Python 3. + [#867](https://github.com/pybind/pybind11/pull/867). + +- `py::capsule` objects now support the `name` attribute. This is useful + for interfacing with `scipy.LowLevelCallable`. + [#902](https://github.com/pybind/pybind11/pull/902). + +- Fixed `py::make_iterator`'s `__next__()` for past-the-end calls. + [#897](https://github.com/pybind/pybind11/pull/897). + +- Added `error_already_set::matches()` for checking Python exceptions. + [#772](https://github.com/pybind/pybind11/pull/772). + +- Deprecated `py::error_already_set::clear()`. It's no longer needed + following a simplification of the `py::error_already_set` class. + [#954](https://github.com/pybind/pybind11/pull/954). + +- Deprecated `py::handle::operator==()` in favor of `py::handle::is()` + [#825](https://github.com/pybind/pybind11/pull/825). + +- Deprecated `py::object::borrowed`/`py::object::stolen`. Use + `py::object::borrowed_t{}`/`py::object::stolen_t{}` instead. + [#771](https://github.com/pybind/pybind11/pull/771). + +- Changed internal data structure versioning to avoid conflicts between + modules compiled with different revisions of pybind11. + [#1012](https://github.com/pybind/pybind11/pull/1012). + +- Additional compile-time and run-time error checking and more + informative messages. + [#786](https://github.com/pybind/pybind11/pull/786), + [#794](https://github.com/pybind/pybind11/pull/794), + [#803](https://github.com/pybind/pybind11/pull/803). + +- Various minor improvements and fixes. + [#764](https://github.com/pybind/pybind11/pull/764), + [#791](https://github.com/pybind/pybind11/pull/791), + [#795](https://github.com/pybind/pybind11/pull/795), + [#840](https://github.com/pybind/pybind11/pull/840), + [#844](https://github.com/pybind/pybind11/pull/844), + [#846](https://github.com/pybind/pybind11/pull/846), + [#849](https://github.com/pybind/pybind11/pull/849), + [#858](https://github.com/pybind/pybind11/pull/858), + [#862](https://github.com/pybind/pybind11/pull/862), + [#871](https://github.com/pybind/pybind11/pull/871), + [#872](https://github.com/pybind/pybind11/pull/872), + [#881](https://github.com/pybind/pybind11/pull/881), + [#888](https://github.com/pybind/pybind11/pull/888), + [#899](https://github.com/pybind/pybind11/pull/899), + [#928](https://github.com/pybind/pybind11/pull/928), + [#931](https://github.com/pybind/pybind11/pull/931), + [#944](https://github.com/pybind/pybind11/pull/944), + [#950](https://github.com/pybind/pybind11/pull/950), + [#952](https://github.com/pybind/pybind11/pull/952), + [#962](https://github.com/pybind/pybind11/pull/962), + [#965](https://github.com/pybind/pybind11/pull/965), + [#970](https://github.com/pybind/pybind11/pull/970), + [#978](https://github.com/pybind/pybind11/pull/978), + [#979](https://github.com/pybind/pybind11/pull/979), + [#986](https://github.com/pybind/pybind11/pull/986), + [#1020](https://github.com/pybind/pybind11/pull/1020), + [#1027](https://github.com/pybind/pybind11/pull/1027), + [#1037](https://github.com/pybind/pybind11/pull/1037). + +- Testing improvements. + [#798](https://github.com/pybind/pybind11/pull/798), + [#882](https://github.com/pybind/pybind11/pull/882), + [#898](https://github.com/pybind/pybind11/pull/898), + [#900](https://github.com/pybind/pybind11/pull/900), + [#921](https://github.com/pybind/pybind11/pull/921), + [#923](https://github.com/pybind/pybind11/pull/923), + [#963](https://github.com/pybind/pybind11/pull/963). + +## v2.1.1 (April 7, 2017) + +- Fixed minimum version requirement for MSVC 2015u3 + [#773](https://github.com/pybind/pybind11/pull/773). + +## v2.1.0 (March 22, 2017) + +- pybind11 now performs function overload resolution in two phases. The + first phase only considers exact type matches, while the second allows + for implicit conversions to take place. A special `noconvert()` syntax + can be used to completely disable implicit conversions for specific + arguments. [#643](https://github.com/pybind/pybind11/pull/643), + [#634](https://github.com/pybind/pybind11/pull/634), + [#650](https://github.com/pybind/pybind11/pull/650). +- Fixed a regression where static properties no longer worked with + classes using multiple inheritance. The `py::metaclass` attribute is + no longer necessary (and deprecated as of this release) when binding + classes with static properties. + [#679](https://github.com/pybind/pybind11/pull/679), +- Classes bound using `pybind11` can now use custom metaclasses. + [#679](https://github.com/pybind/pybind11/pull/679), +- `py::args` and `py::kwargs` can now be mixed with other positional + arguments when binding functions using pybind11. + [#611](https://github.com/pybind/pybind11/pull/611). +- Improved support for C++11 unicode string and character types; added + extensive documentation regarding pybind11's string conversion + behavior. [#624](https://github.com/pybind/pybind11/pull/624), + [#636](https://github.com/pybind/pybind11/pull/636), + [#715](https://github.com/pybind/pybind11/pull/715). +- pybind11 can now avoid expensive copies when converting Eigen arrays + to NumPy arrays (and vice versa). + [#610](https://github.com/pybind/pybind11/pull/610). +- The "fast path" in `py::vectorize` now works for any full-size group + of C or F-contiguous arrays. The non-fast path is also faster since it + no longer performs copies of the input arguments (except when type + conversions are necessary). + [#610](https://github.com/pybind/pybind11/pull/610). +- Added fast, unchecked access to NumPy arrays via a proxy object. + [#746](https://github.com/pybind/pybind11/pull/746). +- Transparent support for class-specific `operator new` and + `operator delete` implementations. + [#755](https://github.com/pybind/pybind11/pull/755). +- Slimmer and more efficient STL-compatible iterator interface for + sequence types. [#662](https://github.com/pybind/pybind11/pull/662). +- Improved custom holder type support. + [#607](https://github.com/pybind/pybind11/pull/607). +- `nullptr` to `None` conversion fixed in various builtin type casters. + [#732](https://github.com/pybind/pybind11/pull/732). +- `enum_` now exposes its members via a special `__members__` attribute. + [#666](https://github.com/pybind/pybind11/pull/666). +- `std::vector` bindings created using `stl_bind.h` can now optionally + implement the buffer protocol. + [#488](https://github.com/pybind/pybind11/pull/488). +- Automated C++ reference documentation using doxygen and breathe. + [#598](https://github.com/pybind/pybind11/pull/598). +- Added minimum compiler version assertions. + [#727](https://github.com/pybind/pybind11/pull/727). +- Improved compatibility with C++1z. + [#677](https://github.com/pybind/pybind11/pull/677). +- Improved `py::capsule` API. Can be used to implement cleanup callbacks + that are involved at module destruction time. + [#752](https://github.com/pybind/pybind11/pull/752). +- Various minor improvements and fixes. + [#595](https://github.com/pybind/pybind11/pull/595), + [#588](https://github.com/pybind/pybind11/pull/588), + [#589](https://github.com/pybind/pybind11/pull/589), + [#603](https://github.com/pybind/pybind11/pull/603), + [#619](https://github.com/pybind/pybind11/pull/619), + [#648](https://github.com/pybind/pybind11/pull/648), + [#695](https://github.com/pybind/pybind11/pull/695), + [#720](https://github.com/pybind/pybind11/pull/720), + [#723](https://github.com/pybind/pybind11/pull/723), + [#729](https://github.com/pybind/pybind11/pull/729), + [#724](https://github.com/pybind/pybind11/pull/724), + [#742](https://github.com/pybind/pybind11/pull/742), + [#753](https://github.com/pybind/pybind11/pull/753). + +## v2.0.1 (Jan 4, 2017) + +- Fix pointer to reference error in type_caster on MSVC + [#583](https://github.com/pybind/pybind11/pull/583). +- Fixed a segmentation in the test suite due to a typo + [cd7eac](https://github.com/pybind/pybind11/commit/cd7eac). + +## v2.0.0 (Jan 1, 2017) + +- Fixed a reference counting regression affecting types with custom + metaclasses (introduced in v2.0.0-rc1). + [#571](https://github.com/pybind/pybind11/pull/571). +- Quenched a CMake policy warning. + [#570](https://github.com/pybind/pybind11/pull/570). + +## v2.0.0-rc1 (Dec 23, 2016) + +The pybind11 developers are excited to issue a release candidate of +pybind11 with a subsequent v2.0.0 release planned in early January next +year. + +An incredible amount of effort by went into pybind11 over the last ~5 +months, leading to a release that is jam-packed with exciting new +features and numerous usability improvements. The following list links +PRs or individual commits whenever applicable. + +Happy Christmas! + +- Support for binding C++ class hierarchies that make use of multiple + inheritance. [#410](https://github.com/pybind/pybind11/pull/410). + +- PyPy support: pybind11 now supports nightly builds of PyPy and will + interoperate with the future 5.7 release. No code changes are + necessary, everything "just" works as usual. Note that we only target + the Python 2.7 branch for now; support for 3.x will be added once its + `cpyext` extension support catches up. A few minor features remain + unsupported for the time being (notably dynamic attributes in custom + types). [#527](https://github.com/pybind/pybind11/pull/527). + +- Significant work on the documentation -- in particular, the monolithic + `advanced.rst` file was restructured into a easier to read + hierarchical organization. + [#448](https://github.com/pybind/pybind11/pull/448). + +- Many NumPy-related improvements: + + 1. Object-oriented API to access and modify NumPy `ndarray` + instances, replicating much of the corresponding NumPy C API + functionality. + [#402](https://github.com/pybind/pybind11/pull/402). + + 2. NumPy array `dtype` array descriptors are now first-class citizens + and are exposed via a new class `py::dtype`. + + 3. Structured dtypes can be registered using the + `PYBIND11_NUMPY_DTYPE()` macro. Special `array` constructors + accepting dtype objects were also added. + + One potential caveat involving this change: format descriptor + strings should now be accessed via `format_descriptor::format()` + (however, for compatibility purposes, the old syntax + `format_descriptor::value` will still work for non-structured data + types). [#308](https://github.com/pybind/pybind11/pull/308). + + 4. Further improvements to support structured dtypes throughout the + system. [#472](https://github.com/pybind/pybind11/pull/472), + [#474](https://github.com/pybind/pybind11/pull/474), + [#459](https://github.com/pybind/pybind11/pull/459), + [#453](https://github.com/pybind/pybind11/pull/453), + [#452](https://github.com/pybind/pybind11/pull/452), and + [#505](https://github.com/pybind/pybind11/pull/505). + + 5. Fast access operators. + [#497](https://github.com/pybind/pybind11/pull/497). + + 6. Constructors for arrays whose storage is owned by another object. + [#440](https://github.com/pybind/pybind11/pull/440). + + 7. Added constructors for `array` and `array_t` explicitly accepting + shape and strides; if strides are not provided, they are deduced + assuming C-contiguity. Also added simplified constructors for + 1-dimensional case. + + 8. Added buffer/NumPy support for `char[N]` and `std::array` + types. + + 9. Added `memoryview` wrapper type which is constructible from + `buffer_info`. + +- Eigen: many additional conversions and support for non-contiguous + arrays/slices. [#427](https://github.com/pybind/pybind11/pull/427), + [#315](https://github.com/pybind/pybind11/pull/315), + [#316](https://github.com/pybind/pybind11/pull/316), + [#312](https://github.com/pybind/pybind11/pull/312), and + [#267](https://github.com/pybind/pybind11/pull/267) + +- Incompatible changes in `class_<...>::class_()`: + + > 1. Declarations of types that provide access via the buffer + > protocol must now include the `py::buffer_protocol()` annotation + > as an argument to the `class_` constructor. + > 2. Declarations of types that require a custom metaclass (i.e. all + > classes which include static properties via commands such as + > `def_readwrite_static()`) must now include the `py::metaclass()` + > annotation as an argument to the `class_` constructor. + > + > These two changes were necessary to make type definitions in + > pybind11 future-proof, and to support PyPy via its cpyext + > mechanism. [#527](https://github.com/pybind/pybind11/pull/527). + > + > 3. This version of pybind11 uses a redesigned mechanism for + > instantiating trampoline classes that are used to override + > virtual methods from within Python. This led to the following + > user-visible syntax change: instead of + > + > ```cpp + > py::class_("MyClass") + > .alias() + > .... + > ``` + > + > write + > + > ```cpp + > py::class_("MyClass") + > .... + > ``` + > + > Importantly, both the original and the trampoline class are now + > specified as an arguments (in arbitrary order) to the + > `py::class_` template, and the `alias<..>()` call is gone. The + > new scheme has zero overhead in cases when Python doesn't + > override any functions of the underlying C++ class. [rev. + > 86d825](https://github.com/pybind/pybind11/commit/86d825). + +- Added `eval` and `eval_file` functions for evaluating expressions and + statements from a string or file. [rev. + 0d3fc3](https://github.com/pybind/pybind11/commit/0d3fc3). + +- pybind11 can now create types with a modifiable dictionary. + [#437](https://github.com/pybind/pybind11/pull/437) and + [#444](https://github.com/pybind/pybind11/pull/444). + +- Support for translation of arbitrary C++ exceptions to Python + counterparts. [#296](https://github.com/pybind/pybind11/pull/296) and + [#273](https://github.com/pybind/pybind11/pull/273). + +- Report full backtraces through mixed C++/Python code, better reporting + for import errors, fixed GIL management in exception processing. + [#537](https://github.com/pybind/pybind11/pull/537), + [#494](https://github.com/pybind/pybind11/pull/494), [rev. + e72d95](https://github.com/pybind/pybind11/commit/e72d95), and [rev. + 099d6e](https://github.com/pybind/pybind11/commit/099d6e). + +- Support for bit-level operations, comparisons, and serialization of + C++ enumerations. + [#503](https://github.com/pybind/pybind11/pull/503), + [#508](https://github.com/pybind/pybind11/pull/508), + [#380](https://github.com/pybind/pybind11/pull/380), + [#309](https://github.com/pybind/pybind11/pull/309). + [#311](https://github.com/pybind/pybind11/pull/311). + +- The `class_` constructor now accepts its template arguments in any + order. [#385](https://github.com/pybind/pybind11/pull/385). + +- Attribute and item accessors now have a more complete interface which + makes it possible to chain attributes as in + `obj.attr("a")[key].attr("b").attr("method")(1, 2, 3)`. + [#425](https://github.com/pybind/pybind11/pull/425). + +- Major redesign of the default and conversion constructors in + `pytypes.h`. [#464](https://github.com/pybind/pybind11/pull/464). + +- Added built-in support for `std::shared_ptr` holder type. It is no + longer necessary to to include a declaration of the form + `PYBIND11_DECLARE_HOLDER_TYPE(T, std::shared_ptr)` (though + continuing to do so won't cause an error). + [#454](https://github.com/pybind/pybind11/pull/454). + +- New `py::overload_cast` casting operator to select among multiple + possible overloads of a function. An example: + + > ```cpp + > py::class_(m, "Pet") + > .def("set", py::overload_cast(&Pet::set), "Set the pet's age") + > .def("set", py::overload_cast(&Pet::set), "Set the pet's name"); + > ``` + + This feature only works on C++14-capable compilers. + [#541](https://github.com/pybind/pybind11/pull/541). + +- C++ types are automatically cast to Python types, e.g. when assigning + them as an attribute. For instance, the following is now legal: + + > ```cpp + > py::module m = /* ... */ + > m.attr("constant") = 123; + > ``` + + (Previously, a `py::cast` call was necessary to avoid a compilation + error.) [#551](https://github.com/pybind/pybind11/pull/551). + +- Redesigned `pytest`-based test suite. + [#321](https://github.com/pybind/pybind11/pull/321). + +- Instance tracking to detect reference leaks in test suite. + [#324](https://github.com/pybind/pybind11/pull/324) + +- pybind11 can now distinguish between multiple different instances that + are located at the same memory address, but which have different + types. [#329](https://github.com/pybind/pybind11/pull/329). + +- Improved logic in `move` return value policy. + [#510](https://github.com/pybind/pybind11/pull/510), + [#297](https://github.com/pybind/pybind11/pull/297). + +- Generalized unpacking API to permit calling Python functions from C++ + using notation such as + `foo(a1, a2, *args, "ka"_a=1, "kb"_a=2, **kwargs)`. + [#372](https://github.com/pybind/pybind11/pull/372). + +- `py::print()` function whose behavior matches that of the native + Python `print()` function. + [#372](https://github.com/pybind/pybind11/pull/372). + +- Added `py::dict` keyword + constructor:`auto d = dict("number"_a=42, "name"_a="World");`. + [#372](https://github.com/pybind/pybind11/pull/372). + +- Added `py::str::format()` method and `_s` literal: + `py::str s = "1 + 2 = {}"_s.format(3);`. + [#372](https://github.com/pybind/pybind11/pull/372). + +- Added `py::repr()` function which is equivalent to Python's builtin + `repr()`. [#333](https://github.com/pybind/pybind11/pull/333). + +- Improved construction and destruction logic for holder types. It is + now possible to reference instances with smart pointer holder types + without constructing the holder if desired. The + `PYBIND11_DECLARE_HOLDER_TYPE` macro now accepts an optional second + parameter to indicate whether the holder type uses intrusive reference + counting. [#533](https://github.com/pybind/pybind11/pull/533) and + [#561](https://github.com/pybind/pybind11/pull/561). + +- Mapping a stateless C++ function to Python and back is now "for free" + (i.e. no extra indirections or argument conversion overheads). [rev. + 954b79](https://github.com/pybind/pybind11/commit/954b79). + +- Bindings for `std::valarray`. + [#545](https://github.com/pybind/pybind11/pull/545). + +- Improved support for C++17 capable compilers. + [#562](https://github.com/pybind/pybind11/pull/562). + +- Bindings for `std::optional`. + [#475](https://github.com/pybind/pybind11/pull/475), + [#476](https://github.com/pybind/pybind11/pull/476), + [#479](https://github.com/pybind/pybind11/pull/479), + [#499](https://github.com/pybind/pybind11/pull/499), and + [#501](https://github.com/pybind/pybind11/pull/501). + +- `stl_bind.h`: general improvements and support for `std::map` and + `std::unordered_map`. + [#490](https://github.com/pybind/pybind11/pull/490), + [#282](https://github.com/pybind/pybind11/pull/282), + [#235](https://github.com/pybind/pybind11/pull/235). + +- The `std::tuple`, `std::pair`, `std::list`, and `std::vector` type + casters now accept any Python sequence type as input. [rev. + 107285](https://github.com/pybind/pybind11/commit/107285). + +- Improved CMake Python detection on multi-architecture Linux. + [#532](https://github.com/pybind/pybind11/pull/532). + +- Infrastructure to selectively disable or enable parts of the + automatically generated docstrings. + [#486](https://github.com/pybind/pybind11/pull/486). + +- `reference` and `reference_internal` are now the default return value + properties for static and non-static properties, respectively. + [#473](https://github.com/pybind/pybind11/pull/473). (the previous + defaults were `automatic`). + [#473](https://github.com/pybind/pybind11/pull/473). + +- Support for `std::unique_ptr` with non-default deleters or no deleter + at all (`py::nodelete`). + [#384](https://github.com/pybind/pybind11/pull/384). + +- Deprecated `handle::call()` method. The new syntax to call Python + functions is simply `handle()`. It can also be invoked explicitly via + `handle::operator()`, where `X` is an optional return value policy. + +- Print more informative error messages when `make_tuple()` or `cast()` + fail. [#262](https://github.com/pybind/pybind11/pull/262). + +- Creation of holder types for classes deriving from + `std::enable_shared_from_this<>` now also works for `const` values. + [#260](https://github.com/pybind/pybind11/pull/260). + +- `make_iterator()` improvements for better compatibility with various + types (now uses prefix increment operator); it now also accepts + iterators with different begin/end types as long as they are equality + comparable. [#247](https://github.com/pybind/pybind11/pull/247). + +- `arg()` now accepts a wider range of argument types for default + values. [#244](https://github.com/pybind/pybind11/pull/244). + +- Support `keep_alive` where the nurse object may be `None`. + [#341](https://github.com/pybind/pybind11/pull/341). + +- Added constructors for `str` and `bytes` from zero-terminated char + pointers, and from char pointers and length. Added constructors for + `str` from `bytes` and for `bytes` from `str`, which will perform + UTF-8 decoding/encoding as required. + +- Many other improvements of library internals without user-visible + changes + +## 1.8.1 (July 12, 2016) + +- Fixed a rare but potentially very severe issue when the garbage + collector ran during pybind11 type creation. + +## 1.8.0 (June 14, 2016) + +- Redesigned CMake build system which exports a convenient + `pybind11_add_module` function to parent projects. +- `std::vector<>` type bindings analogous to Boost.Python's + `indexing_suite` +- Transparent conversion of sparse and dense Eigen matrices and vectors + (`eigen.h`) +- Added an `ExtraFlags` template argument to the NumPy `array_t<>` + wrapper to disable an enforced cast that may lose precision, e.g. to + create overloads for different precisions and complex vs real-valued + matrices. +- Prevent implicit conversion of floating point values to integral types + in function arguments +- Fixed incorrect default return value policy for functions returning a + shared pointer +- Don't allow registering a type via `class_` twice +- Don't allow casting a `None` value into a C++ lvalue reference +- Fixed a crash in `enum_::operator==` that was triggered by the + `help()` command +- Improved detection of whether or not custom C++ types can be + copy/move-constructed +- Extended `str` type to also work with `bytes` instances +- Added a `"name"_a` user defined string literal that is equivalent to + `py::arg("name")`. +- When specifying function arguments via `py::arg`, the test that + verifies the number of arguments now runs at compile time. +- Added `[[noreturn]]` attribute to `pybind11_fail()` to quench some + compiler warnings +- List function arguments in exception text when the dispatch code + cannot find a matching overload +- Added `PYBIND11_OVERLOAD_NAME` and `PYBIND11_OVERLOAD_PURE_NAME` + macros which can be used to override virtual methods whose name + differs in C++ and Python (e.g. `__call__` and `operator()`) +- Various minor `iterator` and `make_iterator()` improvements +- Transparently support `__bool__` on Python 2.x and Python 3.x +- Fixed issue with destructor of unpickled object not being called +- Minor CMake build system improvements on Windows +- New `pybind11::args` and `pybind11::kwargs` types to create functions + which take an arbitrary number of arguments and keyword arguments +- New syntax to call a Python function from C++ using `*args` and + `*kwargs` +- The functions `def_property_*` now correctly process docstring + arguments (these formerly caused a segmentation fault) +- Many `mkdoc.py` improvements (enumerations, template arguments, + `DOC()` macro accepts more arguments) +- Cygwin support +- Documentation improvements (pickling support, `keep_alive`, macro + usage) + +## 1.7 (April 30, 2016) + +- Added a new `move` return value policy that triggers C++11 move + semantics. The automatic return value policy falls back to this case + whenever a rvalue reference is encountered +- Significantly more general GIL state routines that are used instead of + Python's troublesome `PyGILState_Ensure` and `PyGILState_Release` API +- Redesign of opaque types that drastically simplifies their usage +- Extended ability to pass values of type `[const] void *` +- `keep_alive` fix: don't fail when there is no patient +- `functional.h`: acquire the GIL before calling a Python function +- Added Python RAII type wrappers `none` and `iterable` +- Added `*args` and `*kwargs` pass-through parameters to + `pybind11.get_include()` function +- Iterator improvements and fixes +- Documentation on return value policies and opaque types improved + +## 1.6 (April 30, 2016) + +- Skipped due to upload to PyPI gone wrong and inability to recover + () + +## 1.5 (April 21, 2016) + +- For polymorphic types, use RTTI to try to return the closest type + registered with pybind11 +- Pickling support for serializing and unserializing C++ instances to a + byte stream in Python +- Added a convenience routine `make_iterator()` which turns a range + indicated by a pair of C++ iterators into a iterable Python object +- Added `len()` and a variadic `make_tuple()` function +- Addressed a rare issue that could confuse the current virtual function + dispatcher and another that could lead to crashes in multi-threaded + applications +- Added a `get_include()` function to the Python module that returns the + path of the directory containing the installed pybind11 header files +- Documentation improvements: import issues, symbol visibility, + pickling, limitations +- Added casting support for `std::reference_wrapper<>` + +## 1.4 (April 7, 2016) + +- Transparent type conversion for `std::wstring` and `wchar_t` +- Allow passing `nullptr`-valued strings +- Transparent passing of `void *` pointers using capsules +- Transparent support for returning values wrapped in + `std::unique_ptr<>` +- Improved docstring generation for compatibility with Sphinx +- Nicer debug error message when default parameter construction fails +- Support for "opaque" types that bypass the transparent conversion + layer for STL containers +- Redesigned type casting interface to avoid ambiguities that could + occasionally cause compiler errors +- Redesigned property implementation; fixes crashes due to an + unfortunate default return value policy +- Anaconda package generation support + +## 1.3 (March 8, 2016) + +- Added support for the Intel C++ compiler (v15+) +- Added support for the STL unordered set/map data structures +- Added support for the STL linked list data structure +- NumPy-style broadcasting support in `pybind11::vectorize` +- pybind11 now displays more verbose error messages when + `arg::operator=()` fails +- pybind11 internal data structures now live in a version-dependent + namespace to avoid ABI issues +- Many, many bugfixes involving corner cases and advanced usage + +## 1.2 (February 7, 2016) + +- Optional: efficient generation of function signatures at compile time + using C++14 +- Switched to a simpler and more general way of dealing with function + default arguments. Unused keyword arguments in function calls are now + detected and cause errors as expected +- New `keep_alive` call policy analogous to Boost.Python's + `with_custodian_and_ward` +- New `pybind11::base<>` attribute to indicate a subclass relationship +- Improved interface for RAII type wrappers in `pytypes.h` +- Use RAII type wrappers consistently within pybind11 itself. This fixes + various potential refcount leaks when exceptions occur +- Added new `bytes` RAII type wrapper (maps to `string` in Python 2.7) +- Made handle and related RAII classes const correct, using them more + consistently everywhere now +- Got rid of the ugly `__pybind11__` attributes on the Python + side---they are now stored in a C++ hash table that is not visible in + Python +- Fixed refcount leaks involving NumPy arrays and bound functions +- Vastly improved handling of shared/smart pointers +- Removed an unnecessary copy operation in `pybind11::vectorize` +- Fixed naming clashes when both pybind11 and NumPy headers are included +- Added conversions for additional exception types +- Documentation improvements (using multiple extension modules, smart + pointers, other minor clarifications) +- unified infrastructure for parsing variadic arguments in `class_` and + cpp_function +- Fixed license text (was: ZLIB, should have been: 3-clause BSD) +- Python 3.2 compatibility +- Fixed remaining issues when accessing types in another plugin module +- Added enum comparison and casting methods +- Improved SFINAE-based detection of whether types are + copy-constructible +- Eliminated many warnings about unused variables and the use of + `offsetof()` +- Support for `std::array<>` conversions + +## 1.1 (December 7, 2015) + +- Documentation improvements (GIL, wrapping functions, casting, fixed + many typos) +- Generalized conversion of integer types +- Improved support for casting function objects +- Improved support for `std::shared_ptr<>` conversions +- Initial support for `std::set<>` conversions +- Fixed type resolution issue for types defined in a separate plugin + module +- CMake build system improvements +- Factored out generic functionality to non-templated code (smaller code + size) +- Added a code size / compile time benchmark vs Boost.Python +- Added an appveyor CI script + +## 1.0 (October 15, 2015) + +- Initial release diff --git a/docs/changelog.rst b/docs/changelog.rst deleted file mode 100644 index d300fa303..000000000 --- a/docs/changelog.rst +++ /dev/null @@ -1,3568 +0,0 @@ -.. _changelog: - -Changelog -######### - -Starting with version 1.8.0, pybind11 releases use a `semantic versioning -`_ policy. - -Changes will be added here periodically from the "Suggested changelog entry" -block in pull request descriptions. - - -3.0.0 RC 1 ----------- - -We may add one more opt-in feature (embedded subinterperters) before the final -release. - -New Features: - -* The ``smart-holder`` branch has been merged, enabling ``py::class_``, which handles two-way conversion with - ``std::unique_ptr`` and ``std::shared_ptr`` (simultaneously), disowning - a Python object being passed to ``std::unique_ptr``, trampoline objects, - and ``std::enable_shared_from_this``. - `#5542 `_ - -* Changed ``PYBIND11_MODULE`` macro implementation to perform multi-phase - module initialization (PEP 489) behind the scenes. - `#5574 `_ - -* Support for sub-interpreters (both isolated (with separate GILs) and legacy - (with a global GIL). Add the - ``py::multiple_interpreters::per_interpreter_gil()`` tag (or, - ``py::multiple_interpreters::shared_gil()`` for legacy interpreter support) - to ``PYBIND11_MODULE`` calls (as the third parameter) to indicate that a - module supports running with sub-interpreters. - `#5564 `_ - -* Changed ``PYBIND11_EMBEDDED_MODULE`` macro implementation to perform - multi-phase module initialization (PEP 489) behind the scenes and to support - ``py::mod_gil_not_used()``, ``py::multiple_interpreters::per_interpreter_gil()`` - and ``py::multiple_interpreters::shared_gil()``. - `#5665 `_ - -* ``py::native_enum`` was added, for conversions between Python's native (stdlib) enum types and C++ enums. - `#5555 `_ - - * Add class doc string to ``py::native_enum``. - `#5617 `_. - - * Fix signature for functions with a native_enum in the signature. - `#5619 `_ - -* A ``py::release_gil_before_calling_cpp_dtor`` option (for ``py::class_``) was - added to resolve the long-standing issue #1446. - `#5522 `_ - -* Add ``dtype::normalized_num`` and ``dtype::num_of``. - `#5429 `_ - -* Add support for ``array_t`` and ``array_t``. - `#5427 `_ - -* Added ``py::warnings`` namespace with ``py::warnings::warn`` and - ``py::warnings::new_warning_type`` that provides the interface for Python - warnings. - `#5291 `_ - -* stl.h ``list|set|map_caster`` were made more user friendly: it is no longer - necessary to explicitly convert Python iterables to ``tuple()``, ``set()``, - or ``map()`` in many common situations. - `#4686 `_ - -* The ``array_caster`` in pybind11/stl.h was enhanced to support value types that are not default-constructible. - `#5305 `_ - -* ``pybind11/conduit/pybind11_platform_abi_id.h`` was factored out, to maximize - reusability of ``PYBIND11_PLATFORM_ABI_ID`` (for other Python/C++ binding - systems). - `#5375 `_ - -* Added support for finding pybind11 using pkgconf distributed on pypi. - `#5552 `_ - -* Support ``--extension-suffix`` on the pybind11 command. - `#5360 `_ - -* Add semi-public API: ``pybind11::detail::is_holder_constructed`` and update - example for ``pybind11::custom_type_setup`` in documentation. - `#5669 `_ - - -New Features (typing): - -* Added option for different arg/return type hints to ``type_caster``. Updated - ``stl/filesystem`` to use correct arg/return type hints. Updated - ``pybind11::typing`` to use correct arg/return type hints for nested types. - `#5450 `_ - -* Updated type hint for ``py::capsule`` to ``type.CapsuleType``. - `#5567 `_ - -* Adds support for ``typing.SupportsInt`` and ``typing.SupportsFloat``. - Update ``Final`` to be narrower type hint. Make ``std::function`` match - ``Callable`` type. Fix ``io_name`` bug in ``attr_with_type_hint``. - `#5540 `_ - -* Rework of arg/return type hints to support ``.noconvert()``. - `#5486 `_ - -* Add ``attr_with_type`` for declaring attribute types and ``Final``, ``ClassVar`` type annotations. - `#5460 `_ - -* Allow annotate methods with ``py::pos_only`` when only have the ``self`` - argument. Make arguments for auto-generated dunder methods positional-only. - `#5403 `_ - -* Added ``py::Args`` and ``py::KWArgs`` to enable custom type hinting of ``*args`` and ``**kwargs`` (see PEP 484). - `#5357 `_ - -* Switched to ``numpy.typing.NDArray`` and ``numpy.typing.ArrayLike``. - `#5212 `_ - -.. fix(types) - -* Use ``numpy.object_`` instead of ``object``. - `#5571 `_ - -* Fix module type hint. - `#5469 `_ - -* Fix Buffer type hint. - `#5662 `_ - -* Added support for ``collections.abc`` in type hints and convertible checks of STL casters and ``py::buffer``. - `#5566 `_ - - -Removals: - -* Remove support for pybind11 v2 internals versions (4, 5, 6). - (The internals version number has been bumped for pybind11 v3.) - `#5512 `_ | - `#5530 `_ - -* Remove ``make_simple_namespace`` (added in 2.8.0, deprecated in 2.8.1). - `#5597 `_ - -* Legacy-mode option ``PYBIND11_NUMPY_1_ONLY`` has been removed. - `#5595 `_ - -* Add a deprecation warning to ``.get_type`` (deprecated in pybind11 2.6 in 2020). - `#5596 `_ - - -Bug fixes: - -* Set ``__file__`` on submodules. - `#5584 `_. Except on embedded modules. `#5650 `_ - -* pybind11-bound functions are now pickleable. - `#5580 `_ - -* Fix bug in ``attr_with_type_hint`` to allow objects to be in ``attr_with_type_hint``. - `#5576 `_ - -* A ``-Wmaybe-uninitialized`` warning suppression was added in ``pybind11/eigen/matrix.h``. - `#5516 `_ - -* ``PYBIND11_WARNING_POP`` was incorrectly defined as ``PYBIND11_PRAGMA(clang diagnostic push)``. - `#5448 `_ - -* ``PYBIND11_PLATFORM_ABI_ID`` (which is used in composing ``PYBIND11_INTERNALS_ID``) was modernized to reflect actual ABI compatibility more accurately. - `#4953 `_ | - `#5439 `_ - -* Fix buffer protocol implementation. - `#5407 `_ - -* Fix iterator increment operator does not skip first item. - `#5400 `_ - -* When getting or deleting an element in a container bound by ``bind_map``, print the key in ``KeyError`` if it does not exist. - `#5397 `_ - -* ``pybind11::builtin_exception`` is now explicitly exported when linked to libc++. - `#5390 `_ - -* Allow subclasses of ``py::args`` and ``py::kwargs``. - `#5381 `_ - -* Disable false-positive GCC 12 Bound Check warning. - `#5355 `_ - -* fix: using ``__cpp_nontype_template_args`` instead of ``__cpp_nontype_template_parameter_class``. - `#5330 `_ - -* Properly translate C++ exception to Python exception when creating Python buffer from wrapped object. - `#5324 `_ - -* Update the dict when restoring pickles, instead of assigning a replacement dict. - `#5658 `_ - -* Properly define ``_DEBUG`` macro to ``1`` instead of defining it without value. - `#5639 `_ - -* Fix a missing time cast causing a compile error for newer ICC. - `#5621 `_ - -* Change the behavior of the default constructor of ``py::slice`` to be equivalent to ``::`` in Python. - `#5620 `_ - - -Bug fixes (CMake): - -* (CMake) Enable FindPython mode by default, with a ``COMPAT`` mode that sets - some of the old variables to ease transition. - `#5553 `_ - -* Add an author warning that auto-calculated ``PYTHON_MODULE_EXTENSION`` may not respect ``SETUPTOOLS_EXT_SUFFIX`` during cross-compilation. - `#5495 `_ - -* Don't strip with ``CMAKE_BUILD_TYPE`` None. - `#5392 `_ - -* Fix an issue with ``NO_EXTRAS`` adding ``pybind11::windows_extras`` anyway. - `#5378 `_ - -* Fix issue with NEW/OLD message showing up. - `#5656 `_ - -* Use CMake's warnings as errors if available (CMake 3.24+). - `#5612 `_ - -* Add support for running pybind11's tests via presets in CMake 3.25+. - `#5655 `_ - -* Restructure venv support to support ``--fresh``, make in build folder. - `#5668 `_ - - -Bug fixes (free-threading): - -* Fix data race in free threaded CPython when accessing a shared static variable. - `#5494 `_ - -* A free-threading data race in ``all_type_info()`` was fixed. - `#5419 `_ - -* Added exception translator specific mutex used with ``try_translate_exceptions`` in the free-threaded build for internal locking. - `#5362 `_ - - -Internals: - -* Consolidated all ``PYBIND11_HAS_...`` feature macros into ``pybind11/detail/common.h`` to streamline backward compatibility checks and simplify internal refactoring. This change ensures -consistent macro availability regardless of header inclusion order. - `#5647 `_ - -* ``pybind11/gil_simple.h`` was factored out from ``pybind11/gil.h``, so that it can easily be reused. - `#5614 `_ - - -Documentation: - -* Improved ``reference_internal`` policy documentation. - `#5528 `_ - -* A new "Double locking, deadlocking, GIL" document was added. - `#5394 `_ - -* Adds an answer (FAQ) for "What is a highly conclusive and simple way to find memory leaks?". - `#5340 `_ - -* Add documenting for free-threading and subinterpreters. - `#5659 `_ - - -Tests: - -* Download the final Catch2 2.x release if Catch download is requested. - `#5568 `_ - -* Explicitly used ``signed char`` for two numpy dtype tests. As seen when -compiling using ``clang`` on Linux with the ``-funsigned-char`` flag. - `#5545 `_ - -* Test PyPy3.11 in CI. - `#5534 `_ - -* CI testing now includes ``-Wwrite-strings -Wunreachable-code -Wpointer-arith -Wredundant-decls`` in some jobs. - `#5523 `_ - - -New and removed platforms: - -* Support Python 3.14 (beta 1). - `#5646 `_ - -* Added support for GraalPy Python implementation (https://github.com/oracle/graalpython). - `#5380 `_ - -* Support for PyPy 3.11 added. - `#5508 `_ - -* Support for PyPy 3.8 and 3.9 was dropped. - `#5578 `_ - -* Support for Python 3.7 was removed. (Official end-of-life: 2023-06-27). - `#5191 `_ - -* Support for CMake older than 3.15 removed. CMake 3.15-4.0 supported. - `#5304 `_ - -* Use scikit-build-core for the build backend for the PyPI ``pybind11``. The CMake generation has been moved to the sdist->wheel step. ``PYBIND11_GLOBAL_PREFIX`` has been removed. - `#5598 `_ - - -Version 2.13.6 (September 13, 2024) ------------------------------------ - -New Features: - -* A new ``self._pybind11_conduit_v1_()`` method is automatically added to all - ``py::class_``-wrapped types, to enable type-safe interoperability between - different independent Python/C++ bindings systems, including pybind11 - versions with different ``PYBIND11_INTERNALS_VERSION``'s. Supported on - pybind11 2.11.2, 2.12.1, and 2.13.6+. - `#5296 `_ - - -Bug fixes: - -* Using ``__cpp_nontype_template_args`` instead of ``__cpp_nontype_template_parameter_class``. - `#5330 `_ - -* Properly translate C++ exception to Python exception when creating Python buffer from wrapped object. - `#5324 `_ - - -Documentation: - -* Adds an answer (FAQ) for "What is a highly conclusive and simple way to find memory leaks?". - `#5340 `_ - - -Version 2.13.5 (August 22, 2024) --------------------------------- - -Bug fixes: - -* Fix includes when using Windows long paths (``\\?\`` prefix). - `#5321 `_ - -* Support ``-Wpedantic`` in C++20 mode. - `#5322 `_ - -* Fix and test ```` support for ``py::tuple`` and ``py::list``. - `#5314 `_ - -Version 2.13.4 (August 14, 2024) --------------------------------- - -Bug fixes: - -* Fix paths with spaces, including on Windows. - (Replaces regression from `#5302 `_) - `#4874 `_ - -Documentation: - -* Remove repetitive words. - `#5308 `_ - - -Version 2.13.3 (August 13, 2024) --------------------------------- - -Bug fixes: - -* Quote paths from pybind11-config - `#5302 `_ - - -* Fix typo in Emscripten support when in config mode (CMake) - `#5301 `_ - - -Version 2.13.2 (August 13, 2024) --------------------------------- - -New Features: - -* A ``pybind11::detail::type_caster_std_function_specializations`` feature was added, to support specializations for - ``std::function``'s with return types that require custom to-Python conversion behavior (to primary use case is to catch and - convert exceptions). - `#4597 `_ - - -Changes: - - -* Use ``PyMutex`` instead of ``std::mutex`` for internal locking in the free-threaded build. - `#5219 `_ - -* Add a special type annotation for C++ empty tuple. - `#5214 `_ - -* When compiling for WebAssembly, add the required exception flags (CMake 3.13+). - `#5298 `_ - -Bug fixes: - -* Make ``gil_safe_call_once_and_store`` thread-safe in free-threaded CPython. - `#5246 `_ - -* A missing ``#include `` in pybind11/typing.h was added to fix build errors (in case user code does not already depend - on that include). - `#5208 `_ - -* Fix regression introduced in #5201 for GCC<10.3 in C++20 mode. - `#5205 `_ - - -.. fix(cmake) - -* Remove extra = when assigning flto value in the case for Clang in CMake. - `#5207 `_ - - -Tests: - -* Adding WASM testing to our CI (Pyodide / Emscripten via scikit-build-core). - `#4745 `_ - -* clang-tidy (in GitHub Actions) was updated from clang 15 to clang 18. - `#5272 `_ - - -Version 2.13.1 (June 26, 2024) ------------------------------- - -New Features: - -* Add support for ``Typing.Callable[..., T]``. - `#5202 `_ - -Bug fixes: - -* Avoid aligned allocation in free-threaded build in order to support macOS - versions before 10.14. - `#5200 `_ - -Version 2.13.0 (June 25, 2024) ------------------------------- - -New Features: - -* Support free-threaded CPython (3.13t). Add ``py::mod_gil_not_used()`` tag to - indicate if a module supports running with the GIL disabled. - `#5148 `_ - -* Support for Python 3.6 was removed. (Official end-of-life: 2021-12-23). - `#5177 `_ - -* ``py::list`` gained a ``.clear()`` method. - `#5153 `_ - - -.. feat(types) - -* Support for ``Union``, ``Optional``, ``type[T]``, ``typing.TypeGuard``, - ``typing.TypeIs``, ``typing.Never``, ``typing.NoReturn`` and - ``typing.Literal`` was added to ``pybind11/typing.h``. - `#5166 `_ - `#5165 `_ - `#5194 `_ - `#5193 `_ - `#5192 `_ - - -.. feat(cmake) - -* In CMake, if ``PYBIND11_USE_CROSSCOMPILING`` is enabled, then - ``CMAKE_CROSSCOMPILING`` will be respected and will keep pybind11 from - accessing the interpreter during configuration. Several CMake variables will - be required in this case, but can be deduced from the environment variable - ``SETUPTOOLS_EXT_SUFFIX``. The default (currently ``OFF``) may be changed in - the future. - `#5083 `_ - - -Bug fixes: - -* A refcount bug (leading to heap-use-after-free) involving trampoline - functions with ``PyObject *`` return type was fixed. - `#5156 `_ - -* Return ``py::ssize_t`` from ``.ref_count()`` instead of ``int``. - `#5139 `_ - -* A subtle bug involving C++ types with unusual ``operator&`` overrides - was fixed. - `#5189 `_ - -* Support Python 3.13 with minor fix, add to CI. - `#5127 `_ - - -.. fix(cmake) - -* Fix mistake affecting old cmake and old boost. - `#5149 `_ - - -Documentation: - -* Build docs updated to feature scikit-build-core and meson-python, and updated - setuptools instructions. - `#5168 `_ - - -Tests: - -* Avoid immortal objects in tests. - `#5150 `_ - - -CI: - -* Compile against Python 3.13t in CI. - -* Use ``macos-13`` (Intel) for CI jobs for now (will drop Python 3.7 soon). - `#5109 `_ - -* Releases now have artifact attestations, visible at - https://github.com/pybind/pybind11/attestations. - `#5196 `_ - -Other: - -* Some cleanup in preparation for 3.13 support. - `#5137 `_ - -* Avoid a warning by ensuring an iterator end check is included in release mode. - `#5129 `_ - -* Bump max cmake to 3.29. - `#5075 `_ - -* Update docs and noxfile. - `#5071 `_ - -Version 2.12.1 (September 13, 2024) ------------------------------------ - -New Features: - -* A new ``self._pybind11_conduit_v1_()`` method is automatically added to all - ``py::class_``-wrapped types, to enable type-safe interoperability between - different independent Python/C++ bindings systems, including pybind11 - versions with different ``PYBIND11_INTERNALS_VERSION``'s. Supported on - pybind11 2.11.2, 2.12.1, and 2.13.6+. - `#5296 `_ - - -Version 2.12.0 (March 27, 2024) -------------------------------- - -New Features: - -* ``pybind11`` now supports compiling for - `NumPy 2 `_. Most - code shouldn't change (see :ref:`upgrade-guide-2.12` for details). However, - if you experience issues you can define ``PYBIND11_NUMPY_1_ONLY`` to disable - the new support for now, but this will be removed in the future. - `#5050 `_ - -* ``pybind11/gil_safe_call_once.h`` was added (it needs to be included - explicitly). The primary use case is GIL-safe initialization of C++ - ``static`` variables. - `#4877 `_ - -* Support move-only iterators in ``py::make_iterator``, - ``py::make_key_iterator``, ``py::make_value_iterator``. - `#4834 `_ - -* Two simple ``py::set_error()`` functions were added and the documentation was - updated accordingly. In particular, ``py::exception<>::operator()`` was - deprecated (use one of the new functions instead). The documentation for - ``py::exception<>`` was further updated to not suggest code that may result - in undefined behavior. - `#4772 `_ - -Bug fixes: - -* Removes potential for Undefined Behavior during process teardown. - `#4897 `_ - -* Improve compatibility with the nvcc compiler (especially CUDA 12.1/12.2). - `#4893 `_ - -* ``pybind11/numpy.h`` now imports NumPy's ``multiarray`` and ``_internal`` - submodules with paths depending on the installed version of NumPy (for - compatibility with NumPy 2). - `#4857 `_ - -* Builtins collections names in docstrings are now consistently rendered in - lowercase (list, set, dict, tuple), in accordance with PEP 585. - `#4833 `_ - -* Added ``py::typing::Iterator``, ``py::typing::Iterable``. - `#4832 `_ - -* Render ``py::function`` as ``Callable`` in docstring. - `#4829 `_ - -* Also bump ``PYBIND11_INTERNALS_VERSION`` for MSVC, which unlocks two new - features without creating additional incompatibilities. - `#4819 `_ - -* Guard against crashes/corruptions caused by modules built with different MSVC - versions. - `#4779 `_ - -* A long-standing bug in the handling of Python multiple inheritance was fixed. - See PR #4762 for the rather complex details. - `#4762 `_ - -* Fix ``bind_map`` with ``using`` declarations. - `#4952 `_ - -* Qualify ``py::detail::concat`` usage to avoid ADL selecting one from - somewhere else, such as modernjson's concat. - `#4955 `_ - -* Use new PyCode API on Python 3.12+. - `#4916 `_ - -* Minor cleanup from warnings reported by Clazy. - `#4988 `_ - -* Remove typing and duplicate ``class_`` for ``KeysView``/``ValuesView``/``ItemsView``. - `#4985 `_ - -* Use ``PyObject_VisitManagedDict()`` and ``PyObject_ClearManagedDict()`` on Python 3.13 and newer. - `#4973 `_ - -* Update ``make_static_property_type()`` to make it compatible with Python 3.13. - `#4971 `_ - -.. fix(types) - -* Render typed iterators for ``make_iterator``, ``make_key_iterator``, - ``make_value_iterator``. - `#4876 `_ - -* Add several missing type name specializations. - `#5073 `_ - -* Change docstring render for ``py::buffer``, ``py::sequence`` and - ``py::handle`` (to ``Buffer``, ``Sequence``, ``Any``). - `#4831 `_ - -* Fixed ``base_enum.__str__`` docstring. - `#4827 `_ - -* Enforce single line docstring signatures. - `#4735 `_ - -* Special 'typed' wrappers now available in ``typing.h`` to annotate tuple, dict, - list, set, and function. - `#4259 `_ - -* Create ``handle_type_name`` specialization to type-hint variable length tuples. - `#5051 `_ - -.. fix(build) - -* Setting ``PYBIND11_FINDPYTHON`` to OFF will force the old FindPythonLibs mechanism to be used. - `#5042 `_ - -* Skip empty ``PYBIND11_PYTHON_EXECUTABLE_LAST`` for the first cmake run. - `#4856 `_ - -* Fix FindPython mode exports & avoid ``pkg_resources`` if - ``importlib.metadata`` available. - `#4941 `_ - -* ``Python_ADDITIONAL_VERSIONS`` (classic search) now includes 3.12. - `#4909 `_ - -* ``pybind11.pc`` is now relocatable by default as long as install destinations - are not absolute paths. - `#4830 `_ - -* Correctly detect CMake FindPython removal when used as a subdirectory. - `#4806 `_ - -* Don't require the libs component on CMake 3.18+ when using - PYBIND11_FINDPYTHON (fixes manylinux builds). - `#4805 `_ - -* ``pybind11_strip`` is no longer automatically applied when - ``CMAKE_BUILD_TYPE`` is unset. - `#4780 `_ - -* Support ``DEBUG_POSFIX`` correctly for debug builds. - `#4761 `_ - -* Hardcode lto/thin lto for Emscripten cross-compiles. - `#4642 `_ - -* Upgrade maximum supported CMake version to 3.27 to fix CMP0148 warnings. - `#4786 `_ - -Documentation: - -* Small fix to grammar in ``functions.rst``. - `#4791 `_ - -* Remove upper bound in example pyproject.toml for setuptools. - `#4774 `_ - -CI: - -* CI: Update NVHPC to 23.5 and Ubuntu 20.04. - `#4764 `_ - -* Test on PyPy 3.10. - `#4714 `_ - -Other: - -* Use Ruff formatter instead of Black. - `#4912 `_ - -* An ``assert()`` was added to help Coverty avoid generating a false positive. - `#4817 `_ - -Version 2.11.2 (September 13, 2024) ------------------------------------ - -New Features: - -* A new ``self._pybind11_conduit_v1_()`` method is automatically added to all - ``py::class_``-wrapped types, to enable type-safe interoperability between - different independent Python/C++ bindings systems, including pybind11 - versions with different ``PYBIND11_INTERNALS_VERSION``'s. Supported on - pybind11 2.11.2, 2.12.1, and 2.13.6+. - `#5296 `_ - - -Version 2.11.1 (July 17, 2023) ------------------------------- - -Changes: - -* ``PYBIND11_NO_ASSERT_GIL_HELD_INCREF_DECREF`` is now provided as an option - for disabling the default-on ``PyGILState_Check()``'s in - ``pybind11::handle``'s ``inc_ref()`` & ``dec_ref()``. - `#4753 `_ - -* ``PYBIND11_ASSERT_GIL_HELD_INCREF_DECREF`` was disabled for PyPy in general - (not just PyPy Windows). - `#4751 `_ - - -Version 2.11.0 (July 14, 2023) ------------------------------- - -New features: - -* The newly added ``pybind11::detail::is_move_constructible`` trait can be - specialized for cases in which ``std::is_move_constructible`` does not work - as needed. This is very similar to the long-established - ``pybind11::detail::is_copy_constructible``. - `#4631 `_ - -* Introduce ``recursive_container_traits``. - `#4623 `_ - -* ``pybind11/type_caster_pyobject_ptr.h`` was added to support automatic - wrapping of APIs that make use of ``PyObject *``. This header needs to - included explicitly (i.e. it is not included implicitly - with ``pybind/pybind11.h``). - `#4601 `_ - -* ``format_descriptor<>`` & ``npy_format_descriptor<>`` ``PyObject *`` - specializations were added. The latter enables ``py::array_t`` - to/from-python conversions. - `#4674 `_ - -* ``buffer_info`` gained an ``item_type_is_equivalent_to()`` member - function. - `#4674 `_ - -* The ``capsule`` API gained a user-friendly constructor - (``py::capsule(ptr, "name", dtor)``). - `#4720 `_ - -Changes: - -* ``PyGILState_Check()``'s in ``pybind11::handle``'s ``inc_ref()`` & - ``dec_ref()`` are now enabled by default again. - `#4246 `_ - -* ``py::initialize_interpreter()`` using ``PyConfig_InitPythonConfig()`` - instead of ``PyConfig_InitIsolatedConfig()``, to obtain complete - ``sys.path``. - `#4473 `_ - -* Cast errors now always include Python type information, even if - ``PYBIND11_DETAILED_ERROR_MESSAGES`` is not defined. This increases binary - sizes slightly (~1.5%) but the error messages are much more informative. - `#4463 `_ - -* The docstring generation for the ``std::array``-list caster was fixed. - Previously, signatures included the size of the list in a non-standard, - non-spec compliant way. The new format conforms to PEP 593. - **Tooling for processing the docstrings may need to be updated accordingly.** - `#4679 `_ - -* Setter return values (which are inaccessible for all practical purposes) are - no longer converted to Python (only to be discarded). - `#4621 `_ - -* Allow lambda specified to function definition to be ``noexcept(true)`` - in C++17. - `#4593 `_ - -* Get rid of recursive template instantiations for concatenating type - signatures on C++17 and higher. - `#4587 `_ - -* Compatibility with Python 3.12 (beta). Note that the minimum pybind11 - ABI version for Python 3.12 is version 5. (The default ABI version - for Python versions up to and including 3.11 is still version 4.). - `#4570 `_ - -* With ``PYBIND11_INTERNALS_VERSION 5`` (default for Python 3.12+), MSVC builds - use ``std::hash`` and ``std::equal_to`` - instead of string-based type comparisons. This resolves issues when binding - types defined in the unnamed namespace. - `#4319 `_ - -* Python exception ``__notes__`` (introduced with Python 3.11) are now added to - the ``error_already_set::what()`` output. - `#4678 `_ - -Build system improvements: - -* CMake 3.27 support was added, CMake 3.4 support was dropped. - FindPython will be used if ``FindPythonInterp`` is not present. - `#4719 `_ - -* Update clang-tidy to 15 in CI. - `#4387 `_ - -* Moved the linting framework over to Ruff. - `#4483 `_ - -* Skip ``lto`` checks and target generation when - ``CMAKE_INTERPROCEDURAL_OPTIMIZATION`` is defined. - `#4643 `_ - -* No longer inject ``-stdlib=libc++``, not needed for modern Pythons - (macOS 10.9+). - `#4639 `_ - -* PyPy 3.10 support was added, PyPy 3.7 support was dropped. - `#4728 `_ - -* Testing with Python 3.12 beta releases was added. - `#4713 `_ - - -Version 2.10.4 (Mar 16, 2023) ------------------------------ - -Changes: - -* ``python3 -m pybind11`` gained a ``--version`` option (prints the version and - exits). - `#4526 `_ - -Bug Fixes: - -* Fix a warning when pydebug is enabled on Python 3.11. - `#4461 `_ - -* Ensure ``gil_scoped_release`` RAII is non-copyable. - `#4490 `_ - -* Ensure the tests dir does not show up with new versions of setuptools. - `#4510 `_ - -* Better stacklevel for a warning in setuptools helpers. - `#4516 `_ - -Version 2.10.3 (Jan 3, 2023) ----------------------------- - -Changes: - -* Temporarily made our GIL status assertions (added in 2.10.2) disabled by - default (re-enable manually by defining - ``PYBIND11_ASSERT_GIL_HELD_INCREF_DECREF``, will be enabled in 2.11). - `#4432 `_ - -* Improved error messages when ``inc_ref``/``dec_ref`` are called with an - invalid GIL state. - `#4427 `_ - `#4436 `_ - -Bug Fixes: - -* Some minor touchups found by static analyzers. - `#4440 `_ - - -Version 2.10.2 (Dec 20, 2022) ------------------------------ - -Changes: - -* ``scoped_interpreter`` constructor taking ``PyConfig``. - `#4330 `_ - -* ``pybind11/eigen/tensor.h`` adds converters to and from ``Eigen::Tensor`` and - ``Eigen::TensorMap``. - `#4201 `_ - -* ``PyGILState_Check()``'s were integrated to ``pybind11::handle`` - ``inc_ref()`` & ``dec_ref()``. The added GIL checks are guarded by - ``PYBIND11_ASSERT_GIL_HELD_INCREF_DECREF``, which is the default only if - ``NDEBUG`` is not defined. (Made non-default in 2.10.3, will be active in 2.11) - `#4246 `_ - -* Add option for enable/disable enum members in docstring. - `#2768 `_ - -* Fixed typing of ``KeysView``, ``ValuesView`` and ``ItemsView`` in ``bind_map``. - `#4353 `_ - -Bug fixes: - -* Bug fix affecting only Python 3.6 under very specific, uncommon conditions: - move ``PyEval_InitThreads()`` call to the correct location. - `#4350 `_ - -* Fix segfault bug when passing foreign native functions to functional.h. - `#4254 `_ - -Build system improvements: - -* Support setting PYTHON_LIBRARIES manually for Windows ARM cross-compilation - (classic mode). - `#4406 `_ - -* Extend IPO/LTO detection for ICX (a.k.a IntelLLVM) compiler. - `#4402 `_ - -* Allow calling ``find_package(pybind11 CONFIG)`` multiple times from separate - directories in the same CMake project and properly link Python (new mode). - `#4401 `_ - -* ``multiprocessing_set_spawn`` in pytest fixture for added safety. - `#4377 `_ - -* Fixed a bug in two pybind11/tools cmake scripts causing "Unknown arguments specified" errors. - `#4327 `_ - - - -Version 2.10.1 (Oct 31, 2022) ------------------------------ - -This is the first version to fully support embedding the newly released Python 3.11. - -Changes: - -* Allow ``pybind11::capsule`` constructor to take null destructor pointers. - `#4221 `_ - -* ``embed.h`` was changed so that ``PYTHONPATH`` is used also with Python 3.11 - (established behavior). - `#4119 `_ - -* A ``PYBIND11_SIMPLE_GIL_MANAGEMENT`` option was added (cmake, C++ define), - along with many additional tests in ``test_gil_scoped.py``. The option may be - useful to try when debugging GIL-related issues, to determine if the more - complex default implementation is or is not to blame. See #4216 for - background. WARNING: Please be careful to not create ODR violations when - using the option: everything that is linked together with mutual symbol - visibility needs to be rebuilt. - `#4216 `_ - -* ``PYBIND11_EXPORT_EXCEPTION`` was made non-empty only under macOS. This makes - Linux builds safer, and enables the removal of warning suppression pragmas for - Windows. - `#4298 `_ - -Bug fixes: - -* Fixed a bug where ``UnicodeDecodeError`` was not propagated from various - ``py::str`` ctors when decoding surrogate utf characters. - `#4294 `_ - -* Revert perfect forwarding for ``make_iterator``. This broke at least one - valid use case. May revisit later. - `#4234 `_ - -* Fix support for safe casts to ``void*`` (regression in 2.10.0). - `#4275 `_ - -* Fix ``char8_t`` support (regression in 2.9). - `#4278 `_ - -* Unicode surrogate character in Python exception message leads to process - termination in ``error_already_set::what()``. - `#4297 `_ - -* Fix MSVC 2019 v.1924 & C++14 mode error for ``overload_cast``. - `#4188 `_ - -* Make augmented assignment operators non-const for the object-api. Behavior - was previously broken for augmented assignment operators. - `#4065 `_ - -* Add proper error checking to C++ bindings for Python list append and insert. - `#4208 `_ - -* Work-around for Nvidia's CUDA nvcc compiler in versions 11.4.0 - 11.8.0. - `#4220 `_ - -* A workaround for PyPy was added in the ``py::error_already_set`` - implementation, related to PR `#1895 `_ - released with v2.10.0. - `#4079 `_ - -* Fixed compiler errors when C++23 ``std::forward_like`` is available. - `#4136 `_ - -* Properly raise exceptions in contains methods (like when an object in unhashable). - `#4209 `_ - -* Further improve another error in exception handling. - `#4232 `_ - -* ``get_local_internals()`` was made compatible with - ``finalize_interpreter()``, fixing potential freezes during interpreter - finalization. - `#4192 `_ - -Performance and style: - -* Reserve space in set and STL map casters if possible. This will prevent - unnecessary rehashing / resizing by knowing the number of keys ahead of time - for Python to C++ casting. This improvement will greatly speed up the casting - of large unordered maps and sets. - `#4194 `_ - -* GIL RAII scopes are non-copyable to avoid potential bugs. - `#4183 `_ - -* Explicitly default all relevant ctors for pytypes in the ``PYBIND11_OBJECT`` - macros and enforce the clang-tidy checks ``modernize-use-equals-default`` in - macros as well. - `#4017 `_ - -* Optimize iterator advancement in C++ bindings. - `#4237 `_ - -* Use the modern ``PyObject_GenericGetDict`` and ``PyObject_GenericSetDict`` - for handling dynamic attribute dictionaries. - `#4106 `_ - -* Document that users should use ``PYBIND11_NAMESPACE`` instead of using ``pybind11`` when - opening namespaces. Using namespace declarations and namespace qualification - remain the same as ``pybind11``. This is done to ensure consistent symbol - visibility. - `#4098 `_ - -* Mark ``detail::forward_like`` as constexpr. - `#4147 `_ - -* Optimize unpacking_collector when processing ``arg_v`` arguments. - `#4219 `_ - -* Optimize casting C++ object to ``None``. - `#4269 `_ - - -Build system improvements: - -* CMake: revert overwrite behavior, now opt-in with ``PYBIND11_PYTHONLIBS_OVERRWRITE OFF``. - `#4195 `_ - -* Include a pkg-config file when installing pybind11, such as in the Python - package. - `#4077 `_ - -* Avoid stripping debug symbols when ``CMAKE_BUILD_TYPE`` is set to ``DEBUG`` - instead of ``Debug``. - `#4078 `_ - -* Followup to `#3948 `_, fixing vcpkg again. - `#4123 `_ - -Version 2.10.0 (Jul 15, 2022) ------------------------------ - -Removed support for Python 2.7, Python 3.5, and MSVC 2015. Support for MSVC -2017 is limited due to availability of CI runners; we highly recommend MSVC -2019 or 2022 be used. Initial support added for Python 3.11. - -New features: - -* ``py::anyset`` & ``py::frozenset`` were added, with copying (cast) to - ``std::set`` (similar to ``set``). - `#3901 `_ - -* Support bytearray casting to string. - `#3707 `_ - -* ``type_caster`` was added. ``std::monostate`` is a tag type - that allows ``std::variant`` to act as an optional, or allows default - construction of a ``std::variant`` holding a non-default constructible type. - `#3818 `_ - -* ``pybind11::capsule::set_name`` added to mutate the name of the capsule instance. - `#3866 `_ - -* NumPy: dtype constructor from type number added, accessors corresponding to - Python API ``dtype.num``, ``dtype.byteorder``, ``dtype.flags`` and - ``dtype.alignment`` added. - `#3868 `_ - - -Changes: - -* Python 3.6 is now the minimum supported version. - `#3688 `_ - `#3719 `_ - -* The minimum version for MSVC is now 2017. - `#3722 `_ - -* Fix issues with CPython 3.11 betas and add to supported test matrix. - `#3923 `_ - -* ``error_already_set`` is now safer and more performant, especially for - exceptions with long tracebacks, by delaying computation. - `#1895 `_ - -* Improve exception handling in python ``str`` bindings. - `#3826 `_ - -* The bindings for capsules now have more consistent exception handling. - `#3825 `_ - -* ``PYBIND11_OBJECT_CVT`` and ``PYBIND11_OBJECT_CVT_DEFAULT`` macro can now be - used to define classes in namespaces other than pybind11. - `#3797 `_ - -* Error printing code now uses ``PYBIND11_DETAILED_ERROR_MESSAGES`` instead of - requiring ``NDEBUG``, allowing use with release builds if desired. - `#3913 `_ - -* Implicit conversion of the literal ``0`` to ``pybind11::handle`` is now disabled. - `#4008 `_ - - -Bug fixes: - -* Fix exception handling when ``pybind11::weakref()`` fails. - `#3739 `_ - -* ``module_::def_submodule`` was missing proper error handling. This is fixed now. - `#3973 `_ - -* The behavior or ``error_already_set`` was made safer and the highly opaque - "Unknown internal error occurred" message was replaced with a more helpful - message. - `#3982 `_ - -* ``error_already_set::what()`` now handles non-normalized exceptions correctly. - `#3971 `_ - -* Support older C++ compilers where filesystem is not yet part of the standard - library and is instead included in ``std::experimental::filesystem``. - `#3840 `_ - -* Fix ``-Wfree-nonheap-object`` warnings produced by GCC by avoiding returning - pointers to static objects with ``return_value_policy::take_ownership``. - `#3946 `_ - -* Fix cast from pytype rvalue to another pytype. - `#3949 `_ - -* Ensure proper behavior when garbage collecting classes with dynamic attributes in Python >=3.9. - `#4051 `_ - -* A couple long-standing ``PYBIND11_NAMESPACE`` - ``__attribute__((visibility("hidden")))`` inconsistencies are now fixed - (affects only unusual environments). - `#4043 `_ - -* ``pybind11::detail::get_internals()`` is now resilient to in-flight Python - exceptions. - `#3981 `_ - -* Arrays with a dimension of size 0 are now properly converted to dynamic Eigen - matrices (more common in NumPy 1.23). - `#4038 `_ - -* Avoid catching unrelated errors when importing NumPy. - `#3974 `_ - -Performance and style: - -* Added an accessor overload of ``(object &&key)`` to reference steal the - object when using python types as keys. This prevents unnecessary reference - count overhead for attr, dictionary, tuple, and sequence look ups. Added - additional regression tests. Fixed a performance bug the caused accessor - assignments to potentially perform unnecessary copies. - `#3970 `_ - -* Perfect forward all args of ``make_iterator``. - `#3980 `_ - -* Avoid potential bug in pycapsule destructor by adding an ``error_guard`` to - one of the dtors. - `#3958 `_ - -* Optimize dictionary access in ``strip_padding`` for numpy. - `#3994 `_ - -* ``stl_bind.h`` bindings now take slice args as a const-ref. - `#3852 `_ - -* Made slice constructor more consistent, and improve performance of some - casters by allowing reference stealing. - `#3845 `_ - -* Change numpy dtype from_args method to use const ref. - `#3878 `_ - -* Follow rule of three to ensure ``PyErr_Restore`` is called only once. - `#3872 `_ - -* Added missing perfect forwarding for ``make_iterator`` functions. - `#3860 `_ - -* Optimize c++ to python function casting by using the rvalue caster. - `#3966 `_ - -* Optimize Eigen sparse matrix casting by removing unnecessary temporary. - `#4064 `_ - -* Avoid potential implicit copy/assignment constructors causing double free in - ``strdup_gaurd``. - `#3905 `_ - -* Enable clang-tidy checks ``misc-definitions-in-headers``, - ``modernize-loop-convert``, and ``modernize-use-nullptr``. - `#3881 `_ - `#3988 `_ - - -Build system improvements: - -* CMake: Fix file extension on Windows with cp36 and cp37 using FindPython. - `#3919 `_ - -* CMake: Support multiple Python targets (such as on vcpkg). - `#3948 `_ - -* CMake: Fix issue with NVCC on Windows. - `#3947 `_ - -* CMake: Drop the bitness check on cross compiles (like targeting WebAssembly - via Emscripten). - `#3959 `_ - -* Add MSVC builds in debug mode to CI. - `#3784 `_ - -* MSVC 2022 C++20 coverage was added to GitHub Actions, including Eigen. - `#3732 `_, - `#3741 `_ - - -Backend and tidying up: - -* New theme for the documentation. - `#3109 `_ - -* Remove idioms in code comments. Use more inclusive language. - `#3809 `_ - -* ``#include `` was removed from the ``pybind11/stl.h`` header. Your - project may break if it has a transitive dependency on this include. The fix - is to "Include What You Use". - `#3928 `_ - -* Avoid ``setup.py `` usage in internal tests. - `#3734 `_ - - -Version 2.9.2 (Mar 29, 2022) ----------------------------- - -Changes: - -* Enum now has an ``__index__`` method on Python <3.8 too. - `#3700 `_ - -* Local internals are now cleared after finalizing the interpreter. - `#3744 `_ - -Bug fixes: - -* Better support for Python 3.11 alphas. - `#3694 `_ - -* ``PYBIND11_TYPE_CASTER`` now uses fully qualified symbols, so it can be used - outside of ``pybind11::detail``. - `#3758 `_ - -* Some fixes for PyPy 3.9. - `#3768 `_ - -* Fixed a potential memleak in PyPy in ``get_type_override``. - `#3774 `_ - -* Fix usage of ``VISIBILITY_INLINES_HIDDEN``. - `#3721 `_ - - -Build system improvements: - -* Uses ``sysconfig`` module to determine installation locations on Python >= - 3.10, instead of ``distutils`` which has been deprecated. - `#3764 `_ - -* Support Catch 2.13.5+ (supporting GLIBC 2.34+). - `#3679 `_ - -* Fix test failures with numpy 1.22 by ignoring whitespace when comparing - ``str()`` of dtypes. - `#3682 `_ - - -Backend and tidying up: - -* clang-tidy: added ``readability-qualified-auto``, - ``readability-braces-around-statements``, - ``cppcoreguidelines-prefer-member-initializer``, - ``clang-analyzer-optin.performance.Padding``, - ``cppcoreguidelines-pro-type-static-cast-downcast``, and - ``readability-inconsistent-declaration-parameter-name``. - `#3702 `_, - `#3699 `_, - `#3716 `_, - `#3709 `_ - -* clang-format was added to the pre-commit actions, and the entire code base - automatically reformatted (after several iterations preparing for this leap). - `#3713 `_ - - -Version 2.9.1 (Feb 2, 2022) ---------------------------- - -Changes: - -* If possible, attach Python exception with ``py::raise_from`` to ``TypeError`` - when casting from C++ to Python. This will give additional info if Python - exceptions occur in the caster. Adds a test case of trying to convert a set - from C++ to Python when the hash function is not defined in Python. - `#3605 `_ - -* Add a mapping of C++11 nested exceptions to their Python exception - equivalent using ``py::raise_from``. This attaches the nested exceptions in - Python using the ``__cause__`` field. - `#3608 `_ - -* Propagate Python exception traceback using ``raise_from`` if a pybind11 - function runs out of overloads. - `#3671 `_ - -* ``py::multiple_inheritance`` is now only needed when C++ bases are hidden - from pybind11. - `#3650 `_ and - `#3659 `_ - - -Bug fixes: - -* Remove a boolean cast in ``numpy.h`` that causes MSVC C4800 warnings when - compiling against Python 3.10 or newer. - `#3669 `_ - -* Render ``py::bool_`` and ``py::float_`` as ``bool`` and ``float`` - respectively. - `#3622 `_ - -Build system improvements: - -* Fix CMake extension suffix computation on Python 3.10+. - `#3663 `_ - -* Allow ``CMAKE_ARGS`` to override CMake args in pybind11's own ``setup.py``. - `#3577 `_ - -* Remove a few deprecated c-headers. - `#3610 `_ - -* More uniform handling of test targets. - `#3590 `_ - -* Add clang-tidy readability check to catch potentially swapped function args. - `#3611 `_ - - -Version 2.9.0 (Dec 28, 2021) ----------------------------- - -This is the last version to support Python 2.7 and 3.5. - -New Features: - -* Allow ``py::args`` to be followed by other arguments; the remaining arguments - are implicitly keyword-only, as if a ``py::kw_only{}`` annotation had been - used. - `#3402 `_ - -Changes: - -* Make str/bytes/memoryview more interoperable with ``std::string_view``. - `#3521 `_ - -* Replace ``_`` with ``const_name`` in internals, avoid defining ``pybind::_`` - if ``_`` defined as macro (common gettext usage) - `#3423 `_ - - -Bug fixes: - -* Fix a rare warning about extra copy in an Eigen constructor. - `#3486 `_ - -* Fix caching of the C++ overrides. - `#3465 `_ - -* Add missing ``std::forward`` calls to some ``cpp_function`` overloads. - `#3443 `_ - -* Support PyPy 7.3.7 and the PyPy3.8 beta. Test python-3.11 on PRs with the - ``python dev`` label. - `#3419 `_ - -* Replace usage of deprecated ``Eigen::MappedSparseMatrix`` with - ``Eigen::Map>`` for Eigen 3.3+. - `#3499 `_ - -* Tweaks to support Microsoft Visual Studio 2022. - `#3497 `_ - -Build system improvements: - -* Nicer CMake printout and IDE organisation for pybind11's own tests. - `#3479 `_ - -* CMake: report version type as part of the version string to avoid a spurious - space in the package status message. - `#3472 `_ - -* Flags starting with ``-g`` in ``$CFLAGS`` and ``$CPPFLAGS`` are no longer - overridden by ``.Pybind11Extension``. - `#3436 `_ - -* Ensure ThreadPool is closed in ``setup_helpers``. - `#3548 `_ - -* Avoid LTS on ``mips64`` and ``ppc64le`` (reported broken). - `#3557 `_ - - -v2.8.1 (Oct 27, 2021) ---------------------- - -Changes and additions: - -* The simple namespace creation shortcut added in 2.8.0 was deprecated due to - usage of CPython internal API, and will be removed soon. Use - ``py::module_::import("types").attr("SimpleNamespace")``. - `#3374 `_ - -* Add C++ Exception type to throw and catch ``AttributeError``. Useful for - defining custom ``__setattr__`` and ``__getattr__`` methods. - `#3387 `_ - -Fixes: - -* Fixed the potential for dangling references when using properties with - ``std::optional`` types. - `#3376 `_ - -* Modernize usage of ``PyCodeObject`` on Python 3.9+ (moving toward support for - Python 3.11a1) - `#3368 `_ - -* A long-standing bug in ``eigen.h`` was fixed (originally PR #3343). The bug - was unmasked by newly added ``static_assert``'s in the Eigen 3.4.0 release. - `#3352 `_ - -* Support multiple raw inclusion of CMake helper files (Conan.io does this for - multi-config generators). - `#3420 `_ - -* Fix harmless warning on upcoming CMake 3.22. - `#3368 `_ - -* Fix 2.8.0 regression with MSVC 2017 + C++17 mode + Python 3. - `#3407 `_ - -* Fix 2.8.0 regression that caused undefined behavior (typically - segfaults) in ``make_key_iterator``/``make_value_iterator`` if dereferencing - the iterator returned a temporary value instead of a reference. - `#3348 `_ - - -v2.8.0 (Oct 4, 2021) --------------------- - -New features: - -* Added ``py::raise_from`` to 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 of ``register_exception_translator(ExceptionTranslator&& - translator)`` to keep your exception remapping code local to the module. - `#2650 `_ - -* Add ``make_simple_namespace`` function for instantiating Python - ``SimpleNamespace`` objects. **Deprecated in 2.8.1.** - `#2840 `_ - -* ``pybind11::scoped_interpreter`` and ``initialize_interpreter`` have new - arguments to allow ``sys.argv`` initialization. - `#2341 `_ - -* Allow Python builtins to be used as callbacks in CPython. - `#1413 `_ - -* Added ``view`` to view arrays with a different datatype. - `#987 `_ - -* Implemented ``reshape`` on 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 fix ``make_key_iterator()`` to return - references instead of copies. - `#3293 `_ - -* Improve the classes generated by ``bind_map``: `#3310 `_ - - * Change ``.items`` from an iterator to a dictionary view. - * Add ``.keys`` and ``.values`` (both dictionary views). - * Allow ``__contains__`` to take any object. - -* ``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 `_ - - -Changes: - -* Set ``__file__`` constant when running ``eval_file`` in an embedded interpreter. - `#3233 `_ - -* Python objects and (C++17) ``std::optional`` now accepted in ``py::slice`` - constructor. - `#1101 `_ - -* The pybind11 proxy types ``str``, ``bytes``, ``bytearray``, ``tuple``, - ``list`` now consistently support passing ``ssize_t`` values for sizes and - indexes. Previously, only ``size_t`` was accepted in several interfaces. - `#3219 `_ - -* Avoid evaluating ``PYBIND11_TLS_REPLACE_VALUE`` arguments 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::initialize`` was fixed. - `#3229 `_ - -* Fixes thread safety for some ``pybind11::type_caster`` which require lifetime - extension, such as for ``std::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::string`` and ``std::string_view`` now 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 with ``py-non-const``. - -* Enable readability ``clang-tidy-const-return`` and remove useless consts. - `#3254 `_ - `#3194 `_ - -* The clang-tidy ``google-explicit-constructor`` option 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-readability`` rules 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 `_ - - - - -v2.7.1 (Aug 3, 2021) ---------------------- - -Minor missing functionality added: - -* Allow Python builtins to be used as callbacks in CPython. - `#1413 `_ - -Bug fixes: - -* Fix regression in CMake Python package config: improper use of absolute path. - `#3144 `_ - -* Fix Mingw64 and add to the CI testing matrix. - `#3132 `_ - -* Specified UTF8-encoding in setup.py calls of open(). - `#3137 `_ - -* Add clang-tidy-readability rules 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 `_ - -Backend and tidying up: - -* Removed and fixed warning suppressions. - `#3127 `_ - `#3129 `_ - `#3135 `_ - `#3141 `_ - `#3142 `_ - `#3150 `_ - `#3152 `_ - `#3160 `_ - `#3161 `_ - - -v2.7.0 (Jul 16, 2021) ---------------------- - -New features: - -* Enable ``py::implicitly_convertible`` for - ``py::class_``-wrapped types. - `#3059 `_ - -* Allow function pointer extraction from overloaded functions. - `#2944 `_ - -* NumPy: added ``.char_()`` to type which gives the NumPy public ``char`` - result, which also distinguishes types by bit length (unlike ``.kind()``). - `#2864 `_ - -* Add ``pybind11::bytearray`` to manipulate ``bytearray`` similar to ``bytes``. - `#2799 `_ - -* ``pybind11/stl/filesystem.h`` registers a type caster that, on C++17/Python - 3.6+, converts ``std::filesystem::path`` to ``pathlib.Path`` and any - ``os.PathLike`` to ``std::filesystem::path``. - `#2730 `_ - -* A ``PYBIND11_VERSION_HEX`` define was added, similar to ``PY_VERSION_HEX``. - `#3120 `_ - - - -Changes: - -* ``py::str`` changed to exclusively hold ``PyUnicodeObject``. Previously - ``py::str`` could also hold ``bytes``, which is probably surprising, was - never documented, and can mask bugs (e.g. accidental use of ``py::str`` - instead of ``py::bytes``). - `#2409 `_ - -* Add a safety guard to ensure that the Python GIL is held when C++ calls back - into Python via ``object_api<>::operator()`` (e.g. ``py::function`` - ``__call__``). (This feature is available for Python 3.6+ only.) - `#2919 `_ - -* Catch a missing ``self`` argument in calls to ``__init__()``. - `#2914 `_ - -* Use ``std::string_view`` if available to avoid a copy when passing an object - to a ``std::ostream``. - `#3042 `_ - -* An important warning about thread safety was added to the ``iostream.h`` - documentation; attempts to make ``py::scoped_ostream_redirect`` thread safe - have been removed, as it was only partially effective. - `#2995 `_ - - -Fixes: - -* Performance: avoid unnecessary strlen calls. - `#3058 `_ - -* Fix auto-generated documentation string when using ``const T`` in - ``pyarray_t``. - `#3020 `_ - -* Unify error messages thrown by ``simple_collector``/``unpacking_collector``. - `#3013 `_ - -* ``pybind11::builtin_exception`` is now explicitly exported, which means the - types included/defined in different modules are identical, and exceptions - raised in different modules can be caught correctly. The documentation was - updated to explain that custom exceptions that are used across module - boundaries need to be explicitly exported as well. - `#2999 `_ - -* Fixed exception when printing UTF-8 to a ``scoped_ostream_redirect``. - `#2982 `_ - -* Pickle support enhancement: ``setstate`` implementation will attempt to - ``setattr`` ``__dict__`` only if the unpickled ``dict`` object is not empty, - to not force use of ``py::dynamic_attr()`` unnecessarily. - `#2972 `_ - -* Allow negative timedelta values to roundtrip. - `#2870 `_ - -* Fix unchecked errors could potentially swallow signals/other exceptions. - `#2863 `_ - -* Add null pointer check with ``std::localtime``. - `#2846 `_ - -* Fix the ``weakref`` constructor from ``py::object`` to create a new - ``weakref`` on conversion. - `#2832 `_ - -* Avoid relying on exceptions in C++17 when getting a ``shared_ptr`` holder - from a ``shared_from_this`` class. - `#2819 `_ - -* Allow the codec's exception to be raised instead of :code:`RuntimeError` when - casting from :code:`py::str` to :code:`std::string`. - `#2903 `_ - - -Build system improvements: - -* In ``setup_helpers.py``, test for platforms that have some multiprocessing - features but lack semaphores, which ``ParallelCompile`` requires. - `#3043 `_ - -* Fix ``pybind11_INCLUDE_DIR`` in case ``CMAKE_INSTALL_INCLUDEDIR`` is - absolute. - `#3005 `_ - -* Fix bug not respecting ``WITH_SOABI`` or ``WITHOUT_SOABI`` to CMake. - `#2938 `_ - -* Fix the default ``Pybind11Extension`` compilation flags with a Mingw64 python. - `#2921 `_ - -* Clang on Windows: do not pass ``/MP`` (ignored flag). - `#2824 `_ - -* ``pybind11.setup_helpers.intree_extensions`` can be used to generate - ``Pybind11Extension`` instances from cpp files placed in the Python package - source tree. - `#2831 `_ - -Backend and tidying up: - -* Enable clang-tidy performance, readability, and modernization checks - throughout the codebase to enforce best coding practices. - `#3046 `_, - `#3049 `_, - `#3051 `_, - `#3052 `_, - `#3080 `_, and - `#3094 `_ - - -* Checks for common misspellings were added to the pre-commit hooks. - `#3076 `_ - -* Changed ``Werror`` to stricter ``Werror-all`` for Intel compiler and fixed - minor issues. - `#2948 `_ - -* Fixed compilation with GCC < 5 when the user defines ``_GLIBCXX_USE_CXX11_ABI``. - `#2956 `_ - -* Added nox support for easier local testing and linting of contributions. - `#3101 `_ and - `#3121 `_ - -* Avoid RTD style issue with docutils 0.17+. - `#3119 `_ - -* Support pipx run, such as ``pipx run pybind11 --include`` for a quick compile. - `#3117 `_ - - - -v2.6.2 (Jan 26, 2021) ---------------------- - -Minor missing functionality added: - -* enum: add missing Enum.value property. - `#2739 `_ - -* Allow thread termination to be avoided during shutdown for CPython 3.7+ via - ``.disarm`` for ``gil_scoped_acquire``/``gil_scoped_release``. - `#2657 `_ - -Fixed or improved behavior in a few special cases: - -* Fix bug where the constructor of ``object`` subclasses would not throw on - being passed a Python object of the wrong type. - `#2701 `_ - -* The ``type_caster`` for integers does not convert Python objects with - ``__int__`` anymore with ``noconvert`` or during the first round of trying - overloads. - `#2698 `_ - -* When casting to a C++ integer, ``__index__`` is always called and not - considered as conversion, consistent with Python 3.8+. - `#2801 `_ - -Build improvements: - -* Setup helpers: ``extra_compile_args`` and ``extra_link_args`` automatically set by - Pybind11Extension are now prepended, which allows them to be overridden - by user-set ``extra_compile_args`` and ``extra_link_args``. - `#2808 `_ - -* Setup helpers: Don't trigger unused parameter warning. - `#2735 `_ - -* CMake: Support running with ``--warn-uninitialized`` active. - `#2806 `_ - -* CMake: Avoid error if included from two submodule directories. - `#2804 `_ - -* CMake: Fix ``STATIC`` / ``SHARED`` being ignored in FindPython mode. - `#2796 `_ - -* CMake: Respect the setting for ``CMAKE_CXX_VISIBILITY_PRESET`` if defined. - `#2793 `_ - -* CMake: Fix issue with FindPython2/FindPython3 not working with ``pybind11::embed``. - `#2662 `_ - -* CMake: mixing local and installed pybind11's would prioritize the installed - one over the local one (regression in 2.6.0). - `#2716 `_ - - -Bug fixes: - -* Fixed segfault in multithreaded environments when using - ``scoped_ostream_redirect``. - `#2675 `_ - -* Leave docstring unset when all docstring-related options are disabled, rather - than set an empty string. - `#2745 `_ - -* The module key in builtins that pybind11 uses to store its internals changed - from std::string to a python str type (more natural on Python 2, no change on - Python 3). - `#2814 `_ - -* Fixed assertion error related to unhandled (later overwritten) exception in - CPython 3.8 and 3.9 debug builds. - `#2685 `_ - -* Fix ``py::gil_scoped_acquire`` assert with CPython 3.9 debug build. - `#2683 `_ - -* Fix issue with a test failing on pytest 6.2. - `#2741 `_ - -Warning fixes: - -* Fix warning modifying constructor parameter 'flag' that shadows a field of - 'set_flag' ``[-Wshadow-field-in-constructor-modified]``. - `#2780 `_ - -* Suppressed some deprecation warnings about old-style - ``__init__``/``__setstate__`` in the tests. - `#2759 `_ - -Valgrind work: - -* Fix invalid access when calling a pybind11 ``__init__`` on a non-pybind11 - class instance. - `#2755 `_ - -* Fixed various minor memory leaks in pybind11's test suite. - `#2758 `_ - -* Resolved memory leak in cpp_function initialization when exceptions occurred. - `#2756 `_ - -* Added a Valgrind build, checking for leaks and memory-related UB, to CI. - `#2746 `_ - -Compiler support: - -* Intel compiler was not activating C++14 support due to a broken define. - `#2679 `_ - -* Support ICC and NVIDIA HPC SDK in C++17 mode. - `#2729 `_ - -* Support Intel OneAPI compiler (ICC 20.2) and add to CI. - `#2573 `_ - - - -v2.6.1 (Nov 11, 2020) ---------------------- - -* ``py::exec``, ``py::eval``, and ``py::eval_file`` now add the builtins module - as ``"__builtins__"`` to their ``globals`` argument, better matching ``exec`` - and ``eval`` in pure Python. - `#2616 `_ - -* ``setup_helpers`` will no longer set a minimum macOS version higher than the - current version. - `#2622 `_ - -* Allow deleting static properties. - `#2629 `_ - -* Seal a leak in ``def_buffer``, cleaning up the ``capture`` object after the - ``class_`` object goes out of scope. - `#2634 `_ - -* ``pybind11_INCLUDE_DIRS`` was incorrect, potentially causing a regression if - it was expected to include ``PYTHON_INCLUDE_DIRS`` (please use targets - instead). - `#2636 `_ - -* Added parameter names to the ``py::enum_`` constructor and methods, avoiding - ``arg0`` in the generated docstrings. - `#2637 `_ - -* Added ``needs_recompile`` optional function to the ``ParallelCompiler`` - helper, to allow a recompile to be skipped based on a user-defined function. - `#2643 `_ - - -v2.6.0 (Oct 21, 2020) ---------------------- - -See :ref:`upgrade-guide-2.6` for help upgrading to the new version. - -New features: - -* Keyword-only arguments supported in Python 2 or 3 with ``py::kw_only()``. - `#2100 `_ - -* Positional-only arguments supported in Python 2 or 3 with ``py::pos_only()``. - `#2459 `_ - -* ``py::is_final()`` class modifier to block subclassing (CPython only). - `#2151 `_ - -* Added ``py::prepend()``, allowing a function to be placed at the beginning of - the overload chain. - `#1131 `_ - -* Access to the type object now provided with ``py::type::of()`` and - ``py::type::of(h)``. - `#2364 `_ - -* Perfect forwarding support for methods. - `#2048 `_ - -* Added ``py::error_already_set::discard_as_unraisable()``. - `#2372 `_ - -* ``py::hash`` is now public. - `#2217 `_ - -* ``py::class_`` is now supported. Note that writing to one data - member of the union and reading another (type punning) is UB in C++. Thus - pybind11-bound enums should never be used for such conversions. - `#2320 `_. - -* Classes now check local scope when registering members, allowing a subclass - to have a member with the same name as a parent (such as an enum). - `#2335 `_ - -Code correctness features: - -* Error now thrown when ``__init__`` is forgotten on subclasses. - `#2152 `_ - -* Throw error if conversion to a pybind11 type if the Python object isn't a - valid instance of that type, such as ``py::bytes(o)`` when ``py::object o`` - isn't a bytes instance. - `#2349 `_ - -* Throw if conversion to ``str`` fails. - `#2477 `_ - - -API changes: - -* ``py::module`` was renamed ``py::module_`` to avoid issues with C++20 when - used unqualified, but an alias ``py::module`` is provided for backward - compatibility. - `#2489 `_ - -* Public constructors for ``py::module_`` have been deprecated; please use - ``pybind11::module_::create_extension_module`` if you were using the public - constructor (fairly rare after ``PYBIND11_MODULE`` was introduced). - `#2552 `_ - -* ``PYBIND11_OVERLOAD*`` macros and ``get_overload`` function replaced by - correctly-named ``PYBIND11_OVERRIDE*`` and ``get_override``, fixing - inconsistencies in the presence of a closing ``;`` in these macros. - ``get_type_overload`` is deprecated. - `#2325 `_ - -Packaging / building improvements: - -* The Python package was reworked to be more powerful and useful. - `#2433 `_ - - * :ref:`build-setuptools` is easier thanks to a new - ``pybind11.setup_helpers`` module, which provides utilities to use - setuptools with pybind11. It can be used via PEP 518, ``setup_requires``, - or by directly importing or copying ``setup_helpers.py`` into your project. - - * CMake configuration files are now included in the Python package. Use - ``pybind11.get_cmake_dir()`` or ``python -m pybind11 --cmakedir`` to get - the directory with the CMake configuration files, or include the - site-packages location in your ``CMAKE_MODULE_PATH``. Or you can use the - new ``pybind11[global]`` extra when you install ``pybind11``, which - installs the CMake files and headers into your base environment in the - standard location. - - * ``pybind11-config`` is another way to write ``python -m pybind11`` if you - have your PATH set up. - - * Added external typing support to the helper module, code from - ``import pybind11`` can now be type checked. - `#2588 `_ - -* Minimum CMake required increased to 3.4. - `#2338 `_ and - `#2370 `_ - - * Full integration with CMake's C++ standard system and compile features - replaces ``PYBIND11_CPP_STANDARD``. - - * Generated config file is now portable to different Python/compiler/CMake - versions. - - * Virtual environments prioritized if ``PYTHON_EXECUTABLE`` is not set - (``venv``, ``virtualenv``, and ``conda``) (similar to the new FindPython - mode). - - * Other CMake features now natively supported, like - ``CMAKE_INTERPROCEDURAL_OPTIMIZATION``, ``set(CMAKE_CXX_VISIBILITY_PRESET - hidden)``. - - * ``CUDA`` as a language is now supported. - - * Helper functions ``pybind11_strip``, ``pybind11_extension``, - ``pybind11_find_import`` added, see :doc:`cmake/index`. - - * Optional :ref:`find-python-mode` and :ref:`nopython-mode` with CMake. - `#2370 `_ - -* Uninstall target added. - `#2265 `_ and - `#2346 `_ - -* ``pybind11_add_module()`` now accepts an optional ``OPT_SIZE`` flag that - switches the binding target to size-based optimization if the global build - type can not always be fixed to ``MinSizeRel`` (except in debug mode, where - optimizations remain disabled). ``MinSizeRel`` or this flag reduces binary - size quite substantially (~25% on some platforms). - `#2463 `_ - -Smaller or developer focused features and fixes: - -* Moved ``mkdoc.py`` to a new repo, `pybind11-mkdoc`_. There are no longer - submodules in the main repo. - -* ``py::memoryview`` segfault fix and update, with new - ``py::memoryview::from_memory`` in Python 3, and documentation. - `#2223 `_ - -* Fix for ``buffer_info`` on Python 2. - `#2503 `_ - -* If ``__eq__`` defined but not ``__hash__``, ``__hash__`` is now set to - ``None``. - `#2291 `_ - -* ``py::ellipsis`` now also works on Python 2. - `#2360 `_ - -* Pointer to ``std::tuple`` & ``std::pair`` supported in cast. - `#2334 `_ - -* Small fixes in NumPy support. ``py::array`` now uses ``py::ssize_t`` as first - argument type. - `#2293 `_ - -* Added missing signature for ``py::array``. - `#2363 `_ - -* ``unchecked_mutable_reference`` has access to operator ``()`` and ``[]`` when - const. - `#2514 `_ - -* ``py::vectorize`` is now supported on functions that return void. - `#1969 `_ - -* ``py::capsule`` supports ``get_pointer`` and ``set_pointer``. - `#1131 `_ - -* Fix crash when different instances share the same pointer of the same type. - `#2252 `_ - -* Fix for ``py::len`` not clearing Python's error state when it fails and throws. - `#2575 `_ - -* Bugfixes related to more extensive testing, new GitHub Actions CI. - `#2321 `_ - -* Bug in timezone issue in Eastern hemisphere midnight fixed. - `#2438 `_ - -* ``std::chrono::time_point`` now works when the resolution is not the same as - the system. - `#2481 `_ - -* Bug fixed where ``py::array_t`` could accept arrays that did not match the - requested ordering. - `#2484 `_ - -* Avoid a segfault on some compilers when types are removed in Python. - `#2564 `_ - -* ``py::arg::none()`` is now also respected when passing keyword arguments. - `#2611 `_ - -* PyPy fixes, PyPy 7.3.x now supported, including PyPy3. (Known issue with - PyPy2 and Windows `#2596 `_). - `#2146 `_ - -* CPython 3.9.0 workaround for undefined behavior (macOS segfault). - `#2576 `_ - -* CPython 3.9 warning fixes. - `#2253 `_ - -* Improved C++20 support, now tested in CI. - `#2489 `_ - `#2599 `_ - -* Improved but still incomplete debug Python interpreter support. - `#2025 `_ - -* NVCC (CUDA 11) now supported and tested in CI. - `#2461 `_ - -* NVIDIA PGI compilers now supported and tested in CI. - `#2475 `_ - -* At least Intel 18 now explicitly required when compiling with Intel. - `#2577 `_ - -* Extensive style checking in CI, with `pre-commit`_ support. Code - modernization, checked by clang-tidy. - -* Expanded docs, including new main page, new installing section, and CMake - helpers page, along with over a dozen new sections on existing pages. - -* In GitHub, new docs for contributing and new issue templates. - -.. _pre-commit: https://pre-commit.com - -.. _pybind11-mkdoc: https://github.com/pybind/pybind11-mkdoc - -v2.5.0 (Mar 31, 2020) ------------------------------------------------------ - -* Use C++17 fold expressions in type casters, if available. This can - improve performance during overload resolution when functions have - multiple arguments. - `#2043 `_. - -* Changed include directory resolution in ``pybind11/__init__.py`` - and installation in ``setup.py``. This fixes a number of open issues - where pybind11 headers could not be found in certain environments. - `#1995 `_. - -* C++20 ``char8_t`` and ``u8string`` support. `#2026 - `_. - -* CMake: search for Python 3.9. `bb9c91 - `_. - -* Fixes for MSYS-based build environments. - `#2087 `_, - `#2053 `_. - -* STL bindings for ``std::vector<...>::clear``. `#2074 - `_. - -* Read-only flag for ``py::buffer``. `#1466 - `_. - -* Exception handling during module initialization. - `bf2b031 `_. - -* Support linking against a CPython debug build. - `#2025 `_. - -* Fixed issues involving the availability and use of aligned ``new`` and - ``delete``. `#1988 `_, - `759221 `_. - -* Fixed a resource leak upon interpreter shutdown. - `#2020 `_. - -* Fixed error handling in the boolean caster. - `#1976 `_. - -v2.4.3 (Oct 15, 2019) ------------------------------------------------------ - -* Adapt pybind11 to a C API convention change in Python 3.8. `#1950 - `_. - -v2.4.2 (Sep 21, 2019) ------------------------------------------------------ - -* Replaced usage of a C++14 only construct. `#1929 - `_. - -* Made an ifdef future-proof for Python >= 4. `f3109d - `_. - -v2.4.1 (Sep 20, 2019) ------------------------------------------------------ - -* Fixed a problem involving implicit conversion from enumerations to integers - on Python 3.8. `#1780 `_. - -v2.4.0 (Sep 19, 2019) ------------------------------------------------------ - -* Try harder to keep pybind11-internal data structures separate when there - are potential ABI incompatibilities. Fixes crashes that occurred when loading - multiple pybind11 extensions that were e.g. compiled by GCC (libstdc++) - and Clang (libc++). - `#1588 `_ and - `c9f5a `_. - -* Added support for ``__await__``, ``__aiter__``, and ``__anext__`` protocols. - `#1842 `_. - -* ``pybind11_add_module()``: don't strip symbols when compiling in - ``RelWithDebInfo`` mode. `#1980 - `_. - -* ``enum_``: Reproduce Python behavior when comparing against invalid values - (e.g. ``None``, strings, etc.). Add back support for ``__invert__()``. - `#1912 `_, - `#1907 `_. - -* List insertion operation for ``py::list``. - Added ``.empty()`` to all collection types. - Added ``py::set::contains()`` and ``py::dict::contains()``. - `#1887 `_, - `#1884 `_, - `#1888 `_. - -* ``py::details::overload_cast_impl`` is available in C++11 mode, can be used - like ``overload_cast`` with an additional set of parentheses. - `#1581 `_. - -* Fixed ``get_include()`` on Conda. - `#1877 `_. - -* ``stl_bind.h``: negative indexing support. - `#1882 `_. - -* Minor CMake fix to add MinGW compatibility. - `#1851 `_. - -* GIL-related fixes. - `#1836 `_, - `8b90b `_. - -* Other very minor/subtle fixes and improvements. - `#1329 `_, - `#1910 `_, - `#1863 `_, - `#1847 `_, - `#1890 `_, - `#1860 `_, - `#1848 `_, - `#1821 `_, - `#1837 `_, - `#1833 `_, - `#1748 `_, - `#1852 `_. - -v2.3.0 (June 11, 2019) ------------------------------------------------------ - -* Significantly reduced module binary size (10-20%) when compiled in C++11 mode - with GCC/Clang, or in any mode with MSVC. Function signatures are now always - precomputed at compile time (this was previously only available in C++14 mode - for non-MSVC compilers). - `#934 `_. - -* Add basic support for tag-based static polymorphism, where classes - provide a method to returns the desired type of an instance. - `#1326 `_. - -* Python type wrappers (``py::handle``, ``py::object``, etc.) - now support map Python's number protocol onto C++ arithmetic - operators such as ``operator+``, ``operator/=``, etc. - `#1511 `_. - -* A number of improvements related to enumerations: - - 1. The ``enum_`` implementation was rewritten from scratch to reduce - code bloat. Rather than instantiating a full implementation for each - enumeration, most code is now contained in a generic base class. - `#1511 `_. - - 2. The ``value()`` method of ``py::enum_`` now accepts an optional - docstring that will be shown in the documentation of the associated - enumeration. `#1160 `_. - - 3. check for already existing enum value and throw an error if present. - `#1453 `_. - -* Support for over-aligned type allocation via C++17's aligned ``new`` - statement. `#1582 `_. - -* Added ``py::ellipsis()`` method for slicing of multidimensional NumPy arrays - `#1502 `_. - -* Numerous Improvements to the ``mkdoc.py`` script for extracting documentation - from C++ header files. - `#1788 `_. - -* ``pybind11_add_module()``: allow including Python as a ``SYSTEM`` include path. - `#1416 `_. - -* ``pybind11/stl.h`` does not convert strings to ``vector`` anymore. - `#1258 `_. - -* Mark static methods as such to fix auto-generated Sphinx documentation. - `#1732 `_. - -* Re-throw forced unwind exceptions (e.g. during pthread termination). - `#1208 `_. - -* Added ``__contains__`` method to the bindings of maps (``std::map``, - ``std::unordered_map``). - `#1767 `_. - -* Improvements to ``gil_scoped_acquire``. - `#1211 `_. - -* Type caster support for ``std::deque``. - `#1609 `_. - -* Support for ``std::unique_ptr`` holders, whose deleters differ between a base and derived - class. `#1353 `_. - -* Construction of STL array/vector-like data structures from - iterators. Added an ``extend()`` operation. - `#1709 `_, - -* CMake build system improvements for projects that include non-C++ - files (e.g. plain C, CUDA) in ``pybind11_add_module`` et al. - `#1678 `_. - -* Fixed asynchronous invocation and deallocation of Python functions - wrapped in ``std::function``. - `#1595 `_. - -* Fixes regarding return value policy propagation in STL type casters. - `#1603 `_. - -* Fixed scoped enum comparisons. - `#1571 `_. - -* Fixed iostream redirection for code that releases the GIL. - `#1368 `_, - -* A number of CI-related fixes. - `#1757 `_, - `#1744 `_, - `#1670 `_. - -v2.2.4 (September 11, 2018) ------------------------------------------------------ - -* Use new Python 3.7 Thread Specific Storage (TSS) implementation if available. - `#1454 `_, - `#1517 `_. - -* Fixes for newer MSVC versions and C++17 mode. - `#1347 `_, - `#1462 `_. - -* Propagate return value policies to type-specific casters - when casting STL containers. - `#1455 `_. - -* Allow ostream-redirection of more than 1024 characters. - `#1479 `_. - -* Set ``Py_DEBUG`` define when compiling against a debug Python build. - `#1438 `_. - -* Untangle integer logic in number type caster to work for custom - types that may only be castable to a restricted set of builtin types. - `#1442 `_. - -* CMake build system: Remember Python version in cache file. - `#1434 `_. - -* Fix for custom smart pointers: use ``std::addressof`` to obtain holder - address instead of ``operator&``. - `#1435 `_. - -* Properly report exceptions thrown during module initialization. - `#1362 `_. - -* Fixed a segmentation fault when creating empty-shaped NumPy array. - `#1371 `_. - -* The version of Intel C++ compiler must be >= 2017, and this is now checked by - the header files. `#1363 `_. - -* A few minor typo fixes and improvements to the test suite, and - patches that silence compiler warnings. - -* Vectors now support construction from generators, as well as ``extend()`` from a - list or generator. - `#1496 `_. - - -v2.2.3 (April 29, 2018) ------------------------------------------------------ - -* The pybind11 header location detection was replaced by a new implementation - that no longer depends on ``pip`` internals (the recently released ``pip`` - 10 has restricted access to this API). - `#1190 `_. - -* Small adjustment to an implementation detail to work around a compiler segmentation fault in Clang 3.3/3.4. - `#1350 `_. - -* The minimal supported version of the Intel compiler was >= 17.0 since - pybind11 v2.1. This check is now explicit, and a compile-time error is raised - if the compiler meet the requirement. - `#1363 `_. - -* Fixed an endianness-related fault in the test suite. - `#1287 `_. - -v2.2.2 (February 7, 2018) ------------------------------------------------------ - -* Fixed a segfault when combining embedded interpreter - shutdown/reinitialization with external loaded pybind11 modules. - `#1092 `_. - -* Eigen support: fixed a bug where Nx1/1xN numpy inputs couldn't be passed as - arguments to Eigen vectors (which for Eigen are simply compile-time fixed - Nx1/1xN matrices). - `#1106 `_. - -* Clarified to license by moving the licensing of contributions from - ``LICENSE`` into ``CONTRIBUTING.md``: the licensing of contributions is not - actually part of the software license as distributed. This isn't meant to be - a substantial change in the licensing of the project, but addresses concerns - that the clause made the license non-standard. - `#1109 `_. - -* Fixed a regression introduced in 2.1 that broke binding functions with lvalue - character literal arguments. - `#1128 `_. - -* MSVC: fix for compilation failures under /permissive-, and added the flag to - the appveyor test suite. - `#1155 `_. - -* Fixed ``__qualname__`` generation, and in turn, fixes how class names - (especially nested class names) are shown in generated docstrings. - `#1171 `_. - -* Updated the FAQ with a suggested project citation reference. - `#1189 `_. - -* Added fixes for deprecation warnings when compiled under C++17 with - ``-Wdeprecated`` turned on, and add ``-Wdeprecated`` to the test suite - compilation flags. - `#1191 `_. - -* Fixed outdated PyPI URLs in ``setup.py``. - `#1213 `_. - -* Fixed a refcount leak for arguments that end up in a ``py::args`` argument - for functions with both fixed positional and ``py::args`` arguments. - `#1216 `_. - -* Fixed a potential segfault resulting from possible premature destruction of - ``py::args``/``py::kwargs`` arguments with overloaded functions. - `#1223 `_. - -* Fixed ``del map[item]`` for a ``stl_bind.h`` bound stl map. - `#1229 `_. - -* Fixed a regression from v2.1.x where the aggregate initialization could - unintentionally end up at a constructor taking a templated - ``std::initializer_list`` argument. - `#1249 `_. - -* Fixed an issue where calling a function with a keep_alive policy on the same - nurse/patient pair would cause the internal patient storage to needlessly - grow (unboundedly, if the nurse is long-lived). - `#1251 `_. - -* Various other minor fixes. - -v2.2.1 (September 14, 2017) ------------------------------------------------------ - -* Added ``py::module_::reload()`` member function for reloading a module. - `#1040 `_. - -* Fixed a reference leak in the number converter. - `#1078 `_. - -* Fixed compilation with Clang on host GCC < 5 (old libstdc++ which isn't fully - C++11 compliant). `#1062 `_. - -* Fixed a regression where the automatic ``std::vector`` caster would - fail to compile. The same fix also applies to any container which returns - element proxies instead of references. - `#1053 `_. - -* Fixed a regression where the ``py::keep_alive`` policy could not be applied - to constructors. `#1065 `_. - -* Fixed a nullptr dereference when loading a ``py::module_local`` type - that's only registered in an external module. - `#1058 `_. - -* Fixed implicit conversion of accessors to types derived from ``py::object``. - `#1076 `_. - -* The ``name`` in ``PYBIND11_MODULE(name, variable)`` can now be a macro. - `#1082 `_. - -* Relaxed overly strict ``py::pickle()`` check for matching get and set types. - `#1064 `_. - -* Conversion errors now try to be more informative when it's likely that - a missing header is the cause (e.g. forgetting ````). - `#1077 `_. - -v2.2.0 (August 31, 2017) ------------------------------------------------------ - -* Support for embedding the Python interpreter. See the - :doc:`documentation page ` for a - full overview of the new features. - `#774 `_, - `#889 `_, - `#892 `_, - `#920 `_. - - .. code-block:: cpp - - #include - namespace py = pybind11; - - int main() { - py::scoped_interpreter guard{}; // start the interpreter and keep it alive - - py::print("Hello, World!"); // use the Python API - } - -* Support for inheriting from multiple C++ bases in Python. - `#693 `_. - - .. code-block:: python - - from cpp_module import CppBase1, CppBase2 - - - class PyDerived(CppBase1, CppBase2): - def __init__(self): - CppBase1.__init__(self) # C++ bases must be initialized explicitly - CppBase2.__init__(self) - -* ``PYBIND11_MODULE`` is now the preferred way to create module entry points. - ``PYBIND11_PLUGIN`` is deprecated. See :ref:`macros` for details. - `#879 `_. - - .. code-block:: cpp - - // new - PYBIND11_MODULE(example, m) { - m.def("add", [](int a, int b) { return a + b; }); - } - - // old - PYBIND11_PLUGIN(example) { - py::module m("example"); - m.def("add", [](int a, int b) { return a + b; }); - return m.ptr(); - } - -* pybind11's headers and build system now more strictly enforce hidden symbol - visibility for extension modules. This should be seamless for most users, - but see the :doc:`upgrade` if you use a custom build system. - `#995 `_. - -* Support for ``py::module_local`` types which allow multiple modules to - export the same C++ types without conflicts. This is useful for opaque - types like ``std::vector``. ``py::bind_vector`` and ``py::bind_map`` - now default to ``py::module_local`` if their elements are builtins or - local types. See :ref:`module_local` for details. - `#949 `_, - `#981 `_, - `#995 `_, - `#997 `_. - -* Custom constructors can now be added very easily using lambdas or factory - functions which return a class instance by value, pointer or holder. This - supersedes the old placement-new ``__init__`` technique. - See :ref:`custom_constructors` for details. - `#805 `_, - `#1014 `_. - - .. code-block:: cpp - - struct Example { - Example(std::string); - }; - - py::class_(m, "Example") - .def(py::init()) // existing constructor - .def(py::init([](int n) { // custom constructor - return std::make_unique(std::to_string(n)); - })); - -* Similarly to custom constructors, pickling support functions are now bound - using the ``py::pickle()`` adaptor which improves type safety. See the - :doc:`upgrade` and :ref:`pickling` for details. - `#1038 `_. - -* Builtin support for converting C++17 standard library types and general - conversion improvements: - - 1. C++17 ``std::variant`` is supported right out of the box. C++11/14 - equivalents (e.g. ``boost::variant``) can also be added with a simple - user-defined specialization. See :ref:`cpp17_container_casters` for details. - `#811 `_, - `#845 `_, - `#989 `_. - - 2. Out-of-the-box support for C++17 ``std::string_view``. - `#906 `_. - - 3. Improved compatibility of the builtin ``optional`` converter. - `#874 `_. - - 4. The ``bool`` converter now accepts ``numpy.bool_`` and types which - define ``__bool__`` (Python 3.x) or ``__nonzero__`` (Python 2.7). - `#925 `_. - - 5. C++-to-Python casters are now more efficient and move elements out - of rvalue containers whenever possible. - `#851 `_, - `#936 `_, - `#938 `_. - - 6. Fixed ``bytes`` to ``std::string/char*`` conversion on Python 3. - `#817 `_. - - 7. Fixed lifetime of temporary C++ objects created in Python-to-C++ conversions. - `#924 `_. - -* Scope guard call policy for RAII types, e.g. ``py::call_guard()``, - ``py::call_guard()``. See :ref:`call_policies` for details. - `#740 `_. - -* Utility for redirecting C++ streams to Python (e.g. ``std::cout`` -> - ``sys.stdout``). Scope guard ``py::scoped_ostream_redirect`` in C++ and - a context manager in Python. See :ref:`ostream_redirect`. - `#1009 `_. - -* Improved handling of types and exceptions across module boundaries. - `#915 `_, - `#951 `_, - `#995 `_. - -* Fixed destruction order of ``py::keep_alive`` nurse/patient objects - in reference cycles. - `#856 `_. - -* NumPy and buffer protocol related improvements: - - 1. Support for negative strides in Python buffer objects/numpy arrays. This - required changing integers from unsigned to signed for the related C++ APIs. - Note: If you have compiler warnings enabled, you may notice some new conversion - warnings after upgrading. These can be resolved with ``static_cast``. - `#782 `_. - - 2. Support ``std::complex`` and arrays inside ``PYBIND11_NUMPY_DTYPE``. - `#831 `_, - `#832 `_. - - 3. Support for constructing ``py::buffer_info`` and ``py::arrays`` using - arbitrary containers or iterators instead of requiring a ``std::vector``. - `#788 `_, - `#822 `_, - `#860 `_. - - 4. Explicitly check numpy version and require >= 1.7.0. - `#819 `_. - -* Support for allowing/prohibiting ``None`` for specific arguments and improved - ``None`` overload resolution order. See :ref:`none_arguments` for details. - `#843 `_. - `#859 `_. - -* Added ``py::exec()`` as a shortcut for ``py::eval()`` - and support for C++11 raw string literals as input. See :ref:`eval`. - `#766 `_, - `#827 `_. - -* ``py::vectorize()`` ignores non-vectorizable arguments and supports - member functions. - `#762 `_. - -* Support for bound methods as callbacks (``pybind11/functional.h``). - `#815 `_. - -* Allow aliasing pybind11 methods: ``cls.attr("foo") = cls.attr("bar")``. - `#802 `_. - -* Don't allow mixed static/non-static overloads. - `#804 `_. - -* Fixed overriding static properties in derived classes. - `#784 `_. - -* Added support for write only properties. - `#1144 `_. - -* Improved deduction of member functions of a derived class when its bases - aren't registered with pybind11. - `#855 `_. - - .. code-block:: cpp - - struct Base { - int foo() { return 42; } - } - - struct Derived : Base {} - - // Now works, but previously required also binding `Base` - py::class_(m, "Derived") - .def("foo", &Derived::foo); // function is actually from `Base` - -* The implementation of ``py::init<>`` now uses C++11 brace initialization - syntax to construct instances, which permits binding implicit constructors of - aggregate types. `#1015 `_. - - .. code-block:: cpp - - struct Aggregate { - int a; - std::string b; - }; - - py::class_(m, "Aggregate") - .def(py::init()); - -* Fixed issues with multiple inheritance with offset base/derived pointers. - `#812 `_, - `#866 `_, - `#960 `_. - -* Fixed reference leak of type objects. - `#1030 `_. - -* Improved support for the ``/std:c++14`` and ``/std:c++latest`` modes - on MSVC 2017. - `#841 `_, - `#999 `_. - -* Fixed detection of private operator new on MSVC. - `#893 `_, - `#918 `_. - -* Intel C++ compiler compatibility fixes. - `#937 `_. - -* Fixed implicit conversion of ``py::enum_`` to integer types on Python 2.7. - `#821 `_. - -* Added ``py::hash`` to fetch the hash value of Python objects, and - ``.def(hash(py::self))`` to provide the C++ ``std::hash`` as the Python - ``__hash__`` method. - `#1034 `_. - -* Fixed ``__truediv__`` on Python 2 and ``__itruediv__`` on Python 3. - `#867 `_. - -* ``py::capsule`` objects now support the ``name`` attribute. This is useful - for interfacing with ``scipy.LowLevelCallable``. - `#902 `_. - -* Fixed ``py::make_iterator``'s ``__next__()`` for past-the-end calls. - `#897 `_. - -* Added ``error_already_set::matches()`` for checking Python exceptions. - `#772 `_. - -* Deprecated ``py::error_already_set::clear()``. It's no longer needed - following a simplification of the ``py::error_already_set`` class. - `#954 `_. - -* Deprecated ``py::handle::operator==()`` in favor of ``py::handle::is()`` - `#825 `_. - -* Deprecated ``py::object::borrowed``/``py::object::stolen``. - Use ``py::object::borrowed_t{}``/``py::object::stolen_t{}`` instead. - `#771 `_. - -* Changed internal data structure versioning to avoid conflicts between - modules compiled with different revisions of pybind11. - `#1012 `_. - -* Additional compile-time and run-time error checking and more informative messages. - `#786 `_, - `#794 `_, - `#803 `_. - -* Various minor improvements and fixes. - `#764 `_, - `#791 `_, - `#795 `_, - `#840 `_, - `#844 `_, - `#846 `_, - `#849 `_, - `#858 `_, - `#862 `_, - `#871 `_, - `#872 `_, - `#881 `_, - `#888 `_, - `#899 `_, - `#928 `_, - `#931 `_, - `#944 `_, - `#950 `_, - `#952 `_, - `#962 `_, - `#965 `_, - `#970 `_, - `#978 `_, - `#979 `_, - `#986 `_, - `#1020 `_, - `#1027 `_, - `#1037 `_. - -* Testing improvements. - `#798 `_, - `#882 `_, - `#898 `_, - `#900 `_, - `#921 `_, - `#923 `_, - `#963 `_. - -v2.1.1 (April 7, 2017) ------------------------------------------------------ - -* Fixed minimum version requirement for MSVC 2015u3 - `#773 `_. - -v2.1.0 (March 22, 2017) ------------------------------------------------------ - -* pybind11 now performs function overload resolution in two phases. The first - phase only considers exact type matches, while the second allows for implicit - conversions to take place. A special ``noconvert()`` syntax can be used to - completely disable implicit conversions for specific arguments. - `#643 `_, - `#634 `_, - `#650 `_. - -* Fixed a regression where static properties no longer worked with classes - using multiple inheritance. The ``py::metaclass`` attribute is no longer - necessary (and deprecated as of this release) when binding classes with - static properties. - `#679 `_, - -* Classes bound using ``pybind11`` can now use custom metaclasses. - `#679 `_, - -* ``py::args`` and ``py::kwargs`` can now be mixed with other positional - arguments when binding functions using pybind11. - `#611 `_. - -* Improved support for C++11 unicode string and character types; added - extensive documentation regarding pybind11's string conversion behavior. - `#624 `_, - `#636 `_, - `#715 `_. - -* pybind11 can now avoid expensive copies when converting Eigen arrays to NumPy - arrays (and vice versa). `#610 `_. - -* The "fast path" in ``py::vectorize`` now works for any full-size group of C or - F-contiguous arrays. The non-fast path is also faster since it no longer performs - copies of the input arguments (except when type conversions are necessary). - `#610 `_. - -* Added fast, unchecked access to NumPy arrays via a proxy object. - `#746 `_. - -* Transparent support for class-specific ``operator new`` and - ``operator delete`` implementations. - `#755 `_. - -* Slimmer and more efficient STL-compatible iterator interface for sequence types. - `#662 `_. - -* Improved custom holder type support. - `#607 `_. - -* ``nullptr`` to ``None`` conversion fixed in various builtin type casters. - `#732 `_. - -* ``enum_`` now exposes its members via a special ``__members__`` attribute. - `#666 `_. - -* ``std::vector`` bindings created using ``stl_bind.h`` can now optionally - implement the buffer protocol. `#488 `_. - -* Automated C++ reference documentation using doxygen and breathe. - `#598 `_. - -* Added minimum compiler version assertions. - `#727 `_. - -* Improved compatibility with C++1z. - `#677 `_. - -* Improved ``py::capsule`` API. Can be used to implement cleanup - callbacks that are involved at module destruction time. - `#752 `_. - -* Various minor improvements and fixes. - `#595 `_, - `#588 `_, - `#589 `_, - `#603 `_, - `#619 `_, - `#648 `_, - `#695 `_, - `#720 `_, - `#723 `_, - `#729 `_, - `#724 `_, - `#742 `_, - `#753 `_. - -v2.0.1 (Jan 4, 2017) ------------------------------------------------------ - -* Fix pointer to reference error in type_caster on MSVC - `#583 `_. - -* Fixed a segmentation in the test suite due to a typo - `cd7eac `_. - -v2.0.0 (Jan 1, 2017) ------------------------------------------------------ - -* Fixed a reference counting regression affecting types with custom metaclasses - (introduced in v2.0.0-rc1). - `#571 `_. - -* Quenched a CMake policy warning. - `#570 `_. - -v2.0.0-rc1 (Dec 23, 2016) ------------------------------------------------------ - -The pybind11 developers are excited to issue a release candidate of pybind11 -with a subsequent v2.0.0 release planned in early January next year. - -An incredible amount of effort by went into pybind11 over the last ~5 months, -leading to a release that is jam-packed with exciting new features and numerous -usability improvements. The following list links PRs or individual commits -whenever applicable. - -Happy Christmas! - -* Support for binding C++ class hierarchies that make use of multiple - inheritance. `#410 `_. - -* PyPy support: pybind11 now supports nightly builds of PyPy and will - interoperate with the future 5.7 release. No code changes are necessary, - everything "just" works as usual. Note that we only target the Python 2.7 - branch for now; support for 3.x will be added once its ``cpyext`` extension - support catches up. A few minor features remain unsupported for the time - being (notably dynamic attributes in custom types). - `#527 `_. - -* Significant work on the documentation -- in particular, the monolithic - ``advanced.rst`` file was restructured into a easier to read hierarchical - organization. `#448 `_. - -* Many NumPy-related improvements: - - 1. Object-oriented API to access and modify NumPy ``ndarray`` instances, - replicating much of the corresponding NumPy C API functionality. - `#402 `_. - - 2. NumPy array ``dtype`` array descriptors are now first-class citizens and - are exposed via a new class ``py::dtype``. - - 3. Structured dtypes can be registered using the ``PYBIND11_NUMPY_DTYPE()`` - macro. Special ``array`` constructors accepting dtype objects were also - added. - - One potential caveat involving this change: format descriptor strings - should now be accessed via ``format_descriptor::format()`` (however, for - compatibility purposes, the old syntax ``format_descriptor::value`` will - still work for non-structured data types). `#308 - `_. - - 4. Further improvements to support structured dtypes throughout the system. - `#472 `_, - `#474 `_, - `#459 `_, - `#453 `_, - `#452 `_, and - `#505 `_. - - 5. Fast access operators. `#497 `_. - - 6. Constructors for arrays whose storage is owned by another object. - `#440 `_. - - 7. Added constructors for ``array`` and ``array_t`` explicitly accepting shape - and strides; if strides are not provided, they are deduced assuming - C-contiguity. Also added simplified constructors for 1-dimensional case. - - 8. Added buffer/NumPy support for ``char[N]`` and ``std::array`` types. - - 9. Added ``memoryview`` wrapper type which is constructible from ``buffer_info``. - -* Eigen: many additional conversions and support for non-contiguous - arrays/slices. - `#427 `_, - `#315 `_, - `#316 `_, - `#312 `_, and - `#267 `_ - -* Incompatible changes in ``class_<...>::class_()``: - - 1. Declarations of types that provide access via the buffer protocol must - now include the ``py::buffer_protocol()`` annotation as an argument to - the ``class_`` constructor. - - 2. Declarations of types that require a custom metaclass (i.e. all classes - which include static properties via commands such as - ``def_readwrite_static()``) must now include the ``py::metaclass()`` - annotation as an argument to the ``class_`` constructor. - - These two changes were necessary to make type definitions in pybind11 - future-proof, and to support PyPy via its cpyext mechanism. `#527 - `_. - - - 3. This version of pybind11 uses a redesigned mechanism for instantiating - trampoline classes that are used to override virtual methods from within - Python. This led to the following user-visible syntax change: instead of - - .. code-block:: cpp - - py::class_("MyClass") - .alias() - .... - - write - - .. code-block:: cpp - - py::class_("MyClass") - .... - - Importantly, both the original and the trampoline class are now - specified as an arguments (in arbitrary order) to the ``py::class_`` - template, and the ``alias<..>()`` call is gone. The new scheme has zero - overhead in cases when Python doesn't override any functions of the - underlying C++ class. `rev. 86d825 - `_. - -* Added ``eval`` and ``eval_file`` functions for evaluating expressions and - statements from a string or file. `rev. 0d3fc3 - `_. - -* pybind11 can now create types with a modifiable dictionary. - `#437 `_ and - `#444 `_. - -* Support for translation of arbitrary C++ exceptions to Python counterparts. - `#296 `_ and - `#273 `_. - -* Report full backtraces through mixed C++/Python code, better reporting for - import errors, fixed GIL management in exception processing. - `#537 `_, - `#494 `_, - `rev. e72d95 `_, and - `rev. 099d6e `_. - -* Support for bit-level operations, comparisons, and serialization of C++ - enumerations. `#503 `_, - `#508 `_, - `#380 `_, - `#309 `_. - `#311 `_. - -* The ``class_`` constructor now accepts its template arguments in any order. - `#385 `_. - -* Attribute and item accessors now have a more complete interface which makes - it possible to chain attributes as in - ``obj.attr("a")[key].attr("b").attr("method")(1, 2, 3)``. `#425 - `_. - -* Major redesign of the default and conversion constructors in ``pytypes.h``. - `#464 `_. - -* Added built-in support for ``std::shared_ptr`` holder type. It is no longer - necessary to to include a declaration of the form - ``PYBIND11_DECLARE_HOLDER_TYPE(T, std::shared_ptr)`` (though continuing to - do so won't cause an error). - `#454 `_. - -* New ``py::overload_cast`` casting operator to select among multiple possible - overloads of a function. An example: - - .. code-block:: cpp - - py::class_(m, "Pet") - .def("set", py::overload_cast(&Pet::set), "Set the pet's age") - .def("set", py::overload_cast(&Pet::set), "Set the pet's name"); - - This feature only works on C++14-capable compilers. - `#541 `_. - -* C++ types are automatically cast to Python types, e.g. when assigning - them as an attribute. For instance, the following is now legal: - - .. code-block:: cpp - - py::module m = /* ... */ - m.attr("constant") = 123; - - (Previously, a ``py::cast`` call was necessary to avoid a compilation error.) - `#551 `_. - -* Redesigned ``pytest``-based test suite. `#321 `_. - -* Instance tracking to detect reference leaks in test suite. `#324 `_ - -* pybind11 can now distinguish between multiple different instances that are - located at the same memory address, but which have different types. - `#329 `_. - -* Improved logic in ``move`` return value policy. - `#510 `_, - `#297 `_. - -* Generalized unpacking API to permit calling Python functions from C++ using - notation such as ``foo(a1, a2, *args, "ka"_a=1, "kb"_a=2, **kwargs)``. `#372 `_. - -* ``py::print()`` function whose behavior matches that of the native Python - ``print()`` function. `#372 `_. - -* Added ``py::dict`` keyword constructor:``auto d = dict("number"_a=42, - "name"_a="World");``. `#372 `_. - -* Added ``py::str::format()`` method and ``_s`` literal: ``py::str s = "1 + 2 - = {}"_s.format(3);``. `#372 `_. - -* Added ``py::repr()`` function which is equivalent to Python's builtin - ``repr()``. `#333 `_. - -* Improved construction and destruction logic for holder types. It is now - possible to reference instances with smart pointer holder types without - constructing the holder if desired. The ``PYBIND11_DECLARE_HOLDER_TYPE`` - macro now accepts an optional second parameter to indicate whether the holder - type uses intrusive reference counting. - `#533 `_ and - `#561 `_. - -* Mapping a stateless C++ function to Python and back is now "for free" (i.e. - no extra indirections or argument conversion overheads). `rev. 954b79 - `_. - -* Bindings for ``std::valarray``. - `#545 `_. - -* Improved support for C++17 capable compilers. - `#562 `_. - -* Bindings for ``std::optional``. - `#475 `_, - `#476 `_, - `#479 `_, - `#499 `_, and - `#501 `_. - -* ``stl_bind.h``: general improvements and support for ``std::map`` and - ``std::unordered_map``. - `#490 `_, - `#282 `_, - `#235 `_. - -* The ``std::tuple``, ``std::pair``, ``std::list``, and ``std::vector`` type - casters now accept any Python sequence type as input. `rev. 107285 - `_. - -* Improved CMake Python detection on multi-architecture Linux. - `#532 `_. - -* Infrastructure to selectively disable or enable parts of the automatically - generated docstrings. `#486 `_. - -* ``reference`` and ``reference_internal`` are now the default return value - properties for static and non-static properties, respectively. `#473 - `_. (the previous defaults - were ``automatic``). `#473 `_. - -* Support for ``std::unique_ptr`` with non-default deleters or no deleter at - all (``py::nodelete``). `#384 `_. - -* Deprecated ``handle::call()`` method. The new syntax to call Python - functions is simply ``handle()``. It can also be invoked explicitly via - ``handle::operator()``, where ``X`` is an optional return value policy. - -* Print more informative error messages when ``make_tuple()`` or ``cast()`` - fail. `#262 `_. - -* Creation of holder types for classes deriving from - ``std::enable_shared_from_this<>`` now also works for ``const`` values. - `#260 `_. - -* ``make_iterator()`` improvements for better compatibility with various - types (now uses prefix increment operator); it now also accepts iterators - with different begin/end types as long as they are equality comparable. - `#247 `_. - -* ``arg()`` now accepts a wider range of argument types for default values. - `#244 `_. - -* Support ``keep_alive`` where the nurse object may be ``None``. `#341 - `_. - -* Added constructors for ``str`` and ``bytes`` from zero-terminated char - pointers, and from char pointers and length. Added constructors for ``str`` - from ``bytes`` and for ``bytes`` from ``str``, which will perform UTF-8 - decoding/encoding as required. - -* Many other improvements of library internals without user-visible changes - - -1.8.1 (July 12, 2016) ----------------------- -* Fixed a rare but potentially very severe issue when the garbage collector ran - during pybind11 type creation. - -1.8.0 (June 14, 2016) ----------------------- -* Redesigned CMake build system which exports a convenient - ``pybind11_add_module`` function to parent projects. -* ``std::vector<>`` type bindings analogous to Boost.Python's ``indexing_suite`` -* Transparent conversion of sparse and dense Eigen matrices and vectors (``eigen.h``) -* Added an ``ExtraFlags`` template argument to the NumPy ``array_t<>`` wrapper - to disable an enforced cast that may lose precision, e.g. to create overloads - for different precisions and complex vs real-valued matrices. -* Prevent implicit conversion of floating point values to integral types in - function arguments -* Fixed incorrect default return value policy for functions returning a shared - pointer -* Don't allow registering a type via ``class_`` twice -* Don't allow casting a ``None`` value into a C++ lvalue reference -* Fixed a crash in ``enum_::operator==`` that was triggered by the ``help()`` command -* Improved detection of whether or not custom C++ types can be copy/move-constructed -* Extended ``str`` type to also work with ``bytes`` instances -* Added a ``"name"_a`` user defined string literal that is equivalent to ``py::arg("name")``. -* When specifying function arguments via ``py::arg``, the test that verifies - the number of arguments now runs at compile time. -* Added ``[[noreturn]]`` attribute to ``pybind11_fail()`` to quench some - compiler warnings -* List function arguments in exception text when the dispatch code cannot find - a matching overload -* Added ``PYBIND11_OVERLOAD_NAME`` and ``PYBIND11_OVERLOAD_PURE_NAME`` macros which - can be used to override virtual methods whose name differs in C++ and Python - (e.g. ``__call__`` and ``operator()``) -* Various minor ``iterator`` and ``make_iterator()`` improvements -* Transparently support ``__bool__`` on Python 2.x and Python 3.x -* Fixed issue with destructor of unpickled object not being called -* Minor CMake build system improvements on Windows -* New ``pybind11::args`` and ``pybind11::kwargs`` types to create functions which - take an arbitrary number of arguments and keyword arguments -* New syntax to call a Python function from C++ using ``*args`` and ``*kwargs`` -* The functions ``def_property_*`` now correctly process docstring arguments (these - formerly caused a segmentation fault) -* Many ``mkdoc.py`` improvements (enumerations, template arguments, ``DOC()`` - macro accepts more arguments) -* Cygwin support -* Documentation improvements (pickling support, ``keep_alive``, macro usage) - -1.7 (April 30, 2016) ----------------------- -* Added a new ``move`` return value policy that triggers C++11 move semantics. - The automatic return value policy falls back to this case whenever a rvalue - reference is encountered -* Significantly more general GIL state routines that are used instead of - Python's troublesome ``PyGILState_Ensure`` and ``PyGILState_Release`` API -* Redesign of opaque types that drastically simplifies their usage -* Extended ability to pass values of type ``[const] void *`` -* ``keep_alive`` fix: don't fail when there is no patient -* ``functional.h``: acquire the GIL before calling a Python function -* Added Python RAII type wrappers ``none`` and ``iterable`` -* Added ``*args`` and ``*kwargs`` pass-through parameters to - ``pybind11.get_include()`` function -* Iterator improvements and fixes -* Documentation on return value policies and opaque types improved - -1.6 (April 30, 2016) ----------------------- -* Skipped due to upload to PyPI gone wrong and inability to recover - (https://github.com/pypa/packaging-problems/issues/74) - -1.5 (April 21, 2016) ----------------------- -* For polymorphic types, use RTTI to try to return the closest type registered with pybind11 -* Pickling support for serializing and unserializing C++ instances to a byte stream in Python -* Added a convenience routine ``make_iterator()`` which turns a range indicated - by a pair of C++ iterators into a iterable Python object -* Added ``len()`` and a variadic ``make_tuple()`` function -* Addressed a rare issue that could confuse the current virtual function - dispatcher and another that could lead to crashes in multi-threaded - applications -* Added a ``get_include()`` function to the Python module that returns the path - of the directory containing the installed pybind11 header files -* Documentation improvements: import issues, symbol visibility, pickling, limitations -* Added casting support for ``std::reference_wrapper<>`` - -1.4 (April 7, 2016) --------------------------- -* Transparent type conversion for ``std::wstring`` and ``wchar_t`` -* Allow passing ``nullptr``-valued strings -* Transparent passing of ``void *`` pointers using capsules -* Transparent support for returning values wrapped in ``std::unique_ptr<>`` -* Improved docstring generation for compatibility with Sphinx -* Nicer debug error message when default parameter construction fails -* Support for "opaque" types that bypass the transparent conversion layer for STL containers -* Redesigned type casting interface to avoid ambiguities that could occasionally cause compiler errors -* Redesigned property implementation; fixes crashes due to an unfortunate default return value policy -* Anaconda package generation support - -1.3 (March 8, 2016) --------------------------- - -* Added support for the Intel C++ compiler (v15+) -* Added support for the STL unordered set/map data structures -* Added support for the STL linked list data structure -* NumPy-style broadcasting support in ``pybind11::vectorize`` -* pybind11 now displays more verbose error messages when ``arg::operator=()`` fails -* pybind11 internal data structures now live in a version-dependent namespace to avoid ABI issues -* Many, many bugfixes involving corner cases and advanced usage - -1.2 (February 7, 2016) --------------------------- - -* Optional: efficient generation of function signatures at compile time using C++14 -* Switched to a simpler and more general way of dealing with function default - arguments. Unused keyword arguments in function calls are now detected and - cause errors as expected -* New ``keep_alive`` call policy analogous to Boost.Python's ``with_custodian_and_ward`` -* New ``pybind11::base<>`` attribute to indicate a subclass relationship -* Improved interface for RAII type wrappers in ``pytypes.h`` -* Use RAII type wrappers consistently within pybind11 itself. This - fixes various potential refcount leaks when exceptions occur -* Added new ``bytes`` RAII type wrapper (maps to ``string`` in Python 2.7) -* Made handle and related RAII classes const correct, using them more - consistently everywhere now -* Got rid of the ugly ``__pybind11__`` attributes on the Python side---they are - now stored in a C++ hash table that is not visible in Python -* Fixed refcount leaks involving NumPy arrays and bound functions -* Vastly improved handling of shared/smart pointers -* Removed an unnecessary copy operation in ``pybind11::vectorize`` -* Fixed naming clashes when both pybind11 and NumPy headers are included -* Added conversions for additional exception types -* Documentation improvements (using multiple extension modules, smart pointers, - other minor clarifications) -* unified infrastructure for parsing variadic arguments in ``class_`` and cpp_function -* Fixed license text (was: ZLIB, should have been: 3-clause BSD) -* Python 3.2 compatibility -* Fixed remaining issues when accessing types in another plugin module -* Added enum comparison and casting methods -* Improved SFINAE-based detection of whether types are copy-constructible -* Eliminated many warnings about unused variables and the use of ``offsetof()`` -* Support for ``std::array<>`` conversions - -1.1 (December 7, 2015) --------------------------- - -* Documentation improvements (GIL, wrapping functions, casting, fixed many typos) -* Generalized conversion of integer types -* Improved support for casting function objects -* Improved support for ``std::shared_ptr<>`` conversions -* Initial support for ``std::set<>`` conversions -* Fixed type resolution issue for types defined in a separate plugin module -* CMake build system improvements -* Factored out generic functionality to non-templated code (smaller code size) -* Added a code size / compile time benchmark vs Boost.Python -* Added an appveyor CI script - -1.0 (October 15, 2015) ------------------------- -* Initial release diff --git a/docs/conf.py b/docs/conf.py index a8758200f..5f216bffa 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -36,6 +36,7 @@ DIR = Path(__file__).parent.resolve() # ones. extensions = [ "breathe", + "myst_parser", "sphinx_copybutton", "sphinxcontrib.rsvgconverter", "sphinxcontrib.moderncmakedomain", @@ -49,9 +50,7 @@ breathe_domain_by_extension = {"h": "cpp"} templates_path = [".templates"] # The suffix(es) of source filenames. -# You can specify multiple suffix as a list of string: -# source_suffix = ['.rst', '.md'] -source_suffix = ".rst" +source_suffix = [".rst", ".md"] # The encoding of source files. # source_encoding = 'utf-8-sig' diff --git a/docs/release.rst b/docs/release.rst index 47b5717ca..d4f3b2960 100644 --- a/docs/release.rst +++ b/docs/release.rst @@ -39,7 +39,7 @@ If you don't have nox, you should either use ``pipx run nox`` instead, or use - Ensure that all the information in ``setup.cfg`` is up-to-date, like supported Python versions. -- Add release date in ``docs/changelog.rst`` and integrate the output of +- Add release date in ``docs/changelog.md`` and integrate the output of ``nox -s make_changelog``. - Note that the ``nox -s make_changelog`` command inspects @@ -90,10 +90,9 @@ If you don't have nox, you should either use ``pipx run nox`` instead, or use click "Draft a new release" on the far right, fill in the tag name (if you didn't tag above, it will be made here), fill in a release name like "Version X.Y.Z", and copy-and-paste the markdown-formatted (!) changelog - into the description. You can use ``cat docs/changelog.rst | pandoc -f rst -t gfm``, - then manually remove line breaks and strip links to PRs and issues, - e.g. to a bare ``#1234``, without the surrounding ``<...>_`` hyperlink markup. - Check "pre-release" if this is a beta/RC. + into the description. You can remove line breaks and strip links to PRs and + issues, e.g. to a bare ``#1234`` without the hyperlink markup. Check + "pre-release" if this is a beta/RC. - CLI method: with ``gh`` installed, run ``gh release create vX.Y.Z -t "Version X.Y.Z"`` If this is a pre-release, add ``-p``. @@ -110,7 +109,7 @@ If you don't have nox, you should either use ``pipx run nox`` instead, or use - Run ``nox -s tests_packaging`` to ensure this was done correctly. - If the release was a new MINOR version, add a new ``IN DEVELOPMENT`` - section in ``docs/changelog.rst``. + section in ``docs/changelog.md``. - ``git add``, ``git commit``, ``git push`` diff --git a/docs/requirements.in b/docs/requirements.in index bec8f707a..cb15ac5d0 100644 --- a/docs/requirements.in +++ b/docs/requirements.in @@ -1,5 +1,6 @@ breathe furo +myst_parser sphinx sphinx-copybutton sphinxcontrib-moderncmakedomain diff --git a/docs/requirements.txt b/docs/requirements.txt index aa2d86867..49256bca0 100644 --- a/docs/requirements.txt +++ b/docs/requirements.txt @@ -1,275 +1,87 @@ # This file was autogenerated by uv via the following command: -# uv pip compile --generate-hashes docs/requirements.in -o docs/requirements.txt -alabaster==0.7.16 \ - --hash=sha256:75a8b99c28a5dad50dd7f8ccdd447a121ddb3892da9e53d1ca5cca3106d58d65 \ - --hash=sha256:b46733c07dce03ae4e150330b975c75737fa60f0a7c591b6c8bf4928a28e2c92 +# uv pip compile docs/requirements.in -o docs/requirements.txt +alabaster==0.7.16 # via sphinx -babel==2.14.0 \ - --hash=sha256:6919867db036398ba21eb5c7a0f6b28ab8cbc3ae7a73a44ebe34ae74a4e7d363 \ - --hash=sha256:efb1a25b7118e67ce3a259bed20545c29cb68be8ad2c784c83689981b7a57287 +babel==2.14.0 # via sphinx -beautifulsoup4==4.12.3 \ - --hash=sha256:74e3d1928edc070d21748185c46e3fb33490f22f52a3addee9aee0f4f7781051 \ - --hash=sha256:b80878c9f40111313e55da8ba20bdba06d8fa3969fc68304167741bbf9e082ed +beautifulsoup4==4.12.3 # via furo -breathe==4.35.0 \ - --hash=sha256:5165541c3c67b6c7adde8b3ecfe895c6f7844783c4076b6d8d287e4f33d62386 \ - --hash=sha256:52c581f42ca4310737f9e435e3851c3d1f15446205a85fbc272f1f97ed74f5be - # via -r requirements.in -certifi==2024.7.4 \ - --hash=sha256:5a1e7645bc0ec61a09e26c36f6106dd4cf40c6db3a1fb6352b0244e7fb057c7b \ - --hash=sha256:c198e21b1289c2ab85ee4e67bb4b4ef3ead0892059901a8d5b622f24a1101e90 +breathe==4.35.0 + # via -r docs/requirements.in +certifi==2024.7.4 # via requests -charset-normalizer==3.3.2 \ - --hash=sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027 \ - --hash=sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087 \ - --hash=sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786 \ - --hash=sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8 \ - --hash=sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09 \ - --hash=sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185 \ - --hash=sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574 \ - --hash=sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e \ - --hash=sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519 \ - --hash=sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898 \ - --hash=sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269 \ - --hash=sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3 \ - --hash=sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f \ - --hash=sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6 \ - --hash=sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8 \ - --hash=sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a \ - --hash=sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73 \ - --hash=sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc \ - --hash=sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714 \ - --hash=sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2 \ - --hash=sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc \ - --hash=sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce \ - --hash=sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d \ - --hash=sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e \ - --hash=sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6 \ - --hash=sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269 \ - --hash=sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96 \ - --hash=sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d \ - --hash=sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a \ - --hash=sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4 \ - --hash=sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77 \ - --hash=sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d \ - --hash=sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0 \ - --hash=sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed \ - --hash=sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068 \ - --hash=sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac \ - --hash=sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25 \ - --hash=sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8 \ - --hash=sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab \ - --hash=sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26 \ - --hash=sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2 \ - --hash=sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db \ - --hash=sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f \ - --hash=sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5 \ - --hash=sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99 \ - --hash=sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c \ - --hash=sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d \ - --hash=sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811 \ - --hash=sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa \ - --hash=sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a \ - --hash=sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03 \ - --hash=sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b \ - --hash=sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04 \ - --hash=sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c \ - --hash=sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001 \ - --hash=sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458 \ - --hash=sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389 \ - --hash=sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99 \ - --hash=sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985 \ - --hash=sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537 \ - --hash=sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238 \ - --hash=sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f \ - --hash=sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d \ - --hash=sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796 \ - --hash=sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a \ - --hash=sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143 \ - --hash=sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8 \ - --hash=sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c \ - --hash=sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5 \ - --hash=sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5 \ - --hash=sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711 \ - --hash=sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4 \ - --hash=sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6 \ - --hash=sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c \ - --hash=sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7 \ - --hash=sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4 \ - --hash=sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b \ - --hash=sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae \ - --hash=sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12 \ - --hash=sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c \ - --hash=sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae \ - --hash=sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8 \ - --hash=sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887 \ - --hash=sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b \ - --hash=sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4 \ - --hash=sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f \ - --hash=sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5 \ - --hash=sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33 \ - --hash=sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519 \ - --hash=sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561 +charset-normalizer==3.3.2 # via requests -docutils==0.20.1 \ - --hash=sha256:96f387a2c5562db4476f09f13bbab2192e764cac08ebbf3a34a95d9b1e4a59d6 \ - --hash=sha256:f08a4e276c3a1583a86dce3e34aba3fe04d02bba2dd51ed16106244e8a923e3b +docutils==0.20.1 # via # breathe + # myst-parser # sphinx -furo==2024.1.29 \ - --hash=sha256:3548be2cef45a32f8cdc0272d415fcb3e5fa6a0eb4ddfe21df3ecf1fe45a13cf \ - --hash=sha256:4d6b2fe3f10a6e36eb9cc24c1e7beb38d7a23fc7b3c382867503b7fcac8a1e02 - # via -r requirements.in -idna==3.7 \ - --hash=sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc \ - --hash=sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0 +furo==2024.1.29 + # via -r docs/requirements.in +idna==3.7 # via requests -imagesize==1.4.1 \ - --hash=sha256:0d8d18d08f840c19d0ee7ca1fd82490fdc3729b7ac93f49870406ddde8ef8d8b \ - --hash=sha256:69150444affb9cb0d5cc5a92b3676f0b2fb7cd9ae39e947a5e11a36b4497cd4a +imagesize==1.4.1 # via sphinx -jinja2==3.1.6 \ - --hash=sha256:0137fb05990d35f1275a587e9aee6d56da821fc83491a0fb838183be43f66d6d \ - --hash=sha256:85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67 - # via sphinx -markupsafe==2.1.5 \ - --hash=sha256:00e046b6dd71aa03a41079792f8473dc494d564611a8f89bbbd7cb93295ebdcf \ - --hash=sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff \ - --hash=sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f \ - --hash=sha256:17b950fccb810b3293638215058e432159d2b71005c74371d784862b7e4683f3 \ - --hash=sha256:1f3fbcb7ef1f16e48246f704ab79d79da8a46891e2da03f8783a5b6fa41a9532 \ - --hash=sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f \ - --hash=sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617 \ - --hash=sha256:2d2d793e36e230fd32babe143b04cec8a8b3eb8a3122d2aceb4a371e6b09b8df \ - --hash=sha256:30b600cf0a7ac9234b2638fbc0fb6158ba5bdcdf46aeb631ead21248b9affbc4 \ - --hash=sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906 \ - --hash=sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f \ - --hash=sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4 \ - --hash=sha256:3e53af139f8579a6d5f7b76549125f0d94d7e630761a2111bc431fd820e163b8 \ - --hash=sha256:4096e9de5c6fdf43fb4f04c26fb114f61ef0bf2e5604b6ee3019d51b69e8c371 \ - --hash=sha256:4275d846e41ecefa46e2015117a9f491e57a71ddd59bbead77e904dc02b1bed2 \ - --hash=sha256:4c31f53cdae6ecfa91a77820e8b151dba54ab528ba65dfd235c80b086d68a465 \ - --hash=sha256:4f11aa001c540f62c6166c7726f71f7573b52c68c31f014c25cc7901deea0b52 \ - --hash=sha256:5049256f536511ee3f7e1b3f87d1d1209d327e818e6ae1365e8653d7e3abb6a6 \ - --hash=sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169 \ - --hash=sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad \ - --hash=sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2 \ - --hash=sha256:5dedb4db619ba5a2787a94d877bc8ffc0566f92a01c0ef214865e54ecc9ee5e0 \ - --hash=sha256:619bc166c4f2de5caa5a633b8b7326fbe98e0ccbfacabd87268a2b15ff73a029 \ - --hash=sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f \ - --hash=sha256:656f7526c69fac7f600bd1f400991cc282b417d17539a1b228617081106feb4a \ - --hash=sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced \ - --hash=sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5 \ - --hash=sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c \ - --hash=sha256:7a68b554d356a91cce1236aa7682dc01df0edba8d043fd1ce607c49dd3c1edcf \ - --hash=sha256:7b2e5a267c855eea6b4283940daa6e88a285f5f2a67f2220203786dfa59b37e9 \ - --hash=sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb \ - --hash=sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad \ - --hash=sha256:8dd717634f5a044f860435c1d8c16a270ddf0ef8588d4887037c5028b859b0c3 \ - --hash=sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1 \ - --hash=sha256:97cafb1f3cbcd3fd2b6fbfb99ae11cdb14deea0736fc2b0952ee177f2b813a46 \ - --hash=sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc \ - --hash=sha256:a549b9c31bec33820e885335b451286e2969a2d9e24879f83fe904a5ce59d70a \ - --hash=sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee \ - --hash=sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900 \ - --hash=sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5 \ - --hash=sha256:bc1667f8b83f48511b94671e0e441401371dfd0f0a795c7daa4a3cd1dde55bea \ - --hash=sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f \ - --hash=sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5 \ - --hash=sha256:bff1b4290a66b490a2f4719358c0cdcd9bafb6b8f061e45c7a2460866bf50c2e \ - --hash=sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a \ - --hash=sha256:c8b29db45f8fe46ad280a7294f5c3ec36dbac9491f2d1c17345be8e69cc5928f \ - --hash=sha256:ce409136744f6521e39fd8e2a24c53fa18ad67aa5bc7c2cf83645cce5b5c4e50 \ - --hash=sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a \ - --hash=sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b \ - --hash=sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4 \ - --hash=sha256:daa4ee5a243f0f20d528d939d06670a298dd39b1ad5f8a72a4275124a7819eff \ - --hash=sha256:db0b55e0f3cc0be60c1f19efdde9a637c32740486004f20d1cff53c3c0ece4d2 \ - --hash=sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46 \ - --hash=sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b \ - --hash=sha256:ec6a563cff360b50eed26f13adc43e61bc0c04d94b8be985e6fb24b81f6dcfdf \ - --hash=sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5 \ - --hash=sha256:fa173ec60341d6bb97a89f5ea19c85c5643c1e7dedebc22f5181eb73573142c5 \ - --hash=sha256:fa9db3f79de01457b03d4f01b34cf91bc0048eb2c3846ff26f66687c2f6d16ab \ - --hash=sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd \ - --hash=sha256:ffee1f21e5ef0d712f9033568f8344d5da8cc2869dbd08d87c84656e6a2d2f68 +jinja2==3.1.6 + # via + # myst-parser + # sphinx +markdown-it-py==3.0.0 + # via + # mdit-py-plugins + # myst-parser +markupsafe==2.1.5 # via jinja2 -packaging==24.0 \ - --hash=sha256:2ddfb553fdf02fb784c234c7ba6ccc288296ceabec964ad2eae3777778130bc5 \ - --hash=sha256:eb82c5e3e56209074766e6885bb04b8c38a0c015d0a30036ebe7ece34c9989e9 +mdit-py-plugins==0.4.2 + # via myst-parser +mdurl==0.1.2 + # via markdown-it-py +myst-parser==4.0.1 + # via -r docs/requirements.in +packaging==24.0 # via sphinx -pygments==2.17.2 \ - --hash=sha256:b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c \ - --hash=sha256:da46cec9fd2de5be3a8a784f434e4c4ab670b4ff54d605c4c2717e9d49c4c367 +pygments==2.17.2 # via # furo # sphinx -requests==2.32.0 \ - --hash=sha256:f2c3881dddb70d056c5bd7600a4fae312b2a300e39be6a118d30b90bd27262b5 \ - --hash=sha256:fa5490319474c82ef1d2c9bc459d3652e3ae4ef4c4ebdd18a21145a47ca4b6b8 +pyyaml==6.0.2 + # via myst-parser +requests==2.32.3 # via sphinx -snowballstemmer==2.2.0 \ - --hash=sha256:09b16deb8547d3412ad7b590689584cd0fe25ec8db3be37788be3810cbf19cb1 \ - --hash=sha256:c8e1716e83cc398ae16824e5572ae04e0d9fc2c6b985fb0f900f5f0c96ecba1a +snowballstemmer==2.2.0 # via sphinx -soupsieve==2.5 \ - --hash=sha256:5663d5a7b3bfaeee0bc4372e7fc48f9cff4940b3eec54a6451cc5299f1097690 \ - --hash=sha256:eaa337ff55a1579b6549dc679565eac1e3d000563bcb1c8ab0d0fefbc0c2cdc7 +soupsieve==2.5 # via beautifulsoup4 -sphinx==7.2.6 \ - --hash=sha256:1e09160a40b956dc623c910118fa636da93bd3ca0b9876a7b3df90f07d691560 \ - --hash=sha256:9a5160e1ea90688d5963ba09a2dcd8bdd526620edbb65c328728f1b2228d5ab5 +sphinx==7.2.6 # via - # -r requirements.in + # -r docs/requirements.in # breathe # furo + # myst-parser # sphinx-basic-ng # sphinx-copybutton # sphinxcontrib-moderncmakedomain # sphinxcontrib-svg2pdfconverter -sphinx-basic-ng==1.0.0b2 \ - --hash=sha256:9ec55a47c90c8c002b5960c57492ec3021f5193cb26cebc2dc4ea226848651c9 \ - --hash=sha256:eb09aedbabfb650607e9b4b68c9d240b90b1e1be221d6ad71d61c52e29f7932b +sphinx-basic-ng==1.0.0b2 # via furo -sphinx-copybutton==0.5.2 \ - --hash=sha256:4cf17c82fb9646d1bc9ca92ac280813a3b605d8c421225fd9913154103ee1fbd \ - --hash=sha256:fb543fd386d917746c9a2c50360c7905b605726b9355cd26e9974857afeae06e - # via -r requirements.in -sphinxcontrib-applehelp==1.0.8 \ - --hash=sha256:c40a4f96f3776c4393d933412053962fac2b84f4c99a7982ba42e09576a70619 \ - --hash=sha256:cb61eb0ec1b61f349e5cc36b2028e9e7ca765be05e49641c97241274753067b4 +sphinx-copybutton==0.5.2 + # via -r docs/requirements.in +sphinxcontrib-applehelp==1.0.8 # via sphinx -sphinxcontrib-devhelp==1.0.6 \ - --hash=sha256:6485d09629944511c893fa11355bda18b742b83a2b181f9a009f7e500595c90f \ - --hash=sha256:9893fd3f90506bc4b97bdb977ceb8fbd823989f4316b28c3841ec128544372d3 +sphinxcontrib-devhelp==1.0.6 # via sphinx -sphinxcontrib-htmlhelp==2.0.5 \ - --hash=sha256:0dc87637d5de53dd5eec3a6a01753b1ccf99494bd756aafecd74b4fa9e729015 \ - --hash=sha256:393f04f112b4d2f53d93448d4bce35842f62b307ccdc549ec1585e950bc35e04 +sphinxcontrib-htmlhelp==2.0.5 # via sphinx -sphinxcontrib-jsmath==1.0.1 \ - --hash=sha256:2ec2eaebfb78f3f2078e73666b1415417a116cc848b72e5172e596c871103178 \ - --hash=sha256:a9925e4a4587247ed2191a22df5f6970656cb8ca2bd6284309578f2153e0c4b8 +sphinxcontrib-jsmath==1.0.1 # via sphinx -sphinxcontrib-moderncmakedomain==3.27.0 \ - --hash=sha256:51e259e91f58d17cc0fac9307fd40106aa59d5acaa741887903fc3660361d1a1 \ - --hash=sha256:70a73e0e7cff1b117074e968ccb7f72383ed0f572414df0e216cea06914de988 - # via -r requirements.in -sphinxcontrib-qthelp==1.0.7 \ - --hash=sha256:053dedc38823a80a7209a80860b16b722e9e0209e32fea98c90e4e6624588ed6 \ - --hash=sha256:e2ae3b5c492d58fcbd73281fbd27e34b8393ec34a073c792642cd8e529288182 +sphinxcontrib-moderncmakedomain==3.27.0 + # via -r docs/requirements.in +sphinxcontrib-qthelp==1.0.7 # via sphinx -sphinxcontrib-serializinghtml==1.1.10 \ - --hash=sha256:326369b8df80a7d2d8d7f99aa5ac577f51ea51556ed974e7716cfd4fca3f6cb7 \ - --hash=sha256:93f3f5dc458b91b192fe10c397e324f262cf163d79f3282c158e8436a2c4511f +sphinxcontrib-serializinghtml==1.1.10 # via sphinx -sphinxcontrib-svg2pdfconverter==1.2.2 \ - --hash=sha256:04ec767b55780a6b18d89cc1a8ada6d900c6efde9d1683abdb98a49b144465ca \ - --hash=sha256:80a55ca61f70eae93efc65f3814f2f177c86ba55934a9f6c5022f1778b62146b - # via -r requirements.in -urllib3==2.2.2 \ - --hash=sha256:a448b2f64d686155468037e1ace9f2d2199776e17f0a46610480d311f73e3472 \ - --hash=sha256:dd505485549a7a552833da5e6063639d0d177c04f23bc3864e41e5dc5f612168 +sphinxcontrib-svg2pdfconverter==1.2.2 + # via -r docs/requirements.in +urllib3==2.2.2 # via requests diff --git a/tools/make_changelog.py b/tools/make_changelog.py index efb2a23dc..03ceb7163 100755 --- a/tools/make_changelog.py +++ b/tools/make_changelog.py @@ -12,19 +12,20 @@ import ghapi.all from rich import print from rich.syntax import Syntax -ENTRY = re.compile( +MD_ENTRY = re.compile( r""" - Suggested \s changelog \s entry: - .* - ```rst - \s* - (.*?) - \s* - ``` -""", - re.DOTALL | re.VERBOSE, + \#\#\ Suggested\ changelog\ entry: # Match the heading exactly + (?:\s*)? # Optionally match one comment + (?P.*?) # Lazily capture content until... + (?= # Lookahead for one of the following: + ^-{3,}\s*$ # A line with 3 or more dashes + | ^") print() for msg in msgs: - print(Syntax(msg, "rst", theme="ansi_light", word_wrap=True)) + print(Syntax(msg, "md", theme="ansi_light", word_wrap=True)) print() print() @@ -93,7 +100,16 @@ if missing: print(f"[red] {issue.html_url}\n") print("[bold]Template:\n") - msg = "## Suggested changelog entry:\n\n```rst\n\n```" + msg = "## Suggested changelog entry:" print(Syntax(msg, "md", theme="ansi_light")) +if old: + print() + print("[red]" + "-" * 30) + print() + + for issue in old: + print(f"[red bold]Old:[/red bold][red] {issue.title}") + print(f"[red] {issue.html_url}\n") + print()