blob: 7e3e3aedcf1213003da126055b696bf0831ccbc3 [file] [log] [blame]
Guido van Rossume8769491992-08-13 12:14:11 +00001# A simple vector class
2
Georg Brandl5ada7c72010-07-05 20:13:41 +00003import operator
Guido van Rossume8769491992-08-13 12:14:11 +00004
5
6class Vec:
7
Andrew M. Kuchling946c53e2003-04-24 17:13:18 +00008 def __init__(self, *v):
Raymond Hettingerfe63faa2003-09-10 21:12:59 +00009 self.v = list(v)
Guido van Rossume8769491992-08-13 12:14:11 +000010
Georg Brandl5ada7c72010-07-05 20:13:41 +000011 @classmethod
12 def fromlist(cls, v):
Raymond Hettingerfe63faa2003-09-10 21:12:59 +000013 if not isinstance(v, list):
Andrew M. Kuchling946c53e2003-04-24 17:13:18 +000014 raise TypeError
Georg Brandl5ada7c72010-07-05 20:13:41 +000015 inst = cls()
16 inst.v = v
17 return inst
Guido van Rossume8769491992-08-13 12:14:11 +000018
Andrew M. Kuchling946c53e2003-04-24 17:13:18 +000019 def __repr__(self):
Georg Brandl5ada7c72010-07-05 20:13:41 +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
Georg Brandl5ada7c72010-07-05 20:13:41 +000030 v = list(map(operator.add, self, other))
31 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
Georg Brandl5ada7c72010-07-05 20:13:41 +000035 v = list(map(operator.sub, self, other))
36 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]
Georg Brandl5ada7c72010-07-05 20:13:41 +000041 return Vec.fromlist(v)
Guido van Rossume8769491992-08-13 12:14:11 +000042
43
44
45def test():
Georg Brandl5ada7c72010-07-05 20:13:41 +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()