From 414e12ecc99885ff41ab54fed91d0336b7c1ac65 Mon Sep 17 00:00:00 2001 From: Eddie Hebert Date: Thu, 28 Feb 2013 22:19:31 -0500 Subject: [PATCH] BUG: Fixes error due to floating point rounding in stddev calc. Adds a check to see if the s_squared value is near 0. When the number was very near 0, a very small negative floating point, the sqrt throws a 'math domain error', this prevents that case. --- zipline/transforms/stddev.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/zipline/transforms/stddev.py b/zipline/transforms/stddev.py index aeaf8c40..49648392 100644 --- a/zipline/transforms/stddev.py +++ b/zipline/transforms/stddev.py @@ -17,6 +17,8 @@ from numbers import Number from collections import defaultdict from math import sqrt +import numpy as np + from zipline.transforms.utils import EventWindow, TransformMeta @@ -109,5 +111,8 @@ class MovingStandardDevWindow(EventWindow): average = self.sum / len(self) s_squared = (self.sum_sqr - self.sum * average) \ / (len(self) - 1) + + if np.allclose(0, s_squared): + return 0.0 stddev = sqrt(s_squared) return stddev