sized
Sized Generators with Decorators
Why?
- The
SizedGeneratortype provides a simple and robust way to keep track of iterations and max sizes for generators and iterators. - An issue with using normal Generators with long-running / multithread processes has been reporting progress.
- Here is an example of a standard
Generatorbeing wrapped withtqdm:
from tqdm import tqdm
def gen():
n = 2
for _ in range(100):
n += (5 * 1 / n)
yield n
for x in tqdm(gen()):
pass
# Output has no progress bar:
> 100it [00:00, 1.00it/s]
- A solution would be to keep track of the total progress, but this gets messy if an iteration is interrupted by user actions and the progress bar needs to continue.
- Now with the
sizeddecorator:
from sized import sized
@sized(100)
def s_gen():
n = 2
for _ in range(100):
n += (5 * 1 / n)
yield n
for x in tqdm(s_gen()):
pass
# Now with a progress bar!
> 100%|██████████| 100/100 [00:00<00:00, 1.00it/s]
SizedGeneratorwill also track iterations called and reflect remaining length
gen_instance = s_gen()
len(gen_instance) -> 100
next(gen_instance)
next(gen_instance)
len(gen_instance) -> 98
Getting started
There are 2 main ways to create a SizedGenerator
1. @sized decorator
from sized import sized
@sized(5)
def gen():
yield ...
2. SizedGenerator constructor
from sized import SizedGenerator
gen = SizedGenerator((x ** 2 for x in range(10)), 10)
Additional Info
- The
sizeargument can be either anint,Sizedobject, or a callable accepting a dictionary of arguments and keyword-arguments, returning anintorSizedobject.
@sized(15) # int
def gen():
for i in range(15):
yield i ** 2
ls = [1, 4, 5]
@sized(ls) # `Sized` objects will have len(obj) called automatically
def gen():
for i in ls:
yield i ** 2
@sized(lambda x: x['some_arg']) # Callable using keyword argument, returning `Sized`
def gen(arg = None):
for i in arg:
yield i ** 2
@sized(lambda x: 2 * len(x['1'])) # Callable using positional argument, returning `int`
def gen(arg_0, arg_1):
for _ in range(2):
for i in arg_1:
yield i ** 2 + arg_0
License
The code in this project is released under the MIT License.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
sized-0.1.0.tar.gz
(5.2 kB
view details)
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
sized-0.1.0-py3-none-any.whl
(4.9 kB
view details)
File details
Details for the file sized-0.1.0.tar.gz.
File metadata
- Download URL: sized-0.1.0.tar.gz
- Upload date:
- Size: 5.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via:
poetry/1.1.13 CPython/3.10.5 Linux/5.15.0-1014-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
64418002924c6975ae81eecd7f69312ed71cb5fd3362c7880e71314b0a933328
|
|
| MD5 |
33b743571981055234f574544ed8af8e
|
|
| BLAKE2b-256 |
dc5302a2082c1602b6266c7377178cf9bae46c807ed1fac931bc3e9e035ea159
|
File details
Details for the file sized-0.1.0-py3-none-any.whl.
File metadata
- Download URL: sized-0.1.0-py3-none-any.whl
- Upload date:
- Size: 4.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via:
poetry/1.1.13 CPython/3.10.5 Linux/5.15.0-1014-azure
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
2075288a76d20fb407b9ec52d0c3ccc7c9a14fca563e547cc56dc9cffc2df57e
|
|
| MD5 |
61d058f51fddc799a404c2e9aa978617
|
|
| BLAKE2b-256 |
cbf9afffdf636685a3978302c684ff7f1eb6676615b2938091425c63889af456
|