
    sg                     *   d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
mZmZmZ d dlZd dlmZ d dlmc mZ ddlmZmZ ddlmZmZ ddlmZ ddlm Z  ddl!m"Z"m#Z# dd	l$m%Z% dd
l&m'Z'm(Z(m)Z)m*Z*m+Z+ ddlm,Z,m-Z-m.Z.m/Z/m0Z0 ddl1m2Z2 ddl3m4Z4m5Z5m6Z6m7Z7 ddl8m9Z9m:Z:m;Z; erd dl<m=Z=  G d d      Z> G d de2      Z? G d de2      Z@ G d de2      ZA G d deA      ZB G d de2      ZC G d deA      ZD G d d eA      ZE G d! d"e2      ZF G d# d$e2      ZG G d% d&e2      ZH G d' d(e2      ZI G d) d*e2      ZJd+ ZK G d, d-e2      ZLej                   G d. d/             ZN G d0 d1e;      ZO G d2 d3e;      ZP G d4 d5e2      ZQ G d6 d7e2      ZR G d8 d9e2      ZS G d: d;e2      ZT G d< d=e2      ZU G d> d?e2      ZV ej                  d@      dA        ZX G dB dCe2      ZY G dD dEe2      ZZ G dF dGe2      Z[ G dH dIe2      Z\ G dJ dKe2      Z] G dL dMe2      Z^ G dN dOe2      Z_ G dP dQe_      Z` G dR dSe_      Za G dT dUe_      Zb G dV dWe_      Zc G dX dYe_      Zdej                  ecej                  ecej                  ediZh G dZ d[e2      Zi G d\ d]e2      Zjy)^    N)DictListOptionalTYPE_CHECKING   )config	variables)create_call_functioncreate_instruction)$do_not_convert_to_tracable_parameterunimplemented)GuardBuilderinstall_guard)unpatched_nn_module_init)
AttrSourceDefaultsSourceGetItemSourceODictGetItemSource
TypeSource)check_unspec_or_constant_argsidentityis_tensor_base_attr_getterproxy_args_kwargsset_example_value   )VariableTracker)NestedUserFunctionVariableUserFunctionVariableUserMethodVariablewrap_bound_arg)call_random_fnis_standard_setattrUserDefinedObjectVariable)InstructionTranslatorc                       e Zd Zy)NO_SUCH_SUBOBJN)__name__
__module____qualname__     O/var/www/html/venv/lib/python3.12/site-packages/torch/_dynamo/variables/misc.pyr'   r'   3   s    r,   r'   c                        e Zd Zdhej                  Zdd fdZ fdZd fdZdddedd	fd
Z		 	 	 	 	 	 d fdZ
 xZS )SuperVariablespecializedreturnc                 N    t        |   di | || _        || _        || _        y Nr+   )super__init__typevarobjvarr0   )selfr6   r7   r0   kwargs	__class__s        r-   r5   zSuperVariable.__init__=   s-    "6" 
 &r,   c                     j                  fd        | j                         | j                  . | j                         j                  t	        dd             y j                  t	        dd             y )Nc                  B     t        j                  t                    S N)r	   BuiltinVariabler4   )r:   codegens   r-   <lambda>z+SuperVariable.reconstruct.<locals>.<lambda>K   s    gi.G.G.N&O r,   r   Fr   )add_push_nullr6   r7   extend_outputr
   )r8   r?   r:   s    `r-   reconstructzSuperVariable.reconstructJ   s`    OP;;"DKK !!"6q%"@A!!"6q%"@Ar,   txr%   c           	      l   | j                   sJ d       | j                  r$t        | j                  j	                         |      S | j                  j	                         }| j                   j                         }| j                   j                  rt        | j                   j                        nd }t        |t              r,| j                   j                  }| j                   j                  }d }d }d }|j                  }		 |	j                  |      dz   }
t        |
t!        |	            D ]X  }|	|   j"                  j%                  |t&              x}s)|t&        us2|r t)        t+        t)        |d      |      |      }||fc S  t-        d       y # t        $ r t        t        ||      |      d fcY S w xY w)Nz1-arg super not implementedr   __mro__zUnable to resolve super getattr)r7   r0   getattrr6   as_python_constantpython_typesourcer   
issubclasstypevaluerF   index
ValueErrorr4   rangelen__dict__getr'   r   r   r   )r8   rD   namesearch_typetype_to_usetype_to_use_sourcerJ   resolved_classresolved_attr
search_mrostart_indexrN   resolved_getattrr:   s                r-   _resolved_getattr_and_sourcez*SuperVariable._resolved_getattr_and_sourceS   s   {{999{4<<::<dCCll557 kk--/.2kk.@.@Jt{{))*d 	 k4(++++K!%!3!3 ((
	H$**;7!;K ;J8 	4E#-e#4#=#=#A#A$#WWW#>9)!+) *+=y I5 !	" ,V33	4 	78+  	H 5k:DA4GG	Hs   ?F !F32F3rT   r   c                 V   | j                  | |      \  }}t        j                  j                  |      st	        | |      S |rIt        |j                  t        j                               t        j                  j                  ||      S t        j                  j                  |      S )NrJ   )
r]   r	   ConstantVariable
is_literalGetAttrVariabler   
make_guardr   CONSTANT_MATCHcreate)r8   rD   rT   rM   rJ   s        r-   var_getattrzSuperVariable.var_getattr   s     99$Ev))44U;"4..&++L,G,GHI--44U64JJ))0077r,   c                    | j                  | |      \  }}|t        j                  u rt        t              S |t
        j                  j                  j                  u r| j                  }ddl	m
} t        |t        j                        rht        |j                  |      rR|sP|sNt               5  t        j                   t"        |      j%                  || j                  g|z   |      cd d d        S t'        d       n| j                  j(                  rA|t        j*                  u r/|j,                  j                  j/                  | j                        S t        |t0              rVt        |j2                  t4        j6                        r2t        j                   |j2                  |      j%                  |||      S t        |t8              rat        |j2                  t4        j6                        r=t        j:                  |j2                  | j                  |      j%                  |||      S t        |t4        j6                        r6t        j                   ||      j%                  || j                  g|z   |      S t        |t4        j<                        r=t        j:                  |j2                  | j                  |      j%                  |||      S |t>        j@                  jB                  u rt        | j                  t        j                        r| j                  j(                  rtE        |      dk(  rtE        |      dk(  r|d   jG                         rxddl$m%}	 |d   jM                         }
  |	|tO        | j                  j(                  |
            t>        j@                  jC                  | j                  jP                  |
            S |t>        j@                  jR                  t        jT                  fv r`t        | j                  t        jV                        r<|stE        |      dk(  sJ tX        t        jV                  | j                    |d||      S |t>        j@                  jB                  u rNt        | j                  t        jV                        r*tX        t        jV                  | j                    |d	||      S t]        |      r:t        | j                  t              r  | j                  j^                  |g|i |S |t        j`                  u r|d   }	 |jM                         }|j,                  j                  je                  | j                        st'        d| j                   d| d       |j,                  j                  jg                  | j                  |t        jh                                t        jj                  d       S t'        d|        y # 1 sw Y   xY w# tb        $ r t'        d
