Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
26 changes: 11 additions & 15 deletions python/pyfory/_registry.py
Original file line number Diff line number Diff line change
Expand Up @@ -216,14 +216,16 @@ def _initialize_py(self):
register(slice, serializer=SliceSerializer)
register(np.ndarray, serializer=NDArraySerializer)
register(array.array, serializer=DynamicPyArraySerializer)
self._internal_py_serializer_map = {
ReduceSerializer: (self._stub_cls("__Reduce__"), self._next_type_id()),
TypeSerializer: (self._stub_cls("__Type__"), self._next_type_id()),
MethodSerializer: (self._stub_cls("__Method__"), self._next_type_id()),
NativeFuncMethodSerializer: (self._stub_cls("__NativeFunction__"), self._next_type_id()),
}
for serializer, (stub_cls, type_id) in self._internal_py_serializer_map.items():
register(stub_cls, serializer=serializer, type_id=type_id)
if not self.require_registration:
self._internal_py_serializer_map = {
ReduceSerializer: (self._stub_cls("__Reduce__"), self._next_type_id()),
TypeSerializer: (self._stub_cls("__Type__"), self._next_type_id()),
MethodSerializer: (self._stub_cls("__Method__"), self._next_type_id()),
FunctionSerializer: (self._stub_cls("__Function__"), self._next_type_id()),
NativeFuncMethodSerializer: (self._stub_cls("__NativeFunction__"), self._next_type_id()),
}
for serializer, (stub_cls, type_id) in self._internal_py_serializer_map.items():
register(stub_cls, serializer=serializer, type_id=type_id)

@staticmethod
def _stub_cls(name: str):
Expand Down Expand Up @@ -371,10 +373,6 @@ def _register_xtype(
if issubclass(cls, enum.Enum):
serializer = EnumSerializer(self.fory, cls)
type_id = TypeId.NAMED_ENUM if type_id is None else ((type_id << 8) + TypeId.ENUM)
elif cls is types.FunctionType:
# Use FunctionSerializer for function types (including lambdas)
serializer = FunctionSerializer(self.fory, cls)
type_id = TypeId.NAMED_EXT if type_id is None else ((type_id << 8) + TypeId.EXT)
else:
serializer = None
if self.meta_share:
Expand Down Expand Up @@ -497,16 +495,14 @@ def get_typeinfo(self, cls, create=True):
return type_info
elif not create:
return None
if self.language != Language.PYTHON or (self.require_registration and not issubclass(cls, Enum)):
if self.require_registration and not issubclass(cls, Enum):
raise TypeUnregisteredError(f"{cls} not registered")
logger.info("Type %s not registered", cls)
serializer = self._create_serializer(cls)
type_id = None
if self.language == Language.PYTHON:
if isinstance(serializer, EnumSerializer):
type_id = TypeId.NAMED_ENUM
elif isinstance(serializer, FunctionSerializer):
type_id = TypeId.NAMED_EXT
elif isinstance(serializer, (ObjectSerializer, StatefulSerializer)):
type_id = TypeId.NAMED_EXT
elif self._internal_py_serializer_map.get(type(serializer)) is not None:
Expand Down
Loading