git.fiddlerwoaroof.com
Raw Blame History
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)