
    קg:%              
          d dl Z d dlmZ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mZ ddlmZmZ ddlmZmZmZ d	d
lmZmZ erd dlmZ ededej        dej        dej        diZ G d de          Z  G d de          Z!dS )    N)DictListTYPE_CHECKING)GetItemSource   )	variables)unimplemented	UserErrorUserErrorType)GuardBuilderinstall_guard)common_constant_typesistypenp   )typestrVariableTracker)InstructionTranslatorz!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                        e Zd Zedefd            Zd fdZd ZdefdZ	d Z
d Zed	             Zd
ddefdZed             Zd ZddZ	 	 	 	 	 	 d fdZd
ddeddfdZ xZS )ConstantVariablereturnc                    |                     dd           }t                              |           }|s9t                                          D ]\  }}t          | |          r
J |             |rrt          | t          t          f          rVg }t          |           D ]2\  }}|	                    t          
                    |                     3t          j        |fi |S |rt          | t          t          f          rg }t          |           D ]v\  }}|rt          ||          nd }	|	r,t!          |	                    t$          j                             |	                    t          
                    ||	                     wt          j                            t-          |                     |fi |S t          | fi |S )Nsource)r   )getr   
is_literal_type_to_assert_reasonitems
isinstanceset	frozenset	enumerateappendcreater   SetVariablelisttupler   r   
make_guardr   CONSTANT_MATCHBaseListVariablecls_fortype)
valuekwargsr   r   disallowed_typereasonr   ixitem_sources
             \/var/www/html/ai-engine/env/lib/python3.11/site-packages/torch/_dynamo/variables/constant.pyr#   zConstantVariable.create&   s   Hd++%0077
 	F+A+G+G+I+I F F'%e_==EEvEEEE  	T*US),<== 	TE!%(( 9 91-44Q778888(99&999 	TJutUm<< 	TE!%(( 	 	1:@JmFA666d W!+"8"89T"U"UVVV$++* ,      -55d5kkBB5SSFSSS00000    Nc                     t                      j        di | t                              |          s9t                                          D ]\  }}t          ||          r
