
    [Thn                      S SK Jr  S SKrS SKrS SKrS SKrS SKrS SKrS SKrS SK	r	S SK
r
S SKrS SKJr  S SKJr  S SKJrJrJrJrJrJr  S SKrS SKJr  S SKrS SKrS SKrS SKJrJr  S SKJr  S S	KJ r J!r!  S S
K"J#r#  S SKJ$r$J%r%  S SK&J'r'J(r(  S SK)J*r*  S SK+J,r,  S SK-J.r.J/r/  S SK0J1r1J2r2J3r3J4r4J5r5J6r6J7r7  S SK8J9r9  S SK:J;r;  S SK<J=r=  S SK>J?r?  SSK@JArAJBrBJCrC  SSKDJErEJFrFJGrGJHrHJIrIJJrJJKrK  SSKLJMrMJNrNJOrOJPrP  SSKBJQrQJRrRJSrSJTrTJUrUJVrVJWrWJXrXJYrYJZrZJ[r[  SSK\J]r]J^r^J_r_J`r`JaraJbrbJcrcJdrdJereJfrfJgrg  SSKhJiri  SSKjJkrk  SSKlJmrm  SSKnJoroJprpJqrqJrrrJsrsJtrtJuruJvrvJwrwJxrx  SSKyJzrzJ{r{  \(       a.  S S K|J}r}J~r~Jr  S S!KJr  S S"KJr  S S#KJr  S S$KJr  SS%KJr  SS&KJr  S S'KJr  \GR                  " \5      r\GR                   GR#                  \S(5      r\GR&                  GR(                  r\GR*                  " 5       r\AGR.                  " 5       (       a  S S)KJr  OS4S* jrS5S+ jrS6S, jr      S7S- jrS8S. jr      S9S/ jr " S0 S1\GR>                  GR@                  5      r " S2 S3\5      rg):    )annotationsN)defaultdict)contextmanager)AnyCallableNoReturnOptionalTYPE_CHECKINGUnion)Expr)deviceTensor)get_decompositions)defakedynamo_timed)FakeScriptObject)
LazyStringtrace_structured)compute_required_storage_lengthmake_channels_last_strides_for)
FakeTensor)BackwardState)magic_methodsmethod_to_operator)free_unbacked_symbolshas_free_symbolsresolve_unbacked_bindingsRuntimeAssertShapeEnvSympyBooleanSymTypes)Node)no_dispatch)
OrderedSet)int_oo   )configirmetrics)BackendFeatureDeviceOpOverridesget_backend_featuresget_device_op_overridesget_wrapper_codegen_for_deviceinit_backend_registrationWorkspaceArg)CppWrapperCodegenErrorLoweringExceptionMissingOperatorWithDecompMissingOperatorWithoutDecomp)ConstantDonatedBufferFixedLayoutget_device_typeGraphPartitionSignatureInputBuffer	Pointwise	Reduction
StorageBox	TensorBoxTorchBindObject)constrain_to_fake_tensorsconstrain_to_fx_stridesFALLBACK_ALLOW_LISTfallback_handler%fallback_node_due_to_unsupported_type	loweringsmake_fallbackmaybe_layout_constraintsneeds_realized_inputsrequire_contiguousunsupported_output_tensor)autotune_cache)AutotuneCacheBundler)SizeVarAllocator)
convert_shape_to_inductorgather_origins get_cloned_parameter_buffer_nameget_donated_idxsget_sympy_Expr_dtypeis_same_tensor#maybe_get_suppress_shape_guards_ctxnormalize_nameshould_assume_input_alignedValueWithLineMap)NullHandlerV)IterableIteratorSequence)
ModuleType)_EffectType)GraphModule)Graph)PythonWrapperCodegen)BaseSchedulerNode)output_code_log
perf_hints)log_module_codec                     g N )argskwargss     M/var/www/auris/envauris/lib/python3.13/site-packages/torch/_inductor/graph.pyre   re      s        c                   [        U [        R                  [        R                  [        R                  R
                  R                  45      (       d   S5       e[        U [        R                  R
                  R                  5      (       a  [        R                  $ [        U [        R                  5      (       a  [        U 5      $ U R                  (       a  [        R                  $ U R                  (       a  [        R                  $ g )Nzgget_constant_buffer_dtype only supports input of sympy.Symbol, sympy.Expr or sympy.core.numbers.Integer)
isinstancesympySymbolr   corenumbersIntegertorchint64rR   
is_integeris_floatfloat32)constant_buffers    rk   may_get_constant_buffer_dtyperz      s    %,,

EJJ4F4F4N4NO   	r 
 /5::#5#5#=#=>>{{/5::..#O44!!{{		!	!}}rl   c                6    [        S [         5       5      nX;   $ )Nc              3  8   #    U  H  n[        U5      v   M     g 7frg   )r   ).0ms     rk   	<genexpr>"is_magic_method.<locals>.<genexpr>   s     H-Q-a00-s   )r$   r   )op	magic_opss     rk   is_magic_methodr      s    H-HHI?rl   c           	         UR                  S5      nU n[        U5       H@  u  pE[        X55      (       d   [        SSR	                  US U 5       35      e[        X55      nMB     U$ )N.z#Node referenced nonexistent target )split	enumeratehasattrRuntimeErrorjoingetattr)objtargettarget_atomsattr_itriatoms         rk   getattr_recursiver      sn     <<$LH\*x&&5chh|BQ?O6P5QR  8* + Orl   c                    0 nU R                  SS9S   nSUR                  ;  a  U$ [        UR                  S   5       H-  u  p4X2R                  S   ;   d  M  UR                  S   U   X'   M/     U$ )Noutputr   r   user_visible_output_idxsoriginal_output_strides)
find_nodesmetar   ri   )gretoutput_nodeidxnodes        rk   get_user_visible_output_stridesr      s|    ')C,,(,+A.K!)9)99
{//23	""#=>>#(()BCCHCI 4 Jrl   c                `   [         R                  (       d  g[        [        R                  [        R
                  [        R                  /5      n[        [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                  [        R                   [        R"                  [        R$                  /5      n    SS jn['        U R(                  5       H  n[+        UR,                  [.        R0                  R2                  R4                  5      (       a  SUR6                  S'   MQ  U" U5      nU(       d  Mb  Xb;   a  SUR6                  S'   UR6                  R9                  SS5      (       a:  UR:                   H*  nU" U5      nU(       d  M  X;  d  M  SUR6                  S'   M,     [         R<                  (       a  M  XQ;   d  M  SUR6                  S'   GM     g)ar  
Nodes like convolution/convolution_backward want its input to be dense.
If we pad their inputs, we result in extra calls to copy kernels!  On the other hand, padding usually helps reduction.

The pass finds nodes that dislike padding. These are nodes that can be reached
from a convolution/convolution_backward in the backward direction without
going thru a reduction.
Nc                    U R                   S:X  ad  [        U R                  [        R                  R
                  5      (       a1  [        U R                  S5      (       a  U R                  R                  $ S $ )Ncall_function_overloadpacket)r   rn   r   rt   _ops
OpOverloadr   r   )r   s    rk   _get_overload_packet8mark_nodes_dislike_padding.<locals>._get_overload_packet   s[    
 ww/)4;;

(=(=>>%677	 KK''	
 	
rl   Tdislike_paddingF)r   torch.fx.Nodereturnz%Optional[torch._ops.OpOverloadPacket])r'   comprehensive_paddingr$   atenconvolutionconvolution_backward
_scaled_mmvar_meansummeanprodanyaminamaxminmaxargminargmaxscatter_reducereversednodesrn   r   rt   _higher_order_opstriton_kernel_wrapTritonKernelWrapperMutationr   getall_input_nodespad_outputs)	r   user_visible_output_stridesops_dislike_paddingops_like_paddingr   curr   priorprior_ops	            rk   mark_nodes_dislike_paddingr      s    ''$%%OO	
 "MMHHIIIIHHIIIIHHHHKKKK	
"



	.

  JJ##66RR
 
 +/CHH&'!#&$*.CHH&'88<<)511,,/6348EJJ01 - !!!c&H*.CHH&'1 !rl   c                     ^  \ rS rSr% S\S'                   SA                                   SBU 4S jjjrSCS jr    SDS jr    SES	 jr    SFS
 jr	    SGS jr
      SHS jrSIS jr\R                  SJS j5       rSKS jr\SLS j5       rSMS jr        SNS jrSOS jrSPS jrSQS jr\SRS j5       r    SSS jrSTS jr    SUS jrSVS jrSWS jrSXU 4S jjrSYS jr SS.SZS jjr!S[S  jr"    S\S! jr#SPS" jr$S]S# jr%      S^S$ jr& S_     S`S% jjr'SaS& jr(        SbU 4S' jjr)ScU 4S( jjr*\SdS) j5       r+        SeS* jr,SfS+ jr-SfS, jr.        SgU 4S- jjr/SCS. jr0\ShS/ j5       r1\SiS0 j5       r2            SjS1 jr3SkU 4S2 jjr4SCS3 jr5    Sl         SmS4 jjr6  SnS5 jr7SCS6 jr8SnS7 jr9SoS8 jr:  SpS9 jr;Sr<S:\S;'   SqS< jr=SqS= jr>SrS> jr?SsS? jr@S@rAU =rB$ )tGraphLoweringi
  zlist[ir.IRNode]graph_outputsNFc                
  > [         TU ]  U5        X l        Ub  UOU R                  XS9U l        SU l        Xl        Xl        Xl        Xl	        Xl
        Xl        UU l        SU l        Uc  [        5       nSU l        OSU l        X0l        UR"                  R%                  5       U l        [(        [*        R,                     " 5       U l        [1        U5      U l        / U l        0 U l        0 U l        [(        [:           " 5       U l        U(       a  UR>                  O	[)        5       U l        U(       a  UR@                  O	[)        5       U l         SU l!        0 U l"        / U l#        / U l$        U(       a  UO0 U l%        U(       a  [)        URM                  5       5      O	[)        5       U l'        U(       a  URP                  O0 U l(        0 U l)        0 U l*        0 U l+        [(        [:           " 5       U l,        [(        [:           " 5       U l-        [(        [:           " 5       U l.        [(        [:           " 5       U l/        [(        [:           " 5       U l0        [(        [:           " 5       U l1        S U l2        S U l3        / U l4        SSK5J6n  [n        Rp                  " 5       (       a	  U(       a  UOUU l9        S U l:        0 U l;        [(        [:           " 5       U l<        / U l=        0 U l>        [        [        5      U lA        0 U lB        [        R                  " 5       U lD        UU lE        XPlF        XPlG        0 U lH        X`lI        X@lJ        [        [        5      U lM        S U lN        S U lO        U R                  (       a  U R                  5       O	[)        5       U lQ        [)        S/5      U lR        [        UR                  5      U lU        [        UR                  U R                  5        SU lW        SU lX        / U lY        S U lZ        0 U l[        UR                  5       U l]        U R                  R                  R                  S	0 5      U la        Ub  UR                  O0 U lb        [        5         [        R                  " S 5      " [        5      U lf        0 U lg        [)        5       U lh        [(        [:           " 5       U li        [)        5       U lj        [)        5       U lk        [(        [:           " 5       U ll        [        R                  " 5       U lo        S
U lp        [        5       U lr        g )N)is_inferencer   FTcpu)extern_node_json_serializerzaten.convolution_backward  dynamo_flat_name_to_original_fqn)ssuper__init__example_inputsdecide_layout_opt
layout_optnum_channels_last_convr   is_backwardis_const_graphconst_wrapper_codeconst_kernel_codeconst_moduleinputs_to_checkextra_tracebackr   reuse_shape_env
_shape_envdeferred_runtime_assertscopyras_by_symbolr$   ro   rp   bound_unbacked_symbolsrM   sizevarsgraph_input_namesgraph_inputsgraph_inputs_originalstrzero_dim_cpu_tensor_listdevice_typesdevice_idxsdevice_typebuffer_to_padded_sizebuffers
operationsconst_output_indexkeysfolded_constants	constantstorchbind_constantsseen_subgraphsconstant_reprsremoved_operationsremoved_buffersremoved_inplace_buffersmutated_buffersnever_reuse_buffersinplaced_to_remove
device_opswrapper_codeextern_kernel_nodes&torch._inductor.extern_node_serializerr   r'   	is_fbcodeextern_node_serializercurrent_nodelistsmutated_inputsmutated_input_idxsname_to_bufferr   listname_to_users
name_to_optimecreation_timenamecpp_wrapperrecord_multi_kernel_choicemulti_kernel_to_choiceaot_modegraph_idnext_post_grad_graph_counterpost_grad_graph_id	schedulercurrent_devicefind_nodes_prefer_channels_lastnodes_prefer_channels_last_warned_fallbackr   graphr   r   	cache_key
cache_pathcache_linemapdisable_cudagraphs_reasondevice_node_mapping__copy__orig_gmmoduler   r   r   allocated_constant_namer/   	functools	lru_cacher,   effectful_opsaligned_inputsno_fuse_buffer_nameslow_precision_codegen_opsinvoke_quant_opsall_codegen_kernel_names	itertoolscountworkspace_idplaceholder_idxrQ   bw_donated_idxs)selfgmr   	shape_envr  r  r  r   r  r   r   r   r   r   r   r   r  r   r   	__class__s                      rk   r   GraphLowering.__init__  sM   , 	, % '''F 	
 '(#(&,"4!2(.$ 
I#(D #'D # ..335 	 '1&>&@#(3,.VX=?"(23(9%)5L%%:< 	 )5L$$*, 	 ! <>"(*.0"4" 	
 " )..01 	 '3L"" 	 FH 68.0",S/"3)#0'1#'8$)#0#-c?#4 ",S/"3-126>@ V !!&< #, 	# ,0+-
(o/-/46@KD@Q35!YY[	&
 +6'68#  "&'?"@>B 7; 7;ooD002:< 	' !+,G+H I+J288+T("288T-M-MN !  	 9=& GI -/[[]040@0@0D0D.1
- 5A4LL00RT 	$ 	"#$-$7$7$=>R$S!;=/9|$.sO$5!:D,&1; )33(9% &OO-  "/1rl   c                8    U R                   R                  5         g rg   )r   freeze_runtime_assertsr6  s    rk   r<  $GraphLowering.freeze_runtime_asserts  s    ..0rl   c                Z   U R                   (       a2  [        UR                  5       5      [        UR                  5       5      4$ SSKJn  U" S[        U R                  R                  5       35      nU R                  R                  UU5      u  nnnU Vs/ s H:  n[        U[        R                  5      (       a  UR                  R                  OUPM<     nnU Vs/ s H:  n[        U[        R                  5      (       a  UR                  R                  OUPM<     n	nX4$ s  snf s  snf )z
Support dynamic shapes and dynamic strides by assigning variables
to each dimension.  We duck-shape tensors, so if two tensors
have the same size they get assigned the same symbolic variable.
r   )ConstantSource__inductor_unknown_tensor_)r   rN   sizestridetorch._dynamo.sourcer@  lenr   
var_to_val,create_symbolic_sizes_strides_storage_offsetrn   rt   SymIntr   expr)
r6  exr@  sourcerB  rC  _r   r_sizer_strides
             rk   symbolic_sizes_strides$GraphLowering.symbolic_sizes_strides  s    ,RWWY79R		:   < $,S1K1K-L,MNF LL	 NRRTAu||!<!<!&&++!CTROUVv!:a#>#>AFFKKAEvV SVs   AD#AD(c                    UR                  5        Vs/ s H  n[        R                  " U5      PM     nnUR                  5        Vs/ s H  n[        R                  " U5      PM     nnX44$ s  snf s  snf )z
Primarily used to weights
)rB  ro   rs   rC  )r6  rJ  r   rB  rC  s        rk   static_sizes_strides"GraphLowering.static_sizes_strides  sZ     +-'')4)Qa )4,.IIK8Kq%--"K8| 58s    A, A1c                r   [        U[        R                  5      (       a  UR                  n[        U[        R                  5      (       a  UR                  n[        U[        R
                  5      (       a3  UR                  U R                  ;   a  U R                  UR                     $ UR                  5       $ rg   )	rn   r(   r>   datar=   ComputedBufferr  r   get_size)r6  r   s     rk   get_allocation_size!GraphLowering.get_allocation_size  s~     dBLL))99DdBMM**99DtR..//		T777--dii88==?"rl   c                    UR                  5       nU R                  U5      nUR                  nUR                  n[	        X4U5      $ rg   )
get_layoutrX  rC  offsetr   )r6  r   layoutrB  rC  r\  s         rk   get_allocation_storage_size)GraphLowering.get_allocation_storage_size  s?     "''-.tVDDrl   c                r    [        U[        5      (       d   U5       eX R                  [        U5      5      ;   $ rg   )rn   r*   r,   r8   )r6  r   features      rk   has_featureGraphLowering.has_feature  s5    
 '>22;G;233OF4KLLLrl   c                B    U R                   =n(       a  U$ [        S5      e)NzNo current device)r  r   r6  r   s     rk   get_current_device_or_throw)GraphLowering.get_current_device_or_throw  s$    (((6(M233rl   c              #  \   #    U R                   nXl          S v   X l         g ! X l         f = f7frg   )r  )r6  r   r   s      rk   set_current_device GraphLowering.set_current_device  s*     ##$	("'%s   ,! ,),c                L    U R                   (       a  gU R                  (       a  gg)N	inferencebackwardforward)r   r   r=  s    rk   get_training_phase GraphLowering.get_training_phase  s    rl   c               T   [         R                  (       d  g[         R                  (       a  gU R                  R                   Vs/ s HB  o"R
                  [        R                  R                  R                  R                  :X  d  M@  UPMD     nn[        U5      nUS:X  a  g[        R                  R                  R                  (       aE  [        R                  R                  R                  5       (       a  [!        S U 5       5      (       a  g[        [#        U R                  R                  5      5      SU-  :  a  [$        R'                  S5        g[)        S U 5       5      (       a  [$        R'                  S5        gSS	 jnSS
 jnSS jnU(       GaZ  SSKJn  [/        [0        5      n	U H  n
[        R2                  R4                  R7                  U
5      u  pnU(       a  U" SS9 n[8        R:                     U
R
                  " U0 UD6  SSS5        SSS5        WR=                  5       nU" U
5      (       a  SnO"U" U
5      (       a  SnOU" U
5      (       a  SnOSnU	U==   U-  ss'   M  [$        R'                  S5        M     SnSnSnSn[?        U	RA                  5       5      nU	S   U-  U	S   U-  -   U	S   U-  -   U	S   U-  -   nUU:*  nU(       d  [$        R'                  SUU5        U$ [)        [C        XS5      5      (       a  [$        R'                  S5        g[)        [C        Xc5      5      (       a  [$        R'                  S5        g[!        [C        Xs5      5      (       a  [$        R'                  S5        ggs  snf ! , (       d  f       GN}= f! , (       d  f       GN= f)zT
Decide if we should enable layout optimization for this graph based on
heuristics.
FTr   c              3     #    U  HL  nS   HB  nUR                   U   R                  S   R                  [        R                  " S5      :H  v   MD     MN     g7f)r   r&   valr   N)ri   r   r   rt   r}   nr   s      rk   r   2GraphLowering.decide_layout_opt.<locals>.<genexpr>=  sL      #A!C s  '..%,,u2EE! F#s   AAi,  z*Skipped layout opt because only a few convc              3     #    U  H4  nS   H*  n[        UR                  U   R                  S   5      v   M,     M6     g7f)rs  rt  N)r   ri   r   ru  s      rk   r   rw  L  s?      
 QVVC[--e455 6s   <>zeSee perf regression with dynamic shape. Follow up in https://github.com/pytorch/pytorch/issues/102670c                    U R                   S   R                  S   n[        U[        R                  5      (       d   eU R                   S   S:  =(       a    UR                  S5      S:  $ )Nr&   rt  r   )ri   r   rn   rt   r   rB  )rv  meta_vals     rk   
is_grouped3GraphLowering.decide_layout_opt.<locals>.is_groupedV  sT    vvay~~e,Hh555566":>:hmmA&6&::rl   c                    U R                   S   R                  S   R                  S5      S-  U R                   S   R                  S   R                  S5      :*  =(       a.    U R                   S   R                  S   R                  S5      S:  $ )Nr&   rt  r      ri   r   rB  rv  s    rk   is_in_out_channel:GraphLowering.decide_layout_opt.<locals>.is_in_out_channel[  sv    q	u%**1-1QVVAY^^E5J5O5OPQ5RR 6FF1INN5)..q1A5rl   c                    U R                   S   R                  S   R                  S5      S:*  =(       a.    U R                   S   R                  S   R                  S5      S:*  $ )Nr&   rt  r   @   r  r  s    rk   is_small_channel9GraphLowering.decide_layout_opt.<locals>.is_small_channela  sT    q	u%**1-3 8FF1INN5)..q1R7rl   )FlopCounterMode)displayNgroupedsmallin_outdefaultzConv inputs meta not foundg|?5^?gtV?g333333?guV?zhSkipped layout opt in inference because weighted flops indicate slowdown, default: %d, channels last: %dzFSkip layout opt because found grouped convolution with >1 in_channels!zBSkip layout opt because some convolutions have smaller out_channelz>Skip layout opt because all convolution channels are too small)rv  r   r   bool)rv  r   r   r  )"r'   layout_optimizationforce_layout_optimizationr  r   r   rt   opsr   r   r  rE  backendsmkldnnenabledis_availableallr  logdebugr   torch.utils.flop_counterr  r   float	_inductorfx_utilsget_fake_args_kwargsrY   	fake_modeget_total_flopsr   valuesmap)r7  r   rv  
conv_nodesnconvr{  r  r  r  flop_countsr   successri   rj   flop_counter_modecounted_flops	node_typeGROUPED_MULTIPLIERDEFAULT_MULTIPLIERIN_OUT_MULTIPLIERSMALL_MULTIPLIERtotal_flopsweighted_flopsdo_layout_opts                           rk   r   GraphLowering.decide_layout_opt%  s6    ))++ xx~~
%!UYY^^5O5O5W5W)WA~ 	 
 JA: NN!!))%%2244 #   
 tBHHNN#$e3IIBC 

 
 

 IIw 	;
		 @,7,>K"(-(@(@(U(U)%v (7;L[[ KK88 ) 8 %6$E$E$GM!$''$-	)$//$+	*400$,	$-		*m;*II:;- #6 "'!& %$k0023K I&);;g&)99:h'*;;< i(+==>  +k9M 		~"
 ! & s:*++IIX  s$122IIT  s#011IIVWm
D )[ 87s0   ?NN,N=NN
NN
N'	c                B    U R                   b  U R                    SU 3$ U$ )z2Prepend the given name with the graph name if any.rL  )r  r6  r  s     rk   qualify_nameGraphLowering.qualify_name  s&    99 ii[$((rl   c                    [        U UUU R                  U R                  U R                  U R                  U R
                  U R                  U R                  U5      S9
$ )a  
Make a subgraph of the current graph with all inherited parts, except
the graph module (`gm`) and `example_inputs`.  The subgraphs are lowered
separately and lifted into a separate function in the parent output
wrapper code.  The subgraph name is qualified by the parent graph's
name. Note that the lifting of subgraph is supported for python wrapper
only. For cpp wrapper, we inline the subgraphs in the parent wrapper.
)
parentr7  r   r8  r  r  r  r   r   r  )SubgraphLoweringr   r  r  r  r   r   r  )r6  r7  r   subgraph_names       rk   make_subgraphGraphLowering.make_subgraph  sZ      )oo((]]#'#>#>**((""=1
 	
rl   c                   [         [           " 5       n[        U R                  R                  R
                  5       H~  nUR                  [        R                  R                  R                  R                  :X  a  UR                  U5        MR  UR                   H  nX1;   d  M
  UR                  U5          M|     M     U R                  R                  R
                   H%  nX!;   d  M
  UR                  UR                  5        M'     U$ )a  
The rule to decide if an node prefer channels last is simple.
1. if it's input/output of a convolution
2. if one of its user prefers channels last

We have rule 1 because cudnn runs a faster convolution kernel for channels last inputs;
Rule 2 is also important. It makes sure that indirect inputs to convolution also prefers
channels last.

Consider the scenario: conv -> batch-norm -> relu -> conv
Without rule 2, batch-norm output may use a contiguous layout. That will cause 2 extra copies:
1. the output of batch-norm should be channels last initially since its input is a conv's output.
   Forcing the batch-norm's output to be contiguous results in the first copy
2. The second conv's input is initially contiguous. This layout is propagated from the batch-norm's output.
   We need convert it to channels last layout which results in the second copy.
With rule 2, we makes sure all the tensors in the chain uses channels last layout. So both copies
can be saved.
)r$   r"   r   r'  r  r   r   rt   r  r   r   r  addusersupdate)r6  
output_setrv  users       rk   r  -GraphLowering.find_nodes_prefer_channels_last  s    &  %'
$++++112Axx599>>55===q!%NN1%   30 ""((A!!!''* ) rl   c                    XR                   ;  a2  U R                   R                  U5        [        R                  SU5        g g )NzUsing FallbackKernel: %s)r  r  perf_hint_loginfor  s     rk   warn_fallbackGraphLowering.warn_fallback  s8    ,,,!!%%d+94@ -rl   c                `   U R                   R                  UR                  5        UR                  b%  U R                  R                  UR                  5        [
        R                  R                  (       a8  XR                  ;  a(  [
        R                  R                  U R                  U'   g g g rg   )	r   r  typeindexr   rY   r  r  r$  re  s     rk   add_device_infoGraphLowering.add_device_info!  sw    fkk*<<#  .77F2J2J$J/0ww/C/CD$$V, %Krl   c                "    [         R                  $ rg   )rY   r  r=  s    rk   r  GraphLowering.fake_mode(  s    {{rl   c           	        XR                   ;   a  U R                   U   $ XR                  ;   a  U R                  U   $ XR                  ;   ay  [        R                  R                  U   n[
        R                  " U[
        R                  " UR                  UR                  /[        R                  R                  U5      Q76 S9$ g Nr  r]  )r  r   r   rY   r  r(   ConstantBufferr7   r   dtyperR  )r6  buffer_namerU  s      rk   try_get_bufferGraphLowering.try_get_buffer,  s     ---&&{33+++$$[11..(77$$[1D$$ ~~KK./gg.J.J4.P  rl   c                    [        S5      e)Nz'Should not be called for the main graph)r   )r6  symbols     rk   add_symbol_graph_input$GraphLowering.add_symbol_graph_input>  s    DEErl   c                J    U R                  U5      nUb  U$ [        SU 35      e)Nz$Failed to find buffer matching name )r  r   r6  r  bufs      rk   
get_bufferGraphLowering.get_bufferA  s1     !!+.?JA+OPPrl   c                   XR                   ;   a  U R                   U   R                  $ [        U R                  S5      (       a  XR                  R                  ;   aq  U R                  R                  U   nX R
                  ;   a  U R
                  U   R                  5       $ X R                  ;   a  U R                  U   R                  5       $ XR
                  ;   a  U R
                  U   R                  5       $ XR                  ;   a  U R                  U   R                  5       $ [        R                  " SU5      nU(       a   U R                  UR                  S5      5      $ [        SU 35      e)Nmutation_real_namez1(as_strided|reinterpret_tensor)\(([a-zA-Z0-9_]+),r&   could not find )r   r  r   r  r  r  	get_dtyper   rematchgroupKeyError)r6  r  mutated_bufr~   s       rk   r  GraphLowering.get_dtypeI  s.   ..(>>+.444 DNN$899~~@@@..;;KHK111**;7AACC///((5??AA---&&{3==??+++$$[1;;==HHI;W>>!''!*--677rl   c                V   XR                   ;   a  U R                   U   R                  5       $ XR                  ;   a5  U R                  U   nUR                  5       (       d  gUR	                  5       $ XR
                  ;   a  U R
                  U   R	                  5       $ [        SU 35      e)Nr&   r  )r   numelr  has_tensor_output	get_numelr   r  r  s      rk   r  GraphLowering.get_numel_  s    ..(>>+.4466---%%k2C((**==?"+++$$[1;;==677rl   c                j   > [        S5         [        TU ]  " U6 sS S S 5        $ ! , (       d  f       g = f)NzGraphLowering.run)r   r   run)r6  ri   r9  s     rk   r  GraphLowering.runk  s$    -.7;% /..s   $
2c                "   UR                   b
   SU 35       e[        U[        R                  5      (       d   eU R	                  S[        U R                  5       35      nU R                  R                  U5        XR                  U'   X!l         U$ )NzOperation registered twice: r   )	operation_namern   r(   	Operationr  rE  r   appendr  )r6  r   r  s      rk   register_operation GraphLowering.register_operationo  s      (M,H*MM("bll++++  2c$//&:%;!<=r" " rl   set_namec                  U R                  S[        U R                  5       35      nU R                  R                  U5        XR                  U'   UR                  5       nUb_  [        U[        R                  5      (       a/  UR                  5       (       a  U[        R                  " S5      :X  d  U R                  U5        U(       a  X1l        U$ )Nr  r   )r  rE  r   r  r  
get_devicern   r(   rV  is_zero_elementsrt   r   r  r  )r6  bufferr  r  r   s        rk   register_bufferGraphLowering.register_bufferx  s      3s4<<'8&9!:;F#$*D!""$ 62#4#455++--ell511   (Krl   c                h    U R                  SSR                  U5      -   5      nXR                  U'   U$ )Nlist_rL  )r  r   r  )r6  operation_namesr  s      rk   register_operation_list%GraphLowering.register_operation_list  s1      388O+D!DE*

4rl   c                *   ^ ^ SUU 4S jjmT" U5        g )Nc                  > [        U [        [        45      (       a  U  H  nT" U5        M     [        U [        R                  5      (       a6  U R                  5        H!  nTR                  U   R                  U 5        M#     g g rg   )rn   r  tupler(   r>   get_read_namesr  r  )valuex	read_nameregisterr6  s      rk   r
  1GraphLowering.register_users_of.<locals>.register  sg    %$//AQK %..!&!5!5!7I&&y188? "8 /rl   )r  %Union[Iterable[ir.IRNode], ir.IRNode]r   Nonerh   )r6  node_outputr
  s   ` @rk   register_users_ofGraphLowering.register_users_of  s    	@ 	@ 	rl   c                    [        U[        5      (       d   eU R                  R                  U5        XR                  ;  a  gU R                  U    H  nUR                  5         M     g)zz
When a buffer is mutated we need to make sure all the reads to
the old version are realized before the mutation happens.
N)rn   r   r   r  r  realize)r6  r  r  s      rk   mark_buffer_mutated!GraphLowering.mark_buffer_mutated  sX    
 $$$$$  &)))&&t,DLLN -rl   c                   XR                   ;   a  XR                  ;   d
   SU-   5       e[        U R                   U   5      nX R                  R                  ;   a  U R                  R                  U   $ U R                  U   $ )z
In AOTI, module buffers may have been mutated during the tracing and compilation.
Thus we need to read from previously stored original buffers, to make sure the
generated model.so uses correct initial values.
z$Can not find the original value for )r(  r   rP   r'  r   )r6  r  	orig_names      rk   get_original_value_of_constant,GraphLowering.get_original_value_of_constant  s     3338N 	
2T9	
N 5T5Q5QRV5WX	 KK,,, KKY'	
 %	
rl   c                   [         R                  R                  (       d7  U R                  R	                  5        H  u  p4[        X$5      (       d  M  Us  $    Uc  S[        U R                  5       3nUnUS   R                  5       (       a  SU 3nU R                  U5      n[        U5      nUnSnXR                  ;   a  U SU 3nUS-  nXR                  ;   a  M  X R                  U'   UR                  < SUR                  < S[        UR                  5       5      < S[        UR                  5       5      < S[        U5      S 3	U R                   U'   XPR"                  U'   U$ )Nconstantr   	constant_rL  r&    r  )r'   aot_inductoruse_runtime_constant_foldingr   itemsrS   rE  isdigitr  rU   r   r  r  rB  rC  hashr   r(  )r6  r  rU  constant_namer  r  prefixcnts           rk   allocate_non_dup_const_name)GraphLowering.allocate_non_dup_const_name  sO    ""??(,(<(<(>$!$..(( )? <c$..123D	7??tf%D  &  %nn$XQse$D1HC nn$  $t{{oQtzznATYY[!$AeDKKM&:%=QDz!n 	D!
 .7$$T*rl   c                    U R                  X!5      n[        R                  " [        R                  " U[        UR                  UR                  /U R                  U5      Q76 S95      $ r  )	r%  r>   creater(   r  r7   r   r  rR  )r6  rU  r  new_names       rk   add_tensor_constant!GraphLowering.add_tensor_constant  s`     33D?"KK.2.G.G.M
 	
rl   c                p   U R                   U   R                  U:X  d  Uc  U$ [        R                  R                  R                  5          U R                  U SUR                   UR                  =(       d    S 3U R                   U   R                  U5      5      sSSS5        $ ! , (       d  f       g= f)z
We AOT copy constants to the devices they are needed on.
If device_override doesn't match the constant's device, then
copy it and return a different name.
NrL  r   )
r   r   rt   utils_python_dispatch_disable_current_modesr%  r  r  to)r6  r  device_overrides      rk   r"  GraphLowering.constant_name  s     >>$&&/9_=TK[[))@@B 33&/../0E0E0J/KLt$''8 CBBs   AB''
B5c                  > U =R                   S-  sl         [        TU ]	  XU5      nU R                  U5      n[	        U[
        5      (       aA  UR                  R                  nXPR                  U'   U R                  R                  U5        U$ [	        U[        [        [        45      (       aA  [        R                  " U5      nXPR                  U'   U R                  R                  U5        U$ [	        U[         5      (       a4  [#        XS9nX`R                  U'   U R                  R                  U5        U$ Uc  U R                  R                  U5        g [	        U[$        5      (       a  U R                  R                  U5        g [	        U[&        R(                  5      (       a  [+        [,        R.                  R0                  R2                  5      S:X  ae  [5        [7        [,        R.                  R0                  R2                  5      5      R8                  [&        R:                  R<                  R>                  L d   e[@        RB                  " XRD                  S9nXpR                  U'   U R                  R                  U5        U$ [	        U[&        RF                  5      (       d   U5       eURH                  (       d  U RK                  U5      u  pOU RM                  U5      u  pU RN                  (       ai  U RP                  (       aX  U R                   U RP                  ;   a>  [R        RT                  " [W        U[Y        URD                  URZ                  X5      S95      n
O=[R        RT                  " []        U[Y        URD                  URZ                  X5      S95      n
XR                  U'   U R                  R                  U5        U
R^                  R^                  U R`                  U'   U R0                  R2                  (       a  U Rc                  URD                  5        [e        5          [g        U5      (       a  U Rh                  Rk                  U5        S S S 5        U
$ ! , (       d  f       U
$ = f)Nr&   r  r  )r  r   r  )6r4  r   placeholderr  rn   r!   r   rI  r   r   r  intr  r  ro   sympifyr   r?   r   rt   	GeneratorrE  rY   r  r  r  r  iterr   _prims	rng_primsgraphsafe_run_with_rng_stater(   GeneratorStater   r   _has_symbolic_sizes_stridesrR  rO  r   r5  r>   r(  r6   r7   r  r:   rU  r   r  rT   rV   r,  r  )r6  r   ri   rj   examplerI  r   gensizesstridestensorr9  s              rk   r5  GraphLowering.placeholder  sm    	!'%fF;""6*gx((<<$$D(,f%""))&1K#tU!344==)D(,f%""))&1K!122!v=C(+f%""))&1J_""))&1g}-- ""))&111AGG((../14agg22889:AA<<))FFGG ##GC(+f%""))&1J'5<<009'90
 22!66w?NE7!88ANE $$$$(<(<<%%&w~~w}}eUF %%&w~~w}}eUF %+&!%%f--3[[-=-=""6*""  0 12*733##''/ 3  32 s   ),Q
Q.c                  > U[         R                  L a3  [        US   [        [        [
        45      (       a  [        TU ]  XU5      $ [        U[        R                  R                  5      (       d  [        US5      (       a  U" U0 UD6$ U[        ;  Ga  [        U[        R                  R                  5      (       d
   U S35       eUR                  5       R                  S5      S   nU[         ;   a  [#        USSS9  GOB[$        R&                  (       Ga  [)        U/5      (       a  [*        O[,        n[.        R1                  SUR3                  XU5      5        [        R4                  R6                  R8                  UR:                  ;   a  [<        nO}[        R4                  R6                  R>                  UR:                  ;   a  S nOH[        R@                  RB                  RE                  U5      (       a  U RF                  (       a  [H        nOS n[#        XS	9  O)[)        U/5      (       a  [+        XU5      e[-        XU5      e [.        RK                  S
[        U   5        U RL                  n[O        U5      nU(       a  X#pU" U/UQ70 UD6u  p#[        U   " U0 UD6nU(       a  U RQ                  UW	W
X#5        U$ ! [R         a+  n[U        XX#5      RW                  URX                  5      S eS nAff = f)Nr   _inductor_lowering_functionz is not an OpOverloadr   FT)warnoverride_decompz"Creating implicit fallback for:
%s)layout_constraintz  via %s)-operatorgetitemrn   r  r  dictr   r   rt   r   OpOverloadPacketr   rE   r   r  r   rB   rF   r'   implicit_fallbacksr   r3   r4   r  r  operator_str_CTagneeds_fixed_stride_ordertagsrA   flexible_layout_libraryr-  
is_builtinr   rI   r  r  rG   propagate_mutation	Exceptionr2   with_traceback__traceback__)r6  r   ri   rj   	base_nameerrordecided_constraintrv  layout_constraintsold_args
old_kwargsouter9  s                rk   r   GraphLowering.call_functionZ  s   X%%%*T!WtUD>Q*R*R7(v>> &%**"="=>>71D
 D
 4*6**"fejj&;&;<< (/0< ++C03I//f5$G*** *6(33 .5 
 9&&vV< 88<<88FKKG)@&XX\\11V[[@)-& ~~++66v>>4CSCS-?* .2* fK#VH-- 0fEE26HH	IIj)F"34!!A!9&!A!'+*1!EdEfEF#T4V4C! ''8ZNJ 	#At<KK	s   A6J; ;
K0&K++K0c                d    [        U R                  5      S:H  =(       a    U R                  S   S:*  $ )z=
True if this is a small constant attr that will be inlined.
r&   r      )rE  shape)ts    rk   can_inline_constant!GraphLowering.can_inline_constant  s(    
 177|q 4QWWQZ1_4rl   c                   [        U R                  U5      n[        U[        R                  R
                  5      (       aB  XR                  ;   a  U R                  U   $ [        R                  " XS9nXPR                  U'   U$ [        U[        R                  R                  5      (       a&  X@R                  U'   SU R                  U'   [        XS9$ [        U[        5      (       a;  UR                  U R                  U'   SU R                  U'   [        XR                  S9$ [        U[        R                   5      (       d   e["        R$                  R&                  (       d%  ["        R(                  (       d  [+        U5      (       a  U R-                  XA5      $ [/        5          UR0                  S:X  a6  [3        UR5                  5       UR6                  UR8                  S9sS S S 5        $ U R;                  U5      (       aX  [<        R?                  S[A        U5      5        SSK!J"n  U" URG                  5       UR6                  UR8                  S	9sS S S 5        $  S S S 5        U R-                  XA5      $ ! , (       d  f       N= f)
N)r  graph_moduler   r4  rh   )r  r  r   zInlining constant: %s r&   )rC  )r  r   )$r   r'  rn   rt   fxr_   r   r(   SubgraphrP  ScriptObjectr   r   r?   r   real_objr   r'   r  r  always_keep_tensor_constantsrJ   r*  r#   rf  r5   itemr  r   rh  r  r  r   loweringrC  tolist)r6  r   ri   rj   r  ra  rC  s          rk   get_attrGraphLowering.get_attr  s    "$++v6eUXX1122,,,**622++6>C*-'JeUXX2233/4$$V,*,D'"<</00/4~~D$$V,*,D'"nnEE%....<<22(//++E::]{{b **,ekk%,, ]
 ''..		2CK@,ellnEKKU ]
 /  ''66 ]s   !=I0(A$I00
I>c                    [         erg   AssertionErrorr6  r   ri   rj   s       rk   call_moduleGraphLowering.call_module      rl   c                    [         erg   rw  ry  s       rk   call_methodGraphLowering.call_method  r|  rl   c                	  > [         TU ]  XU5      n[        U[        [        45      (       d  U4n[        U[        [        45      (       d   [        U5      5       e[        S U 5       5      (       d   U5       e[        R                  R                  R                  S   n[        U[        [        45      (       d  U4nU Vs/ s H"  n[        R                  R                  U5      PM$     nn/ n[        U5      [        U5      :X  d   e[        XE5       GH\  u  p[        U[        R                   [        R"                  45      (       d  UR%                  U5        MH  [        UR'                  5       [        R(                  5      (       a0  UR%                  [        R                  R+                  U5      5        M  [,        R.                  R                  R1                  U5      (       d   eU	R2                  S   R5                  5        V
s/ s H:  n
[        U
[,        R6                  5      (       a  U
R8                  R:                  OU
PM<     nn
UR%                  [        R<                  " X5      5        GM_     Xpl        U R@                  RC                  5        GH  u  p[        U[D        5      (       a  M  [        U[         [F        RH                  [,        R.                  R                  RJ                  45      (       d   S[        U5       35       e[        U[         5      (       d  M  URM                  5         [        U[         5      (       d   eURN                  n[        U[        RP                  5      (       d   eUnURN                  n[        U[R        5      (       a  URU                  5       U:w  d  GM  [        RV                  RY                  XRZ                  U   5         U R>                  R]                  U5      nU RZ                  U   U R>                  U'   GM     U Ra                  5         [b        Re                  SU Rf                  U Rh                  b  U Rh                  5        g S5        g s  snf s  sn
f ! [^         a     GM  f = f)Nc              3  >  #    U  H  n[        U[        [        R                  [	        S 5      [        R
                  [        R                  [        R                  R                  R                  [        [        R                  [        R                  4	5      v   M     g 7frg   )rn   r>   r(   r5   r  r  ro   r   logicboolalgBooleanr6  EffectfulKernelShapeAsConstantBuffer)r}   r  s     rk   r   'GraphLowering.output.<locals>.<genexpr>  sv      
  KKJ%%JJKK''//&&,,
  s   BBr   rt  z'Unsupported inductor graph input type: zGForce channels last inputs for %d conv for the current graph with id %dr   )5r   r   rn   r  r  r  r  rY   r  r  ri   r(   ExternKernelrealize_inputrE  zipr>   BaseViewr  get_output_specCommBufferLayout
copy_inputrt   r  is_storage_and_layoutr   rC  rH  r   rI  try_match_insignificant_stridesr   r   r  r?   ro   r   r=  r  rU  r=   r:   get_nameMutationLayoutSHOULDREMOVErealize_intor   r  
ValueErrorfinalizer  r  r   r  )r6  r   ri   rj   resultfx_node_argsr  result_correct_stridesrfx_nodesmeta_stridesr  r  value_storage_boxindr9  s                   rk   r   GraphLowering.output  s    f5&5$-00YF&5$-00>$v,>0 
 
 
 
 	  !	 
$ ww++003,66(?L<BCFq"////2FC!#< CK///f3JAa",,!<==&--a0A--/1D1DEE '--boo.H.H.KL ))??BBBB %\\%0779 9 $.a#>#>AFFKKAE9    '--66qG# 4* 4,,224KD%11	5::u/A/A/P/PQ  G8eFG  eY//MMOeY////JJEeR]]3333 %JJEe[11U^^5E5M--::55d;,,223DEC.2.H.H.ND&&s+- 54 			U''!]]6DMM	
 =?	
m D" B " s   )Q+AQ07Q55
RRc                J    U R                    H  nUR                  5         M     g rg   )r   decide_layout)r6  r  s     rk   r  GraphLowering.finalizeM  s    <<C  rl   c              #  \   #    U R                   n Xl         S v   X l         g ! X l         f = f7frg   )r  )r6  r   olds      rk   set_current_nodeGraphLowering.set_current_nodeQ  s*     	$ $ #s   ,
! ,),c              #  P   #    U R                   n S v   Xl         g ! Xl         f = f7frg   r  )r6  r  s     rk   set_current_wrapper_code&GraphLowering.set_current_wrapper_codeZ  s$     	$ #s   & &#&c                  ^  [        U5      [        U5      :X  d   e[        U5      [        U5      :X  d   eUR                  [        R                  R                  R
                  L Ga  UR                  S   n[        U[        5      (       d   e[        R                  R                  R                  US   US   UR                  5        VVs0 s H@  u  pxU[        U[        R                  R                  5      (       a  UR                  S   OU_MB     snn5      n	U	 HY  n
US   U
   nUS   U
   nXL a  M  T R!                  [        R                  R"                  R$                  R&                  X40 5        M[     g[        UR                  [        R(                  R*                  5      (       d   e        SU 4S jjnUR                  R,                  n[/        [1        X$5      5       H   u  nu  pUR2                  U   nU" UX5        M"     UR2                   Vs0 s H  nUR4                  U_M     nnUR7                  5        H  nUU   nUU   nUU   nU" UX5        M     gs  snnf s  snf )aP  Propagate mutations on new_args/new_kwargs back to old_args/old_kwargs.

Assumes we may have cloned old_args/old_kwargs into new_args/new_kwargs
and then called fx_node(*new_args, **new_kwargs).

If fx_node mutates any of new_args/new_kwargs, and they are different from
old_args/old_kwargs, then we need to update the original tensor.
rj   
kernel_idxconstant_args_idxrt  Nc                b  > XL a  g U R                   b  U R                   R                  (       a  [        U[        R                  5      (       a  U4nU4n[        X5       HK  u  p4X4L a  M  TR                  [        R                  R                  R                  R                  X440 5        MM     g g g rg   )
alias_infois_writern   r(   IRNoder  r   rt   r  r   copy_r  )
schema_argold_argnew_argold_arg_itemnew_arg_itemr6  s        rk   maybe_propagate9GraphLowering.propagate_mutation.<locals>.maybe_propagate  s     !$$0Z5J5J5S5S gryy11&jG&jG25g2G.L#3 &&		,,44|6RTV 3H 6T0rl   )r  ztorch._C.Argumentr  	ir.IRNoder  r  r   r  )rE  r   rt   r  higher_ordertriton_kernel_wrapper_mutationrj   rn   rL  r   r   get_mutated_tensorsr  rl  r"   r   r   r   r  r  r   r   _schemar   r  	argumentsr  r   )r6  r  r_  r`  new_args
new_kwargsrj   kvmutatedr  r  r  r  schemar   r  argschema_kwargskeys   `                   rk   rW   GraphLowering.propagate_mutationb  s=     8}H---:#j/111>>UYY33RRR^^H-Ffd++++--@@TT<(./ !' . 
1ehhmm(D(Dqvve}!K .G  $X.t4$X.t4%""599>>#7#7#?#?'ASUWX   '..%***?*?@@@@	)	4=	HQ		( '''0X1H'I#C#'))#.JJ9 (J 392B2BC2B332BC??$C oG oG&s+JJ9	 %WR Ds   AI%I+c                F'  >^ ^^-^.^/ S*U4S jjnSSK Jn  [        T R                  5      m.[        T R                  5      m/[        T/5      nTR                  S:H  nU(       a!  T R                  T5      u  pgU[        Xg5      -  n[        R                  R                  U5         T R                  T5         [        R                  " T5         TR                  S:X  am  TR                  [        R                   LaP  [#        T5      (       d  UR%                  SSU4S j5      (       a$  U" S5        ['        TR                  S	S
9" W0 WD6nGOTR                  S:X  a  TR                  [(        R*                  R,                  R.                  L a  [0        R2                  S:w  a  U" S5        [0        R2                  S:X  a  Wn	Wn
TR4                  R7                  S5      =n(       a  US   nUS   n[9        XgX5      u  pgO[;        T/UQ70 UD6u  pgT R=                  TR                  Xg5      nT R?                  TXXg5        O[A        S[0        R2                   35      e[C        TR                  5      (       a  U" S5        [E        TR4                  S   [(        RF                  [(        RH                  [(        RJ                  45      (       a$  TR4                  S   RL                  RN                  nO'[P        T0T ]  T5      nOU" S5        [P        T0T ]  T5      n[(        R*                  RT                  RV                  RX                  [(        R*                  RT                  RZ                  RX                  [(        R*                  RT                  R\                  RX                  [(        R*                  RT                  R^                  RX                  [(        R*                  RT                  R`                  RX                  /m-[c        S TRd                   5       5      nTT Rf                  ;   n[c        U-4S jTRd                   5       5      nTR4                  R7                  SS	5      (       a  [E        U[h        5      (       a  URk                  5         TR4                  S   Rm                  5       n[(        Rn                  Rp                  Rr                  " U6 nURu                  5       U:w  a=  U(       d6  [        Rv                  " U5      n[        Rx                  R{                  UU5      nU(       aN  [E        U[h        5      (       a9  [E        UR|                  [        R~                  5      (       a  URk                  5         U(       d  U(       Gaq  [E        TR4                  S   [(        R                  5      (       GaD  U(       a  T Rf                  R7                  T5      nOTR4                  S   Rm                  5       nUGb   [        U5      S:  Ga  [0        R                  =(       d    U(       + =(       a    U(       + n[(        R                  R                  TR4                  S   5      n[        [        U5      5      S:  nU(       d~  U(       aw  [        UR                  5       5      S:X  aZ  TT R                  ;   aJ  U(       dC  U(       d<  [        R                  R                  UR                  5       [(        R                  5      nU(       d  [        U5      (       a  TR4                  S   R                  5       (       d)  [E        UR|                  [        R~                  5      (       a4  [        Rx                  R{                  U[        Rv                  " U5      US9nOfU Vs/ s H:  n[E        U[(        RF                  5      (       a  URL                  RN                  OUPM<     nn[        Rx                  R                  UUUS9n[        [        TRd                  5      5      nUS:  Ga:  [E        U[h        5      (       Ga$  TRd                   GH  nUR                  [        ;   Ga  UR                  5         [(        R*                  RT                  R                  RX                  [(        R*                  RT                  R                  RX                  [(        R*                  RT                  R                  RX                  /n/ nT R                  (       d=  UR                  [(        R*                  RT                  R                  RX                  5        [(        R                  R                  (       Ga  U[(        R*                  R                  R                  RX                  [(        R*                  R                  R                  R                  [(        R*                  RT                  R                  RX                  [(        R*                  R                  R                  RX                  [(        R*                  R                  R                  R                  [(        R*                  R                  R                  R                  [(        R*                  R                  R                  R                  /-  nU[(        R*                  R                  R                  RX                  [(        R*                  R                  R                  R                  [(        R*                  R                  R                  R                  [(        R*                  R                  R                  RX                  [(        R*                  R                  R                  RX                  [(        R*                  R                  R                  R                  /-  n[(        R                  R                  (       a2  U[(        R*                  R                  R                  RX                  /-  nUR                  U;   aN  [        Rx                  R{                  U[        Rv                  " TR4                  S   Rm                  5       5      SS9nUR                  U;   af  TUR                  S   L aT  [        Rx                  R{                  U[        Rv                  " [        TR4                  S   R                  5      5      5      nUR                  S:X  d  GM  [E        UR|                  R|                  [        [        45      (       d  GM  URk                  5         GM     UR                  [        TRd                  5      5        [E        U[h        5      (       a%  UR                  5       (       a  UR                  5         [E        U[h        5      (       an  [E        UR|                  [        5      (       aO  UR|                  R|                  n[E        U[        5      (       a$  UR                  SS9(       a  URk                  5         S S S 5        S S S 5        S S S 5        [E        W[h        5      (       GaK  [E        UR|                  [        R                  5      (       Ga!  [E        UR|                  R|                  [        R                  5      (       a(  UR|                  R|                  R                  ST5        GO[E        UR|                  R|                  [        R                  5      (       Ga  UR|                  R|                  R                  ST5        [E        UR|                  R|                  [        R                  5      (       an  [E        UR|                  R|                  R|                  [        R                  5      (       a1  UR|                  R|                  R|                  R                  ST5        O[E        UR|                  R|                  [        R                  5      (       a  UR|                  R|                  R                  (       ds  [E        UR|                  R|                  R                  S   [        R                  5      (       a3  UR|                  R|                  R                  S   R                  ST5        T R                  U5        [
        [        R                     " 5       nT R                  T.S   H  nUUR                  5       -  nM     T R                  T/S   H  nUUR                  5       -  nM     S+U.U/U 4S jjn TR                  S:w  GaM  [        R                  R                  R                  n!S,U 4S  jjn"U GHh  n#T R                  R                  U#/ 5      n$U!R                  U#   n%U!R                  5       GR                  U%5      (       d  S-S! jn&U&" U%GR                  5      (       a'  U"" U#U%GR                  :  U# S"U%GR                   35        U&" U%GR                  5      (       a'  U"" U#U%GR                  :*  U# S#U%GR                   35        U$ H  n'[        U'RN                  5      n(U(T GR                  -
  n)U)(       a>  G[	        U)G[
        S$9n*T R                  GR                  U*/ 5      R                  U'5        Mm  U"" U'RN                  U'RN                   5        M     GMk     T =GR                  U-  sl        G[        [        R                  R                  R                  TR4                  R7                  S%0 5      5      n+U+c   e[        S& U+GR                  5        5       5      n,UU,:  d'   S'U S"U, S(TGR                  5        S)U " 5        35       eU$ s  snf ! , (       d  f       GNn= f! , (       d  f       GNx= f! , (       d  f       GN= f).Nc                Z   > [         R                  S[        TR                  5      U 5        g )Nzlowering %s %s)r  r  r   format_node)msgrv  s    rk   r  %GraphLowering.run_node.<locals>.debug  s    II&
1==(A3Grl   r   )CompilerBisectorr   inductorrE   c                    > [        T 5      $ rg   )reprr  s   rk   <lambda>(GraphLowering.run_node.<locals>.<lambda>  s	    arl   rC   F)add_to_fallback_setrT  -user_defined_triton_kernel_layout_constraintsrR  arg_kwarg_valsr&   z1Unknown triton_kernel_default_layout_constraint: r   rt  r   c              3  >   #    U  H  oR                   S :H  v   M     g7f)r   Nr   )r}   r  s     rk   r   )GraphLowering.run_node.<locals>.<genexpr>  s     DGDGGx/Gs   c              3  @   >#    U  H  oR                   T;   v   M     g 7frg   )r   )r}   r  as_strided_opss     rk   r   r  	  s      *:A$~-'   inductor_realize_to_strides   )allow_paddingTr   d   )	thresholdorigin_nodec                    > TR                   TS   V s/ s H  n SU R                  5        SU  S3PM     nn UR                  S TR                  TS   5       5        SR	                  U5      $ s  sn f )Nunbacked_symbol_defs= in:

c              3  P   #    U  H  nS UR                  5        SU S3v   M     g7f)r  r  r  N)get_unbacked_symbol_defs)r}   r   s     rk   r   BGraphLowering.run_node.<locals>.format_new_defs.<locals>.<genexpr>  s1      ?B ((C(C(E'FfRDPRS?s   $&z***
)r   r  extendr   r   )r  r  buffer_watermarkoperation_watermarkr6  s     rk   format_new_defs/GraphLowering.run_node.<locals>.format_new_defs  s      <<(8(9::C ((D(D(F'GvcURTU:   HH //*=*>?  <<?"s   !A,r5  c                t   > [         R                  " X5      nTR                  USS9  TR                  U5        g )NTr  )r(   AssertScalarr  r  )rI  r  	assert_opr6  s      rk   make_assert+GraphLowering.run_node.<locals>.make_assert  s2    OOD6	$$Y$>''	2rl   c                `    U [         [         * 4;   a  g [        U 5        g! [         a     gf = f)NFT)r%   r6  	TypeError)r  s    rk   is_convertible.GraphLowering.run_node.<locals>.is_convertible  s5    & 11#()F#'( )#()s     
--z >= z <= )r  unbacked_bindingsc              3     #    U  H8  n[         R                  R                  R                  R	                  X5      v   M:     g 7frg   )rY   r  r8  unbacked_renamingsr   )r}   r  s     rk   r   r    s5      31A %%88<<QBB1s   A Azfailed z (inductor >= fx)
fx node is: z
new operations are:

)r  r   r   r  r   r   )rI  r    r  r   r   r  )r  r   r   r  )!torch._inductor.compiler_bisectorr  rE  r   r   r$   r   fetch_args_kwargs_from_envrO   r(   r  current_originsr  rY   r   rJ  rK  rD   disable_subsystemrC   rt   r  r  r  r'   'triton_kernel_default_layout_constraintr   r   r@   rA   r   rW  r   r   rn   rH  SymFloatSymBoolr   rI  r   run_noder   
as_stridedr  as_strided_as_strided_scatterresize	resize_asr   r  r   r>   r  rC  r  r-  any_is_symbolicmaybe_get_strideget_stride_orderr  require_stride_orderrU  r  r   r   _prims_commonis_non_overlapping_and_denser   rW  r  FlexibleLayout stride_ordered_for_memory_formatchannels_last_is_viewrequire_exact_stridesrH   realize_hintr   mm_int_mmr   r  r   rP  _has_mkldnnr  _linear_pointwisebinarymkldnn_rnn_layeronednnqlinear_pointwiserC  binary_tensor_convolution_pointwise_convolution_pointwise_ _convolution_transpose_pointwiseqconv2d_pointwisehas_mklmkl_mkl_linearri   r   rf  r;   r<   
mark_reusehas_exceeded_max_readsr=   has_large_inner_fnLoops_post_init_setattrBufferrV  MultiOutputindicesinputsr  ro   rp   r  r  r   r8  r   popvar_to_range _default_unspecified_value_rangeissubsetlowerupperr   r   r   
setdefaultr   r   r  )1r6  rv  r  r  originsis_call_functionri   rj   r  r_  r`  r  inp_args
inp_kwargs	is_outputis_user_visibleis_input_for_as_stridedrB  sym_stridesstride_orderr  denseunbacked_symbols_in_stridesr  	num_usersr  need_fixed_layoutneed_fixed_channels_last_layoutcurrnew_unbacked_defsr  r   r  r8  r  i0rasvrr  rafvsmissingi1r  renamed_unbacked_bindingsr  r  r  r9  s1   ``                                           @@@rk   r  GraphLowering.run_node  s/   	H 	Gt||,!$//2 $.qc?44?2::1=LD~d33GII%%g.!!!$q! 'HHH$4$449!<<'99"K 
 ())!((N
 'HH		 6 6 U UUBBFWWEFBB12  $H!'J)*4D)EE~E#1!#4%3A%6
'@ ((f (?q'R4'R6'R!//$GF++AxTR&KFLzLzK{|  !** '(FF5MELL%..%--#P  VVE]//44F"W-a0Fb	)!, 		))11		**22		1199		%%--		((00N DAGGDDI4#C#CCO&) *:;''* '# vvzz7??J	E E  &&-..0#oo33CCWM**,7#%#6#6w#?L__AA&,WFvy11v{{BKK88  4*uu||; ; #">>BB1EGffUm224G&3w<!+;**A/.A%655 " "//LLuE 1':;a? 0 8! 12a7!@!@@ / 7"$"3"3"T"T"OO-u/B/B# 73w<< 66%=1133z"KK8 8 &(__%I%I & " 3 3G <.; &J &F *1')0A 0:!U\\/J/JPQ Q)0 $ ' &(__%J%J &} &K &F Jqww/0I1}FI!>!>GGD{{&;;++- "IINN??GG!IINN--55!IINN22::-)
 ;=7#-44UYY^^5O5O5W5WX 88///- %		 0 0 B B J J %		 0 0 B B I I %		 ? ? G G %		 0 0 B B J J %		 0 0 B B I I %		 0 0 B B I I %		 0 0 B B P P2 - < %		 0 0 G G O O %		 0 0 G G N N %		 0 0 H H O O %		 0 0 Q Q Y Y %		 0 0 B B J J %		 0 0 B B I I@ ;  %xx// 1eiimm6O6O6W6W5X X 1;;*;;%'__%I%I & " 3 3AFF5M4H4H4J K.2 &J &F !KK+JJ !TYYq\ 1%'__%I%I & " 3 3$B166%=CVCV$W!"&F ww(*%fkk&6&6I8NOO"NN,w $| !!#agg,/ &),,1N1N1P1P ##% &),,FKK1T1T{{''dI.....=(I " % /` fi((ZR]]-S-S&++**BHH55  33M1EFKK,,bii88  33M1Efkk..0A0ABBzKK$$))288H H KK$$))<<]AN v{{//@@"KK,,44!&++"2"2"9"9!"<biiHH((//2EEmUVWv&&u||46<< 0 12C!=!=!?? 3//"5"67B!<!<!>> 8		# 		# 44= * ((22I3
 (((,,R4++B/ AACLLRPP) &bhh//#B"((Nrd$rxxj4IJ%bhh//#B"((Nrd$rxxj4IJB/8C!D$?$??G c2**55b"=DDRH#BGGy: ) (: ''+<<' 9  **AFFJJ7JB,O! %000 )3 3*//13 )% %(AA +,D1J0K L }}/ 0**9*;)<>A 'U "! %$ /.ss   !AN3AM?
Z>AM-AAM(
	TAM--AM-C6AM-AM?ANM(AM-M-
AM<M7AM?M?
AN	N	ANN
AN c                    [         R                  (       a  [        S5      e[        R                  S;  a  [        S[        R                   35      eg )NzC++ codegen is disabled)linuxdarwinwin32zUnsupported platform )r'   disable_cpp_codegenr1   sysplatformr=  s    rk   !validate_can_generate_cpp_wrapper/GraphLowering.validate_can_generate_cpp_wrapper)  s@    %%()BCC<<;;(+@)OPP <rl   c                4   U R                   R                  5       nUR                  S5        UR                  S5        [        U5      S::  d%   SR	                  SR                  U5      5      5       e[        U5      S:H  nU(       a  SOUR                  5       U l        U R                  (       a  U R                  5         [        U R                  5      U l        [        U R                  U R                  5      nUc   SU R                   S35       eUR                  UUUU5      U l        U R                  (       a_  U R                  R                  R                   U R                  l        U R                  R                  R"                  U R                  l        g g )	Nr   r   r&   zDoes not support mixing {}+r   zDevice z not supported)r   r   discardrE  formatr   r.  r   r  rU  r-   r  r.   r(  r  r   _names_itersrc_to_kernel)r6  is_subgraphr  parent_wrapper_codepartition_signaturesr   only_cpuwrapper_code_gen_clss           rk   init_wrapper_codeGraphLowering.init_wrapper_code0  so    ((--/U#V$< A% 	
'C'J'JHH\"(
 	
% |$)$,5,2B2B2D2241$2B2BC=d.. 
 $/ 	
d&&'~6	
/ 177 	
  -1,=,=,J,J,V,VD)!!..<< +	 rl   c                  ^  [        U 4S jS 5       5      (       Gal  [        R                  R                  (       a  T R	                  5       $ ST l        T R                  5       R                  n    S
S jn[        R                  R                  R                  5       nUb  [        [        R                  [        5      (       d  UR                   (       a  UR                   R#                  5         UR$                   Vs/ s H
  nUc  M  UPM     nn[&        R(                  " U[        R                  5       Vs/ s H  nU" U5      PM     nnOU[        [        R                  [        5      (       a  T R*                  O[        R                   Vs/ s H  nU" U5      PM     nnT R,                  (       a  SSKJn  [3        T R4                  5       V	V
s/ s H<  u  pU
T R,                  ;   d  M  [        Xy   [        R6                  5      (       d  M:  U	PM>     nn	n
U H3  n	Xy   n[        U[        R6                  5      (       d   eU" U5      Xy'   AM5     [        R8                  R:                  R=                  5          U" U5        SSS5        AST l        T R>                  R#                  5         T R@                  R#                  5         T RB                  R#                  5         [        RD                  RF                  RH                  R#                  5         [        RD                  RF                  RJ                  R#                  5         [L        RN                  " 5         [        RP                  " S	S05         T R	                  5       sSSS5        $ T R	                  5       $ s  snf s  snf s  snf s  sn
n	f ! , (       d  f       GN5= f! , (       d  f       g= f)zA
For GPU, Triton kernels are autotuned and stored as cubin files
c              3  @   >#    U  H  oTR                   ;   v   M     g 7frg   )r   )r}   r   r6  s     rk   r   9GraphLowering.codegen_with_cpp_wrapper.<locals>.<genexpr>`  s     Iv***r  )cudaxpuFc                N   U c  g [        U [        R                  [        R                  45      (       a  U R                  R
                  $ [        U [        5      (       a  [        U 5      $ [        U [        R                  5      (       d   S[        [        U 5      5      -   5       eU $ )Nz&Unknown type when creating real inputs)rn   rt   rH  r  r   hintr   r   r   r   r  )r  s    rk   materialize;GraphLowering.codegen_with_cpp_wrapper.<locals>.materializej  s     y##Aenn'EFF vv{{*#Az22%ay()!U\\:: Ds4PQ7|S:  !rl   Nr&   )clone_preserve_stridesTztriton.autotune_at_compile_time)r  z1Union[torch.SymInt, torch.SymFloat, torch.Tensor]r   zUnion[int, float, torch.Tensor]))r   r'   tritonautotune_at_compile_timecodegenr  compile_to_modulecallrt   _guardsTracingContexttry_getrn   rY   real_inputsrX   output_stridesclearparams_flatr1  chainr   r	  
compile_fxrm  r   r   r   r-  r.  r/  r   r   r   r  r   precomputed_replacementsinv_precomputed_replacementsr)   resetpatch)r6  compiledrk  tracing_contextparamry  r  rv  rm  r   r  r
  mutated_inps   `            rk   codegen_with_cpp_wrapper&GraphLowering.codegen_with_cpp_wrapperZ  s    IIII}}55 ||~% $) 11388!H!4!  #(--">">"F"F"H".zMM;8 8 '55'66<<> &5%@%@#%@E  %@   # "+amm!L#!LA $A!L   #K  *!--EE !//!"/#/  $A/   # &&B *343D3D)E*)EIC4#6#66  '{'7F )E ' *  2 '2&6)+u||DDDD+A++N('  2 [[11HHJ[) K $( $$**,''--/''--/  99??A  ==CCE\\#De"LM<<> NM <<>!y#
##*& KJ NMsB   =NN7NN#N(*N(N(7	N./O .
N= 
Oc                    SSK Jn  [        R                  " SS5         U" U R                  5      U l         SSS5        g! , (       d  f       g= f)z
(Re)initializes the scheduler member.  When initializing the scheduler, no CUBIN
files should be generated (to avoid biasing any benchmarks and pessimizing
fusion decisions).
r&   )	Schedulerztriton.store_cubinFN)r  r  r'   r  r   )r6  r  s     rk   _update_schedulerGraphLowering._update_scheduler  s2     	)\\.6&t7DN 766s	   ?
Ac                  ^^ [        SSS9   U R                  5         U R                  5         [        R                  R                  U R                  U R                  R                  5        U R                  R                  U 5        U R                  R                  5         [        R	                  S[        R                  R                  5        [        R                  R                  5       nU(       a%  Uu  mm[!        SS U4S jS9  [!        SS	 U4S
 jS9  U R                  R#                  U R$                  5      nU R                  R'                  5         UsS S S 5        $ ! , (       d  f       g = f)NzGraphLowering.codegenTlog_pt2_compile_eventzFFinished codegen for all nodes. The list of kernel names available: %sartifactc                     SSS.$ )N)inductor_triton_kernel_to_post_grad_nodesjsonr  encodingrh   rh   rl   rk   r  'GraphLowering.codegen.<locals>.<lambda>  s     K$*)rl   c                 0   > [         R                  " T 5      $ rg   r  dumps)
debug_infos   rk   r  r    s    tzz*'=rl   )metadata_fn
payload_fnc                     SSS.$ )N*inductor_provenance_tracking_node_mappingsr  r  rh   rh   rl   rk   r  r    s     L$*)rl   c                 0   > [         R                  " T 5      $ rg   r  )node_mappingss   rk   r  r    s    tzz-'@rl   )r   rb  r  rY   r  draw_orig_fx_graphr&  r  r   r  push_codegened_graphrp  r  r  r0  1log_inductor_triton_kernel_to_post_grad_node_infor   generater   pop_codegened_graph)r6  provenance_infor  r  r  s      @@rk   rp  GraphLowering.codegen  s"   1N""$""$GG&&t||T^^5I5IJ2248NN""$IIX00 IIK   $! !  > !!  A &&//0A0ABF113U ONNs   EE##
E1c                   [        SSS9   UR                  U l        UR                  U l        UR                  U l        U R	                  5         U R
                  R                  5         SSS5        g! , (       d  f       g= f)a  
This is a more compact version of the `codegen()` above
where we codegen this graph as a subgraph of some parent
graph. The parent graph is passed as an argument: the
intention is to inline codegening of the subgraph in
the parent graph's wrapper code (including the generated
kerenls). The wrapper code is not finalized (via `.generate()`
call), as this will be done in the parent graph's `codegen()`.
zGraphLowering.codegen_subgraphTr  N)r   r  r  r  r  r  rp  )r6  parent_graphs     rk   codegen_subgraphGraphLowering.codegen_subgraph  sb     :RVW , 9 9D*55DO+77D""$NN""$ XWWs   AA22
B c                    Sn/ n/ nU R                   R                   HL  nUR                  5       nX-  nUR                  XES-  45        UR                  XDR	                  5       45        MN     XU4$ )Nr   r  )r  r   get_read_write_buffers_sizesr  get_estimated_runtime)r6  total_bytesnode_countsnode_runtimesr   	num_bytess         rk   count_bytesGraphLowering.count_bytes	  sy    
 NN((D99;I$K1n56  $(B(B(D!EF	 ) 66rl   zOptional[Callable[[str], None]]save_output_codec                p    [        SSSSS9   U R                  5       sS S S 5        $ ! , (       d  f       g = f)NzGraphLowering.compile_to_modulecode_genT,inductor_code_gen_cumulative_compile_time_us)
phase_namer  dynamo_compile_column_us)r   _compile_to_moduler=  s    rk   rq  GraphLowering.compile_to_module  s4    -!"&%S	
 **,
 
 
s   '
5c                  ^
^ SSK Jn  U R                  (       a  U R                  5       OU R	                  5       u  mn[
        R                  R                  (       ac  SU R                  R                  R                  5       -   U R                  R                  R                  5       -   S-   nUTR                  -   Tl        [        R                  b  [        R                  TR                  5        [        R                   " STR                  5        ["        R$                  " 5       n[&        R(                  " UTR                  S9   TR*                   VVs/ s H  u  pVXVR,                  4PM     nnnUR/                  TR                  5      u  nm
[        R                   " ST
5        [1        SU
4S	 jU4S
 jS9  [5        SSS9   UR7                  UT
U0 U R8                  EU R:                  ES9n	S S S 5        Xl        T
U l        Xpl         [
        RB                  (       a%  [
        RD                  (       a  W	RG                  SSS9  W	RH                  c   e[K        U	RH                  5        [L        R!                  SU	RH                  5        [        RN                  " SU	RH                  5        [
        RP                  (       a%  [S        SU	RH                   3[T        RV                  S9  [X        R                   R[                  U	RH                  5        [X        R                   R]                  [^        R`                  Rc                  U	RH                  5      S   S-   5        U	$ s  snnf ! [2         a    [1        SU4S jS9  e f = f! , (       d  f       GN= f)Nr&   )PyCodeCachez%"""
Compile-time auto-tuning block: 
z"""
zOutput code: 
%s)codezOutput code written to: %sinductor_output_codec                    > ST 0$ )Nfilenamerh   )paths   rk   r  2GraphLowering._compile_to_module.<locals>.<lambda>N  s
    T*rl   c                    > T R                   $ rg   r  r  s   rk   r  r  O      <#5#5rl   )r  c                    > T R                   $ rg   r  r  s   rk   r  r  H  r  rl   zPyCodeCache.load_by_key_pathTr  )linemapattrs)timesrepeatzCompiled module path: )filer   z.debug)2	codecacher  r  r  rp  r'   rn  ro  r  kernel_autotune_defsgetvaluekernel_autotune_callsr  r   r  rc   r  rK   inductor_meta_from_configrL   begin_compileline_mapstack_tracewriter   rX  r   load_by_key_pathr   r   r   r!  r"  benchmark_harnessprofile_bandwidth_outputbenchmark_compiled_module__file__re   r  r  benchmark_kernelprintrS  stderrrY   output_coder   osr  splitext)r6  r  rL  tuning_codeinductor_metaline_nor   r  r  modr  r  s             @@rk   r   GraphLowering._compile_to_module%  s   *
 04/?/?D))+T\\^ 	a ==117##88AACD ##99BBDE 	  "-|/A/A!AL))5**<+=+=>1<3E3EF&@@B**=|?Q?QR	 &2%:%:%:MG **+%:   $)),*<*<=IC!!">E &*5
 8PTU..DD4+C+CD	 / C V $##(G(G))!)< ||'''%		.=93<<H""*3<<.9

K	CLL)	RWW%%cll3A6AB
Y  	&5
 	 VUs*   M M-8M +M;M M8;
N
c                   / n[         R                  " S5      n[         R                  " S5      nU R                   H  n[        U[        R
                  5      (       a+  UR                  U R                   S[        U5       35        MM  [        U[        R                  5      (       a+  UR                  U R                   S[        U5       35        M  UR                  UR                  5       5        M     U$ )Nr   _none_shape)r1  r2  r   rn   r(   NoneAsConstantBufferr  r  r  r  r  )r6  namesshape_counternone_counterr   s        rk   get_output_namesGraphLowering.get_output_namesl  s    !* q)&&D$ 7 788		{%\0B/CDED"":":;;		{&m1D0EFGT]]_- ' rl   c                V   XR                   R                  5       ;   =(       ar    U R                   U   R                  5       S:H  =(       aK    [        U R                   U   R	                  5       5      S:H  =(       a    [        U R                   U   5      S:H  =(       d    XR                  ;   $ )Nr&   r   r   )r   r   r  rE  rW  r8   r   r  s     rk   is_unspec_argGraphLowering.is_unspec_argy  s     %%**,, B!!$'113q8BD%%d+44671<B   1 1$ 78EA	3
 222	3rl   )Qr   r  r,  r0  r(  r  r   r   r   r5  r   r"  r!  r   r   r   r   r   r   r  r  r  r  r   r$  r  r   r   r#  r   r+  r   r  r  r   r   r,   r  r   r   r   r   r   r   r/  r   r   r   r   r  r.  r  r   r
  r	  r  r  r  r  r   r-  r  r   r   r&  r4  r  r   r  r   r   r   r   r  r   r   r   r   r3  r  r   )NNNFFNNFFFNNNNNN)$r7  torch.fx.GraphModuler   zOptional[Sequence[object]]r8  zOptional[ShapeEnv]r  zOptional[int]r  r  r  r  r   zOptional[bool]r  z4Optional[Callable[[list[ir.ExternKernelNode]], Any]]r   r  r   r  r   r  r   zOptional[dict[str, int]]r   Optional[str]r   r  r   zOptional[GraphLowering]r  r  r   zOptional[Sequence[int]]r   r  )r   r  )rJ  torch.Tensorr   z=tuple[Sequence[Union[int, Expr]], Sequence[Union[int, Expr]]])rJ  r  r   z)tuple[list[sympy.Expr], list[sympy.Expr]])r   zOUnion[ir.TensorBox, ir.StorageBox, ir.Buffer, WorkspaceArg, ir.TorchBindObject]r   zSequence[Expr])r   z2Union[ir.Buffer, WorkspaceArg, ir.TorchBindObject]r   r   )r   z.Union[torch._inductor.ir.IRNode, device, None]ra  r*   r   r  )r   torch.device)r   r  r   Iterator[None]r  )r7  r_   r   r  r   r  )r  r   r   r   )r7  r  r   zlist[torch.Tensor]r  r   r   r  )r   zOrderedSet[Node])r  r   r   r  )r   r  r   r  )r   z,torch._subclasses.fake_tensor.FakeTensorMode)r  r   r   z<Optional[Union[ir.TensorBox, ir.Buffer, ir.TorchBindObject]])r  
sympy.Exprr   r  )r  r   r   z2Union[ir.TensorBox, ir.Buffer, ir.TorchBindObject])r  r   r   ztorch.dtype)r  r   r   zUnion[int, Expr])ri   r   r   r   )r   zir.Operationr   r   )r  z	ir.Bufferr  r  r   r   )r   	list[str]r   r   )r  r  r   r  )r  r   r   r  )r  r  rU  zUnion[Tensor]r   r   rg   )rU  r   r  r  r   r>   )r  r   r1  zOptional[torch.device]r   r   )r   r   ri   tuple[object]rj   dict[str, object]r   zUnion[Expr, TensorBox, None])r   r   ri   r   rj   dict[str, Any]r   r   )rg  r  r   r  )r   r   ri   z	tuple[()]rj   r  r   z8Union[Constant, TensorBox, ir.Subgraph, TorchBindObject])r   r   ri   r   rj   r   r   r   )r   r   ri   r  rj   r  r   r  )r   r   )r   r  )r  r   r_  
tuple[Any]r`  r  r  r  r  r  r   r  )rv  r   r   objectFNNN
r]  r  r  r  r^  zOptional[PythonWrapperCodegen]r_  z!Optional[GraphPartitionSignature]r   r  )r   z)tuple[ValueWithLineMap, ValueWithLineMap])r  r   r   r  )r   zVtuple[int, list[tuple[BaseSchedulerNode, int]], list[tuple[BaseSchedulerNode, float]]])r   r]   )r   r  )r  r   r   r  )C__name__
__module____qualname____firstlineno____annotations__r   r<  rO  rR  rX  r^  rb  rf  
contextlibr   ri  ro  staticmethodr   r  r  r  r  r  propertyr  r  r  r  r  r  r  r  r  r  r  r  r  r%  r*  r"  r5  r   rh  rt  rz  r~  r   r  r  r  rW  r  rU  rb  r  r  rp  r  r  r  rq  r  r  r  __static_attributes____classcell__r9  s   @rk   r   r   
  s   ""
 6:(,"&!%) "!$7;,0+/04"37)k2 k2 3k2 &	k2
  k2 k2 k2 #k2!
k2 k2 k2 k2 5k2  *!k2" )#k2$ .%k2& 'k2( 1)k2* 
+k2 k2Z1# # 	F# J	2#
#
 
#$EFE	EM>M  M 
	M4 ( ( a aF
 
 +
 	

 

60dA
D  	E$FQQ	;Q8,
8& FK (
@	
 !)6	@ 37

"/
	
 `` ` "	`
 
&`DVp 5 5/7/7 /7 "	/7
 
B/7b[
[
 [
 "	[

 
[
z  $ $ $ $H:H: H: #	H:
 H: #H: 
H:T{zQ "'+>BBF(( %( <	(
 @( 
(Tc"	2c"J	8+Z%$7
7" 9=5<-EN3 3rl   r   c                  ^   ^  \ rS rSrSrSU 4S jjr    S         SU 4S jjjrSrU =r$ )	r  i  z
Mostly a helper class for the subgraph lowering. The main goal is to call
init_wrapper_code with the subgraph related arguments.
c                2   > Xl         [        TU ]  " U0 UD6  g rg   )r  r   r   )r6  r  ri   rj   r9  s       rk   r   SubgraphLowering.__init__  s    $)&)rl   c                `   > [         TU ]  SU R                  U R                  R                  S9  g )NT)r]  r  r^  )r   rb  r  r  r  )r6  r]  r  r^  r_  r9  s        rk   rb  "SubgraphLowering.init_wrapper_code  s.     	!)) $ 8 8 	" 	
rl   )r  )r  r   ri   r   rj   r   r   r  r  r  )	r  r  r   r  __doc__r   rb  r  r  r  s   @rk   r  r    sV    
* "'+>BBF

 %
 <	

 @
 

 
rl   r  )ri   r   rj   r   r   r  )ry   r  r   zOptional[torch.dtype])r   r   r   r  )r   r_   r   r   r   z1Union[Tensor, torch._C.ScriptObject, GraphModule])r   r`   r   dict[Node, tuple[int, ...]])r   r`   r   r  r   r  )
__future__r   r  r)  r1  r  loggingrJ  r  r  rS  r  collectionsr   r   typingr   r   r   r	   r
   r   ro   r   rt   torch._loggingtorch.fxr   r   torch._decompr   torch._dynamo.utilsr   r   "torch._library.fake_class_registryr   r   r   torch._prims_commonr   r   torch._subclasses.fake_tensorr   %torch.fx.experimental._backward_stater   torch.fx.experimental.sym_noder   r   %torch.fx.experimental.symbolic_shapesr   r   r   r   r   r    r!   torch.fx.noder"   torch.utils._mode_utilsr#   torch.utils._ordered_setr$   torch.utils._sympy.numbersr%   r   r'   r(   r)   codegen.commonr*   r+   r,   r-   r.   r/   r0   excr1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r>   r?   rr  r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   runtimerK   runtime.autotune_cacherL   r   rM   r-  rN   rO   rP   rQ   rR   rS   rT   rU   rV   rW   virtualizedrX   rY   collections.abcrZ   r[   r\   typesr]   torch._higher_order_ops.effectsr^   r_   torch.fx.graphr`   codegen.wrapperra   r  rb   torch._inductor.codecacherc   	getLoggerr  r  _logginggetArtifactLoggerr  r  r   r2  r  r  torch._inductor.fb.utilsre   rz   r   r   r   r   rl  Interpreterr   r  rh   rl   rk   <module>r2     s   "       	 	 
  # % J J        , 4 ? 7 5 ? L    / / - ! !          $ 8 &   ( << ;$$5, 5 !00<Hyy~~$??, 	8(
	!6
J/J/+FJ/	J/Zw3EHH(( w3t;
} 
rl   