@@ -81,19 +81,24 @@ cdef class _StructHelper:
8181 formats = ensure_iterable(formats)
8282
8383 self .array_values = {} # init dict
84- self .dtype = self ._convert_to_aligned_dtype (names, formats, alignment)
84+ self ._dtype = self ._convert_to_aligneddtype (names, formats, alignment)
8585 self ._array = self ._create(size)
8686
8787 if values is not None :
8888 for name, value in names, values:
8989 if value is not None :
9090 self .__setitem__ (name, value)
91+
92+ @property
93+ def dtype (self ):
94+ return self ._dtype
95+
9196 @property
9297 def array (self ):
9398 return self ._array
9499
95100 @classmethod
96- def from_dtype (cls , dtype , values = None , size = 1 , alignment = 1 ):
101+ def fromdtype (cls , dtype , values = None , size = 1 , alignment = 1 ):
97102 """
98103 Create the struct from a numpy structured dtype.
99104
@@ -153,7 +158,7 @@ cdef class _StructHelper:
153158 values.append(v[1 ])
154159 return cls (names = names, formats = formats, values = values, size = size, alignment = 1 )
155160
156- def _convert_to_aligned_dtype (self , names , formats , alignment ):
161+ def _convert_to_aligneddtype (self , names , formats , alignment ):
157162 """
158163 Construct an aligned dtype from the names and formats
159164
@@ -180,14 +185,14 @@ cdef class _StructHelper:
180185 return array
181186
182187 def _create (self , size ):
183- array = np.zeros(size, dtype = self .dtype )
188+ array = np.zeros(size, dtype = self ._dtype )
184189 array = self ._prepare_array(array)
185190 return array
186191
187192 def __setitem__ (self , key , value ):
188193 value = (value,) if not isinstance (value, (list , tuple )) else value
189194 # special hook for cupy arrays if a pointer is to be stored
190- if np.issubdtype(self .dtype .fields[key][0 ], ' u8' ) and all (isinstance (v, cp.ndarray) for v in value):
195+ if np.issubdtype(self ._dtype .fields[key][0 ], ' u8' ) and all (isinstance (v, cp.ndarray) for v in value):
191196 self .array_values[key] = value
192197 value = [v.data.ptr for v in value]
193198 self .array[key] = value
@@ -196,13 +201,13 @@ cdef class _StructHelper:
196201 return self .array[key]
197202
198203 def __len__ (self ):
199- return len (self .dtype .fields)
204+ return len (self ._dtype .fields)
200205
201206 def __iter__ (self ):
202207 yield from self .keys()
203208
204209 def __contains__ (self , item ):
205- return item in self .dtype .fields
210+ return item in self ._dtype .fields
206211
207212 def get (self , item , value = None ):
208213 try :
@@ -211,7 +216,7 @@ cdef class _StructHelper:
211216 return value
212217
213218 def keys (self ):
214- yield from self .dtype .fields
219+ yield from self ._dtype .fields
215220
216221 def values (self ):
217222 for k in self .keys():
@@ -236,19 +241,19 @@ cdef class _StructHelper:
236241 """
237242 size = self .array.shape[0 ]
238243 mem = array_to_device_memory(self .array, stream = stream)
239- array = cp.ndarray(size, dtype = self .dtype , memptr = mem)
244+ array = cp.ndarray(size, dtype = self ._dtype , memptr = mem)
240245 return array
241246
242247 @property
243248 def itemsize (self ):
244- return self .dtype .itemsize
249+ return self ._dtype .itemsize
245250
246251 @property
247252 def size (self ):
248253 return self ._array.shape[0 ]
249254
250255 def _repr_details (self ):
251- return f" size {self.size}, dtype {self.dtype }"
256+ return f" size {self.size}, dtype {self._dtype }"
252257
253258
254259cdef class SbtRecord(_StructHelper):
0 commit comments