Ë
    L²j¸  ã                   ó2  — U d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	Z	d dl
Z	d dlZd dlZd dlZd dlZd dlZd dlmZmZmZ d dlmZmZ d dlmZ d dlZd dlmZmZmZ d dlmZ d dlm Z  d dl!m"Z" d d	l#m$Z$ d d
l%m&Z& d dl'm(Z( d dl)m*Z* d dl+m,Z, d dl-m.Z.m/Z/ d dl0m1Z1 d dl2m3Z3 d dl4m5Z5 d dl6m7Z7 ddl8m9Z9m:Z: ddl:m;Z; ddl<m=Z=m>Z>m?Z?m@Z@mAZA ddlBmCZC  ejˆ                  eE«      ZFdaGeHeIeJeKf      dz  eLd<   daMeNeLd<   daOeIePeJdz  f   dz  eLd<    e&eEd«      ZQ e&eEd«      ZReHe   ZS e j¨                  ddd g«      ZUg d!¢ZVej®                  d"eNfd#„«       ZX	 	 d`d$eHe=   d%eNd&eJdz  d"dfd'„ZYd(eHe=   d"ej´                  fd)„Z[	 	 dad$eSdz  d*eIeJeJf   d+eJdz  d,ePd"df
d-„Z\d*eIeJeJf   d"eIeJeUf   fd.„Z]d/ej<                  jX                  d(eSd"dfd0„Z^ej¾                  d"ed   fd1„«       Z`i aaeIeJeIeJeHeJ   f   f   eLd2<   i abeIeJeHeJ   f   eLd3<   dacePdz  eLd4<   i adeIeJeJf   eLd5<   i aeeIeJeHeJ   f   eLd6<   d afePeLd7<   dbd8„Zgej¾                  d"ed   fd9„«       Zh G d:„ d;«      Zi G d<„ d=«      Zjd$eSd"dfd>„Zkd$eSd"dfd?„Zld@eHeJdz     d"dfdA„Zmd$ee=   d"dfdB„ZndCeeoeepf      d"dfdD„ZqdbdE„Zrej¾                  d"ed   fdF„«       Zsejè                   G dG„ dH«      «       Zu ejì                  «       ZwdIePdz  dJeIeJef   d"eIeJeIeJeHeJ   f   f   fdK„ZxdLeIeJef   d"eIeJeIeJef   f   fdM„Zyd"eIeJef   fdN„Zzd"eIeJeIeJeHeJ   f   f   fdO„Z{	 dcdPee=   e;z  dQeJdReNd"ePdz  fdS„Z|dTedUed"dfdV„Z}dWeJd"efdX„Z~ddYœdZed[eJf   d\ejþ                  �j                   d]eIeJef   d^e3dz  d"eJf
d_„Z�y)dé    N)ÚCallableÚIteratorÚSequence)ÚAnyÚIO)Ú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                  ó0   — t        j                  d«      d uS )Nr,   )ÚshutilÚwhich© ó    úT/var/www/html/ia-enhanced/venv/lib/python3.12/site-packages/torch/_inductor/debug.pyÚhas_dotr4   ?   s   € ä�<‰<˜Ó dÐ*Ð*r2   ÚnodesÚprint_graphÚfnamec           
      ó   — t        «       st        j                  d«       y|€
t        «       }t	        | «      }|j
                  D �]  }d|j                  vrŒ|j                  d   j                  }t        |t        «      r t        |d   t        «      r|d   f}nj|d   }ndt        |t        «      rT	 |j                  d   j                  }|j                  «       d   j                  j                  «       }|rt        |«      nd}d}t        |t"        j$                  «      r|j&                  j(                  }t+        ||ddddd«      }	|	|j                  d<   �Œ |rt-        |«       t/        i |«      }
t1        |
«       |
j2                  j5                  «        t7        |
|dt8        j:                  j<                  ¬	«       y# t         $ r d}Y ŒÈw xY w)
z$
    Draw a graph in fname.svg.
    z*draw_buffers() requires `graphviz` packageNÚfusion_metar   r   r1   Útensor_metaF)Ú
clear_metaÚdot_graph_shape)r4   ÚlogÚwarningr   Úcreate_fx_from_snodesr5   ÚmetaÚgroupÚ
isinstanceÚtupleÚintÚstrÚsnodeÚget_outputsÚnodeÚmaybe_get_sizeÚ	Exceptionr   ÚComputedBufferÚdataÚdtyper   Úprintr   r   ÚgraphÚlintr	   r   Útracer<   )r5   r6   r7   rO   rH   rA   rF   ÚsizerM   ÚmetadataÚgms              r3   Údraw_buffersrU   D   sŠ  € ô Œ9Ü�‰Ð@ÔAØà€}Ü(Ó*ˆä! %Ó(€Eà—‘ó ,ˆØ §	¡	Ñ)ØØ—	‘	˜-Ñ(×.Ñ.ˆÜ�eœUÔ#Ü˜% ™(¤CÔ(Ø˜q™˜‘à˜a™‘Ü˜œsÔ#ðØŸ	™	 -Ñ0×6Ñ6�Ø×(Ñ(Ó*¨1Ñ-×2Ñ2×AÑAÓC�Ù'+œ˜dœ°�ð
 ˆÜ�dœB×-Ñ-Ô.Ø—I‘I—O‘OˆEä! %¨°°d¸DÀ$ÈÓMˆà#+ˆ�	‰	�-Ó ð7,ñ: ÜˆeŒä	�R˜Ó	€BÜ�2ÔØ‡H�H‡M�M„OÜØ
ˆE˜e´V·\±\×5QÑ5Qöøô% ò Ø’ðús   Â1AF?Æ?GÇGÚsnodesc                 óþ  ‡— dt         dt        dt        f   fd„}t        j                  dg d¢«      }i }i }t
        j                  j                  «       }d}g }d}| D �]™  }	|	j                  «       rd}
|
}ns|	j                  «       rd	}
|
}n^t        |	t        «      rd
}
|
}nIt        |	t        «      rd}
|	j                  }n*t        |	t        «      rd}
|	j                  }nt        d«      ‚t
        j                   j"                  j%                  |	j'                  «       d«      }|
› d|› �} ||«      }i }t)        |	d«      rd|	j+                  «       i}|j-                  |d|¬«      }dt.        t        z  dt0        fˆfd„Š ‰|	«      r|j3                  |«       |	j5                  «       }||_         |||	|
«      |j8                  d<   |||<   |	j;                  «       D ]  }|||j5                  «       <   Œ |��Œ˜|}�Œœ | D ]¿  }	|	j5                  «       }|	j<                  j>                  }||   }g }|D ]{  }|j6                  |v r||j6                     }nD|jA                  |«      5  |jC                  |j6                  «      }|||j6                  <   ddd«       |k(  rŒk|j3                  |«       Œ} tE        |«      |_#        ŒÁ |jI                  tK        |«      dk(  r|d   «       |S tE        |«      «       |S # 1 sw Y   ŒixY w)úB
    Creates a FX Graph from a list of SchedulerNode objects.
    r*   r-   .c                 ó4   — dt         dt        fd„}| |_        |S )NÚargsr-   c                   ó   — y©Nr   r1   )rZ   s    r3   Úfunc1z;create_fx_from_snodes.<locals>.get_fake_func.<locals>.func1ƒ   s   € Ør2   )r   rD   Ú__name__)r*   r]   s     r3   Úget_fake_funcz,create_fx_from_snodes.<locals>.get_fake_func‚   s#   € ð	œð 	¤ó 	ð ˆŒØˆr2   Ú
FusionMeta)rA   rF   ÚtypeNÚexternÚtemplateÚnopÚcomputeÚfusedzUnknown node typeÚoriginal_atenz: Ú
get_deviceÚdevicer1   ©rZ   ÚkwargsrF   c                 ó    •— t        | t        «      rt        ˆfd„| j                  D «       «      S t        d„ | j	                  «       D «       «      S )Nc              3   ó.   •K  — | ]  } ‰|«      –— Œ y ­w©Nr1   )Ú.0ÚxÚ	in_outputs     €r3   ú	<genexpr>z;create_fx_from_snodes.<locals>.in_output.<locals>.<genexpr>³   s   øè ø€ Ò>¨A™9 QŸ<Ñ>ùs   ƒc              3   ór   K  — | ]/  }|j                   D ]  }t        |j                  t        «      –— Œ  Œ1 y ­wrn   )ÚusersrB   rH   r!   )ro   ÚbufÚusers      r3   rr   z;create_fx_from_snodes.<locals>.in_output.<locals>.<genexpr>´   s<   è ø€ ò àØŸI™Iòð ô ˜4Ÿ9™9¤j×1ðØ1ñùs   ‚57)rB   r   ÚanyrV   rG   )rF   rq   s    €r3   rq   z(create_fx_from_snodes.<locals>.in_output±   sF   ø€ Ü˜%Ô!3Ô4ÜÓ>°·±Ô>Ó>Ð>Üñ à ×,Ñ,Ó.ôó ð r2   r9   r   r   )&rE   r   rD   ÚcollectionsÚ
namedtupleÚtorchr   ÚGraphÚ	is_externÚis_templaterB   r    r"   rA   r   ÚRuntimeErrorÚ	_inductorr   Úget_fused_kernel_nameÚ	get_nodesÚhasattrrh   Úcall_functionr   ÚboolÚappendÚget_namer*   r@   rG   Úread_writesÚreadsÚinserting_beforeÚplaceholderrC   rZ   ÚoutputÚlen)rV   r_   r`   Úbuf_to_fx_nodeÚnode_to_fx_noderO   Ú
first_nodeÚoutputsrA   rF   Ú	node_typeÚ
fused_nameÚ	func_nameÚ	node_funcrk   Úfx_noder*   ru   ÚdepsÚnew_argsÚdepÚdep_noderq   s                         @r3   r?   r?   }   s  ø€ ð
œCð ¤H¨S´#¨XÑ$6ó ô ×'Ñ'¨Ò6PÓQ€Jà€NØ€OÜ�H‰H�N‰NÓ€EØ€Jà€GØ€Eð ó 2!ˆØ�?‰?ÔØ ˆIØ‰EØ×ÑÔ Ø"ˆIØ‰EÜ˜Ô5Ô6ØˆIØ‰EÜ˜œ}Ô-Ø!ˆIØ—K‘K‰EÜ˜Ô1Ô2ØˆIØ—K‘K‰EäÐ2Ó3Ð3ä—_‘_×*Ñ*×@Ñ@Ø�O‰OÓ˜ó
ˆ
ð !�k  J <Ð0ˆ	Ù! )Ó,ˆ	ØˆÜ�5˜,Ô'Ø × 0Ñ 0Ó 2Ð3ˆFØ×%Ñ% i°bÀÐ%ÓHˆð	Ô.Ô1CÑCð 	Ìõ 	ñ �UÔØ�N‰N˜7Ô#Ø�~‰~ÓˆØˆŒá&0°¸¸yÓ&Iˆ�‰�]Ñ#à 'ˆ˜ÑØ×$Ñ$Ó&ò 	5ˆCØ-4ˆN˜3Ÿ<™<›>Ò*ð	5ð ÒØ ŠJðe2!ðj ò 'ˆØ�~‰~ÓˆØ× Ñ ×&Ñ&ˆà! $Ñ'ˆØˆØò 		&ˆCØ�x‰x˜>Ñ)Ø)¨#¯(©(Ñ3‘à×+Ñ+¨JÓ7ñ 8Ø$×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ð 8ús   É +K3Ë3K<Únode_name_to_buf_nameÚparent_buf_nameÚ	n_originsc                 óX  — | €y | D ]¢  }|j                  «       }|j                  «       }|� t        |«      dkD  rt        |||€|n|«       ŒEt        |«      dk(  r|d   |k(  sJ ‚|j                  }|�|j
                  €Œx|j
                  D ]  }|j                  }	|	|vsŒ|€|n|||	<   Œ Œ¤ y )Nr   r   )r†   r�   rŒ   Ú$update_orig_fx_node_name_to_buf_namerH   Úoriginsr*   )
r5   rš   r›   rœ   rH   Úbuf_nameÚchildren_nodesÚir_nodeÚoriginÚ	node_names
             r3   rž   rž   à   s×   € ð €}ØØò ˆà—=‘=“?ˆØŸ™Ó)ˆØÐ%¬#¨nÓ*=ÀÒ*AÜ0ØØ%Ø+Ð3‘¸ôð
 ô �~Ó&¨!Ò+°¸qÑ0AÀTÒ0IÐIÐIà—)‘)ˆØˆ?˜gŸo™oÐ5ØØ—o‘oò 	ˆFØŸ™ˆIð Ð 5Ò5à /Ð 7‘H¸_ð & iÒ0ñ	ñ%r2   c                 óø   — i }| j                  «       D ]-  \  }}||vrt        |g«      ||<   Œ||   j                  |«       Œ/ i }| j                  «       D ]"  \  }}t        ||   «      }t	        ||«      ||<   Œ$ |S rn   )Úitemsr   ÚaddrŒ   r)   )rš   Úbuf_name_to_n_noder¤   r    Únode_name_to_buf_metaÚn_nodes         r3   Úget_node_name_to_buf_metar«     s¨   € ð ÐØ4×:Ñ:Ó<ò 8Ñˆ	�8ØÐ-Ñ-Ü+5°y°kÓ+BÐ˜xÒ(ð ˜xÑ(×,Ñ,¨YÕ7ð8ð ÐØ4×:Ñ:Ó<ò EÑˆ	�8ÜÐ'¨Ñ1Ó2ˆÜ+2°8¸VÓ+DÐ˜iÒ(ðEð !Ð r2   rT   c                 óà   — i }t        ||«       |€yt        |«      }| j                  j                  D ]9  }|j                  |v sŒ|j                  |j                  «      |j                  d<   Œ; y)rX   NÚbuf_meta)rž   r«   rO   r5   r*   Úgetr@   )rT   rV   rš   r©   rH   s        r3   Úannotate_orig_fx_with_snodesr¯     sm   € ð -/ÐÜ(¨Ð1FÔGØÐ$ØÜ5Ð6KÓLÐØ—‘—‘ò IˆØ�9‰9Ð-Ò-Ø$9×$=Ñ$=¸d¿i¹iÓ$HˆD�I‰I�jÒ!ñIr2   c               #   ó´  K  — t         j                  j                  dd«      dk(  } dd l}t	        j
                  |j                  j                  j                  «      }t        j                  «       }| s	 d –— |j                  «        y |j                  t        dd«      «       t         j                  j                  t!        «       d«      }t        j"                  |d¬«       t	        j$                  t         j                  j                  |d	t'        «       › d
�«      «      }|j)                  t        j*                  «       |j-                  t	        j.                  d«      «       |j1                  |«       	 d –— |j3                  |«       |j                  «        y # |j                  «        w xY w# |j3                  |«       |j                  «        w xY w­w)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_debugrz   r=   ÚstackrÃ   Úfhs         r3   Úenable_aot_loggingrÐ   '  sZ  è ø€ ä—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   ‚A1GÁ4F Á8C>GÅ7F2 Å;"GÆF/Æ/GÆ2#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                  ó   — da y r\   )rÖ   r1   r2   r3   Ú-reset_inductor_kernel_provenance_debug_handlerØ   [  s   € à/0Ñ,r2   c               #   ó   K  — t         } t        j                  «       }t        j                  «       }t        j                  «       }t
        j                  «       }t        }da i ai ai ai ada	 d–— | a |a|a|a|a|ay# | a |a|a|a|a|aw xY w­w)zzContext 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         r3   Úreset_provenance_globalsrâ   `  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                   ó^  — e Zd Z ej                  «       Zedededz  fd„«       Zdd„Z	deddfd„Z
	 dded	ed
ededee   f
d„Zej                  	 dded	ed
ededeee      f
d„«       Zdedefd„Zdd„Zdd„Zdededdfd„Zdee   dz  dedz  dedz  ddfd„Zdd„Zdeded   dz  fd„Zy)ÚDebugContextÚfolder_namer-   Nc                 ó6  — t         j                  j                  xs
 t        «       }t        j
                  D ]`  }t        j                  j                  |d| › d|› �«      }t        j                  j                  |«      rŒIt        j                  |«       |c S  y )Nr´   ú.)r   rQ   Ú	debug_dirr   rä   Ú_counterr¸   rÃ   rÄ   ÚexistsrÅ   )rå   rè   ÚnÚdirnames       r3   Úcreate_debug_dirzDebugContext.create_debug_dir–  s{   € ä—L‘L×*Ñ*Ò=¬m«oˆ	Ü×&Ñ&ò 	ˆAÜ—g‘g—l‘lØØØ�-˜q  Ð$óˆGô
 —7‘7—>‘> 'Õ*Ü—‘˜GÔ$Ø’ð	ð r2   c                 óR   — d | _         d | _        t        j                  «       | _        y rn   )Ú_profÚ_pathr¿   rÀ   Ú_stack)Úselfs    r3   Ú__init__zDebugContext.__init__¤  s    € ØˆŒ
ØˆŒ
Ü ×*Ñ*Ó,ˆ�r2   Únew_pathc                 ó¤  — | j                   sy |j                  d«      sJ |«       ‚ddlm} 	  ||› d�«      5  t        j
                  j                  |«      rt        j                  |«       t        j                  | j                   |«       d d d «       y # 1 sw Y   y xY w# t        $ r$ t        j                  d| j                   |«       Y y w xY w)Nz.debugr   )ÚFileLockz.lockz(Failed to copy debug files from %s to %s)rð   ÚendswithÚfilelockrö   r¸   rÃ   rê   r/   ÚrmtreeÚcopytreeÚOSErrorr=   r>   )rò   rô   rö   s      r3   rÛ   zDebugContext.copy©  s¦   € Ø�zŠzØØ× Ñ  Ô*Ð4¨HÓ4Ð*Ý%ð	Ù˜X˜J eÐ,Ó-ñ 6Ü—7‘7—>‘> (Ô+Ü—M‘M (Ô+Ü—‘ §
¡
¨HÔ5÷6÷ 6ñ 6ûô ò 	Ü�K‰KØ:¸D¿J¹JÈöð	ús/   ­B" ¸ABÂB" ÂBÂB" ÂB" Â"*CÃCÚfilenameÚ
write_moderZ   rk   c                 óŽ   — | j                   sJ ‚t        t        j                  j	                  | j                   |«      |g|¢­i |¤ŽS rn   ©rð   Úopenr¸   rÃ   rÄ   )rò   rü   rý   rZ   rk   s        r3   ÚfopenzDebugContext.fopen¹  s:   € ð �zŠzÐˆzÜ”B—G‘G—L‘L §¡¨XÓ6¸
ÐTÀTÒTÈVÑTÐTr2   c              /   óÊ   K  — | j                   sJ ‚t        t        j                  j	                  | j                   |«      |g|¢­i |¤Ž5 }|–— d d d «       y # 1 sw Y   y xY w­wrn   rÿ   )rò   rü   rý   rZ   rk   Úfs         r3   Úfopen_contextzDebugContext.fopen_contextÃ  sW   è ø€ ð �zŠzÐˆzÜ”"—'‘'—,‘,˜tŸz™z¨8Ó4°jÐRÀ4ÒRÈ6ÑRð 	ÐVWØŠG÷	÷ 	ñ 	üs   ‚AA#Á	AÁ	A#ÁA ÁA#Úsuffixc                 ór   — | j                   sJ ‚t        j                  j                  | j                   |«      S rn   )rð   r¸   rÃ   rÄ   )rò   r  s     r3   rü   zDebugContext.filenameÏ  s'   € Ø�zŠzÐˆzÜ�w‰w�|‰|˜DŸJ™J¨Ó/Ð/r2   c                 ó  — t         j                  j                  �ådd l}| j                  sJ ‚t
        j                  j                  | j                  t
        j                  j                  | j                  «      › d�«      }|j                  |d«      5 }|j                  | j                  t
        j                  j                  | j                  «      ¬«       d d d «       t         j                  j                  |«       y y # 1 sw Y   Œ*xY w)Nr   z.tar.gzzw:gz)Úarcname)r   rQ   Ú
upload_tarÚtarfilerð   r¸   rÃ   rÄ   Úbasenamer   r§   )rò   r
  Útar_fileÚtars       r3   r	  zDebugContext.upload_tarÓ  sÀ   € Ü�<‰<×"Ñ"Ð.Ûà—:’:Ð�:Ü—w‘w—|‘|Ø—
‘
œrŸw™w×/Ñ/°·
±
Ó;Ð<¸GÐDóˆHð —‘˜h¨Ó/ð J°3Ø—‘˜Ÿ
™
¬B¯G©G×,<Ñ,<¸T¿Z¹ZÓ,H�ÔI÷Jä�L‰L×#Ñ# HÕ-ð /÷Jð Jús   ÂADÄD
c                 ó²  ‡— t         j                  rjt        j                  d«      Š‰j                  }‰j                  t        j                  «       dt        dd fˆfd„}| j                  j                  ||«       | j                  j                  t        j                  | «      «       t         j                  j                  sy | j                  t!        «       «      | _        t         j                  j$                  r | j'                  dt        j                  «       t         j                  j(                  r!| j'                  dt        j*                  «       y y )Nztorch._dynamoÚlevelr-   c                 ó(   •— ‰j                  | «       y rn   )rÇ   )r  r=   s    €r3   Úreset_log_levelz/DebugContext.__enter__.<locals>.reset_log_levelå  s   ø€ Ø—‘˜UÕ#r2   z	debug.logzinfo.log)r   Údebugr»   r¼   r  rÇ   rÈ   r   rñ   ÚcallbackrÂ   r#   Úset_debug_handlerrQ   Úenabledrí   r
   rð   Ú	debug_logÚ_setup_log_captureÚinfo_logÚINFO)rò   Ú
prev_levelr  r=   s      @r3   Ú	__enter__zDebugContext.__enter__ß  sæ   ø€ Ü�<Š<Ü×#Ñ# OÓ4ˆCØŸ™ˆJØ�L‰LœŸ™Ô'ð$¤sð $¨tõ $ð �K‰K× Ñ  °*Ô=à�‰×!Ñ!¤!×"5Ñ"5°dÓ";Ô<ä�|‰|×#Ò#Øà×*Ñ*Ô+=Ó+?Ó@ˆŒ
ä�<‰<×!Ò!Ø×#Ñ# K´·±Ô?Ü�<‰<× Ò Ø×#Ñ# J´·±Õ=ð !r2   r  c                 óÎ  — t        j                  d«      }| j                  j                  | j	                  |«      «      }t        j
                  |«      }|j                  |«       |j                  t        j                  d«      «       |j                  |«       |j                  t        |j                  |«      «       | j                  j                  |j                  |«       y )Nztorch._inductorr·   )r»   r¼   rñ   rÂ   r  ÚStreamHandlerrÇ   rÉ   rÊ   rË   Úminr  r  rÌ   )rò   rü   r  r=   ÚfdÚchs         r3   r  zDebugContext._setup_log_captureö  s¨   € ô
 ×ÑÐ 1Ó2ˆØ�[‰[×&Ñ& t§z¡z°(Ó';Ó<ˆÜ×"Ñ" 2Ó&ˆØ
�‰�EÔØ
�‰Ü×ÑÐSÓTô	
ð 	�‰�rÔØ�‰”S˜Ÿ™ EÓ*Ô+Ø�‰×Ñ˜S×.Ñ.°Õ3r2   Úexc_typeÚexc_valÚexc_tbc                 ó.  — | j                   r*| j                   j                  «        | j                  «        | j                  r9| j	                  «        t
        j                  dt        «       | j                  «       | j                  j                  «        y )Nz%s debug trace: %s)
rï   ÚdisableÚ_save_profile_datarð   r	  r=   r>   r   rñ   rÁ   )rò   r!  r"  r#  s       r3   Ú__exit__zDebugContext.__exit__  sa   € ð �:Š:Ø�J‰J×ÑÔ Ø×#Ñ#Ô%à�:Š:Ø�O‰OÔÜ�K‰KÐ,Ô.FÓ.HÈ$Ï*É*ÔUØ�‰×ÑÕr2   c                 óª  — | j                   sJ ‚| j                   j                  | j                  d«      «       | j                  d«      5 }t	        j
                  | j                   |¬«      }|j                  «        |j                  d«       |j                  d«       |j                  d«       |j                  d«       d d d «       y # 1 sw Y   y xY w)Nzcompile.profzcompile.stats)ÚstreamÚcumtimeéd   Útottime)	rï   Ú
dump_statsrü   r  ÚpstatsÚStatsÚ
strip_dirsÚ
sort_statsÚprint_stats)rò   r  Ústatss      r3   r&  z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   Á
A6C	Ã	Cr*   ).Nc                 ó
  — t         j                  j                  r0t        t         j                  |«      r	 t        t	        | «      |«      S dt        dt        dd fd„}|S # t
        $ r t        j                  dd¬«       Y y w xY w)Nz Ignoring exception in debug codeT©Úexc_inforZ   rk   r-   c                   ó   — y rn   r1   rj   s     r3   Úignoredz)DebugContext.__getattr__.<locals>.ignored)  s   € Ør2   )	r   rQ   r  ÚgetattrÚDebugFormatterrJ   r=   r>   r   )rò   r*   r8  s      r3   Ú__getattr__zDebugContext.__getattr__   sy   € Ü�<‰<×Ò¤G¬F¯L©L¸$Ô$?ðÜœ~¨dÓ3°TÓ:Ð:ðœsð ¬cð °dó ð ˆNøô ò Ü—‘Ð>È�ÔNÙðús   ¶A Á BÂB©r-   N)Úw)r^   Ú
__module__Ú__qualname__Ú	itertoolsÚcountré   ÚstaticmethodrE   rí   ró   rÛ   r   r   r  r¿   Úcontextmanagerr   r  rü   r	  r  rD   r  ra   ÚBaseExceptionr'  r&  r   r;  r1   r2   r3   rä   rä   “  s†  „ Øˆy�‰Ó €Hàð cð ¨c°D©jò ó ðó-ð
˜Sð  Tó ð& ñUàðUð ðUð ð	Uð
 ðUð 
ˆC‰óUð ×Ñð ñ	àð	ð ð	ð ð		ð
 ð	ð 
�"�S‘'Ñ	ò	ó ð	ð0˜sð 0 só 0ó
.ó>ð.4àð4ð ð4ð 
ó	4ð à�}Ñ%¨Ñ,ðð  Ñ%ðð �d‘
ð	ð
 
óó	#ð ð ¨°Ñ(;¸dÑ(Bô r2   rä   c                   ó²  — e Zd Zdeddfd„Zdej                  j                  deej                     ddfd„Z
dej                  j                  deej                     ddfd„Zd	eddfd
„Zd	eddfd„Zed	edefd„«       Zd	eddfd„Zdej                  j                  d	eddfd„Zddededdfd„Zdedeej,                     dedef   dedededz  ddfd„Zy)r:  Úhandlerr-   Nc                 óx   — |j                   | _         |j                  | _        |j                  | _        || _        y rn   )r  r  rü   rF  )rò   rF  s     r3   ró   zDebugFormatter.__init__0  s/   € Ø—]‘]ˆŒ
Ø$×2Ñ2ˆÔØ×(Ñ(ˆŒØˆ�r2   rT   Úinputsc           
      óâ  — | j                  d«      5 }d }t        j                  j                  j                  j
                  rRt        j                  j                  j                  |«      }t        j                  j                  |j                  «      }t        j                  j                  j                  j
                  }t        j                  j                  j                  dddœ«      5  t        |||d||¬«       d d d «       d d d «       | j                  d«      5 }|j                  |j!                  d¬«      «       d d d «       y # 1 sw Y   ŒMxY w# 1 sw Y   ŒQxY w# 1 sw Y   y xY w)Nzfx_graph_runnable.pyF)ztrace.enabledztrace.save_real_tensorsÚinductor)Úsave_dirÚstable_hashzfx_graph_readable.py©Úprint_output)r  rz   r   r   rQ   Úsave_real_tensorsÚ_subclassesÚ
fake_utilsÚtry_convert_fake_to_realr¸   rÃ   rì   r*   r   r   ÚwriteÚprint_readable)rò   rT   rH  r  rK  rL  s         r3   Úfx_graphzDebugFormatter.fx_graph6  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óñ 
ô !ØØØØØ%Ø +õ÷
÷	ð, �Z‰ZÐ.Ó/ð 	<°2Ø�H‰H�R×&Ñ&°EÐ&Ó:Ô;÷	<ð 	<÷
ð 
ú÷	ð 	ú÷,	<ð 	<ús0   ’CEÃ/EÄEÄ""E%ÅE	ÅEÅE"Å%E.c                 ó’   — | j                  d«      5 }|j                  |j                  d¬«      «       d d d «       y # 1 sw Y   y xY w)Nzfx_graph_transformed.pyFrM  )r  rS  rT  )rò   rT   rH  r  s       r3   Úfx_graph_transformedz#DebugFormatter.fx_graph_transformedT  sB   € ð
 �Z‰ZÐ1Ó2ð 	<°bØ�H‰H�R×&Ñ&°EÐ&Ó:Ô;÷	<÷ 	<ñ 	<ús	   ’"=½Ar5   c                 ó�   — | j                  d«      5 }|j                  | j                  |«      «       d d d «       y # 1 sw Y   y xY w)Nzir_pre_fusion.txt©r  rS  Ú	_write_ir©rò   r5   r  s      r3   r'   zDebugFormatter.ir_pre_fusion\  s;   € Ø�Z‰ZÐ+Ó,ð 	,°Ø�H‰H�T—^‘^ EÓ*Ô+÷	,÷ 	,ñ 	,úó	   ’!<¼Ac                 ó�   — | j                  d«      5 }|j                  | j                  |«      «       d d d «       y # 1 sw Y   y xY w)Nzir_post_fusion.txtrY  r[  s      r3   r(   zDebugFormatter.ir_post_fusion`  s;   € Ø�Z‰ZÐ,Ó-ð 	,°Ø�H‰H�T—^‘^ EÓ*Ô+÷	,÷ 	,ñ 	,úr\  c                 ó¸   — t        j                  «       }| D ]2  }|j                  |j                  «       «       |j                  d«       Œ4 |j	                  «       S )Nz


)ÚioÚStringIOrS  Ú	debug_strÚgetvalue)r5   ru   rH   s      r3   rZ  zDebugFormatter._write_ird  sI   € ä�k‰k‹mˆØò 	 ˆDØ�I‰I�d—n‘nÓ&Ô'Ø�I‰I�hÕð	 ð �|‰|‹~Ðr2   c                 ó<   — t        || j                  d«      ¬«       y )Nzgraph_diagram.svg)r7   )rU   rü   )rò   r5   s     r3   Úgraph_diagramzDebugFormatter.graph_diagraml  s   € Ü�U $§-¡-Ð0CÓ"DÖEr2   c                 ó”   — t        ||«       t        || j                  d«      dt        dt        j
                  j                  ¬«       y )Nzorig_fx_graph_diagram.svgFT)r7   r;   ÚprogÚparse_stack_tracer<   )r¯   r	   rü   ÚGRAPHVIZ_COMMAND_SCALABLEr   rQ   r<   )rò   rT   r5   s      r3   Údraw_orig_fx_graphz!DebugFormatter.draw_orig_fx_grapho  s<   € ô
 	% R¨Ô/ÜØØ—-‘-Ð ;Ó<ØÜ*Ø"Ü"ŸL™L×8Ñ8ö	
r2   rü   Ú	extensionc                 óT   — t        j                  || j                  d|› �«      «       y )Nzoutput_code.)r/   rÛ   rü   )rò   rü   rj  s      r3   Úoutput_codezDebugFormatter.output_code~  s    € Ü�‰�H˜dŸm™m¨l¸9¸+Ð,FÓGÕHr2   r*   Úinput_nodesÚtimingsÚChoiceCallerÚelapseÚprecompile_elapseÚprescreening_elapsec           	      óN  ‡‡— ddl mŠ dt         j                  dt        t        t        f   fˆˆfd„Š|t
        j                  j                  «       t
        j                  j                  «       |D �cg c]
  } ‰|«      ‘Œ c}|||dœ}| j                  ddd	¬
«      5 }	|j                  «       D ][  \  }
}t        |
j                  «       «      }|j                  |«       ||d<   t        j                  ||	«       |	j                  d«       Œ] 	 d d d «       y c c}w # 1 sw Y   y xY w)Nr   )ÚFixedLayoutrH   r-   c           
      ó   •— t        | d«      r| j                  }nd}|t        | «      j                  dœ}	 | j	                  «       }t        |‰«      rÅ ‰|j                  |j                  t        j                  j                  j                  |j                  «      t        j                  j                  j                  |j                  «      t        j                  j                  j                  |j                  d¬«      ¬«      }t!        |«      |d<   nt!        |«      |d<   	 t!        | j%                  «       «      |d<   	 t!        | j'                  «       «      |d	<   	 t!        t        j                  j                  j                  | j)                  «       «      «      |d
<   	 t!        t        j                  j                  j                  | j+                  «       «      «      |d<   	 t!        t        j                  j                  j                  | j-                  «       «      «      |d<   t        | d«      r9t        | j.                  t0        j2                  «      r ‰| j.                  «      |d<   |S # t"        $ r Y �ŒYw xY w# t"        $ r Y �ŒLw xY w# t"        $ r Y �Œ?w xY w# t"        $ r Y �Œw xY w# t"        $ r Y ŒÖw xY w# t"        $ r Y Œ¡w xY w)Nr*   Ú )r*   ra   r   )Úfallback)rM   rR   ÚstrideÚoffsetÚlayoutrM   ri   rx  rR   ÚnumelrL   )r‚   r*   ra   r^   Úget_output_specrB   ri   rM   r#   rO   ÚsizevarsÚoptimization_hintsrR   rx  Úoptimization_hintry  rE   rJ   Ú	get_dtyperh   Ú
get_strideÚget_sizeÚ	get_numelrL   r   ÚIRNode)rH   r¤   Ú	node_inforz  Ústatic_layoutrt  Úbuild_node_infos        €€r3   r‡  z>DebugFormatter.log_autotuning_results.<locals>.build_node_infoŒ  s\  ø€ Ü�t˜VÔ$Ø ŸI™I‘	à�	à!Ü˜T›
×+Ñ+ñˆIðØ×-Ñ-Ó/�Ü˜f kÔ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Ù$3°D·I±IÓ$>�	˜&Ñ!ØÐøô= ò Úðûô ò Úðûô ò Úðûô ò Úðûô ò Ùðûô ò Ùðúso   ¶C/I2 Ä&J ÅJ Å AJ" Æ$AJ2 Ç(AK É2	I?É>I?Ê	JÊJÊ	JÊJÊ"	J/Ê.J/Ê2	J>Ê=J>Ë	KËK)Úop_nameÚcuda_device_nameÚcuda_device_countrm  Úautotuning_timeÚprecompile_timeÚprescreening_timezautotuning_result_json_list.txtÚatzutf-8)ÚencodingÚbenchmark_resultú
)r   rt  r„  ÚdictrE   rz   ÚcudaÚget_device_nameÚdevice_countr  r¦   Ú	info_dictÚupdateÚjsonÚdumprS  )rò   r*   rm  rn  rp  rq  rr  rH   Úgeneral_propertiesr  ÚcallerÚtimer–  rt  r‡  s                @@r3   Úlog_autotuning_resultsz%DebugFormatter.log_autotuning_results�  s  ù€ õ 	$ð6	¤"§)¡)ð 6	´´S¼#°X±ö 6	ðr Ü %§
¡
× :Ñ :Ó <Ü!&§¡×!8Ñ!8Ó!:Ø>IÖJ°d™O¨DÕ1ÒJØ%Ø0Ø!4ñ
Ðð ×ÑØ-¨t¸gð  ó 
ð 	àØ '§¡£ò ‘�˜Ü  ×!1Ñ!1Ó!3Ó4�	Ø× Ñ Ð!3Ô4Ø04�	Ð,Ñ-Ü—	‘	˜) RÔ(Ø—‘˜•ñ÷	ð 	ùò K÷
	ð 	ús   Á2D
ÂA/DÄD$)Úpy)r^   r>  r?  rä   ró   rz   r   r   ÚlistÚTensorrU  rW  ÚSchedulerNodeListr'   r(   rB  rE   rZ  rd  ri  rl  r   r„  r’  Úfloatr�  r1   r2   r3   r:  r:  /  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ð # T™\ðTð 
ôTr2   r:  c                 óÚ   — t         j                  t        j                  «      r)t         j	                  dt
        j                  | «      «       t        j                  j                  | «       y )NzBEFORE FUSION
%s)
Úir_pre_fusion_logÚisEnabledForr»   r  Úinfor:  rZ  r#   r  r'   ©r5   s    r3   Úlog_ir_pre_fusionr¨  Ø  sB   € Ü×%Ñ%¤g§l¡lÔ3Ü×ÑÐ2´N×4LÑ4LÈUÓ4SÔTä‡G�G×Ñ˜%Õ r2   c                 óÚ   — t         j                  t        j                  «      r)t         j	                  dt
        j                  | «      «       t        j                  j                  | «       y )NzAFTER FUSION
%s)
Úir_post_fusion_logr¥  r»   r  r¦  r:  rZ  r#   r  r(   r§  s    r3   Úlog_ir_post_fusionr«  ß  sB   € Ü×&Ñ&¤w§|¡|Ô4Ü×ÑÐ 2´N×4LÑ4LÈUÓ4SÔTä‡G�G×Ñ˜5Õ!r2   Úschedulec                 óx   ‡ — 	 t        dd„ ˆ fd„¬«       y # t        $ r t        j                  dd¬«       Y y w xY w)NÚartifactc                  ó   — dddœS )NÚinductor_collective_scheduler˜  ©r*   r�  r1   r1   r2   r3   ú<lambda>z+_dump_collective_schedule.<locals>.<lambda>ê  s   € Ø6Ø"ñ!€ r2   c                  ó   •— ‰ S rn   r1   ©r¬  s   €r3   r²  z+_dump_collective_schedule.<locals>.<lambda>î  s   ø€ ˜x€ r2   ©Úmetadata_fnÚ
payload_fnzAFailed to log inductor_collective_schedule via structured loggingTr5  )r   rJ   r=   r  r´  s   `r3   Ú_dump_collective_scheduler¸  æ  sE   ø€ ð
ÜØñó (ö	
øô ò 
Ü�	‰	ØOØð 	ö 	
ð
ús   ƒ – 9¸9c           
      ó¬   — | D �cg c]6  }t        t        |dd «      x}t        j                  «      rt        |dd «      ‘Œ8 }}|rt	        |«       y y c c}w )NrH   Úpython_kernel_name)rB   r9  r   Ú_CollectiveKernelr¸  )r5   rH   Úopr¬  s       r3   Úlog_collective_scheduler½  ÷  s`   € ð öàÜœG D¨&°$Ó7Ð7�b¼×9MÑ9MÔNô 	�Ð(¨$Õ/ð€Hð ñ Ü! (Õ+ð ùòs   …;AÚnode_runtimesc           	      óh  ‡‡— 	 t         j                  j                  j                  Šdt        t
           dz  dt        t
           fˆfd„}dt
        dt        dz  fd„}g Š| D �]  \  }}t        |j                  d|j                  «       «      }t        j                  |j                  «      rdnd	}g }	 |j                  «       D ]‹  }|j                  }	|	j                  «       }
t        |	j                   t"        j$                  «      r|	j'                  «       nd}|	j)                  «       }|j+                   ||
«       ||«       ||«      d
œ«       Œ� 	 ‰j+                  ||||dœ«       �Œ	 t/        dd„ ˆfd„¬«       y# t,        $ r Y Œ7w xY w# t,        $ r t0        j3                  dd¬«       Y yw xY w)zDLog per-op runtime estimates and output tensor metadata for TLParse.rp   Nr-   c                 ó.   •— | �t         ‰| «      «      S g S rn   )rŸ  )rp   Úto_optimization_hintss    €r3   Úto_listz,log_runtime_and_tensor_meta.<locals>.to_list	  s   ø€ Ø56°]”4Ñ-¨aÓ0Ó1ÐJÈÐJr2   rM   c                 óD   — | €y t        | «      }|j                  d«      }|S )Nztorch.)rE   Úremoveprefix)rM   Úss     r3   Údtype_to_strz1log_runtime_and_tensor_meta.<locals>.dtype_to_str  s&   € Øˆ}ØÜ�E“
ˆAØ—‘˜xÓ(ˆAØˆHr2   rº  Ú
collectivere   )Úshaperx  rM   )r*   ra   Úestimated_runtime_nsr�   r®  c                  ó   — dddœS )NÚ inductor_runtime_and_tensor_metar˜  r±  r1   r1   r2   r3   r²  z-log_runtime_and_tensor_meta.<locals>.<lambda>9  s   € Ø:Ø"ñ!€ r2   c                  ó   •— d‰ iS )NÚopsr1   )rÍ  s   €r3   r²  z-log_runtime_and_tensor_meta.<locals>.<lambda>=  s   ø€   s˜|€ r2   rµ  z.Failed to log inductor_runtime_and_tensor_metaTr5  )r#   rO   r}  r~  r   r   rŸ  rE   r9  rH   r†   r   Úis_collectiverG   rI   rB   rz  r   ÚLayoutr�  Úmaybe_get_dtyper…   rJ   r   r=   r  )r¾  rÂ  rÆ  rÅ  Ú
runtime_nsr*   Úop_typer�   ru   ÚirnoderÈ  rx  rM   rÍ  rÁ  s                @@r3   Úlog_runtime_and_tensor_metarÔ    s«  ù€ ð:SÜ !§¡× 0Ñ 0× CÑ CÐð	K”x¤‘} tÑ+ð 	K´´S±	õ 	Kð	¤ð 	¬¨d©
ó 	ð %'ˆØ*ó !	‰MˆAˆzÜ˜1Ÿ6™6Ð#7¸¿¹»ÓFˆDÜ&+×&9Ñ&9¸!¿&¹&Ô&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 Â4BE?Å,F Å?	FÆF Æ
FÆF Æ F1Æ0F1c                  ó€   — t         sy	 t        dd„ d„ ¬«       y# t        $ r t        j	                  dd¬«       Y yw xY w)	z:Emit a structured artifact with the graph execution order.Nr®  c                  ó   — dddœS )NÚgraph_executionr˜  r±  r1   r1   r2   r3   r²  z%log_graph_execution.<locals>.<lambda>J  s   € Ø)Ø"ñ!€ r2   c                  ó   — dt         iS )NÚgraph_execution_order)r$   r1   r2   r3   r²  z%log_graph_execution.<locals>.<lambda>N  s   € Ð 7Ô9NÐO€ r2   rµ  zFailed to log graph_executionTr5  )r$   r   rJ   r=   r  r1   r2   r3   Úlog_graph_executionrÚ  C  sH   € å Øð
BÜØññ Pö	
øô ò BÜ�	‰	Ð1¸Dˆ	ÖAðBús   ‰ š =¼=c               #   ól   K  — g a i ada	 d–— t        «        dada day# t        «        dada daw xY w­w)z5Record graph execution order and log it once on exit.TNF)r$   r&   r%   rÚ  r1   r2   r3   Ú$record_and_log_graph_execution_orderrÜ  T  sU   è ø€ ð ÐØÐØ!Ðð!ÛäÔØ!&ÐØ $ÐØ Ñøô 	ÔØ!&ÐØ $ÐØ Ñüs   ‚4Š Ž4Ÿ1±4c                   ó6   — e Zd ZU eed<   ej                  ed<   y)ÚTensorMetadataHolderÚtensor_metadatari   N)r^   r>  r?  r   Ú__annotations__rz   ri   r1   r2   r3   rÞ  rÞ  d  s   … à#Ó#Ø�L‰LÔr2   rÞ  Úpre_grad_graph_idÚpost_to_pre_grad_nodes_jsonc           	      ó  ‡— i i dœ}t        |t        «      st        j                  d«       |S t        | t        «      s|S t        j                  t        «      }t        j                  t        «      }	 dt        t        t        f   dt        fd„}|j                  «       D �]<  \  }}t        |t        «      st        j                  d«       |c S |D �]  } ||«      s|c c S |j                  d«      | k(  r.||d      j                  |«       ||   j                  |d   «       |j                  d	g «      D �	cg c]  }	|	|f‘Œ }
}	|
sŒx|
j                  «       \  }Š ||«      s|c c S |j                  d«      | k(  r.||d      j                  ‰«       |‰   j                  |d   «       |
j!                  ˆfd
„|j                  d	g «      D «       «       |
rŒ��Œ
 �Œ? dt        t        t        f   ddfd„} ||«        ||«       ||dœS c c}	w # t"        $ rd}t%        dddt        |«      t'        j(                  «       dœ«       t        j                  d|«       t        j                  d| «       |cY d}~S d}~ww xY w)zx
    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 dictrH   r-   c                 ó”   — t        | t        «      st        j                  d«       yd| vsd| vsd| vrt        j                  d«       yy)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)rB   r’  r=   Úerror)rH   s    r3   Úcheck_formatz8create_mapping_pre_post_grad_nodes.<locals>.check_format‰  sN   € Ü˜d¤DÔ)Ü—	‘	Ølôð Ø Ñ%¨°tÑ);¸{ÐRVÑ?VÜ—	‘	Øoôð Ør2   zIProvenance tacking error: post_to_pre_grad_nodes_json value is not a listrç  r*   rè  c              3   ó&   •K  — | ]  }|‰f–— Œ
 y ­wrn   r1   )ro   rë   Ú
parent_keys     €r3   rr   z5create_mapping_pre_post_grad_nodes.<locals>.<genexpr>­  s   øè ø€ ò !Ø,-˜˜Jœñ!ùs   ƒÚdNc                 óJ   — | D ]  }t        | |   «      | |<   Œ t        | «      } y rn   ©rŸ  r’  ©rí  Úkeys     r3   Úconvert_sets_to_listszAcreate_mapping_pre_post_grad_nodes.<locals>.convert_sets_to_lists±  ó+   € Øò &�Ü˜a ™f›��#’ð&ä�Q“‰Ar2   rJ  Ú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)rB   r’  r=   ré  rD   rx   Údefaultdictr   rE   r   r„   r¦   rŸ  r®   r§   ÚpopÚextendrJ   r   Ú	tracebackÚ
format_exc)rá  râ  Úempty_returnÚpre_to_postÚpost_to_prerê  Ú	outer_keyÚ
node_arrayrH   rë   rÎ   Úcurrent_noderò  Úerì  s                 @r3   rõ  rõ  m  s€  ø€ ð Øñ5€Lô
 Ð1´4Ô8Ü�	‰	ÐWÔXØÐäÐ'¬Ô-ð Ðä"-×"9Ñ"9¼*Ó"E€KÜ"-×"9Ñ"9¼*Ó"E€KðDð	œt¤C¬ H™~ð 	´$ó 	ð &A×%FÑ%FÓ%Hó 	Ñ!ˆI�zÜ˜j¬$Ô/Ü—	‘	Ø_ôð $Ò#Ø"ó �Ù# DÔ)Ø'Ô'à—8‘8˜JÓ'Ð+<Ò<Ø  V¡Ñ-×1Ñ1°)Ô<Ø 	Ñ*×.Ñ.¨t°F©|Ô<ð 26·±¸+ÀrÓ1JÖK¨A˜!˜YšÐK�ÐKÚØ/4¯y©y«{Ñ,�L *Ù'¨Ô5Ø+Ô+Ø#×'Ñ'¨
Ó3Ð7HÒHØ# L°Ñ$8Ñ9×=Ñ=¸jÔIØ# JÑ/×3Ñ3°LÀÑ4HÔIØ—L‘Ló !Ø1=×1AÑ1AÀ+ÈrÓ1Rô!ô ô òð	ð6	¤T¬#¬s¨(¡^ð 	¸ó 	ñ 	˜kÔ*Ù˜kÔ*à$Ø$ñ
ð 	
ùò) Løô0 ò ô 	ØØ'à@Ü  ›VÜ(×3Ñ3Ó5ñô	
ô 	�	‰	Ð4Ð6QÔRÜ�	‰	Ð*Ð,=Ô>ØÕûðúsR   Á3AH ÃH Ã$AH Ä:HÅH Å
 H Å+A.H Ç3H ÈH È	J ÈAI;É5J É;J Útriton_kernel_to_post_grad_jsonc           	      óF  — i i dœ}t        | t        «      st        j                  d«       |S t	        j
                  t        «      }	 | j                  «       D ]I  \  }}t        |t        «      st        j                  d«       |c S |D ]  }||   j                  |«       Œ ŒK dt        t        t        f   ddfd„} ||«       | |dœS # t        $ rN}t        dd	d
t        |«      t        j                  «       dœ«       t        j                  d| «       |cY d}~S d}~ww xY w)zqCreate 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   — | D ]  }t        | |   «      | |<   Œ t        | «      } y rn   rï  rð  s     r3   rò  zFcreate_node_mapping_kernel_to_post_grad.<locals>.convert_sets_to_listsí  ró  r2   rJ  rô  Ú"create_mapping_kernel_to_post_gradrö  z$triton_kernel_to_post_grad_json:  %s)rB   r’  r=   ré  rx   rú  r   r¦   rŸ  r§   rE   r   rJ   r   rý  rþ  )r  rÿ  Úpost_to_cpp_coder  r  Ú	curr_noderò  r  s           r3   Ú'create_node_mapping_kernel_to_post_gradr  Î  s:  € ð Øñ/€Lô
 Ð5´tÔ<Ü�	‰	ØUô	
ð Ðä'2×'>Ñ'>¼zÓ'JÐð$Ø%D×%JÑ%JÓ%Lò 	;Ñ!ˆI�zÜ˜j¬$Ô/Ü—	‘	Øcôð $Ò#Ø'ò ;�	Ø  Ñ+×/Ñ/°	Õ:ñ;ð	;ð	¤T¬#¬s¨(¡^ð 	¸ó 	ñ 	Ð.Ô/à<Ø-ñ
ð 	
øô ò ô 	ØØ'à@Ü  ›VÜ(×3Ñ3Ó5ñô	
ô 	�	‰	Ø2Ð4Sô	
ð Õûðús&   Á>C	 ÂAC	 Ã		D ÃADÄD ÄD c            	      ó¦  — 	 i } t         rrt        t        «      }i t        ¥|¥} t        j
                  j                  r?t        j                  j                  dd«      5 }t        j                  | |«       d d d «       d| d<   | S # 1 sw Y   ŒxY w# t        $ r8}t        dddt        |«      t        j                   «       dœ«       i cY d }~S d }~ww xY w)	Nz/inductor_provenance_tracking_node_mappings.jsonr=  g       @ÚversionrJ  rô  Údump_inductor_provenance_inforö  )rÓ   r  rÒ   rÑ   r   rQ   r  r#   r  r  r˜  r™  rJ   r   rE   rý  rþ  )Únode_mappingÚnode_mapping_kernelr  r  s       r3   r  r  
  sÕ   € ð"ð (*ˆÝÜ"IÜ>ó#ÐðÜ2ðà%ðˆLô �|‰|×#Ò#Ü—W‘W—]‘]ØEÀsóð 0àÜ—I‘I˜l¨BÔ/÷0ð #&ˆ�YÑØÐ÷0ð 0ûô ò ô 	ØØ'à;Ü  ›VÜ(×3Ñ3Ó5ñô	
ð �	ûðús6   ‚AB ÁBÁ4B ÂBÂB Â	CÂ-CÃCÃCc            	      ó   — 	 t         j                  di «      } t        t        j	                  «       «      t        t
        j	                  «       «      z  }i }|D ]p  }t
        j                  |g «      }t        «       }|D ]#  }|j                  | j                  |g «      «       Œ% t        j                  |g «      |t        |«      dœ||<   Œr |S # t        $ r8}t        dddt        |«      t        j                  «       dœ«       i cY d}~S d}~ww xY w)zCreate kernel information JSONrå  )Ústack_tracesÚpost_grad_nodesÚpre_grad_nodesrJ  rô  Úcreate_kernel_information_jsonrö  N)rÑ   r®   r   rÕ   ÚkeysrÒ   r—  rŸ  rJ   r   rE   rý  rþ  )r  Úall_kernelsÚresultÚkernel_namer  r  Ú	post_noder  s           r3   r  r  0  s  € ð%ô
 7×:Ñ:¸;ÈÓKˆÜ Ô!=×!BÑ!BÓ!DÓEÌ
Ü:×?Ñ?ÓAóI
ñ 
ˆð ˆØ&ò 	ˆKÜL×PÑPØ˜RóˆOô /9«lˆNØ,ò F�	Ø×%Ñ% k§o¡o°iÀÓ&DÕEðFô !=× @Ñ @ÀÈbÓ QØ#2Ü"& ~Ó"6ñ#ˆF�;Òð	ð ˆøÜò 
ÜØØ'à<Ü  ›VÜ(×3Ñ3Ó5ñô	
ð �	ûð
ús   ‚C	C Ã	DÃ-DÄDÄDÚnode_scheduler  r|   c           	      óö  ‡
— t         j                  j                  dk(  ry	 ddlm}m} t        dz  ag }|› dt        › �}|ržt        | t        «      sJ ‚t        j                  |g «      Š
| j                  r,| j                  j                  }|‰
vr6‰
j                  |«       n$‰
j                  ˆ
fd„| j                  D «       «       t!        | j#                  «       «      }n¯t        | t         «      sJ ‚t%        «       }| D ]ƒ  }|||fvsŒ
|j&                  €Œt        j                  |g «      Š
|j)                  |j&                  j#                  «       «       ‰
j                  ˆ
fd„|j&                  j                  D «       «       Œ… t!        |«      }t*        j                  |g «      j                  |«       t        S # t,        $ r6}	t/        dd	d
t1        |	«      t3        j4                  «       dœ«       Y d}	~	yd}	~	ww xY w)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   óR   •K  — | ]  }|j                   ‰vr|j                   –— Œ  y ­wrn   ©r*   ©ro   r£   Úcurr_node_infos     €r3   rr   z:set_kernel_post_grad_provenance_tracing.<locals>.<genexpr>  s)   øè ø€ ò &àØ—{‘{¨.Ñ8ð —K•Kñ&ùó   ƒ$'c              3   óR   •K  — | ]  }|j                   ‰vr|j                   –— Œ  y ­wrn   r$  r%  s     €r3   rr   z:set_kernel_post_grad_provenance_tracing.<locals>.<genexpr>’  s+   øè ø€ ò .ð !'Ø%Ÿ{™{°.Ñ@ð #ŸK�Kñ.ùr'  rJ  rô  Ú'set_kernel_post_grad_provenance_tracingrö  )r   rQ   Úprovenance_tracking_levelÚcodegen.simd_kernel_featuresr   r!  rÖ   rB   r   rÒ   Ú
setdefaultÚorigin_noder*   r…   rü  rŸ   rŸ  Úget_stack_tracesr   rH   r—  rÕ   rJ   r   rE   rý  rþ  )r  r  r|   r   r!  r  Úorigin_node_nameÚstack_traces_setrF   r  r&  s             @r3   r)  r)  Z  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Ü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%F9 ÄF9 ÄB$F9 Æ9	G8Ç,G3Ç3G8rZ   rk   c                  ó(  — t         j                  j                  t        j                  «       d«      }t         j                  j                  |«      st        j                  |«       dt        dt        fd„}t        || |f«      \  }}d}|› d|› dt        t        «      › d�}t        |d	«      5 }t        j                  ||f|«       d
d
d
«       t        j                  t         j"                  «      rd|› d|›d�}	t%        |	«       y
y
# 1 sw Y   ŒBxY w)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_argsrp   r-   c                 óx   — t        | t        j                  «      rt        t	        | «      | j
                  «      S | S )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.
        )rB   rz   r   rÞ  r   ri   ©rp   s    r3   Úhandle_tensorz5save_args_for_compile_fx_inner.<locals>.handle_tensorµ  s.   € ô �aœŸ™Ô&Ü'Ô(@ÀÓ(CÀQÇXÁXÓNÐNàˆHr2   Ú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È   rN   )
rZ   rk   Úfolderr5  Úargs_to_saveÚkwargs_to_saveÚfn_namerÃ   r  Úmessages
             r3   Úsave_args_for_compile_fx_innerrE  ª  s  € ô �W‰W�\‰\œ(×-Ñ-Ó/Ð1FÓG€FÜ�7‰7�>‰>˜&Ô!Ü
�‰�Ôð
œð 
¤ó 
ô $,¨M¸DÀ&¸>Ó#JÑ €L�.à €GØˆX�Q�w�i˜q¤¤mÓ!4Ð 5°TÐ:€DÜ	ˆd�DÓ	ð 7˜QÜ�‰�\ >Ð2°AÔ6÷7ô ×ÑœŸ™Ô&ð3Ø37°&ð 9$ð %) 8ð ,	ðˆô 	ˆg�ð '÷7ð 7ús   Â.DÄDrÃ   c                 ó¬  — ddl m} t        | d«      5 }t        j                  |«      \  }}d d d «       dt
        dt
        fd„}t        j                  j                  d¬«      }|5  t        j                  d	d
«      5  t        |f«      \  }} ||i |¤Žcd d d «       cd d d «       S # 1 sw Y   Œ~xY w# 1 sw Y   nxY wd d d «       y # 1 sw Y   y xY w)Nr   )r6  Úrbrp   r-   c                 ó
  — t        | t        «      rrt        j                  j                  j                  | j                  j                  | j                  j                  | j                  j                  | j                  «      S | S rn   )rB   rÞ  rz   Ú_dynamoÚtestingÚrand_stridedrß  rÈ  rx  rM   ri   r4  s    r3   r5  z9load_args_and_run_compile_fx_inner.<locals>.handle_tensorÞ  se   € Ü�aÔ-Ô.Ü—=‘=×(Ñ(×5Ñ5Ø×!Ñ!×'Ñ'Ø×!Ñ!×(Ñ(Ø×!Ñ!×'Ñ'Ø—‘ó	ð ð ˆHr2   T)Úallow_non_fake_inputsÚ	save_argsF)Útorch._inductor.compile_fxr6  r   r?  Úloadr   rz   rP  ÚFakeTensorModer   r   r   )rÃ   r6  r  rZ   rk   r5  Ú	fake_modes          r3   Ú"load_args_and_run_compile_fx_innerrR  Ø  sÊ   € Ý;ä	ˆd�DÓ	ð &˜QÜ—{‘{ 1“~‰ˆˆf÷&ð	œð 	¤ó 	ô ×!Ñ!×0Ñ0ÀtÐ0ÓL€IØ	ñ 1”F—L‘L ¨eÓ4ñ 1Ü °°f¨~Ó>‰ˆˆfÙ Ð0¨Ñ0÷1÷ 1ò 1÷&ð &ú÷1ð 1ú÷ 1÷ 1ñ 1ús/   “B)Á&C
Á=B5Â	C
Â)B2Â5B>	Â:C
Ã
C)Úpackage_pathÚfunc.Úexported_programÚinductor_configsrS  c                ó°  — ddl m} ddlm} ddlm} ddlm} |j                  j                  }|j                  d¬«      }	t        |	t        j                  j                  «      sJ ‚|j                  \  }
}	 |r$|j                  j                   dk(  r ||d	|¬
«       |rÂ|j                  j                   dk(  r©t#        j$                  |	«      }t#        j$                  |j                  «      }t#        j$                  |«      } |||d   |d   |¬
«      \  }}t'        |«      }t        j(                  j)                  ||d¬«      } | |j                  d¬«      |||dd¬«        | |	|
||||¬«      S # |$ r(} ||dd|¬«       t*        j-                  d«       |‚d }~wt.        $ r2}|r)d}|j                  j                   dk(  rd} ||d	||¬«       |‚d }~ww xY w)Nr   )ÚAccuracyError)Údump_to_minify)r   )Ú_aoti_flatten_inputsF)Úcheck_guardsé   Úaot_inductor)Úoptionsé   r   )ÚstrictTÚaccuracy)rV  rS  Úload_and_runÚcheck_accuracy)rV  rS  rb  Úaot_inductor_accuracyÚminify)Úcommandr^  zAccuracy failedÚrun)Útorch._dynamo.debug_utilsrX  Útorch._dynamo.repro.aotirY  Útorch._inductorr   rN  rZ  r]  Údump_aoti_minifierÚmodulerB   rz   r   r   Úexample_inputsÚrepro_levelrÛ   ÚdeepcopyrC   Úexportr=   r>   rJ   )rT  rU  rV  rS  rX  rY  r   rZ  Úuse_minifierrT   rZ   rk   Úgm_copyÚexample_inputs_copyÚconfig_copyÚflat_example_inputsÚtuple_inputsÚflattened_epr  rf  s                       r3   Úaot_inductor_minifier_wrapperrx  ï  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%   Á7C7E/ Å/GÅ4#FÆGÆ#-GÇG)FNr\   r<  )F)‚rx   r¿   rÛ   ÚdataclassesÚ	functoolsr_  r@  r˜  r»   r¸   Úos.pathr?  r.  r/   r:  rý  Úcollections.abcr   r   r   Útypingr   r   Úunittest.mockr   rz   Úfunctorch.compiler	   r
   r   r   Útorch._dynamo.repro.after_aotr   Útorch._dynamo.utilsr   rj  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   rv  r   r   r   Ú	schedulerr   r   r    r!   r"   Úvirtualizedr#   r¼   r^   r=   r$   rŸ  r’  rE   Úobjectrà  r%   r„   r&   rD   r¤  rª  r¡  ry   r)   rh  Úcacher4   rU   r{   r?   rž   r«   r¯   rC  rÐ   rÑ   rÒ   rÓ   rÔ   rÕ   rÖ   rØ   râ   rä   r:  r¨  r«  r¸  r½  rC   r¢  rÔ  rÚ  rÜ  Ú	dataclassrÞ  rA  r>  rõ  r  r  r  r)  rE  rR  rp  ÚExportedProgramrx  r1   r2   r3   ú<module>r‘     sŠ  ðÜ Û Û Û Û Û 	Û Û Û Û 	Û Û Û Û Û Û ß 8Ñ 8ß Ý ã ß VÑ VÝ Ý :Ý -Ý !Ý ,Ý 5Ý 0Ý -ß OÝ 7Ý  Ý /Ý (ç Ý ÷õ õ ð €g×Ñ˜Ó!€ð 9=Ð �t˜D  f Ñ-Ñ.°Ñ5Ó <Ø$Ð ˜Ó $Ø26Ð �4˜˜S 4™Z˜Ñ(¨4Ñ/Ó 6á% h°Ó@Ð Ù& xÐ1AÓBÐ Ø˜‘IÐ Ø
 ˆ+×
 Ñ
  ¨V°ZÐ,@Ó
A€ÚTÐ ð ‡�ð+�ò +ó ð+ð Øñ6ØÐ!Ñ"ð6àð6ð �‰:ð6ð 
ó	6ðr` $Ð'8Ñ"9ð `¸b¿h¹hó `ðL #'Øñ	!Ø˜tÑ#ð!à  S ™>ð!ð ˜4‘Zð!ð ð	!ð
 
ó!ð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Ø!%Ð �C˜$‘JÓ %Ø68Ð # T¨#¨s¨(¡^Ó 8Ø57Ð ˜d 3¨¨S©	 >Ñ2Ó 7Ø01Ð (¨#Ó 1ó1ð
 ×Ñð/
 (¨4¡.ò /
ó ð/
÷dYñ Y÷xfñ fðR!Ð.ð !°4ó !ð"Ð/ð "°Dó "ð
¨¨S°4©ZÑ(8ð 
¸Tó 
ð"	, 8Ð,=Ñ#>ð 	,À4ó 	,ð=S¨x¸¸cÀ5¸jÑ8IÑ/Jð =SÈtó =Só@Bð" ×Ñð!¨h°t©nò !ó ð!ð ×Ñ÷ð ó ðð
  �	—‘Ó!€ð^Ø˜T‘zð^à!% 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ØÐ-Ñ.°Ñ=ðMàðMð ðMð 	ˆ4�Zó	Mð`+¨#ð +¸ð +Àó +ð\1¨Sð 1°Só 1ð8 %)òQØ
�3˜�8Ñ
ðQà—l‘l×2Ò2ðQð ˜3 ˜8‘nð	Qð
 ˜T‘/ðQð 	ôQr2   