@@ -277,6 +277,67 @@ def test_arraysequence_getitem(self):
277277 check_arr_seq_view (seq_view , SEQ_DATA ['seq' ])
278278 check_arr_seq (seq_view , [d [:, 2 ] for d in SEQ_DATA ['data' ][::- 2 ]])
279279
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+
280341 def test_arraysequence_repr (self ):
281342 # Test that calling repr on a ArraySequence object is not falling.
282343 repr (SEQ_DATA ['seq' ])
0 commit comments