Old engine for Continuous Time Bayesian Networks. Superseded by reCTBN. 🐍
https://github.com/madlabunimib/PyCTBN
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
75 lines
2.1 KiB
75 lines
2.1 KiB
"""
|
|
Asynchronous progressbar decorator for iterators.
|
|
Includes a default `range` iterator printing to `stderr`.
|
|
|
|
Usage:
|
|
>>> from tqdm.asyncio import trange, tqdm
|
|
>>> async for i in trange(10):
|
|
... ...
|
|
"""
|
|
from .std import tqdm as std_tqdm
|
|
import asyncio
|
|
__author__ = {"github.com/": ["casperdcl"]}
|
|
__all__ = ['tqdm_asyncio', 'tarange', 'tqdm', 'trange']
|
|
|
|
|
|
class tqdm_asyncio(std_tqdm):
|
|
"""
|
|
Asynchronous-friendly version of tqdm (Python 3.5+).
|
|
"""
|
|
def __init__(self, iterable=None, *args, **kwargs):
|
|
super(tqdm_asyncio, self).__init__(iterable, *args, **kwargs)
|
|
self.iterable_awaitable = False
|
|
if iterable is not None:
|
|
if hasattr(iterable, "__anext__"):
|
|
self.iterable_next = iterable.__anext__
|
|
self.iterable_awaitable = True
|
|
elif hasattr(iterable, "__next__"):
|
|
self.iterable_next = iterable.__next__
|
|
else:
|
|
self.iterable_iterator = iter(iterable)
|
|
self.iterable_next = self.iterable_iterator.__next__
|
|
|
|
def __aiter__(self):
|
|
return self
|
|
|
|
async def __anext__(self):
|
|
try:
|
|
if self.iterable_awaitable:
|
|
res = await self.iterable_next()
|
|
else:
|
|
res = self.iterable_next()
|
|
self.update()
|
|
return res
|
|
except StopIteration:
|
|
self.close()
|
|
raise StopAsyncIteration
|
|
except:
|
|
self.close()
|
|
raise
|
|
|
|
def send(self, *args, **kwargs):
|
|
return self.iterable.send(*args, **kwargs)
|
|
|
|
@classmethod
|
|
def as_completed(cls, fs, *, loop=None, timeout=None, total=None,
|
|
**tqdm_kwargs):
|
|
"""
|
|
Wrapper for `asyncio.as_completed`.
|
|
"""
|
|
if total is None:
|
|
total = len(fs)
|
|
yield from cls(asyncio.as_completed(fs, loop=loop, timeout=timeout),
|
|
total=total, **tqdm_kwargs)
|
|
|
|
|
|
def tarange(*args, **kwargs):
|
|
"""
|
|
A shortcut for `tqdm.asyncio.tqdm(range(*args), **kwargs)`.
|
|
"""
|
|
return tqdm_asyncio(range(*args), **kwargs)
|
|
|
|
|
|
# Aliases
|
|
tqdm = tqdm_asyncio
|
|
trange = tarange
|
|
|