The Stream class is an iterable with utility methods for transforming it.
This library heavily uses itertools for great performance and simple code.
>>> import typed_stream
>>> # Get sum of 10 squares
>>> typed_stream.Stream.range(stop=10).map(lambda x: x * x).sum()
285
>>> # same as above
>>> sum(typed_stream.Stream.counting().limit(10).map(pow, 2))
285
>>> # sum first 100 odd numbers
>>> typed_stream.Stream.counting(start=1, step=2).limit(100).sum()
10000
>>> (typed_stream.Stream.counting()
... .filter(typed_stream.functions.is_odd).limit(100).sum())
10000
>>> (typed_stream.Stream.counting()
... .exclude(typed_stream.functions.is_even).limit(100).sum())
10000
>>> import typed_stream.functions
>>> # Get the longest package name from requirements-dev.txt
>>> (typed_stream.FileStream("requirements-dev.txt")
... .filter()
... .exclude(typed_stream.functions.method_partial(str.startswith, "#"))
... .map(str.split, "==")
... .starmap(lambda name, version = None: name)
... .max(key=len))
'flake8-no-implicit-concat'
In examples are more complex examples using Streams.
I'll try to answer questions that could occur.
I try to follow something similar to sem-ver. For versions before 1.0.0 this means the format is 0.<major>.<patch>
.
Any change that could be considered a breaking-change (adding things is not a breaking change) increases the major
part. If only patch
has changed, there was no breaking-change.
I try to avoid changes that break my own code, so even if major
has been changed, it should probably be safe to upgrade.
I'm too lazy. I don't know of anybody using this (except me) and I don't need to write changelogs for myself. If you need changelogs, please create an issue.
- 🇪🇺
- AGPL3 is too long
- Google EUPL Policy
Probably.