mirror of
https://github.com/verigak/progress.git
synced 2025-12-08 19:33:24 +00:00
Merge branch 'master' into pixels
This commit is contained in:
@@ -27,14 +27,13 @@ __version__ = '1.2'
|
|||||||
class Infinite(object):
|
class Infinite(object):
|
||||||
file = stderr
|
file = stderr
|
||||||
sma_window = 10 # Simple Moving Average window
|
sma_window = 10 # Simple Moving Average window
|
||||||
time_threshold = 0.1 # Minimum distance between data points (in seconds)
|
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
self.index = 0
|
self.index = 0
|
||||||
self.start_ts = time()
|
self.start_ts = time()
|
||||||
|
self.avg = 0
|
||||||
self._ts = self.start_ts
|
self._ts = self.start_ts
|
||||||
self._xput = deque(maxlen=self.sma_window)
|
self._xput = deque(maxlen=self.sma_window)
|
||||||
self._pending = 0
|
|
||||||
for key, val in kwargs.items():
|
for key, val in kwargs.items():
|
||||||
setattr(self, key, val)
|
setattr(self, key, val)
|
||||||
|
|
||||||
@@ -43,11 +42,6 @@ class Infinite(object):
|
|||||||
return None
|
return None
|
||||||
return getattr(self, key, None)
|
return getattr(self, key, None)
|
||||||
|
|
||||||
@property
|
|
||||||
def avg(self):
|
|
||||||
"""Average throughput"""
|
|
||||||
return sum(self._xput) / len(self._xput) if self._xput else 0
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def elapsed(self):
|
def elapsed(self):
|
||||||
return int(time() - self.start_ts)
|
return int(time() - self.start_ts)
|
||||||
@@ -56,6 +50,11 @@ class Infinite(object):
|
|||||||
def elapsed_td(self):
|
def elapsed_td(self):
|
||||||
return timedelta(seconds=self.elapsed)
|
return timedelta(seconds=self.elapsed)
|
||||||
|
|
||||||
|
def update_avg(self, n, dt):
|
||||||
|
if n > 0:
|
||||||
|
self._xput.append(dt / n)
|
||||||
|
self.avg = sum(self._xput) / len(self._xput)
|
||||||
|
|
||||||
def update(self):
|
def update(self):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
@@ -66,20 +65,12 @@ class Infinite(object):
|
|||||||
pass
|
pass
|
||||||
|
|
||||||
def next(self, n=1):
|
def next(self, n=1):
|
||||||
if n <= 0:
|
|
||||||
return
|
|
||||||
now = time()
|
now = time()
|
||||||
dt = now - self._ts
|
dt = now - self._ts
|
||||||
if dt < self.time_threshold:
|
self.update_avg(n, dt)
|
||||||
self._pending += n
|
self._ts = now
|
||||||
else:
|
|
||||||
# avoid performing computationally intensive update task
|
|
||||||
# more than 1/dt (10 by default) times a second
|
|
||||||
self._xput.append((self._pending + n) / dt)
|
|
||||||
self._ts = now
|
|
||||||
self._pending = 0
|
|
||||||
self.update()
|
|
||||||
self.index = self.index + n
|
self.index = self.index + n
|
||||||
|
self.update()
|
||||||
|
|
||||||
def iter(self, it):
|
def iter(self, it):
|
||||||
try:
|
try:
|
||||||
@@ -97,8 +88,7 @@ class Progress(Infinite):
|
|||||||
|
|
||||||
@property
|
@property
|
||||||
def eta(self):
|
def eta(self):
|
||||||
avg = self.avg
|
return int(ceil(self.avg * self.remaining))
|
||||||
return int(ceil(self.remaining / avg)) if avg else 0
|
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def eta_td(self):
|
def eta_td(self):
|
||||||
|
|||||||
@@ -20,13 +20,13 @@ def sleep():
|
|||||||
|
|
||||||
|
|
||||||
for bar_cls in (Bar, ChargingBar, FillingSquaresBar, FillingCirclesBar):
|
for bar_cls in (Bar, ChargingBar, FillingSquaresBar, FillingCirclesBar):
|
||||||
suffix = '%(index)d/%(max)d [%(elapsed)d / %(eta)d]'
|
suffix = '%(index)d/%(max)d [%(elapsed)d / %(eta)d / %(eta_td)s]'
|
||||||
bar = bar_cls(bar_cls.__name__, suffix=suffix)
|
bar = bar_cls(bar_cls.__name__, suffix=suffix)
|
||||||
for i in bar.iter(range(200)):
|
for i in bar.iter(range(200)):
|
||||||
sleep()
|
sleep()
|
||||||
|
|
||||||
for bar_cls in (IncrementalBar, PixelBar, ShadyBar):
|
for bar_cls in (IncrementalBar, PixelBar, ShadyBar):
|
||||||
suffix = '%(percent)d%% [%(elapsed_td)s / %(eta_td)s]'
|
suffix = '%(percent)d%% [%(elapsed_td)s / %(eta)d / %(eta_td)s]'
|
||||||
bar = bar_cls(bar_cls.__name__, suffix=suffix)
|
bar = bar_cls(bar_cls.__name__, suffix=suffix)
|
||||||
for i in bar.iter(range(200)):
|
for i in bar.iter(range(200)):
|
||||||
sleep()
|
sleep()
|
||||||
|
|||||||
Reference in New Issue
Block a user