
    קg                        d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
mZmZmZ d dlZd dlmZ d dlmc mZ ddlmZmZ ddlmZmZ ddlmZ ddlm Z  ddl!m"Z"m#Z# dd	l$m%Z% dd
l&m'Z'm(Z(m)Z)m*Z*m+Z+ ddlm,Z,m-Z-m.Z.m/Z/m0Z0 ddl1m2Z2 ddl3m4Z4m5Z5m6Z6m7Z7 ddl8m9Z9m:Z:m;Z; erd dl<m=Z=  G d d          Z> G d de2          Z? G d de2          Z@ G d de2          ZA G d deA          ZB G d de2          ZC G d deA          ZD G d d eA          ZE G d! d"e2          ZF G d# d$e2          ZG G d% d&e2          ZH G d' d(e2          ZI G d) d*e2          ZJd+ ZK G d, d-e2          ZLejM         G d. d/                      ZN G d0 d1e;          ZO G d2 d3e;          ZP G d4 d5e2          ZQ G d6 d7e2          ZR G d8 d9e2          ZS G d: d;e2          ZT G d< d=e2          ZU G d> d?e2          ZV ejW        d@          dA             ZX G dB dCe2          ZY G dD dEe2          ZZ G dF dGe2          Z[ G dH dIe2          Z\ G dJ dKe2          Z] G dL dMe2          Z^ G dN dOe2          Z_ G dP dQe_          Z` G dR dSe_          Za G dT dUe_          Zb G dV dWe_          Zc G dX dYe_          Zdeje        ecejf        ecejg        ediZh G dZ d[e2          Zi G d\ d]e2          ZjdS )^    N)DictListOptionalTYPE_CHECKING   )config	variables)create_call_functioncreate_instruction)$do_not_convert_to_tracable_parameterunimplemented)GuardBuilderinstall_guard)unpatched_nn_module_init)
AttrSourceDefaultsSourceGetItemSourceODictGetItemSource
TypeSource)check_unspec_or_constant_argsidentityis_tensor_base_attr_getterproxy_args_kwargsset_example_value   )VariableTracker)NestedUserFunctionVariableUserFunctionVariableUserMethodVariablewrap_bound_arg)call_random_fnis_standard_setattrUserDefinedObjectVariable)InstructionTranslatorc                       e Zd ZdS )NO_SUCH_SUBOBJN)__name__
__module____qualname__     X/var/www/html/ai-engine/env/lib/python3.11/site-packages/torch/_dynamo/variables/misc.pyr'   r'   3   s        Dr,   r'   c                   x     e Zd Zdhej        Zdd fdZ fdZd fd	Zddd
eddfdZ		 	 	 	 	 	 d fdZ
 xZS )SuperVariablespecializedNFreturnc                 d     t                      j        di | || _        || _        || _        d S Nr+   )super__init__typevarobjvarr0   )selfr6   r7   r0   kwargs	__class__s        r-   r5   zSuperVariable.__init__=   s@    ""6""" 
 &r,   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	   BuiltinVariabler4   )r:   codegens   r-   <lambda>z+SuperVariable.reconstruct.<locals>.<lambda>K   s    ggi.G.N.N&O&O r,   r   Fr   )add_push_nullr6   r7   extend_outputr
   )r8   r?   r:   s    `r-   reconstructzSuperVariable.reconstructJ   s    OOOOOPPP;"GDK   !!"6q%"@"@AAAAA!!"6q%"@"@AAAAAr,   txr%   c           	      h   | j         s
J d            | j        r't          | j                                        |          S | j                                        }| j                                         }| j         j        rt          | j         j                  nd }t          |t                    r| j         j
        }| j         j        }d }d }d }|j        }		 |	                    |          dz   }
n0# t          $ r# t          t          ||          |          d fcY S w xY wt          |
t!          |	                    D ]g}|	|         j                            |t&                    x}r=|t&          ur4|r,t)          t+          t)          |d          |          |          }||fc S ht-          d           d S )Nz1-arg super not implementedr   __mro__zUnable to resolve super getattr)r7   r0   getattrr6   as_python_constantpython_typesourcer   
issubclasstypevaluerF   index
ValueErrorr4   rangelen__dict__getr'   r   r   r   )r8   rD   namesearch_typetype_to_usetype_to_use_sourcerJ   resolved_classresolved_attr
search_mrostart_indexrN   resolved_getattrr:   s                r-   _resolved_getattr_and_sourcez*SuperVariable._resolved_getattr_and_sourceS   s   {999999 	D4<::<<dCCC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) !+) *+=y I I5  !	" " ,V3333788888s   C. .*DDrT   r   c                 n   |                      | |          \  }}t          j                            |          st	          | |          S |rMt          |                    t          j                             t          j        	                    ||          S t          j        	                    |          S )NrJ   )
r]   r	   ConstantVariable
is_literalGetAttrVariabler   
make_guardr   CONSTANT_MATCHcreate)r8   rD   rT   rM   rJ   s        r-   var_getattrzSuperVariable.var_getattr   s     99$EEv)44U;; 	/"4... 	K&++L,GHHIII-44U64JJJ)00777r,   argsList[VariableTracker]r9   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   nt'          d           n| j        j        r2|t          j        u r$|j        j	                            | j                  S t          |t0                    rOt          |j        t4          j                  r0t          j        |j        |                              |||          S t          |t8                    rUt          |j        t4          j                  r6t          j        |j        | j        |                              |||          S t          |t4          j                  r4t          j        ||                              || j        g|z   |          S t          |t4          j                  r6t          j        |j        | j        |                              |||          S |t>          j         j!        u rt          | j        t          j                  r| j        j        rtE          |          dk    rtE          |          dk    r|d         #                                ruddl$m%}	 |d         &                                }
  |	|tO          | j        j        |
                    t>          j         !                    | j        j(        |
                    S |t>          j         j)        t          j*        fv rkt          | j        t          j+                  rL|stE          |          dk    sJ tY          t          j+        | j                  -                    |d||          S |t>          j         j!        u rTt          | j        t          j+                  r5tY          t          j+        | j                  -                    |d	||          S t]          |          r0t          | j        t                    r | j        j/        |g|R i |S |t          j0        u r|d         }	 |&                                }n"# tb          $ r t'          d
|            Y nw xY w|j        j	        2                    | j                  st'          d| j         d| d           |j        j	        3                    | j        |t          j4                               t          j5        d           S t'          d|            d S )Nr   )AttributeMutationNewr_   zsuper() nn.Module.__init__r   r   VariableBuilder__setitem____getitem__znon-const delattr attr: zdelattr(, z, ...)znon-function or method super: )6r]   objectr5   LambdaVariabler   torchnnModuler7   side_effectsrk   
isinstancer	   r$   mutable_localr   r   r   call_functionr   rJ   __new__output(track_object_new_from_user_defined_classstaticmethod__func__typesFunctionTypeclassmethodr    
MethodTypecollectionsOrderedDictro   rQ   is_python_constantbuilderrm   rH   r   rM   rn   __setattr__CustomizedDictVariabler4   call_methodr#   method_setattr_standard__delattr__NotImplementedErroris_attribute_mutation
store_attrDeletedVariabler`   )r8   rD   rT   rg   r9   inner_fnrJ   r7   rk   rm   keyattrr:   s               r-   r   zSuperVariable.call_method   sB     <<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
 :;;;;[ D	4H$>$>9)RR   ,// @	4Ju15
 5
 @	4 1!&  mBf--. +.. :	4:u14
 4
 :	4 /!4;v  mBf--. %"455 4	41  mB 4f==> %"233 0	4/!4;v  mBf--. /;;;4;	(KLL <" < D		QFq  Q**,, ! 100000q',,..CS??2'9$+:Lc'R'RSS'33DK4EsKK   #/
 
 
 i&FGG
 0#d))q....94;GGSSM4   0<<<K9B
 B
< 94;GGSSM4   !** 	4zK20
 0
 	4 74;6rKDKKKFKKK+++7DA..00& A A A???@@@@@A9)??LL FDDDDDDEEEI"--T9#<#>#>   -d333AxAABBBBBs$   #9C))C-0C-+T   TT)NFr1   NrD   r%   rg   rh   r9   ri   r1   r   )r(   r)   r*   r   _nonvar_fieldsr5   rC   r]   strrf   r   __classcell__r:   s   @r-   r/   r/   7   s       		'N
' ' ' ' ' ' 'B B B B B19 19 19 19 19 19f85 8S 8EV 8 8 8 8"_C &	_C
 -_C 
_C _C _C _C _C _C _C _C _C _Cr,   r/   c                   &     e Zd Zd fdZd Z xZS )ExceptionVariabler1   Nc                 V     t                      j        di | || _        || _        d S r3   )r4   r5   exc_typerg   )r8   r   rg   r9   r:   s       r-   r5   zExceptionVariable.__init__   s2    ""6""" 			r,   c                                            fd                                j                                       t	           j                  d           d S )Nc                  D                          dj        j                  S )Nbuiltins)load_import_fromr   r(   r?   r8   s   r-   r@   z/ExceptionVariable.reconstruct.<locals>.<lambda>  s    G,,Z9OPP r,   F)rA   foreachrg   ry   rQ   r8   r?   s   ``r-   rC   zExceptionVariable.reconstruct   se    PPPPP	
 	
 	
 		"""c$)nne44444r,   r   )r(   r)   r*   r5   rC   r   r   s   @r-   r   r      sL             
5 5 5 5 5 5 5r,   r   c                       e Zd ZdZdS )UnknownVariablez
    It could be anything!
    Nr(   r)   r*   __doc__r+   r,   r-   r   r                r,   r   c                       e Zd ZdZdS )DelayGraphBreakVariablez^
    Used to insert a dummy variable in the stack to do the graph break at CALL_FUNCTION.
    Nr   r+   r,   r-   r   r     r   r,   r   c                   D    e Zd ZdZ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
    c                      t          d          )Nzcomptime is special form)r   r   s     r-   rC   zComptimeVariable.reconstruct  s    !"<===r,   rD   r%   rT   r1   r   c                 v    ddl m } ddlm}  |t          ||          t	          | j        |                    S )Nr   )comptimer   )r   r_   )r   	functionsr   rG   r   rJ   )r8   rD   rT   r   r   s        r-   rf   zComptimeVariable.var_getattr  s]    '''''' 	433333##Hd##Jt{D,I,I
 
 
 	
r,   rg   rh   r9   ri   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: r+   z"unsupported argument to comptime: )r   r   rQ   rw   r   get_functionr   get_codeclosureco_freevarsr   r   	f_globalsfn_namerH   defaultstupleitemsRuntimeErrorrL   r	   r`   re   )r8   rD   rg   r9   r   fncodefuncs           r-   ry   zComptimeVariable.call_function&  ss    	/..... 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6r,   NrD   r%   rg   rh   r9   ri   r1   r   )r(   r)   r*   r   rC   r   rf   ry   r+   r,   r-   r   r     s         
> > >
5 
S 
EV 
 
 
 
'7#'7 &'7 -	'7
 
'7 '7 '7 '7 '7 '7r,   r   c                   :     e Zd Zdhej        Zd fdZd Z xZS )ClosureVariablerT   r1   Nc                 H     t                      j        di | || _        d S r3   r4   r5   rT   r8   rT   r9   r:   s      r-   r5   zClosureVariable.__init__V  +    ""6"""			r,   c                 `    |                     |                    | j                             d S r=   append_outputcreate_load_closurerT   r   s     r-   rC   zClosureVariable.reconstructZ  ,    g99$)DDEEEEEr,   r   r(   r)   r*   r   r   r5   rC   r   r   s   @r-   r   r   P  h        		'N
     F F F F F F Fr,   r   c                   :     e Zd Zdhej        Zd fdZd Z xZS )InlinedClosureVariablerT   r1   Nc                 H     t                      j        di | || _        d S r3   r   r   s      r-   r5   zInlinedClosureVariable.__init__e  r   r,   c                 `    |                     |                    | j                             d S r=   r   r   s     r-   rC   z"InlinedClosureVariable.reconstructi  r   r,   r   r   r   s   @r-   r   r   _  r   r,   r   c                         e Zd Zd fdZ xZS )NewCellVariabler1   Nc                 :     t                      j        di | d S r3   r4   r5   r8   r9   r:   s     r-   r5   zNewCellVariable.__init__n  &    ""6"""""r,   r   r(   r)   r*   r5   r   r   s   @r-   r   r   m  =        # # # # # # # # # #r,   r   c                         e Zd Zd fdZ xZS )NewGlobalVariabler1   Nc                 :     t                      j        di | d S r3   r   r   s     r-   r5   zNewGlobalVariable.__init__s  r   r,   r   r   r   s   @r-   r   r   r  r   r,   r   c                        e Zd ZdZddhej        Zed             Zdeddf fdZd	d
de	ddf fdZ
	 	 	 	 	 	 d fdZd Z xZS )InspectSignatureVariablez!represents inspect.signature(...)	signature
parametersc                     |rt          d|            t          | t          j                                                  S )Nzinspect.signature with rx   )r   r   r	   baseMutableLocal)callabler9   s     r-   re   zInspectSignatureVariable.create  sK     	><F<<==='IN$?$?$A$A
 
 
 	
r,   	inspectedr1   Nc                 P    t                      j        di | || _        t          | j        t                    rv| j                                        | _        t          j        | j                  | _        t          | j        j
                                                  dd          | _
        d S t          | j        t                    rn| j                                        | _        t          j        | j                  | _        t          | j        j
                                                  | _
        d S | j                                        | _        t          j        | j                  | _        t          | j        j
                                                  | _
        d S )Nr   r+   )r4   r5   r   rw   r    r   r   inspectr   listr   r   r   rH   )r8   r   r9   r:   s      r-   r5   z!InspectSignatureVariable.__init__  sC   ""6""""dn&899 	Fn1133DG$.tw77DN"4>#<#B#B#D#DEEabbIDOOO(<== 	Fn1133DG$.tw77DN"4>#<#B#B#D#DEEDOOOn7799DG$.tw77DN"4>#<#B#B#D#DEEDOOOr,   rD   r%   rT   r   c                     |dk    r*t          j        d | j        D             t                    S t	                                          ||          S )Nr   c                     i | ];}t           j                            |d                    t          |d                   <S )r   r   )r	   r`   re   InspectParameterVariable).0params     r-   
