§
    ŠŠtjDË  ã                   óR  — 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/ d dl0m1Z1m2Z2 d dl3m4Z4 d dl5m6Z6 d dl7m8Z8 d dl9m:Z: ddl;m$Z$m<Z< ddl<m=Z= ddl>m?Z?m@Z@mAZAmBZBmCZC ddlDmEZE  ejF        eG¦  «        ZHdaIeJeKeLeMf                  dz  eNd<   daOePeNd<   daQeKeReLdz  f         dz  eNd<    e)eGd¦  «        ZS e)eGd¦  «        ZTeJe         ZU e jV        dd d!g¦  «        ZWg d"¢ZX e8d#d$g¦  «        ZYejZ        d%ePfd&„¦   «         Z[d'eLdz  d%eLfd(„Z\	 	 dfd)eJe?         d*ePd'eLdz  d%dfd+„Z]d,eJe?         d%ej^        fd-„Z_	 	 dgd)eUdz  d.eKeLeLf         d/eLdz  d0eRd%df
d1„Z`d.eKeLeLf         d%eKeLeWf         fd2„Zad3ej        j/        d,eUd%dfd4„Zbejc        d%ed         fd5„¦   «         Zdi aeeKeLeKeLeJeL         f         f         eNd6<   i afeKeLeJeL         f         eNd7<   dageRdz  eNd8<   i aheKeLeLf         eNd9<   i aieKeLeJeL         f         eNd:<   d ajeReNd;<   dhd<„Zkejc        d%ed         fd=„¦   «         Zl G d>„ d?¦  «        Zm G d@„ dA¦  «        Znd)eUd%dfdB„Zod)eUd%dfdC„ZpdDeJeLdz           d%dfdE„Zqd)ee?         d%dfdF„ZrdGeeseetf                  d%dfdH„ZudhdI„Zvejc        d%ed         fdJ„¦   «         Zwejx         G dK„ dL¦  «        ¦   «         Zyejx         G dM„ dN¦  «        ¦   «         Zz ej{        ¦   «         Z|dOeRdz  dPeKeLef         d%eKeLeKeLeJeL         f         f         fdQ„Z}dReKeLef         d%eKeLeKeLef         f         fdS„Z~d%eKeLef         fdT„Zd%eKeLeKeLeJeL         f         f         fdU„Z€	 didVee?         e=z  dWeLdXePd%eRdz  fdY„Z�dZed[ed%dfd\„Z‚d]eLd%efd^„Zƒdd_œd`edaeLf         dbej„        j…        dceKeLef         dde6dz  d%eLf
de„Z†dS )jé    N)ÚCallableÚIteratorÚSequence)ÚAnyÚIO)Úpatch)Ú
draw_graphÚget_aot_graph_nameÚget_graph_being_compiled)Úfx)Úsave_graph_repro)Úget_debug_dir©Úconfig)Úutils)ÚgetArtifactLogger)Útrace_structured)Úsignpost_event)ÚGraphModule)Ú_extract_tensor_metadataÚTensorMetadata)Úlegalize_graph)ÚFileLike)Ú
OrderedSet)Útree_mapé   )r   Ú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=5000r-   ÚrawÚreturnc                  ó.   — t          j        d¦  «        d uS )Nr-   )ÚshutilÚwhich© ó    úS/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/_inductor/debug.pyÚhas_dotr6   A   s   € åŒ<˜ÑÔ dÐ*Ð*r4   Úfnamec                 ó�   — | �9t           j                             | ¦  «        \  }}|r|                     d¦  «        S t          j        S )Nú.)ÚosÚpathÚsplitextÚlstripÚfunctorch_configÚtorch_compile_graph_format)r7   Ú_Úexts      r5   Ú_get_graph_output_formatrB   F   sB   € ØÐÝ”×!Ò! %Ñ(Ô(‰ˆˆ3Øð 	#Ø—:’:˜c‘?”?Ð"ÝÔ6Ð6r4   ÚnodesÚprint_graphc           
      ó   — t          |¦  «        }|t          vr*t          ¦   «         st                               d¦  «         dS |€t          ¦   «         }t          | ¦  «        }|j        D �](}d|j        vrŒ|j        d         j	        }t          |t          ¦  «        r.t          |d         t          ¦  «        r
|d         f}nˆ|d         }nt          |t          ¦  «        rj	 |j        d         j        }|                     ¦   «         d         j                             ¦   «         }|rt          |¦  «        nd}n# t$          $ r d}Y nw xY wd}	t          |t&          j        ¦  «        r|j        j        }	t/          ||	ddddd¦  «        }
|
|j        d<   �Œ*|rt1          |¦  «         t3          i |¦  «        }t5          |¦  «         |j                             ¦   «          t;          ||dt<          j        j         ¬	¦  «         dS )
z 
    Draw a graph in fname.
    z*draw_buffers() requires `graphviz` packageNÚfusion_metar   r   r3   Útensor_metaF)Ú
clear_metaÚdot_graph_shape)!rB   Ú_RAW_DOT_GRAPH_FORMATSr6   ÚlogÚwarningr   Úcreate_fx_from_snodesrC   ÚmetaÚgroupÚ
isinstanceÚtupleÚintÚstrÚsnodeÚget_outputsÚnodeÚmaybe_get_sizeÚ	Exceptionr   ÚComputedBufferÚdataÚdtyper   Úprintr   r   ÚgraphÚlintr	   r   ÚtracerI   )rC   rD   r7   Úgraph_formatr]   rV   rO   rT   Úsizer[   ÚmetadataÚgms               r5   Údraw_buffersrd   N   s  € õ ,¨EÑ2Ô2€LØÕ1Ð1Ð1½'¹)¼)Ð1Ý�ŠÐ@ÑAÔAÐAØˆà€}Ý(Ñ*Ô*ˆå! %Ñ(Ô(€Eà”ð ,ñ ,ˆØ ¤	Ð)Ð)ØØ”	˜-Ô(Ô.ˆÝ�e�UÑ#Ô#ð 	Ý˜% œ(¥CÑ(Ô(ð !Ø˜qœ˜��à˜aœ��Ý˜�sÑ#Ô#ð 		ðØœ	 -Ô0Ô6�Ø×(Ò(Ñ*Ô*¨1Ô-Ô2×AÒAÑCÔC�Ø'+Ð3�˜d™œ˜°��øÝð ð ð Ø���ðøøøð ˆÝ�d�BÔ-Ñ.Ô.ð 	$Ø”I”OˆEå! %¨°°d¸DÀ$ÈÑMÔMˆà#+ˆŒ	�-Ñ Ñ àð Ýˆe‰Œˆå	�R˜Ñ	Ô	€BÝ�2ÑÔÐØ„H‡M‚M�O„O€OÝØ
ˆE˜eµV´\Ô5Qðñ ô ð ð ð s   Ã!AD8Ä8EÅEÚsnodesc                 ón  ‡— dt           dt          dt          f         fd„}t          j        dg d¢¦  «        }i }i }t
          j                             ¦   «         }d}g }d}| D �]È}	|	                     ¦   «         rd}
|
}n€|	 	                    ¦   «         rd	}
|
}ngt          |	t          ¦  «        rd
}
|
}nMt          |	t          ¦  «        r
d}
|	j        }n.t          |	t          ¦  «        r
d}
|	j        }nt          d¦  «        ‚t
          j        j                             |	                     ¦   «         d¦  «        }|
› d|› �} ||¦  «        }i }t)          |	d¦  «        rd|	                     ¦   «         i}|                     |d|¬¦  «        }dt.          t          z  dt0          fˆfd„Š ‰|	¦  «        r|                     |¦  «         |	                     ¦   «         }||_         |||	|
¦  «        |j        d<   |||<   |	                     ¦   «         D ]}|||                     ¦   «         <   Œ|€|}�ŒÊ| D ]É}	|	                     ¦   «         }|	j        j        }||         }g }|D ]†}|j        |v r||j                 }nQ|                      |¦  «        5  | !                    |j        ¦  «        }|||j        <   ddd¦  «         n# 1 swxY w Y   ||k    rŒq|                     |¦  «         Œ‡tE          |¦  «        |_#        ŒÊ| $                    tK          |¦  «        dk    r|d         ntE          |¦  «        ¦  «         |S )úB
    Creates a FX Graph from a list of SchedulerNode objects.
    r+   r/   .c                 ó8   — dt           dt          fd„}| |_        |S )NÚargsr/   c                  ó   — dS ©Nr   r3   )ri   s    r5   Úfunc1z;create_fx_from_snodes.<locals>.get_fake_func.<locals>.func1Ž   s   € Ø�1r4   )r   rR   Ú__name__)r+   rl   s     r5   Úget_fake_funcz,create_fx_from_snodes.<locals>.get_fake_func�   s2   € ð	�ð 	¥ð 	ð 	ð 	ð 	ð ˆŒØˆr4   Ú
FusionMeta)rO   rT   ÚtypeNÚexternÚtemplateÚnopÚcomputeÚfusedzUnknown node typeÚoriginal_atenz: Ú
get_deviceÚdevicer3   ©ri   ÚkwargsrT   c                 óÄ   •— t          | t          ¦  «        r t          ˆfd„| j        D ¦   «         ¦  «        S t          d„ |                      ¦   «         D ¦   «         ¦  «        S )Nc              3   ó.   •K  — | ]} ‰|¦  «        V — Œd S ©Nr3   )Ú.0ÚxÚ	in_outputs     €r5   ú	<genexpr>z;create_fx_from_snodes.<locals>.in_output.<locals>.<genexpr>¾   s+   øè è € Ð>Ð>¨A˜9˜9 Q™<œ<Ð>Ð>Ð>Ð>Ð>Ð>r4   c              3   ó^   K  — | ](}|j         D ]}t          |j        t          ¦  «        V — ŒŒ)d S r}   )ÚusersrP   rV   r"   )r~   ÚbufÚusers      r5   r�   z;create_fx_from_snodes.<locals>.in_output.<locals>.<genexpr>¿   s[   è è € ð ð àØœIðð ð õ ˜4œ9¥jÑ1Ô1ðð ð ð ð ð ð r4   )rP   r    Úanyre   rU   )rT   r€   s    €r5   r€   z(create_fx_from_snodes.<locals>.in_output¼   su   ø€ Ý˜%Õ!3Ñ4Ô4ð ?ÝÐ>Ð>Ð>Ð>°´Ð>Ñ>Ô>Ñ>Ô>Ð>Ýð ð à ×,Ò,Ñ.Ô.ðñ ô ñ ô ð r4   rF   r   r   )&rS   r   rR   ÚcollectionsÚ
namedtupleÚtorchr   ÚGraphÚ	is_externÚis_templaterP   r!   r#   rO   r    ÚRuntimeErrorÚ	_inductorr   Úget_fused_kernel_nameÚ	get_nodesÚhasattrrw   Úcall_functionr   ÚboolÚappendÚget_namer+   rN   rU   Úread_writesÚreadsÚinserting_beforeÚplaceholderrQ   ri   ÚoutputÚlen)re   rn   ro   Úbuf_to_fx_nodeÚnode_to_fx_noder]   Ú
first_nodeÚoutputsrO   rT   Ú	node_typeÚ
fused_nameÚ	func_nameÚ	node_funcrz   Úfx_noder+   r„   ÚdepsÚnew_argsÚdepÚdep_noder€   s                         @r5   rM   rM   ˆ   së  ø€ ð
�Cð ¥H¨Sµ#¨XÔ$6ð ð ð ð õ Ô'¨Ð6PÐ6PÐ6PÑQÔQ€Jà€NØ€OÝŒH�NŠNÑÔ€EØ€Jà€GØ€Eð ð 2!ñ 2!ˆØ�?Š?ÑÔð 	4Ø ˆIØˆEˆEØ×ÒÑ Ô ð 	4Ø"ˆIØˆEˆEÝ˜Õ5Ñ6Ô6ð 
	4ØˆIØˆEˆEÝ˜�}Ñ-Ô-ð 	4Ø!ˆIØ”KˆEˆEÝ˜Õ1Ñ2Ô2ð 	4ØˆIØ”KˆEˆEåÐ2Ñ3Ô3Ð3å”_Ô*×@Ò@Ø�OŠOÑÔ˜ñ
ô 
ˆ
ð !Ð0Ð0 JÐ0Ð0ˆ	Ø!�M )Ñ,Ô,ˆ	ØˆÝ�5˜,Ñ'Ô'ð 	4Ø × 0Ò 0Ñ 2Ô 2Ð3ˆFØ×%Ò% i°bÀÐ%ÑHÔHˆð	Õ.Õ1CÑCð 	Íð 	ð 	ð 	ð 	ð 	ð 	ð ˆ9�UÑÔð 	$Ø�NŠN˜7Ñ#Ô#Ð#Ø�~Š~ÑÔˆØˆŒà&0 j°¸¸yÑ&IÔ&IˆŒ�]Ñ#à 'ˆ˜ÑØ×$Ò$Ñ&Ô&ð 	5ð 	5ˆCØ-4ˆN˜3Ÿ<š<™>œ>Ñ*Ð*àÐØ ˆJùð ð 'ð 'ˆØ�~Š~ÑÔˆØÔ Ô&ˆà! $Ô'ˆØˆØð 		&ð 		&ˆCØŒx˜>Ð)Ð)Ø)¨#¬(Ô3��à×+Ò+¨JÑ7Ô7ð 8ð 8Ø$×0Ò0°´Ñ:Ô:�HØ/7�N 3¤8Ñ,ð8ð 8ð 8ñ 8ô 8ð 8ð 8ð 8ð 8ð 8ð 8øøøð 8ð 8ð 8ð 8ð ˜7Ò"Ð"ØØ�OŠO˜HÑ%Ô%Ð%Ð%å˜X‘”ˆŒˆà	‡L‚L�s 7™|œ|¨qÒ0Ð0�˜”�µe¸G±n´nÑEÔEÐEØ€Ls   Ê
%J;Ê;J?ËJ?Únode_name_to_buf_nameÚparent_buf_nameÚ	n_originsc                 ó^  — | €d S | D ]¥}|                      ¦   «         }|                     ¦   «         }|�)t          |¦  «        dk    rt          |||€|n|¦  «         ŒUt          |¦  «        dk    r|d         |k    sJ ‚|j        }|�|j        €Œ‡|j        D ]}|j        }	|	|vr	|€|n|||	<   ŒŒ¦d S )Nr   r   )r•   r�   r›   Ú$update_orig_fx_node_name_to_buf_namerV   Úoriginsr+   )
rC   r©   rª   r«   rV   Úbuf_nameÚchildren_nodesÚir_nodeÚoriginÚ	node_names
             r5   r­   r­   ë   s  € ð €}ØˆØð ð ˆà—=’=‘?”?ˆØŸšÑ)Ô)ˆØÐ%­#¨nÑ*=Ô*=ÀÒ*AÐ*AÝ0ØØ%Ø+Ð3��¸ñô ð ð
 õ �~Ñ&Ô&¨!Ò+Ð+°¸qÔ0AÀTÒ0IÐ0IÐ0IÐIà”)ˆØˆ?˜gœoÐ5ØØ”oð 	ð 	ˆFØœˆIð Ð 5Ð5Ð5à /Ð 7�H�H¸_ð & iÑ0øð	ð%ð r4   c                 ó,  — i }|                       ¦   «         D ]8\  }}||vrt          |g¦  «        ||<   Œ||                              |¦  «         Œ9i }|                       ¦   «         D ]-\  }}t          ||         ¦  «        }t	          ||¦  «        ||<   Œ.|S r}   )Ú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×:Ò:Ñ<Ô<ð 8ð 8Ñˆ	�8ØÐ-Ð-Ð-Ý+5°y°kÑ+BÔ+BÐ˜xÑ(Ð(ð ˜xÔ(×,Ò,¨YÑ7Ô7Ð7Ð7àÐØ4×:Ò:Ñ<Ô<ð Eð EÑˆ	�8ÝÐ'¨Ô1Ñ2Ô2ˆÝ+2°8¸VÑ+DÔ+DÐ˜iÑ(Ð(Ø Ð r4   rc   c                 óÄ   — i }t          ||¦  «         |€dS t          |¦  «        }| j        j        D ]-}|j        |v r"|                     |j        ¦  «        |j        d<   Œ.dS )rg   NÚbuf_meta)r­   rº   r]   rC   r+   ÚgetrN   )rc   re   r©   r¸   rV   s        r5   Úannotate_orig_fx_with_snodesr¾   !  s�   € ð -/ÐÝ(¨Ð1FÑGÔGÐGØÐ$ØˆÝ5Ð6KÑLÔLÐØ””ð Ið IˆØŒ9Ð-Ð-Ð-Ø$9×$=Ò$=¸d¼iÑ$HÔ$HˆDŒI�jÑ!øðIð Ir4   c               #   óð  K  — t           j                             dd¦  «        dk    } dd l}t	          j        |j        j        j        ¦  «        }t          j
        ¦   «         }| s5	 d V — |                     ¦   «          n# |                     ¦   «          w xY wd S |                     t          dd¦  «        ¦  «         t           j                             t!          ¦   «         d¦  «        }t          j        |d¬¦  «         t	          j        t           j                             |d	t'          ¦   «         › d
�¦  «        ¦  «        }|                     t          j        ¦  «         |                     t	          j        d¦  «        ¦  «         |                     |¦  «         	 d V — |                     |¦  «         |                     ¦   «          d S # |                     |¦  «         |                     ¦   «          w xY 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)r:   Úenvironr½   Útorch._functorch.aot_autogradÚloggingÚ	getLoggerÚ
_functorchÚaot_autogradrm   Ú
contextlibÚ	ExitStackÚcloseÚenter_contextr   r;   Újoinr   ÚmakedirsÚFileHandlerr
   ÚsetLevelÚDEBUGÚsetFormatterÚ	FormatterÚ
addHandlerÚremoveHandler)Úcompile_debugr‰   rK   Ústackr;   Úfhs         r5   Úenable_aot_loggingrÞ   2  sÇ  è è € å”J—N’NÐ#8¸#Ñ>Ô>À#ÒE€Mà(Ð(Ð(Ð(å
Ô
˜EÔ,Ô9ÔBÑ
CÔ
C€CåÔ Ñ"Ô"€EØð ð	ØˆEˆEˆEà�KŠK‰MŒMˆMˆMøˆE�KŠK‰MŒMˆMˆMøøøØˆð 
×Ò�ÐJÈDÑQÔQÑRÔRÐRåŒ7�<Š<�™œ¨Ñ9Ô9€DÝ„K�˜tÐ$Ñ$Ô$Ð$å	Ô	Ý
Œ�ŠØØ3Õ%Ñ'Ô'Ð3Ð3Ð3ñ	
ô 	
ñ
ô 
€Bð ‡K‚K•”ÑÔÐØ‡O‚OÝÔÐOÑPÔPñô ð ð ‡N‚N�2ÑÔÐðØˆˆˆà×Ò˜"ÑÔÐØ�Š‰Œˆˆˆøð 	×Ò˜"ÑÔÐØ�Š‰Œˆˆøøøs   Á$A= Á=BÆG
 Ç
+G5Ú _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 d S rk   )rä   r3   r4   r5   Ú-reset_inductor_kernel_provenance_debug_handleræ   f  s   € à/0Ð,Ð,Ð,r4   c               #   óJ  K  — t           } t                               ¦   «         }t                               ¦   «         }t                               ¦   «         }t
                               ¦   «         }t          }da i ai ai ai ada	 dV — | a |a|a|a|a|adS # | a |a|a|a|a|aw xY 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         r5   Úreset_provenance_globalsrð   k  s  è è € õ "4ÐÝ&F×&KÒ&KÑ&MÔ&MÐ#å6×;Ò;Ñ=Ô=ð 2õ 	,×0Ò0Ñ2Ô2ð 0õ ,H×+LÒ+LÑ+NÔ+NÐ(å0ð 5ð
 ÐØ')Ð$Ø57Ð2Ø*,Ð'Ø#%Ð Ø/0Ð,ð
Øˆˆˆð 8ÐØ+JÐ(à9ð 	7ð (LÐ$à7ð 	,ð =ð 	1Ð0Ð0øð 8ÐØ+JÐ(à9ð 	7ð (LÐ$à7ð 	,ð =ð 	1ð 	
ð 	
ð 	
ð 	
s   Â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dS )ÚDebugContextÚfolder_namer/   Nc                 ó  — t           j        j        pt          ¦   «         }t          j        D ]R}t          j                             |d| › d|› �¦  «        }	 t          j	        |d¬¦  «         |c S # t          $ r Y ŒOw xY wd S )NrÃ   r9   FrÄ   )r   r_   Ú	debug_dirr   rò   Ú_counterr:   r;   rÒ   rÓ   ÚFileExistsError)ró   rõ   ÚnÚdirnames       r5   Úcreate_debug_dirzDebugContext.create_debug_dir¡  sŸ   € å”LÔ*Ð=­m©o¬oˆ	ÝÔ&ð 	ð 	ˆAÝ”g—l’lØØØÐ$Ð$ Ð$Ð$ñô ˆGð
Ý”˜G¨eÐ4Ñ4Ô4Ð4Ø���øÝ"ð ð ð ð �ðøøøð ˆts   ÁA/Á/
A<Á;A<c                 óR   — d | _         d | _        t          j        ¦   «         | _        d S r}   )Ú_profÚ_pathrÎ   rÏ   Ú_stack)Úselfs    r5   Ú__init__zDebugContext.__init__³  s$   € ØˆŒ
ØˆŒ
Ý Ô*Ñ,Ô,ˆŒˆˆr4   Únew_pathc                 ó°  — | j         sd S |                     d¦  «        s
J |¦   «         ‚ddlm} 	  ||› d�¦  «        5  t          j                             |¦  «        rt          j        |¦  «         t          j	        | j         |¦  «         d d d ¦  «         d S # 1 swxY w Y   d S # t          $ r% t                               d| j         |¦  «         Y d S w xY w)Nz.debugr   )ÚFileLockz.lockz(Failed to copy debug files from %s to %s)rý   ÚendswithÚfilelockr  r:   r;   Úexistsr1   ÚrmtreeÚcopytreeÚOSErrorrK   rL   )rÿ   r  r  s      r5   ré   zDebugContext.copy¸  sL  € ØŒzð 	ØˆFØ× Ò  Ñ*Ô*Ð4Ð4¨HÑ4Ô4Ð*Ø%Ð%Ð%Ð%Ð%Ð%ð	Ø�˜XÐ,Ð,Ð,Ñ-Ô-ð 6ð 6Ý”7—>’> (Ñ+Ô+ð ,Ý”M (Ñ+Ô+Ð+Ý” ¤
¨HÑ5Ô5Ð5ð6ð 6ð 6ñ 6ô 6ð 6ð 6ð 6ð 6ð 6ð 6ð 6øøøð 6ð 6ð 6ð 6ð 6ð 6øõ ð 	ð 	ð 	Ý�KŠKØ:¸D¼JÈñô ð ð ð ð ð	øøøs5   °B& ¾ABÂB& ÂBÂB& Â BÂ!B& Â&+CÃCÚwÚfilenameÚ
write_moderi   rz   c                 ó|   — | j         sJ ‚t          t          j                             | j         |¦  «        |g|¢R i |¤ŽS r}   ©rý   Úopenr:   r;   rÒ   )rÿ   r  r  ri   rz   s        r5   ÚfopenzDebugContext.fopenÈ  sC   € ð ŒzÐÐˆzÝ•B”G—L’L ¤¨XÑ6Ô6¸
ÐTÀTÐTÐTÐTÈVÐTÐTÐTr4   c              /   ó¾   K  — | j         sJ ‚t          t          j                             | j         |¦  «        |g|¢R i |¤Ž5 }|V — d d d ¦  «         d S # 1 swxY w Y   d S r}   r  )rÿ   r  r  ri   rz   Úfs         r5   Úfopen_contextzDebugContext.fopen_contextÒ  s²   è è € ð ŒzÐÐˆzÝ•"”'—,’,˜tœz¨8Ñ4Ô4°jÐRÀ4ÐRÐRÐRÈ6ÐRÐRð 	ÐVWØˆGˆGˆGð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   Á AÁAÁAÚsuffixc                 ó^   — | j         sJ ‚t          j                             | j         |¦  «        S r}   )rý   r:   r;   rÒ   )rÿ   r  s     r5   r  zDebugContext.filenameÞ  s'   € ØŒzÐÐˆzÝŒw�|Š|˜DœJ¨Ñ/Ô/Ð/r4   c                 óð  — t           j        j        �ädd l}| j        sJ ‚t
          j                             | j        t
          j                             | j        ¦  «        › d�¦  «        }| 	                    |d¦  «        5 }| 
                    | j        t
          j                             | j        ¦  «        ¬¦  «         d d d ¦  «         n# 1 swxY w Y   t           j                             |¦  «         d S d S )Nr   z.tar.gzzw:gz)Úarcname)r   r_   Ú
