Exemple #1
0
 def _call_traces_to_function(call_traces, name_transform=lambda x: x):
     funcs = collections.defaultdict(pytd_utils.OrderedSet)
     for node, func, sigs, args, kws, retvar in call_traces:
         # The lengths may be different in the presence of optional and kw args.
         arg_names = max((sig.get_positional_names() for sig in sigs),
                         key=len)
         for i in range(len(arg_names)):
             if not isinstance(func.data, abstract.BoundFunction) or i > 0:
                 arg_names[i] = function.argname(i)
         arg_types = (a.data.to_type(node) for a in args)
         ret = pytd_utils.JoinTypes(t.to_type(node) for t in retvar.data)
         # TODO(kramm): Record these:
         starargs = None
         starstarargs = None
         funcs[func.data.name].add(
             pytd.Signature(tuple(
                 pytd.Parameter(n, t, False, False, None)
                 for n, t in zip(arg_names, arg_types)) + tuple(
                     pytd.Parameter(name, a.data.to_type(node), False,
                                    False, None) for name, a in kws),
                            starargs,
                            starstarargs,
                            ret,
                            exceptions=(),
                            template=()))
     functions = []
     for name, signatures in funcs.items():
         functions.append(
             pytd.Function(name_transform(name), tuple(signatures),
                           pytd.METHOD))
     return functions
Exemple #2
0
 def _make_pytd_function(self, params, name="f"):
   pytd_params = []
   for i, p in enumerate(params):
     p_type = pytd.ClassType(p.name)
     p_type.cls = p
     pytd_params.append(
         pytd.Parameter(function.argname(i), p_type, False, False, None))
   pytd_sig = pytd.Signature(
       tuple(pytd_params), None, None, pytd.AnythingType(), (), ())
   sig = function.PyTDSignature(name, pytd_sig, self._vm)
   return abstract.PyTDFunction(name, (sig,), pytd.METHOD, self._vm)