@@ -663,7 +663,7 @@ def eval_node(node: Union[ast.AST, None], context: EvaluationContext):
663663 return_type , context
664664 )
665665 else :
666- inferred_duck_object = _get_duck_from_return_value (node , context )
666+ inferred_duck_object = _infer_return_value (node , context )
667667 context .transient_locals [node .name ] = inferred_duck_object
668668
669669 return None
@@ -887,48 +887,6 @@ def _infer_return_value(node: ast.FunctionDef, context: EvaluationContext):
887887 return None
888888
889889
890- def _get_duck_from_return_value (node : ast .FunctionDef , context : EvaluationContext ):
891- """Infer the 'duck type' from the first valid return value."""
892- try :
893- return_value = _infer_return_value (node , context )
894- if return_value is not None and return_value is not NOT_EVALUATED :
895- duck = _create_duck_from_value (return_value )
896- return duck
897- except Exception :
898- pass
899- return None
900-
901-
902- def _create_duck_from_value (value ):
903- """Create a Duck object from an actual runtime value."""
904- if value is None or value is NOT_EVALUATED :
905- return None
906- value_type = type (value )
907- if isinstance (value , dict ):
908- return _Duck (
909- attributes = dict .fromkeys (dir (dict ())), items = value if value else {}
910- )
911- elif isinstance (value , list ):
912- element_duck = None
913- if value :
914- element_duck = _create_duck_from_value (value [0 ])
915- return _Duck (
916- attributes = dict .fromkeys (dir (list ())),
917- items = _GetItemDuck (lambda : element_duck ),
918- )
919- elif isinstance (value , set ):
920- return _Duck (attributes = dict .fromkeys (dir (set ())))
921- elif isinstance (value , tuple ):
922- return value
923- elif isinstance (value , (str , int , float , bool , bytes )):
924- return _Duck (attributes = dict .fromkeys (dir (value_type ())))
925- else :
926- try :
927- return _create_duck_for_heap_type (value_type )
928- except Exception :
929- return _Duck (attributes = dict .fromkeys (dir (value )))
930-
931-
932890def _eval_return_type (func : Callable , node : ast .Call , context : EvaluationContext ):
933891 """Evaluate return type of a given callable function.
934892
0 commit comments