upload_tarÚtarfilerý   r:   r;   rÒ   Úbasenamer  r¶   )rÿ   r  Útar_fileÚtars       r5   r  zDebugContext.upload_tarâ  s   € ÝŒ<Ô"Ð.ØˆNˆNˆNà”:ÐÐ�:Ý”w—|’|Ø”
�rœw×/Ò/°´
Ñ;Ô;ÐDÐDÐDñô ˆHð —’˜h¨Ñ/Ô/ð J°3Ø—’˜œ
­B¬G×,<Ò,<¸T¼ZÑ,HÔ,H�ÑIÔIÐIðJð Jð Jñ Jô Jð Jð Jð Jð Jð Jð Jøøøð Jð Jð Jð JåŒL×#Ò# HÑ-Ô-Ð-Ð-Ð-ð /Ð.s   Á??C
Ã
CÃCc                 óz  ‡— t           j        rdt          j        d¦  «        Š‰j        }‰                     t          j        ¦  «         dt          dd fˆfd„}| j         	                    ||¦  «         | j         
                    t          j        | ¦  «        ¦  «         t           j        j        sd S |                      t!          ¦   «         ¦  «        | _        t           j        j        r |                      dt          j        ¦  «         t           j        j        r"|                      dt          j        ¦  «         d S d S )Nztorch._dynamoÚlevelr/   c                 ó2   •— ‰                      | ¦  «         d S r}   )rÕ   )r  rK   s    €r5   Úreset_log_levelz/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_handlerr_   Úenabledrú   r
   rý   Ú	debug_logÚ_setup_log_captureÚinfo_logÚINFO)rÿ   Ú
prev_levelr   rK   s      @r5   Ú	__enter__zDebugContext.__enter__î  s(  ø€ ÝŒ<ð 	>ÝÔ# OÑ4Ô4ˆCØœˆJØ�LŠL�œÑ'Ô'Ð'ð$¥sð $¨tð $ð $ð $ð $ð $ð $ð ŒK× Ò  °*Ñ=Ô=Ð=àŒ×!Ò!¥!Ô"5°dÑ";Ô";Ñ<Ô<Ð<åŒ|Ô#ð 	ØˆFà×*Ò*Õ+=Ñ+?Ô+?Ñ@Ô@ˆŒ
åŒ<Ô!ð 	@Ø×#Ò# Kµ´Ñ?Ô?Ð?ÝŒ<Ô ð 	>Ø×#Ò# Jµ´Ñ=Ô=Ð=Ð=Ð=ð	>ð 	>r4   r  c                 óâ  — t          j        d¦  «        }| j                             |                      |¦  «        ¦  «        }t          j        |¦  «        }|                     |¦  «         |                     t          j        d¦  «        ¦  «         | 	                    |¦  «         |                     t          |j        |¦  «        ¦  «         | j                             |j        |¦  «         d S )Nztorch._inductorrÇ   )rÊ   rË   rþ   rÑ   r  ÚStreamHandlerrÕ   r×   rØ   rÙ   Úminr  r"  rÚ   )rÿ   r  r  rK   ÚfdÚchs         r5   r&  zDebugContext._setup_log_capture  sÐ   € õ
 ÔÐ 1Ñ2Ô2ˆØŒ[×&Ò& t§z¢z°(Ñ';Ô';Ñ<Ô<ˆÝÔ" 2Ñ&Ô&ˆØ
�Š�EÑÔÐØ
�ŠÝÔÐSÑTÔTñ	
ô 	
ð 	
ð 	�Š�rÑÔÐØ�Š•S˜œ EÑ*Ô*Ñ+Ô+Ð+ØŒ×Ò˜SÔ.°Ñ3Ô3Ð3Ð3Ð3r4   Úexc_typeÚexc_valÚexc_tbc                 ó0  — | j         r-| j                              ¦   «          |                      ¦   «          | j        rA|                      ¦   «          t
                               dt          ¦   «         | j        ¦  «         | j         	                    ¦   «          d S )Nz%s debug trace: %s)
rü   ÚdisableÚ_save_profile_datarý   r  rK   rL   r   rþ   rÐ   )rÿ   r0  r1  r2  s       r5   Ú__exit__zDebugContext.__exit__  s‰   € ð Œ:ð 	&ØŒJ×ÒÑ Ô Ð Ø×#Ò#Ñ%Ô%Ð%àŒ:ð 	VØ�OŠOÑÔÐÝ�KŠKÐ,Õ.FÑ.HÔ.HÈ$Ì*ÑUÔUÐUØŒ×ÒÑÔÐÐÐr4   c                 óÔ  — | j         sJ ‚| j                              |                      d¦  «        ¦  «         |                      d¦  «        5 }t	          j        | j         |¬¦  «        }|                     ¦   «          |                     d¦  «         |                     d¦  «         |                     d¦  «         |                     d¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )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   r5  zDebugContext._save_profile_data$  s  € ØŒzÐÐˆzØŒ
×Ò˜dŸmšm¨NÑ;Ô;Ñ<Ô<Ð<Ø�ZŠZ˜Ñ(Ô(ð 	#¨BÝ”L ¤°BÐ7Ñ7Ô7ˆEØ×ÒÑÔÐØ×Ò˜YÑ'Ô'Ð'Ø×Ò˜cÑ"Ô"Ð"Ø×Ò˜YÑ'Ô'Ð'Ø×Ò˜cÑ"Ô"Ð"ð	#ð 	#ð 	#ñ 	#ô 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#ð 	#øøøð 	#ð 	#ð 	#ð 	#ð 	#ð 	#s   ÁBCÃC!Ã$C!r+   ).Nc                 ó  — t           j        j        ret          t           j        |¦  «        rK	 t          t	          | ¦  «        |¦  «        S # t
          $ r  t                               dd¬¦  «         Y d S w xY wdt          dt          dd fd„}|S )Nz Ignoring exception in debug codeT©Úexc_infori   rz   r/   c                  ó   — d S r}   r3   ry   s     r5   Úignoredz)DebugContext.__getattr__.<locals>.ignored8  s   € Ø�r4   )	r   r_   r$  ÚgetattrÚDebugFormatterrX   rK   rL   r   )rÿ   r+   rG  s      r5   Ú__getattr__zDebugContext.__getattr__/  s¨   € ÝŒ<Ôð 	¥G­F¬L¸$Ñ$?Ô$?ð 	ðÝ�~¨dÑ3Ô3°TÑ:Ô:Ð:øÝð ð ð Ý—’Ð>È�ÑNÔNÐNØ�t�tðøøøð
�sð ­cð °dð ð ð ð ð ˆNs   ­A
 Á
&A4Á3A4©r/   N)r
  )rm   Ú
__module__Ú__qualname__Ú	itertoolsÚcountrö   ÚstaticmethodrS   rú   r   ré   r   r   r  rÎ   Úcontextmanagerr   r  r  r  r*  rR   r&  rp   ÚBaseExceptionr6  r5  r   rJ  r3   r4   r5   rò   rò   ž  sS  € € € € € ØˆyŒÑ Ô €Hàð cð ¨c°D©jð ð ð ñ „\ðð"-ð -ð -ð -ð
˜Sð  Tð ð ð ð ð& ðUð UàðUð ðUð ð	Uð
 ðUð 
ˆCŒðUð Uð Uð Uð Ôð ð	ð 	àð	ð ð	ð ð		ð
 ð	ð 
�"�S”'Ô	ð	ð 	ð 	ñ Ôð	ð0˜sð 0 sð 0ð 0ð 0ð 0ð
.ð 
.ð 
.ð 
.ð>ð >ð >ð >ð.4àð4ð ð4ð 
ð	4ð 4ð 4ð 4ð à�}Ô%¨Ñ,ðð  Ñ%ðð �d‘
ð	ð
 
ðð ð ð ð	#ð 	#ð 	#ð 	#ð ð ¨°Ô(;¸dÑ(Bð ð ð ð ð ð r4   rò   c                   óx  — 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dS )rI  Úhandlerr/   Nc                 ó\   — |j         | _         |j        | _        |j        | _        || _        d S r}   )r  r  r  rT  )rÿ   rT  s     r5   r   zDebugFormatter.__init__?  s+   € Ø”]ˆŒ
Ø$Ô2ˆÔØÔ(ˆŒØˆŒˆˆr4   rc   Úinputsc           
      ó¶  — |                       d¦  «        5 }d }t          j        j        j        j        rHt          j        j                             |¦  «        }t          j
                             |j        ¦  «        }t          j        j        j        j        }t          j        j                             dddœ¦  «        5  t          |||d||¬¦  «         d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   |                       d¦  «        5 }|                     |                     d¬¦  «        ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )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   r_   Úsave_real_tensorsÚ_subclassesÚ
fake_utilsÚtry_convert_fake_to_realr:   r;   rù   r+   r   r   ÚwriteÚprint_readable)rÿ   rc   rV  r.  rY  rZ  s         r5   Úfx_graphzDebugFormatter.fx_graphE  s   € ð
 �ZŠZÐ.Ñ/Ô/ð 	°2ØˆHÝŒÔ%Ô+Ô=ð 4ÝÔ*Ô5×NÒNÈvÑVÔV�Ýœ7Ÿ?š?¨2¬7Ñ3Ô3�õ
  œ/Ô0Ô6ÔHˆKÝ”Ô'×-Ò-Ø"'ÀEÐJÐJñô ð 
