class_docstr: Base class for objects that can appear in the compute graph of a
  :class:`zipline.pipeline.Pipeline`.
  
  Notes
  -----
  Most Pipeline API users only interact with :class:`Term` via subclasses:
  
  - :class:`~zipline.pipeline.data.BoundColumn`
  - :class:`~zipline.pipeline.Factor`
  - :class:`~zipline.pipeline.Filter`
  - :class:`~zipline.pipeline.Classifier`
  
  Instances of :class:`Term` are **memoized**. If you call a Term's
  constructor with the same arguments twice, the same object will be returned
  from both calls:
  
  **Example:**
  
  >>> from zipline.pipeline.data import EquityPricing
  >>> from zipline.pipeline.factors import SimpleMovingAverage
  >>> x = SimpleMovingAverage(inputs=[EquityPricing.close], window_length=5)
  >>> y = SimpleMovingAverage(inputs=[EquityPricing.close], window_length=5)
  >>> x is y
  True
  
  .. warning::
  
     Memoization of terms means that it's generally unsafe to modify
     attributes of a term after construction.
class_docstr_tok: ["Base","class","for","objects","that","can","appear","in","the","compute","graph","of","a",":","class",":","`","zipline.pipeline.Pipeline","`",".","Notes","--","--","-","Most","Pipeline","API","users","only","interact","with",":","class",":","`","Term","`","via","subclasses",":","-",":","class",":","`","~zipline.pipeline.data.BoundColumn","`","-",":","class",":","`","~zipline.pipeline.Factor","`","-",":","class",":","`","~zipline.pipeline.Filter","`","-",":","class",":","`","~zipline.pipeline.Classifier","`","Instances","of",":","class",":","`","Term","`","are","*","*","memoized","*","*",".","If","you","call","a","Term's","constructor","with","the","same","arguments","twice",",","the","same","object","will","be","returned","from","both","calls",":","*","*","Example",":","*","*",">",">",">","from","zipline.pipeline.data","import","EquityPricing",">",">",">","from","zipline.pipeline.factors","import","SimpleMovingAverage",">",">",">","x","=","SimpleMovingAverage","(","inputs=","[","EquityPricing.close","]",",","window_length=5",")",">",">",">","y","=","SimpleMovingAverage","(","inputs=","[","EquityPricing.close","]",",","window_length=5",")",">",">",">","x","is","y","True","..","warning",":",":","Memoization","of","terms","means","that","it","'s","generally","unsafe","to","modify","attributes","of","a","term","after","construction","."]
docstr: Pop entries from the `kwargs` passed to cls.__new__ based on the values
  in `cls.params`.
  
  Parameters
  ----------
  kwargs : dict
      The kwargs passed to cls.__new__.
  
  Returns
  -------
  params : list[(str, object)]
      A list of string, value pairs containing the entries in cls.params.
  
  Raises
  ------
  TypeError
      Raised if any parameter values are not passed or not hashable.
docstr_tok: ["Pop","entries","from","the","`","kwargs","`","passed","to","cls.__new__","based","on","the","values","in","`","cls.params","`",".","Parameters","--","--","--","--","--","kwargs",":","dict","The","kwargs","passed","to","cls.__new__",".","Returns","--","--","--","-","params",":","list","[","(","str",",","object",")","]","A","list","of","string",",","value","pairs","containing","the","entries","in","cls.params",".","Raises","--","--","--","TypeError","Raised","if","any","parameter","values","are","not","passed","or","not","hashable","."]
code: def _pop_params(cls, kwargs):
      """
      Pop entries from the `kwargs` passed to cls.__new__ based on the values
      in `cls.params`.
  
      Parameters
      ----------
      kwargs : dict
          The kwargs passed to cls.__new__.
  
      Returns
      -------
      params : list[(str, object)]
          A list of string, value pairs containing the entries in cls.params.
  
      Raises
      ------
      TypeError
          Raised if any parameter values are not passed or not hashable.
      """
      params = cls.params
      if not isinstance(params, Mapping):
          params = {k: NotSpecified for k in params}
      param_values = []
      for key, default_value in params.items():
          try:
              value = kwargs.pop(key, default_value)
              if value is NotSpecified:
                  raise KeyError(key)
  
              # Check here that the value is hashable so that we fail here
              # instead of trying to hash the param values tuple later.
              hash(value)
          except KeyError:
              raise TypeError(
                  "{typename} expected a keyword parameter {name!r}.".format(
                      typename=cls.__name__, name=key
                  )
              )
          except TypeError:
              # Value wasn't hashable.
              raise TypeError(
                  "{typename} expected a hashable value for parameter "
                  "{name!r}, but got {value!r} instead.".format(
                      typename=cls.__name__,
                      name=key,
                      value=value,
                  )
              )
  
          param_values.append((key, value))
      return tuple(param_values)
  
imports: from abc import ABCMeta, abstractproperty, abstractmethod
  from bisect import insort
  from collections import Mapping
  from weakref import WeakValueDictionary
  from numpy import array, dtype, ndarray
  from six import with_metaclass
  from zipline.assets import Asset
  from zipline.errors import DTypeNotSpecified, InvalidOutputName, NonSliceableTerm, NonWindowSafeInput, NotDType, NonPipelineInputs, TermInputsNotSpecified, TermOutputsEmpty, UnsupportedDType, WindowLengthNotSpecified
  from zipline.lib.adjusted_array import can_represent_dtype
  from zipline.lib.labelarray import LabelArray
  from zipline.utils.input_validation import expect_types
  from zipline.utils.memoize import classlazyval, lazyval
  from zipline.utils.numpy_utils import bool_dtype, categorical_dtype, datetime64ns_dtype, default_missing_value_for_dtype, float64_dtype
  from zipline.utils.sharedoc import templated_docstring, PIPELINE_ALIAS_NAME_DOC, PIPELINE_DOWNSAMPLING_FREQUENCY_DOC
  from .domain import Domain, GENERIC, infer_domain
  from .downsample_helpers import expect_downsample_frequency
  from .sentinels import NotSpecified
label_desc: Use image node_id 2 for calling the Term obj's underlying member method code with example usage: obj._pop_params(cls, kwargs) and returns: tuple