
    !&hr                        d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
mZmZ ddlZddlmZ ddlmc mZ ddlmZmZ ddlmZmZ ddlmZ ddlmZm Z  dd	l!m"Z"m#Z# dd
l$m%Z% ddl&m'Z'm(Z(m)Z)m*Z* ddlm+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 ddl4m5Z5 ddl6m7Z7 ddl8m9Z9m:Z: ddl;m<Z<m=Z=m>Z> erddl?m@Z@  G d d      ZA G d de5      ZB G d de5      ZC G d de5      ZD G d deD      ZE G d de5      ZF G d d e5      ZG G d! d"e5      ZHd# ZI G d$ d%e5      ZJej                   G d& d'             ZL G d( d)e>      ZM G d* d+e>      ZN G d, d-e5      ZO G d. d/e5      ZP G d0 d1e5      ZQ G d2 d3e5      ZR G d4 d5e5      ZS G d6 d7e5      ZT ej                  d8      d9        ZV ej                  d8      d:        ZW G d; d<e5      ZX G d= d>e5      ZY G d? d@e5      ZZ G dA dBe5      Z[ G dC dDe5      Z\ G dE dFe5      Z] G dG dHe5      Z^ G dI dJe^      Z_ G dK dLe^      Z` G dM dNe^      Za G dO dPe^      Zb G dQ dRe^      Zcej                  ebej                  ebej                  eciZg G dS dTe5      Zh G dU dVe5      Zi G dW dXe5      Zjy)Ya  
This module contains miscellaneous variable tracker implementations for various Python types
and features used in Dynamo's symbolic execution. These classes help track and propagate
information about different kinds of variables during graph capture.

Key classes include:
- SuperVariable: Handles super() calls and method resolution
- ExceptionVariable: Tracks exception objects
- RandomVariable: Manages random number generators
- GetAttrVariable: Tracks attribute access
- MethodWrapperVariable: Handles method wrappers
- PythonModuleVariable: Tracks Python modules
- NumpyVariable: Handles numpy functions and types
- StringFormatVariable: Manages string formatting
- DebuggingVariable: Handles print and logging
    N)OptionalTYPE_CHECKING   )config	variables)create_call_functioncreate_instruction)$do_not_convert_to_tracable_parameter)raise_observed_exceptionunimplemented)GuardBuilderinstall_guard)unpatched_nn_module_init)
AttrSourceGetItemSource
TypeSourceWeakRefCallSource)	check_unspec_or_constant_argscmp_name_to_op_mappingidentityis_tensor_base_attr_getteristypelist_methodsproxy_args_kwargsset_example_valuetuple_methods   )VariableTracker)ConstantVariable)NestedUserFunctionVariableUserFunctionVariable)call_random_fnis_standard_setattrUserDefinedObjectVariable)InstructionTranslatorc                       e Zd Zy)NO_SUCH_SUBOBJN)__name__
__module____qualname__     r/var/www/pru.catia.catastroantioquia-mas.com/valormas/lib/python3.12/site-packages/torch/_dynamo/variables/misc.pyr'   r'   ?   s    r,   r'   c                   |     e Zd Zh ej                  Zdd fdZ fdZd fdZdddeddfd	Z		 	 	 	 	 	 dd
Z
 xZS )SuperVariablereturnc                 @    t        |   di | || _        || _        y Nr+   )super__init__typevarobjvar)selfr5   r6   kwargs	__class__s       r-   r4   zSuperVariable.__init__H   s%    "6" 
 r,   c                     j                  fd        | j                         | j                  . | j                         j                  t	        dd             y j                  t	        dd             y )Nc                  B     t        j                  t                    S N)r   BuiltinVariabler3   )r9   codegens   r-   <lambda>z+SuperVariable.reconstruct.<locals>.<lambda>U   s    gi.G.G.N&O r,   r   Fr   )add_push_nullr5   r6   extend_outputr   )r7   r>   r9   s    `r-   reconstructzSuperVariable.reconstructT   s`    OP;;"DKK !!"6q%"@A!!"6q%"@Ar,   txr%   c           	         | j                   sJ d       | j                  j                         }| j                   j                         }| j                   j                  rt        | j                   j                        nd }t        |t              r,| j                   j                  }| j                   j                  }d }|j                  }	 |j                  |      dz   }t        |t        |            D ]X  }	||	   j                   j#                  |t$              x}
s)|
t$        us2|r t'        t)        t'        |d      |	      |      }|
|fc S  t+        d       y # t        $ r t        t        ||      |      d fcY S w xY w)Nz1-arg super not implementedr   __mro__zUnable to resolve super getattr)r6   r5   as_python_constantpython_typesourcer   
issubclasstypevaluerE   index
ValueErrorgetattrr3   rangelen__dict__getr'   r   r   r   )r7   rC   namesearch_typetype_to_usetype_to_use_sourcerH   
search_mrostart_indexrL   resolved_getattrr9   s              r-   _resolved_getattr_and_sourcez*SuperVariable._resolved_getattr_and_source]   sk   {{999{ll557 kk--/.2kk.@.@Jt{{))*d 	 k4(++++K!%!3!3 ((
	H$**;7!;K ;J8 	4E#-e#4#=#=#A#A$#WWW#>9)!+) *+=y I5 !	" ,V33	4 	78+  	H 5k:DA4GG	Hs   E !E?>E?rS   r   c                    | j                  | |      \  }}t        j                  j                  |      st	        | |      S |r(t        |j                  t        j                               t        j                  j                  ||      S )NrH   )
rZ   r   r   
is_literalGetAttrVariabler   
make_guardr   CONSTANT_MATCHcreate)r7   rC   rS   rK   rH   s        r-   var_getattrzSuperVariable.var_getattr   ss     99$Ev))44U;"4..&++L,G,GHI))00v0FFr,   c                    | j                  | |      \  }}|t        j                  u rt        t              S |t
        j                  j                  j                  u r| j                  }ddl	m
} t        |t        j                        rht        |j                  |      rR|sP|sNt               5  t        j                   t"        |      j%                  || j                  g|z   |      cd d d        S t'        d       nn| j                  j(                  rt+        |d      r|j,                  dk(  rt        j.                  j1                  |      rt|j2                  }	t+        |	d      r%|	j4                  dk(  rt        j6                  |	      }
n#|j8                  }t        j.                  |	|      }
|
j;                  |d||      S t        |t<              rVt        |j>                  t@        jB                        r2t        j                   |j>                  |      j%                  |||      S t        |tD              rat        |j>                  t@        jB                        r=t        jF                  |j>                  | j                  |      j%                  |||      S t        |t@        jB                        r6t        j                   ||      j%                  || j                  g|z   |      S t        |t@        jH                        r=t        jF                  |j>                  | j                  |      j%                  |||      S tK        |      r:t        | j                  t              r  | j                  jL                  |g|i |S |t        jN                  u r|d	   }	 |jQ                         }|jT                  j                  jW                  | j                        st'        d| j                   d| d       |jT                  j                  jY                  | j                  |t        jZ                                t        j\                  d       S t        | j                  t        j^                        r@|| j                  j`                  v r(| j                  jb                  j;                  ||||      S t        | j                  t        jd                        r0|tf        v r(| j                  jh                  j;                  ||||      S t        | j                  t        jj                        r0|tl        v r(| j                  jn                  j;                  ||||      S |t        jp                  u r|d	   jr                  }|jT                  j                  ju                  | j                  |      r^|jT                  j                  jw                  | j                  |d      }t        |t        jZ                        rty        tz        |       |S 	 | j                  jr                  jq                  |      }| j(                  xr t}        | j(                  |      }t        j                  ||      S t'        d|        y # 1 sw Y   xY w# tR        $ r t'        d
|        Y w xY w# tz        $ r ty        tz        |       Y w xY w)Nr   )AttributeMutationNewr\   zsuper() nn.Module.__init__r(   __new__r)   builtinsr   znon-const delattr attr: zdelattr(, z, ...)T)
deleted_okznon-function or method super: )ArZ   objectr4   LambdaVariabler   torchnnModuler6   side_effectsrd   
isinstancer   r$   mutation_typer
   r!   r   call_functionr   rH   hasattrr(   UserDefinedClassVariableis_supported_new_method__self__r)   r=   membercall_methodstaticmethod__func__typesFunctionTypeclassmethodUserMethodVariable
