
    Vh                        d 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	Z	ddl
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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/m0Z0m1Z1m2Z2m3Z3m4Z4 ddl5m6Z6 ddl7m8Z8 ddl9m:Z:m;Z; ddl<m=Z=m>Z>m?Z? erddl@mAZA  G d d      ZB G d de6      ZC G d de6      ZD G d de6      ZE G d deE      ZF G d de6      ZG G d d e6      ZH G d! d"e6      ZId# ZJ G d$ d%e6      ZKej                   G d& d'             ZM G d( d)e?      ZN G d* d+e?      ZO G d, d-e6      ZP G d. d/e6      ZQ G d0 d1e6      ZR G d2 d3e6      ZS G d4 d5e6      ZT G d6 d7e6      ZU ej                  d8      d9        ZW ej                  d8      d:        ZX G d; d<e6      ZY G d= d>e6      ZZ G d? d@e6      Z[ G dA dBe6      Z\ G dC dDe6      Z] G dE dFe6      Z^ G dG dHe6      Z_ G dI dJe_      Z` G dK dLe_      Za G dM dNe_      Zb G dO dPe_      Zc G dQ dRe_      Zdej                  ecej                  ecej                  ediZh G dS dTe6      Zi G dU dVe6      Zj G dW dXe6      Zky)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                       e Zd Zy)NO_SUCH_SUBOBJN)__name__
__module____qualname__     L/home/dcms/DCMS/lib/python3.12/site-packages/torch/_dynamo/variables/misc.pyr(   r(   E   s    r-   r(   c                   |     e Zd Z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d
Z
 xZS )SuperVariablereturnc                 @    t        |   di | || _        || _        y Nr,   )super__init__typevarobjvar)selfr6   r7   kwargs	__class__s       r.   r5   zSuperVariable.__init__N   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>[   s    gi.G.G.N&O r-   r   Fr   )add_push_nullr6   r7   extend_outputr   )r8   r?   r:   s    `r.   reconstructzSuperVariable.reconstructZ   s`    OP;;"DKK !!"6q%"@A!!"6q%"@Ar-   txr&   c           	         | j                   sJ d       | j                  j                         }| j                   j                         }| j                   j                  rt        | j                   j                        nd }t        |t              r,| j                   j                  }| j                   j                  }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   r6   as_python_constantpython_typesourcer   
issubclasstypevaluerF   index
ValueErrorgetattrr4   rangelen__dict__getr(   r   r   r   )r8   rD   namesearch_typetype_to_usetype_to_use_sourcerI   
search_mrostart_indexrM   resolved_getattrr:   s              r.   _resolved_getattr_and_sourcez*SuperVariable._resolved_getattr_and_sourcec   sk   {{999{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   E !E?>E?rT   r   c                    | j                  | |      \  }}t        j                  j                  |      st	        | |      S |r(t        |j                  t        j                               t        j                  j                  ||      S )NrI   )
r[   r   r    
is_literalGetAttrVariabler   
make_guardr   CONSTANT_MATCHcreate)r8   rD   rT   rL   rI   s        r.   var_getattrzSuperVariable.var_getattr   ss     99$Ev))44U;"4..&++L,G,GHI))00v0FFr-   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(                  rt+        |d      r|j,                  dk(  rt        j.                  j1                  |      rt|j2                  }	t+        |	d      r%|	j4                  dk(  rt        j6                  |	      }
n#|j8                  }t        j.                  |	|      }
|
j;                  |d||      S t        |t<              rVt        |j>                  t@        jB                        r2t        j                   |j>                  |      j%                  |||      S t        |tD              rat        |j>                  t@        jB                        r=t        jF                  |j>                  | j                  |      j%                  |||      S t        |t@        jB                        r6t        j                   ||      j%                  || j                  g|z   |      S t        |t@        jH                        r=t        jF                  |j>                  | j                  |      j%                  |||      S tK        |      r:t        | j                  t              r  | j                  jL                  |g|i |S |t        jN                  u r|d	   }	 |jQ                         }|jT                  j                  jW                  | j                        st'        d| j                   d| d       |jT                  j                  jY                  | j                  |t        jZ                                t        j\                  d       S t        | j                  t        j^                        r@|| j                  j`                  v r(| j                  jb                  j;                  ||||      S t        | j                  t        jd                        r0|tf        v r(| j                  jh                  j;                  ||||      S t        | j                  t        jj                        r0|tl        v r(| j                  jn                  j;                  ||||      S |t        jp                  u r|d	   jr                  }|jT                  j                  ju                  | j                  |      r^|jT                  j                  jw                  | j                  |d      }t        |t        jZ                        rty        tz        |       |S 	 t        jq                  | j                  jr                  |      }d }| j                  j(                   t}        | j                  j(                  |      }t        j                  ||      S t'        d|        y # 1 sw Y   xY w# tR        $ r t'        d
|        Y w xY w# tz        $ r ty        tz        |       Y w xY w)Nr   )AttributeMutationNewr]   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: )Ar[   objectr5   LambdaVariabler   torchnnModuler7   side_effectsre   
isinstancer   r%   mutation_typer
   r"   r   call_functionr   rI   hasattrr)   UserDefinedClassVariableis_supported_new_method__self__r*   r>   membercall_methodstaticmethod__func__typesFunctionTypeclassmethodUserMethodVariable
