o
    I&i6                     @   s|   d Z ddlmZmZ ddlmZ ddl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dS )i      )ListOptional   unimplemented   )VariableTracker)ConstantVariablec                       s$   e Zd Z fddZdd Z  ZS )IteratorVariablec                    s   t  jdi | d S N )super__init__)selfkwargs	__class__r   GC:\wamp64\www\opt\env\Lib\site-packages\torch/_dynamo/variables/iter.pyr      s   zIteratorVariable.__init__c                 C   s   t d d S )Nzabstract method, must implementr   r   txr   r   r   next_variables   s   zIteratorVariable.next_variables)__name__
__module____qualname__r   r   __classcell__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 )RepeatIteratorVariableitemc                    s   t  jdi | || _d S r   )r   r   r   )r   r   r   r   r   r   r      s   
zRepeatIteratorVariable.__init__c                 C   s   | j  | fS )N)r   cloner   r   r   r   r      s   z%RepeatIteratorVariable.next_variables)r   r   r   r   r   r   r   r   r   r   r   r      s    r   c                       s0   e Zd Zd	dedef fddZdd Z  ZS )
CountIteratorVariabler   r   r   stepc                    sJ   t  jdi | t|tst|}t|tst|}|| _|| _d S r   )r   r   
isinstancer   r	   creater   r   )r   r   r   r   r   r   r   r      s   




zCountIteratorVariable.__init__c                 C   sB   | j sJ | j|d| jgi }| j|d}|| | | j|fS )N__add__)r   )mutable_localr   Zcall_methodr   r   replace_all)r   r   Z	next_item	next_iterr   r   r   r   '   s
   

z$CountIteratorVariable.next_variables)r   r   )r   r   r   intr   r   r   r   r   r   r   r      s    	r   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 )CycleIteratorVariableNr   iteratorsavedsaved_indexr   c                    s:   |d u rg }t  jdi | || _|| _|| _|| _d S r   )r   r   r(   r)   r*   r   )r   r(   r)   r*   r   r   r   r   r   r   0   s   
zCycleIteratorVariable.__init__c                 C   s  | j sJ | jd urbz=| j|\}}|| j| t| jtkr%td | j|| j|g |d}|| | | j	d u rB||W S | j	|fW S  t
ya   | jd d}|| | || Y S w t| jdkr| j| jd t| j | j| j d}|| | | j	|fS t
)Nz4input iterator to itertools.cycle has too many items)r(   r)   r   )r(   r   r   )r*   r   )r#   r(   r   r$   lenr)   	MAX_CYCLEr   r   r   StopIterationr*   )r   r   Znew_itemZnext_inner_iterr%   r   r   r   r   @   s>   





z$CycleIteratorVariable.next_variables)Nr   N)r   r   r   r
   r   r   r&   r   r   r   r   r   r   r   r   r'   /   s    r'   N)r,   typingr   r   excr   baser   Zconstantr	   r
   r   r   r'   r   r   r   r   <module>   s    
