Skip to main content

sized

Build codecov Checked with mypy FOSSA Status

pre-commit.ci status DeepSource

PyPI - Python Version PyPI version

Sized Generators with Decorators

Why?

  • The SizedGenerator type 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 Generator being wrapped with tqdm:
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 sized decorator:
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]
  • SizedGenerator will 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 size argument can be either an int, Sized object, or a callable accepting a dictionary of arguments and keyword-arguments, returning an int or Sized object.
@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.

FOSSA Status

Metadata

Release files for sized 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sized 0.1.0
File Size Uploaded
sized-0.1.0.tar.gz 5.2 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for sized 0.1.0
File Interpreter ABI Platform
sized-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 10.1 kB

Release files / sized-0.1.0.tar.gz

Download URL sized-0.1.0.tar.gz
Size 5.2 kB
Tags Source
SHA-256 checksum
How to use checksums
64418002924c6975ae81eecd7f69312ed71cb5fd3362c7880e71314b0a933328
BLAKE2b-256 checksum
How to use checksums
dc5302a2082c1602b6266c7377178cf9bae46c807ed1fac931bc3e9e035ea159
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.1.13 CPython/3.10.5 Linux/5.15.0-1014-azure

Release files / sized-0.1.0-py3-none-any.whl

Download URL sized-0.1.0-py3-none-any.whl
Size 4.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
2075288a76d20fb407b9ec52d0c3ccc7c9a14fca563e547cc56dc9cffc2df57e
BLAKE2b-256 checksum
How to use checksums
cbf9afffdf636685a3978302c684ff7f1eb6676615b2938091425c63889af456
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via poetry/1.1.13 CPython/3.10.5 Linux/5.15.0-1014-azure

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page