MethodTyper#   method_setattr_standard__delattr__rF   NotImplementedErroroutputis_attribute_mutation
store_attrDeletedVariabler   UserDefinedDictVariable_dict_methods_dict_vtUserDefinedTupleVariabler   	_tuple_vtUserDefinedListVariabler   _list_vt__getattribute__rK   has_pending_mutation_of_attr	load_attrr   AttributeErrorr   r   build)r7   rC   rS   argsr8   inner_fnrH   r6   rd   user_clsuser_cls_vtuser_cls_sourceattr	attr_nameresult
attr_values                   r-   rw   zSuperVariable.call_method   st     <<T4H&v&!(++111[[F; 69#F#FGv335IJ9; F$990#mB(<fEF F
 :;KK*-!!Y.22JJ8T((Hx.83F3F*3T'77A"(--'@@_ **2y$GG,/Ju115
 11!!&mBf-. +.:u114
 //!!4;;vmBf-. %"4"4511mB 4f=> %"2"23//!!4;;vmBf-. !*zKK20
 74;;66rKDKFKK+++7DA..0 99))??LRvVDEII""--T9#<#<#> --d33t{{I$E$EFDKK555;;''33BdFKKt{{I$F$FGM);;((44RtVLLt{{I$E$EFL(;;''33BdFKK000 QIyy%%BBY //99KKt :  fi&?&?@,^R@=![[..??	J
 [[GZY%GF"((Z@@6xjABF Fb ' A 8?@AP " =(<=s0   -:Y;Z %Z% ;ZZ"!Z"%[ [r<   r0   NrC   r%   r   list[VariableTracker]r8   dict[str, VariableTracker]r0   r   )r(   r)   r*   r   _nonvar_fieldsr4   rB   rZ   strrb   rw   __classcell__r9   s   @r-   r/   r/   C   st    		'	'N
B-9^G5 GS GEV G rC &	rC
 -rC 
rCr,   r/   c                   f     e Zd Zd fdZddZd Zd Zdddedefd	Z fd
Z	 fdZ
d ZeZ xZS )ExceptionVariablec                     t        |   di | || _        || _        t	        d       | _        t	        d       | _        t	        d      | _        t	        d       | _        y )NFr+   )	r3   r4   exc_typer   r   __context__	__cause____suppress_context____traceback__)r7   r   r   r8   r9   s       r-   r4   zExceptionVariable.__init__  sZ    "6" 	 ,D1 *$/$4U$;! .d3r,   c                     || _         y r<   )r   )r7   contexts     r-   set_contextzExceptionVariable.set_context$  s
    "r,   c                      j                   fd       j                   j                         j                  t	         j                        d       dt
        dd f fd} |d        |d        |d       y )	Nc                  P     j                  dj                  j                        S )Nrf   )load_import_fromr   r(   r>   r7   s   r-   r?   z/ExceptionVariable.reconstruct.<locals>.<lambda>)  s    G,,Z9O9OP r,   FrS   r0   c                     t        |       }t        |t              r|j                  dv sJ |       y j	                           |       j                  j                  d             j                  |        y )N)TFNr   )rN   r   r   rK   dup_toprA   rot_nr   )rS   r   r>   r7   s     r-   codegen_attrz3ExceptionVariable.reconstruct.<locals>.codegen_attr.  sh    4&Dd,-zz%88>$>8!%%gmmA&67""4(r,   r   r   r   )r@   foreachr   rq   rP   r   )r7   r>   r   s   `` r-   rB   zExceptionVariable.reconstruct'  sl    P	
 			"c$))ne4	)s 	)t 	) 	]#[!+,r,   c                     | j                   S r<   )r   r7   s    r-   rG   zExceptionVariable.python_type<  s    }}r,   rC   r%   name_varvalc                    fd}|j                         }|dk(  r| j                  |       n|dk(  rt        |t              r|j                  Ht        |t
        j                  t
        j                  t
        j                  t
        j                  f      r"|| _
        t        j                  d      | _        n |d       n|dk(  r/t        |t              r|j                  dv r|| _        nW |d       nN|dk(  r7t        |t              r|j                  || _        n%t        d	| d
| d       nt        d	| d
| d       t        j                  d       S )Nc                 >    t        t        t        |       g       y )N)r   )r   	TypeErrorr   )msgrC   s    r-   raise_errorz3ExceptionVariable.call_setattr.<locals>.raise_errorE  s    $Y:J3:O9PQr,   r   r   Tz9exception cause must be None or derive from BaseExceptionr   )TFr   zsetattr(ExceptionVariable, rg   ))rF   r   ro   r   rK   r   r=   r   !UserDefinedExceptionClassVariable"UserDefinedExceptionObjectVariabler   r   r   r   )r7   rC   r   r   r   rS   s    `    r-   call_setattrzExceptionVariable.call_setattr?  s9   	R **,= S![ 3 01cii6GJ--//??@@	M "%,5,F,Ft,L)WX++#/0SYY-5O,/)WX_$#/0SYY5F%(" ;H:RuANO7zC5JK))$//r,   c                     |dk(  r | j                   |g| S |dk(  r"|\  }| j                  |t        d      |       | S t        |   ||||      S )N__setattr__with_tracebackr   )r   r   r3   rw   )r7   rC   rS   r   r8   tbr9   s         r-   rw   zExceptionVariable.call_methodg  sf    = $4$$R/$//%%DRb"2?"CRHK7&r4v>>r,   c                    |dk(  r| j                   S |dk(  r| j                  S |dk(  r| j                  S |dk(  rt        j                  d       S |dk(  r+t        j
                  | j                  | j                        S t        | %  ||      S )Nr   r   r   r   r   r\   )
r   r   r   r   r   ListVariabler   rH   r3   rb   )r7   rC   rS   r9   s      r-   rb   zExceptionVariable.var_getattrq  s    = ###[ >>!++,,,_$--d33V^))$))DKKHHw"2t,,r,   c                 N    | j                   j                   d| j                   dS )N(r   )r9   r(   r   r   s    r-   __str__zExceptionVariable.__str__~  s$    ..))*!DMM?!<<r,   r   )r   r   )r(   r)   r*   r4   r   rB   rG   r   r   rw   rb   r   __repr__r   r   s   @r-   r   r     sO    4"#-*&0#&0 "&0 	&0P?-= Hr,   r   c                       e Zd ZdZy)UnknownVariablez
    It could be anything!
    Nr(   r)   r*   __doc__r+   r,   r-   r   r         r,   r   c                       e Zd ZdZy)DelayGraphBreakVariablez^
    Used to insert a dummy variable in the stack to do the graph break at CALL_FUNCTION.
    Nr   r+   r,   r-   r   r     r   r,   r   c                   B    e Zd ZdZd ZdddeddfdZ	 	 	 	 	 	 	 	 dd	Zy
)ComptimeVariableza
    This variable is special, it lets you execute arbitrary code at
    Dynamo compile time
    c                     t        d      )Nzcomptime is special form)r   r7   r>   s     r-   rB   zComptimeVariable.reconstruct  s    !"<==r,   rC   r%   rS   r0   r   c                 j    ddl m } ddlm}  |t        ||      t	        | j
                  |            S )Nr   )comptimer   )r!   r\   )r   	functionsr!   rN   r   rH   )r7   rC   rS   r   r!   s        r-   rb   zComptimeVariable.var_getattr  s.    ' 	4#Hd#Jt{{D,I
 	
