
    ?_                         d Z ddlZddlZddlmZmZmZmZmZm	Z	m
Z
mZmZ ddlmZmZ ddddeee      de	ej                      d	e	e   d
ee   fdZdddddee   de	ej                      deded
ee   f
dZy)zt
Friendlier version of asyncio standard library.

Provisional library.  Must be imported as `aioitertools.asyncio`.
    N)	Any	AwaitableDictIterableListOptionalSetTuplecast   )AsyncIteratorT)looptimeoutawsr   r   returnc          	       K   t               }t        |       }d}|r|dkD  rt        j                         |z   }nd}|r|r0t        j                         z
  }|dk  rt        j                         t	        t
        t        t        t              t        t        t              f   t        j                  |||t        j                         d{         \  }}|D ]  }| d{     |ryy7 $7 w)a;  
    Run awaitables in `aws` concurrently, and yield results as they complete.

    Unlike `asyncio.as_completed`, this yields actual results, and does not require
    awaiting each item in the iterable.

    Example:

        async for value in as_completed(futures):
            ...  # use value immediately

    Nr   )r   r   return_when)settimeasyncioTimeoutErrorr   r
   r	   r   r   waitFIRST_COMPLETED)r   r   r   donepending	remaining	thresholditems           4lib/python3.12/site-packages/aioitertools/asyncio.pyas_completedr!      s     $ "eD!$SG!%I7Q;IIK')	
!DIIK/IA~**,, #il#S1%667,,!#33	 
g D* /  s*   C
C5C1
C5"C3#C5/C53C5F)r   return_exceptionslimitargsr#   r$   c                 6  K   i }i }dgt        |      z  }t               }t               }d}		 |	t        |      k  r|dk(  st        |      |k  r~||	   |v r|||	      j                  |	       n7t        j                  ||	         }
|j                  |
       |	||
<   |	g|||	   <   |	dz  }	|	t        |      k  r|dk(  rot        |      |k  r~|rwt        j                  || t        j                         d{   \  }}|D ]A  }|r'|j                         r|j                         |||   <   ,|j                         |||   <   C |s|	t        |      k(  rn+|j                         D ]*  }t        dt        |            D ]  }||d      |||   <    , |S 7 w)zLike asyncio.gather but with a limit on concurrency.

    Much of the complexity of gather comes with it support for cancel, which we
    omit here.  Note that all results are buffered.
    Nr   r"   r   )r   r   )lenr   appendr   ensure_futureaddr   r   	exceptionresultvaluesrange)r   r#   r$   r%   	input_mapposretr   r   next_argtaskxlstis                 r    gatherr7   G   s     02I(*CVc$i'C&)eG#&5DH
T"s7|e7K H~*$x.)00: +2*?*?X*OD!$D	-5J	$x.)MH T"s7|e7K& "),,d0G0G# MD' $"#++-CAK"#((*CAK	  8s4y0? B !q#c(#Ac!f+CAK $ " J!s   B:F=F+F7F8B F)__doc__r   r   typingr   r   r   r   r   r   r	   r
   r   typesr   r   AbstractEventLoopfloatr!   boolintr7        r    <module>rA      s      S S S # 15#	3	)A,	3 7,,
-3 e_	3
 13p 15#	<Q<<
7,,
-< < 	<
 
#Y<r@   