This is a straight up port of python venerable tqdm to .NET / CLR
Yaap stands for Yet Another ANSI Progressbar
From the python project README:
`tqdm` means "progress" in Arabic (taqadum, تقدّم) and an abbreviation for "I love you so much" in Spanish (te quiero demasiado). Instantly make your loops show a smart progress meter - just wrap any iterable with ``tqdm(iterable)``, and you're done!
Much like in python, Yaap can make .NET loops, IEnumerable
s and more show a smart progress meter.
The most dead simple way of starting with Yaap is to add it via the nuget package and
using Yaap;
foreach (var i in Enumerable.Range(0, 1000).Yaap()) {
Thread.Sleep(10);
}
Will display a continuously updating progress bar like this, on Mac/Linux:
76%|████████████████████████████ | 7568/10000 [00:07s<00:10s, 229.00it/s]
Unfortunately, getting nice looking progress to show up on Windows is not so straight forward, unless you follow these instructions...
Out of the box, On Windows, the progress bar will be less visually appeaking and use ASCII characters:
76%|############################ | 7568/10000 [00:07s<00:10s, 229.00it/s]
Yaap has the following features:
IEnumerable<T>
with a Yaap progress barIEnumetable<T>
) progress updatesFull documentation is provided here
See the Demo project for a fancy demo that covers most of what Yaap can do and how it can be optimized
You can either run the demo project with dotnet run
to run all the demos sequentially or invoke specific demos with dotnet run <n>
where <n>
is the number of the demo to run...
'\r'
) is neededIEnumerable<T>
to get the total count?
Count
"value" of the IEnumerable<T>
WITHOUT actually enumerating it. This means that when an ICollection
/Array
/IList
object is passed to Yaap, it will actually read the Count
/ Length
property instead.
Finally, Yaap uses and undocumented internal .NET interface called IIListProvider
which can, sometimes calculate the count value of the enumerable without consuming it.
For more information on what works/doesn't, consult the specific unit tests.
Finally, when all else fails, Yaap will throw an exception, explaining that the total
progress value has to be provided by the user, for Yaap to work.Console.Write*()
but rather going through YaapConsole.Write*()
wrapper functions, which keep everything nice and tidy