MCPcopy Create free account
hub / github.com/apache/fory / ForyArrayFieldSerializer

Class ForyArrayFieldSerializer

python/pyfory/serializer.py:652–725  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

650
651
652class ForyArrayFieldSerializer(Serializer):
653 def __init__(self, type_resolver, wrapper_type, type_id, field_name=None):
654 super().__init__(type_resolver, wrapper_type)
655 self.wrapper_type = wrapper_type
656 self.type_id = type_id
657 self.field_name = field_name or "<array>"
658 wrapper_serializer_type = fory_array_serializer_type(type_id)
659 self.wrapper_serializer = wrapper_serializer_type(type_resolver, wrapper_type)
660 self.list_adapter_serializer = ForyArrayListAdapterSerializer(
661 type_resolver,
662 wrapper_type,
663 self.wrapper_serializer,
664 self.field_name,
665 )
666 self.pyarray_serializer = self._build_pyarray_serializer(type_resolver, type_id)
667 self.ndarray_serializer = self._build_ndarray_serializer(type_resolver, type_id)
668 self.need_to_write_ref = False
669
670 def _build_pyarray_serializer(self, type_resolver, type_id):
671 typecode = typeid_code.get(type_id)
672 if typecode is None:
673 return None
674 _itemsize, ftype, _type_id = typecode_dict[typecode]
675 return PyArraySerializer(type_resolver, ftype, type_id)
676
677 def _build_ndarray_serializer(self, type_resolver, type_id):
678 if np is None:
679 return None
680 for dtype, (
681 _itemsize,
682 _format,
683 ftype,
684 dtype_type_id,
685 ) in Numpy1DArraySerializer.dtypes_dict.items():
686 if dtype_type_id == type_id:
687 return Numpy1DArraySerializer(type_resolver, ftype, dtype)
688 return None
689
690 def write(self, buffer, value):
691 value_type = type(value)
692 if value_type is self.wrapper_type:
693 self.wrapper_serializer.write(buffer, value)
694 return
695 if value_type is list:
696 self.list_adapter_serializer.write(buffer, value)
697 return
698 if value_type is array.array:
699 if self.pyarray_serializer is None:
700 raise TypeError(f"pyfory.Array field {self.field_name!r} does not support array.array for this element type")
701 actual_type_id = self.pyarray_serializer._array_type_id(value)
702 if actual_type_id != self.type_id:
703 raise TypeError(
704 f"pyfory.Array field {self.field_name!r} requires array.array typecode for type id {self.type_id}, got {value.typecode!r}"
705 )
706 self.pyarray_serializer.write(buffer, value)
707 return
708 if np is not None and value_type is np.ndarray:
709 if self.ndarray_serializer is None:

Callers 2

visit_arrayMethod · 0.90

Calls

no outgoing calls

Tested by

no test coverage detected