J |             t          |t          t          f          r
J d            t          5t          |t          j
                  r|                                | _        d S || _        d S )NzFConstantVariable(list) is banned - please create a ListVariable(items) )super__init__r   r   r   r   r   r%   r&   r   numberitemr,   )selfr,   r-   r.   r/   	__class__s        r3   r8   zConstantVariable.__init__D   s    ""6"""**511 	F+A+G+G+I+I F F'%e_==EEvEEEED%=
 
 	T 	TS	T 	T 	T >j	::>DJJJDJJJr4   c                     | j         S Nr,   r;   s    r3   as_proxyzConstantVariable.as_proxyR   
    zr4   c                 f    dt          | j                  j         dt          | j                   dS )NzConstantVariable(z: ))r+   r,   __name__reprr@   s    r3   __str__zConstantVariable.__str__U   s2    S4
#3#3#<SSTZ@P@PSSSSr4   c                     | j         S r>   r?   r@   s    r3   as_python_constantz#ConstantVariable.as_python_constantX   rB   r4   c                     dS )NTr6   r@   s    r3   is_python_constantz#ConstantVariable.is_python_constant[   s    tr4   c                 .    |                      d          S )zz
        Need this when adding a BaseListVariable and a ConstantVariable together.
        Happens in detectron2.
        N)tx)unpack_var_sequencer@   s    r3   r   zConstantVariable.items^   s     ''4'000r4   rM   r   argc                 p    t                               | j        |                                                   S r>   )r   r#   r,   rI   )r;   rM   rO   s      r3   getitem_constzConstantVariable.getitem_constf   s0    &&Js--//0
 
 	
r4   c                     t          |           t          v rdS t          |           t          t          t          t
          t          j        fv rt          d | D                       S dS )NTc              3   J   K   | ]}t                               |          V  d S r>   )r   r   .0r1   s     r3   	<genexpr>z.ConstantVariable.is_literal.<locals>.<genexpr>q   s1      CC!'22155CCCCCCr4   F)	r+   r   r%   r&   r   r    torchSizeall)objs    r3   r   zConstantVariable.is_literalk   sY    99---499uc9ejAAACCsCCCCCCur4   c                 t    	 d |                                  D             S # t          $ r}t          |d }~ww xY w)Nc                 B    g | ]}t                               |          S r6   )r   r#   rT   s     r3   
<listcomp>z8ConstantVariable.unpack_var_sequence.<locals>.<listcomp>v   s'    RRR1$++A..RRRr4   )rI   	TypeErrorNotImplementedError)r;   rM   es      r3   rN   z$ConstantVariable.unpack_var_sequencet   sN    	-RR8O8O8Q8QRRRR 	- 	- 	-%1,	-s     
727c                     t          | j        t                    rt          t          j        dd          t          | j        |          }t          |          rt          |S )Nz]Can't access members of type(obj) for a generated custom object. Please use __class__ insteadtype_reflection_method)	case_name)	r   r,   r+   r
   r   ANTI_PATTERNgetattrcallabler_   r;   rM   namemembers       r3   const_getattrzConstantVariable.const_getattrz   si    dj$'' 	*/2	    T**F 	&%%r4   argsList[VariableTracker]r-   Dict[str, VariableTracker]r   c                 	   ddl m |dk    rPt          | j        t                    r6t          j        t          j                                      || g||          S |dk    rt          | j        t                    rt          |          dk    rt          |          dk    sJ |d         
                    |          }	 d |D             }t                              | j                            |                    S # t          $ r' t                                          ||||          cY S w xY wt#          fd|D                       rBt          j        |                                 | j                                      ||||          S 	 d |D             }d	 |                                D             }n4# t          $ r' t                                          ||||          cY S w xY wt)          | j        t                    rU|t          j                                        v r5t/          | j        |          }	t                               |	|i |          S t)          | j        t0          t2          f          r.|s7|s5t                               t/          | j        |                                S t5          t6          |          rt          |          dk    r|d                                         r|d         }
t/          t6          |          }t)          |
t:          j        t:          j        t:          j         f          r;|j!        "                    d
|| j        |
fi           }                    |||
          S t                               || j        |
                    S nUt)          | j        tF                    r;|dk    r5t/          | j        |          }	t                               |	|i |          S |dk    r0|s.|s,t                              t          | j                            S |dk    rnt          |          dk    r[|d                                         rA|rJ |d         $                                }|| j        v }t                              |          S tK          dtM          | j                   d|            d S )Nr   )SymNodeVariableformatjoinr   c                 6    g | ]}|                                 S r6   rI   rT   s     r3   r]   z0ConstantVariable.call_method.<locals>.<listcomp>   s$    JJJQ1133JJJr4   c              3   8   K   | ]}t          |          V  d S r>   )r   )rU   r1   ro   s     r3   rV   z/ConstantVariable.call_method.<locals>.<genexpr>   s-      <<!z!_--<<<<<<r4   c                 6    g | ]}|                                 S r6   rs   )rU   as     r3   r]   z0ConstantVariable.call_method.<locals>.<listcomp>   s$    ???Q!..00???r4   c                 >    i | ]\  }}||                                 S r6   rs   )rU   kvs      r3   
<dictcomp>z0ConstantVariable.call_method.<locals>.<dictcomp>   s*    QQQ$!QAq3355QQQr4   call_functiondecode__len____contains__zconst method call .)'tensorro   r   r,   strr   BuiltinVariablerp   r{   lenforce_unpack_var_sequencer   r#   rq   r_   r7   call_methodanyrA   r   r   __dict__keysre   floatinthasattroperatorrK   rW   SymBoolSymFloatSymIntoutputcreate_proxybytesrI   r	   r   )r;   rM   rh   rk   r-   arg_unpacked	arg_const
const_argsconst_kwargsmethod
add_targetopproxysearchresultro   r<   s                  @r3   r   zConstantVariable.call_method   s    	,+++++8tz3 7 7,SZ88FFTMDM6   V^^tz3 7 7^t99>>c&kkQ&6&6&6&67<<R@@LCJJ\JJJ	'..tzy/I/IJJJ& C C Cww**2tT6BBBBBC <<<<t<<<<< 	,T]]__djIIUUD$  	???$???JQQ&,,..QQQLL" 	? 	? 	?77&&r4v>>>>>	? dj#&& 	P43<3D3D3F3F+F+FTZ..F#**66:+N+N+NOOO
UCL11 	P LF L'../Hwtz4/H/H/J/JKKK$''OIINNG..00 # (]
Xt,, M  	O I22'dj*-Er E +11"eZHHH+2222dj*3M3MNNN
E** 	Ptx/?/?TZ..F#**66:+N+N+NOOO9df#**3tz??;;;^##D		Q47;U;U;W;W!W//11Ftz)F#**6222G74:+>+>GGGGHHHHHs$   =D .D21D2*F> >.G/.G/rh   c                 j    t          | j        |          }t          j                            |          S r>   )r   r,   r   r   r#   )r;   rM   rh   r   s       r3   call_hasattrzConstantVariable.call_hasattr   s*    T**)00888r4   r   NrM   r   )rk   rl   r-   rm   r   r   )rE   
__module____qualname__staticmethodr   r#   r8   rA   r   rG   rI   rK   propertyr   rQ   r   rN   rj   r   r   __classcell__r<   s   @r3   r   r   %   s       1? 1 1 1 \1:       T T T T T     1 1 X1
 7 
o 
 
 
 

   \- - -   EI &	EI
 -EI 
EI EI EI EI EI EIN96 9c 9FW 9 9 9 9 9 9 9 9r4   r   c                   V     e Zd Zd fdZed             Zd ZdefdZd Z	dd
Z
 xZS )EnumVariabler   Nc                 H     t                      j        di | || _        d S )Nr6   )r7   r8   r,   )r;   r,   r-   r<   s      r3   r8   zEnumVariable.__init__   s+    ""6"""


