
    ?_                        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dS )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k    rt          j                    |z   }nd}|r|r/|t          j                    z
  }|dk    rt          j                    t	          t
          t          t          t                            t          t          t                            f         t          j	        |||t          j
                   d{V           \  }}|D ]}| d{V W V  |dS dS )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.11/site-packages/aioitertools/asyncio.pyas_completedr!      sB     $ "eeD!$SG!%I 7Q;;IKK')		
  	-!DIKK/IA~~*,,, #il#S1%667,!#3	        
 
g  	 	D******1          F)r   return_exceptionslimitargsr$   r%   c                   K   i }i }dgt          |          z  }t                      }t                      }d}		 |	t          |          k     r|dk    st          |          |k     r||	         |v r"|||	                                      |	           n@t          j        ||	                   }
|                    |
           |	||
<   |	g|||	         <   |	dz  }	|	t          |          k     r|dk    t          |          |k     |rt          j        || t          j                   d{V \  }}|D ]S}|r2|                                r|                                |||         <   6|	                                |||         <   T|s|	t          |          k    rnc|
                                D ]9}t          dt          |                    D ]}||d                  |||         <   :|S )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   Tr#   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    gatherr8   G   s1      02I(*CVc$ii'C&)eeG#&55DHT""s7||e7K7K H~**$x.)00:::: +2*?X*O*OD!!!$D	-5J	$x.)MH T""s7||e7K7K&  	-"),d0G# # #      MD'  - -$ - -"#++--CAKK"#((**CAKK 	8s4yy00?B !! & &q#c((## 	& 	&Ac!f+CAKK	& Jr"   )__doc__r   r   typingr   r   r   r   r   r   r	   r
   r   typesr   r   AbstractEventLoopfloatr!   boolintr8    r"   r    <module>rA      sU      S S S S S S S S S S S S S S S S S S S S S S # # # # # # # # 15#	3 3 3	)A,	3 7,
-3 e_	3
 13 3 3 3p 15#	< < <Q<<
7,
-< < 	<
 
#Y< < < < < <r"   