
    ^jM-                        d dl Z d dlZd dlZd dlmZmZmZ d dlmZm	Z	m
Z
  e	d      Z e
d      Zd dlZd dlmZ  ej                   e      ZdgZdeeef   d	eeef   fd
Ze j*                  d	ed   fd       Zdej.                  j0                  ded	ej.                  j0                  fdZdej.                  j6                  d	efdZ G d d      Z G d d      Zdej.                  j0                  d	ej.                  j0                  fdZ dej.                  j0                  d	ej.                  j0                  fdZ! ed      dej.                  j0                  de"d	ej.                  j0                  fd       Z#y)    N)CallableIteratorMapping)Any	ParamSpecTypeVar_P_R)compatibilityregional_inductorfnreturnc                      t        j                         dt        j                  dt        j                  dt
        f fd       }|S )Nargskwargsr   c                       | i |S N )r   r   r   s     l/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/fx/passes/regional_inductor.pyinnerz_dummy_wrapper.<locals>.inner   s    4"6""    )	functoolswrapsr	   r   r   r
   )r   r   s   ` r   _dummy_wrapperr      sB    __R#RWW #		 #b # # Lr   c               #      K   t         j                  j                  j                  d      5  d  d d d        y # 1 sw Y   y xY ww)NF)'remat_using_tags_for_fwd_loss_bwd_graph)torch
_functorchconfigpatchr   r   r   &_disable_remat_for_regional_subcompiler!      s<      
			 	 	&	&u	&	U   s   +A;	AA Agmprefixc           
         ddl m} | j                  j                  D ]  }|j                  dk(  s|j
                  j                  |      s0g }|j                  D ]H  }t        |d      r-d|j                  v r|j                  |j                  d          <t        d|        t        | |j
                        }i }|j                  j                  D ]r  }t        |d      s|j                  j                  dd       s-|j                  d   }	t        |	t              sMd|	v sR|	d   }
t        |
t              shd	|
v sm|
d	   } n t         j#                  d
|j
                  |       dd lmc m} |D ]  }t        ||      rt+        d| d       |j-                  |      5  t/               5  t0        j2                  j4                  j7                  |j
                        5  t0        j&                  j9                  ||dd      }d d d        d d d        d d d        t        |      st;        dt=        |             t?        |      }| j                  jA                  |      5  | j                  jC                  ||jD                  |jF                        }|j                  |_	        |jI                  |       | j                  jK                  |       | jL                  |j
                  = d d d         | jO                          | S # 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   "xY w)Nr   )AOTCompiledArtifactcall_modulemetavalz7Partition is bad because non fake tensor value is seen customcompile_with_inductorinductor_configsz0Compiling submodule %s with inductor options: %szInvalid inductor config key 'z_' in regional_inductor annotation. Available config keys can be found in torch._inductor.configfrom_tracing_contextT)dynamic_shapesaotz"Expected AOTCompiledArtifact, got )r   r   )("torch._inductor.standalone_compiler%   graphnodesoptarget
startswithall_input_nodeshasattrr'   appendRuntimeErrorgetattrget
isinstancedictloggerinfotorch._inductor.config	_inductorr   
ValueErrorr    r!   r   fx	traceback$_set_regional_inductor_subgraph_namestandalone_compileAssertionErrortyper   inserting_aftercall_functionr   r   replace_all_uses_with
erase_node_modules	recompile)r"   r#   r%   nodefake_inputsinp_nodesubmodinductor_optionssub_noder)   compile_valueinductor_configkeycompiled_fncompiled_submodnew_nodes                   r   _compile_submodrZ   *   s	   F G-77m#(>(>v(FK 00 8V,(--1G&&x}}U';<&QRZQ[\ 	 R-F
 02"LL.. 
"8V,1B1B8T1R%]]84F!&$/4Kv4U(./F(G&}d; 2m C/<=O/P,!
" KKB  =< ( 4$7u =W X   %%&67
68
 ""GGT

 $oo@@#9	 A 
 
 
 k+>?$8k9J8KL  -[9O))$/ -8811#$))DKK 2  !%		**84##D)KK,- -AG-R LLNI7
 
 
 
 
 
"- -sI   &L(14L%$L		LL(*BL5LLL% L((L2	5L?	rN   c                     t        | j                  dvxr= t        | d      xr/ | j                  j	                  dd       xr d| j                  d   v       S )N)placeholderoutputr'   r)   r*   )boolr2   r6   r'   r:   )rN   s    r   _needs_inductor_compiler_   z   sZ    00 	;D&!	;IIMM(D)	; $tyy'::	 r   c                   X   e Zd ZdZedej                  j                  dej                  j                  fd       Ze	 d	dej                  j                  de	e
   dz  dej                  j                  fd       Zdej                  j                  dej                  j                  fdZy)
_RegionScooperzK
    Scoops out the inductor marked regions. It does NOT compile them.
    r"   r   c                 *   ddl m} ddlm} ddlm} t               }i }| j                  j                  D ]e  }t        |      s|j                  d   d   }t        |t              r
d|v r|d   }n|}|j                  |t                     j                  |       g |st         j#                  d       | S d	t        t$        j&                  j(                     d
t*        t,        t.        t$        j0                  j2                  f   t$        j&                  j(                  gt4        f   fd}	g }
|j7                         D ]K  } | |	|            } || |d      }|j9                         D ]  }|
j;                  |j                          M  || |
dd      S )Nr   )CapabilityBasedPartitioner)create_op_support)fuse_by_partitionsr)   r*   inductor_regionzNo inductor marked nodes foundregion_nodesr   c                      dt         t        t        j                  j                  f   dt        j
                  j                  dt        f fd}|S )N_submodulesrN   r   c                     |v S r   r   )ri   rN   rg   s     r   is_node_supportedzN_RegionScooper.scoop_regions.<locals>._is_in_region.<locals>.is_node_supported   s     |++r   )r   strr   nnModulerB   Noder^   )rg   rk   s   ` r   _is_in_regionz3_RegionScooper.scoop_regions.<locals>._is_in_region   sB    ,$S%((//%9:,BG((--,,
 %$r   T)allows_single_node_partition__marked_inductor_submod)r#   always_return_tuple)!torch.fx.passes.infra.partitionerrc    torch.fx.passes.operator_supportrd   !torch.fx.passes.utils.fuser_utilsre   objectr0   r1   r_   r'   r;   r<   