<dictcomp>z8InspectSignatureVariable.var_getattr.<locals>.<dictcomp>  sS         .55a /a99  r,   )user_cls)r	   ConstDictVariabler   dictr4   rf   )r8   rD   rT   r:   s      r-   rf   z$InspectSignatureVariable.var_getattr  si    <.  "&	       ww""2t,,,r,   rg   rh   r9   ri   c                     |dk    rt           j        d          st          d j         d             j        j        |i |}i } j        j        r^t          j        t          |           fd j        j        D             fd j        j        	                                D             }t          ||           S t                                          ||||          S )Nbind__kwdefaults__zinspect.signature.bind with z without __kwdefaults__)rD   c                 R    i | ]#}|j         d nt          j         |d          $S )NT)is_kw)rJ   r   )r   kr8   s     r-   r   z8InspectSignatureVariable.call_method.<locals>.<dictcomp>  sN     & & &  {* t'QdCCC& & &r,   c                 >    i | ]\  }}| ||                    S ))valrJ   r+   )r   r   vkwdefaults_sourceswraps      r-   r   z8InspectSignatureVariable.call_method.<locals>.<dictcomp>  sD       1 tt*<Q*?@@@  r,   )hasattrr   r   r   r   r   	functoolspartialr!   r   InspectBoundArgumentsVariabler4   r   )
r8   rD   rT   rg   r9   objr   r   r   r:   s
   `      @@r-   r   z$InspectSignatureVariable.call_method  s7    6>>47$455 S47SSS   &$.%t6v66C Hw%  (B???& & & & "W3	& & &"     $ 6 < < > >  
 1  
 ww""2tT6:::r,   c                                          fd            | j                                       t          dd                     d S )Nc                                                                 t                                         d          g          S )Nr   )rB   create_load_python_moduler   create_load_attrr?   s   r-   r@   z6InspectSignatureVariable.reconstruct.<locals>.<lambda>  s>    G))55g>>,,[99  r,   r   F)rA   r   rB   r
   r   s    `r-   rC   z$InspectSignatureVariable.reconstruct  sh       	
 	
 	
 	21e<<=====r,   r   )r(   r)   r*   r   r   r   r}   re   r5   r   rf   r   rC   r   r   s   @r-   r   r   w  s       ++ 	 
	'N 
 
 \
