blob: edb31470d7e44900513a2ebac71385764329f9b7 [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
Collin Winter6f2df4d2007-07-17 20:59:35 +000030 v = list(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
Collin Winter6f2df4d2007-07-17 20:59:35 +000035 v = list(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
Collin Winter6f2df4d2007-07-17 20:59:35 +000040 v = [x*scalar for x in 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)
Collin Winter6f2df4d2007-07-17 20:59:35 +000048 print(a)
49 print(b)
50 print(a+b)
51 print(a-b)
52 print(a*3.0)
Guido van Rossume8769491992-08-13 12:14:11 +000053
54test()