ó
    EñiF"  ã                   óæ   • S SK r S SKrS SKrS SKJr  \R
                  " \5      rS/rS r	S r
S rS\R                  R                  4S jr " S	 S
5      r " S S5      rS rS r\" SS9S 5       rg)é    N)ÚcompatibilityÚregional_inductorc                 óF   ^ • [         R                  " T 5      U 4S j5       nU$ )Nc                  ó   >• T" U 0 UD6$ ©N© )ÚargsÚkwargsÚfns     €Ú^/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/fx/passes/regional_inductor.pyÚinnerÚ_dummy_wrapper.<locals>.inner   s   ø€ á�4Ð"˜6Ñ"Ð"ó    )Ú	functoolsÚwraps)r   r   s   ` r   Ú_dummy_wrapperr      s%   ø€ Ü‡_‚_�RÓô#ó ð#ð €Lr   c                 ó°   • SSK Jn  SSKJn  U" XSS9nUR	                  5       nU" UR
                  U Vs/ s H  owR                  PM     snUSS9nU$ s  snf )Nr   )ÚCapabilityBasedPartitioner)Úfuse_by_partitionsT)Úallows_single_node_partition)ÚprefixÚalways_return_tuple)Ú!torch.fx.passes.infra.partitionerr   Ú!torch.fx.passes.utils.fuser_utilsr   Úpropose_partitionsÚgraph_moduleÚnodes)	ÚgmÚsupported_opsr   r   r   ÚpartitionerÚcandidate_partitionsÚ	partitionÚpartitioned_gms	            r   Ú_partition_by_supported_nodesr$      se   € ÝLÝDá,Ø
¸ñ€Kð '×9Ñ9Ó;ÐÙ'Ø× Ñ Ù*>Ó?Ò*>˜Y�ŒÑ*>Ñ?ØØ ñ	€Nð Ðùò 	@s   µA
c           	      ó0  • SSK Jn  U R                  R                   GHÀ  nUR                  S:X  d  M  UR
                  R                  U5      (       d  M8  / nUR                   HP  n[        US5      (       a0  SUR                  ;   a   UR                  UR                  S   5        MD  [        SU 35      e   [        XR
                  5      n0 nUR                  R                   H�  n[        US5      (       d  M  UR                  R                  SS 5      (       d  M9  UR                  S   n	[        U	[        5      (       d  M_  SU	;   d  Mg  U	S   n
[        U
[        5      (       d  Mƒ  S	U
;   d  M‹  U
S	   n  O   [         R#                  S
UR
                  U5        SS KJs  Jn  U H"  n[        X¼5      (       a  M  [+        SU S35      e   UR-                  U5         [.        R&                  R1                  UUSSS9nS S S 5        [        WU5      (       d  [3        S[5        U5       35      e[7        U5      nU R                  R9                  U5         U R                  R;                  XãR<                  UR>                  S9nUR                  Ul	        URA                  U5        U R                  RC                  U5        U RD                  UR
                  	 S S S 5        GMÃ     U RG                  5         U $ ! , (       d  f       Nþ= f! , (       d  f       GMø  = f)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&   Úgraphr   ÚopÚtargetÚ
startswithÚall_input_nodesÚhasattrr(   ÚappendÚRuntimeErrorÚgetattrÚgetÚ
isinstanceÚdictÚloggerÚinfoÚtorch._inductor.configÚ	_inductorÚconfigÚ
ValueErrorÚpatchÚtorchÚ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à—‘—•ˆØ�7‰7�mÕ#¨¯©×(>Ñ(>¸v×(FÓ(FØˆKØ ×0Ô0�Ü˜8 V×,Ñ,°¸(¿-¹-Ó1GØ×&Ñ& x§}¡}°UÑ';Ö<ä&ØQÐRZÐQ[Ð\óð ñ	 1ô ˜R§¡Ó-ˆFð
  "ÐØ"ŸL™L×.Ô.�Ü˜8 V×,Ó,°·±×1BÑ1BÀ8ÈT×1RÓ1RØ%Ÿ]™]¨8Ñ4�FÜ! &¬$×/Ó/Ð4KÈvÕ4UØ(.Ð/FÑ(G˜ä& }´d×;Ó;Ø 2°mÕ Cà/<Ð=OÑ/PÐ,Ù!ñ /ô �K‰KØBØ—‘Ø ô÷ =Ð<ó (�Ü˜×4Ó4Ü$Ø7¸°uð =Wð Xóð ñ (ð !×&Ñ&Ð'7Õ8Ü#Ÿo™o×@Ñ@ØØØ#9Øð	 Að �÷ 9ô ˜kÐ+>×?Ñ?Ü$Ø8¼¸kÓ9JÐ8KÐLóð ô -¨[Ó9ˆOØ—‘×)Ñ)¨$Õ/ØŸ8™8×1Ñ1Ø#¯)©)¸D¿K¹Kð 2ð �ð !%§	¡	�”Ø×*Ñ*¨8Ô4Ø—‘×#Ñ# DÔ)Ø—K‘K §¡Ð,÷ 0Ò/ñy ðJ ‡L�L„NØ€I÷/ 9Õ8ú÷ 0×/ús   Ç!K4ÉBLË4
L	Ì
L	rN   c                 ó¾   • U R                   S;  =(       aH    [        U S5      =(       a5    U R                  R                  SS 5      =(       a    SU R                  S   ;   $ )N)ÚplaceholderÚoutputr(   r*   r+   )r2   r6   r(   r:   )rN   s    r   Ú_needs_inductor_compiler^   y   sR   € à�‰Ð0Ñ0÷ 	;Ü�D˜&Ó!÷	;à�I‰I�M‰M˜( DÓ)÷	;ð $ t§y¡y°Ñ':Ñ:ð	r   c                   ó>   • \ rS rSrSr\S 5       r\S 5       rS rSr	g)Ú_RegionScooperé‚   zC
Scoops out the inductor marked regions. It does NOT compile them.
c                 óì   • SSK Jn  SnU R                  R                   H  n[	        U5      (       d  M  Sn  O   U(       d  [
        R                  S5        U $  " S SU5      nU" 5       n[        XS5      $ )	Nr   )ÚOperatorSupportFTzNo inductor marked nodes foundc                   óN   • \ rS rSrS\R
                  R                  S\4S jrSr	g)Ú9_RegionScooper.scoop_regions.<locals>.InductorMarkedNodesé•   rN   Úreturnc                 ó   • [        U5      $ r   )r^   )ÚselfÚ
submodulesrN   s      r   Úis_node_supportedÚK_RegionScooper.scoop_regions.<locals>.InductorMarkedNodes.is_node_supported–   s   € Ü.¨tÓ4Ð4r   r   N)
Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__rD   ÚfxÚNodeÚboolrk   Ú__static_attributes__r   r   r   ÚInductorMarkedNodesre   •   s   † ð5¸%¿(¹(¿-¹-ð 5ÈD÷ 5r   ru   Ú__marked_inductor_submod)Ú torch.fx.passes.operator_supportrc   r1   r   r^   r=   r>   r$   )r   rc   Úfound_marked_noderN   ru   Úmarked_nodess         r   Úscoop_regionsÚ_RegionScooper.scoop_regions‡   sq   € åDà!ÐØ—H‘H—N”NˆDÜ& t×,Ó,Ø$(Ð!Ùñ #ö
 !Ü�K‰KÐ8Ô9ØˆIô	5 /ô 	5ñ +Ó,ˆÜ,ØÐ8ó
ð 	
r   c                 ó:  • U R                   R                  SS9 Hj  n[        U5      (       a  M  [        XR                  5      n[        U[        R                  R                  5      (       d  MU  [        R                  U5        Ml     [        R                  U 5      $ )NÚget_attr©r2   )r1   Ú
find_nodesr^   r9   r3   r;   rD   rq   ÚGraphModuler`   Úrecursively_scoop_regionsrz   )r   rN   rQ   s      r   r�   Ú(_RegionScooper.recursively_scoop_regionsž   st   € à—H‘H×'Ñ'¨:Ð'Ó6ˆDÜ& t×,Ñ,ñ Ü˜R§¡Ó-ˆFÜ˜&¤%§(¡(×"6Ñ"6×7Ó7Ü×8Ñ8¸Ö@ñ 7ô ×+Ñ+¨BÓ/Ð/r   c                 ó°   • [         R                  R                  R                  SS9   [        R                  U5      sS S S 5        $ ! , (       d  f       g = f©NF©Úenable)rD   rq   Ú	tracebackÚpreserve_node_metar`   r�   ©ri   r   s     r   Ú__call__Ú_RegionScooper.__call__¬   s8   € Ü�X‰X×Ñ×2Ñ2¸%Ð2Ò@Ü!×;Ñ;¸BÓ?÷ A×@×@úó   ¨AÁ
Ar   N)
rm   rn   ro   rp   Ú__doc__Ústaticmethodrz   r�   rŠ   rt   r   r   r   r`   r`   ‚   s5   † ñð ñ
ó ð
ð, ñ0ó ð0õ@r   r`   c                   ó>   • \ rS rSrSr\S 5       r\S 5       rS rSr	g)Ú_RegionCompileré±   z#
Compiles the scooped out regions.
c                 óŠ   • SSK Jn  [        U S5      n U R                  R	                  U" 5       5        U R                  5         U $ )Nr   )Ú_BoxedCodeGenrv   )Útorch.fx.graphr“   rZ   r1   Úset_codegenrM   )r   r“   s     r   Úcompile_regionÚ_RegionCompiler.compile_region¶   s4   € å0ä˜RÐ!;Ó<ˆØ
�‰×Ñ™]›_Ô-Ø
�‰ŒØˆ	r   c                 ó4  • SnU R                   R                  SS9 Hg  n[        XR                  5      n[	        U[
        R                  R                  5      (       d  MC  UR                  R                  S5      (       d  Me  SnMi     U R                   R                  SS9 HX  n[        XR                  5      n[	        U[
        R                  R                  5      (       d  MC  [        R                  U5        MZ     U(       a  [        R                  U 5      $ U $ )NFr'   r~   rv   Tr}   )r1   r   r9   r3   r;   rD   rq   r€   r4   r�   Úrecursively_compile_regionsr–   )r   Úfound_regionrN   rQ   s       r   r™   Ú+_RegionCompiler.recursively_compile_regions¿   sÑ   € ð ˆØ—H‘H×'Ñ'¨=Ð'Ó9ˆDÜ˜R§¡Ó-ˆFÜ˜&¤%§(¡(×"6Ñ"6×7Ó7Ø—;‘;×)Ñ)Ð*D×EÓEØ#'’Lñ	 :ð —H‘H×'Ñ'¨:Ð'Ó6ˆDÜ˜R§¡Ó-ˆFÜ˜&¤%§(¡(×"6Ñ"6×7Ó7Ü×;Ñ;¸FÖCñ 7ö
 Ü"×1Ñ1°"Ó5Ð5Øˆ	r   c                 ó°   • [         R                  R                  R                  SS9   [        R                  U5      sS S S 5        $ ! , (       d  f       g = fr„   )rD   rq   r‡   rˆ   r�   r™   r‰   s     r   rŠ   Ú_RegionCompiler.__call__Ó   s8   € Ü�X‰X×Ñ×2Ñ2¸%Ð2Ò@Ü"×>Ñ>¸rÓB÷ A×@×@úrŒ   r   N)
rm   rn   ro   rp   r�   rŽ   r–   r™   rŠ   rt   r   r   r   r�   r�   ±   s5   † ñð ñó ðð ñó ðõ&Cr   r�   c                 ó¦   • [         R                  R                  R                  SS9   [	        5       " U 5      sS S S 5        $ ! , (       d  f       g = fr„   )rD   rq   r‡   rˆ   r`   ©r   s    r   Ú_create_inductor_marked_regionsr    Ø   s4   € Ü	�‰×	Ñ	×	.Ñ	.°eÐ	.Ò	<ÜÔ Ó#÷ 
=×	<×	<úó   ¨AÁ
Ac                 ó¦   • [         R                  R                  R                  SS9   [	        5       " U 5      sS S S 5        $ ! , (       d  f       g = fr„   )rD   rq   r‡   rˆ   r�   rŸ   s    r   Ú _compile_inductor_marked_regionsr£   Ý   s4   € Ü	�‰×	Ñ	×	.Ñ	.°eÐ	.Ò	<ÜÔ  Ó$÷ 
=×	<×	<úr¡   F)Úis_backward_compatiblec                 ó$  • [         R                  R                  R                  SS9   [	        U 5      n [        U 5      n [         R                  R                  R                  (       a  SSK	J
n  U" U 5      n U sSSS5        $ ! , (       d  f       g= f)a9  
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)rD   rq   r‡   rˆ   r    r£   Ú
_functorchrA   Úforce_autograd_cacheÚtorch._inductor.output_coder¦   )r   Úexample_argsr¦   s      r   r   r   â   sd   € ô& 
�‰×	Ñ	×	.Ñ	.°eÐ	.Ò	<Ü,¨RÓ0ˆÜ-¨bÓ1ˆÜ×Ñ×"Ñ"×7×7ÝFá# BÓ'ˆBØ÷ 
=×	<×	<ús   ¨ABÂ
B)r   ÚloggingrD   Útorch.fx._compatibilityr   Ú	getLoggerrm   r=   Ú__all__r   r$   rZ   rq   rr   r^   r`   r�   r    r£   r   r   r   r   Ú<module>r¯      s�   ðó Û ã Ý 1ð 
×	Ò	˜8Ó	$€àÐ
€òòò&IðX %§(¡(§-¡-ô ÷,@ñ ,@÷^$Cñ $CòN$ò
%ñ
  eÑ,ñó -ñr   