
    3j{                    @   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
r
SSKrSSKrSSKrSSKJrJr  SSKJr  SSKJr  SSKJrJrJr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#  SSK$J%r%  SS	K&J'r'  S
SK(J)r)J*r*J+r+J,r,  S
SK-J.r.J/r/J0r0  S
SK1J2r2  S
SK3J4r4J5r5J6r6  S
SK7J8r8J9r9  S
SK:J;r;  S
SK<J=r=J>r>J?r?J@r@JArAJBrB  S
SKJCrCJDrDJErEJFrFJGrGJHrHJIrI  SSKJJKrKJLrLJMrM  SSKNJOrO  SSKPJQrQJRrR  SSKSJTrTJUrUJVrV  \(       a  SSKWJXrX  SSKYJZrZ   " S S\M5      r[ " S S\M5      r\ " S S\M5      r] " S  S!\M5      r^ " S" S#\M5      r_ " S$ S%\_5      r` " S& S'\M5      ra " S( S)\M5      rb " S* S+\M5      rcS,\S-\S.\4   4S/ jrd " S0 S1\M5      re\R                   " S2 S35      5       rg " S4 S5\V5      rh " S6 S7\V5      ri " S8 S9\M5      rj " S: S;\M5      rk " S< S=\M5      rl " S> S?\M5      rm " S@ SA\M5      rn " SB SC\M5      ro\R                  " SSD9S-\q\R$                  \R                  4   4SE j5       rs\R                  " SSD9S-\q\R                  \R$                  4   4SF j5       rt " SG SH\M5      ru " SI SJ\M5      rv " SK SL\M5      rw " SM SN\M5      rx " SO SP\M5      ry " SQ SR\M5      rz " SS ST\M5      r{ " SU SV\M5      r| " SW SX\M5      r} " SY SZ\}5      r~ " S[ S\\}5      r\GR                   \}\GR                  \}\GR                  \0r " S] S^\M5      r " S_ S`\M5      r " Sa Sb\M5      rg)ca  
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)CallableSequence)Random)BuiltinFunctionType)AnyLiteralTYPE_CHECKING	TypeGuardUnion)MutationType)TupleVariable)Source   )configgraph_break_hintstrace_rules	variables)create_call_functioncreate_call_function_excreate_instruction)$do_not_convert_to_tracable_parameter)raise_observed_exceptionraise_type_errorunimplemented)GuardBuilderinstall_guard)unpatched_nn_module_init)
AttrSourceGenericAttrSourceGetItemSourceTypeMROSource
TypeSourceWeakRefCallSource)check_unspec_or_constant_argscmp_name_to_op_mappingidentityis_tensor_base_attr_getteristypeproxy_args_kwargsraise_args_mismatch   )#AsPythonConstantNotImplementedErrorNO_SUCH_SUBOBJVariableTracker)ConstantVariable)NestedUserFunctionVariableUserFunctionVariable)call_random_fnis_standard_setattrUserDefinedObjectVariable)	PyCodegen)InstructionTranslatorc            
          ^  \ rS rSr\r1 \R                  kr SS\S\S-  S\SS4U 4S jjjr	S\
