blob: 56cb839392ae38bde636313857216207a85d3321 [file] [log] [blame]
Guido van Rossume8769491992-08-13 12:14:11 +00001# A simple vector class
2
3
4def vec(*v):
Raymond Hettingerfe63faa2003-09-10 21:12:59 +00005 return Vec(*v)
Guido van Rossume8769491992-08-13 12:14:11 +00006
7
8class Vec:
9
Andrew M. Kuchling946c53e2003-04-24 17:13:18 +000010 def __init__(self, *v):
Raymond Hettingerfe63faa2003-09-10 21:12:59 +000011 self.v = list(v)
Guido van Rossume8769491992-08-13 12:14:11 +000012
Andrew M. Kuchling946c53e2003-04-24 17:13:18 +000013 def fromlist(self, v):
Raymond Hettingerfe63faa2003-09-10 21:12:59 +000014 if not isinstance(v, list):
Andrew M. Kuchling946c53e2003-04-24 17:13:18 +000015 raise TypeError
16 self.v = v[:]
17 return self
Guido van Rossume8769491992-08-13 12:14:11 +000018
Andrew M. Kuchling946c53e2003-04-24 17:13:18 +000019 def __repr__(self):
Raymond Hettingerfe63faa2003-09-10 21:12:59 +000020 return 'vec(' + repr(self.v)[1:-1] + ')'
Guido van Rossume8769491992-08-13 12:14:11 +000021
Andrew M. Kuchling946c53e2003-04-24 17:13:18 +000022 def __len__(self):
23 return len(self.v)
Guido van Rossume8769491992-08-13 12:14:11 +000024
Andrew M. Kuchling946c53e2003-04-24 17:13:18 +000025 def __getitem__(self, i):
26 return self.v[i]
Guido van Rossume8769491992-08-13 12:14:11 +000027
Raymond Hettingerfe63faa2003-09-10 21:12:59 +000028 def __add__(self, other):
Andrew M. Kuchling946c53e2003-04-24 17:13:18 +000029 # Element-wise addition
Raymond Hettingerfe63faa2003-09-10 21:12:59 +000030 v = map(lambda x, y: x+y, self, other)
Andrew M. Kuchling946c53e2003-04-24 17:13:18 +000031 return Vec().fromlist(v)
Guido van Rossume8769491992-08-13 12:14:11 +000032
Raymond Hettingerfe63faa2003-09-10 21:12:59 +000033 def __sub__(self, other):
Andrew M. Kuchling946c53e2003-04-24 17:13:18 +000034 # Element-wise subtraction
Raymond Hettingerfe63faa2003-09-10 21:12:59 +000035 v = map(lambda x, y: x-y, self, other)
Andrew M. Kuchling946c53e2003-04-24 17:13:18 +000036 return Vec().fromlist(v)
Guido van Rossume8769491992-08-13 12:14:11 +000037
Andrew M. Kuchling946c53e2003-04-24 17:13:18 +000038 def __mul__(self, scalar):
39 # Multiply by scalar
Raymond Hettingerfe63faa2003-09-10 21:12:59 +000040 v = map(lambda x: x*scalar, self.v)
Andrew M. Kuchling946c53e2003-04-24 17:13:18 +000041 return Vec().fromlist(v)
Guido van Rossume8769491992-08-13 12:14:11 +000042
43
44
45def test():
Andrew M. Kuchling946c53e2003-04-24 17:13:18 +000046 a = vec(1, 2, 3)
47 b = vec(3, 2, 1)
48 print a
49 print b
50 print a+b
Raymond Hettingerfe63faa2003-09-10 21:12:59 +000051 print a-b
Andrew M. Kuchling946c53e2003-04-24 17:13:18 +000052 print a*3.0
Guido van Rossume8769491992-08-13 12:14:11 +000053
54test()