class GpuArrowNodeReader(object): def __init__(self, table, index): self._table = table self._field = table.schema[index] self._series = Series(column.as_column(table.column(index))) self._series.name = self.name def __len__(self): return len(self._series) @property def schema(self): return self._table.schema @property def field_schema(self): return self._field @property def is_dictionary(self): return pa.types.is_dictionary(self._field.type) @property def null_count(self): return self._series.null_count @property def dtype(self): return arrow_to_pandas_dtype(self._field.type) @property def index_dtype(self): return self._field.type.index_type.to_pandas_dtype() @property def name(self): return self._field.name @property def data(self): """ Return the data as the expected dtype and with the padding bytes truncated. """ if self.data_raw is not None: return self.data_raw.view( self.dtype if not self.is_dictionary else self.index_dtype) @property def null(self): """ Return the null mask with the padding bytes truncated. """ if self.null_raw is not None: bits = mask_bitsize itemsize = mask_dtype.itemsize end = ((len(self) + bits - 1) // bits) * itemsize return self.null_raw[:end].view(mask_dtype) @property def data_raw(self): "Accessor for the data buffer as a device array" return self._series._column.data_array_view @property def null_raw(self): "Accessor for the null buffer as a device array" return self._series._column.mask_array_view def make_series(self): """Make a Series object out of this node """ return self._series.copy(deep=False) def _make_dictionary_series(self): """Make a dictionary-encoded series from this node """ assert self.is_dictionary return self._series.copy(deep=False)