Merge branch 'pybind:master' into master

This commit is contained in:
Steve R. Sun 2022-04-19 08:05:50 +08:00 committed by GitHub
commit 61040efa9c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
7 changed files with 27 additions and 23 deletions

View File

@ -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*,

View File

@ -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]

View File

@ -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;
}; };

View File

@ -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 \""

View File

@ -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

View File

@ -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(

View File

@ -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); });
} }