MCPcopy Index your code
hub / github.com/apache/fory / Numpy1DArraySerializer

Class Numpy1DArraySerializer

python/pyfory/serializer.py:810–850  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

808
809
810class Numpy1DArraySerializer(Serializer):
811 dtypes_dict = _np_dtypes_dict
812
813 def __init__(self, type_resolver, ftype, dtype):
814 super().__init__(type_resolver, ftype)
815 self.dtype = dtype
816 self.itemsize, self.typecode, _, self.type_id = _np_dtypes_dict[self.dtype]
817
818 def write(self, buffer, value):
819 assert value.itemsize == self.itemsize
820 view = memoryview(value)
821 try:
822 assert view.format == self.typecode
823 except AssertionError as e:
824 raise e
825 assert view.itemsize == self.itemsize
826 nbytes = len(value) * self.itemsize
827 buffer.write_var_uint32(nbytes)
828 if self.dtype == np.dtype("bool") or not view.c_contiguous:
829 if not is_little_endian and self.itemsize > 1:
830 # Swap bytes on big-endian machines for multi-byte types
831 buffer.write_bytes(value.astype(value.dtype.newbyteorder("<")).tobytes())
832 else:
833 buffer.write_bytes(value.tobytes())
834 elif is_little_endian or self.itemsize == 1:
835 buffer.write_buffer(value)
836 else:
837 # Swap bytes on big-endian machines for multi-byte types
838 buffer.write_bytes(value.astype(value.dtype.newbyteorder("<")).tobytes())
839
840 def read(self, buffer):
841 data = buffer.read_bytes_and_size()
842 arr = np.frombuffer(data, dtype=self.dtype.newbyteorder("<"))
843 if self.itemsize > 1:
844 if is_little_endian:
845 # Normalize to native byte order to keep view.format stable.
846 arr = arr.view(self.dtype)
847 else:
848 # Convert from little-endian to native byte order.
849 arr = arr.astype(self.dtype)
850 return arr
851
852
853def _is_numpy_1d_array_serializer(serializer):

Callers 3

visit_arrayMethod · 0.90
_initialize_commonMethod · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected