def to_structural_def(self, node, class_name): """Convert this Unknown to a pytd.Class.""" self_param = (pytd.Parameter("self", pytd.AnythingType(), pytd.ParameterKind.REGULAR, False, None), ) starargs = None starstarargs = None def _make_sig(args, ret): return pytd.Signature(self_param + self._make_params(node, args), starargs, starstarargs, return_type=Unknown._to_pytd(node, ret), exceptions=(), template=()) calls = tuple( pytd_utils.OrderedSet( _make_sig(args, ret) for args, _, ret in self._calls)) if calls: methods = (pytd.Function("__call__", calls, pytd.MethodKind.METHOD), ) else: methods = () return pytd.Class(name=class_name, metaclass=None, bases=(pytd.NamedType("builtins.object"), ), methods=methods, constants=tuple( pytd.Constant(name, Unknown._to_pytd(node, c)) for name, c in self.members.items()), classes=(), decorators=(), slots=None, template=())
def test_ordered_set(self): ordered_set = pytd_utils.OrderedSet(n // 2 for n in range(10)) ordered_set.add(-42) ordered_set.add(3) self.assertEqual(tuple(ordered_set), (0, 1, 2, 3, 4, -42))
def VisitFunction(self, node): # We remove duplicates, but keep existing entries in the same order. return node.Replace( signatures=tuple(pytd_utils.OrderedSet(node.signatures)))