@@ -277,6 +277,67 @@ def test_arraysequence_getitem(self):
277
277
check_arr_seq_view (seq_view , SEQ_DATA ['seq' ])
278
278
check_arr_seq (seq_view , [d [:, 2 ] for d in SEQ_DATA ['data' ][::- 2 ]])
279
279
280
+ def test_arraysequence_setitem (self ):
281
+ # Set one item
282
+ seq = SEQ_DATA ['seq' ] * 0
283
+ for i , e in enumerate (SEQ_DATA ['seq' ]):
284
+ seq [i ] = e
285
+
286
+ check_arr_seq (seq , SEQ_DATA ['seq' ])
287
+
288
+ if sys .version_info < (3 ,):
289
+ seq = ArraySequence (SEQ_DATA ['seq' ] * 0 )
290
+ for i , e in enumerate (SEQ_DATA ['seq' ]):
291
+ seq [long (i )] = e
292
+
293
+ check_arr_seq (seq , SEQ_DATA ['seq' ])
294
+
295
+ # Get all items using indexing (creates a view).
296
+ indices = list (range (len (SEQ_DATA ['seq' ])))
297
+ seq_view = SEQ_DATA ['seq' ][indices ]
298
+ check_arr_seq_view (seq_view , SEQ_DATA ['seq' ])
299
+ # We took all elements so the view should match the original.
300
+ check_arr_seq (seq_view , SEQ_DATA ['seq' ])
301
+
302
+ # Get multiple items using ndarray of dtype integer.
303
+ for dtype in [np .int8 , np .int16 , np .int32 , np .int64 ]:
304
+ seq_view = SEQ_DATA ['seq' ][np .array (indices , dtype = dtype )]
305
+ check_arr_seq_view (seq_view , SEQ_DATA ['seq' ])
306
+ # We took all elements so the view should match the original.
307
+ check_arr_seq (seq_view , SEQ_DATA ['seq' ])
308
+
309
+ # Get multiple items out of order (creates a view).
310
+ SEQ_DATA ['rng' ].shuffle (indices )
311
+ seq_view = SEQ_DATA ['seq' ][indices ]
312
+ check_arr_seq_view (seq_view , SEQ_DATA ['seq' ])
313
+ check_arr_seq (seq_view , [SEQ_DATA ['data' ][i ] for i in indices ])
314
+
315
+ # Get slice (this will create a view).
316
+ seq_view = SEQ_DATA ['seq' ][::2 ]
317
+ check_arr_seq_view (seq_view , SEQ_DATA ['seq' ])
318
+ check_arr_seq (seq_view , SEQ_DATA ['data' ][::2 ])
319
+
320
+ # Use advanced indexing with ndarray of data type bool.
321
+ selection = np .array ([False , True , True , False , True ])
322
+ seq_view = SEQ_DATA ['seq' ][selection ]
323
+ check_arr_seq_view (seq_view , SEQ_DATA ['seq' ])
324
+ check_arr_seq (seq_view ,
325
+ [SEQ_DATA ['data' ][i ]
326
+ for i , keep in enumerate (selection ) if keep ])
327
+
328
+ # Test invalid indexing
329
+ assert_raises (TypeError , SEQ_DATA ['seq' ].__getitem__ , 'abc' )
330
+
331
+ # Get specific columns.
332
+ seq_view = SEQ_DATA ['seq' ][:, 2 ]
333
+ check_arr_seq_view (seq_view , SEQ_DATA ['seq' ])
334
+ check_arr_seq (seq_view , [d [:, 2 ] for d in SEQ_DATA ['data' ]])
335
+
336
+ # Combining multiple slicing and indexing operations.
337
+ seq_view = SEQ_DATA ['seq' ][::- 2 ][:, 2 ]
338
+ check_arr_seq_view (seq_view , SEQ_DATA ['seq' ])
339
+ check_arr_seq (seq_view , [d [:, 2 ] for d in SEQ_DATA ['data' ][::- 2 ]])
340
+
280
341
def test_arraysequence_repr (self ):
281
342
# Test that calling repr on a ArraySequence object is not falling.
282
343
repr (SEQ_DATA ['seq' ])
0 commit comments