Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Unexpected behavior when combining initial and range as iterator. #1561

Open
5 of 6 tasks
twall opened this issue Mar 25, 2024 · 5 comments
Open
5 of 6 tasks

Unexpected behavior when combining initial and range as iterator. #1561

twall opened this issue Mar 25, 2024 · 5 comments

Comments

@twall
Copy link

twall commented Mar 25, 2024

  • I have marked all applicable categories:
    • exception-raising bug
    • visual output bug
  • I have visited the source website, and in particular
    read the known issues
  • I have searched through the issue tracker for duplicates
  • I have mentioned version numbers, operating system and
    environment, where applicable:
    import tqdm, sys
    print(tqdm.__version__, sys.version, sys.platform)

4.66.2 3.10.9 (main, Jan 11 2023, 09:18:20) [Clang 14.0.6 ] darwin

from tqdm import tqdm 

for level in tqdm(list(range(1, 16)), initial=10):
  print(f"Level={level}")

Output:

 67%|████████████████████████           | 10/15 [00:00<?, ?it/s]
Level 1
Level 2
Level 3
Level 4
Level 5
Level 6
Level 7
Level 8
Level 9
Level 10
Level 11
Level 12
Level 13
Level 14
Level 15

In this case, the initial argument is not completely ignored, since the status seems to stop at 10. I would expect either an exception or warning about the argument being ignored, or in the case of an indexable iterable actually use it to start at the correct index.

My workaround is to ignore the first initial iterations, but it was unexpected to have the full set of iterations produced by tqdm when initial was specified.

@paoyw
Copy link

paoyw commented Mar 29, 2024

Hi @twall,

I have try to reproduce the issue here. The output is following

 67%|████████████████████████████▋              | 10/15 [00:00<?, ?it/s]Level=1
Level=2
Level=3
Level=4
Level=5
Level=6
Level=7
Level=8
Level=9
Level=10
Level=11
Level=12
Level=13
Level=14
Level=15
25it [00:00, 205603.14it/s]

I am not sure if the last line is missed in your post.
Based on document and the response(#215 (comment)) to a similar issue, the initial only sets the initial offset for iteration display.
And I think the following code is what you are looking for.

from tqdm import tqdm 

for level in tqdm(list(range(1, 16)), initial=10, total=10+15):
  print(f"Level={level}")

@twall
Copy link
Author

twall commented Mar 29, 2024

I am expecting the iterations to start at 10 and finish at 15, for a total of 5 iterations, with the progress bar showing 15/15 when complete.

@twall
Copy link
Author

twall commented Mar 29, 2024

tqdm(list(range(10, 16)), initial=10, total=16)

almost works, except the final status is 16/16 instead of 15/15. Using total=15 results in an static progress bar stuck at 10/15.

@paoyw
Copy link

paoyw commented Mar 30, 2024

Change it to tqdm(list(10, 16), initial=9, total=15) will meet your needs.
Based on my understanding, you want to iterate through [1..15], which leaves total=15, originally.
And you want to keep on iterate though [10..15], after you have iterated through [1..9].
Since you have iterated through [1..9], the initial counter should be 9, or initial=9 in the argument.

@twall
Copy link
Author

twall commented Mar 30, 2024

Yes, that works. I was mistakenly interpreting initial to mean the first iterable value, rather than the number of iterations completed. initial really has nothing at all to do with the iterable itself. It is a little odd having the status bar start at 9/15, but that's consistent with 0/N being the initial status of any other N count.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants