o
    "i9&                     @   s   d Z ddlZddlZddlmZmZmZ ddlmZm	Z	 ddl
mZ ddlmZmZ dd	lmZ G d
d deZG dd deZG dd deZG dd deZG dd deZdS )i      N)DictListOptional   )polyfill	variablesunimplemented   )MutableLocalVariableTracker)ConstantVariablec                       sN   e Zd Z fddZdd Zdd Zdd Z			
				d fddZ  ZS )ItertoolsVariablec                       t  jdi | || _d S N )super__init__value)selfr   kwargs	__class__r   Z/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/torch/_dynamo/variables/iter.pyr         
zItertoolsVariable.__init__c                 C   s   d| j  dS )NzItertoolsVariable()r   r   r   r   r   __repr__   s   zItertoolsVariable.__repr__c                 C   s
   t | jS N)typer   r   r   r   r   python_type   s   
zItertoolsVariable.python_typec                 C      | j S r   r   r   r   r   r   as_python_constant      z$ItertoolsVariable.as_python_constantargsList[VariableTracker]r   Dict[str, VariableTracker]returnr   c                    s  | j tju r8 s8tfdd|D r8fdd|D }g }tj| D ]}|tt| q#tj|t	 dS | j tj
u rd sdtfdd|D rdfdd|D }ttj
|}tj|t	 dS | j tju r*dd	lm} td
d   D rtddt  ddh    d}t|dv r|d r|d }	d v rt|dkr d j}
n"t|dkr|d j}
nt|dkr|tjj}
n	td ntd g }|d ur|| |	D ];}|d u r|}n-z
|
||gi }W n" ty } ztd|
 d| | d|d W Y d }~nd }~ww || qtj|t	 dS | j tju ru sut|dkru|d ru|d  ru|d }|d  }g }t||D ]}|tt| q_tj|t	 dS | j tju rtdd   D rtddt  dh   dd t|dkr|d r|d }	d v r fddnd }ntd g }z1tj|	|d D ]'\}}|tjtj !|rtj "|n|tjt|t	 dgt	 d qW n ty } ztd!|d W Y d }~nd }~ww tj|t	 dS | j tj#u rEt|dk r3tj$|d"t	 iS dd#l%m&} '|"t(j#| S | j tj)u rUtj*|d"t	 iS | j tj+u retj,|d"t	 iS | j tj-u rwt.t(j-| S t/ | S )$Nc                 3       | ]}|  V  qd S r   has_unpack_var_sequence.0argtxr   r   	<genexpr>%       z2ItertoolsVariable.call_function.<locals>.<genexpr>c                       g | ]}|  qS r   unpack_var_sequencer,   r/   r   r   
<listcomp>'       z3ItertoolsVariable.call_function.<locals>.<listcomp>)mutable_localc                 3   r)   r   r*   r,   r/   r   r   r1   /   r2   c                    r3   r   r4   r,   r/   r   r   r6   1   r7   r
   )BuiltinVariablec                 s   s    | ]}|d vV  qdS ))initialfuncNr   )r-   keyr   r   r   r1   7       z-Unsupported kwargs for itertools.accumulate: ,r:   r;   )r
   r   r   r   zDitertools.accumulate can only accept one of: `func` kwarg, pos 2 argz.Unsupported arguments for itertools.accumulatezOUnexpected failure in invoking function during accumulate. Failed running func (r   )from_excc                 s   s    | ]}|d kV  qdS )r<   Nr   )r-   kwr   r   r   r1   p   r=   z*Unsupported kwargs for itertools.groupby: r<   c                 S   s@   t | tjr
|  S t | tjr|  S tdtt|   d S )Nz,Unsupported key type for itertools.groupby: )	
isinstancer   SymNodeVariableevaluate_exprr   r#   r	   strr    r<   r   r   r   retrieve_const_keyv   s   z;ItertoolsVariable.call_function.<locals>.retrieve_const_keyc                    s     d| gi S )Nr<   )getcall_function)xr   rG   r0   r   r   <lambda>   s   z1ItertoolsVariable.call_function.<locals>.<lambda>z+Unsupported arguments for itertools.groupbyrF   z1Unexpected failure when calling itertools.groupbyr8   )SourcelessBuilder)0r   	itertoolsproductallappendr   TupleVariablelistListIteratorVariabler   chainfrom_iterable
accumulatebuiltinr9   anykeysr	   joinsetrH   lenr+   r5   rI   operatoradd	Exceptioncombinationsis_python_constantr#   groupbyr   
is_literalcreaterepeatRepeatIteratorVariablebuilderrM   inline_user_function_returnr   countCountIteratorVariablecycleCycleIteratorVariable	dropwhileUserFunctionVariabler   )r   r0   r%   r   seqsitemsitemr9   accseqr;   eiterablerkeyfuncresultkvrM   r   rK   r   rI      s  




	

zItertoolsVariable.call_function)r%   r&   r   r'   r(   r   )	__name__
__module____qualname__r   r   r!   r#   rI   __classcell__r   r   r   r   r      s    r   c                       s$   e Zd Z fddZdd Z  ZS )IteratorVariablec                    s   t  jdi | d S r   )r   r   )r   r   r   r   r   r      s   zIteratorVariable.__init__c                 C   s   t d d S )Nzabstract method, must implementr   r   r0   r   r   r   next_variable   s   zIteratorVariable.next_variable)r|   r}   r~   r   r   r   r   r   r   r   r      s    r   c                       s*   e Zd Zdef fddZdd Z  ZS )rg   rr   c                    r   r   )r   r   rr   )r   rr   r   r   r   r   r      r   zRepeatIteratorVariable.__init__c                 C   r"   r   )rr   r   r   r   r   r      r$   z$RepeatIteratorVariable.next_variable)r|   r}   r~   r   r   r   r   r   r   r   r   rg      s    rg   c                       s0   e Zd Zd	dedef fddZdd Z  ZS )
rk   r   r
   rr   stepc                    sJ   t  jdi | t|tst|}t|tst|}|| _|| _d S r   )r   r   rB   r   r   re   rr   r   )r   rr   r   r   r   r   r   r      s   




zCountIteratorVariable.__init__c                 C   s:   | j sJ |jj|  | j|d| jgi }|| _| jS )N__add__)r8   outputside_effectsmutationrr   call_methodr   )r   r0   	next_itemr   r   r   r      s
   
z#CountIteratorVariable.next_variable)r   r
   )r|   r}   r~   intr   r   r   r   r   r   r   rk      s    	rk   c                
       sF   e Zd Z			ddedee dedee f fddZd	d
 Z	  Z
S )rm   Nr   iteratorsavedsaved_indexrr   c                    s:   |d u rg }t  jdi | || _|| _|| _|| _d S r   )r   r   r   r   r   rr   )r   r   r   r   rr   r   r   r   r   r      s   
zCycleIteratorVariable.__init__c                 C   s   | j sJ | jd urLz0| j|}t| jtkrtd |jj	|  | j
| || _| jd u r7| |W S | jW S  tyK   d | _| | Y S w t| jdkrh|jj	|  | jd t| j | _| jS t)Nz4input iterator to itertools.cycle has too many itemsr   r
   )r8   r   r   r]   r   	MAX_CYCLEr	   r   r   r   rQ   rr   StopIterationr   )r   r0   new_itemr   r   r   r      s.   


z#CycleIteratorVariable.next_variable)Nr   N)r|   r}   r~   r   r   r   r   r   r   r   r   r   r   r   r   rm      s    rm   )r   rN   r^   typingr   r   r    r   r   excr	   baser   r   constantr   r   r   rg   rk   rm   r   r   r   r   <module>   s    -
