o
    ei                     @  s  U d Z ddlmZ ddlZddlZddlmZ ddlmZm	Z	m
Z
mZmZ ddlmZ e
r5ddlmZmZ g d	Zed
ZedZeegef Zded< edZedZeejdddQddZeejdd	dRdddSddZeejjdTd!d"Zee_eejdddUd&d'ZeejdddVd(d)ZeejdddWd,d-Zeej dddXd/d0Z eej!dddYd3d4Z!eej"dddZd6d7Z"eej#d[d\d;d<Z#e	d=d>d]dCdDZ$e	d^dHdDZ$e	d=d>d_dJdDZ$e	d`dMdDZ$e	d=d>dadOdDZ$eej$dddd>dbdPdDZ$dS )cz 
Python polyfills for itertools
    )annotationsN)Callable)OptionaloverloadTYPE_CHECKING	TypeAliasTypeVar   )substitute_in_graph)IterableIterator)
accumulatechainchain_from_iterablecompresscycle	dropwhilefilterfalseisliceteezip_longestpairwise_T_Ur   
_Predicate_T1_T2T)is_embedded_type	iterablesIterable[_T]returnIterator[_T]c                  g      | D ]}|E d H  qd S N )r   iterabler$   r$   k/var/www/addictedbytheproject.nl/epg/venv/lib/python3.10/site-packages/torch/_dynamo/polyfills/itertools.pyr   *   s   r   )initialr%   func Optional[Callable[[_T, _T], _T]]r'   Optional[_T]c                  s.   t | } d u rtj d fdd}||S )Niteratorr!   r    c                 3  sT    }|d u rzt | }W n
 ty   Y d S w |V  | D ]
} ||}|V  qd S r#   nextStopIteration)r+   totalelementr(   r'   r$   r&   _accumulate=   s   
zaccumulate.<locals>._accumulater+   r!   r    r!   )iteroperatoradd)r%   r(   r'   r+   r2   r$   r1   r&   r   1   s
   r   Iterable[Iterable[_T]]c                c  r"   r#   r$   )r%   itr$   r$   r&   r   M   s   r   data	selectorsIterable[_U]c                C  s   dd t | |D S )Nc                 s  s    | ]	\}}|r|V  qd S r#   r$   ).0datumselectorr$   r$   r&   	<genexpr>\   s    zcompress.<locals>.<genexpr>)zip)r9   r:   r$   r$   r&   r   Z   s   r   c                   s   t  }d fdd}||S )Nr+   r!   r    c                 3  s@    g } D ]
}|V  | | q|r|D ]}|V  q|sd S d S r#   )append)r+   savedr0   r%   r$   r&   _cycled   s   zcycle.<locals>._cycler3   r4   )r%   r+   rD   r$   rC   r&   r   `   s   r   	predicate_Predicate[_T]c                c  s4    t |}|D ]}| |s|V   nq|E d H  d S r#   rE   )rF   r%   r+   xr$   r$   r&   r   s   s   r   functionc                  s.   t |} d u rttj|S t fdd|S )Nc                   s
    |  S r#   r$   )rH   rI   r$   r&   <lambda>   s   
 zfilterfalse.<locals>.<lambda>)r4   filterr5   not_)rI   r%   r8   r$   rJ   r&   r      s   r   args
int | Nonec          
      g  s    t | }|jd u rdn|j}|j}|jd u rdn|j}|dk s,|d ur(|dk s,|dkr0td|d u rL|}t| D ]\}}||krI|V  ||7 }q:d S tt||}	|}t|	| D ]\}}||kri|V  ||7 }qZd S )Nr      zGIndices for islice() must be None or an integer: 0 <= x <= sys.maxsize.)	slicestartstopstep
ValueError	enumeraterangemaxr@   )
r%   rN   srR   rS   rT   next_iir0   indicesr$   r$   r&   r      s2    r   Iterator[tuple[_T, _T]]c                c  s0    d }d}| D ]}|rd}n||fV  |}qd S )NTFr$   )r%   afirstbr$   r$   r&   r      s   
r   ninttuple[Iterator[_T], ...]c                  s:   t | d d gdfdd t fddt|D S )Nr    r!   c                 3  sN    z	 | d d u rt  | d< d d g| d< | \}} |V  q ty&   Y d S w )NTrP   r   r,   )linkvalue)r+   r$   r&   _tee   s   ztee.<locals>._teec                 3  s    | ]} V  qd S r#   r$   )r<   _)rf   shared_linkr$   r&   r?      s    ztee.<locals>.<genexpr>)r    r!   )r4   tuplerW   )r%   ra   r$   )rf   r+   rh   r&   r      s   r   .)	fillvalueiter1Iterable[_T1]rj   Iterator[tuple[_T1]]c               C     d S r#   r$   )rk   rj   r$   r$   r&   r      s   r   iter2Iterable[_T2]'Iterator[tuple[_T1 | None, _T2 | None]]c                C  rn   r#   r$   )rk   ro   r$   r$   r&   r      s   #Iterator[tuple[_T1 | _U, _T2 | _U]]c               C  rn   r#   r$   )rk   ro   rj   r$   r$   r&   r         iter3Iterator[tuple[_T | None, ...]]c                G  rn   r#   r$   )rk   ro   rt   r   r$   r$   r&   r      rs   Iterator[tuple[_T | _U, ...]]c               G  rn   r#   r$   )rk   ro   rt   rj   r   r$   r$   r&   r      s   	c              	   g  s    t tt|}t|}|sd S 	 g }t|D ],\}}zt|}W n ty=   |d8 }|s2Y  d S t| ||< | }Y nw |	| qt
|V  q)NTrP   )listmapr4   lenrV   r-   r.   	itertoolsrepeatrA   ri   )rj   r   	iterators
num_activevaluesr[   r+   re   r$   r$   r&   r      s(   
)r   r   r    r!   r#   )r%   r   r(   r)   r'   r*   r    r!   )r%   r7   r    r!   )r9   r   r:   r;   r    r!   )r%   r   r    r!   )rF   rG   r%   r   r    r!   )rI   rG   r%   r   r    r!   )r%   r   rN   rO   r    r!   )r%   r   r    r]   )r	   )r%   r   ra   rb   r    rc   )rk   rl   rj   r   r    rm   )rk   rl   ro   rp   r    rq   )rk   rl   ro   rp   rj   r   r    rr   )
rk   r   ro   r   rt   r   r   r   r    ru   )rk   r   ro   r   rt   r   r   r   rj   r   r    rv   )r   r   rj   r   r    rv   )%__doc__
__future__r   rz   r5   collections.abcr   typingr   r   r   r   r   
decoratorsr
   r   r   __all__r   r   objectr   __annotations__r   r   r   r   from_iterabler   r   r   r   r   r   r   r   r   r$   r$   r$   r&   <module>   sn    
			