mirror of
https://github.com/pybind/pybind11.git
synced 2025-02-19 23:20:43 +00:00
Merge branch 'pybind:master' into master
This commit is contained in:
commit
e1385e2818
@ -67,9 +67,14 @@ inline PyObject *make_object_base_type(PyTypeObject *metaclass);
|
|||||||
// `Py_LIMITED_API` anyway.
|
// `Py_LIMITED_API` anyway.
|
||||||
# if PYBIND11_INTERNALS_VERSION > 4
|
# if PYBIND11_INTERNALS_VERSION > 4
|
||||||
# define PYBIND11_TLS_KEY_REF Py_tss_t &
|
# define PYBIND11_TLS_KEY_REF Py_tss_t &
|
||||||
# if defined(__GNUC__) && !defined(__INTEL_COMPILER)
|
# if defined(__clang__)
|
||||||
// Clang on macOS warns due to `Py_tss_NEEDS_INIT` not specifying an initializer
|
# define PYBIND11_TLS_KEY_INIT(var) \
|
||||||
// for every field.
|
_Pragma("clang diagnostic push") /**/ \
|
||||||
|
_Pragma("clang diagnostic ignored \"-Wmissing-field-initializers\"") /**/ \
|
||||||
|
Py_tss_t var \
|
||||||
|
= Py_tss_NEEDS_INIT; \
|
||||||
|
_Pragma("clang diagnostic pop")
|
||||||
|
# elif defined(__GNUC__) && !defined(__INTEL_COMPILER)
|
||||||
# define PYBIND11_TLS_KEY_INIT(var) \
|
# define PYBIND11_TLS_KEY_INIT(var) \
|
||||||
_Pragma("GCC diagnostic push") /**/ \
|
_Pragma("GCC diagnostic push") /**/ \
|
||||||
_Pragma("GCC diagnostic ignored \"-Wmissing-field-initializers\"") /**/ \
|
_Pragma("GCC diagnostic ignored \"-Wmissing-field-initializers\"") /**/ \
|
||||||
|
@ -79,6 +79,13 @@ struct handle_type_name<typing::Tuple<>> {
|
|||||||
static constexpr auto name = const_name("tuple[()]");
|
static constexpr auto name = const_name("tuple[()]");
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
struct handle_type_name<typing::Tuple<T, ellipsis>> {
|
||||||
|
// PEP 484 specifies this syntax for a variable-length tuple
|
||||||
|
static constexpr auto name
|
||||||
|
= const_name("tuple[") + make_caster<T>::name + const_name(", ...]");
|
||||||
|
};
|
||||||
|
|
||||||
template <typename K, typename V>
|
template <typename K, typename V>
|
||||||
struct handle_type_name<typing::Dict<K, V>> {
|
struct handle_type_name<typing::Dict<K, V>> {
|
||||||
static constexpr auto name = const_name("dict[") + make_caster<K>::name + const_name(", ")
|
static constexpr auto name = const_name("dict[") + make_caster<K>::name + const_name(", ")
|
||||||
|
@ -521,11 +521,15 @@ set(PYBIND11_TEST_PREFIX_COMMAND
|
|||||||
""
|
""
|
||||||
CACHE STRING "Put this before pytest, use for checkers and such")
|
CACHE STRING "Put this before pytest, use for checkers and such")
|
||||||
|
|
||||||
|
set(PYBIND11_PYTEST_ARGS
|
||||||
|
""
|
||||||
|
CACHE STRING "Extra arguments for pytest")
|
||||||
|
|
||||||
# A single command to compile and run the tests
|
# A single command to compile and run the tests
|
||||||
add_custom_target(
|
add_custom_target(
|
||||||
pytest
|
pytest
|
||||||
COMMAND ${PYBIND11_TEST_PREFIX_COMMAND} ${PYTHON_EXECUTABLE} -m pytest
|
COMMAND ${PYBIND11_TEST_PREFIX_COMMAND} ${PYTHON_EXECUTABLE} -m pytest
|
||||||
${PYBIND11_ABS_PYTEST_FILES}
|
${PYBIND11_ABS_PYTEST_FILES} ${PYBIND11_PYTEST_ARGS}
|
||||||
DEPENDS ${test_targets}
|
DEPENDS ${test_targets}
|
||||||
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
|
WORKING_DIRECTORY "${CMAKE_CURRENT_BINARY_DIR}"
|
||||||
USES_TERMINAL)
|
USES_TERMINAL)
|
||||||
|
@ -80,10 +80,10 @@ PYBIND11_MODULE(pybind11_tests, m) {
|
|||||||
|
|
||||||
// Intentionally kept minimal to not create a maintenance chore
|
// Intentionally kept minimal to not create a maintenance chore
|
||||||
// ("just enough" to be conclusive).
|
// ("just enough" to be conclusive).
|
||||||
#if defined(_MSC_FULL_VER)
|
#if defined(__VERSION__)
|
||||||
m.attr("compiler_info") = "MSVC " PYBIND11_TOSTRING(_MSC_FULL_VER);
|
|
||||||
#elif defined(__VERSION__)
|
|
||||||
m.attr("compiler_info") = __VERSION__;
|
m.attr("compiler_info") = __VERSION__;
|
||||||
|
#elif defined(_MSC_FULL_VER)
|
||||||
|
m.attr("compiler_info") = "MSVC " PYBIND11_TOSTRING(_MSC_FULL_VER);
|
||||||
#else
|
#else
|
||||||
m.attr("compiler_info") = py::none();
|
m.attr("compiler_info") = py::none();
|
||||||
#endif
|
#endif
|
||||||
|
@ -4,7 +4,7 @@ import pytest
|
|||||||
|
|
||||||
import env
|
import env
|
||||||
import pybind11_cross_module_tests as cm
|
import pybind11_cross_module_tests as cm
|
||||||
import pybind11_tests # noqa: F401
|
import pybind11_tests
|
||||||
from pybind11_tests import exceptions as m
|
from pybind11_tests import exceptions as m
|
||||||
|
|
||||||
|
|
||||||
@ -248,6 +248,11 @@ def test_nested_throws(capture):
|
|||||||
assert str(excinfo.value) == "this is a helper-defined translated exception"
|
assert str(excinfo.value) == "this is a helper-defined translated exception"
|
||||||
|
|
||||||
|
|
||||||
|
# TODO: Investigate this crash, see pybind/pybind11#5062 for background
|
||||||
|
@pytest.mark.skipif(
|
||||||
|
sys.platform.startswith("win32") and "Clang" in pybind11_tests.compiler_info,
|
||||||
|
reason="Started segfaulting February 2024",
|
||||||
|
)
|
||||||
def test_throw_nested_exception():
|
def test_throw_nested_exception():
|
||||||
with pytest.raises(RuntimeError) as excinfo:
|
with pytest.raises(RuntimeError) as excinfo:
|
||||||
m.throw_nested_exception()
|
m.throw_nested_exception()
|
||||||
|
@ -825,6 +825,8 @@ TEST_SUBMODULE(pytypes, m) {
|
|||||||
|
|
||||||
m.def("annotate_tuple_float_str", [](const py::typing::Tuple<py::float_, py::str> &) {});
|
m.def("annotate_tuple_float_str", [](const py::typing::Tuple<py::float_, py::str> &) {});
|
||||||
m.def("annotate_tuple_empty", [](const py::typing::Tuple<> &) {});
|
m.def("annotate_tuple_empty", [](const py::typing::Tuple<> &) {});
|
||||||
|
m.def("annotate_tuple_variable_length",
|
||||||
|
[](const py::typing::Tuple<py::float_, py::ellipsis> &) {});
|
||||||
m.def("annotate_dict_str_int", [](const py::typing::Dict<py::str, int> &) {});
|
m.def("annotate_dict_str_int", [](const py::typing::Dict<py::str, int> &) {});
|
||||||
m.def("annotate_list_int", [](const py::typing::List<int> &) {});
|
m.def("annotate_list_int", [](const py::typing::List<int> &) {});
|
||||||
m.def("annotate_set_str", [](const py::typing::Set<std::string> &) {});
|
m.def("annotate_set_str", [](const py::typing::Set<std::string> &) {});
|
||||||
|
@ -911,6 +911,13 @@ def test_tuple_empty_annotations(doc):
|
|||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
def test_tuple_variable_length_annotations(doc):
|
||||||
|
assert (
|
||||||
|
doc(m.annotate_tuple_variable_length)
|
||||||
|
== "annotate_tuple_variable_length(arg0: tuple[float, ...]) -> None"
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def test_dict_annotations(doc):
|
def test_dict_annotations(doc):
|
||||||
assert (
|
assert (
|
||||||
doc(m.annotate_dict_str_int)
|
doc(m.annotate_dict_str_int)
|
||||||
|
@ -173,12 +173,16 @@ endif()
|
|||||||
# Check to see which Python mode we are in, new, old, or no python
|
# Check to see which Python mode we are in, new, old, or no python
|
||||||
if(PYBIND11_NOPYTHON)
|
if(PYBIND11_NOPYTHON)
|
||||||
set(_pybind11_nopython ON)
|
set(_pybind11_nopython ON)
|
||||||
|
# We won't use new FindPython if PYBIND11_FINDPYTHON is defined and falselike
|
||||||
|
# Otherwise, we use if FindPythonLibs is missing or if FindPython was already used
|
||||||
elseif(
|
elseif(
|
||||||
_pybind11_missing_old_python STREQUAL "NEW"
|
(NOT DEFINED PYBIND11_FINDPYTHON OR PYBIND11_FINDPYTHON)
|
||||||
OR PYBIND11_FINDPYTHON
|
AND (_pybind11_missing_old_python STREQUAL "NEW"
|
||||||
OR Python_FOUND
|
OR PYBIND11_FINDPYTHON
|
||||||
OR Python2_FOUND
|
OR Python_FOUND
|
||||||
OR Python3_FOUND)
|
OR Python3_FOUND
|
||||||
|
))
|
||||||
|
|
||||||
# New mode
|
# New mode
|
||||||
include("${CMAKE_CURRENT_LIST_DIR}/pybind11NewTools.cmake")
|
include("${CMAKE_CURRENT_LIST_DIR}/pybind11NewTools.cmake")
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user