class_docstr: A Pipeline object represents a collection of named expressions to be
  compiled and executed by a PipelineEngine.
  
  A Pipeline has two important attributes: 'columns', a dictionary of named
  :class:`~zipline.pipeline.Term` instances, and 'screen', a
  :class:`~zipline.pipeline.Filter` representing criteria for
  including an asset in the results of a Pipeline.
  
  To compute a pipeline in the context of a TradingAlgorithm, users must call
  ``attach_pipeline`` in their ``initialize`` function to register that the
  pipeline should be computed each trading day. The most recent outputs of an
  attached pipeline can be retrieved by calling ``pipeline_output`` from
  ``handle_data``, ``before_trading_start``, or a scheduled function.
  
  Parameters
  ----------
  columns : dict, optional
      Initial columns.
  screen : zipline.pipeline.Filter, optional
      Initial screen.
class_docstr_tok: ["A","Pipeline","object","represents","a","collection","of","named","expressions","to","be","compiled","and","executed","by","a","PipelineEngine",".","A","Pipeline","has","two","important","attributes",":","'columns","'",",","a","dictionary","of","named",":","class",":","`","~zipline.pipeline.Term","`","instances",",","and","'screen","'",",","a",":","class",":","`","~zipline.pipeline.Filter","`","representing","criteria","for","including","an","asset","in","the","results","of","a","Pipeline",".","To","compute","a","pipeline","in","the","context","of","a","TradingAlgorithm",",","users","must","call","``","attach_pipeline","``","in","their","``","initialize","``","function","to","register","that","the","pipeline","should","be","computed","each","trading","day",".","The","most","recent","outputs","of","an","attached","pipeline","can","be","retrieved","by","calling","``","pipeline_output","``","from","``","handle_data","``",",","``","before_trading_start","``",",","or","a","scheduled","function",".","Parameters","--","--","--","--","--","columns",":","dict",",","optional","Initial","columns",".","screen",":","zipline.pipeline.Filter",",","optional","Initial","screen","."]
code: def __init__(self, columns=None, screen=None, domain=GENERIC):
      if columns is None:
          columns = {}
  
      validate_column = self.validate_column
      for column_name, term in columns.items():
          validate_column(column_name, term)
          if not isinstance(term, ComputableTerm):
              raise TypeError(
                  "Column {column_name!r} contains an invalid pipeline term "
                  "({term}). Did you mean to append '.latest'?".format(
                      column_name=column_name,
                      term=term,
                  )
              )
  
      self._columns = columns
      self._screen = screen
      self._domain = domain
  
imports: import six
  from zipline.errors import UnsupportedPipelineOutput
  from zipline.utils.input_validation import expect_element, expect_types, optional
  from .domain import Domain, GENERIC, infer_domain
  from .graph import ExecutionPlan, TermGraph, SCREEN_NAME
  from .filters import Filter
  from .term import AssetExists, ComputableTerm, Term
label_desc: Use image node_id 1 to create a new Pipeline object from inherited base classes: object with example: obj = Pipeline(columns, screen, domain)