mirror of
https://github.com/pybind/pybind11.git
synced 2024-11-29 08:32:02 +00:00
chore: Change numpy dtype from_args call sig to const ref (#3878)
* Change numpy from_args call signature to avoid copy * Reorder ctors * Rename arg * Fix unnecessary move * Fix clang-tidy and Add a few missing moves to memory_view pytype
This commit is contained in:
parent
fbcde3f0af
commit
1c636f4dce
@ -547,9 +547,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;
|
||||||
@ -557,7 +559,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)
|
||||||
@ -568,7 +570,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();
|
||||||
|
@ -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
|
||||||
|
@ -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