Source code for pyphi.parallel.backends.progress
# parallel/backends/progress.py
"""Progress tracking for parallel computation."""
from __future__ import annotations
from tqdm.auto import tqdm
[docs]
class LocalProgressBar:
"""Simple progress bar wrapper around tqdm.
Provides a consistent interface for progress tracking that works
in both terminal and Jupyter notebook environments.
"""
def __init__(self, total: int | None = None, desc: str = ""):
"""Initialize the progress bar.
Parameters
----------
total : int or None
Total number of items to process, or ``None`` when unknown.
desc : str
Description shown as a label on the progress bar.
"""
# miniters=1 ensures every update is displayed (no skipping)
# mininterval=0 allows immediate refresh
self._bar: tqdm | None = tqdm(total=total, desc=desc, miniters=1, mininterval=0)
self._closed = False
[docs]
def update(self, n: int = 1) -> None:
"""Advance the bar by ``n`` items.
Parameters
----------
n : int
Number of items completed since the last update.
"""
if not self._closed and self._bar is not None:
self._bar.update(n)
self._bar.refresh() # Force immediate display update
[docs]
def close(self) -> None:
"""Close the progress bar."""
if self._closed:
return
self._closed = True
if self._bar is not None:
self._bar.close()
def __enter__(self) -> LocalProgressBar:
"""Context manager entry."""
return self
def __exit__(self, *args) -> None:
"""Context manager exit."""
self.close()