@@ -2486,19 +2486,6 @@ def _translate_axis_key(self, axis_key):
2486
2486
if isinstance (key , Group ):
2487
2487
axis_key = key
2488
2488
2489
- if isinstance (axis_key , ExprNode ):
2490
- # FIXME: it is still possible to get here if we use a dict key in getitem !
2491
- raise Exception ('yada' )
2492
- axis_key = axis_key .evaluate (self )
2493
-
2494
- # XXX: this is probably not necessary anymore
2495
- if isinstance (axis_key , LArray ) and np .issubdtype (axis_key .dtype , np .bool_ ):
2496
- raise Exception ('yada' )
2497
- if len (axis_key .axes ) > 1 :
2498
- raise ValueError ("mixing ND boolean filters with other filters in getitem is not currently supported" )
2499
- else :
2500
- return IGroup (axis_key .nonzero ()[0 ], axis = axis_key .axes [0 ])
2501
-
2502
2489
# translate Axis keys to LGroup keys
2503
2490
# FIXME: this should be simply:
2504
2491
# if isinstance(axis_key, Axis):
@@ -2561,47 +2548,44 @@ def _key_to_igroups(self, key):
2561
2548
"""
2562
2549
from .array import LArray
2563
2550
2564
- # convert scalar keys to 1D keys
2565
- if not isinstance (key , (tuple , dict )):
2551
+ if isinstance (key , dict ):
2552
+ # key axes could be strings or axis references and we want real axes
2553
+ key = tuple (self [axis ][axis_key ] for axis , axis_key in key .items ())
2554
+ elif not isinstance (key , tuple ):
2555
+ # convert scalar keys to 1D keys
2566
2556
key = (key ,)
2567
2557
2568
- # always the case except if key is a dict
2569
- if isinstance (key , tuple ):
2570
- key = tuple (axis_key .evaluate (self ) if isinstance (axis_key , ExprNode ) else axis_key
2571
- for axis_key in key )
2572
-
2573
- nonboolkey = []
2574
- for axis_key in key :
2575
- if isinstance (axis_key , np .ndarray ) and np .issubdtype (axis_key .dtype , np .bool_ ):
2576
- if axis_key .shape != self .shape :
2577
- raise ValueError ("boolean key with a different shape ({}) than array ({})"
2578
- .format (axis_key .shape , self .shape ))
2579
- axis_key = LArray (axis_key , self )
2580
-
2581
- if isinstance (axis_key , LArray ) and np .issubdtype (axis_key .dtype , np .bool_ ):
2582
- extra_key_axes = axis_key .axes - self
2583
- if extra_key_axes :
2584
- raise ValueError ("subset key contains more axes ({}) than array ({})"
2585
- .format (axis_key .axes , self ))
2586
- nonboolkey .extend (axis_key .nonzero ())
2587
- else :
2588
- nonboolkey .append (axis_key )
2589
- key = tuple (nonboolkey )
2590
-
2591
- # drop slice(None) and Ellipsis since they are meaningless because of guess_axis.
2592
- # XXX: we might want to raise an exception when we find Ellipses or (most) slice(None) because except for
2593
- # a single slice(None) a[:], I don't think there is any point.
2594
- key = [axis_key for axis_key in key
2595
- if not _isnoneslice (axis_key ) and axis_key is not Ellipsis ]
2558
+ # handle ExprNode
2559
+ key = tuple (axis_key .evaluate (self ) if isinstance (axis_key , ExprNode ) else axis_key
2560
+ for axis_key in key )
2561
+
2562
+ nonboolkey = []
2563
+ for axis_key in key :
2564
+ if isinstance (axis_key , np .ndarray ) and np .issubdtype (axis_key .dtype , np .bool_ ):
2565
+ if axis_key .shape != self .shape :
2566
+ raise ValueError ("boolean key with a different shape ({}) than array ({})"
2567
+ .format (axis_key .shape , self .shape ))
2568
+ axis_key = LArray (axis_key , self )
2569
+
2570
+ if isinstance (axis_key , LArray ) and np .issubdtype (axis_key .dtype , np .bool_ ):
2571
+ extra_key_axes = axis_key .axes - self
2572
+ if extra_key_axes :
2573
+ raise ValueError ("subset key contains more axes ({}) than array ({})"
2574
+ .format (axis_key .axes , self ))
2575
+ # nonzero (currently) returns a tuple of IGroups containing 1D LArrays (one IGroup per axis)
2576
+ nonboolkey .extend (axis_key .nonzero ())
2577
+ else :
2578
+ nonboolkey .append (axis_key )
2579
+ key = tuple (nonboolkey )
2596
2580
2597
- # translate all keys to IGroup
2598
- return tuple (self ._translate_axis_key (axis_key ) for axis_key in key )
2599
- else :
2600
- assert isinstance (key , dict )
2581
+ # drop slice(None) and Ellipsis since they are meaningless because of guess_axis.
2582
+ # XXX: we might want to raise an exception when we find Ellipses or (most) slice(None) because except for
2583
+ # a single slice(None) a[:], I don't think there is any point.
2584
+ key = [axis_key for axis_key in key
2585
+ if not _isnoneslice (axis_key ) and axis_key is not Ellipsis ]
2601
2586
2602
- # key axes could be strings or axis references and we want real axes
2603
- return tuple (self ._translate_axis_key (self [axis ][axis_key ])
2604
- for axis , axis_key in key .items ())
2587
+ # translate all keys to IGroup
2588
+ return tuple (self ._translate_axis_key (axis_key ) for axis_key in key )
2605
2589
2606
2590
def _translated_key (self , key ):
2607
2591
"""
0 commit comments