Package gmisclib :: Module array_window
[frames] | no frames]

Source Code for Module gmisclib.array_window

 1  """Defines array_window class.""" 
 2   
 3  __version__ = "$Revision: 1.4 $" 
 4   
5 -class array_window:
6 __doc__ = """Lets you reference 1-d array items relative to an arbitrary zero.""" 7
8 - def __init__(self, array, zero):
9 assert array is not None 10 assert len(array) > 0 11 assert zero >= 0 and zero < len(array) 12 self.d = array 13 self.zero = zero
14
15 - def __setattr__(self, name, value):
16 if self.__dict__.has_key(name): 17 raise AttributeError, "Can't re-set " + name 18 if name == 'd' or name == 'zero': 19 self.__dict__[name] = value 20 else: 21 raise AttributeError, "Can't set any attributes"
22
23 - def __delattr__(self, name):
24 raise(AttributeError)
25
26 - def __getitem__(self, index):
27 i = self.zero + index 28 if i < 0: 29 raise IndexError, 'negative index' 30 return self.d[i]
31
32 - def __setitem__(self, index, value):
33 index += self.zero 34 if index < 0: 35 raise IndexError, 'negative index' 36 self.d[index] = value
37
38 - def __getslice__(self, i, j):
39 i += self.zero 40 j += self.zero 41 if i < 0: 42 i = 0 43 if j < 0: 44 j = 0 45 return self.d[i, j]
46
47 - def __setslice__(self, i, j, sequence):
48 i += self.zero 49 j += self.zero 50 if i < 0: 51 i = 0 52 if j < 0: 53 j = 0 54 self.d[i:j] = sequence
55
56 - def __str__(self):
57 if self.zero <= 0: 58 s = "*" + (-self.zero)*"." + str(self.d) 59 elif self.zero > len(self.d): 60 s = str(self.d) + (self.zero-len(self.d))*"." + "*" 61 else: 62 s = str(self.d[:self.zero]) + "*" + str(self.d[self.zero:]) 63 return "<array_window at %d of %d:" % (self.zero, len(self.d)) + s + ">"
64
65 - def __repr__(self):
66 return self.__str__()
67
68 - def __len__(self):
69 """Of course, one can't assume that one can say x[i] for i in range(len(x)).""" 70 return len(self.d)
71 72
73 -def test():
74 x = [0, 2, 3, 4, 5, 6, 7, 8, 9] 75 y = array_window(x, 3) 76 assert y[0] == x[3] 77 assert y[2] == x[5]
78 79 if __name__ == '__main__' : 80 test() 81 print "OK: passed tests" 82