class_docstr: PipelineEngine class that computes each term independently.
  
  Parameters
  ----------
  get_loader : callable
      A function that is given a loadable term and returns a PipelineLoader
      to use to retrieve raw data for that term.
  asset_finder : zipline.assets.AssetFinder
      An AssetFinder instance.  We depend on the AssetFinder to determine
      which assets are in the top-level universe at any point in time.
  populate_initial_workspace : callable, optional
      A function which will be used to populate the initial workspace when
      computing a pipeline. See
      :func:`zipline.pipeline.engine.default_populate_initial_workspace`
      for more info.
  default_hooks : list, optional
      List of hooks that should be used to instrument all pipelines executed
      by this engine.
  
  See Also
  --------
  :func:`zipline.pipeline.engine.default_populate_initial_workspace`
class_docstr_tok: ["PipelineEngine","class","that","computes","each","term","independently",".","Parameters","--","--","--","--","--","get_loader",":","callable","A","function","that","is","given","a","loadable","term","and","returns","a","PipelineLoader","to","use","to","retrieve","raw","data","for","that","term",".","asset_finder",":","zipline.assets.AssetFinder","An","AssetFinder","instance",".","We","depend","on","the","AssetFinder","to","determine","which","assets","are","in","the","top-level","universe","at","any","point","in","time",".","populate_initial_workspace",":","callable",",","optional","A","function","which","will","be","used","to","populate","the","initial","workspace","when","computing","a","pipeline",".","See",":","func",":","`","zipline.pipeline.engine.default_populate_initial_workspace","`","for","more","info",".","default_hooks",":","list",",","optional","List","of","hooks","that","should","be","used","to","instrument","all","pipelines","executed","by","this","engine",".","See","Also","--","--","--","--",":","func",":","`","zipline.pipeline.engine.default_populate_initial_workspace","`"]
docstr: Shared core for ``run_pipeline`` and ``run_chunked_pipeline``.
          
docstr_tok: ["Shared","core","for","``","run_pipeline","``","and","``","run_chunked_pipeline","``","."]
code: def _run_pipeline_impl(self, pipeline, start_date, end_date, hooks):
      """Shared core for ``run_pipeline`` and ``run_chunked_pipeline``."""
      # See notes at the top of this module for a description of the
      # algorithm implemented here.
      if end_date < start_date:
          raise ValueError(
              "start_date must be before or equal to end_date \n"
              "start_date=%s, end_date=%s" % (start_date, end_date)
          )
  
      domain = self.resolve_domain(pipeline)
  
      plan = pipeline.to_execution_plan(
          domain,
          self._root_mask_term,
          start_date,
          end_date,
      )
      extra_rows = plan.extra_rows[self._root_mask_term]
      root_mask = self._compute_root_mask(
          domain,
          start_date,
          end_date,
          extra_rows,
      )
      dates, sids, root_mask_values = explode(root_mask)
  
      workspace = self._populate_initial_workspace(
          {
              self._root_mask_term: root_mask_values,
              self._root_mask_dates_term: as_column(dates.values),
          },
          self._root_mask_term,
          plan,
          dates,
          sids,
      )
  
      refcounts = plan.initial_refcounts(workspace)
      execution_order = plan.execution_order(workspace, refcounts)
  
      with hooks.computing_chunk(execution_order, start_date, end_date):
          results = self.compute_chunk(
              graph=plan,
              dates=dates,
              sids=sids,
              workspace=workspace,
              refcounts=refcounts,
              execution_order=execution_order,
              hooks=hooks,
          )
  
      return self._to_narrow(
          plan.outputs,
          results,
          results.pop(plan.screen_name),
          dates[extra_rows:],
          sids,
      )
  
imports: from abc import ABCMeta, abstractmethod
  from functools import partial
  from six import iteritems, with_metaclass, viewkeys
  from numpy import array, arange
  from pandas import DataFrame, MultiIndex
  from toolz import groupby
  from zipline.lib.adjusted_array import ensure_adjusted_array, ensure_ndarray
  from zipline.errors import NoFurtherDataError
  from zipline.utils.input_validation import expect_types
  from zipline.utils.numpy_utils import as_column, repeat_first_axis, repeat_last_axis
  from zipline.utils.pandas_utils import explode
  from zipline.utils.string_formatting import bulleted_list
  from .domain import Domain, GENERIC
  from .graph import maybe_specialize
  from .hooks import DelegatingHooks
  from .term import AssetExists, InputDates, LoadableTerm
  from zipline.utils.date_utils import compute_date_range_chunks
  from zipline.utils.pandas_utils import categorical_df_concat
label_desc: Use image node_id 4 for calling the SimplePipelineEngine obj's underlying member method code with example usage: obj._run_pipeline_impl(pipeline, start_date, end_date, hooks) and returns: self