
    %Vji%                       d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
mZmZ ddlZddlmZ ddlmc mZ ddlmZmZmZmZ ddlmZmZ ddlmZ ddl m!Z!m"Z"m#Z# dd	l$m%Z%m&Z& dd
l'm(Z( ddl)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/ ddlm0Z0m1Z1m2Z2m3Z3m4Z4m5Z5m6Z6m7Z7 ddl8m9Z9 ddl:m;Z; ddl<m=Z=m>Z> ddl?m@Z@mAZAmBZB erddlCmDZD ddlEmFZF  G d d          ZG G d de9          ZH G d de9          ZI G d de9          ZJ G d deJ          ZK G d de9          ZL G d  d!e9          ZM G d" d#e9          ZNd$ ZO G d% d&e9          ZPejQ         G d' d(                      ZR G d) d*eB          ZS G d+ d,eB          ZT G d- d.e9          ZU G d/ d0e9          ZV G d1 d2e9          ZW G d3 d4e9          ZX G d5 d6e9          ZY G d7 d8e9          ZZ ej[        d9          d:             Z\ ej[        d9          d;             Z] G d< d=e9          Z^ G d> d?e9          Z_ G d@ dAe9          Z` G dB dCe9          Za G dD dEe9          Zb G dF dGe9          Zc G dH dIe9          Zd G dJ dKed          Ze G dL dMed          Zf G dN dOed          Zg G dP dQed          Zh G dR dSed          Ziejj        ehejk        ehejl        eiiZm G dT dUe9          Zn G dV dWe9          Zo G dX dYe9          ZpdS )Za  
This module contains miscellaneous variable tracker implementations for various Python types
and features used in Dynamo's symbolic execution. These classes help track and propagate
information about different kinds of variables during graph capture.

Key classes include:
- SuperVariable: Handles super() calls and method resolution
- ExceptionVariable: Tracks exception objects
- RandomVariable: Manages random number generators
- GetAttrVariable: Tracks attribute access
- MethodWrapperVariable: Handles method wrappers
- PythonModuleVariable: Tracks Python modules
- NumpyVariable: Handles numpy functions and types
- StringFormatVariable: Manages string formatting
- DebuggingVariable: Handles print and logging
    N)OptionalTYPE_CHECKING   )configgraph_break_hintstrace_rules	variables)create_call_functioncreate_instruction)$do_not_convert_to_tracable_parameter)raise_observed_exceptionunimplementedunimplemented_v2)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list_methodsproxy_args_kwargstuple_methods   )VariableTracker)ConstantVariable)NestedUserFunctionVariableUserFunctionVariable)call_random_fnis_standard_setattrUserDefinedObjectVariable)	PyCodegen)InstructionTranslatorc                       e Zd ZdS )NO_SUCH_SUBOBJN)__name__
__module____qualname__     V/root/voice-cloning/.venv/lib/python3.11/site-packages/torch/_dynamo/variables/misc.pyr,   r,   F   s        Dr1   r,   c                   x     e Zd Zh ej        Zdd fdZd fdZd fd	Zddd
eddfdZ		 	 	 	 	 	 	 	 ddZ
 xZS )SuperVariableNreturnc                 V     t                      j        di | || _        || _        d S Nr0   )super__init__typevarobjvar)selfr:   r;   kwargs	__class__s       r2   r9   zSuperVariable.__init__O   s6    ""6""" 
 r1   codegenr)   c                                         fd            | j                   | j        5 | j                                       t	          dd                     d S                     t	          dd                     d S )Nc                  H     t          j        t                              S N)r	   BuiltinVariabler8   )r>   r?   s   r2   <lambda>z+SuperVariable.reconstruct.<locals>.<lambda>\   s    ggi.G.N.N&O&O r1   r   Fr!   )add_push_nullr:   r;   extend_outputr
   )r<   r?   r>   s    `r2   reconstructzSuperVariable.reconstruct[   s    OOOOOPPP;"GDK   !!"6q%"@"@AAAAA!!"6q%"@"@AAAAAr1   txr*   c                 6   | j         s
J d            | j                                        }| j                                         }| j         j        rt          | j         j                  nd }t          |t                    r| j         j        }| j         j        }d }|j	        }	 |
                    |          dz   }n0# t          $ r# t          t          ||          |          d fcY S w xY wt          |t          |                    D ]f}	||	         j                            |t$                    x}
r<|
t$          ur3|r+t'          t)          t+          |          |	          |          }|
|fc S gt-          ddd| d| j         d| j          dd	d
g           d S )Nz1-arg super not implementedr!   zUnable to resolve super getattr z"Dynamo failed to trace attribute `z$` accessed via `super()` (for type `z` and object `z8`) because the resolved attribute type is not supported.z0Ensure the attribute exists in the parent class.z(Check the arguments passed to `super()`.gb_typecontextexplanationhints)r;   r:   as_python_constantpython_typesourcer   
issubclasstypevalue__mro__index
ValueErrorgetattrr8   rangelen__dict__getr,   r   r   r   r   )r<   rH   namesearch_typetype_to_usetype_to_use_sourcerR   
search_mrostart_indexrW   resolved_getattrr>   s              r2   _resolved_getattr_and_sourcez*SuperVariable._resolved_getattr_and_sourced   s   {99999{l5577 k--//.2k.@JJt{)***d 	 k4(( 	4++K!%!3 (
	H$**;77!;KK 	H 	H 	H 5k::DAA4GGGG	H ;J88 
	4 
	4E#-e#4#=#A#A$#W#WW 4#>99) !+)-8J*K*KUSS " " ,V33335DT D D(,D DDHKD D D C:
	
 
	
 
	
 
	
 
	
 
	
s   #B< <*C)(C)r^   r"   c                 0   |                      | |          \  }}t          j                            |          st	          | |          S |r,t          |                    t          j                             t          j        	                    ||          S )NrR   )
re   r	   r#   
is_literalGetAttrVariabler   
make_guardr   CONSTANT_MATCHcreate)r<   rH   r^   rU   rR   s        r2   var_getattrzSuperVariable.var_getattr   s     99$EEv)44U;; 	/"4... 	J&++L,GHHIII)00v0FFFr1   argslist[VariableTracker]r=   dict[str, VariableTracker]c                    |                      | |          \  }}|t          j        u rt          t                    S |t
          j        j        j        u r| j        }ddl	m
} t          |t          j                  rzt          |j        |          re|sc|sat                      5  t          j        t"          |                              || j        g|z   |          cd d d            S # 1 swxY w Y   nwt'          dd|  d| d| d| d| dg t(          j        	           nF| j        j        rt/          |d
          r|j        dk    rt          j                            |          rl|j        }	t/          |	d          r |	j        dk    rt          j        |	          }
n|j        }t          j        |	|          }
|
                    |d||          S t          |t@                    rOt          |j!        tD          j#                  r0t          j        |j!        |                              |||          S t          |tH                    rt          |j!        tD          j#                  rt          | j        t          j                  r| j        }nGd }| j        j        rtK          | j        j                  }tM          j'        || j        j(        |          }t          j        |j!        tS          |d                                        ||g||          S t          |tD          j#                  r4t          j        ||                              || j        g|z   |          S t          |tD          j*                  r6t          j+        |j!        | j        |                              |||          S tY          |          r0t          | j        t                    r | j        j-        |g|R i |S |t          j.        u r|d         }	 |/                                }n2# t`          $ r%}t'          dd|  d| ddg|           Y d }~nd }~ww xY w|j1        j	        2                    | j                  s/t'          dd|  d| d| j         ddgt(          j3        	           |j1        j	        4                    | j        |t          j5                               t          j6        d           S t          | j        t          j7                  r0|| j        j8        v r"| j        j9                            ||||          S t          | j        t          j:                  r0|| j        j;        v r"| j        j<                            ||||          S t          | j        t          j=                  r+|t|          v r"| j        j?                            ||||          S t          | j        t          j@                  r+|t          v r"| j        jB                            ||||          S |t          jC        u r|d         jD        }|j1        j	        E                    | j        |          rX|j1        j	        F                    | j        |d          }t          |t          j5                  rt          t          |           |S 	 t          C                    | j        jD        |          }n%# t          $ r t          t          |           Y nw xY wd }| j        j        t          | j        j        |          }tM          j'        |||          S |t
          jJ        jK        u r|d         }i }|d         jL        }|d         jL        L                                D ]#\  }}|jM        /                                }|||<   $|jN        jO        }d|jN        _O        	 |                    |||          ||jN        _O        S # ||jN        _O        w xY wt          |tD          jP                  rK|t          jR                    v r6tM          j'        |||          }|                    || j        g|z   |          S t'          dd|  d| d| d| dd g	           d S )!Nr   )AttributeMutationNewrg   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.rK   r-   __new__r.   builtins__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.)rL   rM   rN   rO   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.T)