r,   c                 p   ddl m} |rJ t        |      dk  sJ |d   }t        |t              r |j                          ||             nt        |t              r|j                         }|j                  rJ d|j                          t        j                  ||j                  |j                  j                         |j                  rt!        |j                  j"                        nd d      } | ||             nt%        dt'        |             t(        j*                  j-                  d       S )Nr   )ComptimeContextr   zOcomptime function must not have free variables, but these variables were free: r+   z"unsupported argument to comptime: )r   r   rP   ro   r!   get_functionr    get_codeclosureco_freevarsrz   r{   	f_globalsfn_namerF   defaultstupleitemsRuntimeErrorrJ   r   r   ra   )r7   rC   r   r8   r   fncodefuncs           r-   rq   zComptimeVariable.call_function  s    	/ z4yA~~!Wb./BOOob1267;;=Dzz 2262B2B1CE> %%

--/,.KKbkk''(T D $%!CDH:NOO))0066r,   NrC   r%   r   r   r8   r   r0   r   )r(   r)   r*   r   rB   r   rb   rq   r+   r,   r-   r   r     sS    
>
5 
S 
EV 
'7#'7 &'7 -	'7
 
'7r,   r   c                   X     e Zd ZU ee   ed<   dZee   ed<   	 ddee   ddf fdZ xZ	S )CellVariablepre_existing_contentsN
local_namer0   c                 2    t        |   di | || _        y r2   )r3   r4   r   )r7   r   r8   r9   s      r-   r4   zCellVariable.__init__  s     	"6"%:"r,   r<   )
r(   r)   r*   r   r   __annotations__r   r   r4   r   r   s   @r-   r   r     sF     $O44 !%J$ BF;%-o%>;	; ;r,   r   c                         e Zd Zd fdZ xZS )NewGlobalVariablec                 $    t        |   di | y r2   r3   r4   r7   r8   r9   s     r-   r4   zNewGlobalVariable.__init__      "6"r,   r   )r(   r)   r*   r4   r   r   s   @r-   r   r     s    # #r,   r   c                 (      fd}t         |_        |S )Nc                  (     j                   | i |S r<   )apply)r   r8   fn_clss     r-   trampoline_autograd_applyzDproduce_trampoline_autograd_apply.<locals>.trampoline_autograd_apply  s    v||T,V,,r,   )!produce_trampoline_autograd_apply_origin)r   r   s   ` r-   r   r     s    - )J%$$r,   c                   j     e Zd ZdZdhej
                  Zd fdZd	dZd	dZd	dZ		 	 	 	 d
dZ
 xZS )AutogradFunctionVariablez-represents a torch.autograd.Function subclassr   c                 2    t        |   di | || _        y r2   )r3   r4   r   )r7   r   r8   r9   s      r-   r4   z!AutogradFunctionVariable.__init__  s    "6"r,   c           	         dfd}t        j                  |||f       rZt        j                         rEt        j
                  du rt        j                  d       ddlm	} ddl
m} | j                  j                  } || j                  j                        }|r1 || j                  j                  | j                  j                        }| j                  j                  }	|	t        j                   j"                  j                  urt%        d       | j                  j&                  }
|
t        j                   j"                  j&                  urt%        d       d	d
lm} | j,                  }|Ct/        j1                  | j                  j2                        | j                  j4                        } ||| j                  j6                  |t/        |d            j9                  ||      }| j,                  r~t/        | j,                  d      }t;        |j=                  t>        j@                               |r>t/        | j,                  d      }t;        |j=                  t>        j@                               |S | j,                  rt/        | j,                  d      }nd }| j                  j                  }tB        jE                  ||      }|g|}tG        |tH        jJ                        rftM        jN                  |      }tQ        |      d	z
  tQ        |jR                        k(  r|d	d  }tU        jV                  ||      j9                  ||      S tG        |tH        jX                        rPtU        jZ                  |j\                  tU        j^                  | j                        |      j9                  ||      S t%        d|        y )NFc                     t        | t        j                        r| j                  durdt        | t        j                        r| j                        rdy y y )NFT)ro   r   TensorVariablerequires_gradNNModuleVariableis_training)noder  rC   s    r-   visitz2AutogradFunctionVariable.call_apply.<locals>.visit  sS    $	 8 89%%U2$(M$	 : :;##B'$(M ( <r,   zNThe config.capture_autograd_function flag is deprecated, it's now always true.r   )#autograd_function_forward_rewritten)_is_setup_context_definedzNYI - User defind vjpzNYI - User defind jvpr   )AutogradFunctionApplyVariabler   )rv   r\   forwardsetup_contextz?non-function or method in subclass of torch.autograd.Function: )0r   r
  rk   is_grad_enabledr   capture_autograd_functionwarningswarn"torch._functorch.autograd_functionr  torch.autograd.functionr  r   r  r  vjpautogradFunctionr   jvphigher_order_opsr  rH   r   import_sourcer)   r(   backwardrq   r   r_   r   FUNCTION_MATCHAutogradFunctionContextVariablera   ro   rz   r{   inspect	signaturerP   _parametersr   r!   r~   r}   ry   rs   )r7   rC   r   r8   r
  r  r  
forward_fnis_setup_ctx_definedvjp_fnjvp_fnr  rH   r   fwd_srcsetup_ctx_srcr   ctxsigr  s    `                 @r-   
call_applyz#AutogradFunctionVariable.call_apply  s   	) 	edF^4U224//58d J,,J#<T[[=V=V#W # AKK'')B)B
 [[__FU^^4488856[[__FU^^4488856G[[F~#$$T[[%;%;<dkk>R>R 0$$!&9	
 mBf-  {{$T[[)<g001L1LMN'$.t{{O$LM!-":":<;V;V"WXJ;;Y7FF[[  -44RvF|d|b%,,-##B'C4y1}COO 44ABx11"VDRRD&  E,,-//224;;? mBf-	. QRTQUVr,   c                 ^   | j                   j                  }t        |d   j                        t        j
                  j                  j                  u sJ t        |t        j                        sJ t        | j                  d      }t        j                  ||      j                  |||      S )Nr   r  r\   )r   r  rJ   rK   rk   _dynamoexternal_utilsFakeBackwardCFunctionro   rz   r{   r   rH   r   r!   rq   )r7   rC   r   r8   r   	fn_sources         r-   call_backwardz&AutogradFunctionVariable.call_backward[  s    [[!!DGMM"emm&B&B&X&XXXX"e00111t{{J7	--bCQQf
 	
r,   c                 ,    t        | j                        S r<   )r  r   r7   rC   r   r8   s       r-   rq   z&AutogradFunctionVariable.call_functione  s    '44r,   c           
         ddl m} ddlm} |dk(  rj || j                        rEt        | j                        } || |j                  j                  d|gt        ||             S | j                  |||      S |dk(  r| j                  |||      S dd	lm } | j                  t        | j                  |      nd }		 t        j                  | j                  |      }
t#        |
t$              rx|
j'                  | j                        }|	3|j)                  |      j+                  ||	
      j-                  |||      S  |j)                  |      |      j-                  |||      S t#        |
t.              r3t1        j2                  |
j4                  | |	
      j-                  |||      S t7        d|        y # t         $ r d }
Y w xY w)Nr   )is_callable_allowedr   )wrap_fx_proxyr   rq   )rC   proxyr  )trace_rulesr\   zUnsupported method: )r7  r4  builderr5  r   r   r   create_proxyr   r*  r0   rH   r   r  getattr_staticr   ro   rx   __get__lookupcreate_with_sourcerq   r|   r   r}   ry   r   )r7   rC   rS   r   r8   r4  r5  r   r7  rH   objr   s               r-   rw   z$AutogradFunctionVariable.call_methodh  s    	6*7?"4;;/,MKK-) %0"))00'1 +48  r488Z%%b$77&6:kk6MZT2SWF,,T[[$? #|,{{4;;/%#**40++D+@&r48 4;--d3D9GGD&  C- 33LL$v-D&12  4TF;<) " s   ? F9 9GGr   r   )r   r   r8   r   )r(   r)   r*   r   r   r   r4   r*  r0  rq   rw   r   r   s   @r-   r  r    sO    7 			'	'N
_B
56= &	6=
 -6=r,   r  c                   D    e Zd ZU  ej                  e      Zee   ed<   y)SavedTensorBox)default_factorytensorsN)	r(   r)   r*   dataclassesfieldlistrC  r   r   r+   r,   r-   rA  rA    s    %6[%6%6t%LGT/"Lr,   rA  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
    r6  	inferencesaved_tensorsc                 p    t        	|   d||d| || _        || _        || _        || _        || _        y N)rK   
value_typer+   )r3   r4   rH  r6  rI  needs_input_gradnon_differentiable)
r7   rK   rL  rH  r6  rI  rM  rN  r8   r9   s
            r-   r4   z(AutogradFunctionContextVariable.__init__  sB     	FuFvF"
* 0"4r,   c                    d }|r|st        d |D              }| j                  j                  dt        j                  j
                  j                  di       }| j                  j                  j                  d t        j                  j
                  j                  t        j                  t        d|t               |      i       }t        |j                  |j                         |S )Nc              3   l   K   | ],  }t        |t        j                        xr |j                   . y wr<   )ro   r   r  r  .0xs     r-   	<genexpr>z9AutogradFunctionContextVariable.create.<locals>.<genexpr>  s1      % 1i667KAOOK%s   24rq   r+   T)rH  r6  rI  rM  )r   r   r9  rk   r  functionFunctionCtxrn   track_object_new	functoolspartialr  rA  r   r	  rK   )rC   r   r8   rM  r6  outs         r-   ra   z&AutogradFunctionContextVariable.create  s    $ %%   		&&U^^44@@"b
 ii$$55NN##///,.!1 
 	%**cii0
r,   c                 H    | j                   t        d       | j                   S )Nzproxy not set)r6  r   r   s    r-   as_proxyz(AutogradFunctionContextVariable.as_proxy  s    ::/*zzr,   c                    |dk(  rt         |   ||||      S |dk(  rCt        |      dk(  sJ t        |i       d   | _        t
        j                  j                  d       S |dk7  rt        d|        | j                  t        d       | j                  s6| j                  r|rJ |j                  j                  j                  | |       t        | j                  j                        dkD  rg | j                  _        |D ]'  }| j                  j                  j!                  |       ) t
        j                  j                  d       S )Nr   mark_non_differentiabler   save_for_backwardz"autograd.Function context method: zCsave_for_backward only supported on a newly constructed FunctionCtx)r3   rw   rP   r   rN  r   r   ra   r   rI  rH  rH   r   rn   track_save_for_backwardrC  append)r7   rC   rS   r   r8   argr9   s         r-   rw   z+AutogradFunctionContextVariable.call_method  s4    = 7&r4v>>..v;!###&7b&A!&DD#--44T::&&>tfEF%U ~~;;v--II""::4F t!!))*Q.)+D& 	3C&&--c2	3))0066r,   c                     dv rt         fd      S dk(  r> j                  2t        j                  t	         j                  j
                              S dk(  r j                  )t        j                  j                   j                        S  j                  rAt         j                  d      }t        j                   j                  j                  |      S t         =        S )N)r_  r^  c                  ,    j                  | |      S r<   )rw   )r   r8   rS   r7   rC   s     r-   r?   z=AutogradFunctionContextVariable.var_getattr.<locals>.<lambda>  s    (8(8T4(P r,   rI  rM  )rj   rI  r   TupleVariablerF  rC  rM  r   ra   rH   r   r   r   rK   r3   rb   r7   rC   rS   rH   r9   s   ``` r-   rb   z+AutogradFunctionContextVariable.var_getattr  s    CC!P  ?"t'9'9'E**40B0B0J0J+KLL%%$$0 11889N9NOO{{#DKK1CD&,,R1L1LfUUw"2t,,r,   )NFNNNNr   NNr   r   )r(   r)   r*   r   r$   r   r4   rx   ra   r\  rw   rb   r   r   s   @r-   r  r    s    
 	 
