def _run(self, xs: exactly(tuple), *, depth): if depth == self.max_depth: return self.ref(xs) elems = [self.run(x, depth=depth + 1) for x in xs] if len(xs) == 1: elems.append(H.atom("")) return H.bracketed(elems, start="(", end=")", delimiter=", ")
def _run(self, xs: exactly(list), *, depth): if depth == self.max_depth: return self.ref(xs) return H.bracketed( [self.run(x, depth=depth + 1) for x in xs], start="[", end="]", delimiter=", ", )
def _run(self, xs: exactly(set), *, depth): if depth == self.max_depth: return self.ref(xs) if not xs: return H.atom("set()") else: return H.bracketed( [self.run(x, depth=depth + 1) for x in xs], start="{", end="}", delimiter=",", )
def _run(self, obj: object, *, depth): d = getattr(obj, "__dict__", None) if depth == self.max_depth or not isinstance(d, dict): return self.ref(obj) call = f"sktk.mod({self.ref(type(obj), wrap=str)})" return H.bracketed( [ H.pair(k, self.run(v, depth=depth + 1), delimiter="=") for k, v in d.items() ], start=f"{call}(", end=")", delimiter=", ", ) return self.ref(obj)
def _run(self, d: exactly(dict), *, depth): if depth == self.max_depth: return self.ref(d) items = list(d.items()) return H.bracketed( [ H.pair( self.run(k, depth=depth + 1), self.run(v, depth=depth + 1), delimiter=": ", ) for k, v in items ], start="{", end="}", delimiter=", ", )