@@ -108,10 +108,16 @@ class PixelMap:
108
108
109
109
def __init__ (self , strip , pixel_ranges , individual_pixels = False ):
110
110
self ._pixels = strip
111
+ if not isinstance (pixel_ranges , list ) and not isinstance (pixel_ranges , tuple ):
112
+ raise TypeError ("pixel_ranges must be tuple or list" )
113
+
111
114
if isinstance (pixel_ranges , list ) or isinstance (pixel_ranges [0 ], list ):
112
- self ._ranges = tuple (
113
- tuple (item for item in sublist ) for sublist in pixel_ranges
114
- )
115
+ if not isinstance (pixel_ranges [0 ], int ):
116
+ self ._ranges = tuple (
117
+ tuple (item for item in sublist ) for sublist in pixel_ranges
118
+ )
119
+ else :
120
+ self ._ranges = tuple (pixel_ranges )
115
121
116
122
elif isinstance (pixel_ranges , tuple ):
117
123
self ._ranges = pixel_ranges
@@ -130,7 +136,7 @@ def _expand_ranges(self):
130
136
)
131
137
return
132
138
if isinstance (self ._ranges [0 ], int ):
133
- self ._ranges = [[ n ] for n in self ._ranges ]
139
+ self ._ranges = tuple (( n ,) for n in self ._ranges )
134
140
135
141
def __repr__ (self ):
136
142
return "[" + ", " .join ([str (self [x ]) for x in range (self .n )]) + "]"
@@ -148,10 +154,7 @@ def __setitem__(self, index, val):
148
154
149
155
def __getitem__ (self , index ):
150
156
if isinstance (index , slice ):
151
- out = []
152
- for in_i in range (* index .indices (len (self ._ranges ))):
153
- out .append (self ._pixels [self ._ranges [in_i ][0 ]])
154
- return out
157
+ return self ._map [index ]
155
158
if index < 0 :
156
159
index += len (self )
157
160
if index >= self .n or index < 0 :
0 commit comments