MethodTyper$   method_setattr_standard__delattr__rG   NotImplementedErroroutputis_attribute_mutation
store_attrDeletedVariabler    UserDefinedDictVariable_dict_methods_dict_vtUserDefinedTupleVariabler   	_tuple_vtUserDefinedListVariabler   _list_vt__getattribute__rL   has_pending_mutation_of_attr	load_attrr   AttributeErrorr   r   build)r8   rD   rT   argsr9   inner_fnrI   r7   re   user_clsuser_cls_vtuser_cls_sourceattr	attr_nameresult
attr_valueattr_sources                    r.   rx   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
 :;KK*-!!Y.22JJ8T((Hx.83F3F*3T'77A"(--'@@_ **2y$GG,/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-. !*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t{{I$E$EFDKK555;;''33BdFKKt{{I$F$FGM);;((44RtVLLt{{I$E$EFL(;;''33BdF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F Fb ' A 8?@AR " =(<=s0   -:ZZ! *Z? Z!Z<;Z<?[[r=   r1   NrD   r&   r   list[VariableTracker]r9   dict[str, VariableTracker]r1   r   )r)   r*   r+   r   _nonvar_fieldsr5   rC   r[   strrc   rx   __classcell__r:   s   @r.   r0   r0   I   st    		'	'N
B-9^G5 GS GEV G vC &	vC
 -vC 
vCr-   r0   c                   f     e Zd Zd fdZddZd Zd Zdddedefd	Z fd
Z	 fdZ
d ZeZ xZS )ExceptionVariablec                     t        |   di | || _        || _        t	        d       | _        t	        d       | _        t	        d      | _        t	        d       | _        y )NFr,   )	r4   r5   exc_typer   r    __context__	__cause____suppress_context____traceback__)r8   r   r   r9   r:   s       r.   r5   zExceptionVariable.__init__  sZ    "6" 	 ,D1 *$/$4U$;! .d3r-   c                     || _         y r=   )r   )r8   contexts     r.   set_contextzExceptionVariable.set_context.  s
    "r-   c                      j                   fd       j                   j                         j                  t	         j                        d       dt
        dd f fd} |d        |d        |d       y )	Nc                  P     j                  dj                  j                        S )Nrg   )load_import_fromr   r)   r?   r8   s   r.   r@   z/ExceptionVariable.reconstruct.<locals>.<lambda>3  s    G,,Z9O9OP r-   FrT   r1   c                     t        |       }t        |t              r|j                  dv sJ |       y j	                           |       j                  j                  d             j                  |        y )N)TFNr   )rO   r   r    rL   dup_toprB   rot_nr   )rT   r   r?   r8   s     r.   codegen_attrz3ExceptionVariable.reconstruct.<locals>.codegen_attr8  sh    4&Dd,-zz%88>$>8!%%gmmA&67""4(r-   r   r   r   )rA   foreachr   rr   rQ   r   )r8   r?   r   s   `` r.   rC   zExceptionVariable.reconstruct1  sl    P	
 			"c$))ne4	)s 	)t 	) 	]#[!+,r-   c                     | j                   S r=   )r   r8   s    r.   rH   zExceptionVariable.python_typeF  s    }}r-   rD   r&   name_varvalc                    fd}|j                         }|dk(  r| j                  |       n|dk(  rt        |t              r|j                  Ht        |t
        j                  t
        j                  t
        j                  t
        j                  f      r"|| _
        t        j                  d      | _        n |d       n|dk(  r/t        |t              r|j                  dv r|| _        nW |d       nN|dk(  r7t        |t              r|j                  || _        n%t        d	| d
| d       nt        d	| d
| d       t        j                  d       S )Nc                 >    t        t        t        |       g       y )N)r   )r   	TypeErrorr    )msgrD   s    r.   raise_errorz3ExceptionVariable.call_setattr.<locals>.raise_errorO  s    $Y:J3:O9PQr-   r   r   Tz9exception cause must be None or derive from BaseExceptionr   )TFr   zsetattr(ExceptionVariable, rh   ))rG   r   rp   r    rL   r   r>   r   !UserDefinedExceptionClassVariable"UserDefinedExceptionObjectVariabler   r   r   r   )r8   rD   r   r   r   rT   s    `    r.   call_setattrzExceptionVariable.call_setattrI  s9   	R **,= S![ 3 01cii6GJ--//??@@	M "%,5,F,Ft,L)WX++#/0SYY-5O,/)WX_$#/0SYY5F%(" ;H:RuANO7zC5JK))$//r-   c                     |dk(  r | j                   |g| S |dk(  r"|\  }| j                  |t        d      |       | S t        |   ||||      S )N__setattr__with_tracebackr   )r   r    r4   rx   )r8   rD   rT   r   r9   tbr:   s         r.   rx   zExceptionVariable.call_methodq  sf    = $4$$R/$//%%DRb"2?"CRHK7&r4v>>r-   c                    |dk(  r| j                   S |dk(  r| j                  S |dk(  r| j                  S |dk(  rt        j                  d       S |dk(  r+t        j
                  | j                  | j                        S t        | %  ||      S )Nr   r   r   r   r   r]   )
