1 """Defines array_window class."""
2
3 __version__ = "$Revision: 1.4 $"
4
6 __doc__ = """Lets you reference 1-d array items relative to an arbitrary zero."""
7
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
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
25
27 i = self.zero + index
28 if i < 0:
29 raise IndexError, 'negative index'
30 return self.d[i]
31
33 index += self.zero
34 if index < 0:
35 raise IndexError, 'negative index'
36 self.d[index] = value
37
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
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
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
67
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
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