| 
									
										
										
										
											1992-08-13 12:14:11 +00:00
										 |  |  | # A simple vector class | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def vec(*v): | 
					
						
							| 
									
										
										
										
											2003-09-10 21:12:59 +00:00
										 |  |  |     return Vec(*v) | 
					
						
							| 
									
										
										
										
											1992-08-13 12:14:11 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class Vec: | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-04-24 17:13:18 +00:00
										 |  |  |     def __init__(self, *v): | 
					
						
							| 
									
										
										
										
											2003-09-10 21:12:59 +00:00
										 |  |  |         self.v = list(v) | 
					
						
							| 
									
										
										
										
											1992-08-13 12:14:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-04-24 17:13:18 +00:00
										 |  |  |     def fromlist(self, v): | 
					
						
							| 
									
										
										
										
											2003-09-10 21:12:59 +00:00
										 |  |  |         if not isinstance(v, list): | 
					
						
							| 
									
										
										
										
											2003-04-24 17:13:18 +00:00
										 |  |  |             raise TypeError | 
					
						
							|  |  |  |         self.v = v[:] | 
					
						
							|  |  |  |         return self | 
					
						
							| 
									
										
										
										
											1992-08-13 12:14:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-04-24 17:13:18 +00:00
										 |  |  |     def __repr__(self): | 
					
						
							| 
									
										
										
										
											2003-09-10 21:12:59 +00:00
										 |  |  |         return 'vec(' + repr(self.v)[1:-1] + ')' | 
					
						
							| 
									
										
										
										
											1992-08-13 12:14:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-04-24 17:13:18 +00:00
										 |  |  |     def __len__(self): | 
					
						
							|  |  |  |         return len(self.v) | 
					
						
							| 
									
										
										
										
											1992-08-13 12:14:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-04-24 17:13:18 +00:00
										 |  |  |     def __getitem__(self, i): | 
					
						
							|  |  |  |         return self.v[i] | 
					
						
							| 
									
										
										
										
											1992-08-13 12:14:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-09-10 21:12:59 +00:00
										 |  |  |     def __add__(self, other): | 
					
						
							| 
									
										
										
										
											2003-04-24 17:13:18 +00:00
										 |  |  |         # Element-wise addition | 
					
						
							| 
									
										
										
										
											2007-07-17 20:59:35 +00:00
										 |  |  |         v = list(map(lambda x, y: x+y, self, other)) | 
					
						
							| 
									
										
										
										
											2003-04-24 17:13:18 +00:00
										 |  |  |         return Vec().fromlist(v) | 
					
						
							| 
									
										
										
										
											1992-08-13 12:14:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-09-10 21:12:59 +00:00
										 |  |  |     def __sub__(self, other): | 
					
						
							| 
									
										
										
										
											2003-04-24 17:13:18 +00:00
										 |  |  |         # Element-wise subtraction | 
					
						
							| 
									
										
										
										
											2007-07-17 20:59:35 +00:00
										 |  |  |         v = list(map(lambda x, y: x-y, self, other)) | 
					
						
							| 
									
										
										
										
											2003-04-24 17:13:18 +00:00
										 |  |  |         return Vec().fromlist(v) | 
					
						
							| 
									
										
										
										
											1992-08-13 12:14:11 +00:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2003-04-24 17:13:18 +00:00
										 |  |  |     def __mul__(self, scalar): | 
					
						
							|  |  |  |         # Multiply by scalar | 
					
						
							| 
									
										
										
										
											2007-07-17 20:59:35 +00:00
										 |  |  |         v = [x*scalar for x in self.v] | 
					
						
							| 
									
										
										
										
											2003-04-24 17:13:18 +00:00
										 |  |  |         return Vec().fromlist(v) | 
					
						
							| 
									
										
										
										
											1992-08-13 12:14:11 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def test(): | 
					
						
							| 
									
										
										
										
											2003-04-24 17:13:18 +00:00
										 |  |  |     a = vec(1, 2, 3) | 
					
						
							|  |  |  |     b = vec(3, 2, 1) | 
					
						
							| 
									
										
										
										
											2007-07-17 20:59:35 +00:00
										 |  |  |     print(a) | 
					
						
							|  |  |  |     print(b) | 
					
						
							|  |  |  |     print(a+b) | 
					
						
							|  |  |  |     print(a-b) | 
					
						
							|  |  |  |     print(a*3.0) | 
					
						
							| 
									
										
										
										
											1992-08-13 12:14:11 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | test() |