Source code for muprocdurham.pcfg

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))