"""
Asynchronous I/O scheduler for writing concurrent code.

MicroPython module: https://docs.micropython.org/en/v1.24.0/library/asyncio.html

CPython module:
`asyncio `<https://docs.python.org/3.8/library/asyncio.html>

Example::

    import asyncio

    async def blink(led, period_ms):
        while True:
            led.on()
            await asyncio.sleep_ms(5)
            led.off()
            await asyncio.sleep_ms(period_ms)

    async def main(led1, led2):
        asyncio.create_task(blink(led1, 700))
        asyncio.create_task(blink(led2, 400))
        await asyncio.sleep_ms(10_000)

    # Running on a pyboard
    from pyb import LED
    asyncio.run(main(LED(1), LED(2)))

    # Running on a generic board
    from machine import Pin
    asyncio.run(main(Pin(1), Pin(2)))

"""

from __future__ import annotations

from funcs import wait_for as wait_for, wait_for_ms as wait_for_ms, gather as gather
from event import Event as Event, ThreadSafeFlag as ThreadSafeFlag
from lock import Lock as Lock
from stream import (
    open_connection as open_connection,
    start_server as start_server,
    StreamReader as StreamReader,
    StreamWriter as StreamWriter,
)
