'input (df):
asof_date  timestamp  sid  other  value
0 2013-12-22 2013-12-22   65      0      0
1 2013-12-22 2013-12-22   66    NaN      1
2 2013-12-22 2013-12-22   67      2    NaN
3 2013-12-23 2013-12-23   65    NaN      1
4 2013-12-23 2013-12-23   66      2    NaN
5 2013-12-23 2013-12-23   67      3      3
6 2013-12-24 2013-12-24   65      2    NaN
7 2013-12-24 2013-12-24   66      3      3
8 2013-12-24 2013-12-24   67    NaN      4
output (expected):
other  value
2014-01-01 Equity(65 [A])      2      1
Equity(66 [B])      3      3
Equity(67 [C])      3      4
2014-01-02 Equity(65 [A])      2      1
Equity(66 [B])      3      3
Equity(67 [C])      3      4
2014-01-03 Equity(65 [A])      2      1
Equity(66 [B])      3      3
Equity(67 [C])      3      4'

def test_id_ffill_out_of_window(self):

    dates = (self.dates.repeat(3) - timedelta(days=10))
    df = pd.DataFrame({'sid': (self.ASSET_FINDER_EQUITY_SIDS * 3), 'value': (0, 1, np.nan, 1, np.nan, 3, np.nan, 3, 4), 'other': (0, np.nan, 2, np.nan, 2, 3, 2, 3, np.nan), 'asof_date': dates, 'timestamp': dates})
    fields = OrderedDict(self.dshape.measure.fields)
    fields['other'] = fields['value']
    expected = pd.DataFrame(np.array([[2, 1], [3, 3], [3, 4], [2, 1], [3, 3], [3, 4], [2, 1], [3, 3], [3, 4]]), columns=['other', 'value'], index=pd.MultiIndex.from_product((self.dates, self.asset_finder.retrieve_all(self.ASSET_FINDER_EQUITY_SIDS))))
    self._test_id(df, (var * Record(fields)), expected, self.asset_finder, ('value', 'other'))
