ó
    Eñix¶  ã                   ó|  • % 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
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JrJr  S SKJrJrJrJr  S SKJr  S SKrS SKJrJrJr  S SKJ r   S SK!J"r"  S SK#J$r$  S S	K%J&r&  S S
K'J(r(  S SK)J*r*  S SK+J,r,  S SK-J.r.  S SK/J0r0J1r1  S SK2J3r3  S SK4J5r5  S SK6J7r7  S SK8J9r9  SSK:J;r;J<r<  SSK<J=r=  SSK>J?r?J@r@JArAJBrBJCrC  SSKDJErE  \RŒ                  " \G5      rHSqI\\J\K\L\M4         \NS'   SqO\P\NS'   SqQ\\K\R\\L   4      \NS'   \(" \GS5      rS\(" \GS5      rT\J\   rU\ R¬                  " SSS /5      rW/ S!QrX\R²                  S"\P4S# j5       rZ  S`S$\J\?   S%\PS&\\L   S"S4S' jjr[S(\J\?   S"\ R¸                  4S) jr]  SaS$\\U   S*\K\L\L4   S+\\L   S,\RS"S4
S- jjr^S*\K\L\L4   S"\K\L\W4   4S. jr_S/\R@                  R\                  S(\US"S4S0 jr`\RÂ                  S"\S   4S1 j5       rb0 qc\K\L\K\L\J\L   4   4   \NS2'   0 qd\K\L\J\L   4   \NS3'   Sqe\\R   \NS4'   0 qf\K\L\L4   \NS5'   0 qg\K\L\J\L   4   \NS6'   S qh\R\NS7'   SbS8 jri\RÂ                  S"\S   4S9 j5       rj " S: S;5      rk " S< S=5      rlS$\US"S4S> jrmS$\US"S4S? jrnS@\J\\LS4      S"S4SA jroS$\\?   S"S4SB jrpSC\\q\\r4      S"S4SD jrsSbSE jrt\RÂ                  S"\S   4SF j5       ru\Rì                   " SG SH5      5       rw\Rð                  " 5       rySI\\R   SJ\K\L\4   S"\K\L\K\L\J\L   4   4   4SK jrzSL\K\L\4   S"\K\L\K\L\4   4   4SM jr{S"\K\L\4   4SN jr|S"\K\L\K\L\J\L   4   4   4SO jr} ScSP\\\?   \=4   SQ\LSR\PS"\\R   4SS jjr~ST\SU\S"S4SV jrSW\LS"\4SX jr€SSY.SZ\S[\L4   S\\GR                  GR                  S]\K\L\4   S^\\5   S"\L4
S_ jjrƒg)dé    N)ÚCallableÚIteratorÚSequence)ÚAnyÚIOÚOptionalÚUnion)Úpatch)Ú
draw_graphÚget_aot_graph_nameÚget_graph_being_compiled)Úfx)Úsave_graph_repro)Úget_debug_dir)Úutils)ÚgetArtifactLogger)Útrace_structured)Úsignpost_event)ÚGraphModule)Ú_extract_tensor_metadataÚTensorMetadata)Úlegalize_graph)ÚFileLike)Ú
OrderedSet)Útree_mapé   )ÚconfigÚir)ÚExternKernel)ÚBaseSchedulerNodeÚFusedSchedulerNodeÚNopKernelSchedulerNodeÚ
OutputNodeÚSchedulerNode)ÚVÚGRAPH_EXECUTION_ORDERFÚRECORD_GRAPH_EXECUTIONÚGRAPH_COMPILE_IDSÚir_pre_fusionÚir_post_fusionÚBufMetaÚnameÚn_origin)Údotz-Gnslimit=2z-Gnslimit1=2z-Gmaxiter=5000Úreturnc                  ó2   • [         R                  " S5      S L$ )Nr.   )ÚshutilÚwhich© ó    ÚR/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/_inductor/debug.pyÚhas_dotr6   ?   s   € ä�<Š<˜Ó dÐ*Ð*r4   ÚnodesÚprint_graphÚfnamec           
      óâ  • [        5       (       d  [        R                  S5        gUc
  [        5       n[	        U 5      nUR
                   H¼  nSUR                  ;  a  M  UR                  S   R                  n[        U[        5      (       a$  [        US   [        5      (       a  US   4nOUS   nSn[        U[        R                  5      (       a  UR                  R                  n[        XVSSSSS5      nXtR                  S'   M¾     U(       a  [!        U5        [#        0 U5      n[%        U5        UR&                  R)                  5         [+        X‚S[,        R.                  R0                  S9  g)z
Draw a graph in fname.svg.
z*draw_buffers() requires `graphviz` packageNÚfusion_metar   Útensor_metaF)Ú
clear_metaÚdot_graph_shape)r6   ÚlogÚwarningr   Úcreate_fx_from_snodesr7   ÚmetaÚgroupÚ
isinstanceÚtupleÚintr   ÚComputedBufferÚdataÚdtyper   Úprintr   r   ÚgraphÚlintr   r   Útracer>   )	r7   r8   r9   rK   ÚnoderC   rI   ÚmetadataÚgms	            r5   Údraw_buffersrQ   D   s"  € ô �9‰9Ü�‰Ð@ÔAØà�}Ü(Ó*ˆä! %Ó(€Eà—”ˆØ §	¡	Ó)ÙØ—	‘	˜-Ñ(×.Ñ.ˆÜ�eœU×#Ñ#Ü˜% ™(¤C×(Ñ(Ø˜q™˜‘à˜a™�ð ˆÜ�dœB×-Ñ-×.Ñ.Ø—I‘I—O‘OˆEä! %°°d¸DÀ$ÈÓMˆà#+�	‰	�-Ó ñ# ö& ÜˆeŒä	�R˜Ó	€BÜ�2ÔØ‡H�H‡M�M„OÜØ
˜e´V·\±\×5QÑ5Qór4   Úsnodesc                 ót  ^• S[         S[        S[        4   4S jn[        R                  " S/ SQ5      n0 n0 n[
        R                  R                  5       nSn/ nSnU  GHÃ  n	U	R                  5       (       a  Sn
U
nO‡U	R                  5       (       a  S	n
U
nOm[        U	[        5      (       a  S
n
U
nOS[        U	[        5      (       a  Sn
U	R                  nO/[        U	[        5      (       a  Sn
U	R                  nO[        S5      e[
        R                   R"                  R%                  U	R'                  5       S5      nU
 SU 3nU" U5      n0 n[)        U	S5      (       a  SU	R+                  5       0nUR-                  USUS9nS[.        [0        [        4   S[2        4U4S jjmT" U	5      (       a  UR5                  U5        U	R7                  5       nUUl        U" X‰U
5      UR:                  S'   XôU'   U	R=                  5        H  nXóUR7                  5       '   M     Ub  GMÁ  UnGMÆ     U  HÆ  n	U	R7                  5       nU	R>                  R@                  nUU   n/ nU H€  nUR8                  U;   a  UUR8                     nODURC                  U5         URE                  UR8                  5      nUUUR8                  '   SSS5        WU:X  a  Mo  UR5                  U5        M‚     [G        U5      Ul$        MÈ     URK                  [M        U5      S:X  a  US   5        U$ [G        U5      5        U$ ! , (       d  f       Nu= f)ú:
Creates a FX Graph from a list of SchedulerNode objects.
r,   r/   .c                 ó4   • S[         S[        4S jnXl        U$ )NÚargsr/   c                  ó   • g©Nr   r3   )rV   s    r5   Úfunc1Ú;create_fx_from_snodes.<locals>.get_fake_func.<locals>.func1y   s   € Ør4   )r   rF   Ú__name__)r,   rY   s     r5   Úget_fake_funcÚ,create_fx_from_snodes.<locals>.get_fake_funcx   s!   € ð	œð 	¤ô 	ð ŒØˆr4   Ú
FusionMeta)rC   ÚsnodeÚtypeNÚexternÚtemplateÚnopÚcomputeÚfusedzUnknown node typeÚoriginal_atenz: Ú
get_deviceÚdevicer3   ©rV   Úkwargsr_   c                 ó¬   >• [        U [        5      (       a  [        U4S jU R                   5       5      $ [        S U R	                  5        5       5      $ )Nc              3   ó4   >#   • U  H  nT" U5      v •  M     g 7f©Nr3   )Ú.0ÚxÚ	in_outputs     €r5   Ú	<genexpr>Ú;create_fx_from_snodes.<locals>.in_output.<locals>.<genexpr>©   s   øé € Ð>²¨A™9 QŸ<˜<²ùs   ƒc              3   ó~   #   • U  H3  nUR                     H  n[        UR                  [        5      v •  M!     M5     g 7frm   )ÚusersrD   rN   r#   )rn   ÚbufÚusers      r5   rq   rr   ª   s6   é € ð â.�CØŸI�I�Dô ˜4Ÿ9™9¤j×1Ð1á%ñ 2Ú.ùs   ‚;=)rD   r!   ÚanyrR   Úget_outputs)r_   rp   s    €r5   rp   Ú(create_fx_from_snodes.<locals>.in_output§   sI   ø€ Ü˜%Ô!3×4Ñ4ÜÔ>°·²Ó>Ó>Ð>Üñ à ×,Ñ,Ô.óó ð r4   r;   r   r   )'Ústrr   rF   ÚcollectionsÚ
namedtupleÚtorchr   ÚGraphÚ	is_externÚis_templaterD   r"   r$   rC   r!   ÚRuntimeErrorÚ	_inductorr   Úget_fused_kernel_nameÚ	get_nodesÚhasattrrg   Úcall_functionr	   r    ÚboolÚappendÚget_namer,   rB   rx   Úread_writesÚreadsÚinserting_beforeÚplaceholderrE   rV   ÚoutputÚlen)rR   r\   r^   Úbuf_to_fx_nodeÚnode_to_fx_noderK   Ú
first_nodeÚoutputsrC   r_   Ú	node_typeÚ
fused_nameÚ	func_nameÚ	node_funcrj   Úfx_noder,   ru   ÚdepsÚnew_argsÚdepÚdep_noderp   s                         @r5   rA   rA   s   sý  ø€ ð
œCð ¤H¨S´#¨XÑ$6ô ô ×'Ò'¨Ò6PÓQ€Jà€NØ€OÜ�H‰H�N‰NÓ€EØ€Jà€GØ€Eô ˆØ�?‰?×ÑØ ˆIØ‰EØ×Ñ× Ñ Ø"ˆIØ‰EÜ˜Ô5×6Ñ6ØˆIØ‰EÜ˜œ}×-Ñ-Ø!ˆIØ—K‘K‰EÜ˜Ô1×2Ñ2ØˆIØ—K‘K‰EäÐ2Ó3Ð3ä—_‘_×*Ñ*×@Ñ@Ø�O‰OÓ˜ó
ˆ
ð !�k  J <Ð0ˆ	Ù! )Ó,ˆ	ØˆÜ�5˜,×'Ñ'Ø × 0Ñ 0Ó 2Ð3ˆFØ×%Ñ% i°bÀÐ%ÐHˆð	œUÔ#4Ô6HÐ#HÑIð 	Ìd÷ 	ñ �U×ÑØ�N‰N˜7Ô#Ø�~‰~ÓˆØˆŒá&0°¸yÓ&Iˆ�‰�]Ñ#à '˜ÑØ×$Ñ$Ö&ˆCØ-4˜3Ÿ<™<›>Ó*ñ 'ð ÔØ ‹Jñe ój ˆØ�~‰~ÓˆØ× Ñ ×&Ñ&ˆà! $Ñ'ˆØˆÛˆCØ�x‰x˜>Ó)Ø)¨#¯(©(Ñ3‘à×+Ñ+¨JÕ7Ø$×0Ñ0°·±Ó:�HØ/7�N 3§8¡8Ñ,÷ 8ð ˜7Ó"ÙØ�O‰O˜HÖ%ñ ô ˜X“ˆŽñ# ð& 
‡L�Lœs 7›|¨qÓ0�˜‘ÔEØ€Lô 7<¸G³nÔEØ€L÷ 8Õ7ús   Ê+L)Ì)
L7Únode_name_to_buf_nameÚparent_buf_nameÚ	n_originsc                 óx  • U c  g U  H°  nUR                  5       nUR                  5       nUb#  [        U5      S:”  a  [        UUUc  UOU5        MI  [        U5      S:X  a	  US   U:X  d   eUR                  nUb  UR
                  c  M�  UR
                   H  nUR                  n	X‘;  d  M  Uc  UOUX'   M!     M²     g )Nr   r   )r‰   r„   r�   Ú$update_orig_fx_node_name_to_buf_namerN   Úoriginsr,   )
r7   r�   rž   rŸ   rN   Úbuf_nameÚchildren_nodesÚir_nodeÚoriginÚ	node_names
             r5   r¡   r¡   Ö   sÈ   € ð �}ØÛˆà—=‘=“?ˆØŸ™Ó)ˆØÑ%¬#¨nÓ*=ÀÓ*AÜ0ØØ%Ø+Ñ3‘¸ôñ
 ô �~Ó&¨!Ó+°¸qÑ0AÀTÓ0IÐIÐIà—)‘)ˆØ‰?˜gŸo™oÑ5ÙØ—o”oˆFØŸ™ˆIð Õ5à /Ñ 7‘H¸_ð &Ó0ó &ò% r4   c                 óö   • 0 nU R                  5        H-  u  p#X1;  a  [        U/5      X'   M  X   R                  U5        M/     0 nU R                  5        H  u  p#[        X   5      n[	        X55      XB'   M!     U$ rm   )Úitemsr   Úaddr�   r+   )r�   Úbuf_name_to_n_noder§   r£   Únode_name_to_buf_metaÚn_nodes         r5   Úget_node_name_to_buf_metar®   ú   s‹   € ð ÐØ4×:Ñ:Ö<Ñˆ	ØÓ-Ü+5°y°kÓ+BÐÓ(ð Ñ(×,Ñ,¨YÖ7ñ  =ð ÐØ4×:Ñ:Ö<Ñˆ	ÜÐ'Ñ1Ó2ˆÜ+2°8Ó+DÐÓ(ñ  =ð !Ð r4   rP   c                 óê   • 0 n[        X5        Uc  g[        U5      nU R                  R                   H=  nUR                  U;   d  M  UR                  UR                  5      UR                  S'   M?     g)rT   NÚbuf_meta)r¡   r®   rK   r7   r,   ÚgetrB   )rP   rR   r�   r¬   rN   s        r5   Úannotate_orig_fx_with_snodesr²     sc   € ð -/ÐÜ(¨ÔGØÑ$ØÜ5Ð6KÓLÐØ—‘—”ˆØ�9‰9Ð-Õ-Ø$9×$=Ñ$=¸d¿i¹iÓ$HˆD�I‰I�jÓ!ò r4   c               #   óÂ  #   • [         R                  R                  SS5      S:H  n SS Kn[        R
                  " UR                  R                  R                  5      n[        R                  " 5       nU (       d   S v •  UR                  5         g UR                  [        SS5      5        [         R                  R                  [!        5       S5      n[         R"                  " USS9  [        R$                  " [         R                  R                  US	['        5        S
35      5      nUR)                  [        R*                  5        UR-                  [        R.                  " S5      5        UR1                  U5         S v •  UR3                  U5        UR                  5         g ! UR                  5         f = f! UR3                  U5        UR                  5         f = f7f)NÚTORCH_COMPILE_DEBUGÚ0Ú1r   z*functorch.compile.config.debug_partitionerTÚtorchinductor)Úexist_okÚaot_z
_debug.logú3[%(filename)s:%(lineno)d %(levelname)s] %(message)s)ÚosÚenvironr±   Útorch._functorch.aot_autogradÚloggingÚ	getLoggerÚ
_functorchÚaot_autogradr[   Ú
contextlibÚ	ExitStackÚcloseÚenter_contextr
   ÚpathÚjoinr   ÚmakedirsÚFileHandlerr   ÚsetLevelÚDEBUGÚsetFormatterÚ	FormatterÚ
addHandlerÚremoveHandler)Úcompile_debugr}   r?   ÚstackrÆ   Úfhs         r5   Úenable_aot_loggingrÓ     sY  é € ä—J‘J—N‘NÐ#8¸#Ó>À#ÑE€Mã(ä
×
Ò
˜E×,Ñ,×9Ñ9×BÑBÓ
C€Cä× Ò Ó"€EÞð	Ûà�K‰KŒMØð 
×ÑœÐJÈDÓQÔRä�7‰7�<‰<œ›¨Ó9€DÜ‡K‚K�˜tÒ$ä	×	Ò	Ü
�‰�‰ØØÔ%Ó'Ð(¨
Ð3ó	
ó
€Bð ‡K�K”—‘ÔØ‡O�OÜ×ÒÐOÓPôð ‡N�N�2ÔðÛà×Ñ˜"ÔØ�‰�øð3 �K‰K�Mûð0 	×Ñ˜"ÔØ�‰�üs7   ‚A8GÁ;F$ Á?C>GÅ>F9 Æ"GÆ$F6Æ6GÆ9#GÇGÚ _inductor_post_to_pre_grad_nodesÚ._inductor_triton_kernel_to_post_grad_node_infoÚ_pre_grad_graph_idÚ#_inductor_pre_grad_node_stack_traceÚ_inductor_kernel_stack_traceÚ(_inductor_kernel_provenance_debug_handlec                  ó   • Sq g rX   )rÙ   r3   r4   r5   Ú-reset_inductor_kernel_provenance_debug_handlerÛ   Q  s   € à/0Ñ,r4   c               #   ó   #   • [         n [        R                  5       n[        R                  5       n[        R                  5       n[
        R                  5       n[        nSq 0 q0 q0 q0 qSq Sv •  U q UqUqUqUqUqg! U q UqUqUqUqUqf = f7f)zvContext manager that resets provenance tracking globals upon entering
and restores their original values when exiting.éÿÿÿÿr   N)rÖ   rÔ   ÚcopyrÕ   r×   rØ   rÙ   )Úoriginal_pre_grad_graph_idÚoriginal_post_to_pre_grad_nodesÚ-original_triton_kernel_to_post_grad_node_infoÚ+original_inductor_pre_grad_node_stack_traceÚ$original_inductor_kernel_stack_traceÚ0original_inductor_kernel_provenance_debug_handles         r5   Úreset_provenance_globalsrå   V  së   é € ô "4ÐÜ&F×&KÑ&KÓ&MÐ#ä6×;Ñ;Ó=ð 2ô 	,×0Ñ0Ó2ð 0ô ,H×+LÑ+LÓ+NÐ(ä0ð 5ð
 ÐØ')Ð$Ø57Ð2Ø*,Ð'Ø#%Ð Ø/0Ð,ð
Ûð 8ÐØ+JÐ(à9ð 	7ð (LÐ$à7ð 	,ð =ñ 	1øð 8ÐØ+JÐ(à9ð 	7ð (LÐ$à7ð 	,ð =ñ 	1üs   ‚A)BÁ,A= Á0BÁ=BÂBc                   ó‚  • \ rS rSr\R
                  " 5       r\S\S\	\   4S j5       r
SS jrS\SS4S jr SS	\S
\S\S\S\\   4
S jjr\R"                   SS	\S
\S\S\S\\\      4
S jj5       rS\S\4S jrSS jrSS jrS	\S\SS4S jrS\	\\      S\	\   S\	\   SS4S jrSS jrS\S\	\S      4S jrSrg) ÚDebugContexti‰  Úfolder_namer/   c                 óP  • [         R                  R                  =(       d
    [        5       n[        R
                   Hg  n[        R                  R                  USU  SU 35      n[        R                  R                  U5      (       a  MO  [        R                  " U5        Us  $    g )Nr·   Ú.)r   rM   Ú	debug_dirr   rç   Ú_counterr»   rÆ   rÇ   ÚexistsrÈ   )rè   rë   ÚnÚdirnames       r5   Úcreate_debug_dirÚDebugContext.create_debug_dirŒ  sy   € ä—L‘L×*Ñ*×=¬m«oˆ	Ü×&Ô&ˆAÜ—g‘g—l‘lØØØ�-˜q  Ð$óˆGô
 —7‘7—>‘> '×*Ó*Ü—’˜GÔ$Ø’ñ 'ð r4   Nc                 óT   • S U l         S U l        [        R                  " 5       U l        g rm   )Ú_profÚ_pathrÂ   rÃ   Ú_stack)Úselfs    r5   Ú__init__ÚDebugContext.__init__š  s    € ØˆŒ
ØˆŒ
Ü ×*Ò*Ó,ˆ�r4   Únew_pathc                 óÒ  • U R                   (       d  g UR                  S5      (       d   U5       eSSKJn   U" U S35         [        R
                  R                  U5      (       a  [        R                  " U5        [        R                  " U R                   U5        S S S 5        g ! , (       d  f       g = f! [         a$    [        R                  SU R                   U5         g f = f)Nz.debugr   )ÚFileLockz.lockz(Failed to copy debug files from %s to %s)rô   ÚendswithÚfilelockrû   r»   rÆ   rí   r1   ÚrmtreeÚcopytreeÚOSErrorr?   r@   )rö   rù   rû   s      r5   rÞ   ÚDebugContext.copyŸ  s£   € Ø�z�zØØ× Ñ  ×*Ñ*Ð4¨HÓ4Ð*Ý%ð	Ù˜X˜J eÐ,Õ-Ü—7‘7—>‘> (×+Ñ+Ü—M’M (Ô+Ü—’ §
¡
¨HÔ5÷ .×-Ö-ûô ó 	Ü�K‰KØ:¸D¿J¹JÈöð	ús0   ·B8 ÁAB'ÂB8 Â'
B5Â1B8 Â5B8 Â8+C&Ã%C&ÚfilenameÚ
write_moderV   rj   c                 ó˜   • U R                   (       d   e[        [        R                  R	                  U R                   U5      U/UQ70 UD6$ rm   ©rô   Úopenr»   rÆ   rÇ   )rö   r  r  rV   rj   s        r5   ÚfopenÚDebugContext.fopen¯  s:   € ð �z�zÐˆzÜ”B—G‘G—L‘L §¡¨XÓ6¸
ÐTÀTÒTÈVÑTÐTr4   c              /   óÞ   #   • U R                   (       d   e[        [        R                  R	                  U R                   U5      U/UQ70 UD6 nUv •  S S S 5        g ! , (       d  f       g = f7frm   r  )rö   r  r  rV   rj   Úfs         r5   Úfopen_contextÚDebugContext.fopen_context¹  sN   é € ð �z�zÐˆzÜ”"—'‘'—,‘,˜tŸz™z¨8Ó4°jÐRÀ4ÒRÈ6ÒRÐVWØŠG÷ S×RÖRüs   ‚AA-ÁAÁ	A-Á
A*Á&A-Úsuffixc                 ó|   • U R                   (       d   e[        R                  R                  U R                   U5      $ rm   )rô   r»   rÆ   rÇ   )rö   r  s     r5   r  ÚDebugContext.filenameÅ  s'   € Ø�z�zÐˆzÜ�w‰w�|‰|˜DŸJ™J¨Ó/Ð/r4   c                 ó*  • [         R                  R                  bç  SS KnU R                  (       d   e[
        R                  R                  U R                  [
        R                  R                  U R                  5       S35      nUR                  US5       nUR                  U R                  [
        R                  R                  U R                  5      S9  S S S 5        [         R                  R                  U5        g g ! , (       d  f       N/= f)Nr   z.tar.gzzw:gz)Úarcname)r   rM   Ú
upload_tarÚtarfilerô   r»   rÆ   rÇ   Úbasenamer  rª   )rö   r  Útar_fileÚtars       r5   r  ÚDebugContext.upload_tarÉ  sµ   € Ü�<‰<×"Ñ"Ñ.Ûà—:—:Ð�:Ü—w‘w—|‘|Ø—
‘
œrŸw™w×/Ñ/°·
±
Ó;Ð<¸GÐDóˆHð —‘˜h¨Ô/°3Ø—‘˜Ÿ
™
¬B¯G©G×,<Ñ,<¸T¿Z¹ZÓ,H�ÑI÷ 0ä�L‰L×#Ñ# HÕ-ð /÷ 0Õ/ús   ÂADÄ
Dc                 óà  ^• [         R                  (       al  [        R                  " S5      mTR                  nTR                  [        R                  5        S[        SS 4U4S jjnU R                  R                  X!5        U R                  R                  [        R                  " U 5      5        [         R                  R                  (       d  g U R                  [!        5       5      U l        [         R                  R$                  (       a   U R'                  S[        R                  5        [         R                  R(                  (       a!  U R'                  S[        R*                  5        g g )Nztorch._dynamoÚlevelr/   c                 ó(   >• TR                  U 5        g rm   )rÊ   )r  r?   s    €r5   Úreset_log_levelÚ/DebugContext.__enter__.<locals>.reset_log_levelÛ  s   ø€ Ø—‘˜UÕ#r4   z	debug.logzinfo.log)r   Údebugr¾   r¿   r  rÊ   rË   r   rõ   ÚcallbackrÅ   r%   Úset_debug_handlerrM   Úenabledrð   r   rô   Ú	debug_logÚ_setup_log_captureÚinfo_logÚINFO)rö   Ú
prev_levelr  r?   s      @r5   Ú	__enter__ÚDebugContext.__enter__Õ  sä   ø€ Ü�<�<Ü×#Ò# OÓ4ˆCØŸ™ˆJØ�L‰LœŸ™Ô'ð$¤sð $¨t÷ $ð �K‰K× Ñ  Ô=à�‰×!Ñ!¤!×"5Ò"5°dÓ";Ô<ä�|‰|×#×#Øà×*Ñ*Ô+=Ó+?Ó@ˆŒ
ä�<‰<×!×!Ø×#Ñ# K´·±Ô?Ü�<‰<× × Ø×#Ñ# J´·±Õ=ð !r4   r  c                 óÔ  • [         R                  " S5      nU R                  R                  U R	                  U5      5      n[         R
                  " U5      nUR                  U5        UR                  [         R                  " S5      5        UR                  U5        UR                  [        UR                  U5      5        U R                  R                  UR                  U5        g )Nztorch._inductorrº   )r¾   r¿   rõ   rÅ   r  ÚStreamHandlerrÊ   rÌ   rÍ   rÎ   Úminr  r  rÏ   )rö   r  r  r?   ÚfdÚchs         r5   r"  ÚDebugContext._setup_log_captureì  s¨   € ô
 ×ÒÐ 1Ó2ˆØ�[‰[×&Ñ& t§z¡z°(Ó';Ó<ˆÜ×"Ò" 2Ó&ˆØ
�‰�EÔØ
�‰Ü×ÒÐSÓTô	
ð 	�‰�rÔØ�‰”S˜Ÿ™ EÓ*Ô+Ø�‰×Ñ˜S×.Ñ.°Õ3r4   Úexc_typeÚexc_valÚexc_tbc                 óB  • U R                   (       a*  U R                   R                  5         U R                  5         U R                  (       a9  U R	                  5         [
        R                  S[        5       U R                  5        U R                  R                  5         g )Nz%s debug trace: %s)
ró   ÚdisableÚ_save_profile_datarô   r  r?   r@   r   rõ   rÄ   )rö   r.  r/  r0  s       r5   Ú__exit__ÚDebugContext.__exit__ü  sa   € ð �:�:Ø�J‰J×ÑÔ Ø×#Ñ#Ô%à�:�:Ø�O‰OÔÜ�K‰KÐ,Ô.FÓ.HÈ$Ï*É*ÔUØ�‰×ÑÕr4   c                 óº  • U R                   (       d   eU R                   R                  U R                  S5      5        U R                  S5       n[        R
                  " U R                   US9nUR                  5         UR                  S5        UR                  S5        UR                  S5        UR                  S5        S S S 5        g ! , (       d  f       g = f)Nzcompile.profzcompile.stats)ÚstreamÚcumtimeéd   Útottime)	ró   Ú
dump_statsr  r  ÚpstatsÚStatsÚ
strip_dirsÚ
sort_statsÚprint_stats)rö   r+  Ústatss      r5   r3  ÚDebugContext._save_profile_data  s›   € Ø�z�zÐˆzØ�
‰
×Ñ˜dŸm™m¨NÓ;Ô<Ø�Z‰Z˜Ô(¨BÜ—L’L §¡°BÑ7ˆEØ×ÑÔØ×Ñ˜YÔ'Ø×Ñ˜cÔ"Ø×Ñ˜YÔ'Ø×Ñ˜cÔ"÷ )×(Ö(ús   ÁA4CÃ
Cr,   ).Nc                 ó  • [         R                  R                  (       a5  [        [         R                  U5      (       a   [        [	        U 5      U5      $ S[        S[        SS 4S jnU$ ! [
         a    [        R                  SSS9   g f = f)Nz Ignoring exception in debug codeT©Úexc_inforV   rj   r/   c                  ó   • g rm   r3   ri   s     r5   ÚignoredÚ)DebugContext.__getattr__.<locals>.ignored  s   € Ør4   )	r   rM   r   ÚgetattrÚDebugFormatterÚ	Exceptionr?   r@   r   )rö   r,   rG  s      r5   Ú__getattr__ÚDebugContext.__getattr__  s|   € Ü�<‰<××¤G¬F¯L©L¸$×$?Ñ$?ðÜœ~¨dÓ3°TÓ:Ð:ðœsð ¬cð °dô ð ˆNøô ó Ü—‘Ð>È�ÑNÙðús   Á A* Á*BÂ
B)rô   ró   rõ   ©r/   N)Úw) r[   Ú
__module__Ú__qualname__Ú__firstlineno__Ú	itertoolsÚcountrì   Ústaticmethodrz   r   rð   r÷   rÞ   r   r   r  rÂ   Úcontextmanagerr   r  r  r  r&  rF   r"  r`   ÚBaseExceptionr4  r3  r   rL  Ú__static_attributes__r3   r4   r5   rç   rç   ‰  s„  † Ø�ŠÓ €Hàð cð ¨h°s©mó ó ðô-ð
˜Sð  Tô ð& ñUàðUð ðUð ð	Uð
 ðUð 
ˆC‰õUð ×Ñð ñ	àð	ð ð	ð ð		ð
 ð	ð 
�"�S‘'Ñ	ô	ó ð	ð0˜sð 0 sô 0ô
.ô>ð.4àð4ð ð4ð 
ô	4ð à˜4 Ñ.Ñ/ðð ˜-Ñ(ðð ˜‘ð	ð
 
ôô	#ð ð ¨°¸)Ñ1DÑ(E÷ r4   rç   c                   óÐ  • \ rS rSrS\SS4S jrS\R                  R                  S\	\R                     SS4S jrS\R                  R                  S\	\R                     SS4S	 jrS
\SS4S jrS
\SS4S jr\S
\S\4S j5       rS
\SS4S jrS\R                  R                  S
\SS4S jrSS\S\SS4S jjrS\S\	\R.                     S\S\4   S\S\S\\   SS4S jrSrg)rJ  i%  Úhandlerr/   Nc                 óv   • UR                   U l         UR                  U l        UR                  U l        Xl        g rm   )r  r  r  rZ  )rö   rZ  s     r5   r÷   ÚDebugFormatter.__init__&  s-   € Ø—]‘]ˆŒ
Ø$×2Ñ2ˆÔØ×(Ñ(ˆŒØ�r4   rP   Úinputsc                 óþ  • U R                  S5       nS n[        R                  R                  R                  R
                  (       aR  [        R                  R                  R                  U5      n[        R                  R                  UR                  5      n[        R                  R                  R                  R
                  n[        R                  R                  R                  SSS.5         [        UUUSUUS9  S S S 5        S S S 5        U R                  S5       nUR                  UR!                  SS95        S S S 5        g ! , (       d  f       NO= f! , (       d  f       NX= f! , (       d  f       g = f)Nzfx_graph_runnable.pyF)ztrace.enabledztrace.save_real_tensorsÚinductor)Úsave_dirÚstable_hashzfx_graph_readable.py©Úprint_output)r  r}   r‚   r   rM   Úsave_real_tensorsÚ_subclassesÚ
fake_utilsÚtry_convert_fake_to_realr»   rÆ   rï   r,   r
   r   ÚwriteÚprint_readable)rö   rP   r]  r+  r`  ra  s         r5   Úfx_graphÚDebugFormatter.fx_graph,  s  € ð
 �Z‰ZÐ.Ô/°2ØˆHÜ�‰×%Ñ%×+Ñ+×=×=Ü×*Ñ*×5Ñ5×NÑNÈvÓV�ÜŸ7™7Ÿ?™?¨2¯7©7Ó3�ô
  Ÿ/™/×0Ñ0×6Ñ6×HÑHˆKÜ—‘×'Ñ'×-Ñ-Ø"'ÀEÑJõô !ØØØØØ%Ø +ò÷÷ 0ð, �Z‰ZÐ.Ô/°2Ø�H‰H�R×&Ñ&°EÐ&Ð:Ô;÷ 0Ð/÷õ ú÷ 0Õ/ú÷, 0Õ/ús0   ’C"EÃ4EÄEÄ$E.Å
E	ÅEÅ
E+Å.
E<c                 ó–   • U R                  S5       nUR                  UR                  SS95        S S S 5        g ! , (       d  f       g = f)Nzfx_graph_transformed.pyFrb  )r  rh  ri  )rö   rP   r]  r+  s       r5   Úfx_graph_transformedÚ#DebugFormatter.fx_graph_transformedJ  s9   € ð
 �Z‰ZÐ1Ô2°bØ�H‰H�R×&Ñ&°EÐ&Ð:Ô;÷ 3×2Ö2ús	   ’:º
Ar7   c                 óš   • U R                  S5       nUR                  U R                  U5      5        S S S 5        g ! , (       d  f       g = f)Nzir_pre_fusion.txt©r  rh  Ú	_write_ir©rö   r7   r+  s      r5   r)   ÚDebugFormatter.ir_pre_fusionR  s2   € Ø�Z‰ZÐ+Ô,°Ø�H‰H�T—^‘^ EÓ*Ô+÷ -×,Ö,úó	   ’!<¼
A
c                 óš   • U R                  S5       nUR                  U R                  U5      5        S S S 5        g ! , (       d  f       g = f)Nzir_post_fusion.txtrp  rr  s      r5   r*   ÚDebugFormatter.ir_post_fusionV  s2   € Ø�Z‰ZÐ,Ô-°Ø�H‰H�T—^‘^ EÓ*Ô+÷ .×-Ö-úrt  c                 ó¾   • [         R                  " 5       nU  H3  nUR                  UR                  5       5        UR                  S5        M5     UR	                  5       $ )Nz


)ÚioÚStringIOrh  Ú	debug_strÚgetvalue)r7   ru   rN   s      r5   rq  ÚDebugFormatter._write_irZ  sD   € ä�kŠk‹mˆÛˆDØ�I‰I�d—n‘nÓ&Ô'Ø�I‰I�hÖñ ð �|‰|‹~Ðr4   c                 ó4   • [        XR                  S5      S9  g )Nzgraph_diagram.svg)r9   )rQ   r  )rö   r7   s     r5   Úgraph_diagramÚDebugFormatter.graph_diagramb  s   € Ü�U§-¡-Ð0CÓ"DÓEr4   c           	      óŒ   • [        X5        [        UU R                  S5      S[        S[        R
                  R                  S9  g )Nzorig_fx_graph_diagram.svgFT)r9   r=   ÚprogÚparse_stack_tracer>   )r²   r   r  ÚGRAPHVIZ_COMMAND_SCALABLEr   rM   r>   )rö   rP   r7   s      r5   Údraw_orig_fx_graphÚ!DebugFormatter.draw_orig_fx_graphe  s:   € ô
 	% RÔ/ÜØØ—-‘-Ð ;Ó<ØÜ*Ø"Ü"ŸL™L×8Ñ8ó	
r4   r  Ú	extensionc                 óT   • [         R                  " XR                  SU 35      5        g )Nzoutput_code.)r1   rÞ   r  )rö   r  r†  s      r5   Úoutput_codeÚDebugFormatter.output_codet  s   € Ü�Š�HŸm™m¨l¸9¸+Ð,FÓGÕHr4   r,   Úinput_nodesÚtimingsÚChoiceCallerÚelapseÚprecompile_elapseÚprescreening_elapsec           	      óZ  ^^• SSK Jm  S[         R                  S[        [        [        4   4UU4S jjmU[
        R                  R                  5       [
        R                  R                  5       U Vs/ s H  nT" U5      PM     snUUUS.nU R                  SSS	S
9 n	UR                  5        HZ  u  p«[        U
R                  5       5      nUR                  U5        X¼S'   [        R                  " XÉ5        U	R                  S5        M\     S S S 5        g s  snf ! , (       d  f       g = f)Nr   )ÚFixedLayoutrN   r/   c                 óÊ  >• [        U S5      (       a  U R                  nOSnU[        U 5      R                  S.n U R	                  5       n[        UT5      (       a¿  T" UR                  UR                  [        R                  R                  R                  UR                  5      [        R                  R                  R                  UR                  5      [        R                  R                  R                  UR                  SS9S9n[!        U5      US'   O[!        U5      US'     [!        U R%                  5       5      US'    [!        U R'                  5       5      US	'    [!        [        R                  R                  R                  U R)                  5       5      5      US
'    [!        [        R                  R                  R                  U R+                  5       5      5      US'    [!        [        R                  R                  R                  U R-                  5       5      5      US'   [        U S5      (       a>  [        U R.                  [0        R2                  5      (       a  T" U R.                  5      US'   U$ ! ["         a     GNdf = f! ["         a     GNXf = f! ["         a     GNLf = f! ["         a     GNf = f! ["         a     Nåf = f! ["         a     N±f = f)Nr,   Ú )r,   r`   r   )Úfallback)rI   ÚsizeÚstrideÚoffsetÚlayoutrI   rh   r–  r•  ÚnumelrH   )r…   r,   r`   r[   Úget_output_specrD   rh   rI   r%   rK   ÚsizevarsÚoptimization_hintsr•  r–  Úoptimization_hintr—  rz   rK  Ú	get_dtyperg   Ú
get_strideÚget_sizeÚ	get_numelrH   r   ÚIRNode)rN   r§   Ú	node_infor˜  Ústatic_layoutr‘  Úbuild_node_infos        €€r5   r¥  Ú>DebugFormatter.log_autotuning_results.<locals>.build_node_info‚  sh  ø€ Ü�t˜V×$Ñ$Ø ŸI™I‘	à�	à!Ü˜T›
×+Ñ+ñˆIðØ×-Ñ-Ó/�Ü˜f k×2Ñ2Ù$/ØŸ™Ø$Ÿl™lÜŸW™W×-Ñ-×@Ñ@ÀÇÁÓMÜ Ÿw™w×/Ñ/×BÑBÀ6Ç=Á=ÓQÜ Ÿw™w×/Ñ/×AÑAØ"ŸM™M°Að  Bð  ñ%�Mô +.¨mÓ*<�I˜hÒ'ä*-¨f«+�I˜hÒ'ðÜ%(¨¯©Ó)9Ó%:�	˜'Ñ"ðÜ&)¨$¯/©/Ó*;Ó&<�	˜(Ñ#ðÜ&)Ü—G‘G×$Ñ$×7Ñ7¸¿¹Ó8IÓJó'�	˜(Ñ#ð
Ü$'Ü—G‘G×$Ñ$×7Ñ7¸¿¹»ÓHó%�	˜&Ñ!ð
Ü%(Ü—G‘G×$Ñ$×6Ñ6°t·~±~Ó7GÓHó&�	˜'Ñ"ô
 �t˜V×$Ñ$¬°D·I±I¼r¿y¹y×)IÑ)IÙ$3°D·I±IÓ$>�	˜&Ñ!ØÐøô= ó Úðûô ó Úðûô ó Úðûô ó Úðûô ó Ùðûô ó Ùðúsu   »CJ ÄJ Ä+J ÅJ# Å%AJ4 Æ)AK Ç-AK Ê
JÊJÊ
J ÊJ Ê#
J1Ê0J1Ê4
KËKË
KËKË
K"Ë!K")Úop_nameÚcuda_device_nameÚcuda_device_countrŠ  Úautotuning_timeÚprecompile_timeÚprescreening_timezautotuning_result_json_list.txtÚatzutf-8)ÚencodingÚbenchmark_resultÚ
)r   r‘  r¢  Údictrz   r}   ÚcudaÚget_device_nameÚdevice_countr  r©   Ú	info_dictÚupdateÚjsonÚdumprh  )rö   r,   rŠ  r‹  r�  rŽ  r�  rN   Úgeneral_propertiesr+  ÚcallerÚtimerµ  r‘  r¥  s                @@r5   Úlog_autotuning_resultsÚ%DebugFormatter.log_autotuning_resultsw  s  ù€ õ 	$ð6	¤"§)¡)ð 6	´´S¼#°X±÷ 6	ð 6	ðr Ü %§
¡
× :Ñ :Ó <Ü!&§¡×!8Ñ!8Ó!:Ù>IÓJºk°d™O¨DÖ1¹kÑJØ%Ø0Ø!4ñ
Ðð ×ÑØ-¨t¸gð  ñ 
àØ '§¡¦‘�Ü  ×!1Ñ!1Ó!3Ó4�	Ø× Ñ Ð!3Ô4Ø04Ð,Ñ-Ü—	’	˜)Ô(Ø—‘˜–ñ !0÷
ð 
ùò K÷

õ 
ús   Á4D
ÂA/DÄ
D*)r  r  r  rZ  )Úpy)r[   rP  rQ  rR  rç   r÷   r}   r   r   ÚlistÚTensorrj  rm  ÚSchedulerNodeListr)   r*   rU  rz   rq  r~  r„  rˆ  r   r¢  r±  Úfloatr   r¼  rX  r3   r4   r5   rJ  rJ  %  s�  † ð ð °ô ð<à�H‰H× Ñ ð<ð �U—\‘\Ñ"ð<ð 
ô	<ð<<à�H‰H× Ñ ð<ð �U—\‘\Ñ"ð<ð 
ô	<ð,Ð#4ð ,¸ô ,ð,Ð$5ð ,¸$ô ,ð ðÐ*ð ¨só ó ððFÐ#4ð F¸ô Fð
à�H‰H× Ñ ð
ð !ð
ð 
ô	
ñI Cð I°Cð IÀ4õ IðTàðTð ˜"Ÿ)™)‘_ðTð �n eÐ+Ñ,ð	Tð
 ðTð !ðTð & e™_ðTð 
÷Tr4   rJ  c                 óä   • [         R                  [        R                  5      (       a)  [         R	                  S[
        R                  U 5      5        [        R                  R                  U 5        g )NzBEFORE FUSION
%s)
Úir_pre_fusion_logÚisEnabledForr¾   r$  ÚinforJ  rq  r%   r  r)   ©r7   s    r5   Úlog_ir_pre_fusionrÈ  Î  sE   € Ü×%Ñ%¤g§l¡l×3Ñ3Ü×ÑÐ2´N×4LÑ4LÈUÓ4SÔTä‡G�G×Ñ˜%Õ r4   c                 óä   • [         R                  [        R                  5      (       a)  [         R	                  S[
        R                  U 5      5        [        R                  R                  U 5        g )NzAFTER FUSION
%s)
Úir_post_fusion_logrÅ  r¾   r$  rÆ  rJ  rq  r%   r  r*   rÇ  s    r5   Úlog_ir_post_fusionrË  Õ  sE   € Ü×&Ñ&¤w§|¡|×4Ñ4Ü×ÑÐ 2´N×4LÑ4LÈUÓ4SÔTä‡G�G×Ñ˜5Õ!r4   Úschedulec                 óp   ^ •  [        SS U 4S jS9  g ! [         a    [        R                  SSS9   g f = f)NÚartifactc                  ó   • SSS.$ )NÚinductor_collective_scheduler·  ©r,   r®  r3   r3   r4   r5   Ú<lambda>Ú+_dump_collective_schedule.<locals>.<lambda>à  s   € Ø6Ø"ò!r4   c                  ó   >• T $ rm   r3   ©rÌ  s   €r5   rÒ  rÓ  ä  s   ø€ ™xr4   ©Úmetadata_fnÚ
payload_fnzAFailed to log inductor_collective_schedule via structured loggingTrD  )r   rK  r?   r  rÕ  s   `r5   Ú_dump_collective_schedulerÙ  Ü  sE   ø€ ð
ÜØñô (ó	
øô ó 
Ü�	‰	ØOØð 	ó 	
ð
ús   ƒ ”5´5c           
      óÊ   • U  Vs/ s H>  n[        [        USS 5      =n[        R                  5      (       d  M1  [        USS 5      PM@     nnU(       a  [	        U5        g g s  snf )NrN   Úpython_kernel_name)rD   rI  r   Ú_CollectiveKernelrÙ  )r7   rN   ÚoprÌ  s       r5   Úlog_collective_schedulerÞ  í  se   € ñ óâˆDÜœG D¨&°$Ó7Ð7�b¼×9MÑ9M×Nó 	0Œ�Ð(¨$Ö/Ùð ð ö Ü! (Õ+ð ùòs
   …0A ¹A Únode_runtimesc           	      ó’  ^^•  [         R                  R                  R                  mS[        [
        [              S[        [           4U4S jjnS[        S[        [           4S jn/ mU  GH  u  p4[        UR                  SUR                  5       5      n[        R                  " UR                  5      (       a  SOSn/ n UR                  5        H‘  nUR                  n	U	R                  5       n
[!        U	R"                  [$        R&                  5      (       a  U	R)                  5       OS	nU	R+                  5       nUR-                  U" U
5      U" U5      U" U5      S
.5        M“     TR-                  UUUUS.5        GM     [1        SS U4S jS9  g	! [.         a     N8f = f! [.         a    [2        R5                  SSS9   g	f = f)zDLog per-op runtime estimates and output tensor metadata for TLParse.ro   r/   c                 ó0   >• U b  [        T" U 5      5      $ / $ rm   )r¿  )ro   Úto_optimization_hintss    €r5   Úto_listÚ,log_runtime_and_tensor_meta.<locals>.to_listÿ  s   ø€ Ø56±]”4Ñ-¨aÓ0Ó1ÐJÈÐJr4   rI   c                 óF   • U c  g [        U 5      nUR                  S5      nU$ )Nztorch.)rz   Úremoveprefix)rI   Úss     r5   Údtype_to_strÚ1log_runtime_and_tensor_meta.<locals>.dtype_to_str  s&   € Ø‰}ØÜ�E“
ˆAØ—‘˜xÓ(ˆAØˆHr4   rÛ  Ú
collectiverd   N)Úshaper–  rI   )r,   r`   Úestimated_runtime_nsr“   rÎ  c                  ó   • SSS.$ )NÚ inductor_runtime_and_tensor_metar·  rÑ  r3   r3   r4   r5   rÒ  Ú-log_runtime_and_tensor_meta.<locals>.<lambda>/  s   € Ø:Ø"ò!r4   c                  ó   >• ST 0$ )NÚopsr3   )rñ  s   €r5   rÒ  rï  3  s	   ø€   s™|r4   rÖ  z.Failed to log inductor_runtime_and_tensor_metaTrD  )r%   rK   r›  rœ  r   r   r   r¿  rz   rI  rN   r‰   r   Úis_collectiverx   Úmaybe_get_sizerD   r˜  r   ÚLayoutrŸ  Úmaybe_get_dtyperˆ   rK  r   r?   r  )rß  rã  rè  rç  Ú
runtime_nsr,   Úop_typer“   ru   Úirnoderë  r–  rI   rñ  râ  s                @@r5   Úlog_runtime_and_tensor_metarù  ù  s¥  ù€ ð:SÜ !§¡× 0Ñ 0× CÑ CÐð	K”x¤¬¡Ñ.ð 	K´4¼±9÷ 	Kð	¤ð 	¬´©ô 	ð %'ˆÜ*‰MˆAÜ˜1Ÿ6™6Ð#7¸¿¹»ÓFˆDÜ&+×&9Ò&9¸!¿&¹&×&AÑ&A‘lÀyˆGð -/ˆGðØŸ=™=ž?�CØ ŸX™X�FØ"×1Ñ1Ó3�Eô & f§m¡m´R·Y±Y×?Ñ?ð ×)Ñ)Ô+à!ð ð
 #×2Ñ2Ó4�EØ—N‘Ná%,¨U£^Ù&-¨f£oÙ%1°%Ó%8ñöñ +ð& �J‰Jà Ø#Ø,6Ø&ñ	÷ñ5 +ôF 	Øñô ,ó	
øô ó Ùðûô( ó SÜ�	‰	ÐBÈTˆ	ÓRðSús7   „B?F% ÃB%FÅ)+F% Æ
F"ÆF% Æ!F"Æ"F% Æ%GÇGc                  ó€   • [         (       d  g [        SS S S9  g! [         a    [        R	                  SSS9   gf = f)	z:Emit a structured artifact with the graph execution order.NrÎ  c                  ó   • SSS.$ )NÚgraph_executionr·  rÑ  r3   r3   r4   r5   rÒ  Ú%log_graph_execution.<locals>.<lambda>@  s   € Ø)Ø"ò!r4   c                  ó   • S[         0$ )NÚgraph_execution_order)r&   r3   r4   r5   rÒ  rý  D  s   € Ð 7Ô9NÑOr4   rÖ  zFailed to log graph_executionTrD  )r&   r   rK  r?   r  r3   r4   r5   Úlog_graph_executionr   9  sK   € ç Ò Øð
BÜØññ Pó	
øô ó BÜ�	‰	Ð1¸Dˆ	ÓAðBús   Ž œ=¼=c               #   ól   #   • / q 0 qSq Sv •  [        5         SqSq Sqg! [        5         SqSq Sqf = f7f)z5Record graph execution order and log it once on exit.TNF)r&   r(   r'   r   r3   r4   r5   Ú$record_and_log_graph_execution_orderr  J  sT   é € ð ÐØÐØ!Ðð!ÛäÔØ!&ÐØ $ÐØ Ñøô 	ÔØ!&ÐØ $ÐØ Ñüs   ‚4Š Ž4Ÿ1±4c                   ó>   • \ rS rSr% \\S'   \R                  \S'   Srg)ÚTensorMetadataHolderiZ  Útensor_metadatarh   r3   N)	r[   rP  rQ  rR  r   Ú__annotations__r}   rh   rX  r3   r4   r5   r  r  Z  s   ‡ à#Ó#Ø�L‰LÖr4   r  Úpre_grad_graph_idÚpost_to_pre_grad_nodes_jsonc           	      óf  ^• 0 0 S.n[        U[        5      (       d  [        R                  S5        U$ [        U [        5      (       d  U$ [
        R                  " [        5      n[
        R                  " [        5      n S[        [        [        4   S[        4S jnUR                  5        GH[  u  pg[        U[        5      (       d  [        R                  S5        Us  $ U GH   nU" U5      (       d  Us  s  $ UR                  S5      U :X  a,  X8S      R                  U5        XF   R                  US   5        UR                  S	/ 5       V	s/ s H  o™U4PM     n
n	U
(       d  M„  U
R                  5       u  nmU" U5      (       d  Us  s  $ UR                  S5      U :X  a-  X;S      R                  T5        UT   R                  US   5        U
R!                  U4S
 jUR                  S	/ 5       5       5        U
(       a  Mœ  GM#     GM^     S[        [        [        4   SS4S jnU" U5        U" U5        UUS.$ s  sn	f ! ["         ae  n[%        SSS[        U5      [&        R(                  " 5       S.5        [        R                  SU5        [        R                  SU 5        Us SnA$ SnAff = f)zl
Create bidirectional mappings between pre_grad graph nodes
and post_grad graph code nodes, and vice versa.
)Ú	preToPostÚ	postToPrezCProvenance tacking error: post_to_pre_grad_nodes_json is not a dictrN   r/   c                 óª   • [        U [        5      (       d  [        R                  S5        gSU ;  d  SU ;  d  SU ;  a  [        R                  S5        gg)NzVProvenance tacking error: node provenance in post_to_pre_grad_nodes_json is not a dictFÚgraph_idr,   Ú	from_nodezYProvenance tacking error: node provenance in post_to_pre_grad_nodes_json has wrong formatT)rD   r±  r?   Úerror)rN   s    r5   Úcheck_formatÚ8create_mapping_pre_post_grad_nodes.<locals>.check_format  sQ   € Ü˜d¤D×)Ñ)Ü—	‘	Ølôð Ø Ó%¨°tÓ);¸{ÐRVÓ?VÜ—	‘	Øoôð Ør4   zIProvenance tacking error: post_to_pre_grad_nodes_json value is not a listr  r,   r  c              3   ó*   >#   • U  H  oT4v •  M
     g 7frm   r3   )rn   rî   Ú
parent_keys     €r5   rq   Ú5create_mapping_pre_post_grad_nodes.<locals>.<genexpr>£  s   øé € ð !Ú1R¨A˜J�Ò1Rùs   ƒÚdNc                 óJ   • U  H  n[        X   5      X'   M     [        U 5      n g rm   ©r¿  r±  ©r  Úkeys     r5   Úconvert_sets_to_listsÚAcreate_mapping_pre_post_grad_nodes.<locals>.convert_sets_to_lists§  ó"   € Û�Ü˜a™f›�“ñ ä�Q“‰Ar4   r_  Úprovenance_tracking_errorÚ"create_mapping_pre_post_grad_nodes©ÚfunctionÚ	error_msgÚstack_tracez post_to_pre_grad_nodes_json:  %szpre_grad_graph_id:  %s)rD   r±  r?   r  rF   r{   Údefaultdictr   rz   r   r‡   r©   r¿  r±   rª   ÚpopÚextendrK  r   Ú	tracebackÚ
format_exc)r  r  Úempty_returnÚpre_to_postÚpost_to_prer  Ú	outer_keyÚ
node_arrayrN   rî   rÑ   Úcurrent_noder  Úer  s                 @r5   r  r  c  sƒ  ø€ ð Øñ5€Lô
 Ð1´4×8Ñ8Ü�	‰	ÐWÔXØÐäÐ'¬×-Ñ-ð Ðä"-×"9Ò"9¼*Ó"E€KÜ"-×"9Ò"9¼*Ó"E€KðDð	œt¤C¬ H™~ð 	´$ô 	ð &A×%FÑ%F×%HÑ!ˆIÜ˜j¬$×/Ñ/Ü—	‘	Ø_ôð $Ò#Ü"�Ù# D×)Ñ)Ø'Ô'à—8‘8˜JÓ'Ð+<Ó<Ø V¡Ñ-×1Ñ1°)Ô<ØÑ*×.Ñ.¨t°F©|Ô<ð 26·±¸+ÀrÔ1JÓKÒ1J¨A˜Y›Ñ1J�ÐKß�eØ/4¯y©y«{Ñ,�L *Ù'¨×5Ñ5Ø+Ô+Ø#×'Ñ'¨
Ó3Ð7HÓHØ#°Ñ$8Ñ9×=Ñ=¸jÔIØ# JÑ/×3Ñ3°LÀÑ4HÔIØ—L‘Lô !Ø1=×1AÑ1AÀ+ÈrÔ1Ró!ô ÷ “eô #ñ &Ið6	¤T¬#¬s¨(¡^ð 	¸ô 	ñ 	˜kÔ*Ù˜kÔ*à$Ø$ñ
ð 	
ùò) Løô0 ó ô 	ØØ'à@Ü  ›VÜ(×3Ò3Ó5ñô	
ô 	�	‰	Ð4Ð6QÔRÜ�	‰	Ð*Ð,=Ô>ØÕûðúsR   Á?A!I Ã!I Ã:AI ÅH<ÅI Å'%I ÆA4I È8I È<I É
J0ÉAJ+Ê%J0Ê+J0Útriton_kernel_to_post_grad_jsonc           	      óf  • 0 0 S.n[        U [        5      (       d  [        R                  S5        U$ [        R
                  " [        5      n U R                  5        HO  u  p4[        U[        5      (       d  [        R                  S5        Us  $ U H  nX%   R                  U5        M     MQ     S[        [        [        4   SS4S jnU" U5        U US.$ ! [         aO  n[        SS	S
[        U5      [        R                  " 5       S.5        [        R                  SU 5        Us SnA$ SnAff = f)ziCreate bidirectional mappings between triton kernel name and post_grad
graph code nodes, and vice versa.
)ÚcppCodeToPostÚpostToCppCodezGProvenance tacking error: triton_kernel_to_post_grad_json is not a dictzMProvenance tacking error: triton_kernel_to_post_grad_json value is not a listr  r/   Nc                 óJ   • U  H  n[        X   5      X'   M     [        U 5      n g rm   r  r  s     r5   r  ÚFcreate_node_mapping_kernel_to_post_grad.<locals>.convert_sets_to_listsã  r  r4   r_  r  Ú"create_mapping_kernel_to_post_gradr  z$triton_kernel_to_post_grad_json:  %s)rD   r±  r?   r  r{   r#  r   r©   r¿  rª   rz   r   rK  r   r&  r'  )r/  r(  Úpost_to_cpp_coder+  r,  Ú	curr_noder  r.  s           r5   Ú'create_node_mapping_kernel_to_post_gradr8  Ä  s3  € ð Øñ/€Lô
 Ð5´t×<Ñ<Ü�	‰	ØUô	
ð Ðä'2×'>Ò'>¼zÓ'JÐð$Ø%D×%JÑ%JÖ%LÑ!ˆIÜ˜j¬$×/Ñ/Ü—	‘	Øcôð $Ò#Û'�	Ø Ñ+×/Ñ/°	Ö:ó (ñ &Mð	¤T¬#¬s¨(¡^ð 	¸ô 	ñ 	Ð.Ô/à<Ø-ñ
ð 	
øô ó ô 	ØØ'à@Ü  ›VÜ(×3Ò3Ó5ñô	
ô 	�	‰	Ø2Ð4Sô	
ð Õûðús'   ÁAC ÂAC Ã
D0Ã!AD+Ä%D0Ä+D0c            	      óÈ  •  0 n [         (       aw  [        [        5      n0 [        EUEn [        R
                  R                  (       a?  [        R                  R                  SS5       n[        R                  " X5        S S S 5        SU S'   U $ ! , (       d  f       N= f! [         a9  n[        SSS[        U5      [        R                   " 5       S.5        0 s S nA$ S nAff = f)	Nz/inductor_provenance_tracking_node_mappings.jsonrO  g       @Úversionr_  r  Údump_inductor_provenance_infor  )rÖ   r8  rÕ   rÔ   r   rM   r   r%   r  r  r·  r¸  rK  r   rz   r&  r'  )Únode_mappingÚnode_mapping_kernelr+  r.  s       r5   r;  r;     sÑ   € ð"ð (*ˆßÒÜ"IÜ>ó#ÐðÜ2ðà%ðˆLô �|‰|×#×#Ü—W‘W—]‘]ØEÀsôàÜ—I’I˜lÔ/÷ð #&ˆ�YÑØÐ÷õ ûô ó ô 	ØØ'à;Ü  ›VÜ(×3Ò3Ó5ñô	
ð �	ûðús6   ‚A%B Á'BÁ>B Â
BÂB Â
C!Â(.CÃC!ÃC!c            	      ó*  •  [         R                  S0 5      n [        [        R	                  5       5      [        [
        R	                  5       5      -  n0 nU Hr  n[
        R                  U/ 5      n[        5       nU H$  nUR                  U R                  U/ 5      5        M&     [        R                  U/ 5      U[        U5      S.X#'   Mt     U$ ! [         a9  n[        SSS[        U5      [        R                  " 5       S.5        0 s SnA$ SnAff = f)zCreate kernel information JSONr  )Ústack_tracesÚpost_grad_nodesÚpre_grad_nodesr_  r  Úcreate_kernel_information_jsonr  N)rÔ   r±   r   rØ   ÚkeysrÕ   r¶  r¿  rK  r   rz   r&  r'  )r*  Úall_kernelsÚresultÚkernel_namer@  rA  Ú	post_noder.  s           r5   rB  rB  &  s  € ð%ô
 7×:Ñ:¸;ÈÓKˆÜ Ô!=×!BÑ!BÓ!DÓEÌ
Ü:×?Ñ?ÓAóI
ñ 
ˆð ˆÛ&ˆKÜL×PÑPØ˜RóˆOô /9«lˆNÛ,�	Ø×%Ñ% k§o¡o°iÀÓ&DÖEñ -ô !=× @Ñ @ÀÈbÓ QØ#2Ü"& ~Ó"6ñ#ˆFÓñ 'ð ˆøÜó 
ÜØØ'à<Ü  ›VÜ(×3Ò3Ó5ñô	
ð �	ûð
ús   ‚CC Ã
DÃ.DÄDÄDÚnode_schedulerF  r   c           	      ó8  ^
• [         R                  R                  S:X  a  g SSKJnJn  [        S-  q/ nU S[         3nU(       a«  [        U [        5      (       d   e[        R                  U/ 5      m
U R                  (       a.  U R                  R                  nUT
;  a  T
R                  U5        O%T
R                  U
4S jU R                   5       5        [!        U R#                  5       5      nO»[        U [         5      (       d   e[%        5       nU  H‰  nX„U4;  d  M  UR&                  c  M  [        R                  U/ 5      m
UR)                  UR&                  R#                  5       5        T
R                  U
4S jUR&                  R                   5       5        M‹     [!        U5      n[*        R                  U/ 5      R                  U5        [        $ ! [,         a7  n	[/        SS	S
[1        U	5      [2        R4                  " 5       S.5         Sn	A	gSn	A	ff = f)z—
Set the mapping between `kernel_name` and the post_grad nodes in `node_schedule`.

Returns a unique int debug handler for each call to this function.
r   Nr   )ÚDisableReductionÚEnableReductionÚ:c              3   ó`   >#   • U  H#  nUR                   T;  d  M  UR                   v •  M%     g 7frm   ©r,   ©rn   r¦   Úcurr_node_infos     €r5   rq   Ú:set_kernel_post_grad_provenance_tracing.<locals>.<genexpr>u  s*   øé € ð &â"7˜Ø—{‘{¨.Ñ8ó  �F—K–KÚ"7ùó   ƒ.›.c              3   ó`   >#   • U  H#  nUR                   T;  d  M  UR                   v •  M%     g 7frm   rN  rO  s     €r5   rq   rQ  ˆ  s,   øé € ð .ò += Ø%Ÿ{™{°.Ñ@ó (˜FŸKžKâ*<ùrR  r_  r  Ú'set_kernel_post_grad_provenance_tracingr  )r   rM   Úprovenance_tracking_levelÚcodegen.simd_kernel_featuresrJ  rK  rÙ   rD   r   rÕ   Ú
setdefaultÚorigin_noder,   rˆ   r%  r¢   r¿  Úget_stack_tracesr   rN   r¶  rØ   rK  r   rz   r&  r'  )rH  rF  r   rJ  rK  r?  Úorigin_node_nameÚstack_traces_setr_   r.  rP  s             @r5   rT  rT  P  sá  ø€ ô ‡|�|×-Ñ-°Ó2Øð?ßSô 	1°AÑ5Ð0Ø"$ˆØ$˜ QÔ'OÐ&PÐQˆÞÜ˜m¬\×:Ñ:Ð:Ð:ÜK×VÑVØ˜RóˆNð ×(×(Ø#0×#<Ñ#<×#AÑ#AÐ Ø#¨>Ó9Ø"×)Ñ)Ð*:Ô;øà×%Ñ%ô &à"/×"7Ò"7ó&ô ô
   × >Ñ >Ó @ÓA‰Lä˜m¬T×2Ñ2Ð2Ð2Ü0:³ÐÛ&�ØÐ2BÐ CÕCØ—z‘zÓ-äJ×UÑUØ +¨Róð 'ð )×/Ñ/°·
±
×0KÑ0KÓ0MÔNØ&×-Ñ-ô .ð +0¯*©*×*<Ò*<ó.ö ñ 'ô   Ð 0Ó1ˆLÜ$×/Ñ/°¸RÓ@×GÑGÈÔUÜ7Ð7øÜó ô 	ØØ'àEÜ  ›VÜ(×3Ò3Ó5ñô	
ô ûðús%   ¢C;G Ä!G Ä0B'G Ç
HÇ"-HÈHrV   rj   c                  óJ  • [         R                  R                  [        R                  " 5       S5      n[         R                  R                  U5      (       d  [         R                  " U5        S[        S[        4S jn[        X0U45      u  pESnU SU S[        [        5       S3n[        US	5       n[        R                  " XE4U5        S
S
S
5        [        R                  [         R"                  5      (       a  SU SU< S3n	[%        U	5        g
g
! , (       d  f       NM= f)zØ
This function is used to save arguments for a compile_fx_inner function call
to the file system.  Later on one can replay the compile_fx_inner call
with the saved arguments using load_args_and_run_compile_fx_inner.
Úinductor_saved_argsro   r/   c                 ó‚   • [        U [        R                  5      (       a  [        [	        U 5      U R
                  5      $ U $ )zÆ
Pickle FakeTensor will result in error:
AttributeError: Can't pickle local object 'WeakValueDictionary.__init__.<locals>.remove'

Convert all Tensor to metadata. This may also makes pickle faster.
)rD   r}   rÀ  r  r   rh   ©ro   s    r5   Úhandle_tensorÚ5save_args_for_compile_fx_inner.<locals>.handle_tensor«  s1   € ô �aœŸ™×&Ñ&Ü'Ô(@ÀÓ(CÀQÇXÁXÓNÐNàˆHr4   Úcompile_fx_innerÚ/Ú_z.pklÚwbNz3
Arguments for a compile_fx_inner call is saved to z’. To replay the call,
run the following:

from torch._inductor.debug import load_args_and_run_compile_fx_inner
load_args_and_run_compile_fx_inner(z
)
        )r»   rÆ   rÇ   ÚtempfileÚ
gettempdirrí   Úmkdirr   r   ÚnextÚsave_args_cntr  Úpickler¸  r?   rÅ  r¾   rË   rJ   )
rV   rj   Úfolderr`  Úargs_to_saveÚkwargs_to_saveÚfn_namerÆ   r
  Úmessages
             r5   Úsave_args_for_compile_fx_innerrq     sü   € ô �W‰W�\‰\œ(×-Ò-Ó/Ð1FÓG€FÜ�7‰7�>‰>˜&×!Ñ!Ü
�Š�Ôð
œð 
¤ô 
ô $,¨MÀ&¸>Ó#JÑ €Là €GØˆX�Q�w�i˜q¤¤mÓ!4Ð 5°TÐ:€DÜ	ˆd�DÔ	˜QÜ�Š�\Ð2°AÔ6÷ 
ô ×ÑœŸ™×&Ñ&ð3Ø37°&ð 9$ð %)¡8ð ,	ðˆô 	ˆg�ð '÷ 
Õ	ús   Â4DÄ
D"rÆ   c                 óÆ  • SSK Jn  [        U S5       n[        R                  " U5      u  p4S S S 5        S[
        S[
        4S jn[        R                  R                  SS9nU   [        R                  " S	S
5         [        UWW45      u  p4U" U0 UD6sS S S 5        sS S S 5        $ ! , (       d  f       N�= f! , (       d  f       O= fS S S 5        g ! , (       d  f       g = f)Nr   )rb  Úrbro   r/   c                 ó  • [        U [        5      (       ar  [        R                  R                  R                  U R                  R                  U R                  R                  U R                  R                  U R                  5      $ U $ rm   )rD   r  r}   Ú_dynamoÚtestingÚrand_stridedr  rë  r–  rI   rh   r_  s    r5   r`  Ú9load_args_and_run_compile_fx_inner.<locals>.handle_tensorÔ  sh   € Ü�aÔ-×.Ñ.Ü—=‘=×(Ñ(×5Ñ5Ø×!Ñ!×'Ñ'Ø×!Ñ!×(Ñ(Ø×!Ñ!×'Ñ'Ø—‘ó	ð ð ˆHr4   T)Úallow_non_fake_inputsÚ	save_argsF)Útorch._inductor.compile_fxrb  r  rk  Úloadr   r}   re  ÚFakeTensorModer   r
   r   )rÆ   rb  r
  rV   rj   r`  Ú	fake_modes          r5   Ú"load_args_and_run_compile_fx_innerr  Î  s§   € Ý;ä	ˆd�DÔ	˜QÜ—{’{ 1“~‰ˆ÷ 
ð	œð 	¤ô 	ô ×!Ñ!×0Ñ0ÀtÐ0ÐL€IÚ	”F—L’L ¨eÕ4Ü °°f¨~Ó>‰ˆÙ Ð0¨Ñ0÷ 5Ð4�‰÷ 
Õ	ú÷ 5Õ4ú��Žús/   “B'Á$CÁ<B8Â	CÂ'
B5Â8
C	ÃCÃ
C )Úpackage_pathÚfunc.Úexported_programÚinductor_configsr€  c          	      ó®  • SSK Jn  SSKJn  SSKJn  SSKJn  UR                  R                  nUR                  SS9n	[        U	[        R                  R                  5      (       d   eUR                  u  p« U(       a"  UR                  R                   S:X  a  U" US	US
9  U(       a¹  UR                  R                   S:X  aŸ  ["        R$                  " U	5      n["        R$                  " UR                  5      n["        R$                  " U5      nU" UUS   US   US
9u  pþ['        U5      n[        R(                  R)                  UUSS9nU " UR                  SS9UUUSSS9  U " U	U
UUUUS9$ ! U a%  nU" USSUS9  [*        R-                  S5        UeS nAf[.         a5  nU(       a'  SnUR                  R                   S:X  a  SnU" US	UUS9  UeS nAff = f)Nr   )ÚAccuracyError)Údump_to_minify)r   )Ú_aoti_flatten_inputsF)Úcheck_guardsé   Úaot_inductor)Úoptionsé   r   )ÚstrictTÚaccuracy)rƒ  r€  Úload_and_runÚcheck_accuracy)rƒ  r€  r�  Úaot_inductor_accuracyÚminify)Úcommandr‹  zAccuracy failedÚrun)Útorch._dynamo.debug_utilsr…  Útorch._dynamo.repro.aotir†  Útorch._inductorr   r{  r‡  rŠ  Údump_aoti_minifierÚmodulerD   r}   r   r   Úexample_inputsÚrepro_levelrÞ   ÚdeepcopyrE   Úexportr?   r@   rK  )r�  r‚  rƒ  r€  r…  r†  r   r‡  Úuse_minifierrP   rV   rj   Úgm_copyÚexample_inputs_copyÚconfig_copyÚflat_example_inputsÚtuple_inputsÚflattened_epr.  r“  s                       r5   Úaot_inductor_minifier_wrapperr¥  å  së  € õ 8Ý7Ý&Ý?à×&Ñ&×9Ñ9€Là	×	 Ñ	 ¨eÐ	 Ð	4€BÜ�bœ%Ÿ(™(×.Ñ.×/Ñ/Ð/Ð/à#×2Ñ2�L€Dð>Þ˜F×/Ñ/×;Ñ;¸qÓ@áØ ØØ(òö
 ˜F×/Ñ/×;Ñ;¸qÓ@ô —m’m BÓ'ˆGÜ"&§-¢-Ð0@×0OÑ0OÓ"PÐÜŸ-š-Ð(8Ó9ˆKÙ/CØØ# AÑ&Ø# AÑ&Ø#ñ	0Ñ,Ðô !Ð!4Ó5ˆLÜ Ÿ<™<×.Ñ.¨w¸ÈUÐ.ÐSˆLÙØ×#Ñ#°Ð#Ð7ØØ!,Ø)Ø!Ø)òñ ØØØØ-Ø%Ø%ñ
ð 	
øð ó ÙØØ#ØØ$ò		
ô 	�‰Ð%Ô&ØˆûÜó ÞØˆGà×"Ñ"×.Ñ.°!Ó3Ø�áØ ØØØ(ò	ð ˆûðús%   Á8C3E, Å,GÅ2 FÆGÆ0GÇG)FNrX   rN  )F)„r{   rÂ   rÞ   ÚdataclassesÚ	functoolsrx  rS  r·  r¾   r»   Úos.pathrk  r<  r1   rf  r&  Úcollections.abcr   r   r   Útypingr   r   r   r	   Úunittest.mockr
   r}   Úfunctorch.compiler   r   r   r   Útorch._dynamo.repro.after_aotr   Útorch._dynamo.utilsr   r—  r   Útorch._loggingr   Útorch._logging._internalr   Útorch._utils_internalr   Útorch.fx.graph_moduler   Útorch.fx.passes.shape_propr   r   Útorch.fx.passes.tools_commonr   Útorch.typesr   Útorch.utils._ordered_setr   Útorch.utils._pytreer   r“  r   r   r   Ú	schedulerr    r!   r"   r#   r$   Úvirtualizedr%   r¿   r[   r?   r&   r¿  r±  rz   Úobjectr  r'   r‡   r(   rF   rÄ  rÊ  rÁ  r|   r+   rƒ  Úcacher6   rQ   r~   rA   r¡   r®   r²   rV  rÓ   rÔ   rÕ   rÖ   r×   rØ   rÙ   rÛ   rå   rç   rJ  rÈ  rË  rÙ  rÞ  rE   rÂ  rù  r   r  Ú	dataclassr  rT  rj  r  r8  r;  rB  rT  rq  r  r�  ÚExportedProgramr¥  r3   r4   r5   Ú<module>r¾     s•  ðÜ Û Û Û Û Û 	Û Û Û Û 	Û Û Û Û Û Û ß 8Ñ 8ß +Ó +Ý ã ß VÑ VÝ Ý :Ý -Ý !Ý ,Ý 5Ý 0Ý -ß OÝ 7Ý  Ý /Ý (ç Ý ÷õ õ ð ×Ò˜Ó!€ð <@Ð �x  T¨#¨v¨+Ñ%6Ñ 7Ñ8Ó ?Ø$Ð ˜Ó $Ø8<Ð �8˜D  h¨s¡mÐ!3Ñ4Ñ5Ó <á% h°Ó@Ð Ù& xÐ1AÓBÐ Ø˜‘IÐ Ø
×
 Ò
  ¨V°ZÐ,@Ó
A€ÚTÐ ð ‡�ð+�ó +ó ð+ð Øñ,ØÐ!Ñ"ð,àð,ð �C‰=ð,ð 
õ	,ð^` $Ð'8Ñ"9ð `¸b¿h¹hô `ðL &*Øñ	!ØÐ%Ñ&ð!à  S ™>ð!ð ˜c‘]ð!ð ð	!ð
 
õ!ðH!Ø  S ™>ð!à	ˆ#ˆwˆ,Ñô!ð$IØ�‰×ÑðIàðIð 
ôIð" ×Ñð%˜H T™Nó %ó ð%ðV EGÐ   $ s¨D°°d¸3±i°Ñ,@Ð'@Ñ"AÓ FØGIÐ .°°S¸$¸s¹)°^Ñ0DÓ IØ$(Ð �H˜S‘MÓ (Ø68Ð # T¨#¨s¨(¡^Ó 8Ø57Ð ˜d 3¨¨S©	 >Ñ2Ó 7Ø01Ð (¨#Ó 1ô1ð
 ×Ñð/
 (¨4¡.ó /
ó ð/
÷dYñ Y÷xfñ fðR!Ð.ð !°4ô !ð"Ð/ð "°Dô "ð
¨¨U°3¸°9Ñ-=Ñ(>ð 
À4ô 
ð"	, 8Ð,=Ñ#>ð 	,À4ô 	,ð=S¨x¸¸cÀ5¸jÑ8IÑ/Jð =SÈtô =Sô@Bð" ×Ñð!¨h°t©nó !ó ð!ð ×Ñ÷ð ó ðð
 —’Ó!€ð^Ø ‘}ð^à!% c¨3 h¡ð^ð 
ˆ#ˆt�C˜˜c™�NÑ#Ð
#Ñ$ô^ðB9Ø%)¨#¨s¨(¡^ð9à	ˆ#ˆt�C˜�H‰~Ð
Ñô9ðx# t¨C°¨H¡~ô #ðL'¨¨S°$°s¸DÀ¹I°~Ñ2FÐ-FÑ(Gô 'ðZ ñMØ˜Ð"3Ñ4°lÐBÑCðMàðMð ðMð ˆc�]õ	Mð`+¨#ð +¸ð +Àô +ð\1¨Sð 1°Sô 1ð8 (,òQØ
�3˜�8Ñ
ðQà—l’l×2Ò2ðQð ˜3 ˜8‘nð	Qð
 ˜8Ñ$ðQð 	öQr4   