#	1	1	N 5 
5$  4
7 &	7
 -7 
7@- -r,   r  c                   >     e Zd ZdZ	 d	 d fdZ	 	 	 	 	 	 ddZ xZS )AutogradEngineVariablez;
    Represents a torch._C._ImperativeEngine instance.
    c                 *    t        |   d||d| y rK  r   )r7   rK   rL  r8   r9   s       r-   r4   zAutogradEngineVariable.__init__  s     	FuFvFr,   c                    |dk(  rt         j                  j                  j                  r|j                  sJ d       t        j                  t         j                  j                  j                  j                  | j                        j                  ||j                  j                  j                         g||      S t        d       y t        d|        y )Nqueue_callbackzXqueue_callback() is only supported when Compiled Autograd is enabled with fullgraph=Truer\   z#torch._C._ImperativeEngine method: )rk   r,  compiled_autogradin_compiled_autograd_region	one_graphr   r!   r-  FakeCompiledAutogradEnginerl  rH   rq   r   rn   get_ca_final_callbacks_varr   r7   rC   rS   r   r8   s        r-   rw   z"AutogradEngineVariable.call_method"  s     ##}}..JJ|| n| !55MM00KKZZ;;  -YY++FFHP4P n ?vFGr,   r<   r   r   r(   r)   r*   r   r4   rw   r   r   s   @r-   ri  ri    sE     G
 
GH &	H
 -H 