r   r   r   r   r    ListVariabler   rI   r4   rc   )r8   rD   rT   r:   s      r.   rc   zExceptionVariable.var_getattr{  s    = ###[ >>!++,,,_$--d33V^))$))DKKHHw"2t,,r-   c                 N    | j                   j                   d| j                   dS )N(r   )r:   r)   r   r   s    r.   __str__zExceptionVariable.__str__  s$    ..))*!DMM?!<<r-   r   )r   r   )r)   r*   r+   r5   r   rC   rH   r   r   rx   rc   r   __repr__r   r   s   @r.   r   r     sO    4"#-*&0#&0 "&0 	&0P?-= Hr-   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   r8   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"   rO   r   rI   )r8   rD   rT   r   r"   s        r.   rc   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   rp   r"   get_functionr!   get_codeclosureco_freevarsr{   r|   	f_globalsfn_namerG   defaultstupleitemsRuntimeErrorrK   r   r    rb   )r8   rD   r   r9   r   fncodefuncs           r.   rr   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   rc   rr   r,   r-   r.   r   r     sS    
>
5 
S 
EV 
'7#'7 &'7 -	'7
 
'7r-   r   c                   X     e Zd ZU ee   ed<   dZee   ed<   	 ddee   ddf fdZ xZ	S )CellVariablepre_existing_contentsN
local_namer1   c                 2    t        |   di | || _        y r3   )r4   r5   r   )r8   r   r9   r:   s      r.   r5   zCellVariable.__init__  s     	"6"%:"r-   r=   )
r)   r*   r+   r   r   __annotations__r   r   r5   r   r   s   @r.   r   r     sF     $O44 !%J$ BF;%-o%>;	; ;r-   r   c                         e Zd Zd fdZ xZS )NewGlobalVariablec                 $    t        |   di | y r3   r4   r5   r8   r9   r:   s     r.   r5   zNewGlobalVariable.__init__      "6"r-   r   )r)   r*   r+   r5   r   r   s   @r.   r   r     s    # #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_apply  s    v||T,V,,r-   )!produce_trampoline_autograd_apply_origin)r   r   s   ` r.   r   r     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 subclassr   c                 2    t        |   di | || _        y r3   )r4   r5   r   )r8   r   r9   r:   s      r.   r5   z!AutogradFunctionVariable.__init__   s    "6"r-   c           	         dfd}t        j                  |||f       rZt        j                         rEt        j
                  du rt        j                  d       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/        j1                  | j                  j2                        | j                  j4                        } ||| j                  j6                  |t/        |d            j9                  ||      }| j,                  r~t/        | j,                  d      }t;        |j=                  t>        j@                               |r>t/        | j,                  d      }t;        |j=                  t>        j@                               |S | j,                  rt/        | j,                  d      }nd }| j                  j                  }tB        jE                  ||      }|g|}tG        |tH        jJ                        rftM        jN                  |      }tQ        |      d	z
  tQ        |jR                        k(  r|d	d  }tU        jV                  ||      j9                  ||      S tG        |tH        jX                        rPtU        jZ                  |j\                  tU        j^                  | j                        |      j9                  ||      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)rp   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-   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   )rw   r]   forwardsetup_contextz?non-function or method in subclass of torch.autograd.Function: )0r   r  rl   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  rI   r   import_sourcer*   r)   backwardrr   r   r`   r   FUNCTION_MATCHAutogradFunctionContextVariablerb   rp   r{   r|   inspect	signaturerQ   _parametersr   r"   r   r~   rz   rt   )r8   rD   r   r9   r  r  r  
forward_fnis_setup_ctx_definedvjp_fnjvp_fnr  rI   r   fwd_srcsetup_ctx_srcr   ctxsigr  s    `                 @r.   
call_applyz#AutogradFunctionVariable.call_apply  s   	) 	edF^4U22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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%,,-##B'C4y1}COO 44ABx11"VDRRD&  E,,-//224;;? mBf-	. QRTQUVr-   c                 ^   | j                   j                  }t        |d   j                        t        j
                  j                  j                  u sJ t        |t        j                        sJ t        | j                  d      }t        j                  ||      j                  |||      S )Nr   r  r]   )r   r  rK   rL   rl   _dynamoexternal_utilsFakeBackwardCFunctionrp   r{   r|   r   rI   r   r"   rr   )r8   rD   r   r9   r   	fn_sources         r.   call_backwardz&AutogradFunctionVariable.call_backwarde  s    [[!!DGMM"emm&B&B&X&XXXX"e00111t{{J7	--bCQQf
 	
r-   c                 ,    t        | j                        S r=   )r  r   r8   rD   r   r9   s       r.   rr   z&AutogradFunctionVariable.call_functiono  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_proxyr   rr   )rD   proxyr  )trace_rulesr]   zUnsupported method: )r9  r6  builderr7  r   r   r   create_proxyr   r,  r2   rI   r   r!  getattr_staticr   rp   ry   __get__lookupcreate_with_sourcerr   r}   r   r~   rz   r   )r8   rD   rT   r   r9   r6  r7  r   r9  rI   objr   s               r.   rx   z$AutogradFunctionVariable.call_methodr  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,  r2  rr   rx   r   r   s   @r.   r  r    sO    7 			'	'N
_B
56= &	6=
 -6=r-   r  c                   D    e Zd ZU  ej                  e      Zee   ed<   y)SavedTensorBox)default_factorytensorsN)	r)   r*   r+   dataclassesfieldlistrE  r   r   r,   r-   r.   rC  rC    s    %6[%6%6t%LGT/"Lr-   rC  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 )r   zZ
    Tracks an autograd.Function() context using mutation tracking in side_effects.py
    r8  	inferencesaved_tensorsc                 p    t        	|   d||d| || _        || _        || _        || _        || _        y N)rL   
