diff --git a/python/pyfory/_registry.py b/python/pyfory/_registry.py index 8a8af306f3..b1a7144173 100644 --- a/python/pyfory/_registry.py +++ b/python/pyfory/_registry.py @@ -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): @@ -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: @@ -497,7 +495,7 @@ 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) @@ -505,8 +503,6 @@ def get_typeinfo(self, cls, create=True): 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: