@@ -841,17 +841,33 @@ def __getitem__( # noqa: C901
841841 assert isinstance (stop , int )
842842 slices .append (_core .algorithm .slice_and_rebin (i , start , stop , merge ))
843843
844- if slices :
845- logger .debug ("Reduce with %s" , slices )
846- reduced = self ._hist .reduce (* slices )
847- elif pick_set or pick_each or integrations :
848- # Can avoid a copy in these cases, will be copied anyway
849- logger .debug ("Reduce is empty, but picking or slicing, so no copy needed" )
844+ # Will be updated below
845+ if slices or pick_set or pick_each or integrations :
850846 reduced = self ._hist
851847 else :
852- logger .debug ("Reduce is empty, just making a copy" )
848+ logger .debug ("Reduce actions are all empty, just making a copy" )
853849 reduced = copy .copy (self ._hist )
854850
851+ if pick_each :
852+ tuple_slice = tuple (
853+ pick_each .get (i , slice (None )) for i in range (reduced .rank ())
854+ )
855+ logger .debug ("Slices for pick each: %s" , tuple_slice )
856+ axes = [
857+ reduced .axis (i ) for i in range (reduced .rank ()) if i not in pick_each
858+ ]
859+ logger .debug ("Axes: %s" , axes )
860+ new_reduced = reduced .__class__ (axes )
861+ new_reduced .view (flow = True )[...] = reduced .view (flow = True )[tuple_slice ]
862+ reduced = new_reduced
863+ integrations = {i - sum (j <= i for j in pick_each ) for i in integrations }
864+ for slice_ in slices :
865+ slice_ .iaxis -= sum (j <= slice_ .iaxis for j in pick_each )
866+
867+ if slices :
868+ logger .debug ("Reduce with %s" , slices )
869+ reduced = reduced .reduce (* slices )
870+
855871 if pick_set :
856872 warnings .warn (
857873 "List indexing selection is experimental. Removed bins are not placed in overflow."
@@ -880,20 +896,6 @@ def __getitem__( # noqa: C901
880896 new_reduced .view (flow = True )[...] = reduced_view
881897 reduced = new_reduced
882898
883- if pick_each :
884- tuple_slice = tuple (
885- pick_each .get (i , slice (None )) for i in range (reduced .rank ())
886- )
887- logger .debug ("Slices for pick each: %s" , tuple_slice )
888- axes = [
889- reduced .axis (i ) for i in range (reduced .rank ()) if i not in pick_each
890- ]
891- logger .debug ("Axes: %s" , axes )
892- new_reduced = reduced .__class__ (axes )
893- new_reduced .view (flow = True )[...] = reduced .view (flow = True )[tuple_slice ]
894- reduced = new_reduced
895- integrations = {i - sum (j <= i for j in pick_each ) for i in integrations }
896-
897899 if integrations :
898900 projections = [i for i in range (reduced .rank ()) if i not in integrations ]
899901 reduced = reduced .project (* projections )
0 commit comments