ð 
õ !ØØØØØ%Ø +ðñ ô ð ð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
ð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð, �ZŠZÐ.Ñ/Ô/ð 	<°2Ø�HŠH�R×&Ò&°EÐ&Ñ:Ô:Ñ;Ô;Ð;ð	<ð 	<ð 	<ñ 	<ô 	<ð 	<ð 	<ð 	<ð 	<ð 	<ð 	<ð 	<øøøð 	<ð 	<ð 	<ð 	<ð 	<ð 	<sH   –B(C7Â>C ÃC7Ã C$	Ã$C7Ã'C$	Ã(C7Ã7C;Ã>C;Ä*EÅEÅEc                 ó´   — |                       d¦  «        5 }|                     |                     d¬¦  «        ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nzfx_graph_transformed.pyFr[  )r  ra  rb  )rÿ   rc   rV  r.  s       r5   Úfx_graph_transformedz#DebugFormatter.fx_graph_transformedc  s›   € ð
 �ZŠZÐ1Ñ2Ô2ð 	<°bØ�HŠH�R×&Ò&°EÐ&Ñ:Ô:Ñ;Ô;Ð;ð	<ð 	<ð 	<ñ 	<ô 	<ð 	<ð 	<ð 	<ð 	<ð 	<ð 	<ð 	<øøøð 	<ð 	<ð 	<ð 	<ð 	<ð 	<s   –*AÁAÁArC   c                 ó²   — |                       d¦  «        5 }|                     |                      |¦  «        ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nzir_pre_fusion.txt©r  ra  Ú	_write_ir©rÿ   rC   r.  s      r5   r(   zDebugFormatter.ir_pre_fusionk  s”   € Ø�ZŠZÐ+Ñ,Ô,ð 	,°Ø�HŠH�T—^’^ EÑ*Ô*Ñ+Ô+Ð+ð	,ð 	,ð 	,ñ 	,ô 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,øøøð 	,ð 	,ð 	,ð 	,ð 	,ð 	,ó   –)AÁAÁAc                 ó²   — |                       d¦  «        5 }|                     |                      |¦  «        ¦  «         d d d ¦  «         d S # 1 swxY w Y   d S )Nzir_post_fusion.txtrg  ri  s      r5   r)   zDebugFormatter.ir_post_fusiono  s”   € Ø�ZŠZÐ,Ñ-Ô-ð 	,°Ø�HŠH�T—^’^ EÑ*Ô*Ñ+Ô+Ð+ð	,ð 	,ð 	,ñ 	,ô 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,ð 	,øøøð 	,ð 	,ð 	,ð 	,ð 	,ð 	,rj  c                 óÒ   — t          j        ¦   «         }| D ]>}|                     |                     ¦   «         ¦  «         |                     d¦  «         Œ?|                     ¦   «         S )Nz


)ÚioÚStringIOra  Ú	debug_strÚgetvalue)rC   r„   rV   s      r5   rh  zDebugFormatter._write_irs  s[   € åŒk‰mŒmˆØð 	 ð 	 ˆDØ�IŠI�d—n’nÑ&Ô&Ñ'Ô'Ð'Ø�IŠI�hÑÔÐÐØ�|Š|‰~Œ~Ðr4   c                 ór   — t          ||                      dt          j        j        › �¦  «        ¬¦  «         d S )Nzgraph_diagram.)r7   )rd   r  r   r_   Úgraph_diagram_format)rÿ   rC   s     r5   Úgraph_diagramzDebugFormatter.graph_diagram{  sC   € ÝØØ—-’-Ð Tµ´Ô1RÐ TÐ TÑUÔUð	
ñ 	
ô 	
ð 	
ð 	
ð 	
r4   c                 óÂ   — t          ||¦  «         t          ||                      dt          j        j        › �¦  «        dt          dt          j        j        ¬¦  «         d S )Nzorig_fx_graph_diagram.FT)r7   rH   ÚprogÚparse_stack_tracerI   )r¾   r	   r  r   r_   Úorig_fx_graph_diagram_formatÚGRAPHVIZ_COMMAND_SCALABLErI   )rÿ   rc   rC   s      r5   Údraw_orig_fx_graphz!DebugFormatter.draw_orig_fx_graph�  sl   € õ
 	% R¨Ñ/Ô/Ð/ÝØØ—-’-ØT­¬Ô)RÐTÐTñô ð Ý*Ø"Ý"œLÔ8ð		
ñ 		
ô 		
ð 		
ð 		
ð 		
r4   Úpyr  Ú	extensionc                 ó\   — t          j        ||                      d|› �¦  «        ¦  «         d S )Nzoutput_code.)r1   ré   r  )rÿ   r  r{  s      r5   Úoutput_codezDebugFormatter.output_code’  s/   € ÝŒ�H˜dŸmšmÐ,F¸9Ð,FÐ,FÑGÔGÑHÔHÐHÐHÐHr4   r+   Úinput_nodesÚtimingsÚChoiceCallerÚelapseÚprecompile_elapseÚprescreening_elapsec                 ól  ‡‡— ddl mŠ dt           j        dt          t          t          f         fˆˆfd„Š|t
          j                             ¦   «         t
          j                             ¦   «         ˆfd„|D ¦   «         |||dœ}|  	                    dd	d
¬¦  «        5 }| 
                    ¦   «         D ]j\  }	}
t          |	                     ¦   «         ¦  «        }|                     |¦  «         |
|d<   t          j        ||¦  «         |                     d¦  «         Œk	 d d d ¦  «         d S # 1 swxY w Y   d S )Nr   )ÚFixedLayoutrV   r/   c           
      ó®  •— t          | d¦  «        r| j        }nd}|t          | ¦  «        j        dœ}	 |                      ¦   «         }t          |‰¦  «        r¤ ‰|j        |j        t          j	        j
                             |j        ¦  «        t          j	        j
                             |j        ¦  «        t          j	        j
                             |j        d¬¦  «        ¬¦  «        }t!          |¦  «        |d<   nt!          |¦  «        |d<   n# t"          $ r Y nw xY w	 t!          |                      ¦   «         ¦  «        |d<   n# t"          $ r Y nw xY w	 t!          |                      ¦   «         ¦  «        |d	<   n# t"          $ r Y nw xY w	 t!          t          j	        j
                             |                      ¦   «         ¦  «        ¦  «        |d
<   n# t"          $ r Y nw xY w	 t!          t          j	        j
                             |                      ¦   «         ¦  «        ¦  «        |d<   n# t"          $ r Y nw xY w	 t!          t          j	        j
                             |                      ¦   «         ¦  «        ¦  «        |d<   n# t"          $ r Y nw xY wt          | d¦  «        r2t          | j        t0          j        ¦  «        r ‰| j        ¦  «        |d<   |S )Nr+   Ú )r+   rp   r   )Úfallback)r[   ra   ÚstrideÚoffsetÚlayoutr[   rx   r‰  ra   ÚnumelrZ   )r‘   r+   rp   rm   Úget_output_specrP   rx   r[   r$   r]   ÚsizevarsÚoptimization_hintsra   r‰  Úoptimization_hintrŠ  rS   rX   Ú	get_dtyperw   Ú
get_strideÚget_sizeÚ	get_numelrZ   r   ÚIRNode)rV   r³   Ú	node_infor‹  Ústatic_layoutr…  Úbuild_node_infos        €€r5   r˜  z>DebugFormatter.log_autotuning_results.<locals>.build_node_info   s  ø€ Ý�t˜VÑ$Ô$ð Ø œI�	�	à�	à!Ý˜T™
œ
Ô+ðð ˆIðØ×-Ò-Ñ/Ô/�Ý˜f kÑ2Ô2ð 6Ø$/ KØœØ$œlÝœWÔ-×@Ò@ÀÄÑMÔMÝ œwÔ/×BÒBÀ6Ä=ÑQÔQÝ œwÔ/×AÒAØ"œM°Að  Bñ  ô  ð%ñ %ô %�Mõ +.¨mÑ*<Ô*<�I˜hÑ'Ð'å*-¨f©+¬+�I˜hÑ'øøÝð ð ð Ø�ðøøøðÝ%(¨¯ªÑ)9Ô)9Ñ%:Ô%:�	˜'Ñ"Ð"øÝð ð ð Ø�ðøøøðÝ&)¨$¯/ª/Ñ*;Ô*;Ñ&<Ô&<�	˜(Ñ#Ð#øÝð ð ð Ø�ðøøøðÝ&)Ý”GÔ$×7Ò7¸¿ºÑ8IÔ8IÑJÔJñ'ô '�	˜(Ñ#Ð#øõ ð ð ð Ø�ðøøøðÝ$'Ý”GÔ$×7Ò7¸¿º¹¼ÑHÔHñ%ô %�	˜&Ñ!Ð!øõ ð ð ð Ø�ðøøøðÝ%(Ý”GÔ$×6Ò6°t·~²~Ñ7GÔ7GÑHÔHñ&ô &�	˜'Ñ"Ð"øõ ð ð ð Ø�ðøøøå�t˜VÑ$Ô$ð ?­°D´I½r¼yÑ)IÔ)Ið ?Ø$3 O°D´IÑ$>Ô$>�	˜&Ñ!ØÐso   ´CD Ä
DÄDÄ $E Å
EÅEÅ$E; Å;
FÆFÆAG Ç
G ÇG Ç$AH+ È+
H8È7H8È<AJ Ê
JÊJc                 ó&   •— g | ]} ‰|¦  «        ‘ŒS r3   r3   )r~   rV   r˜  s     €r5   ú
<listcomp>z9DebugFormatter.log_autotuning_results.<locals>.<listcomp>Ü  s#   ø€ ÐJÐJÐJ°d˜O˜O¨DÑ1Ô1ÐJÐJÐJr4   )Ú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•  ÚdictrS   r‰   ÚcudaÚget_device_nameÚdevice_countr  rµ   Ú	info_dictÚupdateÚjsonÚdumpra  )rÿ   r+   r~  r  r�  r‚  rƒ  Úgeneral_propertiesr.  ÚcallerÚtimer©  r…  r˜  s               @@r5   Úlog_autotuning_resultsz%DebugFormatter.log_autotuning_results•  sª  øø€ ð 	$Ð#Ð#Ð#Ð#Ð#ð6	¥"¤)ð 6	µµS½#°X´ð 6	ð 6	ð 6	ð 6	ð 6	ð 6	ð 6	ðr Ý %¤
× :Ò :Ñ <Ô <Ý!&¤×!8Ò!8Ñ!:Ô!:ØJÐJÐJÐJ¸kÐJÑJÔJØ%Ø0Ø!4ð
ð 
Ðð ×ÒØ-¨t¸gð  ñ 
ô 
ð 	àØ '§¢¡¤ð ð ‘�˜Ý  ×!1Ò!1Ñ!3Ô!3Ñ4Ô4�	Ø× Ò Ð!3Ñ4Ô4Ð4Ø04�	Ð,Ñ-Ý”	˜) RÑ(Ô(Ð(Ø—’˜‘”��ðð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   ÂB D)Ä)D-Ä0D-)rz  )rm   rL  rM  rò   r   r‰   r   r   ÚlistÚTensorrc  re  ÚSchedulerNodeListr(   r)   rP  rS   rh  rs  ry  r}  r   r•  r¥  Úfloatr°  r3   r4   r5   rI  rI  >  s*  € € € € € ð ð °ð ð ð ð ð<àŒHÔ ð<ð �U”\Ô"ð<ð 
ð	<ð <ð <ð <ð<<àŒHÔ ð<ð �U”\Ô"ð<ð 
ð	<ð <ð <ð <ð,Ð#4ð ,¸ð ,ð ,ð ,ð ,ð,Ð$5ð ,¸$ð ,ð ,ð ,ð ,ð ðÐ*ð ¨sð ð ð ñ „\ðð
Ð#4ð 
¸ð 
ð 
ð 
ð 
ð
àŒHÔ ð
ð !ð
ð 
ð	
ð 
ð 
ð 
ð"Ið I Cð I°Cð IÀ4ð Ið Ið Ið IðTàðTð ˜"œ)”_ðTð �n eÐ+Ô,ð	Tð
 ðTð !ðTð # T™\ðTð 
ðTð Tð Tð Tð Tð Tr4   rI  c                 óò   — t                                t          j        ¦  «        r3t                                dt
                               | ¦  «        ¦  «         t          j         	                    | ¦  «         d S )NzBEFORE FUSION
