docs: def filter(self, func):
          """
          Filter array along an axis.
  
          Applies a function which should evaluate to boolean,
          along a single axis or multiple axes. Array will be
          aligned so that the desired set of axes are in the
          keys, which may require a transpose/reshape.
  
          Parameters
          ----------
          func : function
              Function to apply, should return boolean
          """
  
          if self.mode == 'local':
              reshaped = self._align(self.baseaxes)
              filtered = asarray(list(filter(func, reshaped)))
  
              if self.labels is not None:
                  mask = asarray(list(map(func, reshaped)))
  
          if self.mode == 'spark':
  
              sort = False if self.labels is None else True
              filtered = self.values.filter(func, axis=self.baseaxes, sort=sort)
  
              if self.labels is not None:
                  keys, vals = zip(*self.values.map(func, axis=self.baseaxes, value_shape=(1,)).tordd().collect())
                  perm = sorted(range(len(keys)), key=keys.__getitem__)
                  mask = asarray(vals)[perm]
  
          if self.labels is not None:
              s1 = prod(self.baseshape)
              newlabels = self.labels.reshape(s1, 1)[mask].squeeze()
          else:
              newlabels = None
  
          return self._constructor(filtered, labels=newlabels).__finalize__(self, noprop=('labels',))