Hr,   ri  c                   8     e Zd Zd fdZ	 	 	 	 	 	 	 	 ddZ xZS )rj   c                 2    t        |   di | || _        y r2   )r3   r4   r   )r7   r   r8   r9   s      r-   r4   zLambdaVariable.__init__?  s    "6"r,   c                 &     | j                   |i |S r<   )r   r2  s       r-   rq   zLambdaVariable.call_functionC  s     tww'''r,   r   r   )r(   r)   r*   r4   rq   r   r   s   @r-   rj   rj   >  s3    (#( &( -	(
 
(r,   rj   c                        e Zd Zddhej                  Zdd fdZ fdZdefdZe	de
j                  j                  fd       Zd	 Zd
 ZddZd Z	 	 	 	 	 	 	 	 ddZdee   deeef   def fdZ xZS )r^   rS   py_typer0   c                     t        |   di | t        |t              sJ t        |t              sJ || _        || _        || _        y r2   )r3   r4   ro   r   r   r?  rS   rx  )r7   r?  rS   rx  r8   r9   s        r-   r4   zGetAttrVariable.__init__S  sH    "6"#///$$$$	r,   c                 P    | j                   | j                   S t        | 	         S r<   )rx  r3   rG   r7   r9   s    r-   rG   zGetAttrVariable.python_type[  s%    <<#<<7&((r,   c                 h    | j                   j                   d| j                   d| j                   dS Nr   rg   r   )r9   r(   r?  rS   r   s    r-   r   zGetAttrVariable.__repr__a  s.    ..))*!DHH:R		{!DDr,   
base_proxyc                     t        | |      S r<   )rN   )r~  r   s     r-   create_getattr_proxyz$GetAttrVariable.create_getattr_proxyd  s    z4((r,   c                 r    t         j                  | j                  j                         | j                        S r<   )r^   r  r?  r\  rS   r   s    r-   r\  zGetAttrVariable.as_proxyh  s&    33DHH4E4E4GSSr,   c                     | j                   j                         }	 t        || j                        S # t        $ r t        |  d      d w xY w)Nz is not a constant)r?  rF   rN   rS   r   r   )r7   constants     r-   rF   z"GetAttrVariable.as_python_constantk  sQ    88..0	M8TYY// 	M%.@&ABL	Ms	   2 Ac                    t        | j                  t        j                        st        |j
                  j                  | j                  j                        }| j                  |j                  vrt        t        j                  || j                        }||j                  vrt        t        j                  ||      S r<   )ro   r?  r   r  r   r   get_submodule
module_keyrS   rQ   r  r;  )r7   rC   rS   step1step2s        r-   const_getattrzGetAttrVariable.const_getattrr  s    $((I$>$>?%%		''(;(;<99ENN*%%&&udii8u~~%%%%%eT22r,   c                 |     || j                          |j                  |j                  | j                               y r<   )r?  rA   create_load_attrsrS   r   s     r-   rB   zGetAttrVariable.reconstruct}  s+    g77		BCr,   r   r8   c                 R    | j                   j                  || j                  ||      S r<   )r?  rw   rS   r2  s       r-   rq   zGetAttrVariable.call_function  s#     xx##B		4@@r,   c                    |dv r| j                   dk(  r|s|d   j                         rt        | j                  t        j
                  t        j                  t        j                  f      rq| j                  }|d   j                         }|j                  ||      r|j                  ||      S |dk(  rt        |      dk(  r|d   S t	        j                  d       S |dk(  r| j                   dk(  rt        |      dk(  r|d   j                         r|st        | j                  t        j
                  t        j                  t        j                  f      r[| j                  }|d   j                         }|j                  ||      rt	        j                  d      S t	        j                  d	      S |d
k(  r| j                   dk(  r|st        | j                  t        j
                        r#| j                  j                  ||d   |d         S t        | j                  t        j                        r| j                  j                  |       t        | A  ||||      S )N)__getitem__rR   rQ   r   rR   r   r   __contains__TF__setitem__)rS   is_python_constantro   r?  r   r$   r  rs   rF   has_key_in_generic_dictrb   rP   r   r   convert_to_unspecializedr3   rw   )r7   rC   rS   r   r8   r?  keyr9   s          r-   rw   zGetAttrVariable.call_method  s     **		Z'Q**,77..66 ((Cq',,.C**2s3r3// u}t9>7N$55d;; N"		Z'D	QQ**,77..66 ((Cq',,.C**2s3 11$77 11%88]"tyyJ'>v$((I$G$GHxx77DGT!WMM$((I$>$>?11"5w"2tT6::r,   r<   r   r   r   )r(   r)   r*   r   r   r4   rG   r   r   rx   rk   fxProxyr  r\  rF   r  rB   rq   rF  dictrw   r   r   s   @r-   r^   r^   L  s     
	'	'N)E# E ) ) )TM	3DA#A &A -	A
 
A@; ?#	@;
 S/)*@; 
@; @;r,   r^   c                   H     e Zd Zd fdZ	 	 	 	 	 	 	 	 d fdZd Zd Z xZS )MethodWrapperVariablec                 @    t        |   di | || _        i | _        y r2   )r3   r4   method_wrapper_builtin_fns)r7   r  r8   r9   s      r-   r4   zMethodWrapperVariable.__init__  s#    "6",r,   c                 :   t        | j                        rnt        |d   t        j                        rQt        |      dk(  rt        |      dk(  sJ |d   j                  || j                  j                  j                        S | j                  j                  }| j                  j                  }|dk(  rUt        |      j                  }|t        j                  u r.t        j                  t              j                  |||g||      S t        | =  |||       y )Nr   r   r4   )r   r  ro   r   r  rP   rb   ru   r(   rJ   r4   ri   r=   rw   r3   rq   )r7   rC   r   r8   self_objwrapper_namefn_objr9   s          r-   rq   z#MethodWrapperVariable.call_function  s     &d&9&9:zGY--@
 t9>c&kQ&6667&&r4+>+>+G+G+P+PQQ &&//**33 :%(^,,F( 008DDx&7$&7  	b$/r,   c                      yNTr+   r   s    r-   r  z(MethodWrapperVariable.is_python_constant      r,   c                     | j                   S r<   )r  r   s    r-   rF   z(MethodWrapperVariable.as_python_constant  s    """r,   r   r   )r(   r)   r*   r4   rq   r  rF   r   r   s   @r-   r  r    s=    
0#0 &0 -	0
 
0>#r,   r  c                   8     e Zd Zd fdZd fdZd Zd Z xZS )GetSetDescriptorVariablec                 2    t        |   di | || _        y r2   )r3   r4   desc)r7   r  r8   r9   s      r-   r4   z!GetSetDescriptorVariable.__init__  s    "6"	r,   c                     |dk(  rM| j                   rAt        | j                   d      }t        j                  || j                  j
                  |      S t        |   ||      S )Nr<  )rH   r   r   r   r  r<  r3   rb   rf  s       r-   rb   z$GetSetDescriptorVariable.var_getattr  sR    9Y7F"((TYY->->GG7&r400r,   c                      yr  r+   r   s    r-   r  z+GetSetDescriptorVariable.is_python_constant  r  r,   c                     | j                   S r<   )r  r   s    r-   rF   z+GetSetDescriptorVariable.as_python_constant  s    yyr,   r   r   )r(   r)   r*   r4   rb   r  rF   r   r   s   @r-   r  r    s    1r,   r  c                        e Zd Zddhej                  Zdej                  ddf fdZd Zd Z	de
fdZdd	Zdd
Z xZS )PythonModuleVariablerK   is_torchr0   Nc                     t        |   di | || _        | j                  t        u xs% | j                  j                  j                  d      | _        y )Nztorch.r+   )r3   r4   rK   rk   r(   
startswithr  r7   rK   r8   r9   s      r-   r4   zPythonModuleVariable.__init__  sD    "6"


e+Wtzz/B/B/M/Mh/Wr,   c                 "    t         j                  S r<   )rz   
ModuleTyper   s    r-   rG   z PythonModuleVariable.python_type  s    r,   c                     | j                   S r<   rK   r   s    r-   rF   z'PythonModuleVariable.as_python_constant      zzr,   c                 "    d| j                    dS )NzPythonModuleVariable(r   r  r   s    r-   r   zPythonModuleVariable.__repr__  s    &tzzl!44r,   c                 l    t        | j                  |      }t        j                  j	                  |      S r<   )rr   rK   r   r   ra   r7   rC   rS   r   s       r-   call_obj_hasattrz%PythonModuleVariable.call_obj_hasattr   s)    T*))0088r,   c                    |j                   j                  j                  | |      r&|j                   j                  j                  | |      S | j                  s|| j
                  j                  vrt        | j
                  |      }n| j
                  j                  |   }| j                  xr t        | j                  |      }t        j                  |||      S r<   )r   rn   r   r   r  rK   rQ   rN   rH   r   r   r   )r7   rC   rS   r   rH   s        r-   rb   z PythonModuleVariable.var_getattr$  s    99!!>>tTJ99))33D$??==D

(;(;; T2J,,T2J>DKK!>$$RV<<r,   r   )r(   r)   r*   r   r   rz   r  r4   rG   rF   r   r   r  rb   r   r   s   @r-   r  r    s\     
	'	'NXe.. XT X
 5# 59
=r,   r  c                   R     e Zd Zd	 fdZ	 	 	 	 	 	 d
dZdddefdZd ZddZ xZ	S )TypingVariablec                 2    t        |   di | || _        y r2   r3   r4   rK   r  s      r-   r4   zTypingVariable.__init__2      "6"
r,   c                     |dk(  r9t        |      dk(  r+| j                  |d   j                            }t        |      S t	        d       y )Nr  r   r   z+unsupported method call on typing variablel)rP   rK   rF   r  r   )r7   rC   rS   r   r8   
new_typings         r-   rw   zTypingVariable.call_method6  sE     = SY!^DG$>$>$@AJ!*--CDr,   rC   r%   rS   c                    ddl m}m} |t        v rt	        j
                  | |      S |j                  j                  j                  | |      r|j                  j                  | |      S t        | j                  |      }| j                  r%t        | j                  |      }  |||      |      S |j                  ||      S )Nr   )SourcelessBuilderVariableBuilder)r8  r  r  r   r   r^   r   rn   r   r   rN   rK   rH   r   ra   )r7   rC   rS   r  r  rK   attr_sources          r-   rb   zTypingVariable.var_getattrC  s    ?)),,T48899!!>>tTJ??,,T488

D);;$T[[$7K3?2{3E::$++B66r,   c                     | j                   S r<   r  r   s    r-   rF   z!TypingVariable.as_python_constantS  r  r,   c                 X    |j                  |j                  | j                               y r<   )append_outputcreate_load_constrK   r   s     r-   rB   zTypingVariable.reconstructV  s!    0 	g77

CDr,   r   r   )r>   ztorch._dynamo.codegen.PyCodegenr0   N)
r(   r)   r*   r4   rw   r   rb   rF   rB   r   r   s   @r-   r  r  1  sN    E &	E
 -E 
E75 7S 7 Er,   r  )maxsizec                      ddl m}  i }| j                         D ]H  \  }}|j                  j                         D ]&  \  }}t	        |      st        ||d      x}s"|||<   ( J |S )zd
    This generates a mapping from numpy modules to their torch._numpy
    modules equivalents.
    r   )NP_TO_TNP_MODULEN)utilsr  r   rQ   callablerN   )r  np_fn_to_tnp_fnnp_modtnp_modr   tnp_fnnp_fns          r-   get_np_to_tnp_mapr  q  sz     )O+113 4&//557 	4OGV $FGT::5:-3OE*	44 r,   c                  j    t               } | j                         D ci c]  \  }}||
 c}}S c c}}w )z
    This is just the reverse mapping of get_np_to_tnp_map() - mapping from
    torch._numpy modules to numpy equivalents.
    )r  r   )mkvs      r-   get_tnp_to_np_mapr    s.     	AWWY'TQAqD'''s   /c                        e Zd ZdZej
                  fZd	 fdZed        Z	ed        Z
	 	 	 	 	 	 	 	 d
