Mercurial > templog
comparison py/utils.py @ 271:11cebd6f0bfb
untested fridge.integrator
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Wed, 11 Nov 2015 00:20:20 +0800 |
parents | 9d0313b685ae |
children | af924d27140f |
comparison
equal
deleted
inserted
replaced
270:9d0313b685ae | 271:11cebd6f0bfb |
---|---|
172 else: | 172 else: |
173 D(msg) | 173 D(msg) |
174 | 174 |
175 class StepIntegrator(object): | 175 class StepIntegrator(object): |
176 """ | 176 """ |
177 Takes on/off events and a monotonically increasing timefn. Returns the integral | |
178 of (now-limittime, now) over those events. | |
179 | |
177 >>> s = StepIntegrator(lambda: t, 40) | 180 >>> s = StepIntegrator(lambda: t, 40) |
178 >>> t = 1 | 181 >>> t = 1 |
179 >>> s.turn(1) | 182 >>> s.turn(1) |
180 >>> t = 10 | 183 >>> t = 10 |
181 >>> s.turn(0) | 184 >>> s.turn(0) |
209 def __init__(self, timefn, limittime): | 212 def __init__(self, timefn, limittime): |
210 # _on_periods is a list of [[start, end]]. End is None if still on | 213 # _on_periods is a list of [[start, end]]. End is None if still on |
211 self._on_periods = [] | 214 self._on_periods = [] |
212 self._timefn = timefn | 215 self._timefn = timefn |
213 self._limittime = limittime | 216 self._limittime = limittime |
217 | |
218 def set_limit(self, limittime): | |
219 if self._limittime == limittime: | |
220 return | |
221 self._limittime = limittime | |
222 self.trim() | |
214 | 223 |
215 def turn(self, value): | 224 def turn(self, value): |
216 if not self._on_periods: | 225 if not self._on_periods: |
217 if value: | 226 if value: |
218 self._on_periods.append([self._timefn(), None]) | 227 self._on_periods.append([self._timefn(), None]) |