o
    h@                  
   @   s   d dl Z d dlmZmZ d dlZddlmZ ddlmZ ddl	m
Z
mZ ddlmZmZ ed	ed
ejdejdejdiZG dd deZG dd deZdS )    N)DictList   )	variables)unimplemented)istypenp   )typestrVariableTrackerz!List types must use ListVariable.z&Dict types must use ConstDictVariable.z%Tensor types must use TensorVariable.zvSymInts must use SymNodeVariable. If the underlying value is static, we will create a ConstantVariable and specialize.z SymInts must use SymNodeVariablec                       s   e Zd Z fddZdd Zdd Zdd Zd	d
 Zedd Z	de
fddZedd Zdd Zdd Z						d! fddZdeddfdd Z  ZS )"ConstantVariablec                    sl   t  jdi | t|s t D ]\}}t||rJ |qtd ur1t|tjr1|	 | _
d S || _
d S N )super__init__r   
is_literal_type_to_assert_reasonitems
isinstancer   numberitemvalue)selfr   kwargsdisallowed_typereason	__class__r   V/var/www/html/ai/venv/lib/python3.10/site-packages/torch/_dynamo/variables/constant.pyr      s   

zConstantVariable.__init__c                 C      | j S Nr   r   r   r   r   as_proxy)      zConstantVariable.as_proxyc                 C   s   dt | jj dS )NzConstantVariable())typer   __name__r"   r   r   r   __str__,   s   zConstantVariable.__str__c                 C   
   t | jS r    r&   r   r"   r   r   r   python_type0      
zConstantVariable.python_typec                 C   r   r    r!   r"   r   r   r   as_python_constant3   r$   z#ConstantVariable.as_python_constantc                 C   s   | j ddS )zz
        Need this when adding a BaseListVariable and a ConstantVariable together.
        Happens in detectron2.
        N)tx)unpack_var_sequencer"   r   r   r   r   6   s   zConstantVariable.itemsargc                 C   s$   t | j|  fi t| |gS r    )r   r   r-   r   	propagate)r   r0   r   r   r   getitem_const>   s
   zConstantVariable.getitem_constc                 C   sH   t | tttt d tfv rdS t | ttttfv r"t	dd | D S dS )NTc                 s   s    | ]}t |V  qd S r    )r   r   .0xr   r   r   	<genexpr>I       z.ConstantVariable.is_literal.<locals>.<genexpr>F)
r&   intfloatboolstrlisttupleset	frozensetall)objr   r   r   r   D   s
   zConstantVariable.is_literalc              
      sD   zt | g  fdd|  D W S  ty! } zt|d }~ww )Nc                    s   g | ]
}t |fi  qS r   )r   r3   optionsr   r   
<listcomp>O   s    z8ConstantVariable.unpack_var_sequence.<locals>.<listcomp>)r   r1   r-   	TypeErrorNotImplementedError)r   r.   er   rB   r   r/   L   s   z$ConstantVariable.unpack_var_sequencec                 C      t | j|}t|rt |S r    getattrr   callablerF   r   r.   namememberr   r   r   const_getattrS      zConstantVariable.const_getattrargsList[VariableTracker]r   Dict[str, VariableTracker]returnr   c              	      s~  ddl m  t| }tjtr*tj	d
|jd|||S tjtrEtjd
|jd|||S t fddD r_t j||S zdd D }dd	 | D }W n ty   t || Y S w fd
d}tjtrtj v rtj}	t|	|i |fi |S |ts|trtt}
|d }t|tjtjfrddl m  |j !d|
j|fi } j"|||fi |S t|
j|fi |S dkrs|stt#jfi |S dkr0t#dkr0d $ r0|rJ d % }|jv }t|fi |S t&dt'j d  d S )Nr	   SymNodeVariable)r   sourcec                 3   s    | ]}t | V  qd S r    )r   r3   rU   r   r   r6   o   r7   z/ConstantVariable.call_method.<locals>.<genexpr>c                 S   s   g | ]}|  qS r   r-   )r4   ar   r   r   rD   v   s    z0ConstantVariable.call_method.<locals>.<listcomp>c                 S   s   i | ]	\}}||  qS r   rX   )r4   kvr   r   r   
<dictcomp>w   s    z0ConstantVariable.call_method.<locals>.<dictcomp>c                    s.   t j| ottot dko d  S )Nr	   r   )r   r   hasattroperatorlenis_python_constant)num_ty)rQ   rM   r   r   r   has_arith_binop{   s   

z5ConstantVariable.call_method.<locals>.has_arith_binopr   call_function__len____contains__zconst method call .r   )(tensorrV   r   r1   valuesr   r   r=   r   TupleVariabler/   rW   call_methodr<   ListVariableanyr#   r   rF   r   r   r;   __dict__keysrJ   r   r8   r9   r^   torchSymIntSymFloatoutputcreate_proxycreater_   r`   r-   r   r
   )r   r.   rM   rQ   r   rC   
const_argsconst_kwargsrb   methodop
add_targetproxysearchresultr   )rV   rQ   rM   r   r   rj   Y   sd   
&

zConstantVariable.call_methodrM   c                 C   s   t | j|}t|| S r    )r]   r   r   r   add_options)r   r.   rM   r|   r   r   r   call_hasattr   s   zConstantVariable.call_hasattr)rQ   rR   r   rS   rT   r   )r'   
__module____qualname__r   r#   r(   r+   r-   propertyr   r   r2   staticmethodr   r/   rO   rj   r;   r~   __classcell__r   r   r   r   r      s*    

Fr   c                       sD   e Zd Z fddZdd Zdd Zdd Zd	d
 Zdd Z  Z	S )EnumVariablec                    s   t  jdi | || _d S r   )r   r   r   )r   r   r   r   r   r   r      s   
zEnumVariable.__init__c                 C   r   r    r!   r"   r   r   r   r#      r$   zEnumVariable.as_proxyc                 C   s   dt | j dS )NzEnumVariable(r%   r*   r"   r   r   r   r(      s   zEnumVariable.__str__c                 C   r)   r    r*   r"   r   r   r   r+      r,   zEnumVariable.python_typec                 C   r   r    r!   r"   r   r   r   r-      r$   zEnumVariable.as_python_constantc                 C   rH   r    rI   rL   r   r   r   rO      rP   zEnumVariable.const_getattr)
r'   r   r   r   r#   r(   r+   r-   rO   r   r   r   r   r   r      s    r   )r^   typingr   r   ro    r   excr   utilsr   r   baser
   r   r<   dictTensorrp   rq   r   r   r   r   r   r   r   <module>   s      