|        Y w xY w)Nr   )AttributeMutationNewr_   zsuper() nn.Module.__init__r   r   VariableBuilder__setitem____getitem__znon-const delattr attr: zdelattr(, z, ...)znon-function or method super: )6r]   objectr5   LambdaVariabler   torchnnModuler7   side_effectsrh   
isinstancer	   r$   mutable_localr   r   r   call_functionr   rJ   __new__output(track_object_new_from_user_defined_classstaticmethod__func__typesFunctionTypeclassmethodr    
MethodTypecollectionsOrderedDictrl   rQ   is_python_constantbuilderrj   rH   r   rM   rk   __setattr__CustomizedDictVariabler4   call_methodr#   method_setattr_standard__delattr__NotImplementedErroris_attribute_mutation
store_attrDeletedVariabler`   )r8   rD   rT   argsr9   inner_fnrJ   r7   rh   rj   keyattrr:   s               r-   r   zSuperVariable.call_method   s     <<T4H&v&!(++111[[F; 69#F#FGv335IJ9; F$990#mB(<fEF F
 :;[[H$>99))RR  ,/Ju115
 11!!&mBf-. +.:u114
 //!!4;;vmBf-. %"4"4511mB 4f=> %"2"23//!!4;;vmBf-. //;;;4;;	(K(KL""D	QFq Q**,0q',,.CS?2'9$++:L:Lc'RS''33DKK4E4EsK  ##//
 
 i&F&FG#d)q.00994;;SM4  00<<<KK99B
 994;;SM4  !*zKK20
 74;;66rKDKFKK+++7DA..0 99))??LRvVDEII""--T9#<#<#> --d336xjABYF FD ' A 8?@As   .:W&$W2 &W/2XX)NFr1   NrD   r%   r   List[VariableTracker]r9   Dict[str, VariableTracker]r1   r   )r(   r)   r*   r   _nonvar_fieldsr5   rC   r]   strrf   r   __classcell__r:   s   @r-   r/   r/   7   sz    		'	'N
'B19f85 8S 8EV 8"_C &	_C
 -_C 
_C _Cr,   r/   c                   &     e Zd Zd fdZd Z xZS )ExceptionVariablec                 @    t        |   di | || _        || _        y r3   )r4   r5   exc_typer   )r8   r   r   r9   r:   s       r-   r5   zExceptionVariable.__init__   s!    "6" 	r,   c                      j                   fd       j                   j                         j                  t	         j                        d       y )Nc                  P     j                  dj                  j                        S )Nbuiltins)load_import_fromr   r(   r?   r8   s   r-   r@   z/ExceptionVariable.reconstruct.<locals>.<lambda>  s    G,,Z9O9OP r,   F)rA   foreachr   rv   rQ   r8   r?   s   ``r-   rC   zExceptionVariable.reconstruct   s>    P	
 			"c$))ne4r,   r   )r(   r)   r*   r5   rC   r   r   s   @r-   r   r      s    
5r,   r   c                       e Zd ZdZy)UnknownVariablez
    It could be anything!
    Nr(   r)   r*   __doc__r+   r,   r-   r   r         r,   r   c                       e Zd ZdZy)DelayGraphBreakVariablez^
    Used to insert a dummy variable in the stack to do the graph break at CALL_FUNCTION.
    Nr   r+   r,   r-   r   r     r   r,   r   c                   B    e Zd ZdZd ZdddeddfdZ	 	 	 	 	 	 	 	 dd	Zy
)ComptimeVariableza
    This variable is special, it lets you execute arbitrary code at
    Dynamo compile time
    c                     t        d      )Nzcomptime is special form)r   r   s     r-   rC   zComptimeVariable.reconstruct  s    !"<==r,   rD   r%   rT   r1   r   c                 j    ddl m } ddlm}  |t        ||      t	        | j
                  |            S )Nr   )comptimer   )r   r_   )r   	functionsr   rG   r   rJ   )r8   rD   rT   r   r   s        r-   rf   zComptimeVariable.var_getattr  s.    ' 	4#Hd#Jt{{D,I
 	
r,   c                 p   ddl m} |rJ t        |      dk  sJ |d   }t        |t              r |j                          ||             nt        |t              r|j                         }|j                  rJ d|j                          t        j                  ||j                  |j                  j                         |j                  rt!        |j                  j"                        nd d      } | ||             nt%        dt'        |             t(        j*                  j-                  d       S )Nr   )ComptimeContextr   zOcomptime function must not have free variables, but these variables were free: r+   z"unsupported argument to comptime: )r   r   rQ   rt   r   get_functionr   get_codeclosureco_freevarsr|   r}   	f_globalsfn_namerH   defaultstupleitemsRuntimeErrorrL   r	   r`   re   )r8   rD   r   r9   r   fncodefuncs           r-   rv   zComptimeVariable.call_function&  s    	/ z4yA~~!Wb./BOOob1267;;=Dzz 2262B2B1CE> %%

--/,.KKbkk''(T D $%!CDH:NOO))0066r,   NrD   r%   r   r   r9   r   r1   r   )r(   r)   r*   r   rC   r   rf   rv   r+   r,   r-   r   r     sS    
>
5 
S 
EV 
'7#'7 &'7 -	'7
 
'7r,   r   c                   D     e Zd Zdhej                  Zd fdZd Z xZS )ClosureVariablerT   c                 2    t        |   di | || _        y r3   r4   r5   rT   r8   rT   r9   r:   s      r-   r5   zClosureVariable.__init__V      "6"	r,   c                 X    |j                  |j                  | j                               y r=   append_outputcreate_load_closurerT   r   s     r-   rC   zClosureVariable.reconstructZ      g99$))DEr,   r   r(   r)   r*   r   r   r5   rC   r   r   s   @r-   r   r   P  &    		'	'N
Fr,   r   c                   D     e Zd Zdhej                  Zd fdZd Z xZS )InlinedClosureVariablerT   c                 2    t        |   di | || _        y r3   r   r   s      r-   r5   zInlinedClosureVariable.__init__e  r   r,   c                 X    |j                  |j                  | j                               y r=   r   r   s     r-   rC   z"InlinedClosureVariable.reconstructi  r   r,   r   r   r   s   @r-   r   r   _  r   r,   r   c                         e Zd Zd fdZ xZS )NewCellVariablec                 $    t        |   di | y r3   r4   r5   r8   r9   r:   s     r-   r5   zNewCellVariable.__init__n      "6"r,   r   r(   r)   r*   r5   r   r   s   @r-   r   r   m      # #r,   r   c                         e Zd Zd fdZ xZS )NewGlobalVariablec                 $    t        |   di | y r3   r   r   s     r-   r5   zNewGlobalVariable.__init__s  r   r,   r   r   r   s   @r-   r   r   r  r   r,   r   c                        e Zd ZdZddhej
                  Zed        Zdeddf fdZd	d
de	ddf fdZ
	 	 	 	 	 	 d fdZd Z xZS )InspectSignatureVariablez!represents inspect.signature(...)	signature
parametersc                 t    |rt        d|        t        | t        j                  j	                               S )Nzinspect.signature with ru   )r   r   r	   baseMutableLocal)callabler9   s     r-   re   zInspectSignatureVariable.create  s4    3F8<='INN$?$?$A
 	
r,   	inspectedr1   Nc                 b   t        |   di | || _        t        | j                  t              ry| j                  j                         | _        t        j                  | j                        | _        t        | j                  j                  j                               dd  | _
        y t        | j                  t              rv| j                  j                         | _        t        j                  | j                        | _        t        | j                  j                  j                               | _
        y | j                  j                         | _        t        j                  | j                        | _        t        | j                  j                  j                               | _
        y )Nr   r+   )r4   r5   r   rt   r    r   r   inspectr   listr   r   r   rH   )r8   r   r9   r:   s      r-   r5   z!InspectSignatureVariable.__init__  s   "6""dnn&89nn113DG$..tww7DN"4>>#<#<#B#B#DEabIDO(<=nn113DG$..tww7DN"4>>#<#<#B#B#DEDOnn779DG$..tww7DN"4>>#<#<#B#B#DEDOr,   rD   r%   rT   r   c           
          |dk(  r`t        j                  | j                  D ci c]1  }t         j                  j	                  |d         t        |d         3 c}t              S t        | !  ||      S c c}w )Nr   r   r   )user_cls)	r	   ConstDictVariabler   r`   re   InspectParameterVariabledictr4   rf   )r8   rD   rT   paramr:   s       r-   rf   z$InspectSignatureVariable.var_getattr  s    <..
 "&	  ..55a/a9:   w"2t,,s   6A7c           
      t   |dk(  rt        | j                  d      st        d| j                   d        | j                  j                  |i |}i }| j                  j
                  rt        j                  t        |      }| j                  j
                  D ci c])  }|| j                  d nt        | j                  |d      + }	}| j                  j
                  j                         D 