F/ F F F F F F F"-5 -S -EV - - - - - -"; &	";
 -"; 
"; "; "; "; "; ";H
> 
> 
> 
> 
> 
> 
>r,   r   c                   8     e Zd ZdZd
 fdZdddeddfd	Z xZS )r   z!represents inspect.Parameter(...)r1   Nc                 H     t                      j        di | || _        d S r3   r4   r5   rM   r8   rM   r9   r:   s      r-   r5   z!InspectParameterVariable.__init__  +    ""6"""


r,   rD   r%   rT   r   c                 $   ddl m}m} 	 t          | j        |          }| j        r*t          | j        |          }  |||          |          S |                    ||          S # t          $ r t          d| j         d| d           Y d S w xY w)Nr   SourcelessBuilderrm   zgetattr(rp   ))
r   r  rm   rG   rM   rJ   r   re   AttributeErrorr   )r8   rD   rT   r  rm   
attr_valueattr_sources          r-   rf   z$InspectParameterVariable.var_getattr  s    ????????	< T22J{ @(d;;7r;77
CCC(//J??? 	< 	< 	<:TZ::4:::;;;;;;	<s   AA& A& &%BBr   )r(   r)   r*   r   r5   r   rf   r   r   s   @r-   r   r     sn        ++     <5 <S <EV < < < < < < < <r,   r   c                        e Zd ZdZddhej        Zdej        dee	ef         de
f fdZd Zdd	d
e	ddf fdZ	 	 	 	 	 	 d fdZd Z xZS )r  z+represents inspect.signature(...).bind(...)bound_argumentspacked_varsr   r   c                 J    t                      j        di | || _        || _        t	                      | _        i }|j                                        D ]\  }}t          j	        |          }t          |t                    r?t          j        t          |                    ||<   | j                            |           mt          |t                    rN| j                            |           t          j        d |                                D                       ||<   t          |t"                    r|||<   t%          d           t          j        |t'          |j                  t          j                                                  | _        || _        d S )Nc                 >    i | ]\  }}t          j        |          |S r+   r	   r`   r   r   r   s      r-   r   z:InspectBoundArgumentsVariable.__init__.<locals>.<dictcomp>  s)    NNN$!QY/22ANNNr,   zKinspect.signature(...).bind(...).arguments contains non-variable/tuple/dictr   r+   )r4   r5   r  r   setr  	argumentsr   r	   r`   rw   r   TupleVariabler   addr   r   r   r   rL   r   r   bound_arguments_varr   )
r8   r  r   r   r9   arguments_dictr   r   key_varr:   s
            r-   r5   z&InspectBoundArgumentsVariable.__init__  s    	""6""". 55'17799 	 	HC055G#u%% *3*A$s))*L*Lw' $$S))))C&& 
 $$S)))*3*ENN#))++NNN+ +w'' C11 *-w''a    $-#>*++#.5577$
 $
 $
 
 #r,   c                    | j         j                                        D ]\  }}|}|j        | j        v r|t	          |t
          j                  rt          |j                  }nMt	          |t
          j                  r$d |j                                        D             }nt          d           || j
        j        |j        <   d S )Nc                 $    i | ]\  }}|j         |S r+   )underlying_valuer  s      r-   r   zIInspectBoundArgumentsVariable._update_bound_arguments.<locals>.<dictcomp>&  s!    TTT$!Q 2ATTTr,   z>inspect.signature(...).bind(...) cannot update bound arguments)r   r   r%  r  rw   r	   r  r   r   r   r  r  )r8   r   r   true_vals       r-   _update_bound_argumentsz5InspectBoundArgumentsVariable._update_bound_arguments  s    06<<>> 	L 	LHCH#t'777c9#:;; $SY//HHY%@AA TT#)//BSBSTTTHH!X   DLD *3+?@@	L 	Lr,   rD   r%   rT   r1   r   c                    |dk    r| j         S |dk    r?|                                  t          j        t	          | j        j                            S |dk    rP|                                  d | j        j                                        D             }t          j	        |          S |dk    r| j
        S t                                          ||          S )Nr  rg   r9   c                 >    i | ]\  }}t          j        |          |S r+   r  r   r   r   s      r-   r   z=InspectBoundArgumentsVariable.var_getattr.<locals>.<dictcomp>5  s9       C *3//  r,   r   )r   r'  r	   r  r   r  rg   r9   r   r   r   r4   rf   )r8   rD   rT   kwr:   s       r-   rf   z)InspectBoundArgumentsVariable.var_getattr-  s    ;++V^^((****40D0I+J+JKKKX((***  $ 4 ; A A C C  B .r222[  >!ww""2t,,,r,   rg   rh   r9   ri   c                 ^   |dk    r| j                                         D ]A\  }}t          j        |          }|| j        vr| j                            |d||gi            B|                                  t          j        d           S t                                          ||||          S )Napply_defaultsrn   )r   r   r	   r`   r   r   r'  r4   )	r8   rD   rT   rg   r9   r   r   r"  r:   s	           r-   r   z)InspectBoundArgumentsVariable.call_method>  s     ### M//11  S#4S99$":::,88MGS>2  
 ((***-d333ww""2tT6:::r,   c                 f                                        fd}                    |d                                j        j                                       t          dt           j        j                                        j        j        	                                D ]8\  }}                    
                    |                      |           9                    t          dt           j        j                            t          dd          g           d S )	Nc                  x      j                                                              d                     d S )Nr   )r   r   r  r   s   r-   gen_fnz9InspectBoundArgumentsVariable.reconstruct.<locals>.gen_fnZ  s=    GDN###!!'":":6"B"BCCCCCr,   Tcall_function_exBUILD_TUPLEarg	BUILD_MAPCALL_FUNCTION_EXr   )r'  rA   r   r  rg   r   r   rQ   r9   r   create_load_constrB   )r8   r?   r0  r   r   s   ``   r-   rC   z)InspectBoundArgumentsVariable.reconstructT  sS    	$$&&&	D 	D 	D 	D 	D 	D 	ft<<<,1222}#d6J6O2P2PQQQ	
 	
 	
 ,399;; 	 	HC!!'";";C"@"@AAAGCLLLL";C8L8S4T4TUUU"#51===	
 	
 	
 	
 	
r,   r   )r(   r)   r*   r   r   r   r   BoundArgumentsr   r   r   r5   r'  rf   r   rC   r   r   s   @r-   r  r    s       55 	 
	'N%# /%# sO+,%# ,	%# %# %# %# %# %#NL L L-5 -S -EV - - - - - -"; &	;
 -; 