dZ	 	 	 	 	 	 ddZd Z fdZ xZS )NumpyVariablezz
    Wrapper around `numpy.*`. Currently, is able to trace a small subset of numpy functions as well as numpy dtypes.
    c                 2    t        |   di | || _        y r2   r  r  s      r-   r4   zNumpyVariable.__init__  r  r,   c                     |j                   j                  d      }t        |      dk\  r
|d d ddgk(  sJ || j                  v S N.r   rk   _numpy)r)   splitrP   constant_fold_functionsclsr   mods      r-   can_constant_fold_throughz'NumpyVariable.can_constant_fold_through  sJ    mm!!#&3x1}RaWh,?!???S0000r,   c                     |j                   j                  d      }t        |      dk\  r
|d d ddgk(  sJ t        j	                  |d       S r  )r)   r  rP   np_constant_collections_maprR   r  s      r-    get_constant_collection_for_funcz.NumpyVariable.get_constant_collection_for_func  sL    mm!!#&3x1}RaWh,?!???*..r488r,   c                 
   t         j                  st        d| j                   d       ddlm} ddlm} t               j                  | j                        }|t        d| j                   d       | j                  |      x}	 e	  | | j                  |D cg c]  }|j                          c}i |j                         D 	
ci c]  \  }	}
|	|
j                          c}
}	      S |j                  dk(  rAt         j                   r1d|j"                   d}|dt         j                    z  }t        |       |j%                  |j                  ||      \  }}| j'                  |      rt)        ||      rt*        j,                  j/                   | j                         |D cg c]  }|j                          c}i |j                         D 	
ci c]  \  }	}
|	|
j                          c}
}	      S  |j0                  j2                  d ||      gt5        ||       }|j/                  ||      S c c}w c c}
}	w # t        $ r* t        | j                  j                   d	| d
|        Y y w xY wc c}w c c}
}	w )Nznumpy.z()r   )numpy_to_tensor_wrapperr   )NumpyNdarrayVariablezCan't find numpy function zM in torch._numpy.  Please file an issue to request support for this function.z with non-const args:  ztorch._numpy.randomz
delegate 'z' to NumPy itself via zconfg.use_numpy_random_stream=rq   )r   trace_numpyr   rK   r  r  tensorr  r  rR   r  rF   r   r   r(   r)   use_numpy_random_streamr*   
patch_argsr  r   r   r   ra   r   r9  r   )r7   rC   r   r8   r  r  r   collection_variable_typrS  r  r  r   r6  s                r-   rq   zNumpyVariable.call_function  sk    !!F4::,b1230 "&&tzz2<,TZZL 9N N (,'L'LT'RR#
.DJJ:>?Q!..0?AGPA1a2244P  #8822"4#4#4"55KL78V8V7WXXc"/::4==$PVWLD&--d3-dF; !1188-D++-:>?Q!..0?AGPA1a2244P  +BII**'- #40E
 (..r599I @P ' zz**++A$qQ* @Ps<   	I H92I H>#	I 'I:I?9I 0I76I7c                     t        d       y )Nnumpy)r   rr  s        r-   rw   zNumpyVariable.call_method  s     	gr,   c                     | j                   S r<   r  r   s    r-   rF   z NumpyVariable.as_python_constant  r  r,   c                     t         j                  r0t        | j                  t              r| j                  j
                  S t        |          S r<   )r   r  ro   rK   rJ   r(   r3   r\  r{  s    r-   r\  zNumpyVariable.as_proxy  s9    *TZZ"> ::&&&w!!r,   r   r   r   )r(   r)   r*   r   tnp
issubdtyper  r4   r|   r  r  rq   rw   rF   r\  r   r   s   @r-   r  r    s      #~~/ 1 1
 9 9
>:#>: &>: -	>:
 
>:@ &	
 - 
" "r,   r  c                   2     e Zd Zd fdZdefdZd Z xZS )NullVariabler0   c                 $    t        |   di | y r2   r   r   s     r-   r4   zNullVariable.__init__  r   r,   c                      y)Nr  r+   r   s    r-   r   zNullVariable.__repr__  s    r,   c                 t    t         j                  dk  rt        d       |j                  t	        d             y )N)      z0cannot reconstruct NullVariable in < Python 3.11	PUSH_NULL)sysversion_infor   r  r	   r   s     r-   rB   zNullVariable.reconstruct  s-    g%LM0=>r,   r   )r(   r)   r*   r4   r   r   rB   r   r   s   @r-   r  r    s    ## ?r,   r  c                       e Zd ZdZy)r   z"Marker used to implement delattr()Nr   r+   r,   r-   r   r     s    ,r,   r   c                   d     e Zd ZdZdhej
                  Zed        Zd fdZde	fdZ
d Z xZS )	StringFormatVariablez[
    Represents a call to str.format(), we delay calling format until after the graph.
    format_stringc                    t        d t        j                  ||j                               D              r{t        j
                  j                   |j                  |D cg c]  }|j                          c}i |j                         D ci c]  \  }}||j                          c}}      S  | |t        |      t        |            S c c}w c c}}w )Nc              3   <   K   | ]  }|j                           y wr<   )r  rQ  s     r-   rT  z.StringFormatVariable.create.<locals>.<genexpr>  s!      
   "
s   )all	itertoolschainvaluesr   r   ra   formatrF   r   rF  r  )r  r  sym_args
sym_kwargsr  r  s         r-   ra   zStringFormatVariable.create  s     
__Xz/@/@/BC
 
 --44$$$6>?a**,?=G=M=M=OPTQq!..00P  =$x.$z2BCC	 @Ps   CCr0   c                 r    t        |   di | t        |t              sJ || _        || _        || _        y r2   )r3   r4   ro   r   r  r  r  )r7   r  r  r  r8   r9   s        r-   r4   zStringFormatVariable.__init__$  s9    "6"----* $r,   c                     | j                   j                   d| j                  d| j                  d| j                  dS r}  )r9   r(   r  r  r  r   s    r-   r   zStringFormatVariable.__repr__+  sB    ..))*!D,>,>+ADMMCTTVW[WfWfViijkkr,   c                     j                   fdd        t        j                   j                                j                  j                         D ci c]%  \  }}t        j                  j                  |      |' }}} t        j                  |             j                  t        dd             y c c}}w )Nc                  z     j                   j                  j                         j                  d      g      S )Nr  )rA   r  r  create_load_attrr   s   r-   r?   z2StringFormatVariable.reconstruct.<locals>.<lambda>0  s9    G))--d.@.@A,,X6 r,   T)call_function_exCALL_FUNCTION_EXr   )rb  )r@   r   re  r  r  r   r   ra   ConstDictVariabler  r	   )r7   r>   r  r  r8   s   ``   r-   rB   z StringFormatVariable.reconstruct.  s     " 	 	
 		''67@D@U@U@W