deleted_ok   FzFAttempted 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.)Sre   objectr9   LambdaVariabler   torchnnModuler;   side_effectsrr   
isinstancer	   r(   mutation_typer   r%   r   call_functionr   r   	DIFFICULTrR   hasattrr-   UserDefinedClassVariableis_supported_new_method__self__r.   rC   membercall_methodstaticmethodrw   typesFunctionTypeclassmethodr   r"   build
value_typer   
MethodTypeUserMethodVariabler'   method_setattr_standard__delattr__rP   NotImplementedErroroutputis_attribute_mutation
DYNAMO_BUG
store_attrDeletedVariabler#   UserDefinedDictVariable_dict_methods_dict_vtUserDefinedSetVariable_set_methods_set_vtUserDefinedTupleVariabler    	_tuple_vtUserDefinedListVariabler   _list_vt__getattribute__rU   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)r<   rH   r^   rn   r=   inner_fnrR   r;   rr   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                               r2   r   zSuperVariable.call_method   s
     <<T4HH& v&&!(+++111[F;;;;;; 69#FGGv35IJJ  "(
 :;; F F$90  #mB(<fEEF F F F F F F F F F F F F F F F F
 !AH4HH$HHHHHH!1 !1 !1 !1 9-78     Kc	J*--c	J !Y..2JJ8TT /  (Hx.. 83F*3T3T'7AA"(-'@_   **2y$GGG,// T	JJu15
 5
 T	J 1!&  mBf--. +.. N	J:u14
 4
 N	J $+y'IJJ   ${ "
;% @!+DK,>!?!?J.4.
    1!*VZ*H*H  mB 5 5v>>? %"455 u	J1  mB 4f==> %"233 q	J/!4;v  mBf--. !** m	JzK20
 0
 m	J 74;6rKDKKKFKKK+++7D..00& 
 
 
 U8488$88!L ` !	 	 	 	 	 	 	 	 	
 9)??LL  d8488$88!(#{!( !( !(
 W*5    I"--T9#<#>#>   -d333t{I$EFFH	JDK555;'33BdFKKKt{I$DEEC	JDK444;&222tT6JJJt{I$FGG>	JM));(44RtVLLLt{I$EFF9	JL((;'33BdFKKK000 QIy%BBY   /99Kt :   fi&?@@ A,^R@@@=#44T[5F	RR

! = = =(<<<<<= K{!-/0BINN"(ZEEE???
 7DI1gmG)-a)<)<)>)> . .%X%.;;==%-	'""5UFOTB,L))"gyAA  0PP 0P     x!;<<	JK9;;;; %*2x@@F''T[MD,@&III'0400$00,, ,37, , , `
	
 
	
 
	
 
	
 
	
 
	
sH   "9C((C,/C,P( (
Q2QQ%[* *\\_6 6`rB   r5   Nr?   r)   rH   r*   rH   r*   rn   ro   r=   rp   r5   r"   )r-   r.   r/   r"   _nonvar_fieldsr9   rG   re   strrm   r   __classcell__r>   s   @r2   r4   r4   J   s       		'N
 
 
 
 
 
 
B B B B B B5
 5
 5
 5
 5
 5
nG5 GS GEV G G G G W
#W
 &	W

 -W
 
W
 W
 W
 W
 W
 W
 W
 W
r1   r4   c                   h     e Zd Zd fdZddZddZd	 Zd
ddedefdZ fdZ	 fdZ
d ZeZ xZS )ExceptionVariabler5   Nc                      t                      j        di | || _        || _        t	          d           | _        t	          d           | _        t	          d          | _        t	          d           | _        d S )NFr0   )	r8   r9   exc_typern   r#   __context__	__cause____suppress_context____traceback__)r<   r   rn   r=   r>   s       r2   r9   zExceptionVariable.__init__  sy    ""6""" 	 ,D11 *$//$4U$;$;! .d33r1   rM   c                     || _         d S rB   )r   )r<   rM   s     r2   set_contextzExceptionVariable.set_context  s    "r1   r?   r)   c                 "                          fd                                j                                       t	           j                  d           dt
          dd f fd} |d            |d            |d           d S )	Nc                  D                          dj        j                  S )Nrv   )load_import_fromr   r-   r?   r<   s   r2   rD   z/ExceptionVariable.reconstruct.<locals>.<lambda>  s    G,,Z9OPP r1   Fr^   r5   c                 4   t          |           }t          |t                    r|j        dv s
J |            d S                                   |                                                   d                                         |            d S )N)TFNr   )rY   r   r#   rU   dup_toprF   rot_nr   )r^   r   r?   r<   s     r2   codegen_attrz3ExceptionVariable.reconstruct.<locals>.codegen_attr  s    4&&Dd,-- )z%8888$88888!!!%%gmmA&6&6777""4(((((r1   r   r   r   )rE   foreachrn   r   r[   r   )r<   r?   r   s   `` r2   rG   zExceptionVariable.reconstruct  s    PPPPP	
 	
 	
 		"""c$)nne444	)s 	)t 	) 	) 	) 	) 	) 	) 	) 	]###[!!!+,,,,,r1   c                     | j         S rB   )r   r<   s    r2   rQ   zExceptionVariable.python_type  s
    }r1   rH   r*   name_varvalc                    fd}|                                 }|dk    r|                     |           n1|dk    rt          |t                    r|j        <t          |t
          j        t
          j        t
          j        t
          j	        f          r!|| _
        t          j        d          | _        n |d           n|dk    r2t          |t                    r|j        dv r|| _        nz |d           nn|dk    r?t          |t                    r|j        || _        nDt          d	d
|  d| ddg           n)t          dd
|  d| d| dg t          j                   t          j        d           S )Nc                 R    t          t          t          |           g           d S )N)rn   )r   	TypeErrorr#   )msgrH   s    r2   raise_errorz3ExceptionVariable.call_setattr.<locals>.raise_error  s*    $Y:J3:O:O9PQQQQQQr1   r   r   Tz9exception cause must be None or derive from BaseExceptionr   )TFr   z<Set Exception object `__traceback__` attribute to not-`None`zcall_setattr rt   zwDynamo does not support setting the attribute '__traceback__' on tracked exception objects to anything other than None.zYAvoid setting '__traceback__' on exception objects within traced code, or set it to None.rK   z4Unsupported attribute assignment on Exception objectz/Dynamo does not support setting the attribute 'z{' on tracked exception objects. Only `__context__`, `__cause__`, `__suppress_context__`, and `__traceback__` are supported.)rP   r   r   r#   rU   r	   rC   r   !UserDefinedExceptionClassVariable"UserDefinedExceptionObjectVariabler   r   r   r   r   SUPPORTABLE)r<   rH   r   r   r   r^   s    `    r2   call_setattrzExceptionVariable.call_setattr  s   	R 	R 	R 	R 	R **,,=  S!!!![  3 011 Yci6GJ-/?@	M M6G "%,5,Ft,L,L))WXXXX+++#/00 YSY-5O5O,/))WXXXX_$$#/00 SY5F%("" Z9D99499!'A
 
 
 
 
 N555t55ZZ Z Z 7)56    )$///r1   c                     |dk    r | j         |g|R  S |dk    r*|\  }|                      |t          d          |           | S t                                          ||||          S )N__setattr__with_tracebackr   )r   r#   r8   r   )r<   rH   r^   rn   r=   tbr>   s         r2   r   zExceptionVariable.call_method  s    =  $4$R/$////%%%DRb"2?"C"CRHHHK77&&r4v>>>r1   c                    |dk    r| j         S |dk    r| j        S |dk    r| j        S |dk    rt          j        d           S |dk    r t          j        | j        | j                  S t                      	                    ||          S )Nr   r   r   r   rn   rg   )
r   r   r   r	   r#   ListVariablern   rR   r8   rm   )r<   rH   r^   r>   s      r2   rm   zExceptionVariable.var_getattr  s    =  ##[  >!+++,,_$$-d333V^^)$)DKHHHHww""2t,,,r1   c                 0    | j         j         d| j         dS )N())r>   r-   r   r   s    r2   __str__zExceptionVariable.__str__  s     .)<<DM<<<<r1   r   )rM   r   r   )r-   r.   r/   r9   r   rG   rQ   r"   r   r   rm   r   __repr__r   r   s   @r2   r   r     s        4 4 4 4 4 4"# # # #- - - -*  70#70 "70 	70 70 70 70r? ? ? ? ?- - - - -= = = HHHHHr1   r   c                       e Zd ZdZdS )UnknownVariablez
    It could be anything!
    Nr-   r.   r/   __doc__r0   r1   r2   r   r   	  s           r1   r   c                   <     e Zd ZdZd fd	Z	 	 	 	 	 	 	 	 ddZ xZS )DelayGraphBreakVariablez^
    Used to insert a dummy variable in the stack to do the graph break at CALL_FUNCTION.
    Nc                 H     t                      j        di | || _        d S r7   )r8   r9   r   )r<   r   r=   r>   s      r2   r9   z DelayGraphBreakVariable.__init__  s+    ""6"""r1   rH   r*   rn   ro   r=   rp   r5   r"   c                     t          dd| j         d| j                                         d| j         g            d S )Nz#Unsupported function call (delayed)zsource: z@Dynamo determined that a graph break should occur when calling `z`. Reason: rK   )r   rR   r^   r   r<   rH   rn   r=   s       r2   r   z%DelayGraphBreakVariable.call_function  sl     	9,t{,,G![--//G G<@HG G	
 	
 	
 	
 	
 	
r1   rB   r   r-   r.   r/   r   r9   r   r   r   s   @r2   r   r     s              
#
 &
 -	

 

 
 
 
 
 
 
 
r1   r   c                   F    e Zd ZdZddZdddedd	fd
Z	 	 	 	 	 	 	 	 ddZdS )ComptimeVariableza
    This variable is special, it lets you execute arbitrary code at
    Dynamo compile time
    r?   r)   c                      t          d          )Nzcomptime is special form)r   r<   r?   s     r2   rG   zComptimeVariable.reconstruct-  s    !"<===r1   rH   r*   r^   r5   r"   c                 v    ddl m } ddlm}  |t          ||          t	          | j        |                    S )Nr   )comptimer!   )r%   rg   )r  	functionsr%   rY   r   rR   )r<   rH   r^   r  r%   s        r2   rm   zComptimeVariable.var_getattr0  s]    '''''' 	433333##Hd##Jt{D,I,I
 
 
 	
r1   rn   ro   r=   rp   c                    ddl m} |rJ t          |          dk    sJ |d         }t          |t                    r' |                                 ||                     nt          |t                    r|                                }|j        rJ d|j	                     t          j        ||j        |j                                        |j        rt!          |j        j                  nd d          } | ||                     nt%          dt'          |                     t(          j                            d           S )Nr   )ComptimeContextr   zOcomptime function must not have free variables, but these variables were free: r0   z"unsupported argument to comptime: )r  r
  r[   r   r%   get_functionr$   get_codeclosureco_freevarsr   r   	f_globalsfn_namerP   defaultstupler   RuntimeErrorrT   r	   r#   rl   )r<   rH   rn   r=   r
  fncoder   s           r2   r   zComptimeVariable.call_function:  so    	/..... z4yyA~~~~!Wb.// 	PBOOoob112222677 	P;;==Dz  E262BE E > %
--//,.KAbk'(((T  D D$$%%%%NDHHNNOOO)00666r1   Nr   r   )r-   r.   r/   r   rG   r   rm   r   r0   r1   r2   r  r  '  s         
> > > >
5 
S 
EV 
 
 
 
'7#'7 &'7 -	'7
 
'7 '7 '7 '7 '7 '7r1   r  c                   j     e Zd ZU ee         ed<   dZee         ed<   	 ddee         ddf fdZ xZ	S )CellVariablepre_existing_contentsN
local_namer5   c                 H     t                      j        di | || _        d S r7   )r8   r9   r  )r<   r  r=   r>   s      r2   r9   zCellVariable.__init__q  s0     	""6"""%:"""r1   rB   )
r-   r.   r/   r   r"   __annotations__r  r   r9   r   r   s   @r2   r  r  d  s          $O4444 !%J$$$ BF; ;%-o%>;	; ; ; ; ; ; ; ; ; ;r1   r  c                         e Zd Zd fdZ xZS )NewGlobalVariabler5   Nc                 :     t                      j        di | d S r7   r8   r9   r<   r=   r>   s     r2   r9   zNewGlobalVariable.__init__y  &    ""6"""""r1   r   )r-   r.   r/   r9   r   r   s   @r2   r  r  x  s=        # # # # # # # # # #r1   r  c                 *      fd}t           |_        |S )Nc                       j         | i |S rB   )apply)rn   r=   fn_clss     r2   trampoline_autograd_applyzDproduce_trampoline_autograd_apply.<locals>.trampoline_autograd_apply~  s    v|T,V,,,r1   )!produce_trampoline_autograd_apply_origin)r%  r&  s   ` r2   r'  r'  }  s.    - - - - - )J%$$r1   c                   d     e Zd ZdZdhej        Zd fdZddZdd	Zdd
Z		 	 	 	 	 	 ddZ
 xZS )AutogradFunctionVariablez-represents a torch.autograd.Function subclassr%  r5   Nc                 H     t                      j        di | || _        d S r7   )r8   r9   r%  )r<   r%  r=   r>   s      r2   r9   z!AutogradFunctionVariable.__init__  s+    ""6"""r1   rH   r*   c           	         dfd}t          j        |||f           r0t          j                    rt          j        du rt          j        d           ddlm	} ddl
m} | j        j        } || j        j                  }|r  || j        j        | j        j                  }| j        j        }	|	t          j        j        j        ur*t%          dd|  d	| d	| d
ddgt&          j                   | j        j        }
|
t          j        j        j        ur)t%          dd|  d	| d	| ddgt&          j                   ddlm} | j        }|7t3                              | j        j                  | j        j                  } ||| j        j        |t3          |d                                        ||          }| j        rt3          | j        d          }t?          |                     tB          j"                             |rAt3          | j        d          }t?          |                     tB          j"                             |S | j        rt3          | j        d          }nd }| j        j        }tF          $                    ||          }|g|}tK          |tL          j'                  rqtQ          j)        |          }tU          |          dz
  tU          |j+                  k    r
|dd          }tY          j-        ||                              ||          S tK          |tL          j.                  rHtY          j/        |j0        tY          j1        | j                  |                              ||          S t%          dd|  d	| d	| dte          |          j         ddg           d S )NFc                     t          | t          j                  r| j        durdt          | t          j                  r|                               rdd S d S d S )NFT)r   r	   TensorVariablerequires_gradNNModuleVariableis_training)r   r/  rH   s    r2   visitz2AutogradFunctionVariable.call_apply.<locals>.visit  sq    "i677 )#500$(M"i899 )>>"%% )$(MMM) )) )r1   zNThe config.capture_autograd_function flag is deprecated, it's now always true.r   )#autograd_function_forward_rewritten)_is_setup_context_definedzUnsupported custom vjpzcall_apply rt   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.rK   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   rg   forwardsetup_contextz=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.)3r"   r2  r}   is_grad_enabledr   capture_autograd_functionwarningswarn"torch._functorch.autograd_functionr3  torch.autograd.functionr4  r%  r6  r7  vjpautogradFunctionr   r   r   jvphigher_order_opsr5  rR   r   import_sourcer.   r-   backwardr   r   rj   r   FUNCTION_MATCHAutogradFunctionContextVariablerl   r   r   r   inspect	signaturer[   _parametersr	   r%   r   r   rw   r   rT   )r<   rH   rn   r=   r2  r3  r4  
forward_fnis_setup_ctx_definedvjp_fnjvp_fnr5  rR   r   fwd_srcsetup_ctx_srcr  ctxsigr/  s    `                 @r2   
call_applyz#AutogradFunctionVariable.call_apply  s   	) 	) 	) 	) 	) 	) 	edF^444 L	U244 L	/588d        JIIIII,J#<#<T[=V#W#W #  A@K')B 
 [_FU^4888 4@$@@@@@@!- FH +6    [_FU^4888 4@$@@@@@@!- F*6
 
 
 
 HGGGGG[F~#$$T[%;<<dk>R  0/$!&999	  
 mBf--  { Y$T[)<<g001LMMNNN' Y$.t{O$L$LM!-":":<;V"W"WXXXJ; 	Y77FFF[ -44RvFF|d|b%,-- 	#B''C4yy1}CO 4 444ABBx1"VDDDRRD&   E,-- 	/24;??   mBf--	. W<d<<T<<F<<Q37883DQ Q Q3
 
 
 
 
 
r1   c                 6   | j         j        }t          |d         j                  t          j        j        j        u sJ t          |t          j
                  sJ t          | j        d          }t          j        ||                              |||          S )Nr   rD  rg   )r%  rD  rT   rU   r}   _dynamoexternal_utilsFakeBackwardCFunctionr   r   r   r   rR   r	   r%   r   )r<   rH   rn   r=   r  	fn_sources         r2   call_backwardz&AutogradFunctionVariable.call_backward  s    [!DGM""em&B&XXXXX"e011111t{J77	-bCCCQQf
 
 	
r1   c                 *    t          | j                  S rB   )r*  r%  r   s       r2   r   z&AutogradFunctionVariable.call_function  s    '444r1   rn   ro   r=   rp   c           
         ddl m} |dk    rqt          j        | j                  rAt          | j                  } || |j        j        d|gt          ||          R            S | 	                    |||          S |dk    r| 
                    |||          S | j        t          | j        |          nd }	 t          j        | j        |          }n# t          $ r d }Y nw xY wt!          |t"                    r|                    | j                  }	|>t          j        |	                              |	|                              |||          S  t          j        |	          |	                              |||          S t!          |t,                    r1t/          j        |j        | |                              |||          S t5          dd	|  d
| d| ddg           d S )Nr!   )wrap_fx_proxyr$  r   )rH   proxyrD  rg   z$Unsupported autograd.Function methodrs   rt   ,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.rK   )builderr[  r   is_callable_allowedr%  r'  r   create_proxyr   rR  rX  rR   r   rG  getattr_staticr   r   r   __get__lookupcreate_with_sourcer   r   r	   r   rw   r   )
r<   rH   r^   rn   r=   r[  r&  rR   objr   s
             r2   r   z$AutogradFunctionVariable.call_method  so    	+*****7??.t{;; 9,MK- -) %}0")0'1 +488      r4888Z%%b$7776:k6MZT222SWF,T[$??!    #|,, {{4;//%#*400++D+@@&r488 4;-d33D99GGD&   C--  3L$v  -D&112 !B8488$88!9!9 !9 !9
U     s   :C C$#C$r   r   )rH   r*   rn   ro   r=   rp   )r-   r.   r/   r   r"   r   r9   rR  rX  r   r   r   r   s   @r2   r*  r*    s        77 			'N
     | | | ||
 
 
 
5 5 5 5>#> &	>
 -> > > > > > > >r1   r*  c                   H    e Zd ZU  ej        e          Zee         ed<   dS )SavedTensorBox)default_factorytensorsN)	r-   r.   r/   dataclassesfieldlistri  r"   r  r0   r1   r2   rg  rg  ]  s7         %6[%6t%L%L%LGT/"LLLLLr1   rg  c                        e Zd ZdZdddhej        Z	 	 	 	 	 d	 d fdZeddd            Zd Z		 	 	 	 	 	 	 	 d fdZ
d fdZ xZS )rF  zZ
    Tracks an autograd.Function() context using mutation tracking in side_effects.py
    r\  	inferencesaved_tensorsNFr5   c                 x     t                      j        d||d| || _        || _        || _        || _        d S N)rU   r   r0   )r8   r9   rn  ro  needs_input_gradnon_differentiable)	r<   rU   r   rn  ro  rr  rs  r=   r>   s	           r2   r9   z(AutogradFunctionContextVariable.__init__n  sN     	FuFFvFFF"* 0"4r1   rH   r*   c           
          d }|r|st          d |D                       }| j        j                            d t          j        j        j        t          j	        t          dt                      |          i           }|S )Nc              3   X   K   | ]%}t          |t          j                  o|j        V  &d S rB   )r   r	   r.  r/  .0xs     r2   	<genexpr>z9AutogradFunctionContextVariable.create.<locals>.<genexpr>  sJ       % % 1i677KAO% % % % % %r1   T)rn  ro  rr  )r  r   r   track_object_newr}   r?  functionFunctionCtx	functoolspartialrF  rg  )rH   rn   r=   rr  outs        r2   rl   z&AutogradFunctionContextVariable.create~  s     	 	$ % %% % %     i$55N#//,..!1	   

 

 
r1   c                 b    | j         "t          dd|  dg t          j                   | j         S )Nzproxy not setz	as_proxy zMDynamo requires the autograd.Function context to be initialized with a proxy.rK   )r\  r   r   r   r   s    r2   as_proxyz(AutogradFunctionContextVariable.as_proxy  sJ    :'*D**25)45    zr1   rn   ro   r=   rp   r"   c                    |dk    r$t                                          ||||          S |dk    rOt          |          dk    sJ t          |i           d         | _        t
          j                            d           S |dk    r)t          dd|  d| d| d	g t          j
        
           | j        t          dd|  d| ddg
           | j        s+| j        r|rJ |j        j                            | |           t          | j        j                  dk    rg | j        _        |D ]!}| j        j                            |           "t
          j                            d           S )Nr   mark_non_differentiabler   save_for_backwardz,Unsupported autograd.Function context methodrs   rt   r]  z` on `autograd.Function` context objects. Supported methods are `__setattr__`, `save_for_backward` and `mark_non_differentiable`.rK   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`.)r8   r   r[   r   rs  r	   r#   rl   r   r   r   ro  rn  rR   r   r   track_save_for_backwardri  append)r<   rH   r^   rn   r=   argr>   s         r2   r   z+AutogradFunctionContextVariable.call_method  s    =  77&&r4v>>>...v;;!####&7b&A&A!&DD#-44T:::&&&F4t44d44-- - - 7)56    %S4t44d44Ow
 
 
 
 ~ 	G;-v---I"::4FFF t!)**Q..)+D& 	3 	3C&--c2222)00666r1   c                     dv rt           fd          S dk    r2 j        +t          j        t	           j        j                            S dk    rg j        $t          j                             j                  S  j	        r5t           j	        d          }t          j         j        j        |          S t                                                    S )N)r  r  c                  4                         | |          S rB   )r   )rn   r=   r^   r<   rH   s     r2   rD   z=AutogradFunctionContextVariable.var_getattr.<locals>.<lambda>  s    (8(8T4(P(P r1   ro  rr  )r|   ro  r	   TupleVariablerl  ri  rr  r#   rl   rR   r   r"   r   rU   r8   rm   r<   rH   r^   rR   r>   s   ``` r2   rm   z+AutogradFunctionContextVariable.var_getattr  s    CCC!PPPPPP   ?""t'9'E*40B0J+K+KLLL%%%$0 1889NOOO{ V#DK1CDD&,R1LfUUUww""2t,,,r1   )NFNNNr   NNr   r   )r-   r.   r/   r   r(   r   r9   r   rl   r  r   rm   r   r   s   @r2   rF  rF  b  s        
 	 
#	1	N 5 
5 5 5 5 5 5      \(	 	 	.7#.7 &	.7
 -.7 
.7 .7 .7 .7 .7 .7`- - - - - - - - - -r1   rF  c                   B     e Zd ZdZ	 d	 d fdZ	 	 	 	 	 	 	 	 ddZ xZS )AutogradEngineVariablez;
    Represents a torch._C._ImperativeEngine instance.
    Nr5   c                 @     t                      j        d||d| d S rq  r  )r<   rU   r   r=   r>   s       r2   r9   zAutogradEngineVariable.__init__  s/     	FuFFvFFFFFr1   rH   r*   rn   ro   r=   rp   r"   c                    |dk    rt           j        j        j        r|j        s|j        s
J d            t          j        t           j        j        j	        j
        | j                                      ||j        j                                        g|R |          S t!          dd|  d| dg            d S t!          d	d|  d| d
| dg            d S )Nqueue_callbackzXqueue_callback() is only supported when Compiled Autograd is enabled with fullgraph=Truerg   z7Unsupported torch._C._ImperativeEngine.queue_callback()rs   rt   zYqueue_callback() is only supported when Compiled Autograd is enabled with fullgraph=True.rK   z-Unsupported torch._C._ImperativeEngine methodzgDynamo only supports the `queue_callback` method on a torch._C._ImperativeEngine instance, but found: `z`.)r}   rT  compiled_autogradin_compiled_autograd_region	one_grapherror_on_graph_breakr	   r%   rU  FakeCompiledAutogradEnginer  rR   r   r   r   get_ca_final_callbacks_varr   r<   rH   r^   rn   r=   s        r2   r   z"AutogradEngineVariable.call_method  sG    ###}.J | r'>  n > !5M0KZ;    -Y+FFHHP4PP  !U8488$88!H      G4t44d44RIMR R R     r1   rB   r   r   r-   r.   r/   r   r9   r   r   r   s   @r2   r  r    s          G
 
G G G G G G### &	#
 -# 
# # # # # # # #r1   r  c                   8     e Zd Zd fdZ	 	 	 	 	 	 	 	 ddZ xZS )r|   r5   Nc                 H     t                      j        di | || _        d S r7   )r8   r9   r  )r<   r  r=   r>   s      r2   r9   zLambdaVariable.__init__  s+    ""6"""r1   rH   r*   rn   ro   r=   rp   r"   c                      | j         |i |S rB   )r  r   s       r2   r   zLambdaVariable.call_function  s     tw''''r1   r   r   )r-   r.   r/   r9   r   r   r   s   @r2   r|   r|     sw             (#( &( -	(
 