value_typer,   )r4   r5   rJ  r8  rK  needs_input_gradnon_differentiable)
r8   rL   rN  rJ  r8  rK  rO  rP  r9   r:   s
            r.   r5   z(AutogradFunctionContextVariable.__init__  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=   )rp   r   r  r  .0xs     r.   	<genexpr>z9AutogradFunctionContextVariable.create.<locals>.<genexpr>  s1      % 1i667KAOOK%s   24rr   r,   T)rJ  r8  rK  rO  )r   r   r;  rl   r  functionFunctionCtxro   track_object_new	functoolspartialr   rC  r   r  rL   )rD   r   r9   rO  r8  outs         r.   rb   z&AutogradFunctionContextVariable.create  s    $ %%   		&&U^^44@@"b
 ii$$55NN##///,.!1 
 	%**cii0
r-   c                 H    | j                   t        d       | j                   S )Nzproxy not set)r8  r   r   s    r.   as_proxyz(AutogradFunctionContextVariable.as_proxy  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   rx   rQ   r   rP  r   r    rb   r   rK  rJ  rI   r   ro   track_save_for_backwardrE  append)r8   rD   rT   r   r9   argr:   s         r.   rx   z+AutogradFunctionContextVariable.call_method  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                  rAt         j                  d      }t        j                   j                  j                  |      S t         =        S )N)ra  r`  c                  ,    j                  | |      S r=   )rx   )r   r9   rT   r8   rD   s     r.   r@   z=AutogradFunctionContextVariable.var_getattr.<locals>.<lambda>  s    (8(8T4(P r-   rK  rO  )rk   rK  r   TupleVariablerH  rE  rO  r    rb   rI   r   r   r   rL   r4   rc   r8   rD   rT   rI   r:   s   ``` r.   rc   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{{#DKK1CD&,,R1L1LfUUw"2t,,r-   )NFNNNNr   NNr   r   )r)   r*   r+   r   r%   r   r5   ry   rb   r^  rx   rc   r   r   s   @r.   r   r     s    
 	 
#	1	1	N 5 
5$  4
7 &	7
 -7 
7@- -r-   r   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 rM  r   )r8   rL   rN  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: )rl   r.  compiled_autogradin_compiled_autograd_region	one_graphr   r"   r/  FakeCompiledAutogradEnginern  rI   rr   r   ro   get_ca_final_callbacks_varr   r8   rD   rT   r   r9   s        r.   rx   z"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Gr-   r=   r   r   r)   r*   r+   r   r5   rx   r   r   s   @r.   rk  rk    sE     G
 
GH &	H
 -H 
