o
    ߗi                     @  s  d Z ddlmZ ddlZddlZddlmZmZmZm	Z	 ddl
mZ g dZe	dZe	d	Zeejd
dd)ddZeejjd*ddZee_eejd
dd+ddZejdkrjeejd
dd,ddZedg7 Zeejd-d.d!d"Zeejd
dd/d'd(ZdS )0z 
Python polyfills for itertools
    )annotationsN)	GeneratorIterableIteratorTypeVar   )substitute_in_graph)chainchain_from_iterableisliceteecompress_T_UT)is_embedded_type	iterablesIterable[_T]returnIterator[_T]c                  g  s    | D ]}|E d H  qd S N )r   iterabler   r   _/home/ubuntu/transcripts/venv/lib/python3.10/site-packages/torch/_dynamo/polyfills/itertools.pyr	      s   r	   r   Iterable[Iterable[_T]]c                C  s
   t j|  S r   )	itertoolsr	   )r   r   r   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maxzip)
r   r   sr   r    r!   next_iielement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   pairwiseJ   s   
r2   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 )NTr   r   )nextStopIteration)linkvalue)iteratorr   r   _tee^   s   ztee.<locals>._teec                 3  s    | ]} V  qd S r   r   ).0_)r;   shared_linkr   r   	<genexpr>i   s    ztee.<locals>.<genexpr>)r   r   )itertupler$   )r   r3   r   )r;   r:   r>   r   r   Y   s   r   data	selectorsIterable[_U]Generator[_T, None, None]c                C  s   dd t | |D S )Nc                 s  s    | ]	\}}|r|V  qd S r   r   )r<   datumselectorr   r   r   r?   q   s    zcompress.<locals>.<genexpr>)r&   )rB   rC   r   r   r   r   m   s   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   r   r   )r   r   r   r.   )r   )r   r   r3   r4   r   r5   )rB   r   rC   rD   r   rE   )__doc__
__future__r   r   systypingr   r   r   r   
decoratorsr   __all__r   r   r	   from_iterabler
   r   version_infor2   r   r   r   r   r   r   <module>   s0    	



