| 
									
										
										
										
											1992-08-13 12:14:11 +00:00
										 |  |  | # A simple vector class | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def vec(*v): | 
					
						
							| 
									
										
										
										
											1993-12-17 14:23:52 +00:00
										 |  |  | 	return apply(Vec, v) | 
					
						
							| 
									
										
										
										
											1992-08-13 12:14:11 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Vec: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											1993-12-17 14:23:52 +00:00
										 |  |  | 	def __init__(self, *v): | 
					
						
							| 
									
										
										
										
											1992-08-13 12:14:11 +00:00
										 |  |  | 		self.v = [] | 
					
						
							|  |  |  | 		for x in v: | 
					
						
							|  |  |  | 			self.v.append(x) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	def fromlist(self, v): | 
					
						
							|  |  |  | 		self.v = [] | 
					
						
							|  |  |  | 		if type(v) <> type([]): | 
					
						
							|  |  |  | 			raise TypeError | 
					
						
							|  |  |  | 		self.v = v[:] | 
					
						
							|  |  |  | 		return self | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	def __repr__(self): | 
					
						
							|  |  |  | 		return 'vec(' + `self.v`[1:-1] + ')' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	def __len__(self): | 
					
						
							|  |  |  | 		return len(self.v) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	def __getitem__(self, i): | 
					
						
							|  |  |  | 		return self.v[i] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	def __add__(a, b): | 
					
						
							|  |  |  | 		# Element-wise addition | 
					
						
							|  |  |  | 		v = [] | 
					
						
							|  |  |  | 		for i in range(len(a)): | 
					
						
							|  |  |  | 			v.append(a[i] + b[i]) | 
					
						
							|  |  |  | 		return Vec().fromlist(v) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	def __sub__(a, b): | 
					
						
							|  |  |  | 		# Element-wise subtraction | 
					
						
							|  |  |  | 		v = [] | 
					
						
							|  |  |  | 		for i in range(len(a)): | 
					
						
							|  |  |  | 			v.append(a[i] - b[i]) | 
					
						
							|  |  |  | 		return Vec().fromlist(v) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	def __mul__(self, scalar): | 
					
						
							|  |  |  | 		# Multiply by scalar | 
					
						
							|  |  |  | 		v = [] | 
					
						
							|  |  |  | 		for i in range(len(self.v)): | 
					
						
							|  |  |  | 			v.append(self.v[i]*scalar) | 
					
						
							|  |  |  | 		return Vec().fromlist(v) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def test(): | 
					
						
							|  |  |  | 	a = vec(1, 2, 3) | 
					
						
							|  |  |  | 	b = vec(3, 2, 1) | 
					
						
							|  |  |  | 	print a | 
					
						
							|  |  |  | 	print b | 
					
						
							|  |  |  | 	print a+b | 
					
						
							|  |  |  | 	print a*3.0 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | test() |