( ( ( ( ( ( ( (r1   r|   c                        e Zd Zddhej        Zdd fdZ fdZdefdZe	de
j        j        fd	            Zd
 Zd ZddZddZ	 	 	 	 	 	 	 	 ddZdddee         deeef         def fdZd Z xZS )ri   r^   py_typeNr5   c                      t                      j        di | t          |t                    sJ t          |t                    sJ || _        || _        || _        d S r7   )r8   r9   r   r"   r   re  r^   r  )r<   re  r^   r  r=   r>   s        r2   r9   zGetAttrVariable.__init__'  se    ""6"""#/////$$$$$$	r1   c                 `    | j         | j         S t                                                      S rB   )r  r8   rQ   r<   r>   s    r2   rQ   zGetAttrVariable.python_type/  s)    <#<77&&(((r1   c                 @    | j         j         d| j         d| j         dS Nr   z, r   )r>   r-   re  r^   r   s    r2   r   zGetAttrVariable.__repr__5  s*    .)DDDHDD	DDDDr1   
base_proxyc                 "    t          | |          S rB   )rY   )r  r   s     r2   create_getattr_proxyz$GetAttrVariable.create_getattr_proxy8  s    z4(((r1   c                 p    t                               | j                                        | j                  S rB   )ri   r  re  r  r^   r   s    r2   r  zGetAttrVariable.as_proxy<  s(    33DH4E4E4G4GSSSr1   c                     | j                                         }	 t          || j                  S # t          $ r t          |  d          d w xY w)Nz is not a constant)re  rP   rY   r^   r   r   )r<   constants     r2   rP   z"GetAttrVariable.as_python_constant?  se    8..00	M8TY/// 	M 	M 	M%&A&A&ABBL	Ms	   0 ArH   r*   c                 >   t          | j        t          j                  st          |j                            | j        j                  }| j        |j	        vrt          t          j        || j                  }||j	        vrt          t          j        ||          S rB   )r   re  r	   r0  r   r   get_submodule
module_keyr^   r\   rG  ra  )r<   rH   r^   step1step2s        r2   const_getattrzGetAttrVariable.const_getattrF  s    $(I$>?? 	&%%	''(;<<9EN**%%&udi88u~%%%%%eT222r1   r?   r)   c                      || j                    |                    |                    | j                             d S rB   )re  rF   create_load_attrsr^   r  s     r2   rG   zGetAttrVariable.reconstructQ  s>    g77	BBCCCCCr1   rn   ro   r=   rp   r"   c                 F    | j                             || j        ||          S rB   )re  r   r^   r   s       r2   r   zGetAttrVariable.call_functionU  s"     x##B	4@@@r1   c                    |dv r| j         dk    r|s|d                                         rt          | j        t          j        t          j        t          j        f          r| j        }|d                                         }|	                    ||          r|
                    ||          S |dk    r/t          |          dk    r|d         S t	          j        d           S nj|dk    r| j         dk    rt          |          dk    r|d                                         r|st          | j        t          j        t          j        t          j        f          r_| j        }|d                                         }|	                    ||          rt	          j        d          S t	          j        d	          S |d
k    r| j         dk    r|st          | j        t          j                  r*| j                            ||d         |d         d          S t          | j        t          j                  r| j                            |           t                                          ||||          S )N)__getitem__r]   r\   r   r]   r   r!   __contains__TF__setitem__)directly_update_dict)r^   is_python_constantr   re  r	   r(   r0  r   rP   has_key_in_generic_dictrm   r[   r#   r   convert_to_unspecializedr8   r   )r<   rH   r^   rn   r=   re  keyr>   s          r2   r   zGetAttrVariable.call_method]  sr    ***	Z'' (Q**,, ( 7.6  ( (Cq',,..C**2s33 0r3/// u}}t99>>7N$5d;;;	  N""	Z''D		QQ**,,   7.6   (Cq',,..C**2s33 9 1$777 1%888]""tyJ'>'>v'>$(I$GHH x77Qat 8    $(I$>?? 611"555ww""2tT6:::r1   c                    | j         dk    rCt          | j        t          j                  r$|j        j                            | j                  rJ d| j        _        t          j
        || j        j        j        | j                  S )Nr\   T)r^   r   re  r	   r   r   r   has_pending_mutationban_mutationr"   r   rU   r\   rR   )r<   rH   s     r2   get_forwarded_dictz"GetAttrVariable.get_forwarded_dict  sv    I##48Y%GHH $I*??II $# J !%$R)@$+NNNr1   rB   r   r   r   r   )r-   r.   r/   r"   r   r9   rQ   r   r   r   r}   fxProxyr  r  rP   r  rG   r   rl  dictr   r  r   r   s   @r2   ri   ri      s        
	'N      ) ) ) ) )E# E E E E ) ) ) ) \)T T TM M M	3 	3 	3 	3D D D DA#A &A -	A
 
