git.fiddlerwoaroof.com
util.py
a9acab05
 class CoordPair(object):
 	def __init__(self, fst, snd=None):
 		if snd == None: fst, snd = fst
 		self.fst, self.snd = fst,snd
 
 	@property
 	def pair(self):
 		return self.fst, self.snd
 
 	def __len__(self): return 2
 	def __iter__(self): return iter(self.pair)
 	def __getitem__(self, idx):
 		if idx == 0: return self.fst
 		elif idx == 1: return self.snd
 		else: raise KeyError("Only two elements in a coordpair")
 
 	def transform(self, *transforms):
 		'''Note: mul _then_ add'''
 		f,s = self.pair
 		for transform in transforms:
 			x = transform.get('mul', (1,1))
 			if not hasattr(x, '__iter__'): x=(x,x)
 			f1,f2 = x
 			f *= f1
 			s *= f2
 			x = transform.get('add', (0,0))
 			if not hasattr(x, '__iter__'): x=(x,x)
 			f1,f2 = x
 			f += f1
 			s += f2
 		return f,s
 
 	def __ne__(self, other):
 		return not self.__eq__(other)
 	def __rne__(self, other):
 		return not self.__eq__(other)
 
 	def __eq__(self, other):
 		a,b = self
 		c,d = other
 		return a==c and b==d
 	def __req__(self, other):
 		return self == other
 
 	def __add__(self, other):
 		return self.__class__(self.transform({'add': other}))
 	def __radd__(self, other):
 		return self.__class__(self.transform({'add': other}))
 
 	def __mul__(self, other):
 		return self.__class__(self.transform({'mul': other}))
 	def __rmul__(self, other):
 		return self.__class__(self.transform({'mul': other}))
 
 
 	def __sub__(self, other):
 		a,b = other
 		return self.__class__(self.transform({'add': (-a,-b)}))
 	def __rsub__(self, other):
 		a,b = other
 		return self.__class__(self.transform({'add': (-a,-b)}))
 
 	def __div__(self, other):
 		return self.__class__(self.transform({'mul': 1.0/other}))
 	def __rdiv__(self, other):
 		return self.__class__(self.transform({'mul': 1.0/other}))
 
 	def __repr__(self):
 		return '%s(%s,%s)' % (self.__class__.__name__, self.fst, self.snd)