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: Compute inputs for the given term.
  
  This is mostly complicated by the fact that for each input we store as
  many rows as will be necessary to serve **any** computation requiring
  that input.
docstr_tok: ["Compute","inputs","for","the","given","term",".","This","is","mostly","complicated","by","the","fact","that","for","each","input","we","store","as","many","rows","as","will","be","necessary","to","serve","*","*","any","*","*","computation","requiring","that","input","."]
code: def _inputs_for_term(term, workspace, graph, domain, refcounts):
      """
      Compute inputs for the given term.
  
      This is mostly complicated by the fact that for each input we store as
      many rows as will be necessary to serve **any** computation requiring
      that input.
      """
      offsets = graph.offset
      out = []
  
      # We need to specialize here because we don't change ComputableTerm
      # after resolving domains, so they can still contain generic terms as
      # inputs.
      specialized = [maybe_specialize(t, domain) for t in term.inputs]
  
      if term.windowed:
          # If term is windowed, then all input data should be instances of
          # AdjustedArray.
          for input_ in specialized:
              adjusted_array = ensure_adjusted_array(
                  workspace[input_],
                  input_.missing_value,
              )
              out.append(
                  adjusted_array.traverse(
                      window_length=term.window_length,
                      offset=offsets[term, input_],
                      # If the refcount for the input is > 1, we will need
                      # to traverse this array again so we must copy.
                      # If the refcount for the input == 0, this is the last
                      # traversal that will happen so we can invalidate
                      # the AdjustedArray and mutate the data in place.
                      copy=refcounts[input_] > 1,
                  )
              )
      else:
          # If term is not windowed, input_data may be an AdjustedArray or
          # np.ndarray. Coerce the former to the latter.
          for input_ in specialized:
              input_data = ensure_ndarray(workspace[input_])
              offset = offsets[term, input_]
              input_data = input_data[offset:]
              if refcounts[input_] > 1:
                  input_data = input_data.copy()
              out.append(input_data)
      return out
  
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 6 for calling the SimplePipelineEngine obj's underlying member method code with example usage: obj._inputs_for_term(term, workspace, graph, domain, refcounts) and returns: out