mirror of
https://github.com/pybind/pybind11.git
synced 2025-02-07 17:32:00 +00:00
Merge branch 'master' into sh_merge_master
This commit is contained in:
commit
ab41fa281c
49
.github/workflows/ci.yml
vendored
49
.github/workflows/ci.yml
vendored
@ -815,55 +815,6 @@ jobs:
|
|||||||
- name: Python tests
|
- name: Python tests
|
||||||
run: cmake --build build --config Debug -t pytest
|
run: cmake --build build --config Debug -t pytest
|
||||||
|
|
||||||
win32-msvc2017:
|
|
||||||
name: "🐍 ${{ matrix.python }} • MSVC 2017 • x64"
|
|
||||||
runs-on: windows-2016
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
matrix:
|
|
||||||
python:
|
|
||||||
- 3.6
|
|
||||||
- 3.7
|
|
||||||
std:
|
|
||||||
- 14
|
|
||||||
|
|
||||||
include:
|
|
||||||
- python: 3.7
|
|
||||||
std: 17
|
|
||||||
args: >
|
|
||||||
-DCMAKE_CXX_FLAGS="/permissive- /EHsc /GR"
|
|
||||||
|
|
||||||
steps:
|
|
||||||
- uses: actions/checkout@v2
|
|
||||||
|
|
||||||
- name: Setup 🐍 ${{ matrix.python }}
|
|
||||||
uses: actions/setup-python@v2
|
|
||||||
with:
|
|
||||||
python-version: ${{ matrix.python }}
|
|
||||||
|
|
||||||
- name: Update CMake
|
|
||||||
uses: jwlawson/actions-setup-cmake@v1.12
|
|
||||||
|
|
||||||
- name: Prepare env
|
|
||||||
run: |
|
|
||||||
python -m pip install -r tests/requirements.txt
|
|
||||||
|
|
||||||
# First build - C++11 mode and inplace
|
|
||||||
- name: Configure
|
|
||||||
run: >
|
|
||||||
cmake -S . -B build
|
|
||||||
-G "Visual Studio 15 2017" -A x64
|
|
||||||
-DPYBIND11_WERROR=ON
|
|
||||||
-DDOWNLOAD_CATCH=ON
|
|
||||||
-DDOWNLOAD_EIGEN=ON
|
|
||||||
-DCMAKE_CXX_STANDARD=${{ matrix.std }}
|
|
||||||
${{ matrix.args }}
|
|
||||||
|
|
||||||
- name: Build ${{ matrix.std }}
|
|
||||||
run: cmake --build build -j 2
|
|
||||||
|
|
||||||
- name: Run all checks
|
|
||||||
run: cmake --build build -t check
|
|
||||||
|
|
||||||
windows-2022:
|
windows-2022:
|
||||||
strategy:
|
strategy:
|
||||||
|
10
.github/workflows/configure.yml
vendored
10
.github/workflows/configure.yml
vendored
@ -19,7 +19,7 @@ jobs:
|
|||||||
matrix:
|
matrix:
|
||||||
runs-on: [ubuntu-latest, macos-latest, windows-latest]
|
runs-on: [ubuntu-latest, macos-latest, windows-latest]
|
||||||
arch: [x64]
|
arch: [x64]
|
||||||
cmake: ["3.21"]
|
cmake: ["3.23"]
|
||||||
|
|
||||||
include:
|
include:
|
||||||
- runs-on: ubuntu-latest
|
- runs-on: ubuntu-latest
|
||||||
@ -30,12 +30,8 @@ jobs:
|
|||||||
arch: x64
|
arch: x64
|
||||||
cmake: 3.7
|
cmake: 3.7
|
||||||
|
|
||||||
- runs-on: windows-2016
|
- runs-on: windows-2019
|
||||||
arch: x86
|
arch: x64 # x86 compilers seem to be missing on 2019 image
|
||||||
cmake: 3.8
|
|
||||||
|
|
||||||
- runs-on: windows-2016
|
|
||||||
arch: x86
|
|
||||||
cmake: 3.18
|
cmake: 3.18
|
||||||
|
|
||||||
name: 🐍 3.7 • CMake ${{ matrix.cmake }} • ${{ matrix.runs-on }}
|
name: 🐍 3.7 • CMake ${{ matrix.cmake }} • ${{ matrix.runs-on }}
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
repos:
|
repos:
|
||||||
# Standard hooks
|
# Standard hooks
|
||||||
- repo: https://github.com/pre-commit/pre-commit-hooks
|
- repo: https://github.com/pre-commit/pre-commit-hooks
|
||||||
rev: "v4.1.0"
|
rev: "v4.2.0"
|
||||||
hooks:
|
hooks:
|
||||||
- id: check-added-large-files
|
- id: check-added-large-files
|
||||||
- id: check-case-conflict
|
- id: check-case-conflict
|
||||||
@ -33,7 +33,7 @@ repos:
|
|||||||
|
|
||||||
# Upgrade old Python syntax
|
# Upgrade old Python syntax
|
||||||
- repo: https://github.com/asottile/pyupgrade
|
- repo: https://github.com/asottile/pyupgrade
|
||||||
rev: "v2.31.1"
|
rev: "v2.32.0"
|
||||||
hooks:
|
hooks:
|
||||||
- id: pyupgrade
|
- id: pyupgrade
|
||||||
args: [--py36-plus]
|
args: [--py36-plus]
|
||||||
@ -76,7 +76,6 @@ repos:
|
|||||||
rev: "v1.2.5"
|
rev: "v1.2.5"
|
||||||
hooks:
|
hooks:
|
||||||
- id: pycln
|
- id: pycln
|
||||||
additional_dependencies: [click<8.1] # Unpin when typer updates
|
|
||||||
stages: [manual]
|
stages: [manual]
|
||||||
|
|
||||||
# Checking for common mistakes
|
# Checking for common mistakes
|
||||||
@ -111,7 +110,7 @@ repos:
|
|||||||
|
|
||||||
# PyLint has native support - not always usable, but works for us
|
# PyLint has native support - not always usable, but works for us
|
||||||
- repo: https://github.com/PyCQA/pylint
|
- repo: https://github.com/PyCQA/pylint
|
||||||
rev: "v2.13.2"
|
rev: "v2.13.5"
|
||||||
hooks:
|
hooks:
|
||||||
- id: pylint
|
- id: pylint
|
||||||
files: ^pybind11
|
files: ^pybind11
|
||||||
@ -130,7 +129,7 @@ repos:
|
|||||||
rev: "v0.942"
|
rev: "v0.942"
|
||||||
hooks:
|
hooks:
|
||||||
- id: mypy
|
- id: mypy
|
||||||
args: [--show-error-codes]
|
args: []
|
||||||
exclude: ^(tests|docs)/
|
exclude: ^(tests|docs)/
|
||||||
additional_dependencies: [nox, rich]
|
additional_dependencies: [nox, rich]
|
||||||
|
|
||||||
|
@ -6,10 +6,129 @@ Changelog
|
|||||||
Starting with version 1.8.0, pybind11 releases use a `semantic versioning
|
Starting with version 1.8.0, pybind11 releases use a `semantic versioning
|
||||||
<http://semver.org>`_ policy.
|
<http://semver.org>`_ policy.
|
||||||
|
|
||||||
|
Changes will be added here periodically from the "Suggested changelog entry"
|
||||||
|
block in pull request descriptions.
|
||||||
|
|
||||||
IN DEVELOPMENT
|
IN DEVELOPMENT
|
||||||
--------------
|
--------------
|
||||||
|
|
||||||
Changes will be added here periodically.
|
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.
|
||||||
|
|
||||||
|
New features:
|
||||||
|
|
||||||
|
* ``type_caster<std::monostate>`` 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>`_
|
||||||
|
|
||||||
|
* Support bytearray casting to string.
|
||||||
|
`#3707 <https://github.com/pybind/pybind11/pull/3707>`_
|
||||||
|
|
||||||
|
Changes:
|
||||||
|
|
||||||
|
* Python 2 support was removed completely.
|
||||||
|
`#3688 <https://github.com/pybind/pybind11/pull/3688>`_
|
||||||
|
|
||||||
|
* The minimum version for MSVC is now 2017.
|
||||||
|
`#3722 <https://github.com/pybind/pybind11/pull/3722>`_
|
||||||
|
|
||||||
|
* 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>`_
|
||||||
|
|
||||||
|
* Fix exception handling when ``pybind11::weakref()`` fails.
|
||||||
|
`#3739 <https://github.com/pybind/pybind11/pull/3739>`_
|
||||||
|
|
||||||
|
|
||||||
|
Bug fixes:
|
||||||
|
|
||||||
|
* ``PYBIND11_OBJECT_CVT`` and ``PYBIND11_OBJECT_CVT_DEFAULT`` macro can be used
|
||||||
|
to define classes in namespaces other than pybind11.
|
||||||
|
`#3797 <https://github.com/pybind/pybind11/pull/3797>`_
|
||||||
|
|
||||||
|
Build system improvements:
|
||||||
|
|
||||||
|
* 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>`_
|
||||||
|
|
||||||
|
* Avoid ``setup.py <command>`` usage in internal tests.
|
||||||
|
`#3734 <https://github.com/pybind/pybind11/pull/3734>`_
|
||||||
|
|
||||||
|
|
||||||
|
Backend and tidying up:
|
||||||
|
|
||||||
|
* Remove idioms in code comments. Use inclusive language.
|
||||||
|
`#3809 <https://github.com/pybind/pybind11/pull/3809>`_
|
||||||
|
|
||||||
|
|
||||||
|
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)
|
Version 2.9.1 (Feb 2, 2022)
|
||||||
|
@ -531,7 +531,7 @@ struct type_caster<std::basic_string_view<CharT, Traits>,
|
|||||||
template <typename CharT>
|
template <typename CharT>
|
||||||
struct type_caster<CharT, enable_if_t<is_std_char_type<CharT>::value>> {
|
struct type_caster<CharT, enable_if_t<is_std_char_type<CharT>::value>> {
|
||||||
using StringType = std::basic_string<CharT>;
|
using StringType = std::basic_string<CharT>;
|
||||||
using StringCaster = type_caster<StringType>;
|
using StringCaster = make_caster<StringType>;
|
||||||
StringCaster str_caster;
|
StringCaster str_caster;
|
||||||
bool none = false;
|
bool none = false;
|
||||||
CharT one_char = 0;
|
CharT one_char = 0;
|
||||||
@ -1179,15 +1179,18 @@ enable_if_t<!cast_is_temporary_value_reference<T>::value, T> cast_ref(object &&,
|
|||||||
// static_assert, even though if it's in dead code, so we provide a "trampoline" to pybind11::cast
|
// static_assert, even though if it's in dead code, so we provide a "trampoline" to pybind11::cast
|
||||||
// that only does anything in cases where pybind11::cast is valid.
|
// that only does anything in cases where pybind11::cast is valid.
|
||||||
template <typename T>
|
template <typename T>
|
||||||
enable_if_t<!cast_is_temporary_value_reference<T>::value, T> cast_safe(object &&o) {
|
|
||||||
return pybind11::cast<T>(std::move(o));
|
|
||||||
}
|
|
||||||
template <typename T>
|
|
||||||
enable_if_t<cast_is_temporary_value_reference<T>::value, T> cast_safe(object &&) {
|
enable_if_t<cast_is_temporary_value_reference<T>::value, T> cast_safe(object &&) {
|
||||||
pybind11_fail("Internal error: cast_safe fallback invoked");
|
pybind11_fail("Internal error: cast_safe fallback invoked");
|
||||||
}
|
}
|
||||||
template <>
|
template <typename T>
|
||||||
inline void cast_safe<void>(object &&) {}
|
enable_if_t<std::is_same<void, intrinsic_t<T>>::value, void> cast_safe(object &&) {}
|
||||||
|
template <typename T>
|
||||||
|
enable_if_t<detail::none_of<cast_is_temporary_value_reference<T>,
|
||||||
|
std::is_same<void, intrinsic_t<T>>>::value,
|
||||||
|
T>
|
||||||
|
cast_safe(object &&o) {
|
||||||
|
return pybind11::cast<T>(std::move(o));
|
||||||
|
}
|
||||||
|
|
||||||
PYBIND11_NAMESPACE_END(detail)
|
PYBIND11_NAMESPACE_END(detail)
|
||||||
|
|
||||||
@ -1267,8 +1270,8 @@ struct arg_v : arg {
|
|||||||
private:
|
private:
|
||||||
template <typename T>
|
template <typename T>
|
||||||
arg_v(arg &&base, T &&x, const char *descr = nullptr)
|
arg_v(arg &&base, T &&x, const char *descr = nullptr)
|
||||||
: arg(base), value(reinterpret_steal<object>(
|
: arg(base), value(reinterpret_steal<object>(detail::make_caster<T>::cast(
|
||||||
detail::make_caster<T>::cast(x, return_value_policy::automatic, {}))),
|
std::forward<T>(x), return_value_policy::automatic, {}))),
|
||||||
descr(descr)
|
descr(descr)
|
||||||
#if !defined(NDEBUG)
|
#if !defined(NDEBUG)
|
||||||
,
|
,
|
||||||
@ -1515,7 +1518,7 @@ private:
|
|||||||
type_id<T>());
|
type_id<T>());
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
args_list.append(o);
|
args_list.append(std::move(o));
|
||||||
}
|
}
|
||||||
|
|
||||||
void process(list &args_list, detail::args_proxy ap) {
|
void process(list &args_list, detail::args_proxy ap) {
|
||||||
|
@ -640,9 +640,9 @@ private:
|
|||||||
|
|
||||||
list names, formats, offsets;
|
list names, formats, offsets;
|
||||||
for (auto &descr : field_descriptors) {
|
for (auto &descr : field_descriptors) {
|
||||||
names.append(descr.name);
|
names.append(std::move(descr.name));
|
||||||
formats.append(descr.format);
|
formats.append(std::move(descr.format));
|
||||||
offsets.append(descr.offset);
|
offsets.append(std::move(descr.offset));
|
||||||
}
|
}
|
||||||
return dtype(std::move(names), std::move(formats), std::move(offsets), itemsize);
|
return dtype(std::move(names), std::move(formats), std::move(offsets), itemsize);
|
||||||
}
|
}
|
||||||
|
@ -1911,7 +1911,8 @@ private:
|
|||||||
if (holder_ptr) {
|
if (holder_ptr) {
|
||||||
init_holder_from_existing(v_h, holder_ptr, std::is_copy_constructible<holder_type>());
|
init_holder_from_existing(v_h, holder_ptr, std::is_copy_constructible<holder_type>());
|
||||||
v_h.set_holder_constructed();
|
v_h.set_holder_constructed();
|
||||||
} else if (inst->owned || detail::always_construct_holder<holder_type>::value) {
|
} else if (PYBIND11_SILENCE_MSVC_C4127(detail::always_construct_holder<holder_type>::value)
|
||||||
|
|| inst->owned) {
|
||||||
new (std::addressof(v_h.holder<holder_type>())) holder_type(v_h.value_ptr<type>());
|
new (std::addressof(v_h.holder<holder_type>())) holder_type(v_h.value_ptr<type>());
|
||||||
v_h.set_holder_constructed();
|
v_h.set_holder_constructed();
|
||||||
}
|
}
|
||||||
@ -2505,7 +2506,8 @@ template <return_value_policy Policy = return_value_policy::reference_internal,
|
|||||||
typename Type,
|
typename Type,
|
||||||
typename... Extra>
|
typename... Extra>
|
||||||
iterator make_iterator(Type &value, Extra &&...extra) {
|
iterator make_iterator(Type &value, Extra &&...extra) {
|
||||||
return make_iterator<Policy>(std::begin(value), std::end(value), extra...);
|
return make_iterator<Policy>(
|
||||||
|
std::begin(value), std::end(value), std::forward<Extra>(extra)...);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Makes an iterator over the keys (`.first`) of a stl map-like container supporting
|
/// Makes an iterator over the keys (`.first`) of a stl map-like container supporting
|
||||||
@ -2514,7 +2516,8 @@ template <return_value_policy Policy = return_value_policy::reference_internal,
|
|||||||
typename Type,
|
typename Type,
|
||||||
typename... Extra>
|
typename... Extra>
|
||||||
iterator make_key_iterator(Type &value, Extra &&...extra) {
|
iterator make_key_iterator(Type &value, Extra &&...extra) {
|
||||||
return make_key_iterator<Policy>(std::begin(value), std::end(value), extra...);
|
return make_key_iterator<Policy>(
|
||||||
|
std::begin(value), std::end(value), std::forward<Extra>(extra)...);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Makes an iterator over the values (`.second`) of a stl map-like container supporting
|
/// Makes an iterator over the values (`.second`) of a stl map-like container supporting
|
||||||
@ -2523,7 +2526,8 @@ template <return_value_policy Policy = return_value_policy::reference_internal,
|
|||||||
typename Type,
|
typename Type,
|
||||||
typename... Extra>
|
typename... Extra>
|
||||||
iterator make_value_iterator(Type &value, Extra &&...extra) {
|
iterator make_value_iterator(Type &value, Extra &&...extra) {
|
||||||
return make_value_iterator<Policy>(std::begin(value), std::end(value), extra...);
|
return make_value_iterator<Policy>(
|
||||||
|
std::begin(value), std::end(value), std::forward<Extra>(extra)...);
|
||||||
}
|
}
|
||||||
|
|
||||||
template <typename InputType, typename OutputType>
|
template <typename InputType, typename OutputType>
|
||||||
|
@ -268,10 +268,7 @@ public:
|
|||||||
/// Copy constructor; always increases the reference count
|
/// Copy constructor; always increases the reference count
|
||||||
object(const object &o) : handle(o) { inc_ref(); }
|
object(const object &o) : handle(o) { inc_ref(); }
|
||||||
/// Move constructor; steals the object from ``other`` and preserves its reference count
|
/// Move constructor; steals the object from ``other`` and preserves its reference count
|
||||||
object(object &&other) noexcept {
|
object(object &&other) noexcept : handle(other) { other.m_ptr = nullptr; }
|
||||||
m_ptr = other.m_ptr;
|
|
||||||
other.m_ptr = nullptr;
|
|
||||||
}
|
|
||||||
/// Destructor; automatically calls `handle::dec_ref()`
|
/// Destructor; automatically calls `handle::dec_ref()`
|
||||||
~object() { dec_ref(); }
|
~object() { dec_ref(); }
|
||||||
|
|
||||||
@ -1519,8 +1516,8 @@ private:
|
|||||||
class slice : public object {
|
class slice : public object {
|
||||||
public:
|
public:
|
||||||
PYBIND11_OBJECT_DEFAULT(slice, object, PySlice_Check)
|
PYBIND11_OBJECT_DEFAULT(slice, object, PySlice_Check)
|
||||||
slice(handle start, handle stop, handle step) {
|
slice(handle start, handle stop, handle step)
|
||||||
m_ptr = PySlice_New(start.ptr(), stop.ptr(), step.ptr());
|
: object(PySlice_New(start.ptr(), stop.ptr(), step.ptr()), stolen_t{}) {
|
||||||
if (!m_ptr) {
|
if (!m_ptr) {
|
||||||
pybind11_fail("Could not allocate slice object!");
|
pybind11_fail("Could not allocate slice object!");
|
||||||
}
|
}
|
||||||
|
@ -79,7 +79,7 @@ struct set_caster {
|
|||||||
for (auto &&value : src) {
|
for (auto &&value : src) {
|
||||||
auto value_ = reinterpret_steal<object>(
|
auto value_ = reinterpret_steal<object>(
|
||||||
key_conv::cast(forward_like<T>(value), policy, parent));
|
key_conv::cast(forward_like<T>(value), policy, parent));
|
||||||
if (!value_ || !s.add(value_)) {
|
if (!value_ || !s.add(std::move(value_))) {
|
||||||
return handle();
|
return handle();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -13,21 +13,28 @@
|
|||||||
#include <string>
|
#include <string>
|
||||||
|
|
||||||
#ifdef __has_include
|
#ifdef __has_include
|
||||||
# if defined(PYBIND11_CPP17) && __has_include(<filesystem>)
|
# if defined(PYBIND11_CPP17)
|
||||||
# include <filesystem>
|
# if __has_include(<filesystem>) && \
|
||||||
# define PYBIND11_HAS_FILESYSTEM 1
|
PY_VERSION_HEX >= 0x03060000
|
||||||
|
# include <filesystem>
|
||||||
|
# define PYBIND11_HAS_FILESYSTEM 1
|
||||||
|
# elif __has_include(<experimental/filesystem>)
|
||||||
|
# include <experimental/filesystem>
|
||||||
|
# define PYBIND11_HAS_EXPERIMENTAL_FILESYSTEM 1
|
||||||
|
# endif
|
||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined(PYBIND11_HAS_FILESYSTEM) && !defined(PYBIND11_HAS_FILESYSTEM_IS_OPTIONAL)
|
#if !defined(PYBIND11_HAS_FILESYSTEM) && !defined(PYBIND11_HAS_EXPERIMENTAL_FILESYSTEM) \
|
||||||
|
&& !defined(PYBIND11_HAS_FILESYSTEM_IS_OPTIONAL)
|
||||||
# error \
|
# error \
|
||||||
"#include <filesystem> is not available. (Use -DPYBIND11_HAS_FILESYSTEM_IS_OPTIONAL to ignore.)"
|
"Neither #include <filesystem> nor #include <experimental/filesystem is available. (Use -DPYBIND11_HAS_FILESYSTEM_IS_OPTIONAL to ignore.)"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
PYBIND11_NAMESPACE_BEGIN(PYBIND11_NAMESPACE)
|
PYBIND11_NAMESPACE_BEGIN(PYBIND11_NAMESPACE)
|
||||||
PYBIND11_NAMESPACE_BEGIN(detail)
|
PYBIND11_NAMESPACE_BEGIN(detail)
|
||||||
|
|
||||||
#if defined(PYBIND11_HAS_FILESYSTEM)
|
#if defined(PYBIND11_HAS_FILESYSTEM) || defined(PYBIND11_HAS_EXPERIMENTAL_FILESYSTEM)
|
||||||
template <typename T>
|
template <typename T>
|
||||||
struct path_caster {
|
struct path_caster {
|
||||||
|
|
||||||
@ -94,9 +101,16 @@ public:
|
|||||||
PYBIND11_TYPE_CASTER(T, const_name("os.PathLike"));
|
PYBIND11_TYPE_CASTER(T, const_name("os.PathLike"));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#endif // PYBIND11_HAS_FILESYSTEM || defined(PYBIND11_HAS_EXPERIMENTAL_FILESYSTEM)
|
||||||
|
|
||||||
|
#if defined(PYBIND11_HAS_FILESYSTEM)
|
||||||
template <>
|
template <>
|
||||||
struct type_caster<std::filesystem::path> : public path_caster<std::filesystem::path> {};
|
struct type_caster<std::filesystem::path> : public path_caster<std::filesystem::path> {};
|
||||||
#endif // PYBIND11_HAS_FILESYSTEM
|
#elif defined(PYBIND11_HAS_EXPERIMENTAL_FILESYSTEM)
|
||||||
|
template <>
|
||||||
|
struct type_caster<std::experimental::filesystem::path>
|
||||||
|
: public path_caster<std::experimental::filesystem::path> {};
|
||||||
|
#endif
|
||||||
|
|
||||||
PYBIND11_NAMESPACE_END(detail)
|
PYBIND11_NAMESPACE_END(detail)
|
||||||
PYBIND11_NAMESPACE_END(PYBIND11_NAMESPACE)
|
PYBIND11_NAMESPACE_END(PYBIND11_NAMESPACE)
|
||||||
|
@ -232,7 +232,7 @@ void vector_modifiers(
|
|||||||
/// Slicing protocol
|
/// Slicing protocol
|
||||||
cl.def(
|
cl.def(
|
||||||
"__getitem__",
|
"__getitem__",
|
||||||
[](const Vector &v, slice slice) -> Vector * {
|
[](const Vector &v, const slice &slice) -> Vector * {
|
||||||
size_t start = 0, stop = 0, step = 0, slicelength = 0;
|
size_t start = 0, stop = 0, step = 0, slicelength = 0;
|
||||||
|
|
||||||
if (!slice.compute(v.size(), &start, &stop, &step, &slicelength)) {
|
if (!slice.compute(v.size(), &start, &stop, &step, &slicelength)) {
|
||||||
@ -253,7 +253,7 @@ void vector_modifiers(
|
|||||||
|
|
||||||
cl.def(
|
cl.def(
|
||||||
"__setitem__",
|
"__setitem__",
|
||||||
[](Vector &v, slice slice, const Vector &value) {
|
[](Vector &v, const slice &slice, const Vector &value) {
|
||||||
size_t start = 0, stop = 0, step = 0, slicelength = 0;
|
size_t start = 0, stop = 0, step = 0, slicelength = 0;
|
||||||
if (!slice.compute(v.size(), &start, &stop, &step, &slicelength)) {
|
if (!slice.compute(v.size(), &start, &stop, &step, &slicelength)) {
|
||||||
throw error_already_set();
|
throw error_already_set();
|
||||||
@ -281,7 +281,7 @@ void vector_modifiers(
|
|||||||
|
|
||||||
cl.def(
|
cl.def(
|
||||||
"__delitem__",
|
"__delitem__",
|
||||||
[](Vector &v, slice slice) {
|
[](Vector &v, const slice &slice) {
|
||||||
size_t start = 0, stop = 0, step = 0, slicelength = 0;
|
size_t start = 0, stop = 0, step = 0, slicelength = 0;
|
||||||
|
|
||||||
if (!slice.compute(v.size(), &start, &stop, &step, &slicelength)) {
|
if (!slice.compute(v.size(), &start, &stop, &step, &slicelength)) {
|
||||||
|
@ -24,8 +24,10 @@ profile = "black"
|
|||||||
[tool.mypy]
|
[tool.mypy]
|
||||||
files = ["pybind11"]
|
files = ["pybind11"]
|
||||||
python_version = "3.6"
|
python_version = "3.6"
|
||||||
warn_unused_configs = true
|
|
||||||
strict = true
|
strict = true
|
||||||
|
show_error_codes = true
|
||||||
|
enable_error_code = ["ignore-without-code", "redundant-expr", "truthy-bool"]
|
||||||
|
warn_unreachable = true
|
||||||
|
|
||||||
[[tool.mypy.overrides]]
|
[[tool.mypy.overrides]]
|
||||||
module = ["ghapi.*", "setuptools.*"]
|
module = ["ghapi.*", "setuptools.*"]
|
||||||
|
Loading…
Reference in New Issue
Block a user