@@ -133,14 +133,15 @@ array_dlpack(PyArrayObject *self,
133
133
}
134
134
135
135
if (stream != Py_None ) {
136
- PyErr_SetString (PyExc_RuntimeError , "NumPy only supports "
137
- "stream=None." );
136
+ PyErr_SetString (PyExc_RuntimeError ,
137
+ "NumPy only supports stream=None." );
138
138
return NULL ;
139
139
}
140
140
141
141
if ( !(PyArray_FLAGS (self ) & NPY_ARRAY_WRITEABLE )) {
142
- PyErr_SetString (PyExc_TypeError , "NumPy currently only supports "
143
- "dlpack for writeable arrays" );
142
+ PyErr_SetString (PyExc_BufferError ,
143
+ "Cannot export readonly array since signalling readonly "
144
+ "is unsupported by DLPack." );
144
145
return NULL ;
145
146
}
146
147
@@ -152,7 +153,7 @@ array_dlpack(PyArrayObject *self,
152
153
if (!PyArray_IS_C_CONTIGUOUS (self ) && PyArray_SIZE (self ) != 1 ) {
153
154
for (int i = 0 ; i < ndim ; ++ i ) {
154
155
if (shape [i ] != 1 && strides [i ] % itemsize != 0 ) {
155
- PyErr_SetString (PyExc_RuntimeError ,
156
+ PyErr_SetString (PyExc_BufferError ,
156
157
"DLPack only supports strides which are a multiple of "
157
158
"itemsize." );
158
159
return NULL ;
@@ -164,8 +165,8 @@ array_dlpack(PyArrayObject *self,
164
165
PyArray_Descr * dtype = PyArray_DESCR (self );
165
166
166
167
if (PyDataType_ISBYTESWAPPED (dtype )) {
167
- PyErr_SetString (PyExc_TypeError , "DLPack only supports native "
168
- " byte swapping ." );
168
+ PyErr_SetString (PyExc_BufferError ,
169
+ "DLPack only supports native byte order ." );
169
170
return NULL ;
170
171
}
171
172
@@ -182,8 +183,9 @@ array_dlpack(PyArrayObject *self,
182
183
// We can't be sure that the dtype is
183
184
// IEEE or padded.
184
185
if (itemsize > 8 ) {
185
- PyErr_SetString (PyExc_TypeError , "DLPack only supports IEEE "
186
- "floating point types without padding." );
186
+ PyErr_SetString (PyExc_BufferError ,
187
+ "DLPack only supports IEEE floating point types "
188
+ "without padding (longdouble typically is not IEEE)." );
187
189
return NULL ;
188
190
}
189
191
managed_dtype .code = kDLFloat ;
@@ -192,16 +194,17 @@ array_dlpack(PyArrayObject *self,
192
194
// We can't be sure that the dtype is
193
195
// IEEE or padded.
194
196
if (itemsize > 16 ) {
195
- PyErr_SetString (PyExc_TypeError , "DLPack only supports IEEE "
196
- "complex point types without padding." );
197
+ PyErr_SetString (PyExc_BufferError ,
198
+ "DLPack only supports IEEE floating point types "
199
+ "without padding (longdouble typically is not IEEE)." );
197
200
return NULL ;
198
201
}
199
202
managed_dtype .code = kDLComplex ;
200
203
}
201
204
else {
202
- PyErr_SetString (PyExc_TypeError ,
203
- "DLPack only supports signed/unsigned integers, float "
204
- "and complex dtypes." );
205
+ PyErr_SetString (PyExc_BufferError ,
206
+ "DLPack only supports signed/unsigned integers, float "
207
+ "and complex dtypes." );
205
208
return NULL ;
206
209
}
207
210
0 commit comments