r4   c                     t          |t          j                  r:t          |          D ]*}|j        |                                k    r | |fi |c S +t          d           d S )Nz5Enum variable is constructed with non constant values)r   r   r   r%   r,   rI   r	   )clscls_typevalue_vtoptionsri   s        r3   r#   zEnumVariable.create   s~    h	 :;; 	2x.. 2 2<8#>#>#@#@@@3v1111111 AMNNNNNr4   c                     | j         S r>   r?   r@   s    r3   rA   zEnumVariable.as_proxy   rB   r4   c                 2    dt          | j                   dS )NzEnumVariable(rD   )r+   r,   r@   s    r3   rG   zEnumVariable.__str__   s    2tDJ//2222r4   c                     | j         S r>   r?   r@   s    r3   rI   zEnumVariable.as_python_constant   rB   r4   rM   r   c                 \    t          | j        |          }t          |          rt          |S r>   )re   r,   rf   r_   rg   s       r3   rj   zEnumVariable.const_getattr   s.    T**F 	&%%r4   r   r   )rE   r   r   r8   classmethodr#   rA   r   rG   rI   rj   r   r   s   @r3   r   r      s              O O [O  3 3 3 3 3         r4   r   )"r   typingr   r   r   rW   torch._dynamo.sourcer    r   excr	   r
   r   guardsr   r   utilsr   r   r   baser   r   torch._dynamo.symbolic_convertr   r%   dictTensorr   r   r   r   r   r6   r4   r3   <module>r      s|    , , , , , , , , , ,  . . . . . .       9 9 9 9 9 9 9 9 9 9 0 0 0 0 0 0 0 0 5 5 5 5 5 5 5 5 5 5 * * * * * * * *  EDDDDDD 	
-
2	L9	L [	N6 "k9 k9 k9 k9 k9 k9 k9 k9\    ?     r4   