from IPython.display import HTML
from IPython import get_ipython
[docs]
def progress_bar_terminal(iteration, total, prefix="", suffix="", decimals=0, length=100, fill="█", printend="\r"):
"""Call in a loop to create terminal progress bar.
Parameters
----------
iteration: int
current iteration
total: int
total iterations
prefix: str
prefix string
suffix: str
suffix string
decimals: int
positive number of decimals in percent complete
length: int
character length of bar
fill: str
bar fill character
printend: str
end character (e.g. "\r", "\r\n")
"""
percent = ("{0:." + str(decimals) + "f}").format(100 * (iteration / float(total)))
filledlength = int(length * iteration // total)
bar = fill * filledlength + "-" * (length - filledlength)
print("\r%s |%s| %s%% %s" % (prefix, bar, percent, suffix), end=printend)
# Print New Line on Complete
if iteration == total:
print()
[docs]
def progress_bar_notebook(iteration, total=100):
"""Progress bar for notebooks.
Parameters
----------
iteration: int
current iteration
total: int
total iterations
Returns
-------
Progress bar for notebooks
"""
result = int((iteration / total) * 100)
return HTML(
"""
<p>
Progress: {result}% Complete
<p/>
<progress
value='{value}'
max='{max_value}',
style='width: 25%',
>
{value}
</progress>
""".format(
value=iteration, max_value=total, result=result
)
)
[docs]
def display_progress_bar(iteration, total, out):
"""Displays progress bar according to python interface.
Parameters
----------
iteration: int
current iteration
total: int
total iterations
out: progress bar notebook output
"""
if (
(get_ipython().__class__.__name__ == "ZMQInteractiveShell")
or (get_ipython().__class__.__name__ == "Shell")
and out is not None
):
out.update(progress_bar_notebook(iteration + 1, total))
else:
progress_bar_terminal(iteration + 1, total, prefix="Progress:", suffix="Complete", length=50)
return