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: Ensure that our percentile bounds are well-formed.
docstr_tok: ["Ensure","that","our","percentile","bounds","are","well-formed","."]
code: def _validate(self):
      """
      Ensure that our percentile bounds are well-formed.
      """
      if (
          not 0.0
          <= self._min_percentile
          < self._max_percentile
          <= 100.0
      ):
          raise BadPercentileBounds(
              min_percentile=self._min_percentile,
              max_percentile=self._max_percentile,
              upper_bound=100.0,
          )
      return super(PercentileFilter, self)._validate()
  
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 4 for calling the PercentileFilter obj's underlying member method code with example usage: obj._validate() and returns: super