%s)
Úir_pre_fusion_logÚisEnabledForrÊ   r(  ÚinforI  rh  r$   r!  r(   ©rC   s    r5   Úlog_ir_pre_fusionrº  ì  s\   € Ý×%Ò%¥g¤lÑ3Ô3ð UÝ×ÒÐ2µN×4LÒ4LÈUÑ4SÔ4SÑTÔTÐTå„G×Ò˜%Ñ Ô Ð Ð Ð r4   c                 óò   — t                                t          j        ¦  «        r3t                                dt
                               | ¦  «        ¦  «         t          j         	                    | ¦  «         d S )NzAFTER FUSION
%s)
Úir_post_fusion_logr·  rÊ   r(  r¸  rI  rh  r$   r!  r)   r¹  s    r5   Úlog_ir_post_fusionr½  ó  s\   € Ý×&Ò&¥w¤|Ñ4Ô4ð UÝ×ÒÐ 2µN×4LÒ4LÈUÑ4SÔ4SÑTÔTÐTå„G×Ò˜5Ñ!Ô!Ð!Ð!Ð!r4   Úschedulec                 ó�   ‡ — 	 t          dd„ ˆ fd„¬¦  «         d S # t          $ r  t                               dd¬¦  «         Y d S w xY w)NÚartifactc                  ó   — dddœS )NÚinductor_collective_scheduler«  ©r+   r¢  r3   r3   r4   r5   ú<lambda>z+_dump_collective_schedule.<locals>.<lambda>þ  s   € Ø6Ø"ð!ð !€ r4   c                  ó   •— ‰ S r}   r3   ©r¾  s   €r5   rÄ  z+_dump_collective_schedule.<locals>.<lambda>  s   ø€ ˜x€ r4   ©Úmetadata_fnÚ
payload_fnzAFailed to log inductor_collective_schedule via structured loggingTrD  )r   rX   rK   r!  rÆ  s   `r5   Ú_dump_collective_schedulerÊ  ú  s‘   ø€ ð
ÝØðð ð (Ð'Ð'Ð'ð	
ñ 	
ô 	
ð 	
ð 	
ð 	
øõ ð 
ð 
ð 
Ý�	Š	ØOØð 	ñ 	
ô 	
ð 	
ð 	
ð 	
ð 	
ð
øøøs   ƒ ›&AÁAc                 óJ   ‡— ˆfd„| D ¦   «         }|rt          |¦  «         d S d S )Nc           	      óˆ   •— g | ]>}t          t          |d d¦  «        xŠt          j        ¦  «        ¯-t          ‰dd¦  «        ‘Œ?S )rV   NÚpython_kernel_name)rP   rH  r   Ú_CollectiveKernel)r~   rV   Úops     €r5   rš  z+log_collective_schedule.<locals>.<listcomp>  sZ   ø€ ð ð ð àÝ�G D¨&°$Ñ7Ô7Ð7�b½Ô9MÑNÔNðÝ�Ð(¨$Ñ/Ô/ðð ð r4   )rÊ  )rC   r¾  rÏ  s     @r5   Úlog_collective_schedulerÐ    sS   ø€ ðð ð ð àðñ ô €Hð ð ,Ý! (Ñ+Ô+Ð+Ð+Ð+ð,ð ,r4   Únode_runtimesc           	      óž  ‡‡— 	 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| 
                    ¦   «         ¦  «        }t          j        |j	        ¦  «        rdnd	}g }	 |                     ¦   «         D ]š}|j	        }	|	                     ¦   «         }
t          |	j        t"          j        ¦  «        r|	                     ¦   «         nd}|	                     ¦   «         }|                      ||
¦  «         ||¦  «         ||¦  «        d
œ¦  «         Œ›n# t,          $ r Y nw xY w‰                     ||||dœ¦  «         �Œ*t/          dd„ ˆfd„¬¦  «         dS # t,          $ r  t0                               dd¬¦  «         Y dS w xY w)zDLog per-op runtime estimates and output tensor metadata for TLParse.r   Nr/   c                 ó<   •— | �t           ‰| ¦  «        ¦  «        ng S r}   )r±  )r   Úto_optimization_hintss    €r5   Úto_listz,log_runtime_and_tensor_meta.<locals>.to_list  s&   ø€ Ø56°]•4Ð-Ð-¨aÑ0Ô0Ñ1Ô1Ð1ÈÐJr4   r[   c                 óV   — | €d S t          | ¦  «        }|                     d¦  «        }|S )Nztorch.)rS   Úremoveprefix)r[   Úss     r5   Údtype_to_strz1log_runtime_and_tensor_meta.<locals>.dtype_to_str   s-   € Øˆ}Ø�tÝ�E‘
”
ˆAØ—’˜xÑ(Ô(ˆAØˆHr4   rÍ  Ú
collectivert   )Úshaper‰  r[   )r+   rp   Úestimated_runtime_nsrŸ   rÀ  c                  ó   — dddœS )NÚ inductor_runtime_and_tensor_metar«  rÃ  r3   r3   r4   r5   rÄ  z-log_runtime_and_tensor_meta.<locals>.<lambda>M  s   € Ø:Ø"ð!ð !€ r4   c                  ó   •— d‰ iS )NÚopsr3   )rà  s   €r5   rÄ  z-log_runtime_and_tensor_meta.<locals>.<lambda>Q  s   ø€   s˜|€ r4   rÇ  z.Failed to log inductor_runtime_and_tensor_metaTrD  )r$   r]   rŽ  r�  r   r   r±  rS   rH  rV   r•   r   Úis_collectiverU   rW   rP   r‹  r   ÚLayoutr’  Úmaybe_get_dtyper”   rX   r   rK   r!  )rÑ  rÕ  rÙ  rØ  Ú
runtime_nsr+   Úop_typerŸ   r„   ÚirnoderÛ  r‰  r[   rà  rÔ  s                @@r5   Úlog_runtime_and_tensor_metarç    sp  øø€ ð:SÝ !¤Ô 0Ô CÐð	K•x¥”} tÑ+ð 	KµµS´	ð 	Kð 	Kð 	Kð 	Kð 	Kð 	Kð	¥ð 	­¨d©
ð 	ð 	ð 	ð 	ð %'ˆØ*ð !	ñ !	‰MˆAˆzÝ˜1œ6Ð#7¸¿º¹¼ÑFÔFˆDÝ&+Ô&9¸!¼&Ñ&AÔ&AÐP�l�lÀyˆGð -/ˆGðØŸ=š=™?œ?ð ð �CØ œX�FØ"×1Ò1Ñ3Ô3�Eõ & f¤mµR´YÑ?Ô?ð"˜×)Ò)Ñ+Ô+Ð+à!ð ð
 #×2Ò2Ñ4Ô4�EØ—N’Nà%, W¨U¡^¤^Ø&- g¨f¡o¤oØ%1 \°%Ñ%8Ô%8ðð ñô ð ð ðøõ  ð ð ð Ø�ðøøøð �JŠJà Ø#Ø,6Ø&ð	ð ñô ð ñ õ 	Øðð ð ,Ð+Ð+Ð+ð	
ñ 	
ô 	
ð 	
ð 	
ð 	
øõ ð Sð Sð SÝ�	Š	ÐBÈTˆ	ÑRÔRÐRÐRÐRÐRðSøøøs7   „B)F" Â.B/EÅF" Å
E+Å(F" Å*E+Å+5F" Æ"&GÇGc                  óœ   — t           sdS 	 t          dd„ d„ ¬¦  «         dS # t          $ r  t                               dd¬¦  «         Y dS w xY w)	z:Emit a structured artifact with the graph execution order.NrÀ  c                  ó   — dddœS )NÚgraph_executionr«  rÃ  r3   r3   r4   r5   rÄ  z%log_graph_execution.<locals>.<lambda>^  s   € Ø)Ø"ð!ð !€ r4   c                  ó   — dt           iS )NÚgraph_execution_order)r%   r3   r4   r5   rÄ  z%log_graph_execution.<locals>.<lambda>b  s   € Ð 7Õ9NÐO€ r4   rÇ  zFailed to log graph_executionTrD  )r%   r   rX   rK   r!  r3   r4   r5   Úlog_graph_executionrí  W  s�   € å ð Øˆð
BÝØðð ð PÐOð	
ñ 	
ô 	
ð 	
ð 	
ð 	
øõ ð Bð Bð BÝ�	Š	Ð1¸Dˆ	ÑAÔAÐAÐAÐAÐAðBøøøs   ‹! ¡&AÁ
Ac               #   óz   K  — g a i ada	 dV — t          ¦   «          dada dadS # t          ¦   «          dada daw xY w)z5Record graph execution order and log it once on exit.TNF)r%   r'   r&   rí  r3   r4   r5   Ú$record_and_log_graph_execution_orderrï  h  sy   è è € ð ÐØÐØ!Ðð!ØˆˆˆåÑÔÐØ!&ÐØ $ÐØ ÐÐÐøõ 	ÑÔÐØ!&ÐØ $ÐØ ÐÐ Ð Ð Ð s   Š$ ¤:c                   ó.   — e Zd ZU eed<   ej        ed<   dS )ÚTensorMetadataHolderÚtensor_metadatarx   N)rm   rL  rM  r   Ú__annotations__r‰   rx   r3   r4   r5   rñ  rñ  x  s,   € € € € € € à#Ð#Ð#Ñ#ØŒLÐÐÑÐÐr4   rñ  c                   óf   — e Zd ZU eed<   eed<   eez  ez  dz  ed<   e	eeez  ez  f         ed<   dS )ÚSymExprMetadataHolderÚpytypeÚexprNÚhintÚsymbol_hints)
rm   rL  rM  rS   ró  r   rR   r´  r“   r¥  r3   r4   r5   rõ  rõ  ~  s]   € € € € € € à€K€K�KØ
€I€I�IØ
�‰+˜Ñ
˜tÑ
#Ð#Ð#Ñ#Ø�s˜C %™K¨$Ñ.Ð.Ô/Ð/Ð/Ñ/Ð/Ð/r4   rõ  Úpre_grad_graph_idÚpost_to_pre_grad_nodes_jsonc           	      ó  ‡‡— i i dœ}t          |t          ¦  «        st                               d¦  «         |S t          | t          ¦  «        s|S t          j        t          ¦  «        }t          j        t          ¦  «        }	 dt          t          t          f         dt          fd„}|                     ¦   «         D �]Š\  Š}t          |t          ¦  «        st                               d¦  «         |c S |D �]M} ||¦  «        s|c c S |                     d¦  «        | k    rB||d                                       ‰¦  «         |‰                              |d         ¦  «         ˆfd	„|                     d
g ¦  «        D ¦   «         }|rº|                     ¦   «         \  }	Š ||	¦  «        s|c c S |	                     d¦  «        | k    rB||	d                                       ‰¦  «         |‰                              |	d         ¦  «         |                     ˆfd„|	                     d
g ¦  «        D ¦   «         ¦  «         |°º�ŒO�ŒŒdt          t          t          f         ddfd„}
 |
|¦  «          |
|¦  «         ||dœS # t"          $ ru}t%          dddt          |¦  «        t'          j        ¦   «         dœ¦  «         t                               d|¦  «         t                               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 dictrV   r/   c                 ó¸   — t          | t          ¦  «        st                               d¦  «         dS d| vsd| vsd| vrt                               d¦  «         dS dS )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)rP   r¥  rK   Úerror)rV   s    r5   Úcheck_formatz8create_mapping_pre_post_grad_nodes.<locals>.check_format¥  sy   € Ý˜d¥DÑ)Ô)ð Ý—	’	Ølñô ð ð �uØ Ð%Ð%¨°tÐ);Ð);¸{ÐRVÐ?VÐ?VÝ—	’	Øoñô ð ð �uØ�4r4   zIProvenance tacking error: post_to_pre_grad_nodes_json value is not a listr   r+   c                 ó   •— g | ]}|‰f‘ŒS r3   r3   )r~   rø   Ú	outer_keys     €r5   rš  z6create_mapping_pre_post_grad_nodes.<locals>.<listcomp>Á  s   ø€ ÐKÐKÐK¨A˜!˜Y˜ÐKÐKÐKr4   r  c              3   ó    •K  — | ]}|‰fV — Œ	d S r}   r3   )r~   rø   Ú
parent_keys     €r5   r�   z5create_mapping_pre_post_grad_nodes.<locals>.<genexpr>É  s8   øè è € ð !ð !Ø,-˜˜J˜ð!ð !ð !ð !ð !ð !r4   ÚdNc                 ó^   — | D ]}t          | |         ¦  «        | |<   Œt          | ¦  «        } d S r}   ©r±  r¥  ©r  Úkeys     r5   Úconvert_sets_to_listszAcreate_mapping_pre_post_grad_nodes.<locals>.convert_sets_to_listsÍ  ó5   € Øð &ð &�Ý˜a œf™œ��#‘�Ý�Q‘”ˆAˆAˆAr4   rX  Ú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)rP   r¥  rK   r  rR   r‡   Údefaultdictr   rS   r   r“   rµ   r±  r½   r¶   ÚpopÚextendrX   r   Ú	tracebackÚ
format_exc)rú  rû  Úempty_returnÚpre_to_postÚpost_to_prer  Ú
node_arrayrV   rÜ   Úcurrent_noder  Úer  r  s               @@r5   r  r  ‰  s¯  øø€ ð Øð5ð 5€Lõ
 Ð1µ4Ñ8Ô8ð Ý�	Š	ÐWÑXÔXÐXØÐåÐ'­Ñ-Ô-ð ð Ðå"-Ô"9½*Ñ"EÔ"E€KÝ"-Ô"9½*Ñ"EÔ"E€KðDð	�t¥C­ Hœ~ð 	µ$ð 	ð 	ð 	ð 	ð &A×%FÒ%FÑ%HÔ%Hð 	ñ 	Ñ!ˆI�zÝ˜j­$Ñ/Ô/ð $Ý—	’	Ø_ñô ð ð $Ð#Ð#Ð#Ø"ð ñ �Ø#�| DÑ)Ô)ð (Ø'Ð'Ð'Ð'Ð'Ð'à—8’8˜JÑ'Ô'Ð+<Ò<Ð<Ø  V¤Ô-×1Ò1°)Ñ<Ô<Ð<Ø 	Ô*×.Ò.¨t°F¬|Ñ<Ô<Ð<ð LÐKÐKÐK°·²¸+ÀrÑ1JÔ1JÐKÑKÔK�Øð 	Ø/4¯yªy©{¬{Ñ,�L *Ø'˜<¨Ñ5Ô5ð ,Ø+Ð+Ð+Ð+Ð+Ð+Ø#×'Ò'¨
Ñ3Ô3Ð7HÒHÐHØ# L°Ô$8Ô9×=Ò=¸jÑIÔIÐIØ# JÔ/×3Ò3°LÀÔ4HÑIÔIÐIØ—L’Lð !ð !ð !ð !Ø1=×1AÒ1AÀ+ÈrÑ1RÔ1Rð!ñ !ô !ñ ô ð ð ð 	ùñð*	¥T­#­s¨(¤^ð 	¸ð 	ð 	ð 	ð 	ð 	Ð˜kÑ*Ô*Ð*ØÐ˜kÑ*Ô*Ð*à$Ø$ð
ð 
ð 	
øõ ð ð ð õ 	ØØ'à@Ý  ™VœVÝ(Ô3Ñ5Ô5ðð ñ	
ô 	
ð 	
õ 	�	Š	Ð4Ð6QÑRÔRÐRÝ�	Š	Ð*Ð,=Ñ>Ô>Ð>ØÐÐÐÐÐÐøøøøðøøøs4   ÂA0J Ã4J Ä
B&J Æ1CJ Ê
L ÊA*K;Ë5L Ë;L Útriton_kernel_to_post_grad_jsonc           	      ó¨  — i i dœ}t          | t          ¦  «        st                               d¦  «         |S t	          j        t          ¦  «        }	 |                      ¦   «         D ]X\  }}t          |t          ¦  «        st                               d¦  «         |c S |D ]}||          	                    |¦  «         ŒŒYdt          t          t          f         ddfd„} ||¦  «         | |dœS # t          $ rZ}t          dd	d
t          |¦  «        t          j        ¦   «         dœ¦  «         t                               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                 ó^   — | D ]}t          | |         ¦  «        | |<   Œt          | ¦  «        } d S r}   r
  r  s     r5   r  zFcreate_node_mapping_kernel_to_post_grad.<locals>.convert_sets_to_lists	  r  r4   rX  r  Ú"create_mapping_kernel_to_post_gradr  z$triton_kernel_to_post_grad_json:  %s)rP   r¥  rK   r  r‡   r  r   rµ   r±  r¶   rS   r   rX   r   r  r  )r   r  Úpost_to_cpp_coder  r  Ú	curr_noder  r  s           r5   Ú'create_node_mapping_kernel_to_post_gradr(  ê  sÐ  € ð Øð/ð /€Lõ
 Ð5µtÑ<Ô<ð Ý�	Š	ØUñ	
ô 	
ð 	
ð Ðå'2Ô'>½zÑ'JÔ'JÐð$Ø%D×%JÒ%JÑ%LÔ%Lð 	;ð 	;Ñ!ˆI�zÝ˜j­$Ñ/Ô/ð $Ý—	’	Øcñô ð ð $Ð#Ð#Ð#Ø'ð ;ð ;�	Ø  Ô+×/Ò/°	Ñ:Ô:Ð:Ð:ð;ð	¥T­#­s¨(¤^ð 	¸ð 	ð 	ð 	ð 	ð 	ÐÐ.Ñ/Ô/Ð/à<Ø-ð
ð 
ð 	
øõ ð ð ð õ 	ØØ'à@Ý  ™VœVÝ(Ô3Ñ5Ô5ðð ñ	
ô 	
ð 	
õ 	�	Š	Ø2Ð4Sñ	
ô 	
ð 	
ð ÐÐÐÐÐÐøøøøðøøøs'   ÁAC- ÂAC- Ã-
EÃ7AEÅEÅEc            	      ó¶  — 	 i } t           r}t          t          ¦  «        }i t          ¥|¥} t          j        j        rMt          j         	                    dd¦  «        5 }t          j        | |¦  «         d d d ¦  «         n# 1 swxY w Y   d| d<   | S # t          $ r?}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       @ÚversionrX  r  Údump_inductor_provenance_infor  )rá   r(  rà   rß   r   r_   r$  r$   r!  r  r«  r¬  rX   r   rS   r  r  )Únode_mappingÚnode_mapping_kernelr.  r  s       r5   r+  r+  &  sM  € ð"ð (*ˆÝð 	0Ý"IÝ>ñ#ô #ÐðÝ2ðà%ðˆLõ Œ|Ô#ð 0Ý”W—]’]ØEÀsñô ð 0àÝ”I˜l¨BÑ/Ô/Ð/ð0ð 0ð 0ñ 0ô 0ð 0ð 0ð 0ð 0ð 0ð 0øøøð 0ð 0ð 0ð 0ð #&ˆ�YÑØÐøÝð ð ð õ 	ØØ'à;Ý  ™VœVÝ(Ô3Ñ5Ô5ðð ñ	
ô 	
ð 	
ð ˆ	ˆ	ˆ	ˆ	ˆ	ˆ	øøøøðøøøsB   ‚AB ÁA=Á1B Á=BÂB ÂBÂ	B Â
CÂ4CÃCÃCc            	      óŠ  — 	 t                                di ¦  «        } t          t                               ¦   «         ¦  «        t          t
                               ¦   «         ¦  «        z  }i }|D ]ˆ}t
                               |g ¦  «        }t          ¦   «         }|D ]+}|                     |                      |g ¦  «        ¦  «         Œ,t                               |g ¦  «        |t          |¦  «        dœ||<   Œ‰|S # t          $ r?}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_nodesrX  r  Úcreate_kernel_information_jsonr  N)rß   r½   r   rã   Úkeysrà   rª  r±  rX   r   rS   r  r  )r  Úall_kernelsÚresultÚkernel_namer0  r1  Ú	post_noder  s           r5   r2  r2  L  ss  € ð%õ
 7×:Ò:¸;ÈÑKÔKˆÝ Õ!=×!BÒ!BÑ!DÔ!DÑEÔEÍ
Ý:×?Ò?ÑAÔAñI
ô I
ñ 
ˆð ˆØ&ð 	ð 	ˆKÝL×PÒPØ˜Rñô ˆOõ /9©l¬lˆNØ,ð Fð F�	Ø×%Ò% k§o¢o°iÀÑ&DÔ&DÑEÔEÐEÐEõ !=× @Ò @ÀÈbÑ QÔ QØ#2Ý"& ~Ñ"6Ô"6ð#ð #ˆF�;ÑÐð ˆøÝð 
ð 
ð 
ÝØØ'à<Ý  ™VœVÝ(Ô3Ñ5Ô5ðð ñ	
ô 	
ð 	
ð ˆ	ˆ	ˆ	ˆ	ˆ	ˆ	øøøøð
øøøs   ‚C6C9 Ã9
EÄ4D=Ä7EÄ=EÚnode_scheduler6  r‹   c           	      ó6  ‡
— t           j        j        dk    rdS 	 ddlm}m} t          dz  ag }|› dt          › �}|r§t          | t          ¦  «        sJ ‚t           
                    |g ¦  «        Š
| j        r&| j        j        }|‰
vr‰
                     |¦  «         n&‰
                     ˆ
fd„| j        D ¦   «         ¦  «         t!          |                      ¦   «         ¦  «        }n¸t          | t           ¦  «        sJ ‚t%          ¦   «         }| D ]�}|||fvry|j        �rt           
                    |g ¦  «        Š
|                     |j                             ¦   «         ¦  «         ‰
                     ˆ
fd„|j        j        D ¦   «         ¦  «         Œ‚t!          |¦  «        }t*           
                    |g ¦  «                             |¦  «         t          S # t,          $ r>}	t/          dd	d
t1          |	¦  «        t3          j        ¦   «         dœ¦  «         Y d}	~	dS 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   ó8   •K  — | ]}|j         ‰v¯|j         V — Œd S r}   ©r+   ©r~   r²   Úcurr_node_infos     €r5   r�   z:set_kernel_post_grad_provenance_tracing.<locals>.<genexpr>›  s>   øè è € ð &ð &àØ”{¨.Ð8Ð8ð ”Kà8Ð8Ð8Ð8ð&ð &r4   c              3   ó8   •K  — | ]}|j         ‰v¯|j         V — Œd S r}   r>  r?  s     €r5   r�   z:set_kernel_post_grad_provenance_tracing.<locals>.<genexpr>®  sC   øè è € ð .ð .ð !'Ø%œ{°.Ð@Ð@ð #œKð  AÐ@Ð@Ð@ð	.ð .r4   rX  r  Ú'set_kernel_post_grad_provenance_tracingr  )r   r_   Úprovenance_tracking_levelÚcodegen.simd_kernel_featuresr:  r;  rä   rP   r   rà   Ú
setdefaultÚorigin_noder+   r”   r  r®   r±  Úget_stack_tracesr   rV   rª  rã   rX   r   rS   r  r  )r8  r6  r‹   r:  r;  r/  Úorigin_node_nameÚstack_traces_setrT   r  r@  s             @r5   rB  rB  v  s   ø€ õ „|Ô-°Ò2Ð2Øˆtð?ØSÐSÐSÐSÐSÐSÐSÐSõ 	1°AÑ5Ð0Ø"$ˆØ$ÐQÐQÕ'OÐQÐQˆØð &	2Ý˜m­\Ñ:Ô:Ð:Ð:Ð:ÝK×VÒVØ˜Rñô ˆNð Ô(ð 	Ø#0Ô#<Ô#AÐ Ø#¨>Ð9Ð9Ø"×)Ò)Ð*:Ñ;Ô;Ð;øà×%Ò%ð &ð &ð &ð &à"/Ô"7ð&ñ &ô &ñ ô ð õ
   × >Ò >Ñ @Ô @ÑAÔAˆLˆLå˜m­TÑ2Ô2Ð2Ð2Ð2Ý0:±´ÐØ&ð ð �Ø Ð2BÐ CÐCÐCØ”zÐ-åJ×UÒUØ +¨Rñô ð 'ð )×/Ò/°´
×0KÒ0KÑ0MÔ0MÑNÔNÐNØ&×-Ò-ð .ð .ð .ð .ð +0¬*Ô*<ð.ñ .ô .ñ ô ð øõ  Ð 0Ñ1Ô1ˆLÝ$×/Ò/°¸RÑ@Ô@×GÒGÈÑUÔUÐUÝ7Ð7øÝð ð ð õ 	ØØ'àEÝ  ™VœVÝ(Ô3Ñ5Ô5ðð ñ	
ô 	
ð 	
ð ˆtˆtˆtˆtˆtøøøøðøøøs   šF5G Ç
HÇ3HÈHri   rz   c                  óà  ‡	‡
‡— t           j                             t          j        ¦   «         d¦  «        }t           j                             |¦  «        st          j        |¦  «         dt          dt          t          z  t          z  dz  fd„Šdt          dt          dt          fˆfd„Š	dt          dt          fˆ	ˆ
fd	„Š
t          ‰
| |f¦  «        \  }}d
}|› d|› dt          t          ¦  «        › d�}t!          |d¦  «        5 }t#          j        ||f|¦  «         ddd¦  «         n# 1 swxY w Y   t&                               t*          j        ¦  «        rd|› d|›d�}t/          |¦  «         dS dS )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_argsÚvaluer/   Nc                 ó$  — | €d S t          | t          ¦  «        r| S t          | t          t          f¦  «        r| S t	          | dd ¦  «        du rt          | ¦  «        S 	 t          | ¦  «        S # t
          t          f$ r t          | ¦  «        cY S w xY w)NÚ
is_integerF)rP   r“   rR   r´  rH  Ú	TypeErrorÚ
ValueError)rL  s    r5   Úpython_valuez4save_args_for_compile_fx_inner.<locals>.python_valueÑ  s¤   € Øˆ=Ø�4Ý�e�TÑ"Ô"ð 	ØˆLÝ�e�c¥5˜\Ñ*Ô*ð 	ØˆLå�5˜,¨Ñ-Ô-°Ð6Ð6Ý˜‘<”<Ðð	 Ý�u‘:”:ÐøÝ�:Ð&ð 	 ð 	 ð 	 Ý˜‘<”<ÐÐÐð	 øøøs   ÁA, Á, BÂBr   rö  c                 ó  •— | j         }|j        }i }|�J|j        j        D ]=}|j                             |¦  «        }|� ‰|¦  «        }|�||t          |¦  «        <   Œ>t          ||j         ‰|j        ¦  «        |¦  «        S r}   )	rV   Ú	shape_envr÷  Úfree_symbolsÚbacked_var_to_valr½   rS   rõ  rø  )	r   rö  rV   rS  rù  Úsymbolrø  Úpython_hintrQ  s	           €r5   Úhandle_sym_exprz7save_args_for_compile_fx_inner.<locals>.handle_sym_exprà  s    ø€ ØŒvˆØ”Nˆ	Ø68ˆØÐ Øœ)Ô0ð @ð @�Ø Ô2×6Ò6°vÑ>Ô>�ØÐ#Ø". ,¨tÑ"4Ô"4�KØ"Ð.Ø4?˜¥S¨¡[¤[Ñ1øÝ$ØØŒIØˆL˜œÑ#Ô#Øñ	
ô 
ð 	
r4   c                 ó(  •— t          | t          ¦  «        r?t          j        | ¦  «        }|j        j        D ]}t          ‰|j        ¦  «        |_        Œ|S t          | t          j	        ¦  «        r0t          t          ‰t          | ¦  «        ¦  «        | j        ¦  «        S t          | t          j        ¦  «        r ‰| d¦  «        S t          | t          j        ¦  «        r ‰| d¦  «        S t          | t          j        ¦  «        r ‰| d¦  «        S | S )a  
        Pickle FakeTensor/SymInt will result in errors like:
        AttributeError: Can't pickle local object 'WeakValueDictionary.__init__.<locals>.remove'

        Convert tensors and symbolic values to metadata. This may also make
        pickle faster.
        rR   r´  r“   )rP   r   ré   Údeepcopyr]   rC   r   rN   r‰   r²  rñ  r   rx   ÚSymIntÚSymFloatÚSymBool)r   rc   rV   rX  Úhandle_tensors      €€r5   r^  z5save_args_for_compile_fx_inner.<locals>.handle_tensorò  s  ø€ õ �a�Ñ%Ô%ð 	Ý”˜qÑ!Ô!ˆBØœœð ?ð ?�Ý$ ]°D´IÑ>Ô>�”	�	ØˆIÝ�a�œÑ&Ô&ð 	Ý'Ý˜Õ(@ÀÑ(CÔ(CÑDÔDÀaÄhñô ð õ ˜�5œ<Ñ(Ô(ð 	Ø"�? 1 eÑ,Ô,Ð,Ý˜�5œ>Ñ*Ô*ð 	Ø"�? 1 gÑ.Ô.Ð.Ý˜�5œ=Ñ)Ô)ð 	Ø"�? 1 fÑ-Ô-Ð-àˆHr4   Úcompile_fx_innerú/r@   z.pklÚwbz3
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   rR   r´  r“   rS   rõ  r   ÚnextÚsave_args_cntr  Úpickler¬  rK   r·  rÊ   rÖ   r\   )ri   rz   ÚfolderÚargs_to_saveÚkwargs_to_saveÚfn_namer;   r  ÚmessagerX  r^  rQ  s            @@@r5   Úsave_args_for_compile_fx_innerrm  Æ  sü  øøø€ õ ŒW�\Š\�(Ô-Ñ/Ô/Ð1FÑGÔG€FÝŒ7�>Š>˜&Ñ!Ô!ð Ý
Œ�ÑÔÐð �Cð  ¥C­%¡Kµ$Ñ$6¸Ñ$=ð  ð  ð  ð  ð
�3ð 
­ð 
Õ0Eð 
ð 
ð 
ð 
ð 
ð 
ð$�ð ¥ð ð ð ð ð ð ð õ4 $,¨M¸DÀ&¸>Ñ#JÔ#JÑ €L�.à €GØÐ:Ð:�wÐ:Ð:¥¥mÑ!4Ô!4Ð:Ð:Ð:€DÝ	ˆd�DÑ	Ô	ð 7˜QÝŒ�\ >Ð2°AÑ6Ô6Ð6ð7ð 7ð 7ñ 7ô 7ð 7ð 7ð 7ð 7ð 7ð 7øøøð 7ð 7ð 7ð 7õ ×Ò�œÑ&Ô&ð ðØ37ðð ð
 %)ðð ð ˆõ 	ˆg‰Œˆˆˆðð s   ÄD%Ä%D)Ä,D)r;   c                 óL  ‡‡‡	‡
‡‡— ddl mŠ ddlm} ddlmŠm} t          | d¦  «        5 }t          j	        |¦  «        \  }}d d d ¦  «         n# 1 swxY w Y    |¦   «         Ši Šdt          dt          fˆˆˆˆfd„Š
dt          dt          fˆ	ˆ
fd	„Š	t          j                             d
‰¬¦  «        }|5  t          j        dd¦  «        5  t#          ‰	||f¦  «        \  }} ||i |¤Žcd d d ¦  «         cd d d ¦  «         S # 1 swxY w Y   d d d ¦  «         d S # 1 swxY w Y   d S )Nr   )ÚConstantSource)r_  )Ú
DimDynamicÚShapeEnvÚrbr   r/   c                 ó@  •— | j         }t          |t          ¦  «        r,dd l}dd lmc mc m} |                     ||j	        ¬¦  «        }i }|j
        D ]²}t          |¦  «        }|‰vr’| j                             |¦  «        }|€L| j        �||k    r| j        }n7‰
                      ‰|¦  «        ¦  «        j        j         ‰|<   ‰|         ||<   Œ}‰
                     | ‰|¦  «        ‰	j        d¬¦  «        ‰|<   ‰|         ||<   Œ³|                     |¦  «        }| j        dk    r‰
                     || j        ¬¦  «        S | j        dk    r‰
                     || j        ¬¦  «        S | j        dk    r‰
                     |¦  «        S t/          d	| j        › �¦  «        ‚)
Nr   )ÚlocalsT)Údynamic_dimÚdo_not_specialize_zero_onerR   )rø  r´  r“   z%Unexpected symbolic expression type: )r÷  rP   rS   ÚsympyÚtorch.utils._sympy.functionsr   Ú_sympyÚ	functionsÚsympifyÚ__dict__rT  rù  r½   rø  Úcreate_unbacked_symintrV   Úcreate_symbolÚDYNAMICÚxreplacerö  Úcreate_symintnodeÚcreate_symfloatnodeÚcreate_symboolnodeÚAssertionError)r   r÷  rw  Úsympy_functionsÚreplacementsrV  Úsymbol_namerø  ro  rp  rS  Úsymbol_caches           €€€€r5   Úrestore_sym_exprz<load_args_and_run_compile_fx_inner.<locals>.restore_sym_expr.  sí  ø€ ØŒvˆÝ�d�CÑ Ô ð 	HØˆLˆLˆLàBÐBÐBÐBÐBÐBÐBÐBÐBÐBÐBÐBà—=’= ¨oÔ.F�=ÑGÔGˆDØˆØÔ'ð 	=ð 	=ˆFÝ˜f™+œ+ˆKØ ,Ð.Ð.Ø”~×)Ò)¨+Ñ6Ô6�Ø�<Ø”vÐ)¨d°fªn¨nØ œv˜˜à4=×4TÒ4TØ*˜N¨;Ñ7Ô7ñ5ô 5äœtð % [Ñ1ð 0<¸KÔ/H˜ VÑ,Ø Ø,5×,CÒ,CØØ"�N ;Ñ/Ô/Ø *Ô 2Ø/3ð	 -Dñ -ô -�˜[Ñ)ð $0°Ô#<ˆL˜Ñ Ð Ø�}Š}˜\Ñ*Ô*ˆØŒ8�uÒÐØ×.Ò.¨t¸!¼&Ð.ÑAÔAÐAØŒX˜Ò Ð Ø×0Ò0°¸A¼FÐ0ÑCÔCÐCØŒX˜ÒÐØ×/Ò/°Ñ5Ô5Ð5å Ð!SÈÌÐ!SÐ!SÑTÔTÐTr4   c                 ó’  •— t          | t          ¦  «        r+| j        j        D ]}t	          ‰|j        ¦  «        |_        Œ| S t          | t          ¦  «        rPt	          ‰| j        ¦  «        }t          j	        j
                             |j        |j        |j        | j        ¦  «        S t          | t           ¦  «        r ‰| ¦  «        S | S r}   )rP   r   r]   rC   r   rN   rñ  rò  r‰   Ú_dynamoÚtestingÚrand_stridedrÛ  r‰  r[   rx   rõ  )r   rV   rò  r^  r‰  s      €€r5   r^  z9load_args_and_run_compile_fx_inner.<locals>.handle_tensorU  sÆ   ø€ Ý�a�Ñ%Ô%ð 	Øœœð ?ð ?�Ý$ ]°D´IÑ>Ô>�”	�	ØˆHÝ˜Õ/Ñ0Ô0ð 	Ý& }°aÔ6GÑHÔHˆOÝ”=Ô(×5Ò5ØÔ%ØÔ&ØÔ%Ø”ñ	ô ð õ ˜Õ0Ñ1Ô1ð 	Ø#Ð# AÑ&Ô&Ð&àˆHr4   T)Úallow_non_fake_inputsrS  Ú	save_argsF)Útorch._dynamo.sourcero  Útorch._inductor.compile_fxr_  Ú%torch.fx.experimental.symbolic_shapesrp  rq  r  rg  Úloadrõ  r   r‰   r^  ÚFakeTensorModer   r   r   )r;   r_  rq  r  ri   rz   Ú	fake_modero  rp  r^  r‰  rS  rˆ  s          @@@@@@r5   Ú"load_args_and_run_compile_fx_innerr–  #  sŠ  øøøøøø€ Ø3Ð3Ð3Ð3Ð3Ð3Ø;Ð;Ð;Ð;Ð;Ð;ØJÐJÐJÐJÐJÐJÐJÐJå	ˆd�DÑ	Ô	ð &˜QÝ”{ 1‘~”~‰ˆˆfð&ð &ð &ñ &ô &ð &ð &ð &ð &ð &ð &øøøð &ð &ð &ð &ð �‘
”
€IØ#%€Lð%UÕ1ð %Uµcð %Uð %Uð %Uð %Uð %Uð %Uð %Uð %Uð %UðN�ð ¥ð ð ð ð ð ð ð õ$ Ô!×0Ò0Ø"¨ið 1ñ ô €Ið 
ð 1ð 1•F”L ¨eÑ4Ô4ð 1ð 1Ý °°f¨~Ñ>Ô>‰ˆˆfØÐ Ð0¨Ð0Ð0ð1ð 1ð 1ð 1ñ 1ô 1ð 1ð 1ð 1ð 1ð 1ñ 1ô 1ð 1ð 1ð 1ð 1ð 1ð 1øøøð 1ð 1ð 1ð 1ð 1ð 1ð 1ñ 1ô 1ð 1ð 1ð 1ð 1ð 1ð 1ð 1øøøð 1ð 1ð 1ð 1ð 1ð 1sG   «AÁAÁAÂ5DÃDÃ(DÄD	ÄDÄD	Ä	DÄDÄ D)Úpackage_pathÚfunc.Úexported_programÚinductor_configsr—  c                ó–  — ddl m} ddlm} ddlm} ddlm} |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                             ||d¬¦  «        } | | 
                    d¬¦  «        |||dd¬¦  «          | |	|
||||¬¦  «        S # |$ r0} ||dd|¬¦  «         t*                               d¦  «         |‚d }~wt.          $ r,}|r#d}|j        j        dk    rd} ||d	||¬¦  «         |‚d }~ww xY w)Nr   )ÚAccuracyError)Údump_to_minifyr   )Ú_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ÚmodulerP   r‰   r   r   Úexample_inputsÚrepro_levelré   rZ  rQ   ÚexportrK   rL   rX   )r˜  r™  rš  r—  rœ  r�  r   rž  Úuse_minifierrc   ri   rz   Úgm_copyÚexample_inputs_copyÚconfig_copyÚflat_example_inputsÚtuple_inputsÚflattened_epr  rª  s                       r5   Úaot_inductor_minifier_wrapperr»  o  s¯  € ð 8Ð7Ð7Ð7Ð7Ð7Ø7Ð7Ð7Ð7Ð7Ð7Ø&Ð&Ð&Ð&Ð&Ð&Ø?Ð?Ð?Ð?Ð?Ð?àÔ&Ô9€Là	×	 Ò	 ¨eÐ	 Ñ	4Ô	4€BÝ�b�%œ(Ô.Ñ/Ô/Ð/Ð/Ð/à#Ô2�L€Dˆ&ð>Øð 	˜FÔ/Ô;¸qÒ@Ð@àˆNØ ØØ(ðñ ô ð ð
 ð 	˜FÔ/Ô;¸qÒ@Ð@õ ”m BÑ'Ô'ˆGÝ"&¤-Ð0@Ô0OÑ"PÔ"PÐÝœ-Ð(8Ñ9Ô9ˆKØ/CÐ/CØØ# AÔ&Ø# AÔ&Ø#ð	0ñ 0ô 0Ñ,Ð õ !Ð!4Ñ5Ô5ˆLÝ œ<×.Ò.¨w¸ÈUÐ.ÑSÔSˆLØˆDØ×#Ò#°Ð#Ñ7Ô7ØØ!,Ø)Ø!Ø)ðñ ô ð ð ˆtØØØØ-Ø%Ø%ð
ñ 
ô 
ð 	
øð ð ð ð ØˆØØ#ØØ$ð		
ñ 	
ô 	
ð 	
õ 	�ŠÐ%Ñ&Ô&Ð&ØˆøøøøÝð ð ð Øð 	ØˆGàÔ"Ô.°!Ò3Ð3Ø�àˆNØ ØØØ(ð	ñ ô ð ð ˆøøøøðøøøs%   Á'C7E ÅGÅ$+FÆGÆ'GÇG)FNrk   rK  )F)‡r‡   rÎ   ré   ÚdataclassesÚ	functoolsrm  rN  r«  rÊ   r:   Úos.pathrg  r=  r1   rb  r  Úcollections.abcr   r   r   Útypingr   r   Úunittest.mockr   r‰   Úfunctorch.compiler	   r
   r   r   Útorch._dynamo.repro.after_aotr   Útorch._dynamo.utilsr   Útorch._functorchr   r>   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   Ú	schedulerr   r    r!   r"   r#   Úvirtualizedr$   rË   rm   rK   r%   r±  r¥  rS   Úobjectró  r&   r“   r'   rR   r¶  r¼  r³  rˆ   r*   rx  rJ   Úcacher6   rB   rd   rŠ   rM   r­   rº   r¾   rQ  rÞ   rß   rà   rá   râ   rã   rä   ræ   rð   rò   rI  rº  r½  rÊ  rÐ  rQ   r´  rç  rí  rï  Ú	dataclassrñ  rõ  rO  rf  r  r(  r+  r2  rB  rm  r–  r³  ÚExportedProgramr»  r3   r4   r5   ú<module>rÕ     sR
  ðØ Ð Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø Ð Ð Ð Ø Ð Ð Ð Ø 	€	€	€	Ø Ð Ð Ð Ø €€€Ø €€€Ø 	€	€	€	Ø €€€Ø €€€Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø Ð Ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à €€€Ø VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VÐ VØ Ð Ð Ð Ð Ð Ø :Ð :Ð :Ð :Ð :Ð :Ø -Ð -Ð -Ð -Ð -Ð -Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø !Ð !Ð !Ð !Ð !Ð !Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø -Ð -Ð -Ð -Ð -Ð -Ø OÐ OÐ OÐ OÐ OÐ OÐ OÐ OØ 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø  Ð  Ð  Ð  Ð  Ð  Ø /Ð /Ð /Ð /Ð /Ð /Ø (Ð (Ð (Ð (Ð (Ð (à Ð Ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð Ð Ð Ð Ð Ð ð €gÔ˜Ñ!Ô!€ð 9=Ð �t˜D  f Ô-Ô.°Ñ5Ð <Ð <Ñ <Ø$Ð ˜Ð $Ð $Ñ $Ø26Ð �4˜˜S 4™Z˜Ô(¨4Ñ/Ð 6Ð 6Ñ 6à%Ð% h°Ñ@Ô@Ð Ø&Ð& xÐ1AÑBÔBÐ Ø˜”IÐ Ø
 ˆ+Ô
  ¨V°ZÐ,@Ñ
AÔ
A€ØTÐTÐTÐ Ø#˜ U¨E NÑ3Ô3Ð ð „ð+�ð +ð +ð +ñ „ð+ð7 C¨$¡Jð 7°3ð 7ð 7ð 7ð 7ð Øð7ð 7ØÐ!Ô"ð7àð7ð �‰:ð7ð 
ð	7ð 7ð 7ð 7ðt` $Ð'8Ô"9ð `¸b¼hð `ð `ð `ð `ðL #'Øð	!ð !Ø˜tÑ#ð!à  S œ>ð!ð ˜4‘Zð!ð ð	!ð
 