setdefaultsetaddr=   r>   r   rB   ro   r   r   rl   rm   rn   r^   valuespropose_partitionsr7   )r"   rc   rd   re   _DEFAULT_REGIONregionsrN   rT   ridrp   all_partitionsrg   supportpartitioner	partitions                  r   scoop_regionsz_RegionScooper.scoop_regions   ss   PFH
 !(46HHNN 
	9D&t, $		( 34K L}d3)]:'(9:C)C""3.2248
	9 KK89I	%ehhmm,	%wsEHHOO34ehhmmDdJK	% AC#NN, 	7L'l(CDG4G$K );;= 7	%%ioo67	7 "- $	
 	
r   N
_processedc                    |
t               }| j                  j                  d      D ]  }t        |      rt	        | |j
                        }t        |t        j                  j                        sJt        |      |vsX|j                  t        |             t        j                  ||        t        j                  |       S )Nget_attrr2   )ry   r0   
find_nodesr_   r9   r3   r;   r   rB   GraphModuleidrz   ra   recursively_scoop_regionsr   )r"   r   rN   rQ   s       r   r   z(_RegionScooper.recursively_scoop_regions   s     JHH'':'6 	MD&t, R-F 6588#7#78vJj0r&z*88L	M ++B//r   c                     t         j                  j                  j                  d      5  t        j                  |      cd d d        S # 1 sw Y   y xY wNFenable)r   rB   rC   preserve_node_metara   r   selfr"   s     r   __call__z_RegionScooper.__call__   sD    XX22%2@ 	@!;;B?	@ 	@ 	@   A

