From 08fb7333d694086bdc07b77a991305df262cb508 Mon Sep 17 00:00:00 2001 From: Eddie Hebert Date: Fri, 11 Nov 2016 10:14:17 -0500 Subject: [PATCH] PERF: Speed up retrieval of HistoryLoader calendar. The use of `slice_indexer` on all market minutes was taking about 110ms on my development machine. This change to getting the start and end indices changes the entire `_calendar` method to take 10ms on the same machine. Noticed while creating a `HistoryLoader` in a notebook context. --- zipline/data/history_loader.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/zipline/data/history_loader.py b/zipline/data/history_loader.py index 61fd0a38..ccea65ec 100644 --- a/zipline/data/history_loader.py +++ b/zipline/data/history_loader.py @@ -573,8 +573,9 @@ class MinuteHistoryLoader(HistoryLoader): @lazyval def _calendar(self): mm = self.trading_calendar.all_minutes - return mm[mm.slice_indexer(start=self._reader.first_trading_day, - end=self._reader.last_available_dt)] + start = mm.searchsorted(self._reader.first_trading_day) + end = mm.searchsorted(self._reader.last_available_dt, side='right') + return mm[start:end] def _array(self, dts, assets, field): return self._reader.load_raw_arrays(