U
    zh9&                     @   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                       sJ   e Zd Z fddZdd Zdd Zdd Zd	d
dd fddZ  ZS )ItertoolsVariablec                    s   t  jf | || _d S N)super__init__value)selfr   kwargs	__class__ N/var/www/html/venv/lib/python3.8/site-packages/torch/_dynamo/variables/iter.pyr      s    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 r   )typer   r   r   r   r   python_type   s    zItertoolsVariable.python_typec                 C   s   | j S r   r   r   r   r   r   as_python_constant   s    z$ItertoolsVariable.as_python_constantzList[VariableTracker]zDict[str, VariableTracker]r   )argsr   returnc                    s  | j tjkrp sptfdd|D rpfdd|D }g }tj| D ]}|tt| qFtj|t	 dS | j tj
krȈ stfdd|D rȇfdd|D }ttj
|}tj|t	 dS | j tjkrfdd	lm} td
d   D rtddt  ddh    d}t|dkr|d r|d }	d krxt|dkrx 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 k	r|| |	D ]x}|d kr|}nXz|
||gi }W nB tk
rF } z"td|
 d| | d|d W 5 d }~X Y nX || qtj|t	 dS | j tjkr st|dkr|d r|d  r|d }|d  }g }t||D ]}|tt| qtj|t	 dS | j tjkrHtdd   D rDtddt  dh   dd t|dkr|d r|d }	d kr fddnd }ntd g }zbtj|	|d D ]N\}}|tjtj !|rtj "|n|tjt|t	 dgt	 d qW n0 tk
r6 } ztd!|d W 5 d }~X Y nX tj|t	 dS | j tj#krt|dk rvtj$|d"t	 iS dd#l%m&} '|"t(j#| S | j tj)krtj*|d"t	 iS | j tj+krtj,|d"t	 iS | j tj-krt.t(j-| S t/ | S d S )$Nc                 3   s   | ]}|  V  qd S r   has_unpack_var_sequence.0argtxr   r   	<genexpr>%   s     z2ItertoolsVariable.call_function.<locals>.<genexpr>c                    s   g | ]}|  qS r   unpack_var_sequencer$   r'   r   r   
<listcomp>'   s     z3ItertoolsVariable.call_function.<locals>.<listcomp>)mutable_localc                 3   s   | ]}|  V  qd S r   r"   r$   r'   r   r   r)   /   s     c                    s   g | ]}|  qS r   r*   r$   r'   r   r   r,   1   s     r
   )BuiltinVariablec                 s   s   | ]}|d kV  qdS ))initialfuncNr   )r%   keyr   r   r   r)   7   s     z-Unsupported kwargs for itertools.accumulate: ,r/   r0   )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   )Zfrom_excc                 s   s   | ]}|d kV  qdS )r1   Nr   )r%   kwr   r   r   r)   p   s     z*Unsupported kwargs for itertools.groupby: r1   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   ZSymNodeVariableZevaluate_exprr   r   r	   strr   r1   r   r   r   retrieve_const_keyv   s    z;ItertoolsVariable.call_function.<locals>.retrieve_const_keyc                    s     d| gi S )Nr1   )getcall_function)xr   r8   r(   r   r   <lambda>   s    z1ItertoolsVariable.call_function.<locals>.<lambda>z+Unsupported arguments for itertools.groupbyr7   z1Unexpected failure when calling itertools.groupbyr-   )SourcelessBuilder)0r   	itertoolsproductallappendr   ZTupleVariablelistZListIteratorVariabler   chainfrom_iterable
accumulatebuiltinr.   anykeysr	   joinsetr9   lenr#   r+   r:   operatoradd	ExceptioncombinationsZis_python_constantr   groupbyr   Z
is_literalcreaterepeatRepeatIteratorVariablebuilderr>   Zinline_user_function_returnr   countCountIteratorVariablecycleCycleIteratorVariable	dropwhileZUserFunctionVariabler   )r   r(   r    r   Zseqsitemsitemr.   accseqr0   eiterablerZkeyfuncresultkvr>   r   r<   r   r:      s   









	
     zItertoolsVariable.call_function)	__name__
__module____qualname__r   r   r   r   r:   __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f | 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   r(   r   r   r   next_variable   s    zIteratorVariable.next_variable)re   rf   rg   r   rk   rh   r   r   r   r   ri      s   ri   c                       s*   e Zd Zed fddZdd Z  ZS )rT   r\   c                    s   t  jf | || _d S r   )r   r   r\   )r   r\   r   r   r   r   r      s    zRepeatIteratorVariable.__init__c                 C   s   | j S r   rl   rj   r   r   r   rk      s    z$RepeatIteratorVariable.next_variable)re   rf   rg   r   r   rk   rh   r   r   r   r   rT      s   rT   c                       s.   e Zd Zdeed fddZdd Z  ZS )	rW   r   r
   )r\   stepc                    sF   t  jf | t|ts"t|}t|ts6t|}|| _|| _d S r   )r   r   r5   r   r   rR   r\   rm   )r   r\   rm   r   r   r   r   r      s    



zCountIteratorVariable.__init__c                 C   s:   | j s
t|jj|  | j|d| jgi }|| _| jS )N__add__)r-   AssertionErroroutputside_effectsmutationr\   Zcall_methodrm   )r   r(   Z	next_itemr   r   r   rk      s
    
z#CountIteratorVariable.next_variable)r   r
   )re   rf   rg   intr   rk   rh   r   r   r   r   rW      s   	rW   c                       s:   e Zd Zdeee eee d fddZdd Z	  Z
S )	rY   Nr   )iteratorsavedsaved_indexr\   c                    s6   |d krg }t  jf | || _|| _|| _|| _d S r   )r   r   rt   ru   rv   r\   )r   rt   ru   rv   r\   r   r   r   r   r      s    zCycleIteratorVariable.__init__c                 C   s   | j s
t| jd k	rz`| j|}t| jtkr8td |jj	
|  | j| || _| jd krn| |W S | jW S  tk
r   d | _| | Y S X n<t| jdkr|jj	
|  | jd t| j | _| jS td S )Nz4input iterator to itertools.cycle has too many itemsr   r
   )r-   ro   rt   rk   rL   ru   	MAX_CYCLEr	   rp   rq   rr   rB   r\   StopIterationrv   )r   r(   Znew_itemr   r   r   rk      s,    


z#CycleIteratorVariable.next_variable)Nr   N)re   rf   rg   ri   r   r   rs   r   r   rk   rh   r   r   r   r   rY      s      rY   )rw   r?   rM   typingr   r   r    r   r   excr	   baser   r   Zconstantr   r   ri   rT   rW   rY   r   r   r   r   <module>   s    -
