From 9313077152887eda998981e0cbc22dc624a8a719 Mon Sep 17 00:00:00 2001 From: Eddie Hebert Date: Tue, 22 Jan 2013 20:21:15 -0500 Subject: [PATCH] Creates a container object for averages in mavg window. Moving another data type off of ndict on the path to making it easier to discern between types when --- zipline/transforms/mavg.py | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/zipline/transforms/mavg.py b/zipline/transforms/mavg.py index 2a35e968..d5045988 100644 --- a/zipline/transforms/mavg.py +++ b/zipline/transforms/mavg.py @@ -16,7 +16,6 @@ from numbers import Number from collections import defaultdict -from zipline import ndict from zipline.transforms.utils import EventWindow, TransformMeta @@ -77,6 +76,18 @@ class MovingAverage(object): return window.get_averages() +class Averages(object): + """ + Container for averages. + """ + + def __getitem__(self, name): + """ + Allow dictionary lookup. + """ + return self.__dict__[name] + + class MovingAverageEventWindow(EventWindow): """ Iteratively calculates moving averages for a particular sid over a @@ -97,6 +108,9 @@ class MovingAverageEventWindow(EventWindow): # fields. self.fields = fields self.totals = defaultdict(float) + # Container for averages + # So that we don't create a new object on each event. + self.averages_container = Averages() # Subclass customization for adding new events. def handle_add(self, event): @@ -131,9 +145,9 @@ class MovingAverageEventWindow(EventWindow): """ Return an ndict of all our tracked averages. """ - out = ndict() + out = self.averages_container for field in self.fields: - out[field] = self.average(field) + out.__dict__[field] = self.average(field) return out def assert_required_fields(self, event):