
    IЦi!                         S SK r S SKJrJrJr  S SKrS SKJrJr  SSK	J
r
  SSKJr  SSKJrJrJr  SS	KJrJr  \(       a  S S
KJr   " S S\5      r " S S\5      rg)    N)DictListTYPE_CHECKING)
AttrSourceGetItemSource   )	variables)unimplemented)common_constant_typesistypenp   )typestrVariableTracker)InstructionTranslatorc                      ^  \ rS rSr\S\4S j5       rSU 4S jjrS rS\	4S jr
S rS r\S	 5       rS
SS\4S jr\S 5       r\S 5       rS rSS jr      SU 4S jjrS
SS\	SS4S jrSrU =r$ )ConstantVariable   returnc                    UR                  SS5      n[        U [        5      (       a<  U  Vs/ s H  n[        R	                  U5      PM     nn[
        R                  " U40 UD6$ [        U [        5      (       a<  U  Vs/ s H  n[        R	                  U5      PM     nn[
        R                  " U40 UD6$ [        U [        [        45      (       a|  / n[        U 5       H<  u  pSU(       a  [        X%5      OSnUR                  [        R	                  UUS95        M>     [
        R                  R                  [!        U 5      5      " U40 UD6$ [        U 40 UD6$ s  snf s  snf )a&  
Create a `ConstantVariable` based on the given value, and supports
automatic routing for collection types like `tuple` (in which case we'd
create `ConstantVariable` for the leaf items).

NOTE: the caller must install the proper guards if needed; most often
the guard will be `CONSTANT_MATCH`.
sourceNr   )get
isinstancesetr   creater	   SetVariable	frozensetFrozensetVariablelisttuple	enumerater   appendBaseListVariablecls_fortype)valuekwargsr   xitemsiitem_sources          _/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/torch/_dynamo/variables/constant.pyr   ConstantVariable.create   s9    Hd+ eS!!9>?A%,,Q/E?((9&99y))9>?A%,,Q/E?..u???e}--E!%(:@mF6d$++* ,  ) --55d5kB5SFSS000# @ @s   E=Ec                   > [         TU ]  " S0 UD6  [        R                  U5      (       d   S[	        U5       S35       e[
        b5  [        U[
        R                  5      (       a  UR                  5       U l	        g Xl	        g )Nz7
Cannot construct `ConstantVariable` for value of type a`  .

This failure likely due to PyTorch-internal use of `ConstantVariable` on
non-literal python values, please try using `VariableTracker.build` instead. If
you believe it's a necessary and legitimate use case (the value is immutable and
can't easily be represented with another `VariableTracker` class), please add
its type to `common_constant_types`.
 )
super__init__r   is_base_literalr&   r   r   numberitemr'   selfr'   r(   	__class__s      r-   r2   ConstantVariable.__init__5   sz    "6"//
 
 
	77;E{m D
	 
 >j		::DJJ    c                     U R                   $ Nr'   r7   s    r-   as_proxyConstantVariable.as_proxyG       zzr:   c                 t    S[        U R                  5      R                   S[        U R                  5       S3$ )NzConstantVariable(z: ))r&   r'   __name__reprr>   s    r-   __repr__ConstantVariable.__repr__J   s2    "4

#3#<#<"=RTZZ@P?QQRSSr:   c                     U R                   $ r<   r=   r>   s    r-   as_python_constant#ConstantVariable.as_python_constantM   rA   r:   c                     g)NTr0   r>   s    r-   is_python_constant#ConstantVariable.is_python_constantP   s    r:   c                      U R                  SS9$ )zb
Need this when adding a BaseListVariable and a ConstantVariable together.
Happens in detectron2.
N)tx)unpack_var_sequencer>   s    r-   r*   ConstantVariable.itemsS   s     ''4'00r:   rO   r   argc                 b    [         R                  U R                  UR                  5          5      $ r<   )r   r   r'   rI   )r7   rO   rR   s      r-   getitem_constConstantVariable.getitem_const[   s*    &&JJs--/0
 	
r:   c                 &    [        U 5      [        ;   $ r<   )r&   r   objs    r-   r3    ConstantVariable.is_base_literal`   s    Cy111r:   c                     [        U 5      [        [        [        [        [
        R                  4;   a  [        S U  5       5      $ [        R                  U 5      $ )Nc              3   L   #    U  H  n[         R                  U5      v   M     g 7fr<   )r   
is_literal).0r)   s     r-   	<genexpr>.ConstantVariable.is_literal.<locals>.<genexpr>g   s     Cs!'22155ss   "$)
r&   r    r!   r   r   torchSizeallr   r3   rW   s    r-   r\   ConstantVariable.is_literald   s?    9uc9ejjAACsCCC//44r:   c                      U R                  5        Vs/ s H  n[        R                  U5      PM     sn$ s  snf ! [         a  n[        UeS nAff = fr<   )rI   r   r   	TypeErrorNotImplementedError)r7   rO   r)   es       r-   rP   $ConstantVariable.unpack_var_sequencej   sN    	-8<8O8O8QR8Q1$++A.8QRRR 	-%1,	-s!   ; 6; ; 
AAAc                 ^    [        U R                  U5      n[        U5      (       a  [        eU$ r<   )getattrr'   callablerf   )r7   rO   namemembers       r-   const_getattrConstantVariable.const_getattrp   s(    T*F%%r:   r   c                 
  >^ SSK Jm  US:X  aV  [        U R                  [        5      (       a7  [
        R                  " [        R                  5      R                  X/UQU5      $ US:X  a  [        U R                  [        5      (       a  [        U5      S:X  a  [        U5      S:X  d   eUS   R                  U5      n U Vs/ s H  ofR                  5       PM     nn[        R                  U R                  R                  U5      5      $ [%        U4S jU 5       5      (       a?  [
        R                  " U R'                  5       U R                  5      R#                  XX45      $  U Vs/ s H  oR                  5       PM     n	nUR)                  5        V
Vs0 s H  u  pXR                  5       _M     nn
n[+        U R                  [        5      (       aS  U[        R,                  R/                  5       ;   a1  [1        U R                  U5      n[        R                  U" U	0 UD65      $ [+        U R                  [2        [4        45      (       Ga.  U(       d5  U(       d.  [        R                  [1        U R                  U5      " 5       5      $ [7        [8        U5      (       a  [        U5      S:X  a  US   R;                  5       (       a  U	S   n[1        [8        U5      n[+        U[<        R>                  [<        R@                  [<        RB                  45      (       a<  URD                  RG                  SXR                  U40 5      nTR                  UUU5      $ [        R                  U" U R                  U5      5      $ OV[+        U R                  [H        5      (       a7  US:X  a1  [1        U R                  U5      n[        R                  U" U	0 UD65      $ US	:X  a6  U(       d/  U(       d(  [        R                  [        U R                  5      5      $ US
:X  aa  [        U5      S:X  aR  US   R;                  5       (       a:  [        R                  [K        U R                  US   R;                  5       5      5      $ US:X  ag  [        U5      S:X  aX  US   R;                  5       (       a@  U(       a   eUS   R                  5       nUU R                  ;   n[        R                  U5      $ [M        S[O        U R                  5       SU 35        g s  snf ! [         a    [         TU ]E  XX45      s $ f = fs  snf s  snn
f ! [         a    [         TU ]E  XX45      s $ f = f)Nr   )SymNodeVariableformatjoinr   c              3   <   >#    U  H  n[        UT5      v   M     g 7fr<   )r   )r]   r)   rq   s     r-   r^   /ConstantVariable.call_method.<locals>.<genexpr>   s     <t!z!_--ts   call_functiondecode__len__	__round____contains__zconst method call .)(tensorrq   r   r'   strr	   BuiltinVariablerr   rv   lenforce_unpack_var_sequencerI   r   r   rs   rf   r1   call_methodanyr?   r*   r   __dict__keysrj   floatinthasattroperatorrL   r`   SymBoolSymFloatSymIntoutputcreate_proxybytesroundr
   r   )r7   rO   rl   argsr(   arg_unpackedr)   	arg_consta
const_argskvconst_kwargsmethod
add_targetopproxysearchresultrq   r8   s                      @r-   r   ConstantVariable.call_methodv   s5    	,8tzz3 7 7,,SZZ8FFMDM6  V^tzz3 7 7t9>c&kQ&6667<<R@LC=IJ\113\	J'..tzzy/IJJ <t<<<,,T]]_djjIUU$ 	?:>?$Q..0$J?BH,,.Q.$!A3355.LQ djj#&&43<<3D3D3F+FTZZ.F#**6:+N+NOO

UCL11F'..wtzz4/H/JKK$''ING..00']
Xt, M  II22'jj*-ErE +11"eZHH+222djj*3MNN

E**tx/?TZZ.F#**6:+N+NOO9df#**3tzz?;;[ SY!^Q8R8R8T8T#**djj$q'"<"<">?  ^#D	Q47;U;U;W;W:!W//1Ftzz)F#**622*74::+>*?qGHq K& Cw*2TBBC @Q" 	?7&r>>	?sT   ?T T/T &T8 *T-T8 T24T8 T T*)T*-T8 8UUrl   c                 l    [        U R                  U5      n[        R                  R	                  U5      $ r<   )r   r'   r	   r   r   )r7   rO   rl   r   s       r-   call_hasattrConstantVariable.call_hasattr   s)    T*))0088r:   r=   r   NrO   r   )r   zList[VariableTracker]r(   zDict[str, VariableTracker]r   r   )rD   
__module____qualname____firstlineno__staticmethodr   r   r2   r?   r}   rF   rI   rL   propertyr*   rT   r3   r\   rP   rn   r   r   __static_attributes____classcell__r8   s   @r-   r   r      s    1? 1 1@$T# T 1 1
 7 
o 

 2 2 5 5
-II &	II
 -II 
IIV96 9c 9FW 9 9r:   r   c                   `   ^  \ rS rSrS
U 4S jjr\S 5       rS rS\4S jr	S r
SS jrS	rU =r$ )EnumVariable   r   c                 2   > [         TU ]  " S0 UD6  Xl        g )Nr0   )r1   r2   r'   r6   s      r-   r2   EnumVariable.__init__   s    "6"
r:   c                     [        U[        R                  5      (       a;  [        U5       H,  nUR                  UR                  5       :X  d  M#  U " U40 UD6s  $    [        S5        g )Nz5Enum variable is constructed with non constant values)r   r	   r   r    r'   rI   r
   )clscls_typevalue_vtoptionsrm   s        r-   r   EnumVariable.create   sS    h	 : :;;x.<<8#>#>#@@v111 ) 	MNr:   c                     [        U R                  [        5      (       a  [        U R                  5      $ U R                  $ r<   )r   r'   r   r>   s    r-   r?   EnumVariable.as_proxy   s+    djj#&&tzz?"zzr:   c                 4    S[        U R                  5       S3$ )NzEnumVariable(rC   )r&   r'   r>   s    r-   rF   EnumVariable.__repr__   s    tDJJ/022r:   c                     U R                   $ r<   r=   r>   s    r-   rI   EnumVariable.as_python_constant   rA   r:   c                     [        U R                  U5      nU R                  =(       a    [        U R                  U5      n[        R
                  " XUS9$ )Nr   )rj   r'   r   r   r   build)r7   rO   rl   rm   r   s        r-   var_getattrEnumVariable.var_getattr   s>    T*>DKK!>$$R??r:   r=   r   r   )rD   r   r   r   r2   classmethodr   r?   r}   rF   rI   r   r   r   r   s   @r-   r   r      s@     O O
3# 3@ @r:   r   )r   typingr   r   r   r`   torch._dynamo.sourcer   r    r	   excr
   utilsr   r   r   baser   r   torch._dynamo.symbolic_convertr   r   r   r0   r:   r-   <module>r      sJ     , ,  :   5 5 * Dp9 p9f@? @r:   