xref: /aosp_15_r20/external/tensorflow/third_party/pybind11.patch (revision b6fb3261f9314811a0f4371741dbb8839866f948)
1*b6fb3261SAndroid Build Coastguard WorkerFrom 74a767d42921001fc4569ecee3b8726383c42ad4 Mon Sep 17 00:00:00 2001
2*b6fb3261SAndroid Build Coastguard WorkerFrom: Bertrand MICHEL <[email protected]>
3*b6fb3261SAndroid Build Coastguard WorkerDate: Tue, 23 Feb 2021 10:57:28 +0100
4*b6fb3261SAndroid Build Coastguard WorkerSubject: [PATCH] Dtype kind vs char  (#2864)
5*b6fb3261SAndroid Build Coastguard Worker
6*b6fb3261SAndroid Build Coastguard Worker* [dtype]: add type() method to access type attribute of PyArray_Descr (eq. to dtype.char in Python)
7*b6fb3261SAndroid Build Coastguard Worker
8*b6fb3261SAndroid Build Coastguard Worker* [dtype] change type() name method to char_() to be compliant with Python numpy interface
9*b6fb3261SAndroid Build Coastguard Worker
10*b6fb3261SAndroid Build Coastguard Worker* [dtype] fix by pre-commit
11*b6fb3261SAndroid Build Coastguard Worker
12*b6fb3261SAndroid Build Coastguard Worker* [dtype] Change comments and solutions format for test
13*b6fb3261SAndroid Build Coastguard Worker
14*b6fb3261SAndroid Build Coastguard Worker* Clarify documentation and move note about dtype.char vs PyArray_Descr::type to a plain, non-doxygen comment
15*b6fb3261SAndroid Build Coastguard Worker
16*b6fb3261SAndroid Build Coastguard Worker* Fix and extend tests
17*b6fb3261SAndroid Build Coastguard Worker
18*b6fb3261SAndroid Build Coastguard Worker* Fix the supposedly fixed tests
19*b6fb3261SAndroid Build Coastguard Worker
20*b6fb3261SAndroid Build Coastguard Worker* Fix the fixed tests again
21*b6fb3261SAndroid Build Coastguard Worker
22*b6fb3261SAndroid Build Coastguard WorkerCo-authored-by: Bertrand MICHEL <[email protected]>
23*b6fb3261SAndroid Build Coastguard WorkerCo-authored-by: Yannick Jadoul <[email protected]>
24*b6fb3261SAndroid Build Coastguard Worker---
25*b6fb3261SAndroid Build Coastguard Worker include/pybind11/numpy.h    | 12 +++++++++++-
26*b6fb3261SAndroid Build Coastguard Worker tests/test_numpy_dtypes.cpp | 20 ++++++++++++++++++++
27*b6fb3261SAndroid Build Coastguard Worker tests/test_numpy_dtypes.py  |  3 +++
28*b6fb3261SAndroid Build Coastguard Worker 3 files changed, 34 insertions(+), 1 deletion(-)
29*b6fb3261SAndroid Build Coastguard Worker
30*b6fb3261SAndroid Build Coastguard Workerdiff --git a/include/pybind11/numpy.h b/include/pybind11/numpy.h
31*b6fb3261SAndroid Build Coastguard Workerindex 019f5688e7..d1ddc4a9db 100644
32*b6fb3261SAndroid Build Coastguard Worker--- a/include/pybind11/numpy.h
33*b6fb3261SAndroid Build Coastguard Worker+++ b/include/pybind11/numpy.h
34*b6fb3261SAndroid Build Coastguard Worker@@ -507,11 +507,21 @@ class dtype : public object {
35*b6fb3261SAndroid Build Coastguard Worker         return detail::array_descriptor_proxy(m_ptr)->names != nullptr;
36*b6fb3261SAndroid Build Coastguard Worker     }
37*b6fb3261SAndroid Build Coastguard Worker
38*b6fb3261SAndroid Build Coastguard Worker-    /// Single-character type code.
39*b6fb3261SAndroid Build Coastguard Worker+    /// Single-character code for dtype's kind.
40*b6fb3261SAndroid Build Coastguard Worker+    /// For example, floating point types are 'f' and integral types are 'i'.
41*b6fb3261SAndroid Build Coastguard Worker     char kind() const {
42*b6fb3261SAndroid Build Coastguard Worker         return detail::array_descriptor_proxy(m_ptr)->kind;
43*b6fb3261SAndroid Build Coastguard Worker     }
44*b6fb3261SAndroid Build Coastguard Worker
45*b6fb3261SAndroid Build Coastguard Worker+    /// Single-character for dtype's type.
46*b6fb3261SAndroid Build Coastguard Worker+    /// For example, ``float`` is 'f', ``double`` 'd', ``int`` 'i', and ``long`` 'd'.
47*b6fb3261SAndroid Build Coastguard Worker+    char char_() const {
48*b6fb3261SAndroid Build Coastguard Worker+        // Note: The signature, `dtype::char_` follows the naming of NumPy's
49*b6fb3261SAndroid Build Coastguard Worker+        // public Python API (i.e., ``dtype.char``), rather than its internal
50*b6fb3261SAndroid Build Coastguard Worker+        // C API (``PyArray_Descr::type``).
51*b6fb3261SAndroid Build Coastguard Worker+        return detail::array_descriptor_proxy(m_ptr)->type;
52*b6fb3261SAndroid Build Coastguard Worker+    }
53*b6fb3261SAndroid Build Coastguard Worker+
54*b6fb3261SAndroid Build Coastguard Worker private:
55*b6fb3261SAndroid Build Coastguard Worker     static object _dtype_from_pep3118() {
56*b6fb3261SAndroid Build Coastguard Worker         static PyObject *obj = module_::import("numpy.core._internal")
57*b6fb3261SAndroid Build Coastguard Workerdiff --git a/tests/test_numpy_dtypes.cpp b/tests/test_numpy_dtypes.cpp
58*b6fb3261SAndroid Build Coastguard Workerindex b2e5e60756..9dece73ec3 100644
59*b6fb3261SAndroid Build Coastguard Worker--- a/tests/test_numpy_dtypes.cpp
60*b6fb3261SAndroid Build Coastguard Worker+++ b/tests/test_numpy_dtypes.cpp
61*b6fb3261SAndroid Build Coastguard Worker@@ -358,6 +358,14 @@ TEST_SUBMODULE(numpy_dtypes, m) {
62*b6fb3261SAndroid Build Coastguard Worker     });
63*b6fb3261SAndroid Build Coastguard Worker
64*b6fb3261SAndroid Build Coastguard Worker     // test_dtype
65*b6fb3261SAndroid Build Coastguard Worker+    std::vector<const char *> dtype_names{
66*b6fb3261SAndroid Build Coastguard Worker+        "byte", "short", "intc", "int_", "longlong",
67*b6fb3261SAndroid Build Coastguard Worker+        "ubyte", "ushort", "uintc", "uint", "ulonglong",
68*b6fb3261SAndroid Build Coastguard Worker+        "half", "single", "double", "longdouble",
69*b6fb3261SAndroid Build Coastguard Worker+        "csingle", "cdouble", "clongdouble",
70*b6fb3261SAndroid Build Coastguard Worker+        "bool_", "datetime64", "timedelta64", "object_"
71*b6fb3261SAndroid Build Coastguard Worker+    };
72*b6fb3261SAndroid Build Coastguard Worker+
73*b6fb3261SAndroid Build Coastguard Worker     m.def("print_dtypes", []() {
74*b6fb3261SAndroid Build Coastguard Worker         py::list l;
75*b6fb3261SAndroid Build Coastguard Worker         for (const py::handle &d : {
76*b6fb3261SAndroid Build Coastguard Worker@@ -376,6 +384,18 @@ TEST_SUBMODULE(numpy_dtypes, m) {
77*b6fb3261SAndroid Build Coastguard Worker         return l;
78*b6fb3261SAndroid Build Coastguard Worker     });
79*b6fb3261SAndroid Build Coastguard Worker     m.def("test_dtype_ctors", &test_dtype_ctors);
80*b6fb3261SAndroid Build Coastguard Worker+    m.def("test_dtype_kind", [dtype_names]() {
81*b6fb3261SAndroid Build Coastguard Worker+        py::list list;
82*b6fb3261SAndroid Build Coastguard Worker+        for (auto& dt_name : dtype_names)
83*b6fb3261SAndroid Build Coastguard Worker+            list.append(py::dtype(dt_name).kind());
84*b6fb3261SAndroid Build Coastguard Worker+        return list;
85*b6fb3261SAndroid Build Coastguard Worker+    });
86*b6fb3261SAndroid Build Coastguard Worker+    m.def("test_dtype_char_", [dtype_names]() {
87*b6fb3261SAndroid Build Coastguard Worker+        py::list list;
88*b6fb3261SAndroid Build Coastguard Worker+        for (auto& dt_name : dtype_names)
89*b6fb3261SAndroid Build Coastguard Worker+            list.append(py::dtype(dt_name).char_());
90*b6fb3261SAndroid Build Coastguard Worker+        return list;
91*b6fb3261SAndroid Build Coastguard Worker+    });
92*b6fb3261SAndroid Build Coastguard Worker     m.def("test_dtype_methods", []() {
93*b6fb3261SAndroid Build Coastguard Worker         py::list list;
94*b6fb3261SAndroid Build Coastguard Worker         auto dt1 = py::dtype::of<int32_t>();
95*b6fb3261SAndroid Build Coastguard Workerdiff --git a/tests/test_numpy_dtypes.py b/tests/test_numpy_dtypes.py
96*b6fb3261SAndroid Build Coastguard Workerindex f56b776a40..0a5881e49d 100644
97*b6fb3261SAndroid Build Coastguard Worker--- a/tests/test_numpy_dtypes.py
98*b6fb3261SAndroid Build Coastguard Worker+++ b/tests/test_numpy_dtypes.py
99*b6fb3261SAndroid Build Coastguard Worker@@ -169,6 +169,9 @@ def test_dtype(simple_dtype):
100*b6fb3261SAndroid Build Coastguard Worker         np.zeros(1, m.trailing_padding_dtype())
101*b6fb3261SAndroid Build Coastguard Worker     )
102*b6fb3261SAndroid Build Coastguard Worker
103*b6fb3261SAndroid Build Coastguard Worker+    assert m.test_dtype_kind() == list("iiiiiuuuuuffffcccbMmO")
104*b6fb3261SAndroid Build Coastguard Worker+    assert m.test_dtype_char_() == list("bhilqBHILQefdgFDG?MmO")
105*b6fb3261SAndroid Build Coastguard Worker+
106*b6fb3261SAndroid Build Coastguard Worker
107*b6fb3261SAndroid Build Coastguard Worker def test_recarray(simple_dtype, packed_dtype):
108*b6fb3261SAndroid Build Coastguard Worker     elements = [(False, 0, 0.0, -0.0), (True, 1, 1.5, -2.5), (False, 2, 3.0, -5.0)]
109