ð!ð !ð !ð !ðH!Ø  S œ>ð!à	ˆ#ˆwˆ,Ôð!ð !ð !ð !ð$IØŒÔðIàðIð 
ðIð Ið Ið Ið" Ôð%˜H TœNð %ð %ð %ñ Ôð%ðV EGÐ   $ s¨D°°d¸3´i°Ô,@Ð'@Ô"AÐ FÐ FÑ FØGIÐ .°°S¸$¸s¼)°^Ô0DÐ IÐ IÑ IØ!%Ð �C˜$‘JÐ %Ð %Ñ %Ø68Ð # T¨#¨s¨(¤^Ð 8Ð 8Ñ 8Ø57Ð ˜d 3¨¨S¬	 >Ô2Ð 7Ð 7Ñ 7Ø01Ð (¨#Ð 1Ð 1Ñ 1ð1ð 1ð 1ð 1ð
 Ôð/
 (¨4¤.ð /
ð /
ð /
ñ Ôð/
ðd]ð ]ð ]ð ]ð ]ñ ]ô ]ð ]ð@kð kð kð kð kñ kô kð kð\!Ð.ð !°4ð !ð !ð !ð !ð"Ð/ð "°Dð "ð "ð "ð "ð
¨¨S°4©ZÔ(8ð 
¸Tð 
ð 
ð 
ð 
ð"	, 8Ð,=Ô#>ð 	,À4ð 	,ð 	,ð 	,ð 	,ð=S¨x¸¸cÀ5¸jÔ8IÔ/Jð =SÈtð =Sð =Sð =Sð =Sð@Bð Bð Bð Bð" Ôð!¨h°t¬nð !ð !ð !ñ Ôð!ð Ôðð ð ð ð ñ ô ñ Ôðð
 Ôð0ð 0ð 0ð 0ð 0ñ 0ô 0ñ Ôð0ð  �	”Ñ!Ô!€ð^Ø˜T‘zð^à!% c¨3 h¤ð^ð 
ˆ#ˆt�C˜˜cœ�NÔ#Ð
#Ô$ð^ð ^ð ^ð ^ðB9Ø%)¨#¨s¨(¤^ð9à	ˆ#ˆt�C˜�HŒ~Ð
Ôð9ð 9ð 9ð 9ðx# t¨C°¨H¤~ð #ð #ð #ð #ðL'¨¨S°$°s¸DÀ¼I°~Ô2FÐ-FÔ(Gð 'ð 'ð 'ð 'ðZ ðMð MØÐ-Ô.°Ñ=ðMàðMð ðMð 	ˆ4�Zð	Mð Mð Mð Mð`Z¨#ð Z¸ð ZÀð Zð Zð Zð ZðzI1¨Sð I1°Sð I1ð I1ð I1ð I1ðb %)ðQð Qð QØ
�3˜�8Ô
ðQà”lÔ2ðQð ˜3 ˜8”nð	Qð
 ˜T‘/ðQð 	ðQð Qð Qð Qð Qð Qr4   