Hr-   rk  c                   8     e Zd Zd fdZ	 	 	 	 	 	 	 	 ddZ xZS )rk   c                 2    t        |   di | || _        y r3   )r4   r5   r   )r8   r   r9   r:   s      r.   r5   zLambdaVariable.__init__I  s    "6"r-   c                 &     | j                   |i |S r=   )r   r4  s       r.   rr   zLambdaVariable.call_functionM  s     tww'''r-   r   r   )r)   r*   r+   r5   rr   r   r   s   @r.   rk   rk   H  s3    (#( &( -	(
 
(r-   rk   c                        e Zd Zddhej                  Zdd fdZ fdZdefdZe	de
j                  j                  fd       Z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 )r_   rT   py_typer1   c                     t        |   di | t        |t              sJ t        |t              sJ || _        || _        || _        y r3   )r4   r5   rp   r   r   rA  rT   rz  )r8   rA  rT   rz  r9   r:   s        r.   r5   zGetAttrVariable.__init__]  sH    "6"#///$$$$	r-   c                 P    | j                   | j                   S t        | 	         S r=   )rz  r4   rH   r8   r:   s    r.   rH   zGetAttrVariable.python_typee  s%    <<#<<7&((r-   c                 h    | j                   j                   d| j                   d| j                   dS Nr   rh   r   )r:   r)   rA  rT   r   s    r.   r   zGetAttrVariable.__repr__k  s.    ..))*!DHH:R		{!DDr-   
base_proxyc                     t        | |      S r=   )rO   )r  r   s     r.   create_getattr_proxyz$GetAttrVariable.create_getattr_proxyn  s    z4((r-   c                 r    t         j                  | j                  j                         | j                        S r=   )r_   r  rA  r^  rT   r   s    r.   r^  zGetAttrVariable.as_proxyr  s&    33DHH4E4E4GSSr-   c                     | j                   j                         }	 t        || j                        S # t        $ r t        |  d      d w xY w)Nz is not a constant)rA  rG   rO   rT   r   r   )r8   constants     r.   rG   z"GetAttrVariable.as_python_constantu  sQ    88..0	M8TYY// 	M%.@&ABL	Ms	   2 A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=   )rp   rA  r   r	  r   r   get_submodule
module_keyrT   rR   r!  r=  )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=   )rA  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=   )rA  rx   rT   r4  s       r.   rr   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      rq| 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 |d
k(  r| j                   dk(  r|st        | j                  t        j
                        r#| j                  j                  ||d   |d         S t        | j                  t        j                        r| j                  j                  |       t        | A  ||||      S )N)__getitem__rS   rR   r   rS   r   r   __contains__TF__setitem__)rT   is_python_constantrp   rA  r   r%   r	  rt   rG   has_key_in_generic_dictrc   rQ   r    r   convert_to_unspecializedr4   rx   )r8   rD   rT   r   r9   rA  keyr:   s          r.   rx   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]"tyyJ'>v$((I$G$GHxx77DGT!WMM$((I$>$>?11"5w"2tT6::r-   r=   r   r   r   )r)   r*   r+   r   r   r5   rH   r   r   ry   rl   fxProxyr  r^  rG   r  rC   rr   rH  dictrx   r   r   s   @r.   r_   r_   V  s     
	'	'N)E# E ) ) )TM	3DA#A &A -	A
 
A@; ?#	@;
 S/)*@; 
@; @;r-   r_   c                   H     e Zd Zd fdZ	 	 	 	 	 	 	 	 d fdZd Zd Z xZS )MethodWrapperVariablec                 @    t        |   di | || _        i | _        y r3   )r4   r5   method_wrapper_builtin_fns)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 | j                  j                  }| j                  j                  }|dk(  rUt        |      j                  }|t        j                  u r.t        j                  t              j                  |||g||      S t        | =  |||       y )Nr   r   r5   )r   r  rp   r   r  rQ   rc   rv   r)   rK   r5   rj   r>   rx   r4   rr   )r8   rD   r   r9   self_objwrapper_namefn_objr:   s          r.   rr   z#MethodWrapperVariable.call_function  s     &d&9&9:zGY--@
 t9>c&kQ&6667&&r4+>+>+G+G+P+PQQ &&//**33 :%(^,,F( 008DDx&7$&7  	b$/r-   c                      yNTr,   r   s    r.   r  z(MethodWrapperVariable.is_python_constant      r-   c                     | j                   S r=   )r  r   s    r.   rG   z(MethodWrapperVariable.as_python_constant  s    """r-   r   r   )r)   r*   r+   r5   rr   r  rG   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__  s    "6"	r-   c                     |dk(  rM| j                   rAt        | j                   d      }t        j                  || j                  j
                  |      S t        |   ||      S )Nr>  )rI   r   r   r   r  r>  r4   rc   rh  s       r.   rc   z$GetSetDescriptorVariable.var_getattr  sR    9Y7F"((TYY->->GG7&r400r-   c                      yr  r,   r   s    r.   r  z+GetSetDescriptorVariable.is_python_constant  r  r-   c                     | j                   S r=   )r  r   s    r.   rG   z+GetSetDescriptorVariable.as_python_constant  s    yyr-   r   r   )r)   r*   r+   r5   rc   r  rG   r   r   s   @r.   r  r    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 )PythonModuleVariablerL   is_torchr1   Nc                     t        |   di | || _        | j                  t        u xs% | j                  j                  j                  d      | _        y )Nztorch.r,   )r4   r5   rL   rl   r)   
startswithr  r8   rL   r9   r:   s      r.   r5   zPythonModuleVariable.__init__  sD    "6"


e+Wtzz/B/B/M/Mh/Wr-   c                 "    t         j                  S r=   )r{   
ModuleTyper   s    r.   rH   z PythonModuleVariable.python_type!  s    r-   c                     | j                   S r=   rL   r   s    r.   rG   z'PythonModuleVariable.as_python_constant$      zzr-   c                 "    d| j                    dS )NzPythonModuleVariable(r   r  r   s    r.   r   zPythonModuleVariable.__repr__'  s    &tzzl!44r-   c                 l    t        | j                  |      }t        j                  j	                  |      S r=   )rs   rL   r   r    rb   r8   rD   rT   r   s       r.   call_obj_hasattrz%PythonModuleVariable.call_obj_hasattr*  s)    T*))0088r-   c                    |j                   j                  j                  | |      r&|j                   j                  j                  | |      S | j                  s|| j
                  j                  vrt        | j
                  |      }n| j
                  j                  |   }| j                  xr t        | j                  |      }t        j                  |||      S r=   )r   ro   r   r   r  rL   rR   rO   rI   r   r   r   )r8   rD   rT   r   rI   s        r.   rc   z PythonModuleVariable.var_getattr.  s    99!!>>tTJ99))33D$??==D

(;(;; T2J,,T2J>DKK!>$$RV<<r-   r   )r)   r*   r+   r   r   r{   r  r5   rH   rG   r   r   r  rc   r   r   s   @r.   r  r    s\     
	'	'NXe.. XT X
 5# 59
=r-   r  c                   R     e Zd Zd	 fdZ	 	 	 	 	 	 d
dZdddefdZd ZddZ xZ	S )TypingVariablec                 2    t        |   di | || _        y r3   r4   r5   rL   r  s      r.   r5   zTypingVariable.__init__<      "6"
r-   c                     |dk(  r9t        |      dk(  r+| j                  |d   j                            }t        |      S t	        d       y )Nr  r   r   z+unsupported method call on typing variablel)rQ   rL   rG   r  r   )r8   rD   rT   r   r9   
new_typings         r.   rx   zTypingVariable.call_method@  sE     = SY!^DG$>$>$@AJ!*--CDr-   rD   r&   rT   c                    ddl m}m} |t        v rt	        j
                  | |      S |j                  j                  j                  | |      r|j                  j                  | |      S t        | j                  |      }| j                  r%t        | j                  |      }  |||      |      S |j                  ||      S )Nr   )SourcelessBuilderVariableBuilder)r:  r  r  r   r   r_   r   ro   r   r   rO   rL   rI   r   rb   )r8   rD   rT   r  r  rL   r   s          r.   rc   zTypingVariable.var_getattrM  s    ?)),,T48899!!>>tTJ??,,T488

D);;$T[[$7K3?2{3E::$++B66r-   c                     | j                   S r=   r  r   s    r.   rG   z!TypingVariable.as_python_constant]  r  r-   c                 X    |j                  |j                  | j                               y r=   )append_outputcreate_load_constrL   r   s     r.   rC   zTypingVariable.reconstruct`  s!    0 	g77

CDr-   r   r   )r?   ztorch._dynamo.codegen.PyCodegenr1   N)
r)   r*   r+   r5   rx   r   rc   rG   rC   r   r   s   @r.   r  r  ;  sN    E &	E
 -E 
E75 7S 7 Er-   r  )maxsizec                      ddl m}  i }| j                         D ]H  \  }}|j                  j                         D ]&  \  }}t	        |      st        ||d      x}s"|||<   ( J |S )zd
    This generates a mapping from numpy modules to their torch._numpy
    modules equivalents.
    r   )NP_TO_TNP_MODULEN)utilsr  r   rR   callablerO   )r  np_fn_to_tnp_fnnp_modtnp_modr   tnp_fnnp_fns          r.   get_np_to_tnp_mapr  {  sz     )O+113 4&//557 	4OGV $FGT::5:-3OE*	44 r-   c                  j    t               } | j                         D ci c]  \  }}||
 c}}S c c}}w )z
    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      r.   get_tnp_to_np_mapr    s.     	AWWY'TQAqD'''s   /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   rl   _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=rr   )r   trace_numpyr   rL   r  r  tensorr  r  rS   r  rG   r   r   r)   r*   use_numpy_random_streamr+   
