U
    9%e@                  
   @   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	e
dddZedd Zdd Zdd Zdddd fddZeddddZ  ZS )ConstantVariablec                    sf   t  jf | t|s<t D ]\}}t||r t|q td k	r\t|tj	r\|
 | _n|| _d S N)super__init__r   
is_literal_type_to_assert_reasonitems
isinstanceAssertionErrorr   numberitemvalue)selfr   kwargsZdisallowed_typereason	__class__ _/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/torch/_dynamo/variables/constant.pyr      s    
zConstantVariable.__init__c                 C   s   | j S r   r   r   r   r   r   as_proxy)   s    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   s
   t | jS r   r#   r   r    r   r   r   python_type0   s    zConstantVariable.python_typec                 C   s   | j S r   r   r    r   r   r   as_python_constant3   s    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t| |gS r   )r   r   r(   r   	propagate)r   r+   r   r   r   getitem_const>   s
    zConstantVariable.getitem_constc                 C   sH   t | tttt d tfkrdS t | ttttfkrDt	dd | D S dS )NTc                 s   s   | ]}t |V  qd S r   )r   r   .0xr   r   r   	<genexpr>I   s     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              
      sR   z$t | g  fdd|  D W S  tk
rL } z
t|W 5 d }~X Y nX d S )Nc                    s   g | ]}t |f qS r   )r   r.   optionsr   r   
<listcomp>O   s     z8ConstantVariable.unpack_var_sequence.<locals>.<listcomp>)r   r,   r(   	TypeErrorNotImplementedError)r   r)   er   r<   r   r*   L   s
    z$ConstantVariable.unpack_var_sequencec                 C   s   t | j|}t|rt |S r   getattrr   callabler@   r   r)   namememberr   r   r   const_getattrS   s    zConstantVariable.const_getattrzList[VariableTracker]zDict[str, VariableTracker]r   )argsr   returnc              	      st  ddl m  t| }tjtrTtj	f 
|jd|||S tjtrtjf 
|jd|||S t fddD rt j||S z$dd D }dd	 | D }W n( tk
r
   t || Y S X fd
d}tjtrXtj krXtj}	t|	||f|S |tsl|trtt}
|d }t|tjtjfrddl m  |j !d|
j|fi } j"|||f|S t|
j|f|S dkrs|stt#jf|S dkrVt#dkrVd $ rV|r4t%d & }|jk}t|f|S t'dt(j d  d S )Nr	   SymNodeVariable)r   sourcec                 3   s   | ]}t | V  qd S r   )r   r.   rK   r   r   r1   o   s     z/ConstantVariable.call_method.<locals>.<genexpr>c                 S   s   g | ]}|  qS r   r(   )r/   ar   r   r   r>   v   s     z0ConstantVariable.call_method.<locals>.<listcomp>c                 S   s   i | ]\}}||  qS r   rN   )r/   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)Znum_ty)rI   rF   r   r   r   has_arith_binop{   s    

z5ConstantVariable.call_method.<locals>.has_arith_binopr   Zcall_function__len____contains__zconst method call .))ZtensorrL   r   r,   valuesr   r   r7   r   ZTupleVariabler*   rM   call_methodr6   ZListVariableanyr!   r   r@   r   r   r5   __dict__keysrC   r   r2   r3   rT   torchSymIntSymFloatoutputZcreate_proxycreaterU   rV   r   r(   r   r
   )r   r)   rF   rI   r   r=   Z
const_argsZconst_kwargsrW   methodopZ
add_targetproxysearchresultr   )rL   rI   rF   r   r   r\   Y   s~               
   &

zConstantVariable.call_method)rF   rJ   c                 C   s   t | j|}t|| S r   )rS   r   r   r   add_options)r   r)   rF   ri   r   r   r   call_hasattr   s    zConstantVariable.call_hasattr)r$   
__module____qualname__r   r!   r%   r'   r(   propertyr   r   r-   staticmethodr   r*   rH   r\   r5   rk   __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f | || _d S r   )r   r   r   )r   r   r   r   r   r   r      s    zEnumVariable.__init__c                 C   s   | j S r   r   r    r   r   r   r!      s    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   s
   t | jS r   r&   r    r   r   r   r'      s    zEnumVariable.python_typec                 C   s   | j S r   r   r    r   r   r   r(      s    zEnumVariable.as_python_constantc                 C   s   t | j|}t|rt |S r   rB   rE   r   r   r   rH      s    zEnumVariable.const_getattr)
r$   rl   rm   r   r!   r%   r'   r(   rH   rp   r   r   r   r   rq      s   rq   )rT   typingr   r   r`    r   excr   utilsr   r   baser
   r   r6   dictZTensorra   rb   r   r   rq   r   r   r   r   <module>   s(         