ci c]  \  }}
| ||
|	|          }}}
t        |||       S t        | 9  ||||      S c c}w c c}
}w )	Nbind__kwdefaults__zinspect.signature.bind with z without __kwdefaults__)rD   T)is_kw)valrJ   )hasattrr   r   r   r   r   	functoolspartialr!   rJ   r   r   InspectBoundArgumentsVariabler4   r   )r8   rD   rT   r   r9   objr   wrapkkwdefaults_sourcesvr:   s              r-   r   z$InspectSignatureVariable.call_method  sJ    6>477$452477);RS &$..%%t6v6C Hww%% ((B?
 "WW33	&  {{* 'QdCD&" & !% 6 6 < < >1 t*<Q*?@@ 
 1 
 w"2tT6::!&s   .D/5D4c                     j                  fd        | j                         j                  t        dd             y )Nc                  n     j                   j                  t               j                  d      g      S )Nr   )rB   create_load_python_moduler   create_load_attrr?   s   r-   r@   z6InspectSignatureVariable.reconstruct.<locals>.<lambda>  s3    G))55g>,,[9 r,   r   F)rA   r   rB   r
   r   s    `r-   rC   z$InspectSignatureVariable.reconstruct  s:    	
 	21e<=r,   r   )r(   r)   r*   r   r   r   rz   re   r5   r   rf   r   rC   r   r   s   @r-   r   r   w  s    + 	 
	'	'N 
 
F/ F F"-5 -S -EV -"; &	";
 -"; 
";H
>r,   r   c                   8     e Zd ZdZd	 fdZdddeddfdZ xZS )
r   z!represents inspect.Parameter(...)r1   c                 2    t        |   di | || _        y r3   r4   r5   rM   r8   rM   r9   r:   s      r-   r5   z!InspectParameterVariable.__init__      "6"
r,   rD   r%   rT   r   c                    ddl m}m} 	 t        | j                  |      }| j
                  r%t        | j
                  |      }  |||      |      S |j                  ||      S # t        $ r t        d| j                   d| d       Y y w xY w)Nr   SourcelessBuilderrj   zgetattr(rm   ))
r   r  rj   rG   rM   rJ   r   re   AttributeErrorr   )r8   rD   rT   r  rj   
attr_valueattr_sources          r-   rf   z$InspectParameterVariable.var_getattr  s    ?	< T2J{{(d;7r;7
CC(//J?? 	<HTZZL4&:;	<s   AA# A# #%B
Br   )r(   r)   r*   r   r5   r   rf   r   r   s   @r-   r   r     s'    +<5 <S <EV <r,   r   c                        e Zd ZdZddhej
                  Zdej                  dee	ef   de
f fdZd Zdd	d
e	ddf fdZ	 	 	 	 	 	 d fdZd Z xZS )r   z+represents inspect.signature(...).bind(...)bound_argumentspacked_varsr   r   c           
      T   t        |   di | || _        || _        t	               | _        i }|j                  j                         D ]  \  }}t        j                  |      }t        |t              r=t        j                  t        |            ||<   | j
                  j                  |       it        |t              ri| j
                  j                  |       t        j                   |j                         D 	
ci c]  \  }	}
t        j                  |	      |
 c}
}	      ||<   t        |t"              r|||<   t%        d        t        j                   |t'        |j                        t        j(                  j+                               | _        || _        y c c}
}	w )NzKinspect.signature(...).bind(...).arguments contains non-variable/tuple/dictr   r+   )r4   r5   r  r   setr  	argumentsr   r	   r`   rt   r   TupleVariabler   addr   r   r   r   rL   r   r   bound_arguments_varr   )r8   r  r   r   r9   arguments_dictr   r   key_varr   r   r:   s              r-   r5   z&InspectBoundArgumentsVariable.__init__  s]    	"6". 5'11779 	HC005G#u%*3*A*A$s)*Lw'  $$S)C&  $$S)*3*E*EBE))+N$!QY//2A5N+w' C1*-w'a	$ $-#>#>**+#..557$
 
 # Os     F$c                    | j                   j                  j                         D ]  \  }}|}|j                  | j                  v rt	        |t
        j                        rt        |j                        }n]t	        |t
        j                        r8|j                  j                         D ci c]  \  }}|j                  | }}}nt        d       || j                  j                  |j                  <    y c c}}w )Nz>inspect.signature(...).bind(...) cannot update bound arguments)r  r   underlying_valuer  rt   r	   r  r   r   r   r  r  )r8   r   r   true_valr   r   s         r-   _update_bound_argumentsz5InspectBoundArgumentsVariable._update_bound_arguments  s    0066<<> 	LHCH##t'7'77c9#:#:;$SYY/HY%@%@ABE))//BST$!Q 2 2A 5THT!X DLD  **3+?+?@	L  Us   ,C8rD   r%   rT   r1   r   c                    |dk(  r| j                   S |dk(  rB| j                          t        j                  t	        | j
                  j                              S |dk(  ro| j                          | j
                  j                  j                         D ci c]  \  }}t        j                  |      | }}}t        j                  |      S |dk(  r| j                  S t        | 5  ||      S c c}}w )Nr  r   r9   r   )r  r  r	   r  r   r  r   r9   r   r`   r   r   r4   rf   )r8   rD   rT   r   r   kwr:   s         r-   rf   z)InspectBoundArgumentsVariable.var_getattr-  s    ;+++V^((***40D0D0I0I+JKKX((* !% 4 4 ; ; A A CC **3/4B  ..r22[ >>!w"2t,,s    C/c                 H   |dk(  r| j                   j                         D ]I  \  }}t        j                  |      }|| j                  vs*| j                  j                  |d||gi        K | j                          t        j                  d       S t        |   ||||      S )Napply_defaultsrk   )r   r   r	   r`   r  r   r  r4   )	r8   rD   rT   r   r9   r   r   r  r:   s	           r-   r   z)InspectBoundArgumentsVariable.call_method>  s     ## MM//1 S#44S9$":"::,,88MGS>2 ((*--d33w"2tT6::r,   c                 J     j                           fd}j                  |d       j                   j                  j                         j                  t        dt         j                  j                                      j                  j                  j                         D ]-  \  }}j                  j                  |              |       / j                  t        dt         j                  j                              t        dd      g       y )	Nc                  j      j                           j                   j                  d             y )Nr   )r   r   r  r   s   r-   gen_fnz9InspectBoundArgumentsVariable.reconstruct.<locals>.gen_fnZ  s(    DNN#!!'":":6"BCr,   Tcall_function_exBUILD_TUPLEarg	BUILD_MAPCALL_FUNCTION_EXr   )r  rA   r   r  r   r   r   rQ   r9   r   create_load_constrB   )r8   r?   r%  r   r   s   ``   r-   rC   z)InspectBoundArgumentsVariable.reconstructT  s     	$$&	D 	ft<,,112}#d6J6J6O6O2PQ	
 ,,3399; 	HC!!'";";C"@ACL	 	";C8L8L8S8S4TU"#51=	
r,   r   )r(   r)   r*   r   r   r   r   BoundArgumentsr   r   r   r5   r  rf   r   rC   r   r   s   @r-   r   r     s    5 	 
	'	'N%# //%# sO+,%# ,	%#NL-5 -S -EV -"; &	;
 -; 
