
    sh                        S r SSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
JrJr  SSKrSSKJr  SSKJs  Jr  SSKJrJr  SSKJrJr  SSKJr  SSKJrJ r   SS	K!J"r"J#r#  SS
K$J%r%  SSK&J'r'J(r(J)r)J*r*J+r+  SSKJ,r,J-r-J.r.J/r/J0r0J1r1J2r2J3r3J4r4  SSK5J6r6  SSK7J8r8  SSK9J:r:J;r;  SSK<J=r=J>r>J?r?  \(       a  SSK@JArA   " S S5      rB " S S\65      rC " S S\65      rD " S S\65      rE " S S\E5      rF " S S\65      rG " S S \65      rH " S! S"\65      rIS# rJ " S$ S%\65      rK\R                   " S& S'5      5       rM " S( S)\?5      rN " S* S+\?5      rO " S, S-\65      rP " S. S/\65      rQ " S0 S1\65      rR " S2 S3\65      rS " S4 S5\65      rT " S6 S7\65      rU\R                  " SS89S9 5       rW\R                  " SS89S: 5       rX " S; S<\65      rY " S= S>\65      rZ " S? S@\65      r[ " SA SB\65      r\ " SC SD\65      r] " SE SF\65      r^ " SG SH\65      r_ " SI SJ\_5      r` " SK SL\_5      ra " SM SN\_5      rb " SO SP\_5      rc " SQ SR\_5      rd\R                  \c\R                  \c\R                  \d0rh " SS ST\65      ri " SU SV\65      rj " SW SX\65      rkg)Ya  
This module contains miscellaneous variable tracker implementations for various Python types
and features used in Dynamo's symbolic execution. These classes help track and propagate
information about different kinds of variables during graph capture.

Key classes include:
- SuperVariable: Handles super() calls and method resolution
- ExceptionVariable: Tracks exception objects
- RandomVariable: Manages random number generators
- GetAttrVariable: Tracks attribute access
- MethodWrapperVariable: Handles method wrappers
- PythonModuleVariable: Tracks Python modules
- NumpyVariable: Handles numpy functions and types
- StringFormatVariable: Manages string formatting
- DebuggingVariable: Handles print and logging
    N)OptionalTYPE_CHECKING   )config	variables)create_call_functioncreate_instruction)$do_not_convert_to_tracable_parameter)raise_observed_exceptionunimplemented)GuardBuilderinstall_guard)unpatched_nn_module_init)
