Source code for olympus.accumulators.smoothing



[docs]class ExponentialSmoothing: """More on `Wikipedia <https://en.wikipedia.org/wiki/Exponential_smoothing>`_""" def __init__(self, alpha, value=None): assert 0 < alpha < 1, 'alpha must be between 0 and 1' self.alpha = alpha self.value = value def __iadd__(self, other): if self.value is None: self.value = other return self self.value = self.alpha * other + (1 - self.alpha) * self.value return self def __str__(self): return f'ESmooth<{self.value}>'
[docs]class MovingAverage: """More on `Wikipedia MA <https://en.wikipedia.org/wiki/Moving_average>`_""" def __init__(self, n: int): self.n = n self.values = [None] * n self.pos = 0 def __iadd__(self, other): self.values[self.pos % self.n] = other self.pos += 1 return self @property def value(self): if self.pos < self.n: return sum(self.values[:self.pos]) / self.pos return sum(self.values) / self.n def __str__(self): return f'MA<{self.value}>'