Back to home page

EIC code displayed by LXR

 
 

    


File indexing completed on 2026-04-09 07:49:24

0001 #!/usr/bin/env python
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