patch_argsr  r   r   r    rb   r   r;  r   )r8   rD   r   r9   r  r  r   collection_variable_typrU  r  r  r   r8  s                r.   rr   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numpy)r   rt  s        r.   rx   zNumpyVariable.call_method  s     	gr-   c                     | j                   S r=   r  r   s    r.   rG   z NumpyVariable.as_python_constant  r  r-   c                     t         j                  r0t        | j                  t              r| j                  j
                  S t        |          S r=   )r   r  rp   rL   rK   r)   r4   r^  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  rr   rx   rG   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.__repr__  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.reconstruct  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  rS  s     r.   rV  z.StringFormatVariable.create.<locals>.<genexpr>"  s!      
   "
s   )all	itertoolschainvaluesr   r    rb   formatrG   r   rH  r  )r  r  sym_args
sym_kwargsr  r  s         r.   rb   zStringFormatVariable.create   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   rp   r   r  r  r  )r8   r  r  r  r9   r:   s        r.   r5   zStringFormatVariable.__init__.  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__5  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  create_load_attrr   s   r.   r@   z2StringFormatVariable.reconstruct.<locals>.<lambda>:  s9    G))--d.@.@A,,X6 r-   T)call_function_exCALL_FUNCTION_EXr   )rd  )rA   r   rg  r  r  r   r    rb   ConstDictVariabler  r	   )r8   r?   r  r  r9   s   ``   r.   rC   z StringFormatVariable.reconstruct8  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}   rb   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__P  r  r-   c                     t        |       xrR t        | t        j                  t        j                  f      xr& | t
        j                  j                  j                  v S r=   )	r  rp   r{   r|   BuiltinFunctionTyperl   r.  r   reorderable_logging_functions)rA  s    r.   is_reorderable_logging_functionz1DebuggingVariable.is_reorderable_logging_functionT  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_logsrL   r   debug_localsrc  rH  r4  s       r.   rr   zDebuggingVariable.call_function\  sk    99$$TZZv>0 =#fAfX-EG
 	d4j12r-   c                 8    | j                   j                  |      S r=   )rI   rC   r   s     r.   rC   zDebuggingVariable.reconstructi  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_leavesrp   )r   r   r9   allowed_input_types	flat_argsrd  s         r.   r#  z"DebuggingVariable.can_reorder_logsl  sY     $$&& 
 &&f~6	 	Cc#67	 r-   r   r   )r1   T)r)   r*   r+   r   r5   ry   r   rr   rC   r#  r   r   s   @r.   r  r  J  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                 2    t        |   di | || _        y r3   r  r  s      r.   r5   zLoggingLoggerVariable.__init__  r  r-   c                 $   |j                   ry t        | j                  |d       }t        |dd       }||hj                  t        j
                  j                  j                        rt        j                  j                  d       S t        d       y )Nrz   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"  rO   rL   intersectionrl   r.  r   ignore_logger_methodsr   r    rb   r   )r8   rD   rT   r   r9   methodrW  s          r.   rx   z!LoggingLoggerVariable.call_method  sv     99T406:t4H**5==+?+?+U+UV--44T::Y	