A A A AB;#B; ?#	B;
 S/)*B; 
B; B; B; B; B; B;HO O O O O O Or1   ri   c                   H     e Zd Zd fdZ	 	 	 	 	 	 	 	 d fdZd Zd Z xZS )MethodWrapperVariabler5   Nc                 V     t                      j        di | || _        i | _        d S r7   )r8   r9   method_wrapper_builtin_fns)r<   r  r=   r>   s      r2   r9   zMethodWrapperVariable.__init__  s6    ""6""",r1   rH   r*   rn   ro   r=   rp   r"   c                 <   t          | j                  rst          |d         t          j                  rSt          |          dk    rt          |          dk    sJ |d                             || j        j        j                  S | j        j        }| j        j        }|dk    rTt          |          j
        }|t          j
        u r2t          j        t                                        |||g||          S t                                          |||          S )Nr   r!   r9   )r   r  r   r	   r.  r[   rm   r   r-   rT   r9   r{   rC   r   r8   r   )r<   rH   rn   r=   self_objwrapper_namefn_objr>   s          r2   r   z#MethodWrapperVariable.call_function  s    &d&9:: 	RzGY-@
 @
 	R t99>>c&kkQ&6&6&667&&r4+>+G+PQQQ &/*3 :%%(^^,F(( 088DDx&7$&7   ww$$Rv666r1   c                     dS NTr0   r   s    r2   r  z(MethodWrapperVariable.is_python_constant      tr1   c                     | j         S rB   )r  r   s    r2   rP   z(MethodWrapperVariable.as_python_constant  s    ""r1   r   r   )r-   r.   r/   r9   r   r  rP   r   r   s   @r2   r  r    s             
7#7 &7 -	7
 
7 7 7 7 7 7>  # # # # # # #r1   r  c                   8     e Zd Zd	 fdZd
 fdZd Zd Z xZS )GetSetDescriptorVariabler5   Nc                 H     t                      j        di | || _        d S r7   )r8   r9   desc)r<   r  r=   r>   s      r2   r9   z!GetSetDescriptorVariable.__init__  s+    ""6"""			r1   rH   r*   c                     |dk    r<| j         r5t          | j         d          }t          j        || j        j        |          S t                                          ||          S )Nrb  )rR   r   r"   r   r  rb  r8   rm   r  s       r2   rm   z$GetSetDescriptorVariable.var_getattr  sZ    9Y77F"(TY->GGG77&&r4000r1   c                     dS r  r0   r   s    r2   r  z+GetSetDescriptorVariable.is_python_constant  r  r1   c                     | j         S rB   )r  r   s    r2   rP   z+GetSetDescriptorVariable.as_python_constant  s
    yr1   r   r   )r-   r.   r/   r9   rm   r  rP   r   r   s   @r2   r  r    sy             1 1 1 1 1 1        r1   r  c                   p     e Zd Zddhej        Zdej        ddf fdZd Zd Z	de
