class_docstr: A Term that should be computed from a tuple of inputs.
  
  This is the base class for :class:`zipline.pipeline.Factor`,
  :class:`zipline.pipeline.Filter`, and :class:`zipline.pipeline.Classifier`.
class_docstr_tok: ["A","Term","that","should","be","computed","from","a","tuple","of","inputs",".","This","is","the","base","class","for",":","class",":","`","zipline.pipeline.Factor","`",",",":","class",":","`","zipline.pipeline.Filter","`",",","and",":","class",":","`","zipline.pipeline.Classifier","`","."]
docstr: Return the "principal" type for a ComputableTerm.
  
  This returns either Filter, Factor, or Classifier, depending on the
  type of ``cls``. It is used to implement behaviors like ``downsample``
  and ``if_then_else`` that are implemented on all ComputableTerms, but
  that need to produce different output types depending on the type of
  the receiver.
docstr_tok: ["Return","the","``","principal","''","type","for","a","ComputableTerm",".","This","returns","either","Filter",",","Factor",",","or","Classifier",",","depending","on","the","type","of","``","cls","``",".","It","is","used","to","implement","behaviors","like","``","downsample","``","and","``","if_then_else","``","that","are","implemented","on","all","ComputableTerms",",","but","that","need","to","produce","different","output","types","depending","on","the","type","of","the","receiver","."]
code: def _principal_computable_term_type(cls):
      """
      Return the "principal" type for a ComputableTerm.
  
      This returns either Filter, Factor, or Classifier, depending on the
      type of ``cls``. It is used to implement behaviors like ``downsample``
      and ``if_then_else`` that are implemented on all ComputableTerms, but
      that need to produce different output types depending on the type of
      the receiver.
      """
      raise NotImplementedError("_principal_computable_term_type")
  
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 6 for calling the ComputableTerm obj's underlying member method code with example usage: obj._principal_computable_term_type(cls) without return types