@@ -198,14 +198,16 @@ def _initialize_py(self):
198198 register (slice , serializer = SliceSerializer )
199199 register (np .ndarray , serializer = NDArraySerializer )
200200 register (array .array , serializer = DynamicPyArraySerializer )
201- self ._internal_py_serializer_map = {
202- ReduceSerializer : (self ._stub_cls ("__Reduce__" ), self ._next_type_id ()),
203- TypeSerializer : (self ._stub_cls ("__Type__" ), self ._next_type_id ()),
204- MethodSerializer : (self ._stub_cls ("__Method__" ), self ._next_type_id ()),
205- NativeFuncMethodSerializer : (self ._stub_cls ("__NativeFunction__" ), self ._next_type_id ()),
206- }
207- for serializer , (stub_cls , type_id ) in self ._internal_py_serializer_map .items ():
208- register (stub_cls , serializer = serializer , type_id = type_id )
201+ if not self .require_registration :
202+ self ._internal_py_serializer_map = {
203+ ReduceSerializer : (self ._stub_cls ("__Reduce__" ), self ._next_type_id ()),
204+ TypeSerializer : (self ._stub_cls ("__Type__" ), self ._next_type_id ()),
205+ MethodSerializer : (self ._stub_cls ("__Method__" ), self ._next_type_id ()),
206+ FunctionSerializer : (self ._stub_cls ("__Function__" ), self ._next_type_id ()),
207+ NativeFuncMethodSerializer : (self ._stub_cls ("__NativeFunction__" ), self ._next_type_id ()),
208+ }
209+ for serializer , (stub_cls , type_id ) in self ._internal_py_serializer_map .items ():
210+ register (stub_cls , serializer = serializer , type_id = type_id )
209211
210212 @staticmethod
211213 def _stub_cls (name : str ):
@@ -353,10 +355,6 @@ def _register_xtype(
353355 if issubclass (cls , enum .Enum ):
354356 serializer = EnumSerializer (self .fory , cls )
355357 type_id = TypeId .NAMED_ENUM if type_id is None else ((type_id << 8 ) + TypeId .ENUM )
356- elif cls is types .FunctionType :
357- # Use FunctionSerializer for function types (including lambdas)
358- serializer = FunctionSerializer (self .fory , cls )
359- type_id = TypeId .NAMED_EXT if type_id is None else ((type_id << 8 ) + TypeId .EXT )
360358 else :
361359 serializer = DataClassSerializer (self .fory , cls , xlang = True )
362360 type_id = TypeId .NAMED_STRUCT if type_id is None else ((type_id << 8 ) + TypeId .STRUCT )
@@ -466,16 +464,14 @@ def get_typeinfo(self, cls, create=True):
466464 return type_info
467465 elif not create :
468466 return None
469- if self .language != Language . PYTHON or ( self . require_registration and not issubclass (cls , Enum ) ):
467+ if self .require_registration and not issubclass (cls , Enum ):
470468 raise TypeUnregisteredError (f"{ cls } not registered" )
471469 logger .info ("Type %s not registered" , cls )
472470 serializer = self ._create_serializer (cls )
473471 type_id = None
474472 if self .language == Language .PYTHON :
475473 if isinstance (serializer , EnumSerializer ):
476474 type_id = TypeId .NAMED_ENUM
477- elif isinstance (serializer , FunctionSerializer ):
478- type_id = TypeId .NAMED_EXT
479475 elif isinstance (serializer , (ObjectSerializer , StatefulSerializer )):
480476 type_id = TypeId .NAMED_EXT
481477 elif self ._internal_py_serializer_map .get (type (serializer )) is not None :
0 commit comments