;,
r,   r   c                 (      fd}t         |_        |S )Nc                  (     j                   | i |S r=   )apply)r   r9   fn_clss     r-   trampoline_autograd_applyzDproduce_trampoline_autograd_apply.<locals>.trampoline_autograd_applyq  s    v||T,V,,r,   )!produce_trampoline_autograd_apply_origin)r2  r3  s   ` r-   r4  r4  p  s    - )J%$$r,   c                   j     e Zd ZdZdhej
                  Zd fdZd	dZd	dZd	dZ		 	 	 	 d
dZ
 xZS )AutogradFunctionVariablez-represents a torch.autograd.Function subclassr2  c                 2    t        |   di | || _        y r3   )r4   r5   r2  )r8   r2  r9   r:   s      r-   r5   z!AutogradFunctionVariable.__init__  s    "6"r,   c           	         dfd}t        j                  |||f       rDt        j                         r/t        j
                  rddlm} ddlm	} | j                  j                  } || j                  j                        }|r1 || j                  j                  | j                  j                        }| j                  j                  }	|	t        j                  j                  j                  urt!        d       | j                  j"                  }
|
t        j                  j                  j"                  urt!        d       dd	lm} | j(                  }|Ct+        j-                  | j                  j.                        | j                  j0                        } ||| j                  j2                  |t+        |d
            j5                  ||      }| j(                  r~t+        | j(                  d      }t7        |j9                  t:        j<                               |r>t+        | j(                  d      }t7        |j9                  t:        j<                               |S | j(                  rt+        | j(                  d      }nd }| j                  j                  }t>        jA                  ||      }|g|}tC        |tD        jF                        r(tI        jJ                  ||      j5                  ||      S tC        |tD        jL                        rPtI        jN                  |jP                  tI        jR                  | j                        |      j5                  ||      S t!        d|        y )NFc                     t        | t        j                        r| j                  durdt        | t        j                        r| j                        rdy y y )NFT)rt   r	   TensorVariablerequires_gradNNModuleVariableis_training)noder<  rD   s    r-   visitz2AutogradFunctionVariable.call_apply.<locals>.visit  sS    $	 8 89%%U2$(M$	 : :;##B'$(M ( <r,   r   )#autograd_function_forward_rewritten)_is_setup_context_definedzNYI - User defind vjpzNYI - User defind jvpr   )AutogradFunctionApplyVariabler1  )memberr_   forwardsetup_contextz?non-function or method in subclass of torch.autograd.Function: )*r   r@  rp   is_grad_enabledr   capture_autograd_function"torch._functorch.autograd_functionrA  torch.autograd.functionrB  r2  rE  rF  vjpautogradFunctionr   jvphigher_order_opsrC  rJ   r   import_sourcer)   r(   backwardrv   r   rc   r   FUNCTION_MATCHAutogradFunctionContextVariablere   rt   r|   r}   r	   r   r   r    r{   UserDefinedClassVariable)r8   rD   r   r9   r@  rA  rB  
forward_fnis_setup_ctx_definedvjp_fnjvp_fnrC  rJ   r   fwd_srcsetup_ctx_srcr   ctxr<  s    `                @r-   
call_applyz#AutogradFunctionVariable.call_apply  s   	) 	edF^4 %%'00 J,,J#<T[[=V=V#W # AKK'')B)B
 [[__FU^^4488856[[__FU^^4488856G[[F~#$$T[[%;%;<dkk>R>R 0$$!&9	
 mBf-  {{$T[[)<g001L1LMN'$.t{{O$LM!-":":<;V;V"WXJ;;Y7FF[[  -44RvF|d|b%,,-11"VDRRD&  E,,-//224;;? mBf-	. QRTQUVr,   c                 |   | j                   j                  }t        | j                  d      | _        t	        |d   j
                        t        j                  j                  j                  u sJ t        |t        j                        sJ t        j                  || j                        j                  |||      S )NrQ  r   r_   )r2  rQ  r   rJ   rL   rM   rp   _dynamoexternal_utilsFakeBackwardCFunctionrt   r|   r}   r	   r   rv   )r8   rD   r   r9   r   s        r-   call_backwardz&AutogradFunctionVariable.call_backward  s    [[!! j9DGMM"emm&B&B&X&XXXX"e00111--bESSf
 	
r,   c                 ,    t        | j                        S r=   )r7  r2  r8   rD   r   r9   s       r-   rv   z&AutogradFunctionVariable.call_function  s    '44r,   c           
         ddl m} ddlm} |dk(  rj || j                        rEt        | j                        } || |j                  j                  d|gt        ||             S | j                  |||      S |dk(  r| j                  |||      S dd	lm } | j                  t        | j                  |      nd }		 t        j                  | j                  |      }
t#        |
t$              rx|
j'                  | j                        }|	3|j)                  |      j+                  ||	
      j-                  |||      S  |j)                  |      |      j-                  |||      S t#        |
t.              r3t1        j2                  |
j4                  | |	
      j-                  |||      S t7        d|        y # t         $ r d }
Y w xY w)Nr   )is_callable_allowedr   )wrap_fx_proxyr1  rv   )rD   proxyrQ  )trace_rulesr_   zUnsupported method: )rh  re  r   rf  r2  r4  rx   create_proxyr   r\  ra   rJ   r   r   getattr_staticr  rt   rz   __get__lookupcreate_with_sourcerv   r~   r	   r    r{   r   )r8   rD   rT   r   r9   re  rf  r3  rh  rJ   r   r   s               r-   r   z$AutogradFunctionVariable.call_method  s    	6*7?"4;;/,MKK-) %0"))00'1 +48  r488Z%%b$77&6:kk6MZT2SWF,,T[[$? #|,{{4;;/%#**40++D+@&r48 4;--d3D9GGD&  C- 33LL$v-D&12  4TF;<) " s   ? F9 9GGr   r   )r   r   r9   r   )r(   r)   r*   r   r   r   r5   r\  ra  rv   r   r   r   s   @r-   r7  r7  x  sO    7 			'	'N
[z
56= &	6=
 -6=r,   r7  c                   D    e Zd ZU  ej                  e      Zee   e	d<   y)SavedTensorBox)default_factorytensorsN)
r(   r)   r*   dataclassesfieldr   rr  r   r   __annotations__r+   r,   r-   rp  rp  '  s    %6[%6%6t%LGT/"Lr,   rp  c                        e Zd ZdZdddhej
                  Z	 	 	 	 	 	 d
	 d fdZeddd       Zd Z		 	 	 	 	 	 d fdZ
d fd	Z xZS )rS  zZ
    Tracks an autograd.Function() context using mutation tracking in side_effects.py
    rg  	inferencesaved_tensorsc                 p    t        	|   d||d| || _        || _        || _        || _        || _        y N)rM   
value_typer+   )r4   r5   rw  rg  rx  needs_input_gradnon_differentiable)
r8   rM   r{  rw  rg  rx  r|  r}  r9   r:   s
            r-   r5   z(AutogradFunctionContextVariable.__init__8  sB     	FuFvF"
* 0"4r,   c                    d }|r|st        d |D              }| j                  j                  dt        j                  j
                  j                  di       }| j                  j                  j                  d t        j                  j
                  j                  t        j                  t        d|t               |      i       }t        |j                  |j                         |S )Nc              3   l   K   | ],  }t        |t        j                        xr |j                   . y wr=   )rt   r	   r;  r<  .0xs     r-   	<genexpr>z9AutogradFunctionContextVariable.create.<locals>.<genexpr>N  s1      % 1i667KAOOK%s   24rv   r+   T)rw  rg  rx  r|  )r   rx   ri  rp   rL  functionFunctionCtxrs   track_object_newr   r   rS  rp  r   r?  rM   )rD   r   r9   r|  rg  outs         r-   re   z&AutogradFunctionContextVariable.createJ  s    $ %%   		&&U^^44@@"b
 ii$$55NN##///,.!1 
 	%**cii0