fdZddZddZ xZS )PythonModuleVariablerU   is_torchr5   Nc                      t                      j        di | || _        | j        t          u p| j        j                            d          | _        d S )Nztorch.r0   )r8   r9   rU   r}   r-   
startswithr  r<   rU   r=   r>   s      r2   r9   zPythonModuleVariable.__init__  sQ    ""6"""

e+Wtz/B/M/Mh/W/Wr1   c                     t           j        S rB   )r   
ModuleTyper   s    r2   rQ   z PythonModuleVariable.python_type  s    r1   c                     | j         S rB   rU   r   s    r2   rP   z'PythonModuleVariable.as_python_constant  
    zr1   c                     d| j          dS )NzPythonModuleVariable(r   r  r   s    r2   r   zPythonModuleVariable.__repr__  s    4tz4444r1   rH   r*   c                 j    t          | j        |          }t          j                            |          S rB   )r   rU   r	   r#   rl   r<   rH   r^   r   s       r2   call_obj_hasattrz%PythonModuleVariable.call_obj_hasattr  s*    T**)00888r1   c                    |j         j                            | |          r |j         j                            | |          S | j        s|| j        j        vr<	 t          | j        |          }n7# t          $ r t          t          |           Y nw xY w| j        j        |         }| j
        ot          | j
        |          }t          j        |||          S rB   )r   r   r   r   r  rU   r\   rY   r   r   rR   r   r"   r   )r<   rH   r^   r   rR   s        r2   rm   z PythonModuleVariable.var_getattr  s    9!>>tTJJ 	@9)33D$???= 	3D
(;;;=$TZ66

! = = =(<<<<<= ,T2J>DK!>!>$RV<<<s   A- -BBr   )r-   r.   r/   r"   r   r   r  r9   rQ   rP   r   r   r  rm   r   r   s   @r2   r  r    s         
	'NXe. XT X X X X X X
       5# 5 5 5 59 9 9 9= = = = = = = =r1   r  c                   V     e Zd Zd fdZ	 	 	 	 	 	 	 	 ddZdddefdZd ZddZ xZ	S )TypingVariabler5   Nc                 H     t                      j        di | || _        d S r7   r8   r9   rU   r  s      r2   r9   zTypingVariable.__init__  +    ""6"""


