1
from __future__ import division
6
from dosage import util
9
def __init__(self, weight):
14
def feed(self, value):
15
self.guess = self.weight * value + (1 - self.weight) * self.guess
17
def distance(self, value):
18
return (self.guess - value) ** 2
20
class FortuneTeller(object):
21
weights = (0.2, 0.3, 0.4)
24
self.guesses = map(Guess, self.weights)
26
def feed(self, value):
27
best = min([(guess.distance(value), guess) for guess in self.guesses])[1]
29
for guess in self.guesses:
33
return max([(guess.best, guess) for guess in self.guesses])[1].guess
35
class OperationComplete(Exception): pass
37
def drawBar(fill, total, caption):
38
screenWidth = util.getWindowSize()
40
mask = '[%%s>%%s] (%.2f%%%%) %s' % (ratio * 100, caption)
42
barWidth = screenWidth - len(mask) + 6
43
fillWidth = int(barWidth * ratio) - 1
44
emptyWidth = barWidth - fillWidth - 1
46
sys.stdout.write('\r')
47
sys.stdout.write(mask % ('=' * fillWidth, '-' * emptyWidth))
50
def drawBounceBar(pos, caption):
51
screenWidth = util.getWindowSize()
52
mask = '[%%s<=>%%s] %s' % (caption,)
54
barWidth = screenWidth - len(mask) + 4
55
leftWidth = pos % barWidth - 1
56
rightWidth = barWidth - leftWidth - 1
58
sys.stdout.write('\r')
59
sys.stdout.write(mask % (' ' * leftWidth, ' ' * rightWidth))
66
currentTime = lastTime = time.time()
70
while currentTime - lastTime < 0.2:
71
progress, total = fn()
73
currentTime = time.time()
75
ft.feed(inc / (currentTime - lastTime))
76
lastTime = currentTime
82
drawBounceBar(count, '%s/sec' % util.saneDataSize(bps))
85
drawBar(completed, max(total, completed), '%s/sec' % util.saneDataSize(bps))
86
except OperationComplete:
88
drawBounceBar(count, '%s/sec' % util.saneDataSize(bps))
90
drawBar(max(total, completed), max(total, completed), '%s/sec' % util.saneDataSize(bps))