https://github.com/kuk/log-progress
https://habr.com/ru/post/276725/
https://github.com/kuk/log-progress
jupyter logging widget
Last synced: 11 months ago
JSON representation
https://habr.com/ru/post/276725/
- Host: GitHub
- URL: https://github.com/kuk/log-progress
- Owner: kuk
- License: mit
- Archived: true
- Created: 2016-02-07T15:56:41.000Z (over 10 years ago)
- Default Branch: master
- Last Pushed: 2020-06-14T13:53:02.000Z (about 6 years ago)
- Last Synced: 2024-08-07T23:15:12.698Z (almost 2 years ago)
- Topics: jupyter, logging, widget
- Language: Jupyter Notebook
- Homepage:
- Size: 8.79 KB
- Stars: 564
- Watchers: 24
- Forks: 60
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
> # `log-progress` functionality was integrated into `tqdm`. Please, use `from tqdm.notebook import tqdm as log_progress`.
## Widget based progress bar for Jupyter (IPython Notebook)
### Code
Just copy and paste it into your project:
```python
def log_progress(sequence, every=None, size=None, name='Items'):
from ipywidgets import IntProgress, HTML, VBox
from IPython.display import display
is_iterator = False
if size is None:
try:
size = len(sequence)
except TypeError:
is_iterator = True
if size is not None:
if every is None:
if size <= 200:
every = 1
else:
every = int(size / 200) # every 0.5%
else:
assert every is not None, 'sequence is iterator, set every'
if is_iterator:
progress = IntProgress(min=0, max=1, value=1)
progress.bar_style = 'info'
else:
progress = IntProgress(min=0, max=size, value=0)
label = HTML()
box = VBox(children=[label, progress])
display(box)
index = 0
try:
for index, record in enumerate(sequence, 1):
if index == 1 or index % every == 0:
if is_iterator:
label.value = '{name}: {index} / ?'.format(
name=name,
index=index
)
else:
progress.value = index
label.value = u'{name}: {index} / {size}'.format(
name=name,
index=index,
size=size
)
yield record
except:
progress.bar_style = 'danger'
raise
else:
progress.bar_style = 'success'
progress.value = index
label.value = "{name}: {index}".format(
name=name,
index=str(index or '?')
)
```
### Examples
Progress bar changes its color based on outcome:


Iterators are supported:

More then one progress bar can be in a sigle cell:


They can even be from different threads:
