@@ -324,9 +324,9 @@ def test_set_basic_selection_0d():
324324 eq (v ['bar' ], z ['bar' ])
325325 eq (a ['baz' ], z ['baz' ])
326326 # multiple field assignment not supported
327- with assert_raises (ValueError ):
327+ with assert_raises (IndexError ):
328328 z .set_basic_selection (Ellipsis , v [['foo' , 'bar' ]], fields = ['foo' , 'bar' ])
329- with assert_raises (ValueError ):
329+ with assert_raises (IndexError ):
330330 z [..., 'foo' , 'bar' ] = v [['foo' , 'bar' ]]
331331
332332
@@ -1213,6 +1213,7 @@ def test_set_selections_with_fields():
12131213
12141214 fields_fixture = [
12151215 'foo' ,
1216+ [],
12161217 ['foo' ],
12171218 ['foo' , 'bar' ],
12181219 ['foo' , 'baz' ],
@@ -1225,54 +1226,64 @@ def test_set_selections_with_fields():
12251226 for fields in fields_fixture :
12261227
12271228 # currently multi-field assignment is not supported in numpy, so we won't support it either
1228- if isinstance (fields , list ):
1229- with assert_raises (ValueError ):
1230- z .set_basic_selection (Ellipsis , v [ fields ] , fields = fields )
1231- with assert_raises (ValueError ):
1232- z .set_orthogonal_selection ([0 , 2 ], v [ fields ] , fields = fields )
1233- with assert_raises (ValueError ):
1234- z .set_coordinate_selection ([0 , 2 ], v [ fields ] , fields = fields )
1235- with assert_raises (ValueError ):
1236- z .set_mask_selection ([True , False , True ], v [ fields ] , fields = fields )
1229+ if isinstance (fields , list ) and len ( fields ) > 1 :
1230+ with assert_raises (IndexError ):
1231+ z .set_basic_selection (Ellipsis , v , fields = fields )
1232+ with assert_raises (IndexError ):
1233+ z .set_orthogonal_selection ([0 , 2 ], v , fields = fields )
1234+ with assert_raises (IndexError ):
1235+ z .set_coordinate_selection ([0 , 2 ], v , fields = fields )
1236+ with assert_raises (IndexError ):
1237+ z .set_mask_selection ([True , False , True ], v , fields = fields )
12371238
12381239 else :
12391240
1241+ if isinstance (fields , list ) and len (fields ) == 1 :
1242+ # work around numpy does not support multi-field assignment even if there is only
1243+ # one field
1244+ key = fields [0 ]
1245+ elif isinstance (fields , list ) and len (fields ) == 0 :
1246+ # work around numpy ambiguity about what is a field selection
1247+ key = Ellipsis
1248+ else :
1249+ key = fields
1250+
12401251 # setup expectation
12411252 a [:] = ('' , 0 , 0 )
12421253 z [:] = ('' , 0 , 0 )
12431254 assert_array_equal (a , z [:])
1244- a [fields ] = v [fields ]
1255+ a [key ] = v [key ]
12451256 # total selection
1246- z .set_basic_selection (Ellipsis , v [fields ], fields = fields )
1257+ z .set_basic_selection (Ellipsis , v [key ], fields = fields )
12471258 assert_array_equal (a , z [:])
12481259
12491260 # basic selection with slice
12501261 a [:] = ('' , 0 , 0 )
12511262 z [:] = ('' , 0 , 0 )
1252- a [fields ][0 :2 ] = v [fields ][0 :2 ]
1253- z .set_basic_selection (slice (0 , 2 ), v [0 :2 ][ fields ], fields = fields )
1263+ a [key ][0 :2 ] = v [key ][0 :2 ]
1264+ z .set_basic_selection (slice (0 , 2 ), v [key ][ 0 :2 ], fields = fields )
12541265 assert_array_equal (a , z [:])
12551266
12561267 # orthogonal selection
12571268 a [:] = ('' , 0 , 0 )
12581269 z [:] = ('' , 0 , 0 )
12591270 ix = [0 , 2 ]
1260- a [fields ][ix ] = v [fields ][ix ]
1261- z .set_orthogonal_selection (ix , v [fields ][ix ], fields = fields )
1271+ a [key ][ix ] = v [key ][ix ]
1272+ z .set_orthogonal_selection (ix , v [key ][ix ], fields = fields )
12621273 assert_array_equal (a , z [:])
12631274
12641275 # coordinate selection
12651276 a [:] = ('' , 0 , 0 )
12661277 z [:] = ('' , 0 , 0 )
12671278 ix = [0 , 2 ]
1268- a [fields ][ix ] = v [fields ][ix ]
1269- z .set_coordinate_selection (ix , v [fields ][ix ], fields = fields )
1279+ a [key ][ix ] = v [key ][ix ]
1280+ z .set_coordinate_selection (ix , v [key ][ix ], fields = fields )
12701281 assert_array_equal (a , z [:])
12711282
12721283 # mask selection
12731284 a [:] = ('' , 0 , 0 )
12741285 z [:] = ('' , 0 , 0 )
12751286 ix = [True , False , True ]
1276- a [fields ][ix ] = v [fields ][ix ]
1277- z .set_mask_selection (ix , v [fields ][ix ], fields = fields )
1287+ a [key ][ix ] = v [key ][ix ]
1288+ z .set_mask_selection (ix , v [key ][ix ], fields = fields )
12781289 assert_array_equal (a , z [:])
0 commit comments