o
    i                     @  s:  U d Z ddlmZ ddlZddlZddlZddlmZmZm	Z	m
Z
mZ ddlmZ ddlmZ e
r9d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dRddZeejdd	dSdddTddZeejjdUd!d"Zee_eejdddVd&d'Zeej dddWd(d)Z eej!dddXd,d-Z!eej"dddYd/d0Z"eej#dddZd3d4Z#ej$d5kreej%ddd[d7d8Z%ed8g7 Zeej&d\d]d<d=Z&e	d>d?d^dDdEZ'e	d_dIdEZ'e	d>d?d`dKdEZ'e	dadNdEZ'e	d>d?dbdPdEZ'eej'dddd?dcdQdEZ'dS )dz 
Python polyfills for itertools
    )annotationsN)CallableOptionaloverloadTYPE_CHECKINGTypeVar)	TypeAlias   )substitute_in_graph)IterableIterator)

accumulatechainchain_from_iterablecompresscycle	dropwhilefilterfalseisliceteezip_longest_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#   ^/home/ubuntu/veenaModal/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*   r1   r#   r0   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)r8   r9   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*   savedr/   r$   r#   r%   _cycled   s   zcycle.<locals>._cycler2   r3   )r$   r*   rC   r#   rB   r%   r   `   s   
r   	predicate_Predicate[_T]c                c  s4    t |}|D ]}| |s|V   nq|E d H  d S r"   rD   )rE   r$   r*   xr#   r#   r%   r   r   s   r   functionc                  s.   t |} d u rttj|S t fdd|S )Nc                   s
    |  S r"   r#   )rG   rH   r#   r%   <lambda>   s   
 zfilterfalse.<locals>.<lambda>)r3   filterr4   not_)rH   r$   r7   r#   rI   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$   rM   srQ   rR   rS   next_iir/   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%   pairwise   s   
rb   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 )NTrO   r   r+   )linkvalue)r*   r#   r%   _tee   s   ztee.<locals>._teec                 3  s    | ]} V  qd S r"   r#   )r;   _)rh   shared_linkr#   r%   r>      s    ztee.<locals>.<genexpr>)r   r    )r3   tuplerV   )r$   rc   r#   )rh   r*   rj   r%   r      s   r   .)	fillvalueiter1Iterable[_T1]rl   Iterator[tuple[_T1]]c               C     d S r"   r#   )rm   rl   r#   r#   r%   r      s   r   iter2Iterable[_T2]'Iterator[tuple[_T1 | None, _T2 | None]]c                C  rp   r"   r#   )rm   rq   r#   r#   r%   r      s   #Iterator[tuple[_T1 | _U, _T2 | _U]]c               C  rp   r"   r#   )rm   rq   rl   r#   r#   r%   r         iter3Iterator[tuple[_T | None, ...]]c                G  rp   r"   r#   )rm   rq   rv   r   r#   r#   r%   r      ru   Iterator[tuple[_T | _U, ...]]c               G  rp   r"   r#   )rm   rq   rv   rl   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)NTrO   )listmapr3   lenrU   r,   r-   	itertoolsrepeatr@   rk   )rl   r   	iterators
num_activevaluesrZ   r*   rg   r#   r#   r%   r      s(   
)r   r   r   r    r"   )r$   r   r'   r(   r&   r)   r   r    )r$   r6   r   r    )r8   r   r9   r:   r   r    )r$   r   r   r    )rE   rF   r$   r   r   r    )rH   rF   r$   r   r   r    )r$   r   rM   rN   r   r    )r$   r   r   r^   )r	   )r$   r   rc   rd   r   re   )rm   rn   rl   r   r   ro   )rm   rn   rq   rr   r   rs   )rm   rn   rq   rr   rl   r   r   rt   )
rm   r   rq   r   rv   r   r   r   r   rw   )rm   r   rq   r   rv   r   r   r   rl   r   r   rx   )r   r   rl   r   r   rx   )(__doc__
__future__r   r|   r4   systypingr   r   r   r   r   typing_extensionsr   
decoratorsr
   collections.abcr   r   __all__r   r   objectr   __annotations__r   r   r   r   from_iterabler   r   r   r   r   r   version_inforb   r   r   r#   r#   r#   r%   <module>   st    
	


		