1 from __future__ import absolute_import, division
6 for name, operator in [("neg", "-%s"), ("pos", "+%s"), ("abs", "abs(%s)")]:
7 exec("def __%s__(self): return Vector(%s for x in self)" % (name, operator % "x"))
9 for name, operator in [
10 ("add", "%s+%s"), ("sub", "%s-%s"), ("mul", "%s*%s"), ("truediv", "%s/%s"), ("floordiv", "%s//%s"),
13 exec("""def __%s__(self, other):
15 return %s(%s for x, y in zip(self, other))
17 return Vector(%s for x in self)""" % (name, "sum" if name == "mul" else "Vector", operator % ("x", "y"), operator % ("x", "other")))
18 exec("""def __r%s__(self, other):
20 return %s(%s for x, y in zip(self, other))
22 return Vector(%s for x in self)""" % (name, "sum" if name == "mul" else "Vector", operator % ("y", "x"), operator % ("other", "x")))
24 def __mod__((x, y, z), (X, Y, Z)):
25 return Vector([y*Z-z*Y, z*X-x*Z, x*Y-y*X])
27 def __rmod__((X, Y, Z), (x, y, z)):
28 return Vector([y*Z-z*Y, z*X-x*Z, x*Y-y*X])
31 return 'v%s' % tuple.__repr__(self)
33 def __getitem__(self, item):
34 if isinstance(item, slice):
35 return Vector(tuple.__getitem__(self, item))
37 return tuple.__getitem__(self, item)
39 def __getslice__(self, i, j):
40 return self.__getitem__(slice(i, j))
43 return math.sqrt(self*self)
53 return Vector(int(x + .5) for x in self)
57 return Vector(int(x) for x in self)