mirror of
https://github.com/pybind/pybind11.git
synced 2024-11-27 07:32:02 +00:00
Merge branch 'pybind:master' into master
This commit is contained in:
commit
61040efa9c
@ -25,11 +25,12 @@ modernize-replace-random-shuffle,
|
|||||||
modernize-shrink-to-fit,
|
modernize-shrink-to-fit,
|
||||||
modernize-use-auto,
|
modernize-use-auto,
|
||||||
modernize-use-bool-literals,
|
modernize-use-bool-literals,
|
||||||
|
modernize-use-default-member-init,
|
||||||
modernize-use-equals-default,
|
modernize-use-equals-default,
|
||||||
modernize-use-equals-delete,
|
modernize-use-equals-delete,
|
||||||
modernize-use-default-member-init,
|
|
||||||
modernize-use-noexcept,
|
|
||||||
modernize-use-emplace,
|
modernize-use-emplace,
|
||||||
|
modernize-use-noexcept,
|
||||||
|
modernize-use-nullptr,
|
||||||
modernize-use-override,
|
modernize-use-override,
|
||||||
modernize-use-using,
|
modernize-use-using,
|
||||||
*performance*,
|
*performance*,
|
||||||
|
@ -71,7 +71,7 @@ repos:
|
|||||||
|
|
||||||
# Autoremoves unused imports
|
# Autoremoves unused imports
|
||||||
- repo: https://github.com/hadialqattan/pycln
|
- repo: https://github.com/hadialqattan/pycln
|
||||||
rev: "v1.2.5"
|
rev: "v1.3.1"
|
||||||
hooks:
|
hooks:
|
||||||
- id: pycln
|
- id: pycln
|
||||||
stages: [manual]
|
stages: [manual]
|
||||||
@ -164,7 +164,7 @@ repos:
|
|||||||
|
|
||||||
# Clang format the codebase automatically
|
# Clang format the codebase automatically
|
||||||
- repo: https://github.com/pre-commit/mirrors-clang-format
|
- repo: https://github.com/pre-commit/mirrors-clang-format
|
||||||
rev: "v13.0.1"
|
rev: "v14.0.1"
|
||||||
hooks:
|
hooks:
|
||||||
- id: clang-format
|
- id: clang-format
|
||||||
types_or: [c++, c, cuda]
|
types_or: [c++, c, cuda]
|
||||||
|
@ -280,7 +280,7 @@ private:
|
|||||||
static npy_api lookup() {
|
static npy_api lookup() {
|
||||||
module_ m = module_::import("numpy.core.multiarray");
|
module_ m = module_::import("numpy.core.multiarray");
|
||||||
auto c = m.attr("_ARRAY_API");
|
auto c = m.attr("_ARRAY_API");
|
||||||
void **api_ptr = (void **) PyCapsule_GetPointer(c.ptr(), NULL);
|
void **api_ptr = (void **) PyCapsule_GetPointer(c.ptr(), nullptr);
|
||||||
npy_api api;
|
npy_api api;
|
||||||
#define DECL_NPY_API(Func) api.Func##_ = (decltype(api.Func##_)) api_ptr[API_##Func];
|
#define DECL_NPY_API(Func) api.Func##_ = (decltype(api.Func##_)) api_ptr[API_##Func];
|
||||||
DECL_NPY_API(PyArray_GetNDArrayCFeatureVersion);
|
DECL_NPY_API(PyArray_GetNDArrayCFeatureVersion);
|
||||||
@ -696,9 +696,11 @@ public:
|
|||||||
.ptr();
|
.ptr();
|
||||||
}
|
}
|
||||||
|
|
||||||
explicit dtype(const std::string &format) : dtype(from_args(pybind11::str(format))) {}
|
explicit dtype(const pybind11::str &format) : dtype(from_args(format)) {}
|
||||||
|
|
||||||
explicit dtype(const char *format) : dtype(from_args(pybind11::str(format))) {}
|
explicit dtype(const std::string &format) : dtype(pybind11::str(format)) {}
|
||||||
|
|
||||||
|
explicit dtype(const char *format) : dtype(pybind11::str(format)) {}
|
||||||
|
|
||||||
dtype(list names, list formats, list offsets, ssize_t itemsize) {
|
dtype(list names, list formats, list offsets, ssize_t itemsize) {
|
||||||
dict args;
|
dict args;
|
||||||
@ -706,7 +708,7 @@ public:
|
|||||||
args["formats"] = std::move(formats);
|
args["formats"] = std::move(formats);
|
||||||
args["offsets"] = std::move(offsets);
|
args["offsets"] = std::move(offsets);
|
||||||
args["itemsize"] = pybind11::int_(itemsize);
|
args["itemsize"] = pybind11::int_(itemsize);
|
||||||
m_ptr = from_args(std::move(args)).release().ptr();
|
m_ptr = from_args(args).release().ptr();
|
||||||
}
|
}
|
||||||
|
|
||||||
explicit dtype(int typenum)
|
explicit dtype(int typenum)
|
||||||
@ -717,7 +719,7 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
/// This is essentially the same as calling numpy.dtype(args) in Python.
|
/// This is essentially the same as calling numpy.dtype(args) in Python.
|
||||||
static dtype from_args(object args) {
|
static dtype from_args(const object &args) {
|
||||||
PyObject *ptr = nullptr;
|
PyObject *ptr = nullptr;
|
||||||
if ((detail::npy_api::get().PyArray_DescrConverter_(args.ptr(), &ptr) == 0) || !ptr) {
|
if ((detail::npy_api::get().PyArray_DescrConverter_(args.ptr(), &ptr) == 0) || !ptr) {
|
||||||
throw error_already_set();
|
throw error_already_set();
|
||||||
@ -1666,7 +1668,7 @@ public:
|
|||||||
void *data() const { return p_ptr; }
|
void *data() const { return p_ptr; }
|
||||||
|
|
||||||
private:
|
private:
|
||||||
char *p_ptr{0};
|
char *p_ptr{nullptr};
|
||||||
container_type m_strides;
|
container_type m_strides;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -2489,7 +2489,7 @@ public:
|
|||||||
exception(handle scope, const char *name, handle base = PyExc_Exception) {
|
exception(handle scope, const char *name, handle base = PyExc_Exception) {
|
||||||
std::string full_name
|
std::string full_name
|
||||||
= scope.attr("__name__").cast<std::string>() + std::string(".") + name;
|
= scope.attr("__name__").cast<std::string>() + std::string(".") + name;
|
||||||
m_ptr = PyErr_NewException(const_cast<char *>(full_name.c_str()), base.ptr(), NULL);
|
m_ptr = PyErr_NewException(const_cast<char *>(full_name.c_str()), base.ptr(), nullptr);
|
||||||
if (hasattr(scope, "__dict__") && scope.attr("__dict__").contains(name)) {
|
if (hasattr(scope, "__dict__") && scope.attr("__dict__").contains(name)) {
|
||||||
pybind11_fail("Error during initialization: multiple incompatible "
|
pybind11_fail("Error during initialization: multiple incompatible "
|
||||||
"definitions with name \""
|
"definitions with name \""
|
||||||
|
@ -600,13 +600,13 @@ inline handle get_function(handle value) {
|
|||||||
inline PyObject *dict_getitemstring(PyObject *v, const char *key) {
|
inline PyObject *dict_getitemstring(PyObject *v, const char *key) {
|
||||||
PyObject *kv = nullptr, *rv = nullptr;
|
PyObject *kv = nullptr, *rv = nullptr;
|
||||||
kv = PyUnicode_FromString(key);
|
kv = PyUnicode_FromString(key);
|
||||||
if (kv == NULL) {
|
if (kv == nullptr) {
|
||||||
throw error_already_set();
|
throw error_already_set();
|
||||||
}
|
}
|
||||||
|
|
||||||
rv = PyDict_GetItemWithError(v, kv);
|
rv = PyDict_GetItemWithError(v, kv);
|
||||||
Py_DECREF(kv);
|
Py_DECREF(kv);
|
||||||
if (rv == NULL && PyErr_Occurred()) {
|
if (rv == nullptr && PyErr_Occurred()) {
|
||||||
throw error_already_set();
|
throw error_already_set();
|
||||||
}
|
}
|
||||||
return rv;
|
return rv;
|
||||||
@ -614,7 +614,7 @@ inline PyObject *dict_getitemstring(PyObject *v, const char *key) {
|
|||||||
|
|
||||||
inline PyObject *dict_getitem(PyObject *v, PyObject *key) {
|
inline PyObject *dict_getitem(PyObject *v, PyObject *key) {
|
||||||
PyObject *rv = PyDict_GetItemWithError(v, key);
|
PyObject *rv = PyDict_GetItemWithError(v, key);
|
||||||
if (rv == NULL && PyErr_Occurred()) {
|
if (rv == nullptr && PyErr_Occurred()) {
|
||||||
throw error_already_set();
|
throw error_already_set();
|
||||||
}
|
}
|
||||||
return rv;
|
return rv;
|
||||||
@ -1914,8 +1914,8 @@ public:
|
|||||||
return memoryview::from_buffer(reinterpret_cast<void *>(ptr),
|
return memoryview::from_buffer(reinterpret_cast<void *>(ptr),
|
||||||
sizeof(T),
|
sizeof(T),
|
||||||
format_descriptor<T>::value,
|
format_descriptor<T>::value,
|
||||||
shape,
|
std::move(shape),
|
||||||
strides,
|
std::move(strides),
|
||||||
readonly);
|
readonly);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1923,7 +1923,8 @@ public:
|
|||||||
static memoryview from_buffer(const T *ptr,
|
static memoryview from_buffer(const T *ptr,
|
||||||
detail::any_container<ssize_t> shape,
|
detail::any_container<ssize_t> shape,
|
||||||
detail::any_container<ssize_t> strides) {
|
detail::any_container<ssize_t> strides) {
|
||||||
return memoryview::from_buffer(const_cast<T *>(ptr), shape, strides, true);
|
return memoryview::from_buffer(
|
||||||
|
const_cast<T *>(ptr), std::move(shape), std::move(strides), true);
|
||||||
}
|
}
|
||||||
|
|
||||||
/** \rst
|
/** \rst
|
||||||
|
@ -25,8 +25,8 @@ void gil_acquire() { py::gil_scoped_acquire gil; }
|
|||||||
|
|
||||||
constexpr char kModuleName[] = "cross_module_gil_utils";
|
constexpr char kModuleName[] = "cross_module_gil_utils";
|
||||||
|
|
||||||
struct PyModuleDef moduledef
|
struct PyModuleDef moduledef = {
|
||||||
= {PyModuleDef_HEAD_INIT, kModuleName, NULL, 0, NULL, NULL, NULL, NULL, NULL};
|
PyModuleDef_HEAD_INIT, kModuleName, nullptr, 0, nullptr, nullptr, nullptr, nullptr, nullptr};
|
||||||
|
|
||||||
} // namespace
|
} // namespace
|
||||||
|
|
||||||
@ -34,7 +34,7 @@ extern "C" PYBIND11_EXPORT PyObject *PyInit_cross_module_gil_utils() {
|
|||||||
|
|
||||||
PyObject *m = PyModule_Create(&moduledef);
|
PyObject *m = PyModule_Create(&moduledef);
|
||||||
|
|
||||||
if (m != NULL) {
|
if (m != nullptr) {
|
||||||
static_assert(sizeof(&gil_acquire) == sizeof(void *),
|
static_assert(sizeof(&gil_acquire) == sizeof(void *),
|
||||||
"Function pointer must have the same size as void*");
|
"Function pointer must have the same size as void*");
|
||||||
PyModule_AddObject(
|
PyModule_AddObject(
|
||||||
|
@ -289,8 +289,8 @@ py::list test_dtype_ctors() {
|
|||||||
dict["itemsize"] = py::int_(20);
|
dict["itemsize"] = py::int_(20);
|
||||||
list.append(py::dtype::from_args(dict));
|
list.append(py::dtype::from_args(dict));
|
||||||
list.append(py::dtype(names, formats, offsets, 20));
|
list.append(py::dtype(names, formats, offsets, 20));
|
||||||
list.append(py::dtype(py::buffer_info((void *) 0, sizeof(unsigned int), "I", 1)));
|
list.append(py::dtype(py::buffer_info((void *) nullptr, sizeof(unsigned int), "I", 1)));
|
||||||
list.append(py::dtype(py::buffer_info((void *) 0, 0, "T{i:a:f:b:}", 1)));
|
list.append(py::dtype(py::buffer_info((void *) nullptr, 0, "T{i:a:f:b:}", 1)));
|
||||||
list.append(py::dtype(py::detail::npy_api::NPY_DOUBLE_));
|
list.append(py::dtype(py::detail::npy_api::NPY_DOUBLE_));
|
||||||
return list;
|
return list;
|
||||||
}
|
}
|
||||||
@ -610,5 +610,5 @@ TEST_SUBMODULE(numpy_dtypes, m) {
|
|||||||
[]() { PYBIND11_NUMPY_DTYPE(SimpleStruct, bool_, uint_, float_, ldbl_); });
|
[]() { PYBIND11_NUMPY_DTYPE(SimpleStruct, bool_, uint_, float_, ldbl_); });
|
||||||
|
|
||||||
// test_str_leak
|
// test_str_leak
|
||||||
m.def("dtype_wrapper", [](py::object d) { return py::dtype::from_args(std::move(d)); });
|
m.def("dtype_wrapper", [](const py::object &d) { return py::dtype::from_args(d); });
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user