Ar   )__name__
__module____qualname____doc__staticmethodr   rB   r   r   ry   intr   r   r   r   r   ra   ra      s     4
%((.. 4
5883G3G 4
 4
l @D0HH  0.1#ho0			0 0,@588// @EHH4H4H @r   ra   c                   D   e Zd ZdZedej                  j                  dej                  j                  fd       Zedej                  j                  dej                  j                  fd       Z	dej                  j                  dej                  j                  fdZ
y)_RegionCompilerz+
    Compiles the scooped out regions.
    r"   r   c                     ddl m} t        | d      } | j                  j	                   |              | j                          | S )Nr   )_BoxedCodeGenrr   )torch.fx.graphr   rZ   r0   set_codegenrM   )r"   r   s     r   compile_regionz_RegionCompiler.compile_region   s4    0R!;<
]_-
	r   c                    d}| j                   j                  d      D ][  }t        | |j                        }t	        |t
        j                  j                        s>|j                  j                  d      sZd}] | j                   j                  d      D ]R  }t        | |j                        }t	        |t
        j                  j                        s>t        j                  |       T |rt        j                  |       S | S )NFr&   r   rr   Tr   )r0   r   r9   r3   r;   r   rB   r   r4   r   recursively_compile_regionsr   )r"   found_regionrN   rQ   s       r   r   z+_RegionCompiler.recursively_compile_regions   s     HH''='9 	(DR-F&%(("6"67;;))*DE#'L		( HH'':'6 	DDR-F&%(("6"67;;FC	D
 "11"55	r   c                     t         j                  j                  j                  d      5  t        j                  |      cd d d        S # 1 sw Y   y xY wr   )r   rB   rC   r   r   r   r   s     r   r   z_RegionCompiler.__call__   sD    XX22%2@ 	C">>rB	C 	C 	Cr   N)r   r   r   r   r   r   rB   r   r   r   r   r   r   r   r   r      s     588// EHH4H4H   (<(< AUAU  &C588// CEHH4H4H Cr   r   c                     t         j                  j                  j                  d      5   t	               |       cd d d        S # 1 sw Y   y xY wr   )r   rB   rC   r   ra   r"   s    r   _create_inductor_marked_regionsr     s?    				.	.e	.	< $~#$ $ $   AAc                     t         j                  j                  j                  d      5   t	               |       cd d d        S # 1 sw Y   y xY wr   )r   rB   rC   r   r   r   s    r    _compile_inductor_marked_regionsr     s?    				.	.e	.	< %  $% % %r   F)is_backward_compatibleexample_argsc                 (   t         j                  j                  j                  d      5  t	        |       } t        |       } t         j                  j                  j                  rddl	m
}  ||       cddd       S | cddd       S # 1 sw Y   yxY w)a  
    Scoops out inductor marked regions and compiles them with inductor.

    Inductor options should be provided via the annotation API::

        with fx_traceback.annotate(
            {
                "compile_with_inductor": {
                    "inductor_configs": {
                        "max_autotune": True,
                        "triton.cudagraphs": False,
                    }
                }
            }
        ):
            ...
    Fr   r   )RegionalOutputCodeN)r   rB   rC   r   r   r   r   r   force_autograd_cachetorch._inductor.output_coder   )r"   r   r   s      r   r   r     sw    2 
			.	.e	.	< ,R0-b1""77F%b)    s   AB=BB)$
contextlibr   loggingcollections.abcr   r   r   typingr   r   r   r	   r
   r   torch.fx._compatibilityr   	getLoggerr   r=   __all__r   contextmanagerr!   rB   r   rl   rZ   ro   r^   r_   ra   r   r   r   rw   r   r   r   r   <module>r      s      7 7 * * t_T]  1 
		8	$
xB' HRV,<    M,, Mc Mehh>R>R M`%((-- D U@ U@p$C $CN$(<(< $AUAU $
%)=)= %%((BVBV %
 e,-3
XX -r   