class_docstr: A filter applying a function from (ndarray, *args) -> ndarray[bool].
  
  Parameters
  ----------
  term : catalyst.pipeline.Term
      Term producing the array over which the predicate will be computed.
  op : function(ndarray, *args) -> ndarray[bool]
      Function to apply to the result of `term`.
  opargs : tuple[hashable]
      Additional argument to apply to ``op``.
class_docstr_tok: ["A","filter","applying","a","function","from","(","ndarray",",","*","args",")","-",">","ndarray","[","bool","]",".","Parameters","--","--","--","--","--","term",":","catalyst.pipeline.Term","Term","producing","the","array","over","which","the","predicate","will","be","computed",".","op",":","function","(","ndarray",",","*","args",")","-",">","ndarray","[","bool","]","Function","to","apply","to","the","result","of","`","term","`",".","opargs",":","tuple","[","hashable","]","Additional","argument","to","apply","to","``","op","``","."]
code: def __new__(cls, term, op, opargs):
      hash(opargs)  # fail fast if opargs isn't hashable.
      return super(ArrayPredicate, cls).__new__(
          ArrayPredicate,
          op=op,
          opargs=opargs,
          inputs=(term,),
          mask=term.mask,
      )
  
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 1 for calling the ArrayPredicate obj's underlying member method code with example usage: obj.__new__(cls, term, op, opargs) and returns: super