r1   rH   r*   rn   ro   r=   rp   r"   c                     |dk    rGt          |          dk    r4| j        |d                                                  }t          |          S t	          d           d S )Nr  r!   r   z+unsupported method call on typing variablel)r[   rU   rP   r  r   )r<   rH   r^   rn   r=   
new_typings         r2   r   zTypingVariable.call_method  s\     =  SYY!^^DG$>$>$@$@AJ!*---CDDDDDr1   r^   c                 |   ddl m}m} |t          v rt	          j        | |          S |j        j                            | |          r|j        	                    | |          S t          | j        |          }| j        r*t          | j        |          }  |||          |          S |                    ||          S )Nr!   )SourcelessBuilderVariableBuilder)r^  r  r  r   r	   ri   r   r   r   r   rY   rU   rR   r   rl   )r<   rH   r^   r  r  rU   r   s          r2   rm   zTypingVariable.var_getattr%  s    ????????))),T48889!>>tTJJ 	9?,,T4888
D)); 	7$T[$77K3??2{33E:::$++B666r1   c                     | j         S rB   r  r   s    r2   rP   z!TypingVariable.as_python_constant5  r  r1   r?   r)   c                 `    |                     |                    | j                             d S rB   )append_outputcreate_load_constrU   r  s     r2   rG   zTypingVariable.reconstruct8  s.    0 	g77
CCDDDDDr1   r   r   )r?   r)   r5   N)
r-   r.   r/   r9   r   r   rm   rP   rG   r   r   s   @r2   r  r    s             E#E &	E
 -E 
E E E E75 7S 7 7 7 7   E E E E E E E Er1   r  )maxsizec                      ddl m}  i }|                                 D ]K\  }}|j                                        D ],\  }}t	          |          rt          ||d          x}r|||<   -L|S )zd
    This generates a mapping from numpy modules to their torch._numpy
    modules equivalents.
    r   )NP_TO_TNP_MODULEN)utilsr  r   r\   callablerY   )r  np_fn_to_tnp_fnnp_modtnp_modr  tnp_fnnp_fns          r2   get_np_to_tnp_mapr  S  s     )(((((O+1133 4 4&/5577 	4 	4OGV 4 $FGT:::5 4-3OE*	4 r1   c                  Z    t                      } d |                                 D             S )z
    This is just the reverse mapping of get_np_to_tnp_map() - mapping from
    torch._numpy modules to numpy equivalents.
    c                     i | ]\  }}||	S r0   r0   rw  kvs      r2   
<dictcomp>z%get_tnp_to_np_map.<locals>.<dictcomp>o  s    '''TQAq'''r1   )r  r   )ms    r2   get_tnp_to_np_mapr  h  s+     	A''QWWYY''''r1   c                        e Zd ZdZej        fZd fdZed             Z	ed             Z
	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 	 	 ddZd Z fdZ xZS )NumpyVariablezz
    Wrapper around `numpy.*`. Currently, is able to trace a small subset of numpy functions as well as numpy dtypes.
    r5   Nc                 H     t                      j        di | || _        d S r7   r  r  s      r2   r9   zNumpyVariable.__init__y  r  r1   c                     |j                             d          }t          |          dk    r|d d         ddgk    sJ || j        v S N.r   r}   _numpy)r.   splitr[   constant_fold_functionsclsr  mods      r2   can_constant_fold_throughz'NumpyVariable.can_constant_fold_through}  sQ    m!!#&&3xx1}}RaRWh,?!?!?!??S000r1   c                     |j                             d          }t          |          dk    r|d d         ddgk    sJ t                              |d           S r  )r.   r  r[   np_constant_collections_mapr]   r  s      r2    get_constant_collection_for_funcz.NumpyVariable.get_constant_collection_for_func  sY    m!!#&&3xx1}}RaRWh,?!?!?!??*..r4888r1   rH   r*   rn   ro   r=   rp   r"   c           	      :   t           j        st          d| j         d           ddlm} ddlm} t                      	                    | j                  }|t          d| j         d           | 
                    |          x}	 o	  | | j        d	 |D             i d
 |                                D                       S # t          $ r% t          | j        j         d| d|            Y d S w xY w|j        dk    r8t           j        r,d|j         d}|dt           j         z  }t          |           |                    |j        ||          \  }}|                     |          rmt'          ||          r]t(          j                             |                                 d |D             i d |                                D                       S  |j        j        d ||          gt5          ||          R  }	|                    ||	          S )Nznumpy.z()r   )numpy_to_tensor_wrapperr!   )NumpyNdarrayVariablezCan't find numpy function zM in torch._numpy.  Please file an issue to request support for this function.c                 6    g | ]}|                                 S r0   rP   rv  s     r2   
<listcomp>z/NumpyVariable.call_function.<locals>.<listcomp>  $    ???Q!..00???r1   c                 >    i | ]\  }}||                                 S r0   r  r  s      r2   r  z/NumpyVariable.call_function.<locals>.<dictcomp>  *    PPPA1a2244PPPr1   z with non-const args: rt   ztorch._numpy.randomz
delegate 'z' to NumPy itself via zconfig.use_numpy_random_stream=c                 6    g | ]}|                                 S r0   r  rv  s     r2   r  z/NumpyVariable.call_function.<locals>.<listcomp>  r  r1   c                 >    i | ]\  }}||                                 S r0   r  r  s      r2   r  z/NumpyVariable.call_function.<locals>.<dictcomp>  r   r1   r   )r   trace_numpyr   rU   r  r  tensorr  r  r]   r  r   r   r-   r.   use_numpy_random_streamr/   
patch_argsr  r   r	   r#   rl   rP   r   r`  r   )
r<   rH   rn   r=   r  r  r   collection_variable_typr   r\  s
             r2   r   zNumpyVariable.call_function  s    ! 	314:111222333333000000 ""&&tz22<NTZ N N N   (,'L'LT'R'RR#
..DJ??$???PPPPP    '   z*QQ$QQQQ      #8882 9 M4#4LLLVf6TVV c"""/::4=$PVWWLD&--d33 	-dF;;	 !188-D++--??$???PPPPP    +BI*''-- #400  E
 (..r5999s   
;C +C54C5c                 $    t          d           d S )Nnumpy)r   r  s        r2   r   zNumpyVariable.call_method  s     	gr1   c                     | j         S rB   r  r   s    r2   rP   z NumpyVariable.as_python_constant  r  r1   c                     t           j        r&t          | j        t                    r| j        j        S t                                                      S rB   )r   r#  r   rU   rT   r-   r8   r  r  s    r2   r  zNumpyVariable.as_proxy  sD     	'*TZ">"> 	' :&&ww!!!r1   r   r   )r-   r.   r/   r   tnp
issubdtyper  r9   r   r  r  r   r   rP   r  r   r   s   @r2   r	  r	  r  s/          #~/      1 1 [1
 9 9 [9
@:#@: &@: -	@:
 
@: @: @: @:D# &	
 - 
     " " " " " " " " "r1   r	  c                   4     e Zd Zd fdZdefdZd	dZ xZS )
NullVariabler5   Nc                 :     t                      j        di | d S r7   r  r   s     r2   r9   zNullVariable.__init__  r!  r1   c                     dS )Nr/  r0   r   s    r2   r   zNullVariable.__repr__  s    ~r1   r?   r)   c                     t           j        dk     rt          d           |                    t	          d                     d S )N)rz      z0cannot reconstruct NullVariable in < Python 3.11	PUSH_NULL)sysversion_infor   r  r   r  s     r2   rG   zNullVariable.reconstruct  sB    g%%LMMM0==>>>>>r1   r   r   )r-   r.   r/   r9   r   r   rG   r   r   s   @r2   r/  r/    sl        # # # # # ##    ? ? ? ? ? ? ? ?r1   r/  c                       e Zd ZdZdS )r   z"Marker used to implement delattr()Nr   r0   r1   r2   r   r     s        ,,,,r1   r   c                   b     e Zd ZdZdhej        Zed             Zd fdZde	fdZ
dd
Z xZS )StringFormatVariablez[
    Represents a call to str.format(), we delay calling format until after the graph.
    format_stringc           	      l   t          d t          j        ||                                          D                       rPt          j                             |j        d |D             i d |                                D                       S  | |t          |          t          |                    S )Nc              3   >   K   | ]}|                                 V  d S rB   )r  rv  s     r2   ry  z.StringFormatVariable.create.<locals>.<genexpr>  sB       
 
   ""
 
 
 
 
 
r1   c                 6    g | ]}|                                 S r0   r  )rw  r  s     r2   r  z/StringFormatVariable.create.<locals>.<listcomp>  s$    ???a**,,???r1   c                 >    i | ]\  }}||                                 S r0   r  r  s      r2   r  z/StringFormatVariable.create.<locals>.<dictcomp>  s*    PPPTQq!..00PPPr1   )all	itertoolschainvaluesr	   r#   rl   formatr   rl  r  )r  r:  sym_args
sym_kwargss       r2   rl   zStringFormatVariable.create  s     
 
