@@ -103,37 +103,6 @@ sampledtype_ensure_canonical(SampleDTypeObject *self) {
103
103
return self ;
104
104
}
105
105
106
- static PyObject * create_element_view (SampleDTypeObject * descr , char * dataptr ,
107
- npy_bool readonly ) {
108
- PyObject * ndarr_obj = PyObject_GetAttrString (descr -> sample_scalar , "ndarr" );
109
- if (ndarr_obj == NULL ) {
110
- return NULL ;
111
- }
112
- if (!PyArray_Check (ndarr_obj )) {
113
- Py_DECREF (ndarr_obj );
114
- PyErr_SetString (PyExc_TypeError ,
115
- "SampleScalar.ndarr() must return NumPy array" );
116
- return NULL ;
117
- }
118
-
119
- PyArrayObject * ndarr_arrobj = (PyArrayObject * )ndarr_obj ;
120
- PyArray_Descr * ndarr_descr = PyArray_DESCR (ndarr_arrobj );
121
-
122
- PyObject * view = PyArray_NewFromDescr (
123
- & PyArray_Type , ndarr_descr , PyArray_NDIM (ndarr_arrobj ),
124
- PyArray_DIMS (ndarr_arrobj ), PyArray_STRIDES (ndarr_arrobj ),
125
- dataptr , // data pointer for the view
126
- readonly ? 0 : NPY_ARRAY_WRITEABLE , NULL );
127
- if (view != NULL ) {
128
- // Now 'view' owns the descriptor, it will be dereferenced when view is
129
- // deallocated
130
- Py_INCREF (ndarr_descr );
131
- }
132
-
133
- Py_DECREF (ndarr_obj );
134
- return view ;
135
- }
136
-
137
106
static int sampledtype_setitem (SampleDTypeObject * descr , PyObject * obj ,
138
107
char * dataptr ) {
139
108
printf ("%s, target elsise %lld, type_num %d\n" , __func__ , descr -> base .elsize ,
@@ -145,26 +114,8 @@ static int sampledtype_setitem(SampleDTypeObject *descr, PyObject *obj,
145
114
return -1 ;
146
115
}
147
116
148
- PyObject * res =
149
- PyObject_CallMethod (descr -> sample_scalar , "is_compatible" , "O" , obj );
150
- if (res == NULL ) {
151
- return -1 ;
152
- }
153
- int is_compatible = PyObject_IsTrue (res );
154
- Py_DECREF (res );
155
-
156
- if (!is_compatible ) {
157
- PyErr_Format (PyExc_ValueError , "Incompatible item value" );
158
- return -1 ;
159
- }
160
-
161
- PyObject * view = create_element_view (descr , dataptr , NPY_FALSE );
162
- if (view == NULL ) {
163
- return -1 ;
164
- }
165
-
166
- res = PyObject_CallMethod (obj , "setitem" , "O" , view );
167
- Py_DECREF (view );
117
+ PyObject * res = PyObject_CallMethod (descr -> sample_scalar , "setitem" , "On" ,
118
+ obj , (Py_ssize_t )dataptr );
168
119
if (res == NULL ) {
169
120
return -1 ;
170
121
}
@@ -177,19 +128,8 @@ static PyObject *sampledtype_getitem(SampleDTypeObject *descr, char *dataptr) {
177
128
printf ("%s, source elsize %lld, type_num %d\n" , __func__ , descr -> base .elsize ,
178
129
descr -> base .type_num );
179
130
180
- PyObject * view = create_element_view (descr , dataptr , NPY_TRUE );
181
- if (view == NULL ) {
182
- return NULL ;
183
- }
184
-
185
- PyObject * res =
186
- PyObject_CallMethod (descr -> sample_scalar , "getitem" , "O" , view );
187
- Py_DECREF (view );
188
- if (res == NULL ) {
189
- return NULL ;
190
- }
191
-
192
- return res ;
131
+ return PyObject_CallMethod (descr -> sample_scalar , "getitem" , "n" ,
132
+ (Py_ssize_t )dataptr );
193
133
}
194
134
195
135
static PyType_Slot SampleDType_Slots [] = {
0 commit comments