Source code for pyNN.utility.progress_bar
"""
Classes for showing progress bars in the shell during simulations.
:copyright: Copyright 2006-2024 by the PyNN team, see AUTHORS.
:license: CeCILL, see LICENSE for details.
"""
import sys
[docs]
class ProgressBar(object):
"""
Create a progress bar in the shell.
"""
def __init__(self, width=77, char="#", mode="fixed"):
self.char = char
self.mode = mode
if self.mode not in ['fixed', 'dynamic']:
self.mode = 'fixed'
self.width = width
[docs]
def set_level(self, level):
"""
Rebuild the bar string based on `level`, which should be a number
between 0 and 1.
"""
if level < 0:
level = 0
if level > 1:
level = 1
# figure the proper number of 'character' make up the bar
all_full = self.width - 2
num_hashes = int(round(level * all_full))
if self.mode == 'dynamic':
# build a progress bar with self.char (to create a dynamic bar
# where the percent string moves along with the bar progress.
bar = self.char * num_hashes
else:
# build a progress bar with self.char and spaces (to create a
# fixed bar (the percent string doesn't move)
bar = self.char * num_hashes + ' ' * (all_full - num_hashes)
bar = u'[ %s ] %3.0f%%' % (bar, 100 * level)
print(bar, end=u' \r')
sys.stdout.flush()
def __call__(self, level):
self.set_level(level)
class SimulationProgressBar(ProgressBar):
def __init__(self, interval, t_stop, char="#", mode="fixed"):
super().__init__(width=int(t_stop / interval), char=char, mode=mode)
self.interval = interval
self.t_stop = t_stop
def __call__(self, t):
self.set_level(t / self.t_stop)
return t + self.interval