r,   c                 H    | j                   t        d       | j                   S )Nzproxy not set)rg  r   r8   s    r-   as_proxyz(AutogradFunctionContextVariable.as_proxye  s    ::/*zzr,   c                    |dk(  rt         |   ||||      S |dk(  rCt        |      dk(  sJ t        |i       d   | _        t
        j                  j                  d       S |dk7  rt        d|        | j                  t        d       | j                  s6| j                  r|rJ |j                  j                  j                  | |       t        | j                  j                        dkD  rg | j                  _        |D ]'  }| j                  j                  j!                  |       ) t
        j                  j                  d       S )Nr   mark_non_differentiabler   save_for_backwardz"autograd.Function context method: zCsave_for_backward only supported on a newly constructed FunctionCtx)r4   r   rQ   r   r}  r	   r`   re   r   rx  rw  rJ   rx   rs   track_save_for_backwardrr  append)r8   rD   rT   r   r9   r*  r:   s         r-   r   z+AutogradFunctionContextVariable.call_methodj  s4    = 7&r4v>>..v;!###&7b&A!&DD#--44T::&&>tfEF%U ~~;;v--II""::4F t!!))*Q.)+D& 	3C&&--c2	3))0066r,   c                     dv rt         fd      S dk(  r> j                  2t        j                  t	         j                  j
                              S dk(  r~ j                  )t        j                  j                   j                        S  j                  r=ddl
m}   |t         j                  d             j                  j                        S t         =        S )N)r  r  c                  ,    j                  | |      S r=   )r   )r   r9   rT   r8   rD   s     r-   r@   z=AutogradFunctionContextVariable.var_getattr.<locals>.<lambda>  s    (8(8T4(P r,   rx  r|  r   ri   )ro   rx  r	   r  r   rr  r|  r`   re   rJ   r   rj   r   rM   r4   rf   r8   rD   rT   rj   r:   s   ``` r-   rf   z+AutogradFunctionContextVariable.var_getattr  s    CC!P  ?"t'9'9'E**40B0B0J0J+KLL%%$$0 11889N9NOO{{4Wr:dkkCU+VWJJ//  w"2t,,r,   )NFNNNNr   NNr   r   )r(   r)   r*   r   r$   r   r5   rz   re   r  r   rf   r   r   s   @r-   rS  rS  ,  s    
 	 
#	1	1	N 5 
5$  4
7 &	7
 -7 
7@- -r,   rS  c                   >     e Zd ZdZ	 d	 d fdZ	 	 	 	 	 	 ddZ xZS )AutogradEngineVariablez;
    Represents a torch._C._ImperativeEngine instance.
    c                 *    t        |   d||d| y rz  r   )r8   rM   r{  r9   r:   s       r-   r5   zAutogradEngineVariable.__init__  s     	FuFvFr,   c                    |dk(  rt         j                  j                  j                  r|j                  sJ d       t        j                  t         j                  j                  j                  j                  | j                        j                  ||j                  j                  j                         g||      S t        d       y t        d|        y )Nqueue_callbackzXqueue_callback() is only supported when Compiled Autograd is enabled with fullgraph=Truer_   z#torch._C._ImperativeEngine method: )rp   r^  compiled_autogradcompiled_autograd_enabled	one_graphr	   r   r_  FakeCompiledAutogradEnginer  rJ   rv   rx   rs   get_ca_final_callbacks_varr   r8   rD   rT   r   r9   s        r-   r   z"AutogradEngineVariable.call_method  s     ##}}..HHLLnmn  55MM00KKZZ;;  -YY++FFHP4P n ?vFGr,   r=   r   r   r(   r)   r*   r   r5   r   r   r   s   @r-   r  r    sE     G
 
GH &	H
 -H 
Hr,   r  c                   8     e Zd Zd fdZ	 	 	 	 	 	 	 	 ddZ xZS )ro   c                 2    t        |   di | || _        y r3   )r4   r5   r   )r8   r   r9   r:   s      r-   r5   zLambdaVariable.__init__  s    "6"r,   c                 &     | j                   |i |S r=   )r   rc  s       r-   rv   zLambdaVariable.call_function  s     tww'''r,   r   r   )r(   r)   r*   r5   rv   r   r   s   @r-   ro   ro     s3    (#( &( -	(
 
(r,   ro   c                        e Zd Zdhej                  Zd fdZdefdZede	j                  j                  fd       Zd ZddZd	 Z	 	 	 	 	 	 	 	 ddZd
ee   deeef   def fdZ xZS )rb   rT   r1   c                     t        |   di | t        |t              sJ t        |t              sJ || _        || _        y r3   )r4   r5   rt   r   r   r   rT   )r8   r   rT   r9   r:   s       r-   r5   zGetAttrVariable.__init__  sA    "6"#///$$$$	r,   c                 h    | j                   j                   d| j                   d| j                   dS N(rm   r  )r:   r(   r   rT   r  s    r-   __str__zGetAttrVariable.__str__  s.    ..))*!DHH:R		{!DDr,   
base_proxyc                     t        | |      S r=   )rG   )r  r   s     r-   create_getattr_proxyz$GetAttrVariable.create_getattr_proxy  s    z4((r,   c                 r    t         j                  | j                  j                         | j                        S r=   )rb   r  r   r  rT   r  s    r-   r  zGetAttrVariable.as_proxy  s&    33DHH4E4E4GSSr,   c                    t        | j                  t        j                        st        |j
                  j                  | j                  j                        }| j                  |j                  vrt        t        j                  || j                        }||j                  vrt        t        j                  ||      S r=   )rt   r   r	   r=  r   rx   get_submodule
module_keyrT   rR   r   rk  )r8   rD   rT   step1step2s        r-   const_getattrzGetAttrVariable.const_getattr  s    $((I$>$>?%%		''(;(;<99ENN*%%&&udii8u~~%%%%%eT22r,   c                 |     || j                          |j                  |j                  | j                               y r=   )r   rB   create_load_attrsrT   r   s     r-   rC   zGetAttrVariable.reconstruct  s+    g77		BCr,   r   r9   c                 R    | j                   j                  || j                  ||      S r=   )r   r   rT   rc  s       r-   rv   zGetAttrVariable.call_function  s#     xx##B		4@@r,   c                    |dv r| j                   dk(  r|s|d   j                         rt        | j                  t        j
                  t        j                  t        j                  f      rp| j                  }|d   j                         }|j                  ||      r|j                  ||      S |dk(  rt        |      dk(  r|d   S t	        j                  d       S |dk(  r| j                   dk(  rt        |      dk(  r|d   j                         r|st        | j                  t        j
                  t        j                  t        j                  f      r[| j                  }|d   j                         }|j                  ||      rt	        j                  d      S t	        j                  d	      S t        | 9  ||||      S )
N)rl   rS   rR   r   rS   r   r   __contains__TF)rT   r   rt   r   r	   r$   r=  rT  rH   has_key_in_generic_dictrf   rQ   r`   r4   r   )r8   rD   rT   r   r9   r   r   r:   s          r-   r   zGetAttrVariable.call_method  s    **		Z'Q**,77..66 ((Cq',,.C**2s3r3// u}t9>7N$55d;; N"		Z'D	QQ**,77..66 ((Cq',,.C**2s3 11$77 11%88w"2tT6::r,   r   r   r   )r(   r)   r*   r   r   r5   r   r  rz   rp   fxProxyr  r  r  rC   rv   r   r   r   r   r   s   @r-   rb   rb     s    		'	'N
E E ) ) )T	3DA#A &A -	A
 
A8; ?#	8;
 S/)*8; 
8; 8;r,   rb   c                   H     e Zd Zd fdZ	 	 	 	 	 	 	 	 d fdZd Zd Z xZS )MethodWrapperVariablec                 2    t        |   di | || _        y r3   )r4   r5   method_wrapper)r8   r  r9   r:   s      r-   r5   zMethodWrapperVariable.__init__>  s    "6",r,   c                 .   t        | j                        rnt        |d   t        j                        rQt        |      dk(  rt        |      dk(  sJ |d   j                  || j                  j                  j                        S t        | )  |||       y )Nr   r   )r   r  rt   r	   r;  rQ   rf   __self__r(   r4   rv   )r8   rD   r   r9   r:   s       r-   rv   z#MethodWrapperVariable.call_functionB  s     &d&9&9:zGY--@
 t9>c&kQ&6667&&r4+>+>+G+G+P+PQQb$/r,   c                      yNTr+   r  s    r-   r   z(MethodWrapperVariable.is_python_constantQ      r,   c                     | j                   S r=   )r  r  s    r-   rH   z(MethodWrapperVariable.as_python_constantT  s    """r,   r   r   )r(   r)   r*   r5   rv   r   rH   r   r   s   @r-   r  r  =  s=    -0#0 &0 -	0
 
0#r,   r  c                   8     e Zd Zd fdZd fdZd Zd Z xZS )GetSetDescriptorVariablec                 2    t        |   di | || _        y r3   )r4   r5   desc)r8   r  r9   r:   s      r-   r5   z!GetSetDescriptorVariable.__init__Y  r   r,   c                     |dk(  rI| j                   r=ddlm}   ||t        | j                   d            | j                  j
                        S t        |   ||      S )Nrl  r   ri   )rJ   r   rj   r   r  rl  r4   rf   r  s       r-   rf   z$GetSetDescriptorVariable.var_getattr]  sV    90J?2z$++y'IJ		!!  7&r400r,   c                      yr  r+   r  s    r-   r   z+GetSetDescriptorVariable.is_python_constantg  r  r,   c                     | j                   S r=   )r  r  s    r-   rH   z+GetSetDescriptorVariable.as_python_constantj  s    yyr,   r   r   )r(   r)   r*   r5   rf   r   rH   r   r   s   @r-   r  r  X  s    1r,   r  c                        e Zd Zddhej                  Zdej                  ddf fdZd Zd Z	de
fdZdd	Zdd
Z xZS )PythonModuleVariablerM   is_torchr1   Nc                     t        |   di | || _        | j                  t        u xs% | j                  j                  j                  d      | _        y )Nztorch.r+   )r4   r5   rM   rp   r(   
startswithr  r  s      r-   r5   zPythonModuleVariable.__init__u  sD    "6"


e+Wtzz/B/B/M/Mh/Wr,   c                 "    t         j                  S r=   )r|   
ModuleTyper  s    r-   rI   z PythonModuleVariable.python_typez  s    r,   c                     | j                   S r=   rM   r  s    r-   rH   z'PythonModuleVariable.as_python_constant}      zzr,   c                 "    d| j                    dS )NzPythonModuleVariable(r  r  r  s    r-   __repr__zPythonModuleVariable.__repr__  s    &tzzl!44r,   c                 l    t        | j                  |      }t        j                  j	                  |      S r=   )r   rM   r	   r`   re   r8   rD   rT   results       r-   call_hasattrz!PythonModuleVariable.call_hasattr  s)    T*))0088r,   c                    |j                   j                  j                  | |      r&|j                   j                  j                  | |      S ddlm}m} | j                  s|| j                  j                  vrt        | j                  |      }n| j                  j                  |   }| j                  r%t        | j                  |      }  |||      |      S |j                  ||      S )Nr   r
  )rx   rs   has_pending_mutation_of_attr	load_attrr   r  rj   r  rM   rR   rG   rJ   r   re   )r8   rD   rT   r  rj   r  
new_sources          r-   rf   z PythonModuleVariable.var_getattr  s    99!!>>tTJ99))33D$???==D

(;(;; T2J,,T2J;;#DKK6J2?2z2:>>$++B
;;r,   r   )r(   r)   r*   r   r   r|   r  r5   rI   rH   r   r  r  rf   r   r   s   @r-   r  r  n  s\     
	'	'NXe.. XT X
 5# 59<r,   r  c                   :     e Zd Zd fdZ	 	 	 	 	 	 ddZd Z xZS )TypingVariablec                 2    t        |   di | || _        y r3   r  r  s      r-   r5   zTypingVariable.__init__  r  r,   c                     |dk(  rKt        |      dk(  r=t        j                  j                  | j                  |d   j                                  S t        d       y )Nrl   r   r   typing)rQ   r	   r`   re   rM   rH   r   r  s        r-   r   zTypingVariable.call_method  sR     = SY!^--44

475578  	hr,   c                     | j                   S r=   r  r  s    r-   rH   z!TypingVariable.as_python_constant  r  r,   r   r   )r(   r)   r*   r5   r   rH   r   r   s   @r-   r  r    s0      &	 
 -  
 r,   r  )maxsizec                      ddl m}  i }| j                         D ]H  \  }}|j                  j                         D ]&  \  }}t	        |      st        ||d       x}s"|||<   ( J |S )Nr   )NP_TO_TNP_MODULE)utilsr  r   rR   r   rG   )r  np_fn_to_tnp_fnnp_modtnp_modr   tnp_fnnp_fns          r-   get_np_to_tnp_mapr    sx    (O+113 4&//557 	4OGV $FGT::5:-3OE*	44 r,   c                        e Zd ZdZej
                  fZd	 fdZed        Z	ed        Z
	 	 	 	 	 	 	 	 d
dZ	 	 	 	 	 	 ddZd Z fdZ xZS )NumpyVariablezz
    Wrapper around `numpy.*`. Currently, is able to trace a small subset of numpy functions as well as numpy dtypes.
    c                 2    t        |   di | || _        y r3   r  r  s      r-   r5   zNumpyVariable.__init__  r  r,   c                     |j                   j                  d      }t        |      dk\  r
|d d ddgk(  sJ || j                  v S N.r   rp   _numpy)r)   splitrQ   constant_fold_functionsclsr   mods      r-   can_constant_fold_throughz'NumpyVariable.can_constant_fold_through  sJ    mm!!#&3x1}RaWh,?!???S0000r,   c                     |j                   j                  d      }t        |      dk\  r
|d d ddgk(  sJ t        j	                  |d       S r  )r)   r  rQ   np_constant_collections_maprS   r  s      r-    get_constant_collection_for_funcz.NumpyVariable.get_constant_collection_for_func  sL    mm!!#&3x1}RaWh,?!???*..r488r,   c                 
   t         j                  st        d| j                   d       ddlm} ddlm} t               j                  | j                        }|t        d| j                   d       | j                  |      x}	 e	  | | j                  |D cg c]  }|j                          c}i |j                         D 	
ci c]  \  }	}
|	|
j                          c}
}	      S |j                  dk(  rAt         j                   r1d|j"                   d}|dt         j                    z  }t        |       |j%                  |j                  ||      \  }}| j'                  |      rt)        ||      rt*        j,                  j/                   | j                         |D cg c]  }|j                          c}i |j                         D 	
ci c]  \  }	}
|	|
j                          c}
}	      S  |j0                  j2                  d ||      gt5        ||       }|j/                  ||      S c c}w c c}
}	w # t        $ r* t        | j                  j                   d	| d
|        Y y w xY wc c}w c c}
}	w )Nznumpy.z()r   )numpy_to_tensor_wrapperr   )NumpyNdarrayVariablezCan't find numpy function zM in torch._numpy.  Please file an issue to request support for this function.z with non-const args:  ztorch._numpy.randomz
delegate 'z' to NumPy itself via zconfg.use_numpy_random_stream=rv   )r   trace_numpyr   rM   r  r  tensorr  r  rS   r  rH   r   r   r(   r)   use_numpy_random_streamr*   
patch_argsr  r   r	   r`   re   rx   ri  r   )r8   rD   r   r9   r  r  r   collection_variable_typr  r   r   msgrg  s                r-   rv   zNumpyVariable.call_function  sk    !!F4::,b1230 "&&tzz2<,TZZL 9N N (,'L'LT'RR#
.DJJ:>?Q!..0?AGPA1a2244P  #8822"4#4#4"55KL78V8V7WXXc"/::4==$PVWLD&--d3-dF; !1188-D++-:>?Q!..0?AGPA1a2244P  +BII**'- #40E
 (..r599I @P ' zz**++A$qQ* @Ps<   	I H92I H>#	I 'I:I?9I 0I76I7c                     t        d       y )Nnumpyr   r  s        r-   r   zNumpyVariable.call_method  s     	gr,   c                     | j                   S r=   r  r  s    r-   rH   z NumpyVariable.as_python_constant   r  r,   c                     t         j                  r0t        | j                  t              r| j                  j
                  S t        |          S r=   )r   r  rt   rM   rL   r(   r4   r  )r8   r:   s    r-   r  zNumpyVariable.as_proxy#  s9    *TZZ"> ::&&&w!!r,   r   r   r   )r(   r)   r*   r   tnp
issubdtyper  r5   r~   r  r  rv   r   rH   r  r   r   s   @r-   r  r    s      #~~/ 1 1
 9 9
>:#>: &>: -	>:
 
>:@ &	
 - 
" "r,   r  c                   2     e Zd Zd fdZdefdZd Z xZS )NullVariabler1   c                 $    t        |   di | y r3   r   r   s     r-   r5   zNullVariable.__init__/  r   r,   c                      y)Nr  r+   r  s    r-   r  zNullVariable.__str__2  s    r,   c                 t    t         j                  dk  rt        d       |j                  t	        d             y )N)      z0cannot reconstruct NullVariable in < Python 3.11	PUSH_NULL)sysversion_infor   r   r   r   s     r-   rC   zNullVariable.reconstruct5  s-    g%LM0=>r,   r   )r(   r)   r*   r5   r   r  rC   r   r   s   @r-   r  r  .  s    # ?r,   r  c                       e Zd ZdZy)r   z"Marker used to implement delattr()Nr   r+   r,   r-   r   r   ;  s    ,r,   r   c                   d     e Zd ZdZdhej
                  Zed        Zd fdZde	fdZ
d Z xZS )	StringFormatVariablez[
    Represents a call to str.format(), we delay calling format until after the graph.
    format_stringc                    t        d t        j                  ||j                               D              r{t        j
                  j                   |j                  |D cg c]  }|j                          c}i |j                         D ci c]  \  }}||j                          c}}      S  | |t        |      t        |            S c c}w c c}}w )Nc              3   <   K   | ]  }|j                           y wr=   )r   r  s     r-   r  z.StringFormatVariable.create.<locals>.<genexpr>H  s!      
   "
s   )all	itertoolschainvaluesr	   r`   re   formatrH   r   r   r   )r  r  sym_args
sym_kwargsr   r   s         r-   re   zStringFormatVariable.createF  s     
__Xz/@/@/BC
 
 --44$$$6>?a**,?=G=M=M=OPTQq!..00P  =$x.$z2BCC	 @Ps   CCr1   c                 r    t        |   di | t        |t              sJ || _        || _        || _        y r3   )r4   r5   rt   r   r  r%  r&  )r8   r  r%  r&  r9   r:   s        r-   r5   zStringFormatVariable.__init__T  s9    "6"----* $r,   c                     | j                   j                   d| j                  d| j                  d| j                  dS r  )r:   r(   r  r%  r&  r  s    r-   r  zStringFormatVariable.__repr__[  sB    ..))*!D,>,>+ADMMCTTVW[WfWfViijkkr,   c                     j                   fdd        t        j                   j                                j                  j                         D ci c]%  \  }}t        j                  j                  |      |' }}} t        j                  |             j                  t        dd             y c c}}w )Nc                  z     j                   j                  j                         j                  d      g      S )Nr$  )rB   r-  r  r  r   s   r-   r@   z2StringFormatVariable.reconstruct.<locals>.<lambda>`  s9    G))--d.@.@A,,X6 r,   Tr&  r,  r   r)  )rA   r	   r  r%  r&  r   r`   re   r   r   r   )r8   r?   r   r   r9   s   ``   r-   rC   z StringFormatVariable.reconstruct^  s     " 	 	
 		''67@D@U@U@W
8<1I&&--a0!3
 
 		++F3401CKL	
s   *Cr   )r(   r)   r*   r   r   r   r~   re   r5   r   r  rC   r   r   s   @r-   r  r  ?  sJ     &G(F(FGND D%l# lMr,   r  c                   T     e Zd ZdZd fdZed        ZddZd Zed	d       Z	 xZ
S )
DebuggingVariablez
    Represents a call to a debugging function like print(), or something
    registered to config.reorderable_logging_functions.
    c                 2    t        |   di | || _        y r3   r  r  s      r-   r5   zDebuggingVariable.__init__v  r  r,   c                     t        |       xrR t        | t        j                  t        j                  f      xr& | t
        j                  j                  j                  v S r=   )	r   rt   r|   r}   BuiltinFunctionTyperp   r^  r   reorderable_logging_functions)r   s    r-   is_reorderable_logging_functionz1DebuggingVariable.is_reorderable_logging_functionz  sO     SM J3!3!3U5N5N OPJu}}++III	
r,   c           	          |j                   ry | j                  | j                  ||      st        d| j                   d| d| d       |j                  j                  | t        |      f       y )NzReordering debugging function z with inputs r  z is not yet implemented.)exportcan_reorder_logsrM   r   debug_localsr  r   rc  s       r-   rv   zDebuggingVariable.call_function  sk    99$$TZZv>0 =#fAfX-EG
 	d4j12r,   c                 8    | j                   j                  |      S r=   )rJ   rC   r   s     r-   rC   zDebuggingVariable.reconstruct  s    {{&&w//r,   c                     t         j                  t         j                  t        f}t	        j
                  ||g      }|D ]  }t        ||      r y y)zm
        Run some additional checks for what sort of function calls can we
        actually reorder.
        FT)r	   r;  r`   r  pytreetree_leavesrt   )r   r   r9   allowed_input_types	flat_argsr*  s         r-   r4  z"DebuggingVariable.can_reorder_logs  sY     $$&& 
 &&f~6	 	Cc#67	 r,   r   r   )r1   T)r(   r)   r*   r   r5   rz   r1  rv   rC   r4  r   r   s   @r-   r,  r,  p  s?    
 
 
30  r,   r,  c                   8     e Zd ZdZd fdZ	 	 	 	 	 	 ddZ xZS )LoggingLoggerVariablez<
    Represents a call to any of logging.Logger methods
    c                 $    t        |   di | y r3   r   r  s      r-   r5   zLoggingLoggerVariable.__init__  r   r,   c                 4    |j                   ry t        d       y )Nz)Logger not supported for non-export cases)r3  r   r  s        r-   r   z!LoggingLoggerVariable.call_method  s     99ABr,   r   r   r  r   s   @r-   r=  r=    s4    #
C &	
C
 -
C 

Cr,   r=  c                        e Zd ZdZd Z	 ddlmZmZ	m
Z d fdZd Zd	ee   d
eeef   defdZdddedefdZ xZS # e$ r  eddi       Z	 eddi       ZY Dw xY w)ConstantLikeVariablez8self.value is a compile-time constant, but not a literalr   )dtypefloatinggenericinvalid_typer+   r1   c                 2    t        |   di | || _        y r3   r  r  s      r-   r5   zConstantLikeVariable.__init__  r  r,   c                     | j                   S r=   r  r  s    r-   rH   z'ConstantLikeVariable.as_python_constant  r  r,   r   r9   c                 P   	 |D cg c]  }|j                          }}|j                         D ci c]  \  }}||j                          }	}} t        | j                  |      i 	}
t        j                  j                  |
      rt        j                  j                  |
      S t        |
t        j                        rt        |
      S t        | j                   d| d|
        y c c}w c c}}w # t        $ r$ t        | j                   d| d| d| d       Y w xY w)Nr  z(*z, **r  z() -> )rH   r   r   r   _error_prefixrG   rM   r	   r`   ra   re   rt   reMatchConstantRegexMatchVariable)r8   rD   rT   r   r9   r  cargsr   r   ckwargsr  s              r-   r   z ConstantLikeVariable.call_method  s   	O59:Q))+:E:=C\\^LTQq!..00LGL +T*E=W=%%008--44V<<fbhh'-f55++,AdV6&BC ;L" 	OT//0$r$tF81MN	Os,   C8 C-C8 C2C8 -C8 8*D%$D%rD   r%   rT   c                    t        | j                  |      }t        || j                        rt	        |      }t        || j
                        rt        |      S t        |t              r!t        || j                        rt        |      S t        j                  j                  |      rt        j                  j                  |      S t        | |      S r=   )rG   rM   rt   np_floatingfloatnp_dtypeNumpyDTypeVariablerL   rK   
np_genericr  r	   r`   ra   re   rb   r  s       r-   rf   z ConstantLikeVariable.var_getattr  s    T*fd../6]Ffdmm,%f--fd#
64??(K ((%%008--44V<<tT**r,   r   )r(   r)   r*   r   rI  r  rB  rR  rC  rP  rD  rT  ImportErrorrL   r5   rH   r   r   r   r   r   rf   r   r   s   @r-   rA  rA    s    B*M0	
 	
D ?#	D
 S/)*D 
D.+5 +S +_ +E  0>2r2B/0s   
> AArA  c                       e Zd ZdZy)RegexPatternVariablez
re.PatternNr(   r)   r*   rI  r+   r,   r-   rW  rW    s     Mr,   rW  c                       e Zd ZdZy)rL  zre.MatchNrX  r+   r,   r-   rL  rL    s    Mr,   rL  c                   $     e Zd ZdZd fdZ xZS )TorchVersionVariableztorch.__version__c                     |j                  dt        j                         |d   t        j                  u sJ t        |   di | y )NrM   r+   )
setdefaultrp   __version__r4   r5   r   s     r-   r5   zTorchVersionVariable.__init__  sA    '5#4#45g%"3"3333"6"r,   r   )r(   r)   r*   rI  r5   r   r   s   @r-   r[  r[    s    'M# #r,   r[  c                       e Zd ZdZy)NumpyTypeInfoVariableznp.iinfo/np.finfoNrX  r+   r,   r-   r`  r`    s    'Mr,   r`  c                       e Zd ZdZd Zy)rS  znp.dtype[...]c                 B    | j                   j                  j                  S )a0  Similar to how numpy dtype descriptors (e.g. np.float32 ) are handled by NumpyVariable:

        np.dtype() objects are serialized as strings, torch._numpy wrappers will normalize to the torch dtype.
        This also handles unsupported things nicely (i.e. structured arrays and object arrays).
        )rM   rL   r(   r  s    r-   r  zNumpyDTypeVariable.as_proxy  s     zz'''r,   N)r(   r)   r*   rI  r  r+   r,   r-   rS  rS    s    #M(r,   rS  c                   ,     e Zd ZdZd fdZddZ xZS )RandomClassVariablezrandom.Randomc                 $    t        |   di | y r3   r   r   s     r-   r5   zRandomClassVariable.__init__!  r   r,   c                    t        |      dkD  rt        d       n|rt        d       t        |      dk(  rt        j                  j	                  d       n|d   }t        |t        j                  j                               S )Nr   zrandom.Random() with > 1 argzrandom.Random() with kwargsr   )seedru   )rQ   r   r	   r`   re   RandomVariabler   r   )r8   rD   r   r9   rg  s        r-   rv   z!RandomClassVariable.call_function$  sc    t9q=8978:=d)q.y))006dSTg4y~~7R7R7TUUr,   r   r   )r(   r)   r*   r   r5   rv   r   r   s   @r-   rd  rd    s    #Vr,   rd  c                        e Zd ZdZdhej
                  Zh dZ	 	 ddeej                     dee   ddf fdZ
d	 Zd
 Zed        Zed        Zed        Zed        Zdee   deeef   def fdZd Z xZS )rh  zrandom.Random()

    Implemented by wrapping a VariableTracker around a random.Random object.
    The supported methods for the random.Random object cannot be overriden.
    Assumes that random objects behave the same given a set seed or state.
    random>   rj  randintuniform	randrangeNrandrg  r1   c                 0   t        |   di | |V| j                  |      sJ t        j                         | _        | j                  j                  |j                                y ||j                         nd }t        j                  |      | _        y r3   )r4   r5   is_supported_random_objrj  RandomsetstategetstaterH   )r8   rn  rg  r9   r:   s       r-   r5   zRandomVariable.__init__A  sy     	"6"//555 --/DKKK  1040@4**,dD ---DKr,   c                 "    t         j                  S r=   )rj  rq  r  s    r-   rI   zRandomVariable.python_typeP  s    }}r,   c                     | j                   S r=   )rj  r  s    r-   rH   z!RandomVariable.as_python_constantS  s    {{r,   c                    t        |       t        j                  uryt        j                  t
        j                  d      D ]  }t        | |      s yt        | |      }t        j                  |      r/|t        t        j                  |      j                  |       k7  s_ yt        |dd       t        t        j                  |      us y y)NF)rg  rs  rr  r{   T)rL   rj  rq  r!  r"  rh  _supported_fn_namesr   rG   r   	isbuiltinrl  )r   rT   meths      r-   rp  z&RandomVariable.is_supported_random_objV  s    9FMM)OO..0P
 	!D 3%3%D  &76==$7??DD 4T2'&--QU:VV 	! r,   c                     t        |       t        u sJ t        | d         t        u sJ t        | d         t        u sJ t        d | d   D              sJ | d   t        | d         t        u sJ y y )Nr   r   c              3   >   K   | ]  }t        |      t        u   y wr=   )rL   intr  s     r-   r  z-RandomVariable.check_state.<locals>.<genexpr>n  s     4a47c>4s   r   )rL   r   r|  r   rQ  )states    r-   check_statezRandomVariable.check_statei  s}    E{e###E!H~$$$E!H~&&&4584444Qx4a>U#:::#:r,   c                 h   t         j                  |        t        j                  t        j                  j                  | d         t        j                  | d   D cg c]!  }t        j                  j                  |      # c}      t        j                  j                  | d         g      S c c}w )Nr   r   r   )rh  r~  r	   r  r`   re   )r}  r  s     r-   
wrap_statezRandomVariable.wrap_stateq  s    ""5)&&**11%(;''CH8LaY//66q9L **11%(;
 	
 Ms   &B/c                 P    | j                         }t        j                  |       |S r=   )rH   rh  r~  )r}  	state_objs     r-   unwrap_statezRandomVariable.unwrap_state~  s$    ,,.	""9-r,   r   r9   c                    dk(  r|j                   j                  j                  |         | j                  j                  |D cg c]  }|j                          c}i |j                         D ci c]  \  }}||j                          c}} t        j                  j                  d       S dk(  r)| j                  | j                  j                               S dk(  rq|j                   j                  j                  |        | j                  j                  | j                  |d                t        j                  j                  d       S | j                  v r|j                   j                  j                  |        | j                  j                         fd} t        | j                        |D cg c]  }|j                          c}i |j                         D 	
ci c]  \  }	}
|	|
j                          c}
}	 t!        ||||      S t"        | I  |||      S c c}w c c}}w c c}w c c}
}	w )Nrg  rs  rr  r   c                  r    t        j                         }|j                          t        |      | i |S r=   )rj  rq  rr  rG   )r   r9   rrT   r}  s      r-   call_random_methz4RandomVariable.call_method.<locals>.call_random_meth  s3    MMO

5!'wq$'888r,   )rx   rs   mutationrj  rg  rH   r   r	   r`   re   r  rs  rr  r  rw  rG   r"   r4   r   )r8   rD   rT   r   r9   r  r   r   r  r   r   r}  r:   s     `        @r-   r   zRandomVariable.call_method  s    6>II""++D1DKK267Q!&&(7AGPXS#3..00P --44T::Z??4;;#7#7#9::ZII""++D1KK  !2!247!;<--44T::T---II""++D1KK((*E9 'GDKK&267Q!&&(79?HA1a**,,H
 ""&6fEEw"2tT6::7 8P* 8Hs   H45H9H?3Ic                 6   j                  fd       j                  dd       j                          j                  d        | j	                  | j
                  j                                      j                  dd       j                          y )Nc                  n     j                   j                  t               j                  d      g      S )Nrq  )rB   r  rj  r  r  s   r-   r@   z,RandomVariable.reconstruct.<locals>.<lambda>  s3    G))55f=,,X6 r,   r   Frr  r   T)rA   rv   dup_topr  r  rj  rs  pop_topr   s    `r-   rC   zRandomVariable.reconstruct  sz    	
 	a' 	*% 4 4 678a&r,   r  )r(   r)   r*   r   r   r   rw  r   rj  rq  r5   rI   rH   rz   rp  r~  r  r  r   r   r   r   rC   r   r   s   @r-   rh  rh  -  s     			'	'N
 )-*..v}}%. '.
 
.  $ ; ; 

 

  
%; ?#	%;
 S/)*%; 
%;Nr,   rh  )kr   rs  r   r   r!  rj  rJ  r  r|   r  r   r   r   r   torch._Crp   torch._numpyr  r  torch.utils._pytreer  _pytreer8  rj  r   r	   bytecode_transformationr
   r   create_parameter_opr   excr   guardsr   r   mutation_guardr   rJ   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   user_definedr"   r#   r$   torch._dynamo.symbolic_convertr%   r'   r/   r   r   r   r   r   r   r   r   r   r   r   r4  r7  	dataclassrp  rS  r  ro   rb   r  r  r  r  	lru_cacher  r  r  r   r  r,  r=  rA  rW  rL  r[  r`  rS  finfoiinforB  r  rd  rh  r+   r,   r-   <module>r     s         	 
  6 6   $ $   N F  0 5   "  Y X D	 	CO CD5 5o o :7 :7zFo FF_ F#o #
# #
]> ]>@< <*A
O A
H%l= l=^ M M Mn-&? n-b&H6 &HR(_ (f;o f;R#O #6 ,(<? (<V_ , Q   j"O j"\
?? 
?-o -.M? .Mb4 4nCO C*7+? 7+t!/ !!5 #/ #(0 (	(- 	( II$II$II! V/ VN_ Nr,   