from triangularmap import DictTMap, TMap
from collections import defaultdict
[docs]
def cat_pretty(trees, off=False, *args, **kwargs):
if off:
return '\n'.join([tree.pretty(*args, **kwargs) for tree in trees])
else:
return '\n'.join(
list('|'.join(x) for x in zip(*[tree.pretty(*args, **kwargs).split('\n') for tree in trees]))
)
[docs]
class PrettySet(set):
[docs]
def __init__(self, *args, empty="∅", compact=True, left="{", right="}", **kwargs):
super().__init__(*args, **kwargs)
self.empty = empty
self.compact = compact
self.left = left
self.right = right
[docs]
def __str__(self):
if self:
if self.compact:
return self.left + ",".join([str(x) for x in self]) + self.right
else:
return str(set(self))
else:
return self.empty
[docs]
def __repr__(self):
return self.__str__()
[docs]
class PrettyDict(defaultdict):
[docs]
def __init__(self, *args, empty="{}", compact=True, left="{", right="}", **kwargs):
super().__init__(*args, **kwargs)
self.empty = empty
self.compact = compact
self.left = left
self.right = right
[docs]
def __str__(self):
if self:
if self.compact:
return self.left + ",".join([f"{k}:{v}" for k, v in self.items()]) + self.right
else:
return str(dict(self))
else:
return self.empty
[docs]
class SetChart(TMap):
[docs]
@classmethod
def from_dict_set_chart(cls, chart, **kwargs):
new_chart = SetChart(chart.n, **kwargs)
for k, v in chart.arr.items():
for vk in v.keys():
new_chart.arr[k].add(vk)
return new_chart
[docs]
def __new__(cls, n, **kwargs):
return DictTMap(n, lambda: PrettySet(**kwargs))
[docs]
class DictSetChart(TMap):
[docs]
def __new__(cls, n, **kwargs):
return DictTMap(n, lambda: PrettyDict(PrettySet))