File indexing completed on 2026-04-09 07:49:24
0001
0002
0003 class ABR(object):
0004 """
0005 As this takes a general side by side repr approach it belongs in its own module.
0006 """
0007 def __init__(self, A, B, symbol="AB"):
0008 self.A = A
0009 self.B = B
0010 self.symbol = symbol
0011
0012 def _get_idx(self):
0013 return self.A.idx
0014 def _set_idx(self, idx):
0015 self.A.idx = idx
0016 self.B.idx = idx
0017 idx = property(_get_idx, _set_idx)
0018
0019 def _get_flavor(self):
0020 return self.A.flavor
0021 def _set_flavor(self, flavor):
0022 self.A.flavor = flavor
0023 self.B.flavor = flavor
0024 flavor = property(_get_flavor, _set_flavor)
0025
0026
0027 def __call__(self, idx):
0028 self.idx = idx
0029 self.flavor = "call"
0030 return self
0031 def __getitem__(self, idx):
0032 self.idx = idx
0033 self.flavor = "getitem"
0034 return self
0035
0036
0037 @classmethod
0038 def MaxLen(cls, lines):
0039 mx = 0
0040 for i in range(len(lines)):
0041 if len(lines[i]) > mx: mx = len(lines[i])
0042 pass
0043 return mx
0044
0045 @classmethod
0046 def LeftRightPaddedSplit(cls, lhs, rhs):
0047 """
0048 :param lhs: text delimited by newlines
0049 :param rhs: text delimited by newlines
0050 :return l,r: lhs and rhs lines padded to be the same length
0051 """
0052 l = lhs.split("\n")
0053 r = rhs.split("\n")
0054 nl = len(l)
0055 nr = len(r)
0056 if nl == nr:
0057 pass
0058 elif nl > nr:
0059 r.extend( ["" for _ in range(nl-nr)] )
0060 nr = len(r)
0061 elif nr > nl:
0062 l.extend( ["" for _ in range(nr-nl)] )
0063 nl = len(l)
0064 else:
0065 pass
0066 pass
0067 assert nl == nr
0068 return l, r
0069
0070 @classmethod
0071 def SideBySide(cls, lhs, rhs, margin=10):
0072 l, r = cls.LeftRightPaddedSplit(lhs, rhs)
0073 nl = len(l)
0074 nr = len(r)
0075 assert nl == nr
0076
0077 lx_ = cls.MaxLen(l)
0078 rx_ = cls.MaxLen(r)
0079 lim = 100
0080
0081 lx = min(lim,lx_)
0082 rx = min(lim,rx_)
0083
0084 pass
0085 fmt_ = "{:%d}{:%d}"
0086 fmt = fmt_ % (lx+margin, rx+margin)
0087
0088 lines = []
0089 for i in range(nl):
0090 line = fmt.format(l[i], r[i])
0091 lines.append(line.rstrip())
0092 pass
0093 return "\n".join(lines)
0094
0095 def identification(self):
0096 ia = self.A.identification() if hasattr(self.A, "identification") else ""
0097 ib = self.B.identification() if hasattr(self.B, "identification") else ""
0098 return "\n".join(filter(None,[ia,ib]))
0099
0100 def __repr__(self):
0101 return "\n".join([self.identification(), self.SideBySide(repr(self.A), repr(self.B))])
0102
0103
0104 if __name__ == '__main__':
0105 pass
0106
0107
0108
0109