; ; ; ; ; ;,
 
 
 
 
 
 
r,   r  c                 *      fd}t           |_        |S )Nc                       j         | i |S r=   )apply)rg   r9   fn_clss     r-   trampoline_autograd_applyzDproduce_trampoline_autograd_apply.<locals>.trampoline_autograd_applyq  s    v|T,V,,,r,   )!produce_trampoline_autograd_apply_origin)r=  r>  s   ` r-   r?  r?  p  s.    - - - - - )J%$$r,   c                   `     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=  r1   Nc                 H     t                      j        di | || _        d S r3   )r4   r5   r=  )r8   r=  r9   r:   s      r-   r5   z!AutogradFunctionVariable.__init__  s+    ""6"""r,   rD   r%   c           	      $   dfd}t          j        |||f           rt          j                    rt          j        rd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           | j
        j        }
|
t          j        j        j        urt!          d           dd	lm} | j        }|7t+                              | j
        j                  | j
        j                  } ||| j
        j        |t+          |d
                                        ||          }| j        rt+          | j        d          }t7          |                    t:          j                             |rAt+          | j        d          }t7          |                    t:          j                             |S | j        rt+          | j        d          }nd }| j
        j        }t>                               ||          }|g|}tC          |tD          j#                  r+tI          j%        ||                              ||          S tC          |tD          j&                  rHtI          j'        |j(        tI          j)        | j
                  |                              ||          S t!          d|            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)rw   r	   TensorVariablerequires_gradNNModuleVariableis_training)noderG  rD   s    r-   visitz2AutogradFunctionVariable.call_apply.<locals>.visit  ss    $	 899 )%U22$(M$	 :;; )##B'' )$(MMM) )) )r,   r   )#autograd_function_forward_rewritten)_is_setup_context_definedzNYI - User defind vjpzNYI - User defind jvpr   )AutogradFunctionApplyVariabler<  )memberr_   forwardsetup_contextz?non-function or method in subclass of torch.autograd.Function: )*r   rK  rs   is_grad_enabledr   capture_autograd_function"torch._functorch.autograd_functionrL  torch.autograd.functionrM  r=  rP  rQ  vjpautogradFunctionr   jvphigher_order_opsrN  rJ   r   import_sourcer)   r(   backwardry   r   rc   r   FUNCTION_MATCHAutogradFunctionContextVariablere   rw   r   r   r	   r   r   r    r~   UserDefinedClassVariable)r8   rD   rg   r9   rK  rL  rM  
forward_fnis_setup_ctx_definedvjp_fnjvp_fnrN  rJ   r   fwd_srcsetup_ctx_srcr   ctxrG  s    `                @r-   
call_applyz#AutogradFunctionVariable.call_apply  si   	) 	) 	) 	) 	) 	) 	edF^444 6	%''6	 06	
      JIIIII,J#<#<T[=V#W#W #  A@K')B 
 [_FU^48885666[_FU^48885666G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%,-- 	1"VDDDRRD&   E,-- 		/24;??   mBf--	. VRTVV    r,   c                 J   | j         j        }t          | j        d          | _        t	          |d         j                  t          j        j        j	        u sJ t          |t          j                  sJ t          j        || j                                      |||          S )Nr\  r   r_   )r=  r\  r   rJ   rL   rM   rs   _dynamoexternal_utilsFakeBackwardCFunctionrw   r   r   r	   r   ry   )r8   rD   rg   r9   r   s        r-   call_backwardz&AutogradFunctionVariable.call_backward  s    [! j99DGM""em&B&XXXXX"e011111-bEEESSf
 
 	
r,   c                 *    t          | j                  S r=   )rB  r=  r8   rD   rg   r9   s       r-   ry   z&AutogradFunctionVariable.call_function  s    '444r,   rg   rh   r9   ri   c           
         ddl m} ddlm} |dk    rh || j                  rAt          | j                  } || |j        j        d|gt          ||          R            S | 	                    |||          S |dk    r| 
                    |||          S dd	lm } | j        t          | j        |          nd }		 t          j        | j        |          }
n# t           $ r d }
Y nw xY wt#          |
t$                    r|
                    | j                  }|	?|                    |                              ||	
                              |||          S  |                    |          |                              |||          S t#          |
t.                    r1t1          j        |
j        | |	
                              |||          S t7          d|            d S )Nr   )is_callable_allowedr   )wrap_fx_proxyr<  ry   )rD   proxyr\  )trace_rulesr_   zUnsupported method: )rs  rp  r   rq  r=  r?  r{   create_proxyr   rg  rl   rJ   r   r   getattr_staticr  rw   r}   __get__lookupcreate_with_sourcery   r   r	   r    r~   r   )r8   rD   rT   rg   r9   rp  rq  r>  rs  rJ   r  r   s               r-   r   z$AutogradFunctionVariable.call_method  s]    	655555******7??""4;// 9,MK- -) %}0")0'1 +488      r4888Z%%b$777&&&&&&6: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 ;T;;<<<<<s   =C C'&C'r   r   )rg   rh   r9   ri   )r(   r)   r*   r   r   r   r5   rg  rl  ry   r   r   r   s   @r-   rB  rB  x  s        77 			'N
     [ [ [ [z
 
 
 
5 5 5 56= &	6=
 -6= 6= 6= 6= 6= 6= 6= 6=r,   rB  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fieldr   r}  r   r   __annotations__r+   r,   r-   r{  r{  '  s7         %6[%6t%L%L%LGT/"LLLLLr,   r{  c                        e Zd ZdZdddhej        Z	 	 	 	 	 	 d	 d fdZeddd            Zd Z		 	 	 	 	 	 d fdZ
d fdZ xZS )r^  zZ
    Tracks an autograd.Function() context using mutation tracking in side_effects.py
    rr  	inferencesaved_tensorsNFr1   c                      t                      j        d||d| || _        || _        || _        || _        || _        d S N)rM   
value_typer+   )r4   r5   r  rr  r  needs_input_gradnon_differentiable)
r8   rM   r  r  rr  r  r  r  r9   r:   s
            r-   r5   z(AutogradFunctionContextVariable.__init__8  sU     	FuFFvFFF"
* 0"4r,   rD   r%   c                    d }|r|st          d |D                       }| j                            dt          j        j        j        di           }| j        j                            d t          j        j        j        t          j
        t          d|t                      |          i           }t          |j        |j                   |S )Nc              3   X   K   | ]%}t          |t          j                  o|j        V  &d S r=   )rw   r	   rF  rG  r   xs     r-   	<genexpr>z9AutogradFunctionContextVariable.create.<locals>.<genexpr>N  sJ       % % 1i677KAO% % % % % %r,   ry   r+   T)r  rr  r  r  )r   r{   rt  rs   rW  functionFunctionCtxrv   track_object_newr   r  r^  r{  r   rJ  rM   )rD   rg   r9   r  rr  outs         r-   re   z&AutogradFunctionContextVariable.createJ  s     	 	$ % %% % %     	&&U^4@"b
 
 i$55N#//,..!1   
 
 	%*ci000
r,   c                 <    | j         t          d           | j         S )Nzproxy not set)rr  r   r8   s    r-   as_proxyz(AutogradFunctionContextVariable.as_proxye  s     :/***zr,   rg   rh   r9   ri   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|            | j	        t          d           | 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"autograd.Function context method: zCsave_for_backward only supported on a newly constructed FunctionCtx)r4   r   rQ   r   r  r	   r`   re   r   r  r  rJ   r{   rv   track_save_for_backwardr}  append)r8   rD   rT   rg   r9   r5  r:   s         r-   r   z+AutogradFunctionContextVariable.call_methodj  sd    =  77&&r4v>>>...v;;!####&7b&A&A!&DD#-44T:::&&&EtEEFFF%U   ~ 	G;-v---I"::4FFF t!)**Q..)+D& 	3 	3C&--c2222)00666r,   c                     dv rt           fd          S dk    r2 j        +t          j        t	           j        j                            S dk    rj j        $t          j                             j                  S  j	        r8ddl
m}   |t           j	        d                     j        j                  S t                                                    S )N)r  r  c                  4                         | |          S r=   )r   )rg   r9   rT   r8   rD   s     r-   r@   z=AutogradFunctionContextVariable.var_getattr.<locals>.<lambda>  s    (8(8T4(P(P r,   r  r  r   rl   )rr   r  r	   r  r   r}  r  r`   re   rJ   r   rm   r   rM   r4   rf   r8   rD   rT   rm   r:   s   ``` r-   rf   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{ 444444Wr:dkCU+V+VWWJ/   ww""2t,,,r,   )NFNNNNr   NNr   r   )r(   r)   r*   r   r$   r   r5   r}   re   r  r   rf   r   r   s   @r-   r^  r^  ,  s        
 	 
#	1	N 5 
5 5 5 5 5 5$     \4  
7 &	7
 -7 
7 7 7 7 7 7@- - - - - - - - - -r,   r^  c                   >     e Zd ZdZ	 d	 d fdZ	 	 	 	 	 	 dd
Z xZS )AutogradEngineVariablez;
    Represents a torch._C._ImperativeEngine instance.
    Nr1   c                 @     t                      j        d||d| d S r  r   )r8   rM   r  r9   r:   s       r-   r5   zAutogradEngineVariable.__init__  s/     	FuFFvFFFFFr,   rg   rh   r9   ri   r   c                 x   |dk    rt           j        j        j        rz|j        s
J d            t          j        t           j        j        j        j	        | j
                                      ||j        j                                        g|R |          S t          d           d S t          d|            d S )Nqueue_callbackzXqueue_callback() is only supported when Compiled Autograd is enabled with fullgraph=Truer_   z#torch._C._ImperativeEngine method: )rs   ri  compiled_autogradcompiled_autograd_enabled	one_graphr	   r   rj  FakeCompiledAutogradEnginer  rJ   ry   r{   rv   get_ca_final_callbacks_varr   r8   rD   rT   rg   r9   s        r-   r   z"AutogradEngineVariable.call_method  s     ###}.H Ln nmn n n !5M0KZ;    -Y+FFHHP4PP  n     FFFGGGGGr,   r=   r   r   r(   r)   r*   r   r5   r   r   r   s   @r-   r  r    s          G
 
G G G G G GH &	H
 -H 
H H H H H H H Hr,   r  c                   8     e Zd Zd fdZ	 	 	 	 	 	 	 	 ddZ xZS )rr   r1   Nc                 H     t                      j        di | || _        d S r3   )r4   r5   r   )r8   r   r9   r:   s      r-   r5   zLambdaVariable.__init__  s+    ""6"""r,   rD   r%   rg   rh   r9   ri   r   c                      | j         |i |S r=   )r   rn  s       r-   ry   zLambdaVariable.call_function  s     tw''''r,   r   r   )r(   r)   r*   r5   ry   r   r   s   @r-   rr   rr     sw             (#( &( -	(
 
( ( ( ( ( ( ( (r,   rr   c                        e Zd Zdhej        Zd fdZdefdZede	j
        j        fd            Zd ZddZd Z	 	 	 	 	 	 	 	 ddZdee         deeef         def fdZ xZS )rb   rT   r1   Nc                      t                      j        di | t          |t                    sJ t          |t                    sJ || _        || _        d S r3   )r4   r5   rw   r   r   r  rT   )r8   r  rT   r9   r:   s       r-   r5   zGetAttrVariable.__init__  s^    ""6"""#/////$$$$$$			r,   c                 @    | j         j         d| j         d| j         dS N(rp   r  )r:   r(   r  rT   r  s    r-   __str__zGetAttrVariable.__str__  s*    .)DDDHDD	DDDDr,   
base_proxyc                 "    t          | |          S r=   )rG   )r  r   s     r-   create_getattr_proxyz$GetAttrVariable.create_getattr_proxy  s    z4(((r,   c                 p    t                               | j                                        | j                  S r=   )rb   r  r  r  rT   r  s    r-   r  zGetAttrVariable.as_proxy  s(    33DH4E4E4G4GSSSr,   rD   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 r=   )rw   r  r	   rH  r   r{   get_submodule
module_keyrT   rR   r   rv  )r8   rD   rT   step1step2s        r-   const_getattrzGetAttrVariable.const_getattr  s    $(I$>?? 	&%%	''(;<<9EN**%%&udi88u~%%%%%eT222r,   c                      || j                    |                    |                    | j                             d S r=   )r  rB   create_load_attrsrT   r   s     r-   rC   zGetAttrVariable.reconstruct  s>    g77	BBCCCCCr,   rg   rh   r9   ri   r   c                 F    | j                             || j        ||          S r=   )r  r   rT   rn  s       r-   ry   zGetAttrVariable.call_function  s"     x##B	4@@@r,   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 n|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 t                                          ||||          S )
N)ro   rS   rR   r   rS   r   r   __contains__TF)rT   r   rw   r  r	   r$   rH  r_  rH   has_key_in_generic_dictrf   rQ   r`   r4   r   )r8   rD   rT   rg   r9   r  r   r:   s          r-   r   zGetAttrVariable.call_method  s    ***	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ww""2tT6:::r,   r   r   r   )r(   r)   r*   r   r   r5   r   r  r}   rs   fxProxyr  r  r  rC   ry   r   r   r   r   r   s   @r-   rb   rb     sb       		'N
     E E E E E ) ) ) ) \)T T T	3 	3 	3 	3D D DA#A &A -	A
 
A A A A8; ?#	8;
 S/)*8; 
8; 8; 8; 8; 8; 8; 8; 8; 8; 8;r,   rb   c                   H     e Zd Zd fdZ	 	 	 	 	 	 	 	 d fdZd Zd Z xZS )MethodWrapperVariabler1   Nc                 H     t                      j        di | || _        d S r3   )r4   r5   method_wrapper)r8   r  r9   r:   s      r-   r5   zMethodWrapperVariable.__init__>  s.    ""6""",r,   rD   r%   rg   rh   r9   ri   r   c                 \   t          | j                  rst          |d         t          j                  rSt          |          dk    rt          |          dk    sJ |d                             || j        j        j                  S t                      
                    |||           d S )Nr   r   )r   r  rw   r	   rF  rQ   rf   __self__r(   r4   ry   )r8   rD   rg   r9   r:   s       r-   ry   z#MethodWrapperVariable.call_functionB  s     &d&9:: 	RzGY-@
 @
 	R t99>>c&kkQ&6&6&6&67&&r4+>+G+PQQQb$/////r,   c                     dS NTr+   r  s    r-   r   z(MethodWrapperVariable.is_python_constantQ      tr,   c                     | j         S r=   )r  r  s    r-   rH   z(MethodWrapperVariable.as_python_constantT  s    ""r,   r   r   )r(   r)   r*   r5   ry   r   rH   r   r   s   @r-   r  r  =  s        - - - - - -0#0 &0 -	0
 
0 0 0 0 0 0  # # # # # # #r,   r  c                   8     e Zd Zd	 fdZd
 fdZd Zd Z xZS )GetSetDescriptorVariabler1   Nc                 H     t                      j        di | || _        d S r3   )r4   r5   desc)r8   r  r9   r:   s      r-   r5   z!GetSetDescriptorVariable.__init__Y  r   r,   rD   r%   c                     |dk    r?| j         r8ddlm}   ||t          | j         d                    | j        j                  S t                                          ||          S )Nrw  r   rl   )rJ   r   rm   r   r  rw  r4   rf   r  s       r-   rf   z$GetSetDescriptorVariable.var_getattr]  sw    9000000J??2z$+y'I'IJJ	!   77&&r4000r,   c                     dS r  r+   r  s    r-   r   z+GetSetDescriptorVariable.is_python_constantg  r  r,   c                     | j         S r=   )r  r  s    r-   rH   z+GetSetDescriptorVariable.as_python_constantj  s
    yr,   r   r   )r(   r)   r*   r5   rf   r   rH   r   r   s   @r-   r  r  X  sy             1 1 1 1 1 1        r,   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 )PythonModuleVariablerM   is_torchr1   Nc                      t                      j        di | || _        | j        t          u p| j        j                            d          | _        d S )Nztorch.r+   )r4   r5   rM   rs   r(   
startswithr  r  s      r-   r5   zPythonModuleVariable.__init__u  sQ    ""6"""

e+Wtz/B/M/Mh/W/Wr,   c                     t           j        S r=   )r   
ModuleTyper  s    r-   rI   z PythonModuleVariable.python_typez  s    r,   c                     | j         S r=   rM   r  s    r-   rH   z'PythonModuleVariable.as_python_constant}  
    zr,   c                     d| j          dS )NzPythonModuleVariable(r  r  r  s    r-   __repr__zPythonModuleVariable.__repr__  s    4tz4444r,   rD   r%   c                 j    t          | j        |          }t          j                            |          S r=   )r   rM   r	   r`   re   r8   rD   rT   results       r-   call_hasattrz!PythonModuleVariable.call_hasattr  s*    T**)00888r,   c                    |j         j                            | |          r |j         j                            | |          S ddlm}m} | j        s|| j        j	        vrt          | j        |          }n| j        j	        |         }| j        r*t          | j        |          }  |||          |          S |                    ||          S )Nr   r  )r{   rv   has_pending_mutation_of_attr	load_attrr   r  rm   r  rM   rR   rG   rJ   r   re   )r8   rD   rT   r  rm   r  
new_sources          r-   rf   z PythonModuleVariable.var_getattr  s    9!>>tTJJ 	@9)33D$???????????= 	3D
(;;; T22JJ,T2J; 	<#DK66J2??2z22:>>>$++B
;;;r,   r   )r(   r)   r*   r   r   r   r  r5   rI   rH   r   r  r  rf   r   r   s   @r-   r  r  n  s         
	'NXe. XT X X X X X X
       5# 5 5 5 59 9 9 9< < < < < < < <r,   r  c                   :     e Zd Zd fdZ	 	 	 	 	 	 dd	Zd
 Z xZS )TypingVariabler1   Nc                 H     t                      j        di | || _        d S r3   r  r  s      r-   r5   zTypingVariable.__init__  r  r,   rg   rh   r9   ri   r   c                     |dk    rUt          |          dk    rBt          j                            | j        |d                                                            S t          d           d S )Nro   r   r   typing)rQ   r	   r`   re   rM   rH   r   r  s        r-   r   zTypingVariable.call_method  sh     =  SYY!^^-44
4755778   	hr,   c                     | j         S r=   r  r  s    r-   rH   z!TypingVariable.as_python_constant  r  r,   r   r   )r(   r)   r*   r5   r   rH   r   r   s   @r-   r  r    s~               &	 
 -  
             r,   r  )maxsizec                      ddl m}  i }|                                 D ]K\  }}|j                                        D ],\  }}t	          |          rt          ||d           x}r|||<   -L|S )Nr   )NP_TO_TNP_MODULE)utilsr  r   rR   r   rG   )r  np_fn_to_tnp_fnnp_modtnp_modr   tnp_fnnp_fns          r-   get_np_to_tnp_mapr    s    ((((((O+1133 4 4&/5577 	4 	4OGV 4 $FGT:::5 4-3OE*	4 r,   c                        e Zd ZdZej        fZd fdZed             Z	ed             Z
	 	 	 	 	 	 	 	 ddZ	 	 	 	 	 	 ddZd Z fdZ xZS )NumpyVariablezz
    Wrapper around `numpy.*`. Currently, is able to trace a small subset of numpy functions as well as numpy dtypes.
    r1   Nc                 H     t                      j        di | || _        d S r3   r  r  s      r-   r5   zNumpyVariable.__init__  r  r,   c                     |j                             d          }t          |          dk    r|d d         ddgk    sJ || j        v S N.r   rs   _numpy)r)   splitrQ   constant_fold_functionsclsr   mods      r-   can_constant_fold_throughz'NumpyVariable.can_constant_fold_through  sQ    m!!#&&3xx1}}RaRWh,?!?!?!?!?S000r,   c                     |j                             d          }t          |          dk    r|d d         ddgk    sJ t                              |d           S r  )r)   r  rQ   np_constant_collections_maprS   r  s      r-    get_constant_collection_for_funcz.NumpyVariable.get_constant_collection_for_func  sY    m!!#&&3xx1}}RaRWh,?!?!?!?!?*..r4888r,   rD   r%   rg   rh   r9   ri   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 r+   rH   r  s     r-   
<listcomp>z/NumpyVariable.call_function.<locals>.<listcomp>  $    ???Q!..00???r,   c                 >    i | ]\  }}||                                 S r+   r  r  s      r-   r   z/NumpyVariable.call_function.<locals>.<dictcomp>  *    PPPA1a2244PPPr,   z with non-const args:  ztorch._numpy.randomz
delegate 'z' to NumPy itself via zconfg.use_numpy_random_stream=c                 6    g | ]}|                                 S r+   r  r  s     r-   r  z/NumpyVariable.call_function.<locals>.<listcomp>
  r  r,   c                 >    i | ]\  }}||                                 S r+   r  r  s      r-   r   z/NumpyVariable.call_function.<locals>.<dictcomp>  r  r,   ry   )r   trace_numpyr   rM   r  r  tensorr  r  rS   r	  r   r   r(   r)   use_numpy_random_streamr*   
patch_argsr  r   r	   r`   re   rH   r{   rt  r   )
r8   rD   rg   r9   r  r  r   collection_variable_typmsgrr  s
             r-   ry   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X8VXXX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numpyr   r  s        r-   r   zNumpyVariable.call_method  s     	gr,   c                     | j         S r=   r  r  s    r-   rH   z NumpyVariable.as_python_constant   r  r,   c                     t           j        r&t          | j        t                    r| j        j        S t                                                      S r=   )r   r  rw   rM   rL   r(   r4   r  )r8   r:   s    r-   r  zNumpyVariable.as_proxy#  sD     	'*TZ">"> 	' :&&ww!!!r,   r   r   r   )r(   r)   r*   r   tnp
issubdtyper  r5   r   r  r	  ry   r   rH   r  r   r   s   @r-   r  r    s          #~/      1 1 [1
 9 9 [9
>:#>: &>: -	>:
 
>: >: >: >:@ &	
 - 
     " " " " " " " " "r,   r  c                   2     e Zd Zd fdZdefdZd Z xZS )NullVariabler1   Nc                 :     t                      j        di | d S r3   r   r   s     r-   r5   zNullVariable.__init__/  r   r,   c                     dS )Nr#  r+   r  s    r-   r  zNullVariable.__str__2  s    ~r,   c                     t           j        dk     rt          d           |                    t	          d                     d S )N)      z0cannot reconstruct NullVariable in < Python 3.11	PUSH_NULL)sysversion_infor   r   r   r   s     r-   rC   zNullVariable.reconstruct5  sB    g%%LMMM0==>>>>>r,   r   )r(   r)   r*   r5   r   r  rC   r   r   s   @r-   r#  r#  .  sg        # # # # # #    ? ? ? ? ? ? ?r,   r#  c                       e Zd ZdZdS )r   z"Marker used to implement delattr()Nr   r+   r,   r-   r   r   ;  s        ,,,,r,   r   c                   `     e Zd ZdZdhej        Zed             Zd	 fdZde	fdZ
d Z xZS )
StringFormatVariablez[
    Represents a call to str.format(), we delay calling format until after the graph.
    format_stringc           	      l   t          d t          j        ||                                          D                       rPt          j                             |j        d |D             i d |                                D                       S  | |t          |          t          |                    S )Nc              3   >   K   | ]}|                                 V  d S r=   )r   r  s     r-   r  z.StringFormatVariable.create.<locals>.<genexpr>H  sB       
 
   ""
 
 
 
 
 
r,   c                 6    g | ]}|                                 S r+   r  )r   r   s     r-   r  z/StringFormatVariable.create.<locals>.<listcomp>N  s$    ???a**,,???r,   c                 >    i | ]\  }}||                                 S r+   r  r  s      r-   r   z/StringFormatVariable.create.<locals>.<dictcomp>O  s*    PPPTQq!..00PPPr,   )all	itertoolschainvaluesr	   r`   re   formatr   r   r   )r  r/  sym_args
sym_kwargss       r-   re   zStringFormatVariable.createF  s     
 
_Xz/@/@/B/BCC
 
 
 
 
 		 -44$$??h???PPZ=M=M=O=OPPP    s=$x..$z2B2BCCCr,   r1   Nc                      t                      j        di | t          |t                    sJ || _        || _        || _        d S r3   )r4   r5   rw   r   r/  r9  r:  )r8   r/  r9  r:  r9   r:   s        r-   r5   zStringFormatVariable.__init__T  sP    ""6"""------* $r,   c                 P    | j         j         d| j        d| j        d| j        dS r  )r:   r(   r/  r9  r:  r  s    r-   r  zStringFormatVariable.__repr__[  s7    .)kkD,>kkDMkkW[Wfkkkkr,   c                 L                          fdd            t          j         j                             d  j                                        D             } t          j        |                                         t          dd                     d S )Nc                                                                 j                                       d          g          S )Nr8  )rB   r8  r/  r  r   s   r-   r@   z2StringFormatVariable.reconstruct.<locals>.<lambda>`  sA    G))--d.@AA,,X66  r,   Tr1  c                 T    i | ]%\  }}t           j                            |          |&S r+   r	   r`   re   r  s      r-   r   z4StringFormatVariable.reconstruct.<locals>.<dictcomp>i  s<     
 
 
8<1I&--a00!
 
 
r,   r7  r   r4  )	rA   r	   r  r9  r:  r   r   r   r   )r8   r?   r9   s   `` r-   rC   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Lr,   r   )r(   r)   r*   r   r   r   r   re   r5   r   r  rC   r   r   s   @r-   r.  r.  ?  s          &G(FGND D [D% % % % % %l# l l l lM M M M M M Mr,   r.  c                   `     e Zd ZdZd fdZed             ZddZd	 Zedd            Z	 xZ
S )DebuggingVariablez
    Represents a call to a debugging function like print(), or something
    registered to config.reorderable_logging_functions.
    r1   Nc                 H     t                      j        di | || _        d S r3   r  r  s      r-   r5   zDebuggingVariable.__init__v  r  r,   c                     t          |           o=t          | t          j        t          j        f          o| t
          j        j        j        v S r=   )	r   rw   r   r   BuiltinFunctionTypers   ri  r   reorderable_logging_functions)r  s    r-   is_reorderable_logging_functionz1DebuggingVariable.is_reorderable_logging_functionz  sF     SMM J3!3U5N OPPJu}+II	
r,   rD   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 r  z is not yet implemented.)exportcan_reorder_logsrM   r   debug_localsr  r   rn  s       r-   ry   zDebuggingVariable.call_function  s    9 	F$$TZv>> 	G G G#G G&,G G G  
 	d4jj122222r,   c                 6    | j                             |          S r=   )rJ   rC   r   s     r-   rC   zDebuggingVariable.reconstruct  s    {&&w///r,   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	   rF  r`   r.  pytreetree_leavesrw   )r   rg   r9   allowed_input_types	flat_argsr5  s         r-   rJ  z"DebuggingVariable.can_reorder_logs  sf     $& 
 &f~66	 	 	Cc#677 uu tr,   r   r   )r1   T)r(   r)   r*   r   r5   r}   rG  ry   rC   rJ  r   r   s   @r-   rB  rB  p  s         
      
 
 \
3 3 3 30 0 0    \    r,   rB  c                   8     e Zd ZdZd fdZ	 	 	 	 	 	 dd
Z xZS )LoggingLoggerVariablez<
    Represents a call to any of logging.Logger methods
    r1   Nc                 :     t                      j        di | d S r3   r   r  s      r-   r5   zLoggingLoggerVariable.__init__  r   r,   rg   rh   r9   ri   r   c                 6    |j         rd S t          d           d S )Nz)Logger not supported for non-export cases)rI  r   r  s        r-   r   z!LoggingLoggerVariable.call_method  s(     9 	FABBBBBr,   r   r   r  r   s   @r-   rS  rS    s         # # # # # #
C &	
C
 -
C 

C 
C 
C 
C 
C 
C 
C 
Cr,   rS  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
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_typer+   r1   Nc                 H     t                      j        di | || _        d S r3   r  r  s      r-   r5   zConstantLikeVariable.__init__  r  r,   c                     | j         S r=   r  r  s    r-   rH   z'ConstantLikeVariable.as_python_constant  r  r,   rg   r9   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 r+   r  r  s     r-   r  z4ConstantLikeVariable.call_method.<locals>.<listcomp>  s$    :::Q))++:::r,   c                 >    i | ]\  }}||                                 S r+   r  r  s      r-   r   z4ConstantLikeVariable.call_method.<locals>.<dictcomp>  s*    LLLTQq!..00LLLr,   r  z(*z, **r  z() -> )r   r   r   _error_prefixrG   rM   r	   r`   ra   re   rw   reMatchConstantRegexMatchVariable)r8   rD   rT   rg   r9   cargsckwargsr  s           r-   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rD   r%   rT   c                    t          | j        |          }t          || j                  rt	          |          }t          || j                  rt          |          S t          |t                    r$t          || j	                  rt          |          S t          j                            |          rt          j                            |          S t          | |          S r=   )rG   rM   rw   np_floatingfloatnp_dtypeNumpyDTypeVariablerL   rK   
np_genericr  r	   r`   ra   re   rb   r  s       r-   rf   z ConstantLikeVariable.var_getattr  s    T**fd.// 	#6]]Ffdm,, 	.%f---fd## 	)
64?(K(K 	) (((%0088 	=-44V<<<tT***r,   r   )r(   r)   r*   r   ra  r  rX  rj  rY  rh  rZ  rl  ImportErrorrL   r5   rH   r   r   r   r   r   rf   r   r   s   @r-   rW  rW    sL       BB*M0	
 	
 	
 	
 	
 	
 	
 	
 	
 	
 	

  0 0 0d>2r224B//0       D ?#	D
 S/)*D 
D D D D.+5 +S +_ + + + + + + + +s   
 88rW  c                       e Zd ZdZdS )RegexPatternVariablez
re.PatternNr(   r)   r*   ra  r+   r,   r-   ro  ro    s         MMMr,   ro  c                       e Zd ZdZdS )rd  zre.MatchNrp  r+   r,   r-   rd  rd    s        MMMr,   rd  c                   $     e Zd ZdZd fdZ xZS )TorchVersionVariableztorch.__version__r1   Nc                     |                     dt          j                   |d         t          j        u sJ  t                      j        di | d S )NrM   r+   )
setdefaultrs   __version__r4   r5   r   s     r-   r5   zTorchVersionVariable.__init__  sW    '5#4555g%"33333""6"""""r,   r   )r(   r)   r*   ra  r5   r   r   s   @r-   rs  rs    sB        'M# # # # # # # # # #r,   rs  c                       e Zd ZdZdS )NumpyTypeInfoVariableznp.iinfo/np.finfoNrp  r+   r,   r-   rx  rx    s        'MMMr,   rx  c                       e Zd ZdZd ZdS )rk  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).
        )rM   rL   r(   r  s    r-   r  zNumpyDTypeVariable.as_proxy  s     z''r,   N)r(   r)   r*   ra  r  r+   r,   r-   rk  rk    s(        #M( ( ( ( (r,   rk  c                   ,     e Zd ZdZd fdZd	dZ xZS )
RandomClassVariablezrandom.Randomr1   Nc                 :     t                      j        di | d S r3   r   r   s     r-   r5   zRandomClassVariable.__init__!  r   r,   rD   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   )seedrx   )rQ   r   r	   r`   re   RandomVariabler   r   )r8   rD   rg   r9   r  s        r-   ry   z!RandomClassVariable.call_function$  s    t99q==89999 	97888:=d))q..y)00666dSTg4y~7R7R7T7TUUUUr,   r   r   )r(   r)   r*   r   r5   ry   r   r   s   @r-   r|  r|    s_        # # # # # #V V V V V V V Vr,   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ee         deeef         def fdZ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 overriden.
    Assumes that random objects behave the same given a set seed or state.
    random>   r  randintuniform	randrangeNrandr  r1   c                 Z    t                      j        di | |]|                     |          sJ t          j                    | _        | j                            |                                           d S ||                                nd }t          j        |          | _        d S r3   )r4   r5   is_supported_random_objr  RandomsetstategetstaterH   )r8   r  r  r9   r:   s       r-   r5   zRandomVariable.__init__A  s     	""6"""//55555 -//DKK  11111040@4**,,,dD ---DKKKr,   c                     t           j        S r=   )r  r  r  s    r-   rI   zRandomVariable.python_typeP  s
    }r,   c                     | j         S r=   )r  r  s    r-   rH   z!RandomVariable.as_python_constantS  s
    {r,   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  r~   T)rL   r  r  r5  r6  r  _supported_fn_namesr   rG   r   	isbuiltinrw  )r   rT   meths      r-   r  z&RandomVariable.is_supported_random_objV  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tr,   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 r=   )rL   intr  s     r-   r  z-RandomVariable.check_state.<locals>.<genexpr>n  s,      44a477c>444444r,   r   )rL   r   r  r4  ri  states    r-   check_statezRandomVariable.check_statei  s    E{{e####E!H~~$$$$E!H~~&&&&445844444444Qx4a>>U#:#:#:#:#:#:r,   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 r+   r@  r  s     r-   r  z-RandomVariable.wrap_state.<locals>.<listcomp>x  s)    LLLaY/66q99LLLr,   r   r   )r  r  r	   r  r`   re   r  s    r-   
wrap_statezRandomVariable.wrap_stateq  s    ""5)))&*11%(;;'LL58LLL  *11%(;;
 
 	
r,   c                 b    |                                  }t                              |           |S r=   )rH   r  r  )r  	state_objs     r-   unwrap_statezRandomVariable.unwrap_state~  s-    ,,..	""9---r,   rg   r9   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 r+   r  r  s     r-   r  z.RandomVariable.call_method.<locals>.<listcomp>  $    777Q!&&((777r,   c                 >    i | ]\  }}||                                 S r+   r  r*  s      r-   r   z.RandomVariable.call_method.<locals>.<dictcomp>  s*    PPPXS#3..00PPPr,   r  r  r   c                      t          j                    }|                                t          |          | i |S r=   )r  r  r  rG   )rg   r9   rrT   r  s      r-   call_random_methz4RandomVariable.call_method.<locals>.call_random_meth  s?    MOO

5!!!'wq$''8888r,   c                 6    g | ]}|                                 S r+   r  r  s     r-   r  z.RandomVariable.call_method.<locals>.<listcomp>  r  r,   c                 >    i | ]\  }}||                                 S r+   r  r  s      r-   r   z.RandomVariable.call_method.<locals>.<dictcomp>  s*    HHHA1a**,,HHHr,   )r{   rv   mutationr  r  r   r	   r`   re   r  r  r  r  r  rG   r"   r4   r   )r8   rD   rT   rg   r9   r  r  r:   s     `   @r-   r   zRandomVariable.call_method  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:::r,   c                 t                        fd                               dd                                                                d            |                     | j                                                                                 dd                                            d S )Nc                                                                 t                                         d          g          S )Nr  )rB   r  r  r  r  s   r-   r@   z,RandomVariable.reconstruct.<locals>.<lambda>  s>    G))55f==,,X66  r,   r   Fr  r   T)rA   ry   dup_topr  r  r  r  pop_topr   s    `r-   rC   zRandomVariable.reconstruct  s       	
 	
 	
 	a''' 	*%%% 4 4 6 677888a&&&r,   r  )r(   r)   r*   r   r   r   r  r   r  r  r5   rI   rH   r}   r  r  r  r  r   r   r   r   rC   r   r   s   @r-   r  r  -  s         			'N
   )-*.. .v}%. '.
 
