aioplus
=======
|PyPI Version| |PyPI Downloads| |License| |Python Version| |Documentation| |Lint| |Test| |Typing|
Key Features
------------
* ``builtins``, ``itertools`` and ``more-itertools`` — but asynchronous;
* Seamless *sync*-*async* bridging (``awaitify``, ``anextify``, etc.);
* Early returns never cause unawaited coroutine warnings.
Getting Started
---------------
Installation
~~~~~~~~~~~~
The library is available as
`aioplus `__ on PyPI:
.. code:: shell
pip install aioplus
Usage
~~~~~
CallerThreadExecutor
--------------------
For more, see the :doc:`documentation `.
.. code-block:: python
>>> executor = CallerThreadExecutor()
>>> loop = asyncio.new_event_loop()
>>> loop.set_default_executor(executor)
aall
----
For more, see the :doc:`documentation `.
.. code-block:: python
>>> aiterable = arange(23)
>>> await aall(aiterable)
False
aany
----
For more, see the :doc:`documentation `.
.. code-block:: python
>>> aiterable = arange(23)
>>> await aany(aiterable)
True
abatched
--------
For more, see the :doc:`documentation `.
.. code-block:: python
>>> aiterable = arange(23)
>>> [batch async for batch in abatched(aiterable, n=3)]
[(0, 1, 2), (3, 4, 5), ..., (18, 19, 20), (21, 22)]
achain
--------
For more, see the :doc:`documentation `.
.. code-block:: python
>>> nums1 = arange(0, 3)
>>> nums2 = arange(3, 6)
>>> [num async for num in achain(nums1, nums2)]
[0, 1, 2, 3, 4, 5]
acount
------
For more, see the :doc:`documentation `.
.. code-block:: python
>>> [num async for num in acount(start=23, step=4)]
[23, 27, 31, 35, 39, 43, 47, ...]
acycle
------
For more, see the :doc:`documentation `.
.. code-block:: python
>>> aiterable = arange(23)
>>> [num async for num in acycle(aiterable)]
[0, 1, ..., 22, 23, 0, 1, ..., 22, 23, ...]
aempty
------
For more, see the :doc:`documentation `.
.. code-block:: python
>>> aiterable = arange(23)
>>> await aempty(aiterable)
False
aenumerate
----------
For more, see the :doc:`documentation `.
.. code-block:: python
>>> aiterable = arange(4, 23)
>>> [(index, num) async for index, num in aenumerate(aiterable)]
[(0, 4), (1, 5), (2, 6), (3, 7), ..., (17, 21), (18, 22)]
afirst
------
For more, see the :doc:`documentation `.
.. code-block:: python
>>> aiterable = arange(23)
>>> await afirst(aiterable)
0
ahead
-----
For more, see the :doc:`documentation `.
.. code-block:: python
>>> aiterable = arange(23)
>>> [num async for num in ahead(aiterable, n=4)]
[0, 1, 2, 3]
aislice
-------
For more, see the :doc:`documentation `.
.. code-block:: python
>>> aiterable = arange(2003)
>>> [num async for num in aislice(aiterable, 4, 23)]
[4, 5, 6, 7, 8, ..., 20, 21, 22]
alast
-----
For more, see the :doc:`documentation `.
.. code-block:: python
>>> aiterable = arange(23)
>>> await alast(aiterable)
22
alen
----
For more, see the :doc:`documentation `.
.. code-block:: python
>>> aiterable = arange(23)
>>> await alen(aiterable)
23
amax
----
For more, see the :doc:`documentation `.
.. code-block:: python
>>> aiterable = arange(23)
>>> await amax(aiterable)
22
amin
----
For more, see the :doc:`documentation `.
.. code-block:: python
>>> aiterable = arange(23)
>>> await amin(aiterable)
0
aminmax
-------
For more, see the :doc:`documentation `.
.. code-block:: python
>>> aiterable = arange(23)
>>> await aminmax(aiterable)
(0, 22)
anextify
--------
For more, see the :doc:`documentation `.
.. code-block:: python
>>> iterable = [0, 1, 2, 3, 4, 5]
>>> aiterable = anextify(iterable)
>>> [num async for num in aiterable]
[0, 1, 2, 3, 4, 5]
anth
----
For more, see the :doc:`documentation `.
.. code-block:: python
>>> aiterable = arange(23)
>>> await anth(aiterable, n=4)
4
apairwise
---------
For more, see the :doc:`documentation `.
.. code-block:: python
>>> aiterable = arange(23)
>>> [pair async for pair in apairwise(aiterable)]
[(0, 1), (1, 2), (2, 3), ..., (20, 21), (21, 22)]
apostpend
---------
For more, see the :doc:`documentation `.
.. code-block:: python
>>> [num async for num in apostpend(arange(4), 4)]
[0, 1, 2, 3, 4]
aprepend
---------
For more, see the :doc:`documentation `.
.. code-block:: python
>>> [num async for num in aprepend(0, arange(1, 5))]
[0, 1, 2, 3, 4]
arange
------
For more, see the :doc:`documentation `.
.. code-block:: python
>>> [num async for num in arange(23)]
[0, 1, 2, 3, 4, ..., 19, 20, 21, 22]
arepeat
-------
For more, see the :doc:`documentation `.
.. code-block:: python
>>> [num async for num in arepeat(23, times=4)]
[23, 23, 23, 23]
areversed
---------
For more, see the :doc:`documentation `.
.. code-block:: python
>>> aiterable = arange(23)
>>> [num async for num in areversed(aiterable)]
[22, 21, 20, 19, 18, ..., 4, 3, 2, 1, 0]
asum
----
For more, see the :doc:`documentation `.
.. code-block:: python
>>> aiterable = arange(23)
>>> await asum(aiterable)
253
atabulate
---------
For more, see the :doc:`documentation `.
.. code-block:: python
>>> afunc = awaitify(lambda x: x * x)
>>> [num async for num in atabulate(afunc)]
[0, 1, 4, 9, 16, 25, 36, 49, ...]
atail
-----
For more, see the :doc:`documentation `.
.. code-block:: python
>>> aiterable = arange(23)
>>> [num async for num in atail(aiterable, n=4)]
[19, 20, 21, 22]
atriplewise
-----------
For more, see the :doc:`documentation `.
.. code-block:: python
>>> aiterable = arange(23)
>>> [triplet async for triplet in atriplewise(aiterable)]
[(0, 1, 2), (1, 2, 3), ..., (19, 20, 21), (20, 21, 22)]
awaitify
--------
For more, see the :doc:`documentation `.
.. code-block:: python
>>> aprint = awaitify(print)
>>> await aprint("4 -> 23")
4 -> 23
awindowed
---------
For more, see the :doc:`documentation `.
.. code-block:: python
>>> aiterable = arange(23)
>>> [window async for window in awindowed(aiterable, n=3)]
[(0, 1, 2), (1, 2, 3), ..., (19, 20, 21), (20, 21, 22)]
azip
----
For more, see the :doc:`documentation `.
.. code-block:: python
>>> xs = arange(42)
>>> ys = arange(4, 23)
>>> [(x, y) async for x, y in azip(xs, ys)]
[(0, 4), (1, 5), (2, 6), ..., (18, 22)]
.. toctree::
:caption: API Reference
:hidden:
:maxdepth: 1
CallerThreadExecutor
aall
aany
abatched
achain
acount
acycle
aempty
aenumerate
afirst
ahead
aislice
alast
alen
amax
amin
aminmax
anextify
anth
apairwise
apostpend
aprepend
arange
arepeat
areversed
asum
atail
atabulate
atriplewise
awaitify
awindowed
azip
License
-------
MIT License, Copyright (c) 2025 Sergei Y. Bogdanov. See
`LICENSE `__ file.
.. |PyPI Version| image:: https://img.shields.io/pypi/v/aioplus.svg?color=green
:target: https://pypi.org/project/aioplus/
.. |PyPI Downloads| image:: https://img.shields.io/pypi/dm/aioplus.svg?color=green
:target: https://pypi.org/project/aioplus/
.. |License| image:: https://img.shields.io/pypi/l/aioplus.svg?color=green
:target: https://github.com/syubogdanov/aioplus/tree/main/LICENSE
.. |Python Version| image:: https://img.shields.io/pypi/pyversions/aioplus.svg?color=green
:target: https://pypi.org/project/aioplus/
.. |Typing| image:: https://img.shields.io/pypi/types/aioplus?style=flat&color=green
:target: https://pypi.org/project/aioplus/
.. |Documentation| image:: https://img.shields.io/readthedocs/aioplus?style=flat&color=green
:target: https://aioplus.readthedocs.io/
.. |Lint| image:: https://img.shields.io/github/actions/workflow/status/syubogdanov/aioplus/lint.yaml?style=flat&label=lint&color=green
:target: https://github.com/syubogdanov/aioplus
.. |Test| image:: https://img.shields.io/github/actions/workflow/status/syubogdanov/aioplus/test.yaml?style=flat&label=test&color=green
:target: https://github.com/syubogdanov/aioplus