4S jrSU 4S	 jjrS
SS\S\\\S-  4   4U 4S jjrS
SS\S\4S jrS
SS\S\\   S\\\4   S\4
S jrSrU =r$ )SuperVariableQ   Ntypevarobjvarkwargsreturnc                 >   > [         TU ]  " S0 UD6  Xl        X l        g N )super__init__r:   r;   )selfr:   r;   r<   	__class__s       V/home/wildlama/miniconda3/lib/python3.13/site-packages/torch/_dynamo/variables/misc.pyrB   SuperVariable.__init__Y   s#     	"6" 
     c                 "    [         R                  $ N)builtinsrA   rC   s    rE   python_typeSuperVariable.python_typej   s    ~~rG   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      $ rI   )r   BuiltinVariablerA   )rD   codegens   rE   <lambda>+SuperVariable.reconstruct.<locals>.<lambda>n   s    gi.G.G.N&OrG   r   Fr+   )add_push_nullr:   r;   extend_outputr   rC   rQ   rD   s    `rE   reconstructSuperVariable.reconstructm   s`    OP;;"DKK !!"6q%"@A!!"6q%"@ArG   txr6   namec                   > U R                   (       d+  [        SSSU SU R                   SU R                    S3S/S9  U R                   c   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       Hb  n	Xy   R"                  R%                  U[&        5      =n
(       d  M.  U
[&        Ld  M9  U(       a  [)        [+        [-        U5      U	5      U5      nX4s  $    [        S
SSU SU R                   SU R                    S3SS/S9  g ! [         a    [        [        X45      U5      S 4s $ f = f)Nz1-arg super not implemented z"Dynamo failed to trace attribute `z$` accessed via `super()` (for type `z` and object `z4`) because one-argument of super() is not supported.z-Use two-argument super(type, object_or_type).gb_typecontextexplanationhintsr+   zUnable to resolve super getattrz8`) because the resolved attribute type is not supported.z0Ensure the attribute exists in the parent class.z(Check the arguments passed to `super()`.)r;   r   r:   as_python_constantrL   sourcer"   
issubclasstypevalue__mro__index
ValueErrorgetattrrA   rangelen__dict__getr-   r   r    r!   )rC   rY   rZ   search_typetype_to_usetype_to_use_sourcerc   
search_mrostart_indexrh   resolved_getattrrD   s              rE   _resolved_getattr_and_source*SuperVariable._resolved_getattr_and_sourcev   s    {{5@ G,,0LL>} UDD D	 {{&&&ll557 kk--/.2kk.@.@Jt{{))*d 	 k4((++++K!%!3!3 ((
	H$**;7!;K ;J8E#-#4#=#=#A#A$#WWW#>9)!+)-8J*KUS " ,33 9 	5<TF C((,~^DKK= QDD C:
	
'  	H 5:DA4GG	Hs   G	 	!G-,G-c                 .   U R                  X5      u  p4[        R                  R                  U5      (       d  [	        X[        U5      S9$ U(       a(  [        UR                  [        R                  5      5        [        R                  R                  X4S9$ )Npy_typerc   )ru   r   r/   
is_literalGetAttrVariablere   r   
make_guardr   CONSTANT_MATCHcreate)rC   rY   rZ   rf   rc   s        rE   var_getattrSuperVariable.var_getattr   st     99"C))44U;;"4tE{CC&++L,G,GHI))000FFrG   argsc                    U R                  X5      u  pVU R                  c   eU[        R                  L a  [	        [
        5      $ U[        R                  R                  R                  L a  U R                  nSSK	J
n  [        U[        R                  5      (       aw  [        UR                  U5      (       a\  U(       dU  U(       dN  [        5          [         R"                  " U[$        US9n	U	R'                  XR                  /U-   U5      sS S S 5        $ [)        SSU  SU SU SU 3SU S3/ [*        R,                  QS	9  GOrU R                  R.                  (       a  [1        US
5      (       a  UR2                  S:X  a  [        R4                  R7                  U5      (       a|  UR8                  n
[1        U
S5      (       a'  U
R:                  S:X  a  [         R"                  " X5      nO%Uc   eUR<                  n[        R4                  " XS9nUR?                  USX45      $ [        U[@        5      (       a[  [        URB                  [D        RF                  5      (       a2  [         R"                  " XRB                  USS9n	U	R'                  XU5      $ [        U[H        5      (       Ga  [        URB                  [D        RF                  5      (       a  [        U R                  [        R4                  5      (       a  U R                  nOhS nU R                  R.                  (       a  [K        U R                  R.                  5      n[         R"                  " UU R                  RL                  U5      nUc   e[         R"                  " UURB                  [O        US5      SS9n	U	R'                  X/UQU5      $ [        U[D        RF                  5      (       a6  [         R"                  " XUSS9n	U	R'                  XR                  /U-   U5      $ [        U[D        RP                  5      (       a:  [        RR                  " URB                  U R                  US9R'                  XU5      $ [U        U5      (       a?  [        U R                  [        5      (       a   U R                  RV                  " U/UQ70 UD6$ U[        RX                  L a  US   n UR[                  5       nUR^                  R                  Ra                  U R                  5      (       d1  [)        SSU  SU 3SU R                   S3S/[*        Rb                  QS	9  [        U[d        5      (       d   eUR^                  R                  Rg                  U R                  U[        Rh                  " 5       5        [        Rj                  Rm                  S 5      $ [        U R                  [        R                  5      (       am  U R                  Rn                  bV  U R                  Rp                  b?  XPR                  Rp                  ;   a&  U R                  Rn                  R?                  XX45      $ U[        Rr                  L Ga"  US   Rt                  nUR^                  R                  Rw                  U R                  U5      (       a`  UR^                  R                  Ry                  U R                  USS9n[        U[        Rh                  5      (       a  [{        [|        U5        U$ S n [        Rs                  U R                  Rt                  U5      nS nU R                  R.                  b   [        U R                  R.                  U5      n[         R"                  " UUU5      $ U[        R                  R                  L a  US   n0 nUS   R                  nUS   R                  R                  5        H%  u  nnUR                  R[                  5       nUUU'   M'     UR                  R                  nSUR                  lE         UR'                  UUU5      UUR                  lE        $ [        U[D        R                  5      (       aO  U[        R                  " 5       ;   a6  [         R"                  " XUSS9nUR'                  XR                  /U-   U5      $ [)        SSU  SU 3SU S U S!3S"/S	9  g ! , (       d  f       N)= f! [\         a  n[)        SSU  SU 3SS/US9   S nAGN.S nAff = f! [|         a    [{        [|        U5         GNf = f! UUR                  lE        f = f)#Nr   )AttributeMutationNewrz   z#Unsupported super().__init__() callcall_method  z0Dynamo encountered a super().__init__() call on zK that resolved to a `torch.nn.Module.__init__()` call that we cannot trace.r]   __name____new__
__module__rJ   Trc   realize__func__r   z7Non-constant attribute given to `super().__delattr__()`zbDynamo requires the attribute name passed to `super().__delattr__(...)` to be a constant (string).zEEnsure the attribute name is a string literal or a constant variable.)r^   r_   r`   ra   from_exczFAttempted super().__delattr__() on an object without mutation trackingzmDynamo needs to track mutations on an object before `super().__delattr__` can be used on it. But the object (z3) doesn't have attribute mutation tracking enabled.z<Ensure the object is tracked by Dynamo's side effect system.)
deleted_ok   F)r   zFAttempted to call a super() attribute that is not a function or methodz4Dynamo does not know how to trace the call `super().z()` because `super().z(` is not a function or method attribute.zMEnsure the attribute accessed via `super()` is a standard method or function.)Iru   r;   objectrB   LambdaVariabler&   torchnnModuleside_effectsr   
isinstancer   r4   mutation_typer   r.   buildr   call_functionr   r   	DIFFICULTrc   hasattrr   UserDefinedClassVariableis_supported_new_method__self__r   membercall_methodstaticmethodr   typesFunctionTypeclassmethodr"   
value_typer   
MethodTypeUserMethodVariabler3   method_setattr_standard__delattr__rb   NotImplementedErroroutputis_attribute_mutation
DYNAMO_BUGstr
store_attrDeletedVariabler/   r   _base_vt_base_methods__getattribute__rf   has_pending_mutation_of_attr	load_attrr   AttributeErrorr   _C_disabled_torch_function_implitemsvtsymbolic_torch_function_statetorch_function_subclass_enabledMethodDescriptorTyper   get_tensor_method)rC   rY   rZ   r   r<   inner_fnrc   r;   r   fn_vtuser_clsuser_cls_vtuser_cls_sourcecls_variable
cls_sourceattrexc	attr_nameresult
attr_valueattr_sourcefunc	tf_kwargstf_argshash_key_vtvalue_vtkey_strtx_oldfn_vars                                rE   r   SuperVariable.call_method   s     <<RF{{&&& v&!(++111[[F; 69#F#FGGv335IJJ9;+114VE !..rKK=43GP	 <; A*4&$qaxH!  "1!1 9-778 KK*--!!Y.22JJ8TT((Hx..83F3F*3T/>/D/DR/R)))"(--'@@ **2y$GG,//Ju115
 5
 $))%%fdE &&r88+..:u114
 4
 $++y'I'IJJ  ${{ "
;;%%!+DKK,>,>!?J.44KK** 
 %%%#))!!!&*5	E &&r+@4+@&II%"4"455#))"vtTE&&rKK=4+?HH%"2"233//!!4;;vmBf-. !**zKK20
 0
 ;;66rKDKFKK+++7D..0 99))??LLd*4&$8!#{{m ,(!(
 W*55 dC((((II""--T9#<#<#> --44T::t{{I$G$GHH$$0))5KK555;;''33BdKK000 QIyy%%BBY  //99KKt :  fi&?&?@@,^R@J= $44T[[5F5F	R
 K{{!!-/0B0BIN"((ZEE???
 7DI1gmmG)-a)<)<)>%X%..;;=%-	'" *? 55UUFOTB,,L))"gyA  00P x!;!;<<K99;; %**2NF''[[MD,@&II'"4&$0v24& 9,, `
	
e <;h ' 
U*4&$8!L ` !	 	
n " =(<=8  00PsB   :cc  *d "d- 
c 
d	*dd	d*)d*-e )r;   r:   rI   rQ   r5   r=   N)r   r   __qualname____firstlineno__rA   _cpython_typer.   _nonvar_fieldsr   rB   re   rL   rW   r   tupler   ru   r   listdictr   __static_attributes____classcell__rD   s   @rE   r8   r8   Q   s	   M		'	'N *.   $& 	
 
 "T BB
)B
14B
	sJ%%	&B
HG5 GS G_ G X
#X
 X
 ?#	X

 S/)*X
 
X
 X
rG   r8   c                   v   ^  \ rS rSrS\R
                  S\SS4U 4S jjrS\4S jr	SS	S
\
S\4U 4S jjrSrU =r$ )FrameSummaryVariablei  frame_summaryr<   r=   Nc                 2   > [         TU ]  " S0 UD6  Xl        g r?   )rA   rB   r   )rC   r   r<   rD   s      rE   rB   FrameSummaryVariable.__init__  s    "6"*rG   c                 "    [         R                  $ rI   )	tracebackFrameSummaryrK   s    rE   rL    FrameSummaryVariable.python_type  s    %%%rG   rY   r6   rZ   c                   > US:X  a*  [         R                  " XR                  R                  5      $ US:X  a*  [         R                  " XR                  R                  5      $ US:X  a*  [         R                  " XR                  R
                  5      $ US:X  a*  [         R                  " XR                  R                  5      $ [        TU ]!  X5      $ )NlinenofilenamerZ   line)	r.   r   r   r   r   rZ   r   rA   r   rC   rY   rZ   rD   s      rE   r    FrameSummaryVariable.var_getattr  s    8"((-?-?-F-FGGZ"((-?-?-H-HIIV^"((-?-?-D-DEEV^"((-?-?-D-DEEw"2,,rG   )r   )r   r   r   r   r   r   r   rB   re   rL   r   r.   r   r   r   r   s   @rE   r   r     sP    +i&<&< + +PT +&T &	-5 	-S 	-_ 	- 	-rG   r   c            
       r  ^  \ rS rSrS\S\S \4   S\SS4U 4S jjr\	S\
R                  S\S \4   SS 4S j5       r\S	\S\4S
 j5       rS\\
R                  \-     4S jrS\S\4S jrS\\R,                     4S jrSSS\S\S\4S jrSSS\S\4U 4S jjrSSS\S\\   S\\\4   S\4
U 4S jjrSrU =r$ )TracebackVariablei  r   tb_nextr<   r=   Nc                 H   > [         TU ]  " S0 UD6  Xl        Uc   eX l        g r?   )rA   rB   r   r   )rC   r   r   r<   rD   s       rE   rB   TracebackVariable.__init__  s,     	"6"*"""rG   c                 "    U " [        U5      US9$ )N)r   )r   )clsr   r   s      rE   from_frame_summary$TracebackVariable.from_frame_summary  s     '6HHrG   objc                 P    [        U [        5      =(       d    U R                  5       $ rI   )r(   r   is_constant_noner   s    rE   is_valid_traceback$TracebackVariable.is_valid_traceback  s    c,-G1E1E1GGrG   c                     [        U R                  [        5      (       a  U R                  /$ U R                  /U R                  R	                  5       -   $ rI   )r(   r   r/   r   
extract_tbrK   s    rE   r   TracebackVariable.extract_tb  sD    $,, 011&&''""#dll&=&=&???rG   tbc                     U n[        U[        5      (       a(  X!L a  gUR                  n[        U[        5      (       a  M(  g)NTF)r(   r   r   )rC   r  curr_tbs      rE   has_reference_cycle%TracebackVariable.has_reference_cycle  s;    8<W/00}ooG W/00 rG   c                 "    [         R                  $ rI   )r   TracebackTyperK   s    rE   rL   TracebackVariable.python_type  s    """rG   rY   r6   name_varvalc                    UR                  5       nUS:X  a  U R                  U5      (       d  [        [        U5        [	        U[
        [        45      (       d   eU R                  U5      (       d+  [        U[
        5      (       a&  UR                  U 5      (       a  [        [        U5        X0l
        [        R                  R                  S 5      $ )Nr   )rb   r   r   	TypeErrorr   r   r/   r  r(   ri   r   r   r   rC   rY   r	  r
  rZ   s        rE   call_setattrTracebackVariable.call_setattr  s     **,9**3//(B7c$57G#HIIII'',,s-..33J3J43P3P(R8L))0066rG   rZ   c                    > US:X  a  U R                   $ US:X  a  U R                  R                  US5      $ US:X  a  U R                  $ US:X  a  [        SU  S3S/ [        R
                  QS	9  [        TU ]	  X5      $ )
Nr   	tb_linenor   r   tb_lastiz traceback.tb_lasti not supportedz accessing 'tb_lasti'zNDynamo does not support accessing the tb_lasti attribute of traceback objects.r]   )r   r   r   r   r   SUPPORTABLErA   r   s      rE   r   TracebackVariable.var_getattr  s    9<<[ %%11"h??_$%%%Z:& 56l6)556	 w"2,,rG   r   c                    > US:X  a  [         R                  " XUS   L 5      $ US:X  a  U R                  " U/UQ76 $ [        TU ]  XX45      $ )N__eq__r   __setattr__)r.   r   r  rA   r   )rC   rY   rZ   r   r<   rD   s        rE   r   TracebackVariable.call_method  sV     8"((T!W_==]"$$R/$//w"2T::rG   )r   r   )r   r   r   r   r   r   r/   r   rB   r   r   r   r   r   r.   boolr   r   r   r  re   r   r  rL   r  r   r   r   r   r   r   r   s   @rE   r   r     s   + *,<<= 	
 
$ I --I *,<<=I 
	I I H HD H H@D!7!7:N!NO @
o $ #T%"5"56 #7#7 "7 	7
 
7$-5 -S -_ - ;#; ; ?#	;
 S/)*; 
; ;rG   r   c                   D  ^  \ rS rSr\r   SS\S\\   S\	\
\4   S-  S\S-  S\S-  SS4U 4S	 jjjrS
\SS4S jrSS jrS\4S jrSSS\S\S\4S jrSSS\
S\\   S\	\
\4   S\4
U 4S jjrSSS\
S\4U 4S jjrS\
4S jr\r\S\S\
4S j5       rS\
4S jrSrU =r$ )ExceptionVariablei  Nexc_typer   init_kwargsrc   r   r=   c                 n  > [         TU ]  XES9  Xl        X l        U(       a!  [	        SU  SU 3S/ [
        R                  QS9  [        R                  " S 5      U l	        [        R                  " S 5      U l
        [        R                  " S5      U l        [        R                  " S 5      U l        S U l        g )N)rc   r   z,Keyword args passed to exception constructorz with kwargs zRDynamo does not know how to handle keyword args passed to an exception constructorr]   F)rA   rB   r  r   r   r   r  r/   r   __context__	__cause____suppress_context____traceback__python_stack)rC   r  r   r  rc   r   rD   s         rE   rB   ExceptionVariable.__init__  s     	D 	F&k];p6)556	 -=,C,CD,I +;*A*A$*G5E5L5LU5S!.>.E.Ed.K <@rG   r_   c                     Xl         g rI   )r  )rC   r_   s     rE   set_contextExceptionVariable.set_context@  s    "rG   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      $ )NrJ   )load_import_fromr  r   rQ   rC   s   rE   rR   /ExceptionVariable.reconstruct.<locals>.<lambda>E  s    G,,Z9O9OPrG   FrZ   r=   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   )rj   r(   r/   rf   dup_toprU   rot_nr   )rZ   r   rQ   rC   s     rE   codegen_attr3ExceptionVariable.reconstruct.<locals>.codegen_attrJ  sk    4&Dd,--zz%88>$>8!%%gmmA&67""4(rG   r  r   r!  )rT   foreachr   r   rl   r   )rC   rQ   r0  s   `` rE   rW   ExceptionVariable.reconstructC  sq    P	
 			"c$))ne4	)s 	)t 	) 	) 	]#[!+,rG   c                     U R                   $ rI   )r  rK   s    rE   rL   ExceptionVariable.python_typeX  s    }}rG   rY   r6   r	  r
  c                    UR                  5       nUS:X  ap  UR                  5       (       dH  [        U[        R                  [        R
                  [        R                  45      (       d
   U S35       eU R                  U5        GO*US:X  a  UR                  5       (       dM  [        U[        R                  [        R                  [        R
                  [        R                  45      (       a+  X0l	        [        R                  R                  S5      U l        O[        US5        OUS:X  a+  UR                  SS5      (       a  X0l        Of[        US5        OYUS:X  a-  [        R!                  U5      (       d  [        US	5        X0l        O&[%        S
SU  SU 3SU S3/ [&        R(                  QS9  [        R                  R                  S 5      $ )Nr  z! is not a valid exception contextr   Tz9exception cause must be None or derive from BaseExceptionr!  Fr"  z0__traceback__ must be a traceback object or Nonez4Unsupported attribute assignment on Exception objectzcall_setattr r   z/Dynamo does not support setting the attribute 'z{' on tracked exception objects. Only `__context__`, `__cause__`, `__suppress_context__`, and `__traceback__` are supported.r]   )rb   r   r   r   r  !UserDefinedExceptionClassVariable"UserDefinedExceptionObjectVariabler&  rP   r   r/   r   r!  r   is_constant_matchr   r   r"  r   r   r  r  s        rE   r  ExceptionVariable.call_setattr[  s    **,= ''))Z//??@@. . 9 789  S![ ##%%--//??@@	* * "%,5,F,F,M,Md,S) S ++$$T511,/) S _$$77<< %WX!$N'vQtf56 ZZ 7)556 ))0066rG   rZ   r<   c                    > US:X  a  U R                   " U/UQ76 $ US:X  a.  Uu  nU R                  U[        R                  " US5      U5        U $ [        TU ]  XX45      $ )Nr  with_tracebackr"  )r  r.   r   rA   r   )rC   rY   rZ   r   r<   r  rD   s         rE   r   ExceptionVariable.call_method  si     = $$R/$//%%DRb/"7"7O"LbQK7&r>>rG   c                   > US:X  a   [         R                  " XR                  5      $ US:X  a  U R                  $ US:X  a  U R                  $ US:X  a  U R
                  $ US:X  a  U R                  $ US:X  aP  [         R                  " U[        U R                  5      U R                  =(       a    [        U R                  S5      S9$ [        TU ]1  X5      $ )NrD   r  r   r!  r"  r   rz   )r.   r   r  r  r   r!  r"  r   r   rc   r   rA   r   r   s      rE   r   ExceptionVariable.var_getattr  s    ;"((]];;]"###[ >>!++,,,_$%%%V^"((dii {{Fz$++v'F 
 w"2,,rG   c                 N    U R                   R                   SU R                   S3$ )N())rD   r   r  rK   s    rE   __str__ExceptionVariable.__str__  s$    ..))*!DMM?!<<rG   argc                 v     [        U R                  5       5      $ ! [         a    U R                  5       s $ f = frI   )reprrb   	Exception
debug_reprrE  s    rE   _debug_format_arg#ExceptionVariable._debug_format_arg  s7    	$..011 	$>>##	$s    88c                 z   ^  SR                  U 4S jT R                   5       5      nT R                  5        SU S3$ )N, c              3   F   >#    U  H  nTR                  U5      v   M     g 7frI   )rK  ).0rE  rC   s     rE   	<genexpr>/ExceptionVariable.debug_repr.<locals>.<genexpr>  s     J	//44	s   !rA  rB  )joinr   python_type_name)rC   r   s   ` rE   rI  ExceptionVariable.debug_repr  s8    yyJ		JJ'')*!D633rG   )r   r  r!  r"  r   r  r#  )NNNr   )r   r   r   r   BaseExceptionr   r   r   r.   r   r   r   r   rB   r&  rW   re   rL   r  r   r   rC  __repr__r   rK  rI  r   r   r   s   @rE   r  r    sp   !M :> $-1@@ ?#@ #./$6	@
 @ $d*@ 
@ @B#? #t #-*T 67#67 "67 	67
 
67p?#? ? ?#	?
 S/)*? 
? -5 -S -_ -&= = H$ $3 $ $4C 4 4rG   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@   rG   rE   rY  rY    s    rG   rY  c                   p   ^  \ rS rSrSrSS\S-  S\SS4U 4S jjjrSS	S
\\	   S\
\\	4   S\	4S jrSrU =r$ )DelayGraphBreakVariablei  zV
Used to insert a dummy variable in the stack to do the graph break at CALL_FUNCTION.
Nmsgr<   r=   c                 2   > [         TU ]  " S0 UD6  Xl        g r?   )rA   rB   r^  )rC   r^  r<   rD   s      rE   rB    DelayGraphBreakVariable.__init__  s    "6"rG   rY   r6   r   c                     U R                   c  SOU R                   R                  n[        SSU R                    3SU SU R                   3/ S9  g )Nr\   z#Unsupported function call (delayed)zsource: z@Dynamo determined that a graph break should occur when calling `z`. Reason: r]   )rc   rZ   r   r^  )rC   rY   r   r<   rZ   s        rE   r   %DelayGraphBreakVariable.call_function  sS     [[(rdkk.>.>9t{{m,!F+dhhZ9	
rG   )r^  rI   )r   r   r   r   r[  r   r   rB   r   r.   r   r   r   r   r   s   @rE   r]  r]    sj    C$J    
#
 '
 S/)*	

 

 
rG   r]  c                   b    \ rS rSrSrSS jrSSS\S\4S	 jrSSS
\	\   S\
\\4   S\4S jrSrg)ComptimeVariablei  zU
This variable is special, it lets you execute arbitrary code at
Dynamo compile time
r=   Nc                     [        S5      e)Nzcomptime is special form)r   rC   rQ   s     rE   rW   ComptimeVariable.reconstruct  s    !"<==rG   rY   r6   rZ   c                     SSK J n  U R                  c   e[        R                  " U[	        X25      [        U R                  U5      S9$ )Nr   )comptimerz   )ri  rc   r.   r   rj   r   )rC   rY   rZ   ri  s       rE   r   ComptimeVariable.var_getattr  s?    '{{&&&$$'
4;;0M
 	
rG   r   r<   c           
         SSK Jn  U(       d  [        U5      S:  a&  [        USS[        U5       S[        U5       S35        US   n[	        U[
        5      (       a  UR                  5       " U" U5      5        O[	        U[        5      (       a  UR                  5       nUR                  (       a  [        USUR                   35        [        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.                  R1                  S 5      $ )Nr   )ComptimeContextz
comptime()zat most 2 args and 0 kwargsz
 args and  kwargsr   zOcomptime function must not have free variables, but these variables were free: r@   z"unsupported argument to comptime: )ri  rl  rl   r*   r   r1   get_functionr0   get_codeclosurer   co_freevarsr   r   	f_globalsfn_namerb   defaultsr   r   RuntimeErrorre   r   r/   r   )rC   rY   r   r<   rl  fncoder   s           rE   r   ComptimeVariable.call_function  s1    	/ SY]-t9+ZF}G<	 !Wb.//OOob12677;;=Dzz efjfvfvewx %%

--/,.KKbkk''(T D $%!CDH:NOO))0066rG   r@   r   )r   r   r   r   r[  rW   r   r.   r   r   r   r   r   r@   rG   rE   rd  rd    sa    
>
5 
S 
_ 
-7#-7 '-7 S/)*	-7
 
-7rG   rd  c                      ^  \ rS rSr% \R
                  r\S-  \S'   Sr	\
S-  \S'    S
S\S-  S\SS4U 4S jjjrS\4S jrS	rU =r$ )CellVariablei(  Npre_existing_contents
local_namer<   r=   c                 2   > [         TU ]  " S0 UD6  Xl        g r?   )rA   rB   r{  )rC   r{  r<   rD   s      rE   rB   CellVariable.__init__8  s     	"6"%:"rG   c                 "    [         R                  $ rI   )r   CellTyperK   s    rE   rL   CellVariable.python_type>  s    ~~rG   )r{  rI   )r   r   r   r   r   r  r   r.   __annotations__r|  r   r   rB   re   rL   r   r   r   s   @rE   rz  rz  (  sg    NNM +T11 "Jd
! ?C;%4t%;;NQ;	; ;T  rG   rz  c                   4   ^  \ rS rSrS\SS4U 4S jjrSrU =r$ )NewGlobalVariableiB  r<   r=   Nc                 &   > [         TU ]  " S0 UD6  g r?   rA   rB   rC   r<   rD   s     rE   rB   NewGlobalVariable.__init__C      "6"rG   r@   )r   r   r   r   r   rB   r   r   r   s   @rE   r  r  B  s    # # # #rG   r  fn_clsr=   .c                 R   ^  S[         S[         S[         4U 4S jjn[        Ul        U$ )Nr   r<   r=   c                  (   > TR                   " U 0 UD6$ rI   )apply)r   r<   r  s     rE   trampoline_autograd_applyDproduce_trampoline_autograd_apply.<locals>.trampoline_autograd_applyH  s    ||T,V,,rG   )r   !produce_trampoline_autograd_apply_origin)r  r  s   ` rE   r  r  G  s/    - - - - )J%$$rG   c            
         ^  \ rS rSrSrS1\R                  krS\S\SS4U 4S jjrS\	4S jr
S	S
S\\   S\\\4   S\4S jrS	S
S\\   S\\\4   S\4S jrS	S
S\\   S\\\4   SS 4S jrS	S
S\S\\   S\\\4   S\4
S jrSrU =r$ )AutogradFunctionVariableiP  z-represents a torch.autograd.Function subclassr  r<   r=   Nc                 2   > [         TU ]  " S0 UD6  Xl        g r?   )rA   rB   r  )rC   r  r<   rD   s      rE   rB   !AutogradFunctionVariable.__init__X  s    "6"rG   c                     [         $ rI   re   rK   s    rE   rL   $AutogradFunctionVariable.python_type\      rG   rY   r6   r   c           	        ^^ SmS[         SS 4UU4S jjn[         R                  " XBU45        T(       Ga  [        R                  " 5       (       Gat  U R                  nSSKJn  SSKJn  U R                  R                  nU" U R                  R                  5      n	U	(       a3  U" U R                  R                  U R                  R                  5      nS nU R                  R                  n
U
[        R                  R                  R                  La'  [        SS	U  S
U S
U 3SSS/[         R"                  QS9  U R                  R$                  nU[        R                  R                  R$                  La&  [        SS	U  S
U S
U 3SS/[         R"                  QS9  SSKJn  UcJ  U	(       dC  [+        TR-                  U R                  R.                  5      U R                  R0                  5      nU=(       a
    [+        USS9nU" UU R                  R2                  UUS9R5                  TX#5      nU R                  (       a  U	(       a|  [+        U R                  S5      n[7        UR9                  [:        R<                  5      5        [+        U R                  S5      n[7        UR9                  [:        R<                  5      5        U$ U R                  (       a  [+        U R                  S5      nOS nU R                  R                  n[>        RA                  TX#5      nU/UQn[C        U[D        RF                  5      (       ai  [H        RJ                  " U5      n[M        U5      S-
  [M        URN                  5      :X  a  USS  n[         RP                  " TUUSS9nUR5                  TX#5      $ [C        U[D        RR                  5      (       aN  [T        RV                  " URX                  [T        RZ                  " U R                  5      US9R5                  TX#5      $ [        SS	U  S
U S
U 3S[]        U5      R0                   S3S/S9  g )NFr   r=   c                    > 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)	is_tensorrequires_gradr   r   NNModuleVariableis_training)r   r  rY   s    rE   visit2AutogradFunctionVariable.call_apply.<locals>.visitg  sR    ||~~##50$(M"i8899>>"%%$(M & :rG   r   )#autograd_function_forward_rewritten)_is_setup_context_definedzUnsupported custom vjpzcall_apply r   zgDynamo does not support tracing `torch.autograd.Function` subclasses that define a custom `vjp` method.z+Remove the custom `vjp` method if possible.z.Use standard `backward` instead if applicable.r]   zUnsupported custom jvpzgDynamo does not support tracing `torch.autograd.Function` subclasses that define a custom `jvp` method.z+Remove the custom `jvp` method if possible.r+   )AutogradFunctionApplyVariabler  )r   rz   forwardsetup_contextTr   z=Non-function or method in subclass of torch.autograd.FunctionzDynamo requires the `forward` attribute of a `torch.autograd.Function` subclass to be a standard Python function or method. Found type `z
` instead.zPEnsure the `forward` method is defined as a regular function or instance method.)/r.   r  r   is_grad_enabledrc   "torch._functorch.autograd_functionr  torch.autograd.functionr  r  r  r  vjpautogradFunctionr   r   r  jvphigher_order_opsr  r   import_sourcer   r   backwardr   r   r}   r   CLOSURE_MATCHAutogradFunctionContextVariabler   r   r   r   inspect	signaturerl   
parametersr   r   r   r   r   r   re   )rC   rY   r   r<   r  rc   r  r  
forward_fnis_setup_ctx_definedvjp_fnjvp_fnr  apply_sourcer
  fwd_srcsetup_ctx_srcrv  ctxsigr   r  s    `                   @rE   
call_apply#AutogradFunctionVariable.call_apply_  s    	)o 	)$ 	) 	) 	eF^4U2244[[F J,,J#<T[[=V=V#W # AKK'')B)B
 [[__FU^^448884)$qax@!- FH +66 [[__FU^^448884)$qax@!- F*66
 H~&:#$$T[[%;%;<dkk>R>R "Hj&HL/$$#	
 mB-  {{3$T[[)<g001K1KLM *4;; Hm66|7Q7QRSJ;;Y7FF[[  -44RF|d|b%,,--##B'C4y1}CNN 33ABx#))"bNE&&r488E,,--//224;;? mB-	. W%dV1TF!F8<33783D3D2EZQ3
rG   c                    U R                   R                  n[        US   R                  5      [        R
                  R                  R                  L d   e[        U[        R                  5      (       d   eU R                  c   e[        U R                  S5      n[        R                  " XUSS9nUR                  XU5      $ )Nr   r  Tr   )r  r  re   rf   r   _dynamoexternal_utilsFakeBackwardCFunctionr   r   r   rc   r   r.   r   r   )rC   rY   r   r<   rv  	fn_sourcer   s          rE   call_backward&AutogradFunctionVariable.call_backward  s     [[!!DGMM"emm&B&B&X&XXXX"e001111{{&&&t{{J7	%%bYM""2V44rG   c                 ,    [        U R                  5      $ rI   )r  r  rC   rY   r   r<   s       rE   r   &AutogradFunctionVariable.call_function  s     (44rG   rZ   c           
         SSK Jn  US:X  ax  [        R                  " 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      $ U R                  b  [        U R                  U5      OS n [        R                  " U R                  U5      n[!        U["        5      (       ap  UR%                  U R                  5      n	[        R&                  " U	5      n
U
c   eUb  U
R)                  XS9R+                  XU5      $ U
" U	5      R+                  XU5      $ [!        U[,        5      (       a/  [.        R0                  " UR2                  XS9R+                  XU5      $ [5        SS	U  S
U 3SU S3S/S9  g ! [         a    S n Nf = f)Nr+   )wrap_fx_proxyr  r   )rY   proxyr  rz   z$Unsupported autograd.Function methodr   r   ,Dynamo does not support calling the method `z` directly on the `torch.autograd.Function` instance. Supported methods include `apply`, `backward`, static methods, and class methods.znEnsure the method is decorated with `@staticmethod` or `@classmethod` if it's meant to be called on the class.r]   )builderr  r   is_callable_allowedr  r  r   create_proxyr)   r  r  rc   r   r  getattr_staticr   r   r   __get__lookupcreate_with_sourcer   r   r   r   r   r   )rC   rY   rZ   r   r<   r  r  rc   r   r   traceds              rE   r   $AutogradFunctionVariable.call_method  s    	+7?..t{{;;,MKK-) %))00'1 +48  r88Z%%b776:kk6MZT2SWF,,T[[$? #|,,{{4;;/$++D1)))% 11$1FTTf "$<55bGGC-- 33LL$-&12 B*4&$8!v 9!9
U- " s   !G GG)r  )r   r   r   r   r[  r.   r   r   rB   re   rL   r   r   r   r  r  r   r   r   r   r   r   s   @rE   r  r  P  sJ   7 			'	'N
s c d T {#{ ?#{ S/)*	{
 
{z5#5 ?#5 S/)*	5
 
55#5 '5 S/)*	5
 
$5@#@ @ ?#	@
 S/)*@ 
@ @rG   r  c                   F    \ rS rSr% \R
                  " \S9r\\   \	S'   Sr
g)SavedTensorBoxi6  )default_factorytensorsr@   N)r   r   r   r   dataclassesfieldr   r  r.   r  r   r@   rG   rE   r  r  6  s    %0%6%6t%LGT/"LrG   r  c                   H  ^  \ rS rSrSrSSS1\R                  kr     SS\S\S-  S\	S\S-  S	\
\	S
4   S-  S\S-  S\SS4U 4S jjjr\  SSSS\\   S-  S\\\4   S-  S\4S jj5       rS\4S jrSSS\S\\   S\\\4   S\4
U 4S jjrSSS\S\4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
r  	inferencesaved_tensorsNrf   r   needs_input_grad.non_differentiabler<   r=   c                 Z   > [         TU ]  " SXS.UD6  X0l        X@l        XPl        X`l        g N)rf   r   r@   )rA   rB   r  r  r  r  )	rC   rf   r   r  r  r  r  r<   rD   s	           rE   rB   (AutogradFunctionContextVariable.__init__G  s1     	FuFvF"* 0"4rG   rY   r6   r   c                     S nU(       a  U(       d  [        S U 5       5      nU R                  R                  R                  S [        R
                  R                  R                  [        R                  " [        S[        5       US90 5      nU$ )Nc              3   f   #    U  H'  oR                  5       =(       a    UR                  v   M)     g 7frI   )r  r  rP  xs     rE   rQ  9AutogradFunctionContextVariable.create.<locals>.<genexpr>`  s"     $UPT1[[]%Fq%FPTs   /1T)r  r  r  )r   r   r   track_object_newr   r  functionFunctionCtx	functoolspartialr  r  )rY   r   r<   r  outs        rE   r   &AutogradFunctionContextVariable.createW  sz      $$UPT$UUii$$55NN##///,.!1	 

 
rG   c                 r    U R                   c  [        SSU  3S/ [        R                  QS9  U R                   $ )Nzproxy not setz	as_proxy zMDynamo requires the autograd.Function context to be initialized with a proxy.r]   )r  r   r   r   rK   s    rE   as_proxy(AutogradFunctionContextVariable.as_proxyn  sA    ::'#D6*25)445 zzrG   rZ   c                 N  > US:X  a  [         TU ]  XX45      $ US:X  aS  U(       a  [        XS[        U5       S35        [	        U0 5      S   U l        [        R                  R                  S 5      $ US:w  a&  [        SSU  S	U 3S
U S3/ [        R                  QS9  U R                  c  [        SSU  S	U 3SS/S9  U R                  c   eU R                  (       dI  U(       d  U R                  (       d  [        US5        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_differentiablez0 kwargsrm  r   save_for_backwardz,Unsupported autograd.Function context methodr   r   r  z` on `autograd.Function` context objects. Supported methods are `__setattr__`, `save_for_backward` and `mark_non_differentiable`.r]   z9Unsupported autograd.Function context `save_for_backward`zjDynamo requires the `saved_tensors` attribute to be initialized on the `autograd.Function` context object.zEnsure that the `saved_tensors` attribute is properly initialized before calling `save_for_backward`. `save_for_backward` only supported on a newly constructed `torch.autograd.function.FunctionCtx`.z>save_for_backward() requires a source and no keyword arguments)rA   r   r*   rl   r)   r  r   r/   r   r   r   r  r  r  rc   r   r   r   track_save_for_backwardr  append)rC   rY   rZ   r   r<   rE  rD   s         rE   r   +AutogradFunctionContextVariable.call_method{  s    = 7&r>>..#BjS[M:QR&7b&A!&DD#--44T::&&F&tfAdV46 -- 7)556 %S&tfAdV4Ow
 !!---~~T[[ X II""::4F t!!))*Q.)+D&C&&--c2 ))0066rG   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[        U 5      U5      $ rI   )r   r   )r   r<   rZ   rC   rY   s     rE   rR   =AutogradFunctionContextVariable.var_getattr.<locals>.<lambda>  s    (8(8T4:v(VrG   r  r  )r   r  r   r   r   r  r  r/   r   rc   r   r.   r   rf   rA   r   rC   rY   rZ   rc   rD   s   ``` rE   r   +AutogradFunctionContextVariable.var_getattr  s    CC!V  ?"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,,rG   )r  r  r  r  )NFNNNNN)r   r   r   r   r[  r4   r   r   re   r  r   rB   r   r   r.   r   r   r   r  r   r   r   r   r   r   s   @rE   r  r  ;  sw   
 	 
#	1	1	N #'$(48)-55 4K5 	5
 Tz5  c	*T15  $J5 5 
5 5   2648#'$. S/)*T1 
	 ,# 37#37 37 ?#	37
 S/)*37 
37j-5 -S -_ - -rG   r  c            
          ^  \ rS rSrSr SS\R                  R                  S\\R                  R                     S-  S\	SS4U 4S jjjr
S	S
S\S\\   S\\\4   S\4
S jrSrU =r$ )AutogradEngineVariablei  z3
Represents a torch._C._ImperativeEngine instance.
Nrf   r   r<   r=   c                 *   > [         TU ]  " SXS.UD6  g r  r  )rC   rf   r   r<   rD   s       rE   rB   AutogradEngineVariable.__init__  s     	FuFvFrG   rY   r6   rZ   r   c                    US:X  a  [         R                  R                  R                  (       a  UR                  (       d  UR
                  (       d   S5       e[        R                  " U[         R                  R                  R                  R                  5      nUR                  UUR                  R                  R                  5       /UQ7U5      $ [        SSU  SU 3S/ S9  g [        SSU  SU 3S	U S
3/ S9  g )Nqueue_callbackzXqueue_callback() is only supported when Compiled Autograd is enabled with fullgraph=Truez7Unsupported torch._C._ImperativeEngine.queue_callback()r   r   zYqueue_callback() is only supported when Compiled Autograd is enabled with fullgraph=True.r]   z-Unsupported torch._C._ImperativeEngine methodzgDynamo only supports the `queue_callback` method on a torch._C._ImperativeEngine instance, but found: `z`.)r   r  compiled_autogradin_compiled_autograd_region	one_grapherror_on_graph_breakr.   r   r  FakeCompiledAutogradEnginer  r   r   r   get_ca_final_callbacks_varr   )rC   rY   rZ   r   r<   r   s         rE   r   "AutogradEngineVariable.call_method  s     ##}}..JJ||r'>'> n> (--MM00KKZZ **YY++FFHP4P  U*4&$8!H G&tfAdV4IIMbRrG   r@   rI   )r   r   r   r   r[  r   r   _ImperativeEnginere   r   rB   r   r   r.   r   r   r   r   r   s   @rE   r  r    s     ?CGxx))G 334t;G 	G
 
G G%#% % ?#	%
 S/)*% 
% %rG   r  c                   z   ^  \ rS rSrS\S\4   S\SS4U 4S jjrS\4S jr	S	S
S\
\   S\\\4   S\4S jrSrU =r$ )r   i  rv  .r<   r=   Nc                 2   > [         TU ]  " S0 UD6  Xl        g r?   )rA   rB   rv  )rC   rv  r<   rD   s      rE   rB   LambdaVariable.__init__  s    "6"rG   c                 "    [         R                  $ rI   )r   r   rK   s    rE   rL   LambdaVariable.python_type  s    !!!rG   rY   r6   r   c                 &    U R                   " U0 UD6$ rI   rv  r  s       rE   r   LambdaVariable.call_function   s     ww'''rG   r  )r   r   r   r   r   r.   r   rB   re   rL   r   r   r   r   r   r   r   s   @rE   r   r     sr    8C$89 S T "T "(#( '( S/)*	(
 
( (rG   r   c                   <  ^  \ rS rSrSS1\R
                  kr SS\S\S\S-  S\SS4
U 4S jjjr	S\4U 4S	 jjr
S\4S
 jr\S\R                  R                  S\S\4S j5       rS\4S jrS\4S jrSSS\S\4S jrSS jrSSS\\   S\\\4   S\4S jrSrU =r$ )r|   i	  rZ   ry   Nr   r<   r=   c                    > [         TU ]  " S0 UD6  [        U[        5      (       d   e[        U[        5      (       d   eXl        X l        X0l        g r?   )rA   rB   r   r.   r   r   rZ   ry   )rC   r   rZ   ry   r<   rD   s        rE   rB   GetAttrVariable.__init__  sJ     	"6"#////$$$$$	rG   c                 R   > U R                   b  U R                   $ [        TU ]	  5       $ rI   )ry   rA   rL   rC   rD   s    rE   rL   GetAttrVariable.python_type  s%    <<#<<7&((rG   c                 h    U R                   R                   SU R                   SU R                   S3$ NrA  rN  rB  )rD   r   r   rZ   rK   s    rE   rW  GetAttrVariable.__repr__$  s.    ..))*!DHH:R		{!DDrG   
base_proxyr   c                     [        X5      $ rI   )rj   )r   r   s     rE   create_getattr_proxy$GetAttrVariable.create_getattr_proxy'  s    z((rG   c                 r    [         R                  U R                  R                  5       U R                  5      $ rI   )r|   r"  r   r  rZ   rK   s    rE   r  GetAttrVariable.as_proxy+  s&    33DHH4E4E4GSSrG   c                     U R                   R                  5       n [        XR                  5      $ ! [         a    [        U  S35      S ef = f)Nz is not a constant)r   rb   rj   rZ   r   r   )rC   constants     rE   rb   "GetAttrVariable.as_python_constant.  sO    88..0	M8YY// 	M%.@&ABL	Ms	   1 ArY   r6   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      $ rI   )r   r   r   r  r   r   get_submodule
module_keyrZ   rm   r  r  )rC   rY   rZ   step1step2s        rE   const_getattrGetAttrVariable.const_getattr5  s    $((I$>$>??%%		''(;(;<99ENN*%%&&uii8~~%%%%%e22rG   c                 |    U" U R                   5        UR                  UR                  U R                  5      5        g rI   )r   rU   create_load_attrsrZ   rf  s     rE   rW   GetAttrVariable.reconstruct@  s+    g77		BCrG   r   c                 b    U R                   R                  XR                  [        U5      U5      $ rI   )r   r   rZ   r   r  s       rE   r   GetAttrVariable.call_functionD  s%     xx##B		4:vFFrG   )rZ   r   ry   rI   r   )r   r   r   r   r.   r   r   re   r   rB   rL   rW  r   r   fxProxyr"  r  rb   r.  rW   r   r   r   r   r   r   s   @rE   r|   r|   	  s0    
	'	'N  $	  	
  
 )T )E# E ) )s )s ) )T# TMC M	3 7 	3s 	3s 	3DG#G 'G S/)*	G
 
G GrG   r|   c                     ^  \ rS rSrS\R
                  S\SS4U 4S jjrS\R
                  4S jrSS	S
\	\
   S\\\
4   S\
4U 4S jjrS\S   4S jrS\R
                  4S jrS\S   4S jrS\4S jrS\S\4S jrSrU =r$ )MethodWrapperVariableiM  method_wrapperr<   r=   Nc                 2   > [         TU ]  " S0 UD6  Xl        g r?   )rA   rB   r9  )rC   r9  r<   rD   s      rE   rB   MethodWrapperVariable.__init__N  s    "6",rG   c                     U R                   $ rI   r9  rK   s    rE   get_real_python_backed_value2MethodWrapperVariable.get_real_python_backed_valueR      """rG   rY   r6   r   c           	        > [        U R                  5      (       a~  [        US   [        R                  5      (       a\  [        U5      S:X  a  [        U5      S:X  d  [        US5        US   R                  XR                  R                  R                  5      $ U R                  R                  nU R                  R                  nUS:X  aZ  [        U5      R                  nU[        R                  L a0  [        R                  " U[        5      R                  UUU/UQU5      $ GO[         R"                  S:  a  U[        R$                  S   L a}  US:X  aw  SSKJn  [        U5      S:X  a9  U(       d2   UR+                  XR                  US   R-                  5       5      5      $ [5        S	S
U  SU SU 3SSS/[6        R8                  QS9  GOXU[        R$                  S   L a  US:X  d  U[        R$                  S   L Ga%  US:X  Ga  U[        R$                  S   L a  SOSn[        U5      S:X  a  U(       d   U R                  US   R-                  5       5      n	US   R:                  n
U
bk  US   R-                  5       n[<        R>                  " [        U5      U5      nXL a4  US:X  a  [A        U
5      n
O[C        X5      n
[        R                  " XU
5      $ SSKJn  UR+                  X5      $ [5        SU S3S
U  SU SU 3SU S3SU S3SU S3/[6        R8                  QS9  [D        TU ]  XU5      $ ! [.         a    [1        [.        U5         GN[2         a     GNf = f! [2         a     Nf = f)Nr   r+   z2tensor attribute getter takes exactly one argumentrB   )r      r  r  )SourcelessBuilderz9unsupported type.__dict__['__annotations__'].__get__ callzcall_function , args: 
, kwargs: z{`torch.compile` only supports calling type.__dict__['__annotations__'].__get__ on a single constant argument (i.e. a type).zpMake sure your call to type.__dict__['__annotations__'] only has one positional argument (no keyword arguments).zMake sure the argument to type.__dict__['__annotations__'] is a constant (i.e. type). For example, `object`, `int`, `MyCustomClass`.r]   rg   rm   zunsupported type.__dict__['z'].__get__ callz5`torch.compile` only supports calling type.__dict__['z7'].__get__ on a single constant argument (i.e. a type).z&Make sure your call to type.__dict__['zC'].__get__ only has one positional argument (no keyword arguments).z)Make sure the argument to type.__dict__['zT'].__get__ is a constant (i.e. type). For example, `object`, `int`, `MyCustomClass`.)$r'   r9  r   r   TensorVariablerl   r   r   r   r   re   rB   r   r.   r   r   sysversion_inform   r  rC  r   rb   r   r   r,   r   r   r  rc   r  r  r!   r   rA   r   )rC   rY   r   r<   self_objwrapper_namefn_objrC  r   rf   rc   cls_valstatic_descrD   s                rE   r   #MethodWrapperVariable.call_functionU  s    &d&9&9::zGY--@
 @
 INs6{a'7 L 7&&r+>+>+G+G+P+PQQ &&//**33 :%(^,,F(&,,R8DD %%  ) ' DMM*;<<	)24yA~f,33//Q0J0J0LM  S(htfJvhO?FR
 '22 $--	22|y7Pj11li6O &y)AA	z  4yA~f? //Q0J0J0LME "!W^^F)"&q'"<"<">&-&<&<T']I&V&2(I5)6v)>)3F)F#2#8#8F#KK:,33B>>5i[P(htfJvhOST]S^ _? ? =YK HF F?	{ KR R
 '22 w$Rv66} & A,^R@: 4 ; s*   30L5 8"M" 5M	MM"
M/.M/Tc                     gNTr@   rK   s    rE   is_python_constant(MethodWrapperVariable.is_python_constant      rG   c                     U R                   $ rI   r=  rK   s    rE   rb   (MethodWrapperVariable.as_python_constant  r@  rG   c                     grP  r@   rK   s    rE   is_python_hashable(MethodWrapperVariable.is_python_hashable  rS  rG   c                 4    [        U R                  5       5      $ rI   hashrb   rK   s    rE   get_python_hash%MethodWrapperVariable.get_python_hash      D++-..rG   otherc                 r    [        U[        5      =(       a!    U R                  5       UR                  5       :H  $ rI   r   r.   rb   rC   r_  s     rE   is_python_equal%MethodWrapperVariable.is_python_equal  1    uo. H'')U-E-E-GG	
rG   r=  )r   r   r   r   r   MethodWrapperTyper   rB   r>  r   r.   r   r   r   r   rQ  rb   rW  intr\  r   r  rc  r   r   r   s   @rE   r8  r8  M  s    -u'>'> -# -RV -#e.E.E #o7#o7 'o7 S/)*	o7
 
o7bGDM #E$;$; #GDM / /
V 
 
 
rG   r8  c                      ^  \ rS rSrS\R
                  S\SS4U 4S jjrS\R
                  4S jrSS	S
\	S\
4U 4S jjrS\S   4S jrS\R
                  4S jrSrU =r$ )GetSetDescriptorVariablei  descr<   r=   Nc                 2   > [         TU ]  " S0 UD6  Xl        g r?   )rA   rB   rj  )rC   rj  r<   rD   s      rE   rB   !GetSetDescriptorVariable.__init__  s    "6"	rG   c                     U R                   $ rI   rj  rK   s    rE   r>  5GetSetDescriptorVariable.get_real_python_backed_value      yyrG   rY   r6   rZ   c                   > US:X  aR  U R                   (       aA  [        U R                   S5      n[        R                  " XR                  R
                  U5      $ US;   aU  U R                   =(       a    [        U R                   U5      n[        R                  " U[        U R                  U5      U5      $ [        TU ]!  X5      $ )Nr  )__objclass__r   )	rc   r   r.   r   rj  r  rj   rA   r   r  s       rE   r   $GetSetDescriptorVariable.var_getattr  s    9Y7F"((YY->->GG11[[BZT%BF"((WTYY-EvNN7&r00rG   Tc                     grP  r@   rK   s    rE   rQ  +GetSetDescriptorVariable.is_python_constant  rS  rG   c                     U R                   $ rI   rn  rK   s    rE   rb   +GetSetDescriptorVariable.as_python_constant  rp  rG   rn  )r   r   r   r   r   GetSetDescriptorTyper   rB   r>  r   r.   r   r   rQ  rb   r   r   r   s   @rE   ri  ri    sw    U77 3 4 e.H.H 15 1S 1_ 1GDM E$>$>  rG   ri  c                   *  ^  \ rS rSr\R
                  rSS1\R                  krS\R
                  S\	SS4U 4S jjr
S\\R
                     4S jrS\R
                  4S	 jrS\R
                  4S
 jrS\4S jrSSS\SS4S jrSSS\S\4S jrSrU =r$ )PythonModuleVariablei  rf   is_torchr<   r=   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@   )rA   rB   rf   r   r   
startswithr{  rC   rf   r<   rD   s      rE   rB   PythonModuleVariable.__init__  sB    "6"


e+Wtzz/B/B/M/Mh/WrG   c                 "    [         R                  $ rI   )r   
ModuleTyperK   s    rE   rL    PythonModuleVariable.python_type  s    rG   c                     U R                   $ rI   rf   rK   s    rE   rb   'PythonModuleVariable.as_python_constant      zzrG   c                     U R                   $ rI   r  rK   s    rE   r>  1PythonModuleVariable.get_real_python_backed_value  r  rG   c                 "    SU R                    S3$ )NzPythonModuleVariable(rB  r  rK   s    rE   rW  PythonModuleVariable.__repr__
  s    &tzzl!44rG   rY   r6   rZ   r/   c                 Z    [        U R                  U5      n[        R                  " X5      $ rI   )r   rf   r.   r   rC   rY   rZ   r   s       rE   call_obj_hasattr%PythonModuleVariable.call_obj_hasattr  s%     T*$$R00rG   c                    UR                   R                  R                  X5      (       a%  UR                   R                  R                  X5      $ S n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      $ ! [         a    [        [        U5         N\f = frI   )r   r   r   r   r{  rf   rm   rj   r   r   rc   r   r.   r   )rC   rY   rZ   r   rc   s        rE   r    PythonModuleVariable.var_getattr  s    99!!>>tJJ99))33D??
==D

(;(;;=$TZZ6
 ,,T2J>DKK!>$$RV<< " =(<=s   =C- -D
	D
)r{  rf   )r   r   r   r   r   r  r   r.   r   r   rB   re   rL   rb   r>  r   rW  r  r   r   r   r   s   @rE   rz  rz    s    $$M 	 
	'	'NXe.. X# X$ X
 T%"2"23  E$4$4 e.>.> 5# 51)1141	1=5 =S =_ = =rG   rz  c            
          ^  \ rS rSrS\S\SS4U 4S jjrSSS	\S\4S
 jrSSS\S\	\   S\
\\4   S\4
S jrSSS\S\4S jrS\4S jrS\4S jrSU 4S jjrS\S   4S jrS\4S jrS\S\4S jrSrU =r$ )TypingVariablei$  rf   r<   r=   Nc                 2   > [         TU ]  " S0 UD6  Xl        g r?   rA   rB   rf   r~  s      rE   rB   TypingVariable.__init__%      "6"
rG   rY   r6   keyc                 R    U R                   UR                  5          n[        U5      $ rI   )rf   rb   r  )rC   rY   r  
new_typings       rE   mp_subscript_impl TypingVariable.mp_subscript_impl)  s&     ZZ 6 6 89
j))rG   rZ   r   c                    US:X  ak  [        U5      S:X  a\  U(       dU  [        US   [        5      =(       a    U R                  US   R                  :H  n[        R
                  R                  U5      $ [        SSU R                   SU SU SU 3S	U S
U R                   S3SU SU R                   S3/[        R                  QS9  g )Nr  r+   r   z,unsupported method call on `typing` variableztyping variable: z, method name: rD  rE  z.`torch.compile` does not support method call `z` on `typing` variable f.zAvoid calling the z method on r]   )
rl   r(   r  rf   r   r/   r   r   r   r  )rC   rY   rZ   r   r<   r   s         rE   r   TypingVariable.call_method3  s     84yA~fQ8XTZZ4PQ7===X 1188@@B'

|?4&QUPVV`ag`hiHNfgkgqgqfrrst$TF+djj\C"..		
rG   c           
         SSK JnJn  U[        ;   a2  [        R
                  " X[        [        U R                  U5      5      S9$ UR                  R                  R                  X5      (       a%  UR                  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+   )rC  VariableBuilderrx   )r  rC  r  r%   r   r|   re   rj   rf   r   r   r   r   rc   r   r   )rC   rY   rZ   rC  r  rf   r   s          rE   r   TypingVariable.var_getattrH  s    ?)),,DT)B$C  99!!>>tJJ99))33D??

D);;$T[[$7K"23E::$++B66rG   c                     U R                   $ rI   r  rK   s    rE   rb   !TypingVariable.as_python_constantZ  r  rG   c                     U R                   $ rI   r  rK   s    rE   r>  +TypingVariable.get_real_python_backed_value]  r  rG   c                    > [        U R                  [        R                  5      (       d  [        TU ]  U5      $ UR                  UR                  U R                  5      5        g rI   )r   rf   r   GenericAliasrA   rW   append_outputcreate_load_constrV   s     rE   rW   TypingVariable.reconstruct`  sI    $**e&8&8997&w//0 	g77

CDrG   Tc                     grP  r@   rK   s    rE   rW  !TypingVariable.is_python_hashable|  rS  rG   c                 4    [        U R                  5       5      $ rI   rZ  rK   s    rE   r\  TypingVariable.get_python_hash  r^  rG   r_  c                 r    [        U[        5      =(       a!    U R                  5       UR                  5       :H  $ rI   ra  rb  s     rE   rc  TypingVariable.is_python_equal  re  rG   r  r   )r   r   r   r   r   rB   r.   r  r   r   r   r   r   rb   r>  rW   r   rW  rg  r\  r   r  rc  r   r   r   s   @rE   r  r  $  s    c S T *#* * 
	*
#
 
 ?#	

 S/)*
 

*75 7S 7_ 7$C c E8GDM / /
V 
 
 
rG   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   rm   callablerj   )r  np_fn_to_tnp_fnnp_modtnp_modrs  tnp_fnnp_fns          rE   get_np_to_tnp_mapr    sk     )O+113&//557OG $FT::5:-3E*  8 4 rG   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      rE   get_tnp_to_np_mapr    s.     	AWWY'YTQADY'''s   0c            
       r  ^  \ rS rSrSr\R                  4rS\S\SS4U 4S jjr	S\4S jr
\S	\R                  S\4S
 j5       r\S	\R                  S\4S j5       rSSS\\   S\\\4   S\4S jrSSS\S\\   S\\\4   S\4
S jrS\4S jrS\4U 4S jjrS\S   4S jrS\4S jrS\S\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.
rf   r<   r=   Nc                 2   > [         TU ]  " S0 UD6  Xl        g r?   r  r~  s      rE   rB   NumpyVariable.__init__  r  rG   c                     U R                   $ rI   r  rK   s    rE   r>  *NumpyVariable.get_real_python_backed_value  r  rG   rv  c                     UR                   R                  S5      n[        U5      S:  a  US S SS/:X  d   eXR                  ;   $ Nr  r   r   _numpy)r   splitrl   constant_fold_functionsr   rv  mods      rE   can_constant_fold_through'NumpyVariable.can_constant_fold_through  sH    mm!!#&3x1}RaWh,?!???0000rG   c                     UR                   R                  S5      n[        U5      S:  a  US S SS/:X  d   e[        R	                  U5      $ r  )r   r  rl   np_constant_collections_maprn   r  s      rE    get_constant_collection_for_func.NumpyVariable.get_constant_collection_for_func  sJ    mm!!#&3x1}RaWh,?!???*..r22rG   rY   r6   r   c                    [         R                  (       d.  [        SSU R                   SU SU 3SU R                   S3S/S9  S	S
KJn  SSKJn  [        5       R                  U R                  5      nUcA  [        SSU R                   SU SU SU S3	SU R                   S3/ [        R                  QS9  Uc   e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  aV  [         R$                  (       aA  [        SSU R                   SU SU SU S3	SU R                   S3SSU R                   S3/S9  UR'                  UR(                  X#5      u  p#U R+                  U5      (       a  [-        X#5      (       az  [.        R0                  " U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R2                  R4                  " SU" U5      /[7        X#5      Q76 nUR9                  X5      $ s  snf s  sn
n	f ! [         aD    [        SSU R                   SU SU SU S3	SU R                   S3/ [        R                   QS9   g f = fs  snf s  sn
n	f )Nz?attempted to trace numpy function with config.trace_numpy=Falsenumpy function: rD  rE  z"Attempted to trace numpy function z; while `torch._dynamo.config.trace_numpy` was set to False.zHSet `torch._dynamo.config.trace_numpy` to True to trace numpy functions.r]   r   )numpy_to_tensor_wrapperr+   )NumpyNdarrayVariablez8attempted to trace numpy function unsupported by PyTorchz  (corresponding torch function: rB  z Can't find numpy numpy function z in torch._numpy.zTnumpy function that produces a const collection type encountered non-const argumentsznumpy function zs that produces a const collection type (e.g. np.dtype, np.iinfo/np.finfo) received arguments that are not constant.ztorch._numpy.randomzXattempted to trace torch._numpy.random function with config.use_numpy_random_stream=TruezAttempted to trace zD when `torch._dynamo.config.use_numpy_random_stream` is set to True.z<Set `torch._dynamo.config.use_numpy_random_stream` to False.zAvoid calling r  r   )r   trace_numpyr   rf   r  r  tensorr  r  rn   r   r  r  rb   r   r,   
USER_ERRORr   use_numpy_random_stream
patch_argsr   r  r$   r.   r   r   r  r)   r   )rC   rY   r   r<   r  r  r   collection_variable_typr  r  r  r  s               rE   r   NumpyVariable.call_function  sS    !!Y*4::,htfJvhW@ MM M _ 	40 "&&tzz2<R*4::,htfJvhVvw{v||}~>tzzlJ[\&22	 '+'L'LT'RR#.JJ:>?$Q..0$?AGP12244P & #8822v.tzzl(4&
SYRZZz{  {A  AB  C"5djj\ B& !& W(A6	 0::4==$WLD--d33-d;; ',,++-:>?$Q..0$?AGP12244P  II**'- #40E
 (..r99g @P 7 
r.tzzl(4&
SYRZZz{  {A  AB  C"1$** >@ !@*55	
H @Ps=   J& $J=J& J /	J& K77K<J& &AK43K4rZ   c           	      b    [        SSU R                   SU SU 3S/ [        R                  QS9  g )Nz/attempted to trace numpy.* function as a methodr  rD  rE  z6Tracing numpy.* functions as methods is not supported.r]   )r   rf   r   r   )rC   rY   rZ   r   r<   s        rE   r   NumpyVariable.call_method  s?     	E&tzzl(4&
6(SP",,		
rG   c                     U R                   $ rI   r  rK   s    rE   rb    NumpyVariable.as_python_constant.  r  rG   c                   > [         R                  (       aj  [        U R                  [        R
                  5      (       a  U R                  $ [        U R                  [        5      (       a  U R                  R                  $ [        TU ]%  5       $ rI   )
r   r  r   rf   enumEnumMetare   r   rA   r  r  s    rE   r  NumpyVariable.as_proxy1  s\    $**dmm44zz!$**d++ zz***w!!rG   Tc                     grP  r@   rK   s    rE   rW   NumpyVariable.is_python_hashable?  rS  rG   c                 4    [        U R                  5       5      $ rI   rZ  rK   s    rE   r\  NumpyVariable.get_python_hashB  r^  rG   r_  c                 r    [        U[        5      =(       a!    U R                  5       UR                  5       :H  $ rI   ra  rb  s     rE   rc  NumpyVariable.is_python_equalE  re  rG   r  )#r   r   r   r   r[  tnp
issubdtyper  r   rB   r>  r   r   r   r  r  r  r   r.   r   r   r   r   r   r   rb   r  r   rW  rg  r\  r   rc  r   r   r   s   @rE   r  r    s^     #~~/c S T c  15+=+= 1$ 1 1
 3%2D2D 3 3 3
Z:#Z: 'Z: S/)*	Z:
 
Z:x
#
 
 ?#	

 S/)*
 

 $7 "# "GDM / /
V 
 
 
rG   r  c                   L   ^  \ rS rSrS\SS4U 4S jjrS\4S jrS	S jrSr	U =r
$ )
NullVariableiM  r<   r=   Nc                 &   > [         TU ]  " S0 UD6  g r?   r  r  s     rE   rB   NullVariable.__init__N  r  rG   c                     g)Nr  r@   rK   s    rE   rW  NullVariable.__repr__Q  s    rG   c                     [         R                  S:  a  [        SSS/ [        R                  QS9  UR                  [        S5      5        g )N)r      z0cannot reconstruct NullVariable in Python < 3.11r\   zdAttempted to generate PUSH_NULL instruction in Python < 3.11; where this instruction does not exist.r]   	PUSH_NULL)rG  rH  r   r   r   r  r   rf  s     rE   rW   NullVariable.reconstructT  sL    g%J9&11 	0=>rG   r@   r   )r   r   r   r   r   rB   r   rW  rW   r   r   r   s   @rE   r  r  M  s,    # # ## ? ?rG   r  c                       \ rS rSrSrSrg)r   ib  z"Marker used to implement delattr()r@   NrZ  r@   rG   rE   r   r   b  s    ,rG   r   c            
          ^  \ rS rSrSrS1\R                  krS\4S jr\	S\
S\\   S\\
\4   S\4S j5       rS\
S\\   S\\
\4   S	\SS
4
U 4S jjrS\
4S jr\S\S\4S j5       rS\
4S jrSS jrSrU =r$ )StringFormatVariableif  zS
Represents a call to str.format(), we delay calling format until after the graph.
format_stringr=   c                     [         $ rI   )r   rK   s    rE   rL    StringFormatVariable.python_typem  s    
rG   sym_args
sym_kwargsc                    [        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rI   )rQ  r  s     rE   rQ  .StringFormatVariable.create.<locals>.<genexpr>w  s#      
C   ""Cs   )all	itertoolschainvaluesr   r/   r   formatrb   r   r   r   )r   r  r  r   r  r  s         rE   r   StringFormatVariable.createp  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r<   Nc                 x   > [         TU ]  " S0 UD6  [        U[        5      (       d   eXl        X l        X0l        g r?   )rA   rB   r   r   r  r  r   )rC   r  r  r   r<   rD   s        rE   rB   StringFormatVariable.__init__  s8     	"6"-----* $rG   c                     U R                   R                   SU R                  < SU R                  < SU R                  < S3$ r  )rD   r   r  r  r   rK   s    rE   rW  StringFormatVariable.__repr__  sB    ..))*!D,>,>+ADMMCTTVW[WfWfViijkkrG   rE  c                 d     U R                  5       $ ! [         a    U R                  5       s $ f = frI   )rb   rH  rI  rJ  s    rE   rK  &StringFormatVariable._debug_format_arg  s2    	$))++ 	$>>##	$s    //c                 h    U R                   R                  " U R                   Vs/ s H  oR                  U5      PM     sn0 U R                  R                  5        VVs0 s H  u  p#X R                  U5      _M     snnD6n[        U5      $ s  snf s  snnf ! [         a    [        U 5      s $ f = frI   )r  r  r  rK  r   r   rH  rG  )rC   rE  r  rf   rendereds        rE   rI  StringFormatVariable.debug_repr  s    		))009=G#((-G '+oo&;&;&=&=
 //66&=H H~ H
  	:	s.   $B B  B  B=B B B10B1c                   ^ ^ TR                  UU 4S jSS9  T" [        R                  " [        T R                  5      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5      5        g s  snnf )Nc                  z   > T R                  T R                  TR                  5      T R                  S5      /5      $ )Nr  )rU   r  r  create_load_attrr+  s   rE   rR   2StringFormatVariable.reconstruct.<locals>.<lambda>  s7    G))--d.@.@A,,X6rG   T)call_function_exF)rT   r   r   r   r  r   r   r/   r   ConstDictVariablerU   r   )rC   rQ   r  r  r<   s   ``   rE   rW    StringFormatVariable.reconstruct  s     " 	 	
 		''T]](;<=@D@U@U@W
@WI&&--a0!3@W 	 
 		++F345dEBC	
s   $,C)r  r  r   r   )r   r   r   r   r[  r.   r   re   rL   r   r   r   r   r   r   rB   rW  r   r   rK  rI  rW   r   r   r   s   @rE   r  r  f  s    &G(F(FGNT  DD ?+D o-.	D
 
D D$%% ?+% o-.	%
 % 
%l# l $ $6 $ $C D DrG   r  c                   ^   ^  \ rS rSr\rS\S\SS4U 4S jjrS\4S jrS\	\   4S jr
S	rU =r$ )
ObjectVariablei  rf   r<   r=   Nc                 2   > [         TU ]  " S0 UD6  Xl        g r?   r  r~  s      rE   rB   ObjectVariable.__init__  r  rG   c                     U R                   $ rI   r  rK   s    rE   r>  +ObjectVariable.get_real_python_backed_value  r  rG   c                     [         $ rI   )r   rK   s    rE   rL   ObjectVariable.python_type  s    rG   r  )r   r   r   r   r   r   r   rB   r>  re   rL   r   r   r   s   @rE   r  r    sC    Mf   f T&\  rG   r  c            	         ^  \ rS rSrSrS\S\SS4U 4S jjrS\4S jr\	S	\S\
\R                  \R                  -     4S
 j5       rSSS\\   S\\\4   S\4S jrSS jr\	S\S\\   S\\\4   S\4S j5       rSrU =r$ )DebuggingVariablei  zz
Represents a call to a debugging function like print(), or something
registered to config.reorderable_logging_functions.
rf   r<   r=   Nc                 2   > [         TU ]  " S0 UD6  Xl        g r?   r  r~  s      rE   rB   DebuggingVariable.__init__  r  rG   c                 ,    [        U R                  5      $ rI   re   rf   rK   s    rE   rL   DebuggingVariable.python_type      DJJrG   r   c                     [        U 5      =(       aX    [        U [        R                  [        R                  45      =(       a'    U [
        R                  R                  R                  ;   $ rI   )	r  r   r   r   r   r   r  r   reorderable_logging_functionsr   s    rE   is_reorderable_logging_function1DebuggingVariable.is_reorderable_logging_function  sO    
 SM J3!3!3U5N5N OPJu}}++III	
rG   rY   r6   r   c           	      f   UR                   (       a  [        R                  " S 5      $ U R                  U R                  X#5      (       d.  [        SSU R                   SU SU 3SSU R                   S3/S9  UR                  R                  U [        U5      45        [        R                  " S 5      $ )	NzJattempted to reorder a debugging function that can't actually be reorderedzfn: rD  rE  zl`torch.compile` can only reorder functions where the arguments are Tensors, constants, or string formatters.z#Avoid calling the logging function z" with args that are not supported.r]   )	exportr/   r   can_reorder_logsrf   r   debug_localsr  r   r  s       rE   r   DebuggingVariable.call_function  s     99#**400$$TZZ>>dtzzl(4&
6(K@ :$**Egh 	d4j12&&t,,rG   c                 V    U R                   c   eU R                   R                  U5      $ rI   )rc   rW   rf  s     rE   rW   DebuggingVariable.reconstruct  s'    {{&&&{{&&w//rG   rv  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   rF  r/   r  pytreetree_leavesr   )rv  r   r<   allowed_input_types	flat_argsrE  s         rE   r0  "DebuggingVariable.can_reorder_logs  sR     $$&& 
 &&~6	Cc77  rG   r  r   )r   r   r   r   r[  r   rB   re   rL   r   r
   r   r   r   r,  r   r.   r   r   r   rW   r  r0  r   r   r   s   @rE   r#  r#    s    
c S T  T   

	5%%(A(AA	B
 
-#- '- S/)*	-
 
-00 S  tCH~ RV  rG   r#  c                      ^  \ rS rSrSrS\S\SS4U 4S jjrS\4S jrS\4S	 jr	S
SS\
\   S\\\4   S\4S jrSrU =r$ )IgnoredFunctionVariablei  zD
Represents a call to an arbitrary function that should be ignored.
rf   r<   r=   Nc                 2   > [         TU ]  " S0 UD6  Xl        g r?   r  r~  s      rE   rB    IgnoredFunctionVariable.__init__  r  rG   c                 ,    [        U R                  5      $ rI   r'  rK   s    rE   rL   #IgnoredFunctionVariable.python_type  r)  rG   c                     U R                   $ rI   r  rK   s    rE   r>  4IgnoredFunctionVariable.get_real_python_backed_value  r  rG   rY   r6   r   c                 @    [         R                  R                  S 5      $ rI   )r   r/   r   r  s       rE   r   %IgnoredFunctionVariable.call_function   s     ))0066rG   r  )r   r   r   r   r[  r   rB   re   rL   r>  r   r.   r   r   r   r   r   r   s   @rE   r<  r<    sy    c S T  T  c 7#7 '7 S/)*	7
 
7 7rG   r<  c            
          ^  \ rS rSrSrS\R                  S\SS4U 4S jjrS\	4S jr
S\R                  4S	 jrS
SS\S\\   S\\\4   S\4
S jrSrU =r$ )LoggingLoggerVariablei)  z2
Represents a call to any logging.Logger methods.
rf   r<   r=   Nc                 2   > [         TU ]  " S0 UD6  Xl        g r?   r  r~  s      rE   rB   LoggingLoggerVariable.__init__.  r  rG   c                 ,    [        U R                  5      $ rI   r'  rK   s    rE   rL   !LoggingLoggerVariable.python_type2  r)  rG   c                     U R                   $ rI   r  rK   s    rE   r>  2LoggingLoggerVariable.get_real_python_backed_value5  r  rG   rY   r6   rZ   r   c                    UR                   (       a  [        R                  R                  S 5      $ [	        U R
                  US 5      n[	        USS 5      n[        R                  R                  R                  nXW;   d  Xg;   a  [        R                  R                  S 5      $ [        SSU R
                   SU SU SU 3SS/S	9  g )
Nr   z8logging.Logger method not supported for non-export caseszmethod: r  rD  rE  z>logging.Logger methods are not supported for non-export cases.zJAdd the logging method to `torch._dynamo.config.ignore_logging_functions`.r]   )r/  r   r/   r   rj   rf   r   r  r   ignore_logging_functionsr   )rC   rY   rZ   r   r<   methodr  
ignore_sets           rE   r   !LoggingLoggerVariable.call_method8  s     99--44T::T406:t4 ]]))BB
8#9--44T::Ntzzl!D6$z&RX\		
rG   r  )r   r   r   r   r[  loggingLoggerr   rB   re   rL   r>  r   r   r.   r   r   r   r   r   s   @rE   rF  rF  )  s    gnn    T  gnn 
#
 
 ?#	

 S/)*
 

 
rG   rF  c            
          ^  \ rS rSrSr SSKJrJr	J
r  S\S\S	S
4U 4S jjr\S	\4S j5       rS	\4S jrSSS\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 Nef = f)ConstantLikeVariableiV  z8self.value is a compile-time constant, but not a literalr   )dtypefloatinggenericinvalid_typer@   rf   r<   r=   Nc                 2   > [         TU ]  " S0 UD6  Xl        g r?   r  r~  s      rE   rB   ConstantLikeVariable.__init__e  r  rG   c                     [        U R                  5      nUR                  S:X  a  UR                  $ UR                   SUR                   3$ )z4Dynamically compute the prefix from the value's typerJ   r  )re   rf   r   r   )rC   ts     rE   _error_prefix"ConstantLikeVariable._error_prefixi  sD      <<:%>>!,,q 011rG   c                     U R                   $ rI   r  rK   s    rE   rb   'ConstantLikeVariable.as_python_constantt  r  rG   rY   r6   rZ   r   c                    / 0 pe U Vs/ s H  owR                  5       PM     nnUR                  5        VV	s0 s H  u  pXR                  5       _M     nnn	[        U R                  U5      " U0 UD6n
[        R                  R                  U
5      (       a  [        R                  " X5      $ [        U
[        R                  5      (       a  [        U
5      $ [        S
U R                   SU SU SU SU
 3	SU R                   SU SU
 S3/ [         R"                  QS	9  g s  snf s  sn	nf ! [         a8    [        SU R                   SU SU SU S3SU R                   SU S3S/S	9   GNf = f)Nz0constant-like method call with non-constant argsr  z(*z, **rB  zAttempted to call z with non-constant args.zFEnsure that the args to the method call are constant (int, str, etc.).r]   z6constant-like method call with unsupported return typez) returned z, got unsupported return value )rb   r   r   r   r^  rj   rf   r   r/   r{   r.   r   r   reMatchrU  r   r  )rC   rY   rZ   r   r<   cargsckwargsr  r  r  r   s              rE   r    ConstantLikeVariable.call_methodw  s    Rw	59:T))+TE:=C\\^L^TQq..00^GL T*E=W=%%0088"((44fbhh'''//L))*!D6D6fX[QWPXY,T-?-?,@$Gfgmfnnop"..		
' ;L" 	J--.avRvT&K01C1C0DAdVKcd\		s,   D* DD* D$D* D* *>E,+E,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                  " X5      $ [!        X[        U5      S9$ )Nrx   )rj   rf   r   np_floatingfloatnp_dtypeNumpyDTypeVariablere   rd   
np_genericr  r   r/   r{   r.   r   r|   r  s       rE   r    ConstantLikeVariable.var_getattr  s    T*f..//6]Ffmm,,%f--fd##
6??(K(K ((%%0088"((44t4<@@rG   r  )r   r   r   r   r[  numpyrV  rk  rW  ri  rX  rm  ImportErrorre   r   rB   propertyr   r^  rb   r   r.   r   r   r   r   r   r   s   @rE   rU  rU  V  s    B
0	
 	
c S T  2s 2 2C %
#%
 %
 ?#	%

 S/)*%
 
%
NA5 AS A_ A A  0>2r2B/	0s   
A A;:A;rU  c                   8   ^  \ rS rSrSrS\SS4U 4S jjrSrU =r$ )TorchVersionVariablei  ztorch.__version__r<   r=   Nc                    > UR                  S[        R                  5        US   [        R                  L d   e[        TU ]  " S0 UD6  g )Nrf   r@   )
setdefaultr   __version__rA   rB   r  s     rE   rB   TorchVersionVariable.__init__  sA    '5#4#45g%"3"3333"6"rG   r@   )	r   r   r   r   r^  r   rB   r   r   r   s   @rE   rs  rs    s     'M# # # #rG   rs  c                   "    \ rS rSrS\4S jrSrg)rl  i  r=   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).
)rf   re   r   rK   s    rE   r  NumpyDTypeVariable.as_proxy  s     zz'''rG   r@   N)r   r   r   r   r   r  r   r@   rG   rE   rl  rl    s    (# (rG   rl  c                   p   ^  \ rS rSrSrS\SS4U 4S jjrS\4S jrSS	S
\	\
   S\\\
4   SS4S jrSrU =r$ )RandomClassVariablei  zrandom.Randomr<   r=   Nc                 &   > [         TU ]  " S0 UD6  g r?   r  r  s     rE   rB   RandomClassVariable.__init__  r  rG   c                     [         $ rI   r  rK   s    rE   rL   RandomClassVariable.python_type  r  rG   rY   r6   r   RandomVariablec                 $   [        U5      S:  d  U(       a"  [        SSU SU 3S/ [        R                  QS9  [        U5      S:X  a  [        R
                  R                  S 5      OUS   n[        U[        R                  R                  5       S9$ )	Nr+   z'random.Random() with improper argumentszargs: rE  z=random.Random() with > 1 arg or with kwargs is not supported.r]   r   )seedr   )
rl   r   r   r  r   r/   r   r  baseValueMutationNew)rC   rY   r   r<   r  s        rE   r   !RandomClassVariable.call_function  s     t9q=FA j9[&11	 ;>d)q.y))006dSTgY^^%D%D%F
 	
rG   r@   )r   r   r   r   r[  r   rB   re   rL   r   r.   r   r   r   r   r   r   s   @rE   r|  r|    sd    # # #T 
#
 '
 S/)*	

 

 
rG   r|  c            
         ^  \ rS rSrSr\R                  rS1\R                  kr	1 Skr
  SS\R                  S-  S\S-  S\S	S4U 4S
 jjjrS	\\R                     4S jrS	\R                  4S jr\S\S	\4S j5       r\S\\\\S4   \S-  4   S	S4S j5       r\S\\\\S4   \S-  4   S	\4S j5       r\S\S	\\\\S4   \S-  4   4S j5       rSSS\S\\   S\\\4   S	\4
U 4S jjrSS j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 overridden.
Assumes that random objects behave the same given a set seed or state.
random>   r  randintuniform	randrangeNrandr  r<   r=   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 r?   )rA   rB   is_supported_random_objr  r   setstategetstaterb   )rC   r  r  r<   rD   s       rE   rB   RandomVariable.__init__  s|     	"6"//5555 --/DKKK  1040@4**,dD ---DKrG   c                 "    [         R                  $ rI   )r  r   rK   s    rE   rL   RandomVariable.python_type		  s    }}rG   c                     U R                   $ rI   r  rK   s    rE   rb   !RandomVariable.as_python_constant	  s    {{rG   r
  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)re   r  r   r  r  r  _supported_fn_namesr   rj   r  	isbuiltinr  )r
  rZ   meths      rE   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 
 rG   state.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rI   )re   rg  r  s     rE   rQ  -RandomVariable.check_state.<locals>.<genexpr>'	  s     48a47c>8s    r   )re   r   rg  r  rj  )r  s    rE   check_stateRandomVariable.check_state"	  s    E{e###E!H~$$$E!H~&&&45844444Qx4a>U#:::#:rG   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/   r   )r  r  s     rE   
wrap_stateRandomVariable.wrap_state*	  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$ rI   )rb   r  r  )r  	state_objs     rE   unwrap_stateRandomVariable.unwrap_state7	  s&     ,,.	""9-rG   rY   r6   rZ   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S[        S[        S[        4UU4S j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 ]M  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   r   r<   r=   c                  t   > [         R                  " 5       nUR                  T5        [        UT5      " U 0 UD6$ rI   )r  r   r  rj   )r   r<   rrZ   r  s      rE   call_random_meth4RandomVariable.call_method.<locals>.call_random_methW	  s1    MMO

5!q$'888rG   )r   r   mutationr  r  rb   r   r   r/   r   r  r  r  r  r  r   rj   r2   rA   r   )rC   rY   rZ   r   r<   r  r  r
  r  r  r  r  rD   s     `        @rE   r   RandomVariable.call_method?	  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 9s 9s 9 9 DKK&267$Q&&($79?H1**,,H
 ""EEw"2tT::7 8P* 8Hs   	I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   )rU   create_load_python_moduler  r  rQ   s   rE   rR   ,RandomVariable.reconstruct.<locals>.<lambda>h	  s1    G))55f=,,X6rG   r   Fr  r+   T)rT   r   r.  r   r  r  r  pop_toprf  s    `rE   rW   RandomVariable.reconstructf	  sz    	
 	a' 	*% 4 4 678a&rG   r  r   r   )!r   r   r   r   r[  r  r   r   r.   r   r  r   rB   re   rL   rb   r   r  r  r   rg  rj  r  r   r  r  r   r   r   r   rW   r   r   r   s   @rE   r  r    s    MMM 			'	'N
 &*'+.mmd". $. 	.
 
. .T&--0 FMM  V   $ ;5eCHout|!CD ; ; ; 

%U38_edl BC 

 

 

 	sE#s(OUT\1	2 %;#%; %; ?#	%;
 S/)*%; 
%;N rG   r  c                      ^  \ rS rSrS\4S jr\SSS\R                  \	   S\
S-  S	\	SS 4
S
 j5       rS\S\S	\	SS4U 4S jjrSSS\\   S\\\4   S\4S jrSS jrS\4S jrS\4S jrS\S\4S jrSrU =r$ )WeakRefVariableiy	  r=   c                 "    [         R                  $ rI   )weakrefrefrK   s    rE   rL   WeakRefVariable.python_typez	  s    {{rG   rY   r6   weakref_valuerc   Noptionsc                     Uc   eUR                   nU=(       a    [        US5      n[        R                  " XU5      nU" 5       nU=(       a    [	        U5      n[        R                  " XU5      nX#S'   [        X40 UD6$ )N__callback__rc   )r  r   r.   r   r#   r  )	rY   r  rc   r  callbackcallback_sourcecallback_vtreferentreferent_vts	            rE   r   WeakRefVariable.build}	  s     !!! -- GZ%G%++B/J ?5-f5%++B&A"{C7CCrG   r  r  c                 >   > [         TU ]  " S0 UD6  Xl        X l        g r?   )rA   rB   r  r  )rC   r  r  r  rD   s       rE   rB   WeakRefVariable.__init__	  s!     	#7#&&rG   r   r<   c                     U R                   $ rI   )r  r  s       rE   r   WeakRefVariable.call_function	  s     rG   c                    ^ TR                  U4S j5        T" U R                  5        T" U R                  5        TR                  [	        SS5      5        g )Nc                  (   > T R                  SS5      $ )Nr  r  )r*  r  s   rE   rR   -WeakRefVariable.reconstruct.<locals>.<lambda>	  s    g&>&>y%&PrG   r   F)rT   r  r  rU   r   rf  s    `rE   rW   WeakRefVariable.reconstruct	  sD    PQ  !  !21e<=rG   c                 6    U R                   R                  5       $ rI   )r  rW  rK   s    rE   rW  "WeakRefVariable.is_python_hashable	  s    2244rG   c                 6    U R                   R                  5       $ rI   )r  r\  rK   s    rE   r\  WeakRefVariable.get_python_hash	  s    //11rG   r_  c                 x    [        U[        5      (       d  gU R                  R                  UR                  5      $ )NF)r   r  r  rc  rb  s     rE   rc  WeakRefVariable.is_python_equal	  s/    %11//0A0ABBrG   )r  r  r   )r   r   r   r   re   rL   r   r  ReferenceTyper   r   r   r.   rB   r   r   r   r   rW   r  rW  rg  r\  r   rc  r   r   r   s   @rE   r  r  y	  s    T  D#D,,S1D D 	D
 
D D '*'9H'UX'	' #  '  S/)*	 
 
 >5D 52 2CV C C CrG   r  )r[  rJ   r  r  r  r  r  rR  r  rc  rG  r   r   r  collections.abcr   r   r   r   typingr   r   r	   r
   r   torch._Cr   torch._numpyr  r  torch.utils._pytreer  _pytreer6  torch._dynamo.variables.baser   torch._dynamo.variables.listsr   torch._guardsr   r\   r   r   r   r   bytecode_transformationr   r   r   create_parameter_opr   r   r   r   r   guardsr   r   mutation_guardr   rc   r   r   r    r!   r"   r#   r$   r%   r&   r'   r(   r)   r*   r  r,   r-   r.   r'  r/   	functionsr0   r1   user_definedr2   r3   r4   torch._dynamo.codegenr5   torch._dynamo.symbolic_convertr6   r8   r   r   r  rY  r]  rd  rz  r  r  r  	dataclassr  r  r  r   r|   r8  ri  rz  r  	lru_cacher   r   r  r  r  r  r   r  r  r#  r<  rF  rU  rs  rl  finfoiinforV  r  r|  r  r  r@   rG   rE   <module>r     sG  "         	 
    .  % @ @   $ $ 5 7   @ @ 
 G K K 0 5    W V & G X X /DQ
O Q
h
-? -(^; ^;Bj4 j4Zo 
o 
2?7 ?7D? 4# #
%c %hsCx6H %c cL M M MD-&? D-N26 2j(_ ($AGo AGHI
O I
X 2/=? /=db
_ b
J Q4 9 95;M;M MN   ( Q(4 2 2E4M4M MN (  (a
O a
J?? ?*-o -PD? PDf_  E EP7o 70*
O *
ZSA? SAl#/ #(- ( II#II#II! 
/ 
<R_ Rj5Co 5CrG   