. . . . . .       \$ ; ; \; 

 

 \

   \
%; ?#	%;
 S/)*%; 
%; %; %; %; %; %;N      r,   r  )kr   r~  r   r   r5  r  rb  r*  r   r  r   r   r   r   torch._Crs   torch._numpyr   r   torch.utils._pytreer  _pytreerN  ru  r   r	   bytecode_transformationr
   r   create_parameter_opr   excr   guardsr   r   mutation_guardr   rJ   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   user_definedr"   r#   r$   torch._dynamo.symbolic_convertr%   r'   r/   r   r   r   r   r   r   r   r   r   r   r  r?  rB  	dataclassr{  r^  r  rr   rb   r  r  r  r  	lru_cacher  r  r#  r   r.  rB  rS  rW  ro  rd  rs  rx  rk  finfoiinforX  r  r|  r  r+   r,   r-   <module>r     so	                     				 



  6 6 6 6 6 6 6 6 6 6 6 6        $ $ $ $ $ $ $ $ $                 N N N N N N N N F F F F F F       0 0 0 0 0 0 0 0 5 5 5 5 5 5                           " ! ! ! ! !            Y X X X X X X X X X  EDDDDDD	 	 	 	 	 	 	 	C C C C CO C C CD5 5 5 5 5 5 5 5    o       o   :7 :7 :7 :7 :7 :7 :7 :7zF F F F Fo F F FF F F F F_ F F F# # # # #o # # #
# # # # # # # #
]> ]> ]> ]> ]> ]> ]> ]>@< < < < < < < <*A
 A
 A
 A
 A
O A
 A
 A
H% % %l= l= l= l= l= l= l= l=^ M M M M M M M Mn- n- n- n- n-&? n- n- n-b&H &H &H &H &H6 &H &H &HR( ( ( ( (_ ( ( (f; f; f; f; f;o f; f; f;R# # # # #O # # #6       ,(< (< (< (< (<? (< (< (<V    _   , Q    j" j" j" j" j"O j" j" j"\
? 
? 
? 
? 
?? 
? 
? 
?- - - - -o - - -.M .M .M .M .M? .M .M .Mb4 4 4 4 4 4 4 4nC C C C CO C C C*7+ 7+ 7+ 7+ 7+? 7+ 7+ 7+t! ! ! ! !/ ! ! !    !5   # # # # #/ # # #( ( ( ( (0 ( ( (	( 	( 	( 	( 	(- 	( 	( 	( I$I$I! V V V V V/ V V VN N N N N_ N N N N Nr,   