8<1I&&--a0!3
 
 		++F3401CKL	
s   *Cr   )r(   r)   r*   r   r   r   r|   ra   r4   r   r   rB   r   r   s   @r-   r  r    sJ     &G(F(FGND D%l# lMr,   r  c                   T     e Zd ZdZd fdZed        ZddZd Zed	d       Z	 xZ
S )
DebuggingVariablez
    Represents a call to a debugging function like print(), or something
    registered to config.reorderable_logging_functions.
    c                 2    t        |   di | || _        y r2   r  r  s      r-   r4   zDebuggingVariable.__init__F  r  r,   c                     t        |       xrR t        | t        j                  t        j                  f      xr& | t
        j                  j                  j                  v S r<   )	r  ro   rz   r{   BuiltinFunctionTyperk   r,  r   reorderable_logging_functions)r?  s    r-   is_reorderable_logging_functionz1DebuggingVariable.is_reorderable_logging_functionJ  sO     SM J3!3!3U5N5N OPJu}}++III	
r,   c           	          |j                   ry | j                  | j                  ||      st        d| j                   d| d| d       |j                  j                  | t        |      f       y )NzReordering debugging function z with inputs r  z is not yet implemented.)exportcan_reorder_logsrK   r   debug_localsra  rF  r2  s       r-   rq   zDebuggingVariable.call_functionR  sk    99$$TZZv>0 =#fAfX-EG
 	d4j12r,   c                 8    | j                   j                  |      S r<   )rH   rB   r   s     r-   rB   zDebuggingVariable.reconstruct_  s    {{&&w//r,   c                     t         j                  t         j                  t        f}t	        j
                  ||g      }|D ]  }t        ||      r y y)zm
        Run some additional checks for what sort of function calls can we
        actually reorder.
        FT)r   r  r   r  pytreetree_leavesro   )r   r   r8   allowed_input_types	flat_argsrb  s         r-   r"  z"DebuggingVariable.can_reorder_logsb  sY     $$&& 
 &&f~6	 	Cc#67	 r,   r   r   )r0   T)r(   r)   r*   r   r4   rx   r  rq   rB   r"  r   r   s   @r-   r  r  @  s?    
 
 
30  r,   r  c                   8     e Zd ZdZd fdZ	 	 	 	 	 	 ddZ xZS )LoggingLoggerVariablez<
    Represents a call to any of logging.Logger methods
    c                 2    t        |   di | || _        y r2   r  r  s      r-   r4   zLoggingLoggerVariable.__init__|  r  r,   c                 $   |j                   ry t        | j                  |d       }t        |dd       }||hj                  t        j
                  j                  j                        rt        j                  j                  d       S t        d       y )Nry   zLogger not supported for non-export cases. To avoid graph breaks caused by logger in compile-mode, it is recommended to disable logging by adding logging methods to config.ignore_logger_methods)r!  rN   rK   intersectionrk   r,  r   ignore_logger_methodsr   r   ra   r   )r7   rC   rS   r   r8   methodrU  s          r-   rw   z!LoggingLoggerVariable.call_method  sv     99T406:t4H**5==+?+?+U+UV--44T::Y	
r,   r   r   rs  r   s   @r-   r+  r+  w  s0    
 &	

 -
 

r,   r+  c                        e Zd ZdZd Z	 ddlmZmZ	m
Z d fdZd Zd	ee   d
eeef   defdZdddedefdZ xZS # e$ r  eddi       Z	 eddi       ZY Dw xY w)ConstantLikeVariablez8self.value is a compile-time constant, but not a literalr   )dtypefloatinggenericinvalid_typer+   r0   c                 2    t        |   di | || _        y r2   r  r  s      r-   r4   zConstantLikeVariable.__init__  r  r,   c                     | j                   S r<   r  r   s    r-   rF   z'ConstantLikeVariable.as_python_constant  r  r,   r   r8   c                 P   	 |D cg c]  }|j                          }}|j                         D ci c]  \  }}||j                          }	}} t        | j                  |      i 	}
t        j                  j                  |
      rt        j                  j                  |
      S t        |
t        j                        rt        |
      S t        | j                   d| d|
        y c c}w c c}}w # t        $ r$ t        | j                   d| d| d| d       Y w xY w)Nr  z(*z, **r   z() -> )rF   r   r   r   _error_prefixrN   rK   r   r   r]   ra   ro   reMatchConstantRegexMatchVariable)r7   rC   rS   r   r8   rS  cargsr  r  ckwargsr   s              r-   rw   z ConstantLikeVariable.call_method  s   	O59:Q))+:E:=C\\^LTQq!..00LGL +T*E=W=%%008--44V<<fbhh'-f55++,AdV6&BC ;L" 	OT//0$r$tF81MN	Os,   C8 C-C8 C2C8 -C8 8*D%$D%rC   r%   rS   c                    t        | j                  |      }t        || j                        rt	        |      }t        || j
                        rt        |      S t        |t              r!t        || j                        rt        |      S t        j                  j                  |      rt        j                  j                  |      S t        | |      S r<   )rN   rK   ro   np_floatingfloatnp_dtypeNumpyDTypeVariablerJ   rI   