AttrSourceGenericAttrSourceGetItemSource
TypeSourceWeakRefCallSource)	check_unspec_or_constant_argscmp_name_to_op_mappingidentityis_tensor_base_attr_getteristypelist_methodsproxy_args_kwargsset_example_valuetuple_methods   )VariableTracker)ConstantVariable)NestedUserFunctionVariableUserFunctionVariable)call_random_fnis_standard_setattrUserDefinedObjectVariable)InstructionTranslatorc                       \ rS rSrSrg)NO_SUCH_SUBOBJE    N)__name__
__module____qualname____firstlineno____static_attributes__r*       p/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/torch/_dynamo/variables/misc.pyr(   r(   E   s    r0   r(   c                      ^  \ rS rSr1 \R
                  krSSU 4S jjjrU 4S jrSU 4S jjrSSS\	SS	4S
 jr
      SS jrSrU =r$ )SuperVariableI   returnc                 >   > [         TU ]  " S0 UD6  Xl        X l        g Nr*   )super__init__typevarobjvar)selfr:   r;   kwargs	__class__s       r1   r9   SuperVariable.__init__N   s!    "6" 
 r0   c                   >^ TR                  UU4S j5        T" U R                  5        U R                  b.  T" U R                  5        TR                  [	        SS5      5        g TR                  [	        SS5      5        g )Nc                  D   > T" [         R                  " [        5      5      $ N)r   BuiltinVariabler8   )r>   codegens   r1   <lambda>+SuperVariable.reconstruct.<locals>.<lambda>[   s    gi.G.G.N&Or0   r   Fr   )add_push_nullr:   r;   extend_outputr   )r<   rD   r>   s    `r1   reconstructSuperVariable.reconstructZ   s`    OP;;"DKK !!"6q%"@A!!"6q%"@Ar0   txr&   c           	      :  > U R                   (       d   S5       eU R                  R                  5       nU R                   R                  5       nU R                   R                  (       a  [        U R                   R                  5      OS n[        U[        5      (       a,  U R                   R                  nU R                   R                  nS nUR                  n UR                  U5      S-   n[        U[        U5      5       Hc  n	Xy   R                   R#                  U[$        5      =n
(       d  M.  U
[$        Ld  M9  U(       a   ['        [)        ['        US5      U	5      U5      nX4s  $    [+        S5        g ! [         a    [        [        X45      U5      S 4s $ f = f)Nz1-arg super not implementedr   __mro__zUnable to resolve super getattr)r;   r:   as_python_constantpython_typesourcer   
issubclasstypevaluerM   index
ValueErrorgetattrr8   rangelen__dict__getr(   r   r   r   )r<   rK   namesearch_typetype_to_usetype_to_use_sourcerP   
search_mrostart_indexrT   resolved_getattrr>   s              r1   _resolved_getattr_and_source*SuperVariable._resolved_getattr_and_sourcec   sc   {{999{ll557 kk--/.2kk.@.@Jt{{))*d 	 k4((++++K!%!3!3 ((
	H$**;7!;K ;J8E#-#4#=#=#A#A$#WWW#>9)!+) *+=y I5 !	" ,33 9 	78+  	H 5:DA4GG	Hs   E6 6!FFr[   r   c                    U R                  X5      u  p4[        R                  R                  U5      (       d  [	        X5      $ U(       a(  [        UR                  [        R                  5      5        [        R                  R                  X4S9$ )NrP   )
rb   r   r    
is_literalGetAttrVariabler   
make_guardr   CONSTANT_MATCHcreate)r<   rK   r[   rS   rP   s        r1   var_getattrSuperVariable.var_getattr   sn     99$E))44U;;"4..&++L,G,GHI))000FFr0   c                    U R                  X5      u  pVU[        R                  L a  [        [        5      $ U[
        R                  R                  R                  L a  U R                  nSSK	J
n  [        U[        R                  5      (       at  [        UR                  U5      (       aY  U(       dR  U(       dK  [        5          [        R                   " ["        US9R%                  XR                  /U-   U5      sS S S 5        $ ['        S5        GOU R                  R(                  (       a  [+        US5      (       a  UR,                  S:X  a  [        R.                  R1                  U5      (       aw  UR2                  n	[+        U	S5      (       a'  U	R4                  S:X  a  [        R6                  " U	5      n
O UR8                  n[        R.                  " XS9n
U
R;                  USX45      $ [        U[<        5      (       aX  [        UR>                  [@        RB                  5      (       a/  [        R                   " UR>                  US9R%                  XU5      $ [        U[D        5      (       ac  [        UR>                  [@        RB                  5      (       a:  [        RF                  " UR>                  U R                  US9R%                  XU5      $ [        U[@        RB                  5      (       a2  [        R                   " XVS9R%                  XR                  /U-   U5      $ [        U[@        RH                  5      (       a:  [        RF                  " UR>                  U R                  US9R%                  XU5      $ [K        U5      (       a?  [        U R                  [        5      (       a   U R                  RL                  " U/UQ70 UD6$ U[        RN                  L a  US	   n URQ                  5       nURT                  R                  RW                  U R                  5      (       d  ['        SU R                   SU S35        URT                  R                  RY                  U R                  U[        RZ                  " 5       5        [        R\                  " S 5      $ [        U R                  [        R^                  5      (       a?  XPR                  R`                  ;   a&  U R                  Rb                  R;                  XX45      $ [        U R                  [        Rd                  5      (       a0  U[f        ;   a&  U R                  Rh                  R;                  XX45      $ [        U R                  [        Rj                  5      (       a0  U[l        ;   a&  U R                  Rn                  R;                  XX45      $ U[        Rp                  L Ga   US	   Rr                  nURT                  R                  Ru                  U R                  U5      (       a`  URT                  R                  Rw                  U R                  USS9n[        U[        RZ                  5      (       a  [y        [z        U5        U$  [        Rq                  U R                  Rr                  U5      nS nU R                  R(                  b   [}        U R                  R(                  U5      n[~        R                  " UWU5      $ ['        SU 35        g ! , (       d  f       N= f! [R         a    ['        S
U 35         GN3f = f! [z         a    [y        [z        U5         Nf = f)Nr   )AttributeMutationNewre   zsuper() nn.Module.__init__r+   __new__r,   builtinsr   znon-const delattr attr: zdelattr(, z, ...)T)
deleted_okznon-function or method super: )Arb   objectr9   LambdaVariabler   torchnnModuler;   side_effectsrn   
isinstancer   r%   mutation_typer
   r"   r   call_functionr   rP   hasattrr+   UserDefinedClassVariableis_supported_new_method__self__r,   rC   membercall_methodstaticmethod__func__typesFunctionTypeclassmethodUserMethodVariable
MethodTyper$   method_setattr_standard__delattr__rN   NotImplementedErroroutputis_attribute_mutation
store_attrDeletedVariabler    UserDefinedDictVariable_dict_methods_dict_vtUserDefinedTupleVariabler   	_tuple_vtUserDefinedListVariabler   _list_vt__getattribute__rS   has_pending_mutation_of_attr	load_attrr   AttributeErrorr   r   build)r<   rK   r[   argsr=   inner_fnrP   r;   rn   user_clsuser_cls_vtuser_cls_sourceattr	attr_nameresult
attr_valueattr_sources                    r1   r   SuperVariable.call_method   s     <<THv&!(++111[[F; 69#F#FGGv335IJJ9;$990#mB(<fE <;
 :;KK*--!!Y.22JJ8TT((Hx..83F3F*3T'77A"(--'@@ **2y$GG,//Ju115
 5
 11!!&mBf-. +..:u114
 4
 //!!4;;vmBf-. %"4"45511mB 4f=> %"2"233//!!4;;vmBf-. !**zKK20
 0
 ;;66rKDKFKK+++7DA..0 99))??LLRvVDEII""--T9#<#<#> --d33t{{I$E$EFFKK555;;''33BdKKt{{I$F$FGGM);;((44RtLLt{{I$E$EFFL(;;''33BdKK000 QIyy%%BBY  //99KKt :  fi&?&?@@,^R@=#44T[[5F5F	R
 K{{!!-/0B0BIN"((ZEE6xjABG <;b ' A 8?@AR " =(<=s0   7[4\ **\$ 4
\\! \!$] ])r;   r:   rB   r5   NrK   r&   r   list[VariableTracker]r=   dict[str, VariableTracker]r5   r   )r+   r,   r-   r.   r   _nonvar_fieldsr9   rI   rb   strrk   r   r/   __classcell__r>   s   @r1   r3   r3   I   s    		'	'N
 
B-9^G5 GS GEV G vC &	vC
 -vC 
vC vCr0   r3   c                   z   ^  \ rS rSrSU 4S jjrSS jrS rS rSSS\S	\4S
 jr	U 4S jr
U 4S jrS r\rSrU =r$ )ExceptionVariablei  c                    > [         TU ]  " S0 UD6  Xl        X l        [	        S 5      U l        [	        S 5      U l        [	        S5      U l        [	        S 5      U l        g )NFr*   )	r8   r9   exc_typer   r    __context__	__cause____suppress_context____traceback__)r<   r   r   r=   r>   s       r1   r9   ExceptionVariable.__init__  sV    "6" 	 ,D1 *$/$4U$;! .d3r0   c                     Xl         g rB   )r   )r<   contexts     r1   set_contextExceptionVariable.set_context.  s    "r0   c                   ^ ^ TR                  UU 4S j5        TR                  T R                  5        TR                  [	        T R                  5      S5        S[
        SS 4UU 4S jjnU" S5        U" S5        U" S5        g )	Nc                  P   > T R                  STR                  R                  5      $ )Nrp   )load_import_fromr   r+   rD   r<   s   r1   rE   /ExceptionVariable.reconstruct.<locals>.<lambda>3  s    G,,Z9O9OPr0   Fr[   r5   c                 
  > [        TU 5      n[        U[        5      (       a  UR                  S;   d   U5       eg TR	                  5         T" U5        TR                  TR                  S5      5        TR                  U 5        g )N)TFNr   )rV   r   r    rS   dup_toprH   rot_nr   )r[   r   rD   r<   s     r1   codegen_attr3ExceptionVariable.reconstruct.<locals>.codegen_attr8  sk    4&Dd,--zz%88>$>8!%%gmmA&67""4(r0   r   r   r   )rG   foreachr   r{   rX   r   )r<   rD   r   s   `` r1   rI   ExceptionVariable.reconstruct1  sq    P	
 			"c$))ne4	)s 	)t 	) 	) 	]#[!+,r0   c                     U R                   $ rB   )r   r<   s    r1   rO   ExceptionVariable.python_typeF  s    }}r0   rK   r&   name_varvalc                   ^ U4S jnUR                  5       nUS:X  a  U R                  U5        GO/US:X  a  [        U[        5      (       a  UR                  bM  [        U[
        R                  [
        R                  [
        R                  [
        R                  45      (       a"  X0l
        [
        R                  " S5      U l        OU" S5        OUS:X  a5  [        U[        5      (       a  UR                  S;   a  X0l        O]U" S5        OTUS:X  a<  [        U[        5      (       a  UR                  c  X0l        O%[        S	U S
U S35        O[        S	U S
U S35        [
        R                  " S 5      $ )Nc                 8   > [        [        T[        U 5      /S9  g )N)r   )r   	TypeErrorr    )msgrK   s    r1   raise_error3ExceptionVariable.call_setattr.<locals>.raise_errorO  s    $Y:J3:O9PQr0   r   r   Tz9exception cause must be None or derive from BaseExceptionr   )TFr   zsetattr(ExceptionVariable, rq   ))rN   r   ry   r    rS   r   rC   r   !UserDefinedExceptionClassVariable"UserDefinedExceptionObjectVariabler   r   r   r   )r<   rK   r   r   r   r[   s    `    r1   call_setattrExceptionVariable.call_setattrI  sB   	R **,= S![ 3 011cii6GJ--//??@@	M M "%,5,F,Ft,L)WX++#/00SYY-5O,/)WX_$#/00SYY5F%(" ;H:RuANO7zC5JK))$//r0   c                    > US:X  a  U R                   " U/UQ76 $ US:X  a"  Uu  nU R                  U[        S5      U5        U $ [        TU ]  XX45      $ )N__setattr__with_tracebackr   )r   r    r8   r   )r<   rK   r[   r   r=   tbr>   s         r1   r   ExceptionVariable.call_methodq  s`    = $$R/$//%%DRb"2?"CRHK7&r>>r0   c                 $  > US:X  a  U R                   $ US:X  a  U R                  $ US:X  a  U R                  $ US:X  a  [        R                  " S 5      $ US:X  a)  [        R
                  " U R                  U R                  S9$ [        TU ]%  X5      $ )Nr   r   r   r   r   re   )
r   r   r   r   r    ListVariabler   rP   r8   rk   )r<   rK   r[   r>   s      r1   rk   ExceptionVariable.var_getattr{  s    = ###[ >>!++,,,_$--d33V^))$))DKKHHw"2,,r0   c                 N    U R                   R                   SU R                   S3$ )N(r   )r>   r+   r   r   s    r1   __str__ExceptionVariable.__str__  s$    ..))*!DMM?!<<r0   )r   r   r   r   r   r   r   )r   r   )r+   r,   r-   r.   r9   r   rI   rO   r   r   r   rk   r   __repr__r/   r   r   s   @r1   r   r     sO    4"#-*&0#&0 "&0 	&0P?-= Hr0   r   c                       \ rS rSrSrSrg)UnknownVariablei  z
It could be anything!
r*   Nr+   r,   r-   r.   __doc__r/   r*   r0   r1   r   r         r0   r   c                       \ rS rSrSrSrg)DelayGraphBreakVariablei  zV
Used to insert a dummy variable in the stack to do the graph break at CALL_FUNCTION.
r*   Nr   r*   r0   r1   r   r     r   r0   r   c                   N    \ rS rSrSrS rSSS\SS4S	 jr        SS
 jrSr	g)ComptimeVariablei  zU
This variable is special, it lets you execute arbitrary code at
Dynamo compile time
c                     [        S5      e)Nzcomptime is special form)r   r<   rD   s     r1   rI   ComptimeVariable.reconstruct  s    !"<==r0   rK   r&   r[   r5   r   c                 b    SSK J n  SSKJn  U" [        X25      [	        U R
                  U5      S9$ )Nr   )comptimer   )r"   re   )r   	functionsr"   rV   r   rP   )r<   rK   r[   r   r"   s        r1   rk   ComptimeVariable.var_getattr  s,    ' 	4#H#Jt{{D,I
 	
r0   c                    SSK Jn  U(       a   e[        U5      S::  d   eUS   n[        U[        5      (       a  UR                  5       " U" U5      5        O[        U[        5      (       a  UR                  5       nUR                  (       a   SUR                   35       e[        R                  " UUR                  UR                  R                  5       UR                  (       a  [!        UR                  R"                  5      OS S5      nU" U" U5      5        O[%        S['        U5       35      e[(        R*                  R-                  S 5      $ )Nr   )ComptimeContextr   zOcomptime function must not have free variables, but these variables were free: r*   z"unsupported argument to comptime: )r   r   rX   ry   r"   get_functionr!   get_codeclosureco_freevarsr   r   	f_globalsfn_namerN   defaultstupleitemsRuntimeErrorrR   r   r    rj   )r<   rK   r   r=   r   fncodefuncs           r1   r{   ComptimeVariable.call_function  s    	/ z4yA~~!Wb.//OOob12677;;=Dzz 2262B2B1CE> %%

--/,.KKbkk''(T D $%!CDH:NOO))0066r0   r*   NrK   r&   r   r   r=   r   r5   r   )
r+   r,   r-   r.   r   rI   r   rk   r{   r/   r*   r0   r1   r   r     sS    
>
5 
S 
EV 
'7#'7 &'7 -	'7
 
'7r0   r   c                   f   ^  \ rS rSr% \\   \S'   Sr\\   \S'    SS\\   SS4U 4S jjjr	Sr
U =r$ )	CellVariablei  pre_existing_contentsN
local_namer5   c                 2   > [         TU ]  " S0 UD6  Xl        g r7   )r8   r9   r	  )r<   r	  r=   r>   s      r1   r9   CellVariable.__init__  s     	"6"%:"r0   )r	  rB   )r+   r,   r-   r.   r   r   __annotations__r
  r   r9   r/   r   r   s   @r1   r  r    sF     $O44 !%J$ BF;%-o%>;	; ;r0   r  c                   ,   ^  \ rS rSrSU 4S jjrSrU =r$ )NewGlobalVariablei  c                 &   > [         TU ]  " S0 UD6  g r7   r8   r9   r<   r=   r>   s     r1   r9   NewGlobalVariable.__init__      "6"r0   r*   r   )r+   r,   r-   r.   r9   r/   r   r   s   @r1   r  r    s    # #r0   r  c                 *   ^  U 4S jn[         Ul        U$ )Nc                  (   > TR                   " U 0 UD6$ rB   )apply)r   r=   fn_clss     r1   trampoline_autograd_applyDproduce_trampoline_autograd_apply.<locals>.trampoline_autograd_apply  s    ||T,V,,r0   )!produce_trampoline_autograd_apply_origin)r  r  s   ` r1   r  r    s    - )J%$$r0   c                   ~   ^  \ rS rSrSrS1\R                  krS
U 4S jjrSS jrSS jr	SS jr
    SS jrS	rU =r$ )AutogradFunctionVariablei  z-represents a torch.autograd.Function subclassr  c                 2   > [         TU ]  " S0 UD6  Xl        g r7   )r8   r9   r  )r<   r  r=   r>   s      r1   r9   !AutogradFunctionVariable.__init__   s    "6"r0   c           
        ^^ SmUU4S jn[         R                  " XBU45        T(       Gam  [        R                  " 5       (       GaR  [        R
                  SL a  [        R                  " S5        SSKJ	n  SSK
Jn  U R                  R                  nU" U R                  R                  5      nU(       a1  U" U R                  R                  U R                  R                  5      nU R                  R                  n	U	[        R                   R"                  R                  La  [%        S5        U R                  R&                  n
U
[        R                   R"                  R&                  La  [%        S5        S	S
KJn  U R,                  nUcC  [/        TR1                  U R                  R2                  5      U R                  R4                  5      nU" UU R                  R6                  U[/        USS9S9R9                  TX#5      nU R,                  (       a  [/        U R,                  S5      n[;        UR=                  [>        R@                  5      5        U(       a>  [/        U R,                  S5      n[;        UR=                  [>        R@                  5      5        U$ U R,                  (       a  [/        U R,                  S5      nOS nU R                  R                  n[B        RE                  TX#5      nU/UQn[G        U[H        RJ                  5      (       ae  [L        RN                  " U5      n[Q        U5      S	-
  [Q        URR                  5      :X  a  US	S  n[T        RV                  " UUS9R9                  TX#5      $ [G        U[H        RX                  5      (       aN  [T        RZ                  " UR\                  [T        R^                  " U R                  5      US9R9                  TX#5      $ [%        SU 35        g )NFc                    > [        U [        R                  5      (       a  U R                  SLa  Sm[        U [        R                  5      (       a  U R                  T5      (       a  Smg g g )NFT)ry   r   TensorVariablerequires_gradNNModuleVariableis_training)noder$  rK   s    r1   visit2AutogradFunctionVariable.call_apply.<locals>.visit  s\    $	 8 899%%U2$(M$	 : :;;##B''$(M ( <r0   zNThe config.capture_autograd_function flag is deprecated, it's now always true.r   )#autograd_function_forward_rewritten)_is_setup_context_definedzNYI - User defind vjpzNYI - User defind jvpr   )AutogradFunctionApplyVariabler  )r   re   forwardsetup_contextz?non-function or method in subclass of torch.autograd.Function: )0r   r(  ru   is_grad_enabledr   capture_autograd_functionwarningswarn"torch._functorch.autograd_functionr*  torch.autograd.functionr+  r  r-  r.  vjpautogradFunctionr   jvphigher_order_opsr,  rP   r   import_sourcer,   r+   backwardr{   r   rh   r   FUNCTION_MATCHAutogradFunctionContextVariablerj   ry   r   r   inspect	signaturerX   _parametersr   r"   r   r   r   r}   )r<   rK   r   r=   r(  r*  r+  
forward_fnis_setup_ctx_definedvjp_fnjvp_fnr,  rP   r   fwd_srcsetup_ctx_srcr  ctxsigr$  s    `                 @r1   
call_apply#AutogradFunctionVariable.call_apply  s   	) 	eF^4U2244//58d 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-  {{$T[[)<g001L1LMN'$.t{{O$LM!-":":<;V;V"WXJ;;Y7FF[[  -44RF|d|b%,,--##B'C4y1}COO 44ABx11"VDRRD  E,,--//224;;? mB-	. QRTQUVr0   c                 b   U R                   R                  n[        US   R                  5      [        R
                  R                  R                  L d   e[        U[        R                  5      (       d   e[        U R                  S5      n[        R                  " XES9R                  XU5      $ )Nr   r;  re   )r  r;  rR   rS   ru   _dynamoexternal_utilsFakeBackwardCFunctionry   r   r   r   rP   r   r"   r{   )r<   rK   r   r=   r  	fn_sources         r1   call_backward&AutogradFunctionVariable.call_backwarde  s    [[!!DGMM"emm&B&B&X&XXXX"e001111t{{J7	--bCQQf
 	
r0   c                 ,    [        U R                  5      $ rB   )r  r  r<   rK   r   r=   s       r1   r{   &AutogradFunctionVariable.call_functiono  s    '44r0   c           
         SSK Jn  SSKJn  US:X  aj  U" U R                  5      (       aA  [        U R                  5      nU" UUR                  R                  " SU/[        X45      Q76 S9$ U R                  XU5      $ US:X  a  U R                  XU5      $ SS	KJ n  U R                  b  [        U R                  U5      OS n	 [        R                  " U R                  U5      n
[#        U
[$        5      (       as  U
R'                  U R                  5      nU	b.  UR)                  U5      R+                  XS
9R-                  XU5      $ UR)                  U5      " U5      R-                  XU5      $ [#        U
[.        5      (       a/  [0        R2                  " U
R4                  X	S
9R-                  XU5      $ [7        SU 35        g ! [          a    S n
 Nf = f)Nr   )is_callable_allowedr   )wrap_fx_proxyr  r{   )rK   proxyr;  )trace_rulesre   zUnsupported method: )rY  rV  builderrW  r  r  r   create_proxyr   rI  rP   rP   r   r>  getattr_staticr   ry   r   __get__lookupcreate_with_sourcer{   r   r   r   r   r   )r<   rK   r[   r   r=   rV  rW  r  rY  rP   objr  s               r1   r   $AutogradFunctionVariable.call_methodr  s    	6*7?"4;;//,MKK-) %))00'1 +48  r88Z%%b77&6:kk6MZT2SWF,,T[[$? #|,,{{4;;/%#**40++D+@&r8 '--d3D9GG&  C-- 33LL$-&12  4TF;<) " s   !F= =GG)r  r   r   )r   r   r=   r   )r+   r,   r-   r.   r   r   r   r9   rI  rP  r{   r   r/   r   r   s   @r1   r  r    sT    7 			'	'N
_B
56= &	6=
 -6= 6=r0   r  c                   F    \ rS rSr% \R
                  " \S9r\\   \	S'   Sr
g)SavedTensorBoxi  )default_factorytensorsr*   N)r+   r,   r-   r.   dataclassesfieldlistrf  r   r  r/   r*   r0   r1   rd  rd    s    %0%6%6t%LGT/"Lr0   rd  c                      ^  \ rS rSrSrSSS1\R                  kr      S SU 4S jjjr\SSS jj5       r	S r
      SU 4S	 jjrSU 4S
 jjrSrU =r$ )r=  i  zR
Tracks an autograd.Function() context using mutation tracking in side_effects.py
rX  	inferencesaved_tensorsc                 f   > [         T	U ]  " SXS.UD6  X0l        X@l        XPl        X`l        Xpl        g N)rS   
value_typer*   )r8   r9   rk  rX  rl  needs_input_gradnon_differentiable)
r<   rS   ro  rk  rX  rl  rp  rq  r=   r>   s
            r1   r9   (AutogradFunctionContextVariable.__init__  s6     	FuFvF"
* 0"4r0   c                    S nU(       a  U(       d  [        S U 5       5      nU R                  R                  S[        R                  R
                  R                  S0 5      nU R                  R                  R                  S [        R                  R
                  R                  [        R                  " [        SU[        5       US90 5      n[        UR                  UR                  5        U$ )Nc              3   |   #    U  H2  n[        U[        R                  5      =(       a    UR                  v   M4     g 7frB   )ry   r   r#  r$  .0xs     r1   	<genexpr>9AutogradFunctionContextVariable.create.<locals>.<genexpr>  s0      %A 1i667KAOOKs   :<r{   r*   T)rk  rX  rl  rp  )r   r   r[  ru   r6  functionFunctionCtxrx   track_object_new	functoolspartialr=  rd  r   r'  rS   )rK   r   r=   rp  rX  outs         r1   rj   &AutogradFunctionContextVariable.create  s    $ %%   		&&U^^44@@"b
 ii$$55NN##///,.!1 
 	%**cii0
r0   c                 J    U R                   c  [        S5        U R                   $ )Nzproxy not set)rX  r   r   s    r1   as_proxy(AutogradFunctionContextVariable.as_proxy  s    ::/*zzr0   c                   > US:X  a  [         TU ]  XX45      $ US:X  aD  [        U5      S:X  d   e[        U0 5      S   U l        [
        R                  R                  S 5      $ US:w  a  [        SU 35        U R                  c  [        S5        U R                  (       d?  U R                  (       a  U(       a   eUR                  R                  R                  X5        [        U R                  R                  5      S:  a  / U R                  l        U H(  nU R                  R                  R!                  U5        M*     [
        R                  R                  S 5      $ )Nr   mark_non_differentiabler   save_for_backwardz"autograd.Function context method: zCsave_for_backward only supported on a newly constructed FunctionCtx)r8   r   rX   r   rq  r   r    rj   r   rl  rk  rP   r   rx   track_save_for_backwardrf  append)r<   rK   r[   r   r=   argr>   s         r1   r   +AutogradFunctionContextVariable.call_method  s)    = 7&r>>..v;!###&7b&A!&DD#--44T::&&>tfEF%U ~~;;v--II""::4F t!!))*Q.)+D&C&&--c2 ))0066r0   c                   >^ ^^ TS;   a  [        UU U4S j5      $ TS:X  a@  T R                  b3  [        R                  " [	        T R                  R
                  5      5      $ TS:X  a  T R                  b)  [        R                  R                  T R                  5      $ T R                  (       aB  [        T R                  S5      n[        R                  " TT R                  R                  U5      $ [        TT ]=  TT5      $ )N)r  r  c                  *   > TR                  TTX5      $ rB   )r   )r   r=   r[   r<   rK   s     r1   rE   =AutogradFunctionContextVariable.var_getattr.<locals>.<lambda>  s    (8(8T4(Pr0   rl  rp  )rt   rl  r   TupleVariableri  rf  rp  r    rj   rP   r   r   r   rS   r8   rk   r<   rK   r[   rP   r>   s   ``` r1   rk   +AutogradFunctionContextVariable.var_getattr  s    CC!P  ?"t'9'9'E**40B0B0J0J+KLL%%$$0 11889N9NOO{{#DKK1CD&,,R1L1LfUUw"2t,,r0   )rk  rp  rq  rX  rl  )NFNNNNr   NNr   r   )r+   r,   r-   r.   r   r%   r   r9   r   rj   r  r   rk   r/   r   r   s   @r1   r=  r=    s    
 	 
#	1	1	N 5 
5 5$  4
7 &	7
 -7 
7@- -r0   r=  c                   N   ^  \ rS rSrSr S SU 4S jjjr      SS jrSrU =r$ )	AutogradEngineVariablei  z3
Represents a torch._C._ImperativeEngine instance.
c                 *   > [         TU ]  " SXS.UD6  g rn  r  )r<   rS   ro  r=   r>   s       r1   r9   AutogradEngineVariable.__init__$  s     	FuFvFr0   c                    US:X  a  [         R                  R                  R                  (       a  UR                  (       d   S5       e[
        R                  " [         R                  R                  R                  R                  U R                  S9R                  UUR                  R                  R                  5       /UQ7U5      $ [        S5        g [        SU 35        g )Nqueue_callbackzXqueue_callback() is only supported when Compiled Autograd is enabled with fullgraph=Truere   z#torch._C._ImperativeEngine method: )ru   rL  compiled_autogradin_compiled_autograd_region	one_graphr   r"   rM  FakeCompiledAutogradEnginer  rP   r{   r   rx   get_ca_final_callbacks_varr   r<   rK   r[   r   r=   s        r1   r   "AutogradEngineVariable.call_method,  s     ##}}..JJ|| n| !55MM00KKZZ;;  -YY++FFHP4P n ?vFGr0   r*   rB   r   r   	r+   r,   r-   r.   r   r9   r   r/   r   r   s   @r1   r  r    sQ     G
 
G GH &	H
 -H 
H Hr0   r  c                   F   ^  \ rS rSrSU 4S jjr        SS jrSrU =r$ )rt   iH  c                 2   > [         TU ]  " S0 UD6  Xl        g r7   )r8   r9   r  )r<   r  r=   r>   s      r1   r9   LambdaVariable.__init__I  s    "6"r0   c                 &    U R                   " U0 UD6$ rB   r  rS  s       r1   r{   LambdaVariable.call_functionM  s     ww'''r0   r  r   r  )r+   r,   r-   r.   r9   r{   r/   r   r   s   @r1   rt   rt   H  s8    (#( &( -	(
 
( (r0   rt   c                     ^  \ rS rSrSS1\R
                  krSSU 4S jjjrU 4S jrS\4S jr	\
S\R                  R                  4S	 j5       rS
 rS rSS jrS r        SS jrS\\   S\\\4   S\4U 4S jjrSrU =r$ )rg   iV  r[   py_typer5   c                    > [         TU ]  " S0 UD6  [        U[        5      (       d   e[        U[        5      (       d   eXl        X l        X0l        g r7   )r8   r9   ry   r   r   ra  r[   r  )r<   ra  r[   r  r=   r>   s        r1   r9   GetAttrVariable.__init__]  sH    "6"#////$$$$$	r0   c                 R   > U R                   b  U R                   $ [        TU ]	  5       $ rB   )r  r8   rO   r<   r>   s    r1   rO   GetAttrVariable.python_typee  s%    <<#<<7&((r0   c                 h    U R                   R                   SU R                   SU R                   S3$ Nr   rq   r   )r>   r+   ra  r[   r   s    r1   r   GetAttrVariable.__repr__k  s.    ..))*!DHH:R		{!DDr0   
base_proxyc                     [        X5      $ rB   )rV   )r  r   s     r1   create_getattr_proxy$GetAttrVariable.create_getattr_proxyn  s    z((r0   c                 r    [         R                  U R                  R                  5       U R                  5      $ rB   )rg   r  ra  r  r[   r   s    r1   r  GetAttrVariable.as_proxyr  s&    33DHH4E4E4GSSr0   c                     U R                   R                  5       n [        XR                  5      $ ! [         a    [        U  S35      S ef = f)Nz is not a constant)ra  rN   rV   r[   r   r   )r<   constants     r1   rN   "GetAttrVariable.as_python_constantu  sO    88..0	M8YY// 	M%.@&ABL	Ms	   1 Ac                    [        U R                  [        R                  5      (       d  [        eUR
                  R                  U R                  R                  5      nU R                  UR                  ;  a  [        e[        R                  " X0R                  5      nX$R                  ;  a  [        e[        R                  " XB5      $ rB   )ry   ra  r   r%  r   r   get_submodule
module_keyr[   rY   r>  r]  )r<   rK   r[   step1step2s        r1   const_getattrGetAttrVariable.const_getattr|  s    $((I$>$>??%%		''(;(;<99ENN*%%&&uii8~~%%%%%e22r0   c                 |    U" U R                   5        UR                  UR                  U R                  5      5        g rB   )ra  rH   create_load_attrsr[   r   s     r1   rI   GetAttrVariable.reconstruct  s+    g77		BCr0   r   r=   c                 N    U R                   R                  XR                  X#5      $ rB   )ra  r   r[   rS  s       r1   r{   GetAttrVariable.call_function  s     xx##B		4@@r0   c                 @  > US;   a  U R                   S:X  a  U(       d  US   R                  5       (       a  [        U R                  [        R
                  [        R                  [        R                  45      (       ax  U R                  nUS   R                  5       nUR                  X5      (       a  UR                  X5      $ US:X  a*  [        U5      S:X  a  US   $ [        R                  " S 5      $ GOUS:X  a  U R                   S:X  a  [        U5      S:X  a  US   R                  5       (       a  U(       d  [        U R                  [        R
                  [        R                  [        R                  45      (       aa  U R                  nUS   R                  5       nUR                  X5      (       a  [        R                  " S5      $ [        R                  " S	5      $ US
:X  a  U R                   S:X  a  U(       d  [        U R                  [        R
                  5      (       a"  U R                  R                  XS   US   5      $ [        U R                  [        R                  5      (       a  U R                  R                  U5        [        TU ]A  XX45      $ )N)__getitem__rZ   rY   r   rZ   r   r   __contains__TF__setitem__)r[   is_python_constantry   ra  r   r%   r%  r}   rN   has_key_in_generic_dictrk   rX   r    r   convert_to_unspecializedr8   r   )r<   rK   r[   r   r=   ra  keyr>   s          r1   r   GetAttrVariable.call_method  s    **		Z'Q**,,77..66  ((Cq',,.C**233r// u}t9>7N$55d;;	  N"		Z'D	QQ**,,77..66  ((Cq',,.C**233 11$77 11%88]"tyyJ'>v$((I$G$GHHxx77GT!WMM$((I$>$>??11"5w"2T::r0   )r[   ra  r  rB   r   r   r  )r+   r,   r-   r.   r   r   r9   rO   r   r   r   ru   fxProxyr  r  rN   r  rI   r{   ri  dictr   r/   r   r   s   @r1   rg   rg   V  s     
	'	'N )E# E ) ) )TM	3DA#A &A -	A
 
A@; ?#	@;
 S/)*@; 
@; @;r0   rg   c                   X   ^  \ rS rSrSU 4S jjr        SU 4S jjrS rS rSrU =r	$ )	MethodWrapperVariablei  c                 @   > [         TU ]  " S0 UD6  Xl        0 U l        g r7   )r8   r9   method_wrapper_builtin_fns)r<   r  r=   r>   s      r1   r9   MethodWrapperVariable.__init__  s!    "6",r0   c                 R  > [        U R                  5      (       at  [        US   [        R                  5      (       aR  [        U5      S:X  a  [        U5      S:X  d   eUS   R                  XR                  R                  R                  5      $ U R                  R                  nU R                  R                  nUS:X  aV  [        U5      R                  nU[        R                  L a.  [        R                  " [        5      R                  XU/UQU5      $ [        TU ]=  XU5        g )Nr   r   r9   )r   r  ry   r   r#  rX   rk   r   r+   rR   r9   rs   rC   r   r8   r{   )r<   rK   r   r=   self_objwrapper_namefn_objr>   s          r1   r{   #MethodWrapperVariable.call_function  s     &d&9&9::zGY--@
 @
 t9>c&kQ&6667&&r+>+>+G+G+P+PQQ &&//**33 :%(^,,F( 008DDx&7$&7  	b/r0   c                     gNTr*   r   s    r1   r  (MethodWrapperVariable.is_python_constant      r0   c                     U R                   $ rB   )r  r   s    r1   rN   (MethodWrapperVariable.as_python_constant  s    """r0   )r  r  r   r  )
r+   r,   r-   r.   r9   r{   r  rN   r/   r   r   s   @r1   r  r    sB    
0#0 &0 -	0
 
0># #r0   r  c                   H   ^  \ rS rSrSU 4S jjrSU 4S jjrS rS rSrU =r	$ )	GetSetDescriptorVariablei  c                 2   > [         TU ]  " S0 UD6  Xl        g r7   )r8   r9   desc)r<   r  r=   r>   s      r1   r9   !GetSetDescriptorVariable.__init__  s    "6"	r0   c                    > US:X  aR  U R                   (       aA  [        U R                   S5      n[        R                  " XR                  R
                  U5      $ [        TU ]  X5      $ )Nr^  )rP   r   r   r   r  r^  r8   rk   r  s       r1   rk   $GetSetDescriptorVariable.var_getattr  sN    9Y7F"((YY->->GG7&r00r0   c                     gr  r*   r   s    r1   r  +GetSetDescriptorVariable.is_python_constant  r  r0   c                     U R                   $ rB   r  r   s    r1   rN   +GetSetDescriptorVariable.as_python_constant  s    yyr0   r  r   r   )
r+   r,   r-   r.   r9   rk   r  rN   r/   r   r   s   @r1   r  r    s    1 r0   r  c                      ^  \ rS rSrSS1\R
                  krS\R                  SS4U 4S jjrS r	S r
S\4S	 jrSS
 jrSS jrSrU =r$ )PythonModuleVariablei  rS   is_torchr5   Nc                    > [         TU ]  " S0 UD6  Xl        U R                  [        L =(       d%    U R                  R                  R                  S5      U l        g )Nztorch.r*   )r8   r9   rS   ru   r+   
startswithr  r<   rS   r=   r>   s      r1   r9   PythonModuleVariable.__init__  sB    "6"


e+Wtzz/B/B/M/Mh/Wr0   c                 "    [         R                  $ rB   )r   
ModuleTyper   s    r1   rO    PythonModuleVariable.python_type!  s    r0   c                     U R                   $ rB   rS   r   s    r1   rN   'PythonModuleVariable.as_python_constant$      zzr0   c                 "    SU R                    S3$ )NzPythonModuleVariable(r   r  r   s    r1   r   PythonModuleVariable.__repr__'  s    &tzzl!44r0   c                 l    [        U R                  U5      n[        R                  R	                  U5      $ rB   )r|   rS   r   r    rj   r<   rK   r[   r   s       r1   call_obj_hasattr%PythonModuleVariable.call_obj_hasattr*  s)    T*))0088r0   c                    UR                   R                  R                  X5      (       a%  UR                   R                  R                  X5      $ U R                  (       d  X R
                  R                  ;  a  [        U R
                  U5      nOU R
                  R                  U   nU R                  =(       a    [        U R                  U5      n[        R                  " XU5      $ rB   )r   rx   r   r   r  rS   rY   rV   rP   r   r   r   )r<   rK   r[   r   rP   s        r1   rk    PythonModuleVariable.var_getattr.  s    99!!>>tJJ99))33D??==D

(;(;; T2J,,T2J>DKK!>$$RV<<r0   )r  rS   r   )r+   r,   r-   r.   r   r   r   r  r9   rO   rN   r   r   r   rk   r/   r   r   s   @r1   r  r    sa     
	'	'NXe.. XT X
 5# 59
= 
=r0   r  c                   d   ^  \ rS rSrSU 4S jjr      SS jrSSS\4S jrS rSS	 jr	S
r
U =r$ )TypingVariablei;  c                 2   > [         TU ]  " S0 UD6  Xl        g r7   r8   r9   rS   r  s      r1   r9   TypingVariable.__init__<      "6"
r0   c                     US:X  a:  [        U5      S:X  a+  U R                  US   R                  5          n[        U5      $ [	        S5        g )Nr  r   r   z+unsupported method call on typing variablel)rX   rS   rN   r  r   )r<   rK   r[   r   r=   
new_typings         r1   r   TypingVariable.call_method@  sE     = SY!^DG$>$>$@AJ!*--CDr0   rK   r&   r[   c                    SSK JnJn  U[        ;   a  [        R
                  " X5      $ UR                  R                  R                  X5      (       a  UR                  R                  X5      $ [        U R                  U5      nU R                  (       a$  [        U R                  U5      nU" X5      " U5      $ UR                  X5      $ )Nr   )SourcelessBuilderVariableBuilder)rZ  r  r  r   r   rg   r   rx   r   r   rV   rS   rP   r   rj   )r<   rK   r[   r  r  rS   r   s          r1   rk   TypingVariable.var_getattrM  s    ?)),,T8899!!>>tJJ??,,T88

D);;$T[[$7K"23E::$++B66r0   c                     U R                   $ rB   r  r   s    r1   rN   !TypingVariable.as_python_constant]  r  r0   c                 X    UR                  UR                  U R                  5      5        g rB   )append_outputcreate_load_constrS   r   s     r1   rI   TypingVariable.reconstruct`  s!    0 	g77

CDr0   r  r   r   )rD   ztorch._dynamo.codegen.PyCodegenr5   N)r+   r,   r-   r.   r9   r   r   rk   rN   rI   r/   r   r   s   @r1   r  r  ;  sT    E &	E
 -E 
E75 7S 7 E Er0   r  )maxsizec                      SSK Jn   0 nU R                  5        HS  u  p#UR                  R                  5        H0  u  pE[	        U5      (       d  M  [        X$S5      =n(       d  M,  XQU'   M2     MU     U$ )zX
This generates a mapping from numpy modules to their torch._numpy
modules equivalents.
r   )NP_TO_TNP_MODULEN)utilsr  r   rY   callablerV   )r  np_fn_to_tnp_fnnp_modtnp_modr   tnp_fnnp_fns          r1   get_np_to_tnp_mapr!  {  sk     )O+113&//557OG $FT::5:-3E*  8 4 r0   c                  l    [        5       n U R                  5        VVs0 s H  u  pX!_M	     snn$ s  snnf )zs
This is just the reverse mapping of get_np_to_tnp_map() - mapping from
torch._numpy modules to numpy equivalents.
)r!  r   )mkvs      r1   get_tnp_to_np_mapr&    s.     	AWWY'YTQADY'''s   0c                      ^  \ rS rSrSr\R                  4rSU 4S jjr\	S 5       r
\	S 5       r        SS jr      SS jrS rU 4S	 jrS
rU =r$ )NumpyVariablei  zr
Wrapper around `numpy.*`. Currently, is able to trace a small subset of numpy functions as well as numpy dtypes.
c                 2   > [         TU ]  " S0 UD6  Xl        g r7   r  r  s      r1   r9   NumpyVariable.__init__  r	  r0   c                     UR                   R                  S5      n[        U5      S:  a  US S SS/:X  d   eXR                  ;   $ N.r   ru   _numpy)r,   splitrX   constant_fold_functionsclsr  mods      r1   can_constant_fold_through'NumpyVariable.can_constant_fold_through  sH    mm!!#&3x1}RaWh,?!???0000r0   c                     UR                   R                  S5      n[        U5      S:  a  US S SS/:X  d   e[        R	                  US 5      $ r,  )r,   r/  rX   np_constant_collections_maprZ   r1  s      r1    get_constant_collection_for_func.NumpyVariable.get_constant_collection_for_func  sL    mm!!#&3x1}RaWh,?!???*..r488r0   c                 <   [         R                  (       d  [        SU R                   S35        SSKJn  SSKJn  [        5       R                  U R                  5      nUc  [        SU R                   S35        U R                  U5      =n bh   U" U R                  " U Vs/ s H  oR                  5       PM     sn0 UR                  5        V	V
s0 s H  u  pXR                  5       _M     sn
n	D65      $ UR                  S:X  aF  [         R                   (       a1  SUR"                   S3nUS[         R                    3-  n[        U5        UR%                  UR                  X#5      u  p#U R'                  U5      (       a  [)        X#5      (       a  [*        R,                  R/                  U R                  5       " U Vs/ s H  oR                  5       PM     sn0 UR                  5        V	V
s0 s H  u  pXR                  5       _M     sn
n	D65      $ UR0                  R2                  " SU" U5      /[5        X#5      Q76 nUR/                  X5      $ s  snf s  sn
n	f ! [         a*    [        U R                  R                   S	U S
U 35         g f = fs  snf s  sn
n	f )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=r{   )r   trace_numpyr   rS   r  r;  tensorr<  r!  rZ   r8  rN   r   r   r+   r,   use_numpy_random_streamr-   
patch_argsr4  r   r   r    rj   r   r[  r   )r<   rK   r   r=   r;  r<  r  collection_variable_typrw  r$  r%  r   rX  s                r1   r{   NumpyVariable.call_function  sd    !!F4::,b1230 "&&tzz2<,TZZL 9N N (,'L'LT'RR#
.JJ:>?$Q..0$?AGP12244P  #8822"4#4#4"55KL78V8V7WXXc"/::4==$WLD--d33-d;; !1188++-:>?$Q..0$?AGP12244P  II**'- #40E
 (..r99I @P ' zz**++A$qQ* @Ps<   I "I;I I-	I >J-JI 1JJc                     [        S5        g )Nnumpy)r   r  s        r1   r   NumpyVariable.call_method  s     	gr0   c                     U R                   $ rB   r  r   s    r1   rN    NumpyVariable.as_python_constant  r  r0   c                    > [         R                  (       a5  [        U R                  [        5      (       a  U R                  R
                  $ [        TU ]  5       $ rB   )r   r>  ry   rS   rR   r+   r8   r  r  s    r1   r  NumpyVariable.as_proxy  s<    *TZZ">"> ::&&&w!!r0   r  r   r  r   )r+   r,   r-   r.   r   tnp
issubdtyper0  r9   r   r4  r8  r{   r   rN   r  r/   r   r   s   @r1   r(  r(    s      #~~/ 1 1
 9 9
>:#>: &>: -	>:
 
>:@ &	
 - 
" "r0   r(  c                   @   ^  \ rS rSrSU 4S jjrS\4S jrS rSrU =r	$ )NullVariablei  r5   c                 &   > [         TU ]  " S0 UD6  g r7   r  r  s     r1   r9   NullVariable.__init__	  r  r0   c                     g)NrN  r*   r   s    r1   r   NullVariable.__repr__  s    r0   c                 v    [         R                  S:  a  [        S5        UR                  [	        S5      5        g )N)      z0cannot reconstruct NullVariable in < Python 3.11	PUSH_NULL)sysversion_infor   r  r	   r   s     r1   rI   NullVariable.reconstruct  s-    g%LM0=>r0   r*   r   )
r+   r,   r-   r.   r9   r   r   rI   r/   r   r   s   @r1   rN  rN    s    ## ? ?r0   rN  c                       \ rS rSrSrSrg)r   i  z"Marker used to implement delattr()r*   Nr   r*   r0   r1   r   r     s    ,r0   r   c                   r   ^  \ rS rSrSrS1\R                  kr\S 5       rS
U 4S jjr	S\
4S jrS rS	rU =r$ )StringFormatVariablei  zS
Represents a call to str.format(), we delay calling format until after the graph.
format_stringc                    [        S [        R                  " X#R                  5       5       5       5      (       a~  [        R
                  R                  UR                  " U Vs/ s H  oDR                  5       PM     sn0 UR                  5        VVs0 s H  u  pTXTR                  5       _M     snnD65      $ U " U[        U5      [        U5      5      $ s  snf s  snnf )Nc              3   B   #    U  H  nUR                  5       v   M     g 7frB   )r  ru  s     r1   rx  .StringFormatVariable.create.<locals>.<genexpr>"  s#      
C   ""Cs   )all	itertoolschainvaluesr   r    rj   formatrN   r   ri  r  )r2  r]  sym_args
sym_kwargsr%  r$  s         r1   rj   StringFormatVariable.create   s     
__X/@/@/BC
 
 
 --44$$6>?h**,h?=G=M=M=OP=OTQq..00=OP  =$x.$z2BCC	 @Ps   #CCr5   c                 x   > [         TU ]  " S0 UD6  [        U[        5      (       d   eXl        X l        X0l        g r7   )r8   r9   ry   r   r]  rf  rg  )r<   r]  rf  rg  r=   r>   s        r1   r9   StringFormatVariable.__init__.  s6    "6"-----* $r0   c                     U R                   R                   SU R                  < SU R                  < SU R                  < S3$ r  )r>   r+   r]  rf  rg  r   s    r1   r   StringFormatVariable.__repr__5  sB    ..))*!D,>,>+ADMMCTTVW[WfWfViijkkr0   c                   ^ ^ TR                  UU 4S jSS9  T" [        R                  " T R                  5      5        T R                  R                  5        VVs0 s H%  u  p#[        R                  R                  U5      U_M'     nnnT" [        R                  " U5      5        TR                  [        SSS95        g s  snnf )Nc                  z   > T R                  T R                  TR                  5      T R                  S5      /5      $ )Nre  )rH   r  r]  create_load_attrr   s   r1   rE   2StringFormatVariable.reconstruct.<locals>.<lambda>:  s7    G))--d.@.@A,,X6r0   T)call_function_exCALL_FUNCTION_EXr   )r  )rG   r   r  rf  rg  r   r    rj   ConstDictVariabler  r	   )r<   rD   r$  r%  r=   s   ``   r1   rI    StringFormatVariable.reconstruct8  s     " 	 	
 		''67@D@U@U@W
@WI&&--a0!3@W 	 
 		++F3401CKL	
s   ,C )r]  rf  rg  r   )r+   r,   r-   r.   r   r   r   r   rj   r9   r   r   rI   r/   r   r   s   @r1   r\  r\    sP     &G(F(FGND D%l# lM Mr0   r\  c                   d   ^  \ rS rSrSrS	U 4S jjr\S 5       rS
S jrS r	\SS j5       r
SrU =r$ )DebuggingVariableiJ  zz
Represents a call to a debugging function like print(), or something
registered to config.reorderable_logging_functions.
c                 2   > [         TU ]  " S0 UD6  Xl        g r7   r  r  s      r1   r9   DebuggingVariable.__init__P  r	  r0   c                     [        U 5      =(       aX    [        U [        R                  [        R                  45      =(       a'    U [
        R                  R                  R                  ;   $ rB   )	r  ry   r   r   BuiltinFunctionTyperu   rL  r   reorderable_logging_functions)ra  s    r1   is_reorderable_logging_function1DebuggingVariable.is_reorderable_logging_functionT  sO     SM J3!3!3U5N5N OPJu}}++III	
r0   c           	          UR                   (       a  g U R                  U R                  X#5      (       d  [        SU R                   SU SU S35        UR                  R                  U [        U5      45        g )NzReordering debugging function z with inputs r=  z is not yet implemented.)exportcan_reorder_logsrS   r   debug_localsr  ri  rS  s       r1   r{   DebuggingVariable.call_function\  sl    99$$TZZ>>0 =#fAfX-EG
 	d4j12r0   c                 8    U R                   R                  U5      $ rB   )rP   rI   r   s     r1   rI   DebuggingVariable.reconstructi  s    {{&&w//r0   c                     [         R                  [         R                  [        4n[        R
                  " X/5      nU H  n[        XS5      (       a  M    g   g)zU
Run some additional checks for what sort of function calls can we
actually reorder.
FT)r   r#  r    r\  pytreetree_leavesry   )r  r   r=   allowed_input_types	flat_argsr  s         r1   r  "DebuggingVariable.can_reorder_logsl  sR     $$&& 
 &&~6	Cc77  r0   r  r   r   )r5   T)r+   r,   r-   r.   r   r9   r   r|  r{   rI   r  r/   r   r   s   @r1   rv  rv  J  s?    
 
 
30  r0   rv  c                   F   ^  \ rS rSrSrSU 4S jjr      SS jrSrU =r$ )LoggingLoggerVariablei  z4
Represents a call to any of logging.Logger methods
c                 2   > [         TU ]  " S0 UD6  Xl        g r7   r  r  s      r1   r9   LoggingLoggerVariable.__init__  r	  r0   c                 6   UR                   (       a  g [        U R                  US 5      n[        USS 5      nXV1R                  [        R
                  R                  R                  5      (       a  [        R                  R                  S 5      $ [        S5        g )Nr   zLogger not supported for non-export cases. To avoid graph breaks caused by logger in compile-mode, it is recommended to disable logging by adding logging methods to config.ignore_logger_methods)r  rV   rS   intersectionru   rL  r   ignore_logger_methodsr   r    rj   r   )r<   rK   r[   r   r=   methodrz  s          r1   r   !LoggingLoggerVariable.call_method  sw     99T406:t4**5==+?+?+U+UVV--44T::Y	
r0   r  r   r   r  r   s   @r1   r  r    s5    
 &	

 -
 

 
r0   r  c                      ^  \ rS rSrSrS r SSKJrJ	r
Jr  SU 4S jjrS	 rS
\\   S\\\4   S\4S jrSSS\S\4S jrSrU =r$ ! \ a    \" SS0 5      r
\" SS0 5      r NKf = f)ConstantLikeVariablei  z8self.value is a compile-time constant, but not a literalr   )dtypefloatinggenericinvalid_typer*   r5   c                 2   > [         TU ]  " S0 UD6  Xl        g r7   r  r  s      r1   r9   ConstantLikeVariable.__init__  r	  r0   c                     U R                   $ rB   r  r   s    r1   rN   'ConstantLikeVariable.as_python_constant  r  r0   r   r=   c                 l    U Vs/ s H  oUR                  5       PM     nnUR                  5        VVs0 s H  u  pxXxR                  5       _M     n	nn[        U R                  U5      " W0 W	D6n
[        R                  R                  U
5      (       a  [        R                  R                  U
5      $ [        U
[        R                  5      (       a  [        U
5      $ [        U R                   SU SU
 35        g s  snf s  snnf ! [         a$    [        U R                   SU SU SU S35         Nf = f)Nr-  z(*z, **r   z() -> )rN   r   r   r   _error_prefixrV   rS   r   r    rf   rj   ry   reMatchConstantRegexMatchVariable)r<   rK   r[   r   r=   rw  cargsr$  r%  ckwargsr   s              r1   r    ConstantLikeVariable.call_method  s   	O59:T))+TE:=C\\^L^TQq..00^GL T*E=W=%%0088--44V<<fbhh''-f55++,AdV6&BC ;L" 	OT//0$r$tF81MN	Os,   D C:D C?D :D +D32D3rK   r&   r[   c                    [        U R                  U5      n[        X0R                  5      (       a  [	        U5      n[        X0R
                  5      (       a  [        U5      $ [        U[        5      (       a%  [        X0R                  5      (       a  [        U5      $ [        R                  R                  U5      (       a  [        R                  R                  U5      $ [        X5      $ rB   )rV   rS   ry   np_floatingfloatnp_dtypeNumpyDTypeVariablerR   rQ   
np_genericr(  r   r    rf   rj   rg   r  s       r1   rk    ConstantLikeVariable.var_getattr  s    T*f..//6]Ffmm,,%f--fd##
6??(K(K ((%%0088--44V<<t**r0   r  r   )r+   r,   r-   r.   r   r  rE  r  r  r  r  r  r  ImportErrorrR   r9   rN   ri  r   r  r   r   rk   r/   r   r   s   @r1   r  r    s    B*M0	
 	
D ?#	D
 S/)*D 
D.+5 +S +_ + +E  0>2r2B/0s   
A A#"A#r  c                       \ rS rSrSrSrg)RegexPatternVariablei  z
re.Patternr*   Nr+   r,   r-   r.   r  r/   r*   r0   r1   r  r    s     Mr0   r  c                       \ rS rSrSrSrg)r  i  zre.Matchr*   Nr  r*   r0   r1   r  r    s    Mr0   r  c                   0   ^  \ rS rSrSrSU 4S jjrSrU =r$ )TorchVersionVariablei  ztorch.__version__c                    > UR                  S[        R                  5        US   [        R                  L d   e[        TU ]  " S0 UD6  g )NrS   r*   )
setdefaultru   __version__r8   r9   r  s     r1   r9   TorchVersionVariable.__init__  sA    '5#4#45g%"3"3333"6"r0   r*   r   )r+   r,   r-   r.   r  r9   r/   r   r   s   @r1   r  r    s    'M# #r0   r  c                       \ rS rSrSrSrg)NumpyTypeInfoVariablei  znp.iinfo/np.finfor*   Nr  r*   r0   r1   r  r    s    'Mr0   r  c                       \ rS rSrSrS rSrg)r  i  znp.dtype[...]c                 B    U R                   R                  R                  $ )a  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).
)rS   rR   r+   r   s    r1   r  NumpyDTypeVariable.as_proxy  s     zz'''r0   r*   N)r+   r,   r-   r.   r  r  r/   r*   r0   r1   r  r    s    #M(r0   r  c                   :   ^  \ rS rSrSrSU 4S jjrSS jrSrU =r$ )RandomClassVariablei  zrandom.Randomc                 &   > [         TU ]  " S0 UD6  g r7   r  r  s     r1   r9   RandomClassVariable.__init__  r  r0   c                    [        U5      S:  a  [        S5        OU(       a  [        S5        [        U5      S:X  a  [        R                  R	                  S 5      OUS   n[        U[        R                  R                  5       S9$ )Nr   zrandom.Random() with > 1 argzrandom.Random() with kwargsr   )seedrz   )rX   r   r   r    rj   RandomVariablebaseValueMutationNew)r<   rK   r   r=   r  s        r1   r{   !RandomClassVariable.call_function  sh    t9q=8978:=d)q.y))006dSTgY^^%D%D%F
 	
r0   r*   r   r   )	r+   r,   r-   r.   r   r9   r{   r/   r   r   s   @r1   r  r    s    #
 
r0   r  c                     ^  \ rS rSrSrS1\R                  kr1 Skr  SS\\	R                     S\\   SS4U 4S	 jjjrS
 rS r\S 5       r\S 5       r\S 5       r\S 5       rS\\   S\\\4   S\4U 4S jjrS rSrU =r$ )r  i  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>   r  randintuniform	randrangeNrandr  r5   c                 D  > [         TU ]  " S0 UD6  Ub\  U R                  U5      (       d   e[        R                  " 5       U l        U R                  R                  UR                  5       5        g Ub  UR                  5       OS n[        R                  " U5      U l        g r7   )r8   r9   is_supported_random_objr  RandomsetstategetstaterN   )r<   r  r  r=   r>   s       r1   r9   RandomVariable.__init__&  s|     	"6"//5555 --/DKKK  1040@4**,dD ---DKr0   c                 "    [         R                  $ rB   )r  r  r   s    r1   rO   RandomVariable.python_type5  s    }}r0   c                     U R                   $ rB   r  r   s    r1   rN   !RandomVariable.as_python_constant8  s    {{r0   c                    [        U 5      [        R                  La  g[        R                  " [
        R                  S5       H  n[        X5      (       d    g[        X5      n[        R                  " U5      (       a1  U[        [        R                  U5      R                  U 5      :w  a    gMl  [        USS 5      [        [        R                  U5      Ld  M    g   g)NF)r  r  r  r   T)rR   r  r  rb  rc  r  _supported_fn_namesr|   rV   r>  	isbuiltinr^  )r   r[   meths      r1   r  &RandomVariable.is_supported_random_obj;  s    9FMM)OO..0P
D 3%%3%D  &&76==$7??DD  E 4T2'&--QU:VV 
 r0   c                     [        U 5      [        L d   e[        U S   5      [        L d   e[        U S   5      [        L d   e[        S U S    5       5      (       d   eU S   b  [        U S   5      [        L d   eg g )Nr   r   c              3   D   #    U  H  n[        U5      [        L v   M     g 7frB   )rR   intru  s     r1   rx  -RandomVariable.check_state.<locals>.<genexpr>S  s     48a47c>8s    r   )rR   r   r  ra  r  )states    r1   check_stateRandomVariable.check_stateN  s    E{e###E!H~$$$E!H~&&&45844444Qx4a>U#:::#:r0   c                 r   [         R                  U 5        [        R                  " [        R                  R                  U S   5      [        R                  " U S    Vs/ s H"  n[        R                  R                  U5      PM$     sn5      [        R                  R                  U S   5      /5      $ s  snf )Nr   r   r   )r  r  r   r  r    rj   )r  rw  s     r1   
wrap_stateRandomVariable.wrap_stateV  s    ""5)&&**11%(;''CH8L8aY//66q98L **11%(;
 	
 Ms   )B4c                 P    U R                  5       n[        R                  U5        U$ rB   )rN   r  r  )r  	state_objs     r1   unwrap_stateRandomVariable.unwrap_statec  s$    ,,.	""9-r0   r   r=   c                   >^^ TS:X  a  UR                   R                  R                  U 5        U R                  R                  " U Vs/ s H  oUR                  5       PM     sn0 UR                  5        VVs0 s H  u  pgXgR                  5       _M     snnD6  [        R                  R                  S 5      $ TS:X  a)  U R                  U R                  R                  5       5      $ TS:X  aq  UR                   R                  R                  U 5        U R                  R                  U R                  US   5      5        [        R                  R                  S 5      $ TU R                  ;   a  UR                   R                  R                  U 5        U R                  R                  5       mUU4S jn[        U R                  T5      " U Vs/ s H  oUR                  5       PM     sn0 UR                  5        V	V
s0 s H  u  pXR                  5       _M     sn
n	D6  [!        XX45      $ ["        TU ]I  UTX45      $ s  snf s  snnf s  snf s  sn
n	f )Nr  r  r  r   c                  t   > [         R                  " 5       nUR                  T5        [        UT5      " U 0 UD6$ rB   )r  r  r  rV   )r   r=   rr[   r  s      r1   call_random_meth4RandomVariable.call_method.<locals>.call_random_meth  s1    MMO

5!q$'888r0   )r   rx   mutationr  r  rN   r   r   r    rj   r  r  r  r  r  rV   r#   r8   r   )r<   rK   r[   r   r=   rw  r  r   r  r$  r%  r  r>   s     `        @r1   r   RandomVariable.call_methodi  s    6>II""++D1KK267$Q&&($7AGPXS3..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 DKK&267$Q&&($79?H1**,,H
 ""EEw"2tT::7 8P* 8Hs   	H=8II>Ic                 8  ^ TR                  U4S j5        TR                  SS5        TR                  5         TR                  S5        T" U R	                  U R
                  R                  5       5      5        TR                  SS5        TR                  5         g )Nc                  n   > T R                  T R                  [        5      T R                  S5      /5      $ )Nr  )rH   create_load_python_moduler  ro  rD   s   r1   rE   ,RandomVariable.reconstruct.<locals>.<lambda>  s1    G))55f=,,X6r0   r   Fr  r   T)rG   r{   r   r   r  r  r  pop_topr   s    `r1   rI   RandomVariable.reconstruct  sz    	
 	a' 	*% 4 4 678a&r0   r  r  )r+   r,   r-   r.   r   r   r   r  r   r  r  r9   rO   rN   r   r  r  r  r  ri  r  r   r   rI   r/   r   r   s   @r1   r  r    s     			'	'N
 )-*..v}}%. '.
 
. .  $ ; ; 

 

  
%; ?#	%;
 S/)*%; 
%;N r0   r  c                   X   ^  \ rS rSr\S 5       rU 4S jr        SS jrS rSr	U =r
$ )WeakRefVariablei  c                     UR                  SS 5      nU" 5       nU=(       a    [        U5      n[        R                  " XU5      nX2S'   [	        U40 UD6$ )NrP   )rZ   r   r   r   r  )rK   weakref_valueoptionsrP   referentreferent_vts         r1   r   WeakRefVariable.build  sS    Xt, ?5-f5%++B&A"{6g66r0   c                 2   > [         TU ]  " S0 UD6  Xl        g r7   )r8   r9   r  )r<   r  r  r>   s      r1   r9   WeakRefVariable.__init__  s    #7#&r0   c                     U R                   $ rB   r  rS  s       r1   r{   WeakRefVariable.call_function  s     r0   c                    ^ TR                  U4S j5        T" U R                  5        TR                  [        SS5      5        g )Nc                  (   > T R                  SS5      $ )Nweakrefref)r   r  s   r1   rE   -WeakRefVariable.reconstruct.<locals>.<lambda>  s    g&>&>y%&Pr0   r   F)rG   r  rH   r   r   s    `r1   rI   WeakRefVariable.reconstruct  s6    PQ  !21e<=r0   r  r  )r+   r,   r-   r.   r   r   r9   r{   rI   r/   r   r   s   @r1   r  r    sO    7 7' #  &  -	 
 
 > >r0   r  )lr   rg  r}  r>  rb  r  r  rW  r   r1  typingr   r   torch._Cru   torch._numpyr.  rK  torch.utils._pytreer  _pytreer  r\  r   r   bytecode_transformationr   r	   create_parameter_opr
   excr   r   guardsr   r   mutation_guardr   rP   r   r   r   r   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(   r3   r   r   r   r   r  r  r  r  	dataclassrd  r=  r  rt   rg   r  r  r  r  	lru_cacher!  r&  r(  rN  r   r\  rv  r  r  r  r  r  r  r  finfoiinfor  r7  r  r  r  r*   r0   r1   <module>r     s  "      	 
   *   $ $   N F 9 0 5 
 
 
 " & G X X D	 	OCO OCdp pfo o :7 :7z;? ;(# #
%p= p=f M M Ml-&? l-^&H6 &HR(_ (};o };@)#O )#X &#=? #=L=E_ =E@ Q  ( Q(  (j"O j"\
?? 
?-o -.M? .Mb4 4n
O 
<7+? 7+t!/ !!5 #/ #(0 (	(- 	( II$II$II! 
/ 
"N_ Nb>o >r0   