r-   r   r   ru  r   s   @r.   r,  r,    s0    
 &	

 -
 

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.   rG   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() -> )rG   r   r   r   _error_prefixrO   rL   r   r    r^   rb   rp   reMatchConstantRegexMatchVariable)r8   rD   rT   r   r9   rU  cargsr  r  ckwargsr   s              r.   rx   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=   )rO   rL   rp   np_floatingfloatnp_dtypeNumpyDTypeVariablerK   rJ   
np_genericr  r   r    r^   rb   r_   r  s       r.   rc   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   r;  r  r4  rD  r5  rB  r6  rF  ImportErrorrK   r5   rG   rH  r   r  r   rx   rc   r   r   s   @r.   r3  r3    s    B*M0	
 	
D ?#	D
 S/)*D 
D.+5 +S +_ +E  0>2r2B/0s   
> AAr3  c                       e Zd ZdZy)RegexPatternVariablez
re.PatternNr)   r*   r+   r;  r,   r-   r.   rI  rI    s     Mr-   rI  c                       e Zd ZdZy)r>  zre.MatchNrJ  r,   r-   r.   r>  r>    s    Mr-   r>  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 )NrL   r,   )
setdefaultrl   __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+   r;  r5   r   r   s   @r.   rM  rM    s    'M# #r-   rM  c                       e Zd ZdZy)NumpyTypeInfoVariableznp.iinfo/np.finfoNrJ  r,   r-   r.   rR  rR    s    'Mr-   rR  c                       e Zd ZdZd Zy)rE  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).
        )rL   rK   r)   r   s    r.   r^  zNumpyDTypeVariable.as_proxy  s     zz'''r-   N)r)   r*   r+   r;  r^  r,   r-   r.   rE  rE    s    #M(r-   rE  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   )seedrq   )rQ   r   r   r    rb   RandomVariablebaseValueMutationNew)r8   rD   r   r9   rY  s        r.   rr   z!RandomClassVariable.call_function  sh    t9q=8978:=d)q.y))006dSTgY^^%D%D%F
 	
r-   r   r   )r)   r*   r+   r   r5   rr   r   r   s   @r.   rV  rV    s    #
r-   rV  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 )rZ  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randrY  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_objr^  RandomsetstategetstaterG   )r8   rb  rY  r9   r:   s       r.   r5   zRandomVariable.__init__&  sy     	"6"//555 --/DKKK  1040@4**,dD ---DKr-   c                 "    t         j                  S r=   )r^  re  r   s    r.   rH   zRandomVariable.python_type5  s    }}r-   c                     | j                   S r=   )r^  r   s    r.   rG   z!RandomVariable.as_python_constant8  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)rY  rg  rf  rz   T)rK   r^  re  r  r  rZ  _supported_fn_namesrs   rO   r!  	isbuiltinr>  )r   rT   meths      r.   rd  z&RandomVariable.is_supported_random_obj;  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=   )rK   intrS  s     r.   rV  z-RandomVariable.check_state.<locals>.<genexpr>S  s     4a47c>4s   r   )rK   r   rp  r  rC  )states    r.   check_statezRandomVariable.check_stateN  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   )rZ  rr  r   rg  r    rb   )rq  rU  s     r.   
wrap_statezRandomVariable.wrap_stateV  s    ""5)&&**11%(;''CH8LaY//66q9L **11%(;
 	
 Ms   &B/c                 P    | j                         }t        j                  |       |S r=   )rG   rZ  rr  )rq  	state_objs     r.   unwrap_statezRandomVariable.unwrap_statec  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 )NrY  rg  rf  r   c                  r    t        j                         }|j                          t        |      | i |S r=   )r^  re  rf  rO   )r   r9   rrT   rq  s      r.   call_random_methz4RandomVariable.call_method.<locals>.call_random_meth  s3    MMO

5!'wq$'888r-   )r   ro   mutationr^  rY  rG   r   r   r    rb   rt  rg  rf  rw  rk  rO   r#   r4   rx   )r8   rD   rT   r   r9   rU  r  r   r{  r  r  rq  r:   s     `        @r.   rx   zRandomVariable.call_methodi  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 )Nre  )rB   create_load_python_moduler^  r  r?   s   r.   r@   z,RandomVariable.reconstruct.<locals>.<lambda>  s3    G))55f=,,X6 r-   r   Frf  r   T)rA   rr   r   r   rt  r^  rg  pop_topr   s    `r.   rC   zRandomVariable.reconstruct  sz    	
 	a' 	*% 4 4 678a&r-   ri  )r)   r*   r+   r   r   r   rk  r   r^  re  r5   rH   rG   ry   rd  rr  rt  rw  rH  r  r   rx   rC   r   r   s   @r.   rZ  rZ    s     			'	'N
 )-*..v}}%. '.
 
.  $ ; ; 

 

  
%; ?#	%;
 S/)*%; 
%;Nr-   rZ  c                   L     e Zd Zed        Z fdZ	 	 	 	 	 	 	 	 ddZd Z xZS )WeakRefVariablec                     |j                  dd       } |       }|xr t        |      }t        j                  | ||      }||d<   t	        |fi |S )NrI   )rS   r   r   r   r  )rD   weakref_valueoptionsrI   referentreferent_vts         r.   r   zWeakRefVariable.build  sW    Xt, ?5-f5%++B&A"{6g66r-   c                 2    t        |   di | || _        y r3   )r4   r5   r  )r8   r  r  r:   s      r.   r5   zWeakRefVariable.__init__  s    #7#&r-   c                     | j                   S r=   )r  r4  s       r.   rr   zWeakRefVariable.call_function  s     r-   c                     j                  fd        | j                         j                  t        dd             y )Nc                  (     j                  dd      S )Nweakrefref)r   r  s   r.   r@   z-WeakRefVariable.reconstruct.<locals>.<lambda>  s    g&>&>y%&P r-   r   F)rA   r  rB   r   r   s    `r.   rC   zWeakRefVariable.reconstruct  s6    PQ  !21e<=r-   r   )	r)   r*   r+   ry   r   r5   rr   rC   r   r   s   @r.   r  r    sJ    7 7' #  &  -	 
 
 >r-   r  )lr   rF  rZ  r!  r  r^  r<  r  r{   r  typingr   r   torch._Crl   torch._numpyr  r  torch.utils._pytreer  _pytreer'  r<  r   r   bytecode_transformationr   r	   create_parameter_opr
   excr   r   guardsr   r   mutation_guardr   rI   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(   r0   r   r   r   r   r   r   r   r  	dataclassrC  r   rk  rk   r_   r  r  r  r  	lru_cacher  r  r  r  r   r  r  r,  r3  rI  r>  rM  rR  rE  finfoiinfor4  r  rV  rZ  r  r,   r-   r.   <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 >r-   