np_genericr  r   r   r]   ra   r^   r  s       r-   rb   z ConstantLikeVariable.var_getattr  s    T*fd../6]Ffdmm,%f--fd#
64??(K ((%%008--44V<<tT**r,   r   )r(   r)   r*   r   r:  r  r3  rC  r4  rA  r5  rE  ImportErrorrJ   r4   rF   rF  r   r  r   rw   rb   r   r   s   @r-   r2  r2    s    B*M0	
 	
D ?#	D
 S/)*D 
D.+5 +S +_ +E  0>2r2B/0s   
> AAr2  c                       e Zd ZdZy)RegexPatternVariablez
re.PatternNr(   r)   r*   r:  r+   r,   r-   rH  rH    s     Mr,   rH  c                       e Zd ZdZy)r=  zre.MatchNrI  r+   r,   r-   r=  r=    s    Mr,   r=  c                   $     e Zd ZdZd fdZ xZS )TorchVersionVariableztorch.__version__c                     |j                  dt        j                         |d   t        j                  u sJ t        |   di | y )NrK   r+   )
setdefaultrk   __version__r3   r4   r   s     r-   r4   zTorchVersionVariable.__init__  sA    '5#4#45g%"3"3333"6"r,   r   )r(   r)   r*   r:  r4   r   r   s   @r-   rL  rL    s    'M# #r,   rL  c                       e Zd ZdZy)NumpyTypeInfoVariableznp.iinfo/np.finfoNrI  r+   r,   r-   rQ  rQ    s    'Mr,   rQ  c                       e Zd ZdZd Zy)rD  znp.dtype[...]c                 B    | j                   j                  j                  S )a0  Similar to how numpy dtype descriptors (e.g. np.float32 ) are handled by NumpyVariable:

        np.dtype() objects are serialized as strings, torch._numpy wrappers will normalize to the torch dtype.
        This also handles unsupported things nicely (i.e. structured arrays and object arrays).
        )rK   rJ   r(   r   s    r-   r\  zNumpyDTypeVariable.as_proxy  s     zz'''r,   N)r(   r)   r*   r:  r\  r+   r,   r-   rD  rD    s    #M(r,   rD  c                   ,     e Zd ZdZd fdZddZ xZS )RandomClassVariablezrandom.Randomc                 $    t        |   di | y r2   r   r   s     r-   r4   zRandomClassVariable.__init__  r   r,   c                    t        |      dkD  rt        d       n|rt        d       t        |      dk(  rt        j                  j	                  d       n|d   }t        |t        j                  j                               S )Nr   zrandom.Random() with > 1 argzrandom.Random() with kwargsr   )seedrp   )rP   r   r   r   ra   RandomVariablebaseValueMutationNew)r7   rC   r   r8   rX  s        r-   rq   z!RandomClassVariable.call_function  sh    t9q=8978:=d)q.y))006dSTgY^^%D%D%F
 	
r,   r   r   )r(   r)   r*   r   r4   rq   r   r   s   @r-   rU  rU    s    #
r,   rU  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 )rY  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randrX  r0   c                 0   t        |   di | |V| j                  |      sJ t        j                         | _        | j                  j                  |j                                y ||j                         nd }t        j                  |      | _        y r2   )r3   r4   is_supported_random_objr]  RandomsetstategetstaterF   )r7   ra  rX  r8   r9   s       r-   r4   zRandomVariable.__init__  sy     	"6"//555 --/DKKK  1040@4**,dD ---DKr,   c                 "    t         j                  S r<   )r]  rd  r   s    r-   rG   zRandomVariable.python_type+  s    }}r,   c                     | j                   S r<   )r]  r   s    r-   rF   z!RandomVariable.as_python_constant.  s    {{r,   c                    t        |       t        j                  uryt        j                  t
        j                  d      D ]  }t        | |      s yt        | |      }t        j                  |      r/|t        t        j                  |      j                  |       k7  s_ yt        |dd       t        t        j                  |      us y y)NF)rX  rf  re  ry   T)rJ   r]  rd  r  r  rY  _supported_fn_namesrr   rN   r  	isbuiltinr<  )r   rS   meths      r-   rc  z&RandomVariable.is_supported_random_obj1  s    9FMM)OO..0P
 	!D 3%3%D  &76==$7??DD 4T2'&--QU:VV 	! r,   c                     t        |       t        u sJ t        | d         t        u sJ t        | d         t        u sJ t        d | d   D              sJ | d   t        | d         t        u sJ y y )Nr   r   c              3   >   K   | ]  }t        |      t        u   y wr<   )rJ   intrQ  s     r-   rT  z-RandomVariable.check_state.<locals>.<genexpr>I  s     4a47c>4s   r   )rJ   r   ro  r
  rB  )states    r-   check_statezRandomVariable.check_stateD  s}    E{e###E!H~$$$E!H~&&&4584444Qx4a>U#:::#:r,   c                 h   t         j                  |        t        j                  t        j                  j                  | d         t        j                  | d   D cg c]!  }t        j                  j                  |      # c}      t        j                  j                  | d         g      S c c}w )Nr   r   r   )rY  rq  r   re  r   ra   )rp  rS  s     r-   
wrap_statezRandomVariable.wrap_stateL  s    ""5)&&**11%(;''CH8LaY//66q9L **11%(;
 	
 Ms   &B/c                 P    | j                         }t        j                  |       |S r<   )rF   rY  rq  )rp  	state_objs     r-   unwrap_statezRandomVariable.unwrap_stateY  s$    ,,.	""9-r,   r   r8   c                    dk(  r|j                   j                  j                  |         | j                  j                  |D cg c]  }|j                          c}i |j                         D ci c]  \  }}||j                          c}} t        j                  j                  d       S dk(  r)| j                  | j                  j                               S dk(  rq|j                   j                  j                  |        | j                  j                  | j                  |d                t        j                  j                  d       S | j                  v r|j                   j                  j                  |        | j                  j                         fd} t        | j                        |D cg c]  }|j                          c}i |j                         D 	
ci c]  \  }	}
|	|
j                          c}
}	 t!        ||||      S t"        | I  |||      S c c}w c c}}w c c}w c c}
}	w )NrX  rf  re  r   c                  r    t        j                         }|j                          t        |      | i |S r<   )r]  rd  re  rN   )r   r8   rrS   rp  s      r-   call_random_methz4RandomVariable.call_method.<locals>.call_random_methw  s3    MMO

5!'wq$'888r,   )r   rn   mutationr]  rX  rF   r   r   r   ra   rs  rf  re  rv  rj  rN   r"   r3   rw   )r7   rC   rS   r   r8   rS  r  r   rz  r  r  rp  r9   s     `        @r-   rw   zRandomVariable.call_method_  s    6>II""++D1DKK267Q!&&(7AGPXS#3..00P --44T::Z??4;;#7#7#9::ZII""++D1KK  !2!247!;<--44T::T---II""++D1KK((*E9 'GDKK&267Q!&&(79?HA1a**,,H
 ""&6fEEw"2tT6::7 8P* 8Hs   H45H9H?3Ic                 6   j                  fd       j                  dd       j                          j                  d        | j	                  | j
                  j                                      j                  dd       j                          y )Nc                  n     j                   j                  t               j                  d      g      S )Nrd  )rA   create_load_python_moduler]  r  r>   s   r-   r?   z,RandomVariable.reconstruct.<locals>.<lambda>  s3    G))55f=,,X6 r,   r   Fre  r   T)r@   rq   r   r   rs  r]  rf  pop_topr   s    `r-   rB   zRandomVariable.reconstruct  sz    	
 	a' 	*% 4 4 678a&r,   rg  )r(   r)   r*   r   r   r   rj  r   r]  rd  r4   rG   rF   rx   rc  rq  rs  rv  rF  r  r   rw   rB   r   r   s   @r-   rY  rY    s     			'	'N
 )-*..v}}%. '.
 
.  $ ; ; 

 

  
%; ?#	%;
 S/)*%; 
%;Nr,   rY  c                   L     e Zd Zed        Z fdZ	 	 	 	 	 	 	 	 ddZd Z xZS )WeakRefVariablec                     |j                  dd       } |       }|xr t        |      }t        j                  | ||      }||d<   t	        |fi |S )NrH   )rR   r   r   r   r  )rC   weakref_valueoptionsrH   referentreferent_vts         r-   r   zWeakRefVariable.build  sW    Xt, ?5-f5%++B&A"{6g66r,   c                 2    t        |   di | || _        y r2   )r3   r4   r  )r7   r  r  r9   s      r-   r4   zWeakRefVariable.__init__  s    #7#&r,   c                     | j                   S r<   )r  r2  s       r-   rq   zWeakRefVariable.call_function  s     r,   c                     j                  fd        | j                         j                  t        dd             y )Nc                  (     j                  dd      S )Nweakrefref)r   r  s   r-   r?   z-WeakRefVariable.reconstruct.<locals>.<lambda>  s    g&>&>y%&P r,   r   F)r@   r  rA   r   r   s    `r-   rB   zWeakRefVariable.reconstruct  s6    PQ  !21e<=r,   r   )	r(   r)   r*   rx   r   r4   rq   rB   r   r   s   @r-   r  r    sJ    7 7' #  &  -	 
 
 >r,   r  )kr   rD  rX  r  r  r]  r;  r  rz   r  typingr   r   torch._Crk   torch._numpyr  r  torch.utils._pytreer  _pytreer&  r:  r   r   bytecode_transformationr   r	   create_parameter_opr
   excr   r   guardsr   r   mutation_guardr   rH   r   r   r   r   r   r   r   r   r   r   r   r   r   rZ  r   r  r   r   r    r!   user_definedr"   r#   r$   torch._dynamo.symbolic_convertr%   r'   r/   r   r   r   r   r   r   r   r  	dataclassrA  r  ri  rj   r^   r  r  r  r  	lru_cacher  r  r  r  r   r  r  r+  r2  rH  r=  rL  rQ  rD  finfoiinfor3  r  rU  rY  r  r+   r,   r-   <module>r     s  "      	 
   *   $ $   N F 9 0 5 M M
 
 
 " & G X X D	 	KCO KC\p pfo o :7 :7z;? ;(# #
%p= p=f M M Ml-&? l-^&H6 &HR(_ (};o };@)#O )#X &#=? #=L=E_ =E@ Q  ( Q(  (j"O j"\
?? 
?-o -.M? .Mb4 4n
O 
<7+? 7+t!/ !!5 #/ #(0 (	(- 	( II$II$II! 
/ 
"N_ Nb>o >r,   