class_docstr: A Filter representing assets falling between percentile bounds of a Factor.
  
  Parameters
  ----------
  factor : catalyst.pipeline.factor.Factor
      The factor over which to compute percentile bounds.
  min_percentile : float [0.0, 1.0]
      The minimum percentile rank of an asset that will pass the filter.
  max_percentile : float [0.0, 1.0]
      The maxiumum percentile rank of an asset that will pass the filter.
class_docstr_tok: ["A","Filter","representing","assets","falling","between","percentile","bounds","of","a","Factor",".","Parameters","--","--","--","--","--","factor",":","catalyst.pipeline.factor.Factor","The","factor","over","which","to","compute","percentile","bounds",".","min_percentile",":","float","[","0.0",",","1.0","]","The","minimum","percentile","rank","of","an","asset","that","will","pass","the","filter",".","max_percentile",":","float","[","0.0",",","1.0","]","The","maxiumum","percentile","rank","of","an","asset","that","will","pass","the","filter","."]
docstr: For each row in the input, compute a mask of all values falling between
  the given percentiles.
docstr_tok: ["For","each","row","in","the","input",",","compute","a","mask","of","all","values","falling","between","the","given","percentiles","."]
code: def _compute(self, arrays, dates, assets, mask):
      """
      For each row in the input, compute a mask of all values falling between
      the given percentiles.
      """
      # TODO: Review whether there's a better way of handling small numbers
      # of columns.
      data = arrays[0].copy().astype(float64)
      data[~mask] = nan
  
      # FIXME: np.nanpercentile **should** support computing multiple bounds
      # at once, but there's a bug in the logic for multiple bounds in numpy
      # 1.9.2.  It will be fixed in 1.10.
      # c.f. https://github.com/numpy/numpy/pull/5981
      lower_bounds = nanpercentile(
          data,
          self._min_percentile,
          axis=1,
          keepdims=True,
      )
      upper_bounds = nanpercentile(
          data,
          self._max_percentile,
          axis=1,
          keepdims=True,
      )
      return (lower_bounds <= data) & (data <= upper_bounds)
  
imports: from itertools import chain
  from operator import attrgetter
  from numpy import float64, nan, nanpercentile
  from catalyst.errors import BadPercentileBounds, NonExistentAssetInTimeFrame, UnsupportedDataType
  from catalyst.lib.labelarray import LabelArray
  from catalyst.lib.rank import is_missing
  from catalyst.pipeline.expression import BadBinaryOperator, FILTER_BINOPS, method_name_for_op, NumericalExpression
  from catalyst.pipeline.mixins import AliasedMixin, CustomTermMixin, DownsampledMixin, LatestMixin, PositiveWindowLengthMixin, RestrictedDTypeMixin, SingleInputMixin
  from catalyst.pipeline.term import ComputableTerm, Term
  from catalyst.utils.input_validation import expect_types
  from catalyst.utils.memoize import classlazyval
  from catalyst.utils.numpy_utils import bool_dtype, repeat_first_axis
label_desc: Use image node_id 5 for calling the PercentileFilter obj's underlying member method code with example usage: obj._compute(arrays, dates, assets, mask) and returns: unknown