'A dict mapping `term` -> `# of extra rows to load/compute of `term`.
Notes
This value depends on the other terms in the graph that require `term`
**as an input**.  This is not to be confused with `term.dependencies`,
which describes how many additional rows of `term`\'s inputs we need to
load, and which is determined entirely by `Term` itself.
Examples
Our graph contains the following terms:
A = SimpleMovingAverage([USEquityPricing.high], window_length=5)
B = SimpleMovingAverage([USEquityPricing.high], window_length=10)
C = SimpleMovingAverage([USEquityPricing.low], window_length=8)
To compute N rows of A, we need N + 4 extra rows of `high`.
To compute N rows of B, we need N + 9 extra rows of `high`.
To compute N rows of C, we need N + 7 extra rows of `low`.
We store the following extra_row requirements:
self.extra_rows[high] = 9  # Ensures that we can service B.
self.extra_rows[low] = 7
See Also
zipline.pipeline.graph.TermGraph.offset
zipline.pipeline.term.Term.dependencies'

@lazyval
def extra_rows(self):

    return {term: attrs['extra_rows'] for (term, attrs) in iteritems(self.graph.node)}
