* Create templated abstract classes KeysView, ValuesView and ItemsView, and implement them on-the-fly when wrapping any specific map type
* We don't want to wrap different ValuesView objects for double values and const double, for example, as both wrappers will be named ValuesView[float]
* Fallback to C++ names if key or values types are not wrapped
* Added a test for .keys(), .values() and .items() returning the same types for similarly-typed maps
* Fixed wrong use of auto in a declarator list: the two descriptions might have different types
* Fixes for clang-tidy issues: explicit single-argument constructor, using the 'override' keyword when overriding functions
* Bugfix for old versions of clang++, which seem to have trouble with the struct being defined inside a module, which was also needlessly ugly anyway
* Bugfix for clang++, which doesn't have some of the names in runtime uness they are specified to be static
* A fix for clang-tidy performance-inefficient-string-concatenation issues - I personally think this looks uglier, but it's probably worth it for clang-tidy to be happy
* Possible fix for clang++ linking issues - make the descriptions static constexpr to make sure they are known before linking
* Correct names for previously-wrapped types as keys/values of maps
* Bugfix - typo in type info names which caused things to segfault
* Apply suggestions from code review
Co-authored-by: Aaron Gokaslan <skylion.aaron@gmail.com>
* Use detail::remove_cvref_t instead of doing remove_cv and remove_reference separately
* Avoid names with double underscore, as they are reserved
* Improved testing for KeysView, ValuesView and ItemsView: check type names + stricter asserts
* Moved description logic to helper function in type_caster_base.h
* style: pre-commit fixes
* Fix a clang-tidy issue: do not use 'else' after 'return'
* Apply suggestion by @Skylion007, with additional trivial simplification.
Co-authored-by: Amir <aimir@local>
Co-authored-by: aimir <aimir@localhost>
Co-authored-by: Aaron Gokaslan <skylion.aaron@gmail.com>
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Ralf W. Grosse-Kunstleve <rwgk@google.com>
* Replace 🐍 3.6 • ubuntu-latest • x64 -DPYBIND11_FINDPYTHON=ON -DCMAKE_CXX_FLAGS="-D_=1" with 3.9
* Revert "Replace 🐍 3.6 • ubuntu-latest • x64 -DPYBIND11_FINDPYTHON=ON -DCMAKE_CXX_FLAGS="-D_=1" with 3.9"
This reverts commit 3ec984e1ed.
* Systematically change all active ubuntu-latest to ubuntu-20.04, except in upstream.yml
* Revert "Systematically change all active ubuntu-latest to ubuntu-20.04, except in upstream.yml"
This reverts commit cdfd99526a.
* Change only some ubuntu-latest to ubuntu-20.04
* scoped_interpreter overloaded ctor: PyConfig param
* style: pre-commit fixes
* refact: some logics extracted into funcs (precheck_interpreter, _initialize_interpreter); config_guard
* style: pre-commit fixes
* refact: scoped_config, some funcs hidden in detail ns
* refact: macro PYBIND11_PYCONFIG_SUPPORT_PY_VERSION + undef
* feat: PYBIND11_PYCONFIG_SUPPORT_PY_VERSION set to 3.8
* tests: Custom PyConfig
* ci: python 3.6 -> 3.8
* ci: reverted py 38 back to 36; refact: initialize_interpreter overloads
* style: pre-commit fixes
* fix: readability-implicit-bool-conversion
* refact: each initialize_interpreter overloads in pybind11 ns
* Move `initialize_interpreter_pre_pyconfig()` into the `detail` namespace.
Move the `PYBIND11_PYCONFIG_SUPPORT_PY_VERSION_HEX` define down to where it is used for the first time, and check if it is defined already, so that it is possible to customize from the compilation command line, just in case there is some unforeseen issue for Python 3.8, 3.9, 3.10.
* tests: Add program dir to path, Custom PyConfig with argv
* refact: clang-formatted
* tests: Add-program-dir-to-path covers both scoped_interpreter overloads
* tests: Add-program-dir-to-path fixed
* tests: Add-program-dir-to-path py_version dependant validation
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Ralf W. Grosse-Kunstleve <rwgk@google.com>
* Use `multiprocessing` `start_method` `"forkserver"`
Alternative to PR #4305
* Add link to comment under PR #4105
* Unconditionally `pytest.skip("DEADLOCK")` for PyPy Windows
* Remove `SKIP_IF_DEADLOCK` entirely, for simplicity. Hopefully this PR will resolve the deadlocks for good.
* Add "In a nutshell" comment, in response to request by @EricCousineau-TRI
* Use `PyEval_InitThreads()` as intended (actually matters only for Python 3.6).
* Add `if defined(WITH_THREAD)` condition.
https://docs.python.org/3.6/c-api/init.html#c.PyEval_InitThreads
> This function is not available when thread support is disabled at compile time.
* Fix oversight pointed out by @EricCousineau-TRI: Remove condition that is always false.
* Illustrate bug in functional.h
* style: pre-commit fixes
* Make functional casting more robust / add workaround
* Make function_record* casting even more robust
* See if this fixes PyPy issue
* It still fails on PyPy sadly
* Do not make new CTOR just yet
* Fix test
* Add name to ensure correctness
* style: pre-commit fixes
* Clean up tests + remove ifdef guards
* Add comments
* Improve comments, error handling, and safety
* Fix compile error
* Fix magic logic
* Extract helper function
* Fix func signature
* move to local internals
* style: pre-commit fixes
* Switch to simpler design
* style: pre-commit fixes
* Move to function_record
* style: pre-commit fixes
* Switch to internals, update tests and docs
* Fix lint
* Oops, forgot to resolve last comment
* Fix typo
* Update in response to comments
* Implement suggestion to improve test
* Update comment
* Simple fixes
Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com>
Co-authored-by: Aaron Gokaslan <aaronGokaslan@gmail.com>
* docs: prepare for 2.10.1 release
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
* Update changelog.rst
* docs: update changelog with final list of PRs
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
* Update docs/changelog.rst
* chore: one more changelog bump
Signed-off-by: Henry Schreiner <henryschreineriii@gmail.com>
Background: #2999, #4105, #4283, #4284
In a nutshell:
* Only macOS actually needs `PYBIND11_EXPORT_EXCEPTION` (#4284).
* Evidently (#4283), under macOS `PYBIND11_EXPORT_EXCEPTION` does not run the risk of introducing ODR violations,
* but evidently (#4283) under Linux it does, in the presumably rare/unusual situation that `RTLD_GLOBAL` is used.
* Windows does no have the equivalent of `RTLD_GLOBAL`, therefore `PYBIND11_EXPORT_EXCEPTION` has no practical benefit, on the contrary, noisy warning suppression pragmas are needed, therefore it is best left empty.