_Xz/@/@/B/BCC
 
 
 
 
 		 -44$$??h???PPZ=M=M=O=OPPP    s=$x..$z2B2BCCCr1   r5   Nc                      t                      j        di | t          |t                    sJ || _        || _        || _        d S r7   )r8   r9   r   r   r:  rD  rE  )r<   r:  rD  rE  r=   r>   s        r2   r9   zStringFormatVariable.__init__  sP    ""6"""------* $r1   c                 P    | j         j         d| j        d| j        d| j        dS r  )r>   r-   r:  rD  rE  r   s    r2   r   zStringFormatVariable.__repr__  s7    .)kkD,>kkDMkkW[Wfkkkkr1   r?   r)   c                 L                          fdd            t          j         j                             d  j                                        D             } t          j        |                                         t          dd                     d S )Nc                                                                 j                                       d          g          S )NrC  )rF   r  r:  create_load_attrr   s   r2   rD   z2StringFormatVariable.reconstruct.<locals>.<lambda>  sA    G))--d.@AA,,X66  r1   T)call_function_exc                 T    i | ]%\  }}t           j                            |          |&S r0   r	   r#   rl   r  s      r2   r  z4StringFormatVariable.reconstruct.<locals>.<dictcomp>  s<     
 
 
8<1I&--a00!
 
 
r1   CALL_FUNCTION_EXr!   )r  )	rE   r	   r  rD  rE  r   ConstDictVariabler  r   )r<   r?   r=   s   `` r2   rG   z StringFormatVariable.reconstruct  s         " 	 	
 	
 	
 		'66777
 
@D@U@U@W@W
 
 
 		+F3344401CKKKLLLLLr1   r   r   )r-   r.   r/   r   r"   r   r   rl   r9   r   r   rG   r   r   s   @r2   r9  r9    s          &G(FGND D [D% % % % % %l# l l l lM M M M M M M Mr1   r9  c                   b     e Zd ZdZd fdZed             ZddZddZedd            Z	 xZ
S )DebuggingVariablez
    Represents a call to a debugging function like print(), or something
    registered to config.reorderable_logging_functions.
    r5   Nc                 H     t                      j        di | || _        d S r7   r  r  s      r2   r9   zDebuggingVariable.__init__*  r  r1   c                     t          |           o=t          | t          j        t          j        f          o| t
          j        j        j        v S rB   )	r  r   r   r   BuiltinFunctionTyper}   rT  r   reorderable_logging_functions)re  s    r2   is_reorderable_logging_functionz1DebuggingVariable.is_reorderable_logging_function.  sF     SMM J3!3U5N OPPJu}+II	
r1   rH   r*   c           	          |j         rd S |                     | j        ||          st          d| j         d| d| d           |j                            | t          |          f           d S )NzReordering debugging function z with inputs rt   z is not yet implemented.)exportcan_reorder_logsrU   r   debug_localsr  rl  r   s       r2   r   zDebuggingVariable.call_function6  s    9 	F$$TZv>> 	G G G#G G&,G G G  
 	d4jj122222r1   r?   r)   c                 6    | j                             |          S rB   )rR   rG   r  s     r2   rG   zDebuggingVariable.reconstructC  s    {&&w///r1   Tc                     t           j        t           j        t          f}t	          j        ||g          }|D ]}t          ||          s dS dS )zm
        Run some additional checks for what sort of function calls can we
        actually reorder.
        FT)r	   r.  r#   r9  pytreetree_leavesr   )r  rn   r=   allowed_input_types	flat_argsr  s         r2   rY  z"DebuggingVariable.can_reorder_logsF  sf     $& 
 &f~66	 	 	Cc#677 uu tr1   r   r   r   )r5   T)r-   r.   r/   r   r9   r   rV  r   rG   rY  r   r   s   @r2   rQ  rQ  $  s         
      
 
 \
3 3 3 30 0 0 0    \    r1   rQ  c                   <     e Zd ZdZd fdZ	 	 	 	 	 	 	 	 ddZ xZS )LoggingLoggerVariablez<
    Represents a call to any of logging.Logger methods
    r5   Nc                 H     t                      j        di | || _        d S r7   r  r  s      r2   r9   zLoggingLoggerVariable.__init__`  r  r1   rH   r*   rn   ro   r=   rp   r"   c                    |j         rd S t          | j        |d           }t          |dd           }||h                    t          j        j        j                  rt          j	        
                    d           S t          d           d S )Nrw   zLogger not supported for non-export cases. To avoid graph breaks caused by logger in compile-mode, it is recommended to disable logging by adding logging methods to config.ignore_logger_methods)rX  rY   rU   intersectionr}   rT  r   ignore_logger_methodsr	   r#   rl   r   )r<   rH   r^   rn   r=   methodr{  s          r2   r   z!LoggingLoggerVariable.call_methodd  s     9 	FT4006:t44H**5=+?+UVV 	;-44T:::Y	
 	
 	
 	
 	
r1   r   r   r  r   s   @r2   rb  rb  [  s              
#
 &	

 -
 

 
 
 
 
 
 
 
r1   rb  c                        e Zd ZdZd Z	 ddlmZmZ	m
Z n%# e$ r  eddi           Z	 eddi           ZY nw xY wd fdZd	 Zd
ddee         deeef         defdZd
ddedefdZ xZS )ConstantLikeVariablez8self.value is a compile-time constant, but not a literalr   )dtypefloatinggenericinvalid_typer0   r5   Nc                 H     t                      j        di | || _        d S r7   r  r  s      r2   r9   zConstantLikeVariable.__init__  r  r1   c                     | j         S rB   r  r   s    r2   rP   z'ConstantLikeVariable.as_python_constant  r  r1   rH   r*   rn   r=   c                    	 d |D             }d |                                 D             }n0# t          $ r# t          | j         d| d| d| d           Y nw xY w t	          | j        |          |i |}t          j                            |          rt          j        	                    |          S t          |t          j                  rt          |          S t          | j         d| d|            d S )Nc                 6    g | ]}|                                 S r0   r  rv  s     r2   r  z4ConstantLikeVariable.call_method.<locals>.<listcomp>  s$    :::Q))++:::r1   c                 >    i | ]\  }}||                                 S r0   r  r  s      r2   r  z4ConstantLikeVariable.call_method.<locals>.<dictcomp>  s*    LLLTQq!..00LLLr1   r  z(*z, **r   z() -> )r   r   r   _error_prefixrY   rU   r	   r#   rh   rl   r   reMatchConstantRegexMatchVariable)r<   rH   r^   rn   r=   cargsckwargsr   s           r2   r   z ConstantLikeVariable.call_method  s0   	O::T:::ELLV\\^^LLLGG" 	O 	O 	OT/MM$MM$MMFMMMNNNNN	O +T**E=W==%0088 	=-44V<<<fbh'' 	6-f555+BBdBB&BBCCCCCs   *- *AAr^   c                    t          | j        |          }t          || j                  rt	          |          }t          || j                  rt          |          S t          |t                    r$t          || j	                  rt          |          S t          j                            |          rt          j                            |          S t          | |          S rB   )rY   rU   r   np_floatingfloatnp_dtypeNumpyDTypeVariablerT   rS   
np_genericr	  r	   r#   rh   rl   ri   r  s       r2   rm   z ConstantLikeVariable.var_getattr  s    T**fd.// 	#6]]Ffdm,, 	.%f---fd## 	)
64?(K(K 	) (((%0088 	=-44V<<<tT***r1   r   )r-   r.   r/   r   rs  r)  rj  r|  rk  rz  rl  r~  ImportErrorrT   r9   rP   rl  r"   r  r   r   rm   r   r   s   @r2   ri  ri  y  sU       BB*M0	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	

  0 0 0d>2r224B//0       D#D ?#	D
 S/)*D 
D D D D.+5 +S +_ + + + + + + + +s   
 88ri  c                       e Zd ZdZdS )RegexPatternVariablez
re.PatternNr-   r.   r/   rs  r0   r1   r2   r  r    s         MMMr1   r  c                       e Zd ZdZdS )rv  zre.MatchNr  r0   r1   r2   rv  rv    s        MMMr1   rv  c                   $     e Zd ZdZd fdZ xZS )TorchVersionVariableztorch.__version__r5   Nc                     |                     dt          j                   |d         t          j        u sJ  t                      j        di | d S )NrU   r0   )
setdefaultr}   __version__r8   r9   r   s     r2   r9   zTorchVersionVariable.__init__  sW    '5#4555g%"33333""6"""""r1   r   )r-   r.   r/   rs  r9   r   r   s   @r2   r  r    sB        'M# # # # # # # # # #r1   r  c                       e Zd ZdZdS )NumpyTypeInfoVariableznp.iinfo/np.finfoNr  r0   r1   r2   r  r    s        'MMMr1   r  c                       e Zd ZdZd ZdS )r}  znp.dtype[...]c                 $    | j         j        j        S )a0  Similar to how numpy dtype descriptors (e.g. np.float32 ) are handled by NumpyVariable:

        np.dtype() objects are serialized as strings, torch._numpy wrappers will normalize to the torch dtype.
        This also handles unsupported things nicely (i.e. structured arrays and object arrays).
        )rU   rT   r-   r   s    r2   r  zNumpyDTypeVariable.as_proxy  s     z''r1   N)r-   r.   r/   rs  r  r0   r1   r2   r}  r}    s(        #M( ( ( ( (r1   r}  c                   ,     e Zd ZdZd fdZd	dZ xZS )
RandomClassVariablezrandom.Randomr5   Nc                 :     t                      j        di | d S r7   r  r   s     r2   r9   zRandomClassVariable.__init__  r!  r1   rH   r*   c                 8   t          |          dk    rt          d           n|rt          d           t          |          dk    rt          j                            d           n|d         }t          |t          j                                                  S )Nr!   zrandom.Random() with > 1 argzrandom.Random() with kwargsr   )seedr   )r[   r   r	   r#   rl   RandomVariablebaseValueMutationNew)r<   rH   rn   r=   r  s        r2   r   z!RandomClassVariable.call_function  s    t99q==89999 	97888:=d))q..y)00666dSTgY^%D%D%F%F
 
 
 	
r1   r   r   r  r   s   @r2   r  r    sW        # # # # # #
 
 
 
 
 
 
 
r1   r  c                       e Zd ZdZdhej        Zh dZ	 	 ddeej	                 dee         ddf fdZ
d	 Zd
 Zed             Zed             Zed             Zed             Zdddee         deeef         def fdZddZ xZS )r  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  r5   c                 Z    t                      j        di | |]|                     |          sJ t          j                    | _        | j                            |                                           d S ||                                nd }t          j        |          | _        d S r7   )r8   r9   is_supported_random_objr  RandomsetstategetstaterP   )r<   r  r  r=   r>   s       r2   r9   zRandomVariable.__init__   s     	""6"""//55555 -//DKK  11111040@4**,,,dD ---DKKKr1   c                     t           j        S rB   )r  r  r   s    r2   rQ   zRandomVariable.python_type  s
    }r1   c                     | j         S rB   )r  r   s    r2   rP   z!RandomVariable.as_python_constant  s
    {r1   c                    t          |           t          j        urdS t          j        t
          j        d          D ]}t          | |          s dS t          | |          }t          j
        |          r5|t          t          j        |                              |           k    r dS nt          |dd           t          t          j        |          ur dS dS )NF)r  r  r  rw   T)rT   r  r  r@  rA  r  _supported_fn_namesr   rY   rG  	isbuiltinrb  )r   r^   meths      r2   r  z&RandomVariable.is_supported_random_obj  s    99FM))5O.0P
 
 	! 	!D 3%% uu3%%D && !76=$77??DDDD 55 E 4T22'&-QU:V:VVV 55 Wtr1   c                 @   t          |           t          u sJ t          | d                   t          u sJ t          | d                   t          u sJ t          d | d         D                       sJ | d         t          | d                   t          u sJ d S d S )Nr   r!   c              3   B   K   | ]}t          |          t          u V  d S rB   )rT   intrv  s     r2   ry  z-RandomVariable.check_state.<locals>.<genexpr>-  s,      44a477c>444444r1   r   )rT   r  r  r?  r{  states    r2   check_statezRandomVariable.check_state(  s    E{{e####E!H~~$$$$E!H~~&&&&445844444444Qx4a>>U#:#:#::#:#:r1   c                 4   t                               |            t          j        t          j                            | d                   t          j        d | d         D                       t          j                            | d                   g          S )Nr   c                 L    g | ]!}t           j                            |          "S r0   rM  rv  s     r2   r  z-RandomVariable.wrap_state.<locals>.<listcomp>7  s)    LLLaY/66q99LLLr1   r!   r   )r  r  r	   r  r#   rl   r  s    r2   
wrap_statezRandomVariable.wrap_state0  s    ""5)))&*11%(;;'LL58LLL  *11%(;;
 
 	
r1   c                 b    |                                  }t                              |           |S rB   )rP   r  r  )r  	state_objs     r2   unwrap_statezRandomVariable.unwrap_state=  s-    ,,..	""9---r1   rH   r*   rn   r=   c                    dk    rv|j         j                            |             | j        j        d |D             i d |                                D              t          j                            d           S dk    r,| 	                    | j        
                                          S dk    rq|j         j                            |            | j                            |                     |d                              t          j                            d           S | j        v r|j         j                            |            | j        
                                fd} t          | j                  d |D             i d	 |                                D              t          ||||          S t!                                          |||          S )
Nr  c                 6    g | ]}|                                 S r0   r  rv  s     r2   r  z.RandomVariable.call_method.<locals>.<listcomp>M  $    777Q!&&((777r1   c                 >    i | ]\  }}||                                 S r0   r  )rw  r  r   s      r2   r  z.RandomVariable.call_method.<locals>.<dictcomp>N  s*    PPPXS#3..00PPPr1   r  r  r   c                      t          j                    }|                                t          |          | i |S rB   )r  r  r  rY   )rn   r=   rr^   r  s      r2   call_random_methz4RandomVariable.call_method.<locals>.call_random_meth[  s?    MOO

5!!!'wq$''8888r1   c                 6    g | ]}|                                 S r0   r  rv  s     r2   r  z.RandomVariable.call_method.<locals>.<listcomp>c  r  r1   c                 >    i | ]\  }}||                                 S r0   r  r  s      r2   r  z.RandomVariable.call_method.<locals>.<dictcomp>d  s*    HHHA1a**,,HHHr1   )r   r   mutationr  r  r   r	   r#   rl   r  r  r  r  r  rY   r&   r8   r   )r<   rH   r^   rn   r=   r  r  r>   s     `   @r2   r   zRandomVariable.call_methodC  s    6>>I"++D111DK77$777PPPPP   -44T:::Z??4;#7#7#9#9:::ZI"++D111K  !2!247!;!;<<<-44T:::T---I"++D111K((**E9 9 9 9 9 9 'GDK&&77$777HHHHH  
 ""&6fEEEww""2tT6:::r1   r?   r)   c                 t                        fd                               dd                                                                d            |                     | j                                                                                 dd                                            d S )Nc                                                                 t                                         d          g          S )Nr  )rF   create_load_python_moduler  rJ  r?   s   r2   rD   z,RandomVariable.reconstruct.<locals>.<lambda>l  s>    G))55f==,,X66  r1   r   Fr  r!   T)rE   r   r   r   r  r  r  pop_topr  s    `r2   rG   zRandomVariable.reconstructj  s       	
 	
 	
 	a''' 	*%%% 4 4 6 677888a&&&r1   r  r   )r-   r.   r/   r   r"   r   r  r   r  r  r9   rQ   rP   r   r  r  r  r  rl  r  r   r   rG   r   r   s   @r2   r  r    s         			'N
   )-*.. .v}%. '.
 
. . . . . .       \$ ; ; \; 

 

 \

   \
%;#%; ?#	%;
 S/)*%; 
%; %; %; %; %; %;N       r1   r  c                   T     e Zd Zed             Z fdZ	 	 	 	 	 	 	 	 ddZddZ xZS )WeakRefVariablec                    |                     dd           }|j        }|ot          |d          }t          j        | ||          } |            }|ot          |          }t          j        | ||          }||d<   t          ||fi |S )NrR   __callback__)r]   r  r   r"   r   r   r  )	rH   weakref_valueoptionsrR   callbackcallback_sourcecallback_vtreferentreferent_vts	            r2   r   zWeakRefVariable.build~  s    Xt,, - GZ%G%G%+B/JJ =??5-f55%+B&AA"{KCC7CCCr1   c                 V     t                      j        di | || _        || _        d S r7   )r8   r9   r  r  )r<   r  r  r  r>   s       r2   r9   zWeakRefVariable.__init__  s6    ##7###&&r1   rH   r*   rn   ro   r=   rp   r5   r"   c                     | j         S rB   )r  r   s       r2   r   zWeakRefVariable.call_function  s     r1   r?   r)   c                                          fd            | j                    | j                                       t	          dd                     d S )Nc                  0                          dd          S )Nweakrefref)r   r  s   r2   rD   z-WeakRefVariable.reconstruct.<locals>.<lambda>  s    g&>&>y%&P&P r1   r   F)rE   r  r  rF   r
   r  s    `r2   rG   zWeakRefVariable.reconstruct  sl    PPPPQQQ !!! !!!21e<<=====r1   r   r   )	r-   r.   r/   r   r   r9   r   rG   r   r   s   @r2   r  r  }  s        	D 	D \	D' ' ' ' '
 #  &  -	 
 
       > > > > > > > >r1   r  )qr   rj  r}  rG  r@  r  rt  r5  r   r:  typingr   r   torch._Cr}   torch._numpyr  r,  torch.utils._pytreer  _pytreer]  rJ   r   r   r   r	   bytecode_transformationr
   r   create_parameter_opr   r   r   r   r   guardsr   r   mutation_guardr   rR   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r  r"   r  r#   r  r$   r%   user_definedr&   r'   r(   torch._dynamo.codegenr)   torch._dynamo.symbolic_convertr*   r,   r4   r   r   r   r  r  r  r'  r*  	dataclassrg  rF  r  r|   ri   r  r  r  r  	lru_cacher  r  r	  r/  r   r9  rQ  rb  ri  r  rv  r  r  r}  finfoiinforj  r  r  r  r  r0   r1   r2   <module>r     s	   "               				 



   * * * * * * * *        $ $ $ $ $ $ $ $ $ @ @ @ @ @ @ @ @ @ @ @ @ N N N N N N N N F F F F F F K K K K K K K K K K 0 0 0 0 0 0 0 0 5 5 5 5 5 5               	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 " ! ! ! ! ! & & & & & & G G G G G G G G X X X X X X X X X X  E//////DDDDDD	 	 	 	 	 	 	 	x
 x
 x
 x
 x
O x
 x
 x
v	A A A A A A A AH    o   
 
 
 
 
o 
 
 
0:7 :7 :7 :7 :7 :7 :7 :7z; ; ; ; ;? ; ; ;(# # # # # # # #
% % %U U U U U U U Up M M M M M M M Mz- z- z- z- z-&? z- z- z-z0 0 0 0 06 0 0 0f( ( ( ( (_ ( ( (HO HO HO HO HOo HO HO HOV)# )# )# )# )#O )# )# )#X       &&= &= &= &= &=? &= &= &=R=E =E =E =E =E_ =E =E =E@ Q   ( Q( (  (l" l" l" l" l"O l" l" l"`
? 
? 
? 
? 
?? 
? 
? 
?- - - - -o - - -.M .M .M .M .M? .M .M .Mb4 4 4 4 4 4 4 4n
 
 
 
 
O 
 
 
<7+ 7+ 7+ 7+ 7+? 7+ 7+ 7+t! ! ! ! !/ ! ! !    !5   # # # # #/ # # #( ( ( ( (0 ( ( (	( 	( 	( 	( 	(- 	( 	( 	( I$I$I! 
 
 
 
 
/ 
 
 
"N N N N N_ N N Nb> > > > >o > > > > >r1   