Ë
    g^(h�  ã                   óð  — 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 d dlmZmZmZ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)m*Z* d dl+m,Z, d dl-m.Z. d dl/m0Z0 d dl1m2Z2 ddl3m4Z4m5Z5 ddl6m7Z7m8Z8m9Z9m:Z:m;Z; ddl<m=Z=  ej|                  e?«      Z@ e%e?d«      ZA e%e?d«      ZBeCe   ZD e jŠ                  dddg«      ZFg d¢ZG ej�                  d«      deIfd„«       ZJ	 	 dDdeCe7   deIdeeK   ddfd„ZLd eCe7   dejš                  fd!„ZN	 	 dEdeeD   d"eOeKeKf   d#eeK   d$ePddf
d%„ZQd"eOeKeKf   deOeKeFf   fd&„ZRd'ej>                  jN                  d eDddfd(„ZSej¨                  ded   fd)„«       ZUi ZVeOeKef   eWd*<   dZXeeP   eWd+<    G d,„ d-«      ZY G d.„ d/«      ZZdeDddfd0„Z[deDddfd1„Z\ejº                   G d2„ d3«      «       Z^ ej¾                  «       Z`d4ePd5eOeKef   d6eOeKef   deOeKeOeKef   f   fd7„Zad8ed9eddfd:„Zbd;eKdefd<„Zcdd=œd>ed?eKf   d@ejÈ                  jÊ                  dAeOeKef   dBee.   deKf
dC„Zfy)Fé    N)ÚIterator)ÚAnyÚCallableÚIOÚOptionalÚUnion)Úpatch)Ú
draw_graphÚget_aot_graph_nameÚget_graph_being_compiled)Úfx)Úsave_graph_repro)Úget_debug_dir)ÚgetArtifactLogger)ÚGraphModule)Ú_extract_tensor_metadataÚTensorMetadata)Úlegalize_graph)ÚFileLike)Ú
OrderedSet)Útree_mapé   )ÚconfigÚir)ÚBaseSchedulerNodeÚFusedSchedulerNodeÚNopKernelSchedulerNodeÚ
OutputNodeÚSchedulerNode)ÚVÚir_pre_fusionÚir_post_fusionÚBufMetaÚnameÚn_origin)Údotz-Gnslimit=2z-Gnslimit1=2z-Gmaxiter=5000Úreturnc                  ó†   — 	 t        j                  ddgt         j                  ¬«       y# t         j                  $ r Y yw xY w)NÚwhichr&   )ÚstderrTF)Ú
subprocessÚcheck_outputÚPIPEÚSubprocessError© ó    úS/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/_inductor/debug.pyÚhas_dotr2   6   s;   € ðÜ×Ñ ¨%Ð 0¼¿¹ÕIØøÜ×%Ñ%ò Ùðús   ‚'* ªA ¿A Ú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}n|d   }d}t        |t        j                  «      r|j                  j                  }t        ||ddddd«      }||j                  d<   Œ­ |rt!        |«       t#        i |«      }t%        |«       |j&                  j)                  «        t+        ||dt,        j.                  j0                  ¬«       y)z$
    Draw a graph in fname.svg.
    z*draw_buffers() requires `graphviz` packageNÚfusion_metar   Útensor_metaF)Ú
clear_metaÚdot_graph_shape)r2   ÚlogÚwarningr   Úcreate_fx_from_snodesr3   ÚmetaÚgroupÚ
isinstanceÚtupleÚintr   ÚComputedBufferÚdataÚdtyper   Úprintr   r   ÚgraphÚlintr
   r   Útracer:   )	r3   r4   r5   rG   Únoder?   rE   ÚmetadataÚgms	            r1   Údraw_buffersrM   ?   s"  € ô Œ9Ü�‰Ð@ÔAØà€}Ü(Ó*ˆä! %Ó(€Eà—‘ò ,ˆØ §	¡	Ñ)ØØ—	‘	˜-Ñ(×.Ñ.ˆÜ�eœUÔ#Ü˜% ™(¤CÔ(Ø˜q™˜‘à˜a™�ð ˆÜ�dœB×-Ñ-Ô.Ø—I‘I—O‘OˆEä! %¨°°d¸DÀ$ÈÓMˆØ#+ˆ�	‰	�-Ò ð!,ñ$ ÜˆeŒä	�R˜Ó	€BÜ�2ÔØ‡H�H‡M�M„OÜØ
ˆE˜e´V·\±\×5QÑ5Qör0   Ú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.        t0        t        f   dt2        fˆfd„Š ‰|	«      r|j5                  |«       |	j7                  «       }||_         |||	|
«      |j:                  d<   |||<   |	j=                  «       D ]  }|||j7                  «       <   Œ |��Œž|}�Œ¢ | D ]¿  }	|	j7                  «       }|	j>                  j@                  }||   }g }|D ]{  }|j8                  |v r||j8                     }nD|jC                  |«      5  |jE                  |j8                  «      }|||j8                  <   ddd«       |k(  rŒk|j5                  |«       Œ} tG        |«      |_$        ŒÁ |jK                  tM        |«      dk(  r|d   «       |S tG        |«      «       |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   r/   )rR   s    r1   Úfunc1z;create_fx_from_snodes.<locals>.get_fake_func.<locals>.func1s   s   € Ør0   )r   rB   Ú__name__)r$   rU   s     r1   Úget_fake_funcz,create_fx_from_snodes.<locals>.get_fake_funcr   s#   € ð	œð 	¤ó 	ð ˆŒØˆr0   Ú
FusionMeta)r?   ÚsnodeÚtypeNÚexternÚtemplateÚnopÚcomputeÚfusedzUnknown node typeÚoriginal_atenz: Ú
get_deviceÚdevicer/   ©rR   ÚkwargsrY   c                 ó    •— t        | t        «      rt        ˆfd„| j                  D «       «      S t        d„ | j	                  «       D «       «      S )Nc              3   ó.   •K  — | ]  } ‰|«      –— Œ y ­w©Nr/   )Ú.0ÚxÚ	in_outputs     €r1   ú	<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rg   )Úusersr@   rJ   r   )rh   ÚbufÚusers      r1   rk   z;create_fx_from_snodes.<locals>.in_output.<locals>.<genexpr>£   s<   è ø€ ò àØŸI™Iòð ô ˜4Ÿ9™9¤j×1ðØ1ñùs   ‚57)r@   r   ÚanyrN   Úget_outputs)rY   rj   s    €r1   rj   z(create_fx_from_snodes.<locals>.in_output    sF   ø€ Ü˜%Ô!3Ô4ÜÓ>°·±Ô>Ó>Ð>Üñ à ×,Ñ,Ó.ôó ð r0   r7   r   r   )'Ústrr   rB   ÚcollectionsÚ
namedtupleÚtorchr   ÚGraphÚ	is_externÚis_templater@   r   r   r?   r   ÚRuntimeErrorÚ	_inductorÚutilsÚget_fused_kernel_nameÚ	get_nodesÚhasattrra   Úcall_functionr   r   ÚboolÚappendÚget_namer$   r>   rq   Úread_writesÚreadsÚinserting_beforeÚplaceholderrA   rR   ÚoutputÚlen)rN   rW   rX   Úbuf_to_fx_nodeÚnode_to_fx_noderG   Ú
first_nodeÚoutputsr?   rY   Ú	node_typeÚ
fused_nameÚ	func_nameÚ	node_funcrd   Úfx_noder$   rn   ÚdepsÚnew_argsÚdepÚdep_noderj   s                         @r1   r=   r=   m   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ˆð	œUÔ#4Ô6HÐ#HÑIð 	Ìdõ 	ñ �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   É&+K9Ë9LÚ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_namerJ   Úoriginsr$   )
r3   r–   r—   r˜   rJ   Úbuf_nameÚchildren_nodesÚir_nodeÚoriginÚ	node_names
             r1   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ñ	ñ#r0   c                 óø   — i }| j                  «       D ]-  \  }}||vrt        |g«      ||<   Œ||   j                  |«       Œ/ i }| j                  «       D ]"  \  }}t        ||   «      }t	        ||«      ||<   Œ$ |S rg   )Úitemsr   Úaddrˆ   r#   )r–   Úbuf_name_to_n_noder    rœ   Únode_name_to_buf_metaÚn_nodes         r1   Ú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ð !Ð r0   rL   c                 óà   — i }t        ||«       |€yt        |«      }| j                  j                  D ]9  }|j                  |v sŒ|j                  |j                  «      |j                  d<   Œ; y)rP   NÚbuf_meta)rš   r§   rG   r3   r$   Úgetr>   )rL   rN   r–   r¥   rJ   s        r1   Úannotate_orig_fx_with_snodesr«     sm   € ð -/ÐÜ(¨Ð1FÔGØÐ$ØÜ5Ð6KÓLÐØ—‘—‘ò IˆØ�9‰9Ð-Ò-Ø$9×$=Ñ$=¸d¿i¹iÓ$HˆD�I‰I�jÒ!ñIr0   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_autogradrV   Ú
contextlibÚ	ExitStackÚcloseÚenter_contextr	   ÚpathÚjoinr   ÚmakedirsÚFileHandlerr   ÚsetLevelÚDEBUGÚsetFormatterÚ	FormatterÚ
addHandlerÚremoveHandler)Úcompile_debugru   r;   Ústackr¿   Úfhs         r1   Ú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Ú_pre_grad_graph_idc                   ó~  — e Zd ZU  ej                  «       Zi Zeee	e   f   e
d<   ededee   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e      dee   dee   ddfd„Zdd„Zdedee d      fd„Z!y)ÚDebugContextÚ._inductor_triton_kernel_to_post_grad_node_infoÚfolder_namer'   c                 ó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   rI   Ú	debug_dirr   rÐ   Ú_counterr´   r¿   rÀ   ÚexistsrÁ   )rÒ   rÕ   ÚnÚdirnames       r1   Úcreate_debug_dirzDebugContext.create_debug_dirJ  s{   € ä—L‘L×*Ñ*Ò=¬m«oˆ	Ü×&Ñ&ò 	ˆAÜ—g‘g—l‘lØØØ�-˜q  Ð$óˆGô
 —7‘7—>‘> 'Õ*Ü—‘˜GÔ$Ø’ð	ð r0   Nc                 óR   — d | _         d | _        t        j                  «       | _        y rg   )Ú_profÚ_pathr»   r¼   Ú_stack)Úselfs    r1   Ú__init__zDebugContext.__init__X  s    € ØˆŒ
ØˆŒ
Ü ×*Ñ*Ó,ˆ�r0   Ú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×   ÚshutilÚrmtreeÚcopytreeÚOSErrorr;   r<   )rß   rá   rã   s      r1   Úcopyz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_moderR   rd   c                 óŽ   — | j                   sJ ‚t        t        j                  j	                  | j                   |«      |g|¢­i |¤ŽS rg   ©rÝ   Úopenr´   r¿   rÀ   )rß   rë   rì   rR   rd   s        r1   ÚfopenzDebugContext.fopenm  s:   € ð �zŠzÐˆzÜ”B—G‘G—L‘L §¡¨XÓ6¸
ÐTÀTÒTÈVÑTÐTr0   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rg   rî   )rß   rë   rì   rR   rd   Úfs         r1   Úfopen_contextzDebugContext.fopen_contextw  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 rg   )rÝ   r´   r¿   rÀ   )rß   rô   s     r1   rë   zDebugContext.filenameƒ  s'   € Ø�zŠzÐˆzÜ�w‰w�|‰|˜DŸJ™J¨Ó/Ð/r0   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   rI   Ú
upload_tarÚtarfilerÝ   r´   r¿   rÀ   Úbasenamerï   r£   )rß   rù   Útar_fileÚtars       r1   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 rg   )rÃ   )rþ   r;   s    €r1   Úreset_log_levelz/DebugContext.__enter__.<locals>.reset_log_level™  s   ø€ Ø—‘˜UÕ#r0   z	debug.logzinfo.log)r   Údebugr·   r¸   rþ   rÃ   rÄ   r   rÞ   Úcallbackr¾   r    Úset_debug_handlerrI   ÚenabledrÚ   r   rÝ   Ú	debug_logÚ_setup_log_captureÚinfo_logÚINFO)rß   Ú
prev_levelr   r;   s      @r1   Ú	__enter__zDebugContext.__enter__“  sæ   ø€ Ü�<Š<Ü×#Ñ# OÓ4ˆCØŸ™ˆJØ�L‰LœŸ™Ô'ð$¤sð $¨tõ $ð �K‰K× Ñ  °*Ô=à�‰×!Ñ!¤!×"5Ñ"5°dÓ";Ô<ä�|‰|×#Ò#Øà×*Ñ*Ô+=Ó+?Ó@ˆŒ
ä�<‰<×!Ò!Ø×#Ñ# K´·±Ô?Ü�<‰<× Ò Ø×#Ñ# J´·±Õ=ð !r0   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         r1   r  zDebugContext._setup_log_captureª  s¨   € ô
 ×ÑÐ 1Ó2ˆØ�[‰[×&Ñ& t§z¡z°(Ó';Ó<ˆÜ×"Ñ" 2Ó&ˆØ
�‰�EÔØ
�‰Ü×ÑÐSÓTô	
ð 	�‰�rÔØ�‰”S˜Ÿ™ EÓ*Ô+Ø�‰×Ñ˜S×.Ñ.°Õ3r0   Ú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       r1   Ú__exit__zDebugContext.__exit__º  sa   € ð �:Š:Ø�J‰J×ÑÔ Ø×#Ñ#Ô%à�:Š:Ø�O‰OÔÜ�K‰KÐ,Ô.FÓ.HÈ$Ï*É*ÔUØ�‰×ÑÕr0   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      r1   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_inforR   rd   r'   c                   ó   — y rg   r/   rc   s     r1   Úignoredz)DebugContext.__getattr__.<locals>.ignoredÝ  s   € Ør0   )	r   rI   r  ÚgetattrÚDebugFormatterÚ	Exceptionr;   r<   r   )rß   r$   r&  s      r1   Ú__getattr__zDebugContext.__getattr__Ô  sy   € Ü�<‰<×Ò¤G¬F¯L©L¸$Ô$?ðÜœ~¨dÓ3°TÓ:Ð:ðœsð ¬cð °dó ð ˆNøô ò Ü—‘Ð>È�ÔNÙðús   ¶A Á BÂB)r'   N)Úw)"rV   Ú
__module__Ú__qualname__Ú	itertoolsÚcountrÖ   rÑ   Údictrr   ÚlistÚ__annotations__Ústaticmethodr   rÚ   rà   rê   r   r   rð   r»   Úcontextmanagerr   ró   rë   rø   r
  rB   r  rZ   ÚBaseExceptionr  r  r   r*  r/   r0   r1   rÐ   rÐ   D  s¢  … Øˆy�‰Ó €Hð LNÐ2°D¸¸dÀ3¹i¸Ñ4HÓMàð cð ¨h°s©mò ó ðó-ð
˜Sð  Tó ð& ñUàðUð ðUð ð	Uð
 ðUð 
ˆC‰óUð ×Ñð ñ	àð	ð ð	ð ð		ð
 ð	ð 
�"�S‘'Ñ	ò	ó ð	ð0˜sð 0 só 0ó
.ó>ð.4àð4ð ð4ð 
ó	4ð à˜4 Ñ.Ñ/ðð ˜-Ñ(ðð ˜‘ð	ð
 
óó	#ð ð ¨°¸)Ñ1DÑ(Eô r0   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eddfd„Z	 ddedeeeee   f   eeef   f   fd„Zdedeej4                     dedef   dededdfd„Zy)r(  Úhandlerr'   Nc                 óx   — |j                   | _         |j                  | _        |j                  | _        || _        y rg   )rð   ró   rë   r7  )rß   r7  s     r1   rà   zDebugFormatter.__init__ä  s/   € Ø—]‘]ˆŒ
Ø$×2Ñ2ˆÔØ×(Ñ(ˆŒØˆ�r0   rL   Ú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ð   ru   rz   r   rI   Úsave_real_tensorsÚ_subclassesÚ
fake_utilsÚtry_convert_fake_to_realr´   r¿   rÙ   r$   r	   r   ÚwriteÚprint_readable)rß   rL   r9  r  r<  r=  s         r1   Úfx_graphzDebugFormatter.fx_graphê  s+  € ð
 �Z‰ZÐ.Ó/ð 	°2ØˆHÜ�‰×%Ñ%×+Ñ+×=Ò=Ü×*Ñ*×5Ñ5×NÑNÈvÓV�ÜŸ7™7Ÿ?™?¨2¯7©7Ó3�ô
  Ÿ/™/×0Ñ0×6Ñ6×HÑHˆKÜ—‘×'Ñ'×-Ñ-Ø"'ÀEÑJóñ 
ô !ØØØØØ%Ø +õ÷
÷	ð, �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.pyFr>  )rð   rD  rE  )rß   rL   r9  r  s       r1   Úfx_graph_transformedz#DebugFormatter.fx_graph_transformed  sB   € ð
 �Z‰ZÐ1Ó2ð 	<°bØ�H‰H�R×&Ñ&°EÐ&Ó:Ô;÷	<÷ 	<ñ 	<ús	   ’"=½Ar3   c                 ó�   — | j                  d«      5 }|j                  | j                  |«      «       d d d «       y # 1 sw Y   y xY w)Nzir_pre_fusion.txt©rð   rD  Ú	_write_ir©rß   r3   r  s      r1   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.txtrJ  rL  s      r1   r"   zDebugFormatter.ir_post_fusion  s;   € Ø�Z‰ZÐ,Ó-ð 	,°Ø�H‰H�T—^‘^ EÓ*Ô+÷	,÷ 	,ñ 	,úrM  c                 ó¸   — t        j                  «       }| D ]2  }|j                  |j                  «       «       |j                  d«       Œ4 |j	                  «       S )Nz


)ÚioÚStringIOrD  Ú	debug_strÚgetvalue)r3   rn   rJ   s      r1   rK  zDebugFormatter._write_ir  sI   € ä�k‰k‹mˆØò 	 ˆDØ�I‰I�d—n‘nÓ&Ô'Ø�I‰I�hÕð	 ð �|‰|‹~Ðr0   c                 ó<   — t        || j                  d«      ¬«       y )Nzgraph_diagram.svg)r5   )rM   rë   )rß   r3   s     r1   Úgraph_diagramzDebugFormatter.graph_diagram   s   € Ü�U $§-¡-Ð0CÓ"DÖEr0   c                 ó”   — t        ||«       t        || j                  d«      dt        dt        j
                  j                  ¬«       y )Nzorig_fx_graph_diagram.svgFT)r5   r9   ÚprogÚparse_stack_tracer:   )r«   r
   rë   ÚGRAPHVIZ_COMMAND_SCALABLEr   rI   r:   )rß   rL   r3   s      r1   Údraw_orig_fx_graphz!DebugFormatter.draw_orig_fx_graph#  s<   € ô
 	% R¨Ô/ÜØØ—-‘-Ð ;Ó<ØÜ*Ø"Ü"ŸL™L×8Ñ8ö	
r0   rë   c                 óN   — t        j                  || j                  d«      «       y )Nzoutput_code.py)ræ   rê   rë   )rß   rë   s     r1   Úoutput_codezDebugFormatter.output_code2  s   € Ü�‰�H˜dŸm™mÐ,<Ó=Õ>r0   c                 óª  — i }| j                  |d«      5 }t        j                  d|j                  «       t        j
                  }t        j                  ||«       d d d «       i }t        rJ| j                  dd«      5 }t        t        t        |«      }t        j                  ||«       d d d «       ||fS ||fS # 1 sw Y   Œ_xY w# 1 sw Y   ||fS xY w)Nr+  z/Writing provenance tracing debugging info to %sz/inductor_provenance_tracking_node_mappings.json)rð   r;   Úinfor$   rÐ   rÑ   ÚjsonÚdumprÎ   Úcreate_node_mappingrÍ   )rß   rë   Ú
debug_infor  Únode_mappings        r1   Ú1log_inductor_triton_kernel_to_post_grad_node_infoz@DebugFormatter.log_inductor_triton_kernel_to_post_grad_node_info5  sÎ   € ð ˆ
Ø�Z‰Z˜ #Ó&ð 	&¨"Ü�H‰HÐFÈÏÉÔPÜ%×TÑTˆJÜ�I‰I�j "Ô%÷	&ð ˆÝØ—‘ØAÀ3óð ,àÜ2Ü&Ô(HÈ*ó �ô —	‘	˜,¨Ô+÷,ð ˜<Ð'Ð'ˆz˜<Ð'Ð'÷	&ð 	&ú÷,ð ˜<Ð'Ð'ús   •AB:Á>,CÂ:CÃCr$   Úinput_nodesÚtimingsÚChoiceCallerÚelapseÚprecompile_elapsec           	      óL  ‡‡— 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   )ÚFixedLayoutrJ   r'   c           	      ó   •— t        | d«      r| j                  }nd}|t        | «      j                  dœ}	 | j	                  «       }t        |‰«      r®d}	 t        |j                  «      } ‰|j                  |j                  g t        j                  j                  j                  |j                   «      ¢g t        j                  j                  j                  |j"                  «      ¢|¬«      }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        | j0                  t2        j4                  «      r ‰| j0                  «      |d<   |S # t        $ rJ 	 t        j                  j                  j                  |j                  d¬«      }n# t        $ r Y nw xY wY �ŒCw 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 �Œaw xY w# t        $ r Y �Œ-w xY w# t        $ r Y Œøw xY w)Nr$   Ú )r$   rZ   r   )Úfallback)rE   ÚsizeÚstrideÚoffsetÚlayoutrE   rb   rp  ro  ÚnumelrD   )r~   r$   rZ   rV   Úget_output_specr@   rB   rq  r)  r    rG   ÚsizevarsÚ	size_hintrb   rE   Ú
size_hintsro  rp  rr   Ú	get_dtypera   Ú
get_strideÚget_sizeÚ	get_numelrD   r   ÚIRNode)rJ   r    Ú	node_inforr  rq  Ústatic_layoutrk  Úbuild_node_infos         €€r1   r  z>DebugFormatter.log_autotuning_results.<locals>.build_node_infoR  s©  ø€ Ü�t˜VÔ$Ø ŸI™I‘	à�	à!Ü˜T›
×+Ñ+ñˆIðØ×-Ñ-Ó/�Ü˜f kÔ2Ø�Fð!Ü!$ V§]¡]Ó!3˜ñ %0ØŸ™Ø$Ÿl™lØHœqŸw™w×/Ñ/×:Ñ:¸6¿;¹;ÓGÐHØL¤§¡×!1Ñ!1×!<Ñ!<¸V¿]¹]Ó!KÐLØ%ô%�Mô +.¨mÓ*<�I˜hÒ'ä*-¨f«+�I˜hÑ'ðÜ%(¨¯©Ó)9Ó%:�	˜'Ñ"ðÜ&)¨$¯/©/Ó*;Ó&<�	˜(Ñ#ðÜ&)Ü—G‘G×$Ñ$×/Ñ/°·±Ó0AÓBó'�	˜(Ñ#ð
Ü$'¬¯©×(8Ñ(8×(CÑ(CÀDÇMÁMÃOÓ(TÓ$U�	˜&Ñ!ðÜ%(¬¯©×)9Ñ)9×)CÑ)CÀDÇNÁNÓDTÓ)UÓ%V�	˜'Ñ"ô �t˜VÔ$¬°D·I±I¼r¿y¹yÔ)IÙ$3°D·I±IÓ$>�	˜&Ñ!ØÐøôW %ò !ð!Ü%&§W¡W×%5Ñ%5×%?Ñ%?Ø &§¡¸ð &@ó &™Føô  )ò !Ù ð!ýð!ûô" ò Úðûô ò Úðûô ò Úðûô ò Úðûô ò Úðûô ò Ùðús·   ¶J1 ÁI Á*B$J1 ÄK Ä,K Å	AK! ÆAK1 ÇAL É	J.É%5JÊJ.Ê	J'Ê$J.Ê&J'Ê'J.Ê*J1 Ê-J.Ê.J1 Ê1	J>Ê=J>Ë	KËKË	KËKË!	K.Ë-K.Ë1	K>Ë=K>Ì	LÌL)Úop_nameÚcuda_device_nameÚcuda_device_countre  Úautotuning_timeÚprecompile_timezautotuning_result_json_list.txtÚatzutf-8)ÚencodingÚbenchmark_resultú
)r   rk  r|  r0  rr   ru   ÚcudaÚget_device_nameÚdevice_countró   r¢   Ú	info_dictÚupdater_  r`  rD  )rß   r$   re  rf  rh  ri  rJ   Úgeneral_propertiesr  ÚcallerÚtimerŒ  rk  r  s               @@r1   Úlog_autotuning_resultsz%DebugFormatter.log_autotuning_resultsH  s  ù€ õ 	$ð:	¤"§)¡)ð :	´´S¼#°X±ö :	ðz Ü %§
¡
× :Ñ :Ó <Ü!&§¡×!8Ñ!8Ó!:Ø>IÖJ°d™O¨DÕ1ÒJØ%Ø0ñ
Ðð ×ÑØ-¨t¸gð  ó 
ð 	àØ '§¡£ò ‘�˜Ü  ×!1Ñ!1Ó!3Ó4�	Ø× Ñ Ð!3Ô4Ø04�	Ð,Ñ-Ü—	‘	˜) RÔ(Ø—‘˜•ñ÷	ð 	ùò	 K÷	ð 	ús   Á2D
ÂA/DÄD#)z.inductor_triton_kernel_to_post_grad_nodes.json)rV   r,  r-  rÐ   rà   ru   r   r   r1  ÚTensorrF  rH  ÚSchedulerNodeListr!   r"   r3  rr   rK  rU  rZ  r\  rA   r0  r   rd  r   r|  Úfloatr‘  r/   r0   r1   r(  r(  ã  s¯  „ ð ð °ó ð<à�H‰H× Ñ ð<ð �U—\‘\Ñ"ð<ð 
ó	<ð<<à�H‰H× Ñ ð<ð �U—\‘\Ñ"ð<ð 
ó	<ð,Ð#4ð ,¸ó ,ð,Ð$5ð ,¸$ó ,ð ðÐ*ð ¨sò ó ððFÐ#4ð F¸ó Fð
à�H‰H× Ñ ð
ð !ð
ð 
ó	
ð? Cð ?¨Dó ?ð Oñ(Øð(à	ˆt�C˜˜c™�NÑ# T¨#¨s¨(¡^Ð3Ñ	4ó(ð&VàðVð ˜"Ÿ)™)‘_ðVð �n eÐ+Ñ,ð	Vð
 ðVð !ðVð 
ôVr0   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  r^  r(  rK  r    r  r!   ©r3   s    r1   Úlog_ir_pre_fusionr™  ¡  sB   € Ü×%Ñ%¤g§l¡lÔ3Ü×ÑÐ2´N×4LÑ4LÈUÓ4SÔTä‡G�G×Ñ˜%Õ r0   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(  rK  r    r  r"   r˜  s    r1   Úlog_ir_post_fusionrœ  ¨  sB   € Ü×&Ñ&¤w§|¡|Ô4Ü×ÑÐ 2´N×4LÑ4LÈUÓ4SÔTä‡G�G×Ñ˜5Õ!r0   c                   ó6   — e Zd ZU eed<   ej                  ed<   y)ÚTensorMetadataHolderÚtensor_metadatarb   N)rV   r,  r-  r   r2  ru   rb   r/   r0   r1   rž  rž  ¯  s   … à#Ó#Ø�L‰LÔr0   rž  Úpre_grad_graph_idÚpost_to_pre_grad_nodes_jsonÚtriton_kernel_to_post_grad_jsonc           	      óø  ‡— i i i i dœ}t         j                  d«       t        |t        «      st         j	                  d«       |S t        |t        «      st         j	                  d«       |S t        | t
        «      st         j	                  d«       |S t        j                  t        «      }t        j                  t        «      }t        j                  t        «      }	 |j                  «       D ]I  \  }}t        |t        «      st         j	                  d«       |c S |D ]  }	||	   j                  |«       Œ ŒK 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$        $ r‹}t         j	                  d|«       t         j	                  d|«       t         j	                  d|«       t         j	                  d| «       t         j	                  t'        j(                  «       «       |cY d}~S d}~ww xY w)z¾Create bidirectional mappings between:

    - pre_grad graph nodes and post_grad graph code nodes, and vice versa
    - triton kernel name and post_grad graph code nodes, and vice versa
    )Ú	preToPostÚ	postToPreÚcppCodeToPostÚpostToCppCodez.Creating node mappings for provenance trackingzCProvenance tacking error: post_to_pre_grad_nodes_json is not a dictzGProvenance tacking error: triton_kernel_to_post_grad_json is not a dictz9Provenance tacking error: pre_grad_graph_id is not an intzMProvenance tacking error: triton_kernel_to_post_grad_json value is not a listrJ   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)r@   r0  r;   Úerror)rJ   s    r1   Úcheck_formatz)create_node_mapping.<locals>.check_formatê  sN   € Ü˜d¤DÔ)Ü—	‘	Ølôð Ø Ñ%¨°tÑ);¸{ÐRVÑ?VÜ—	‘	Øoôð Ør0   zIProvenance tacking error: post_to_pre_grad_nodes_json value is not a listr©  r$   rª  c              3   ó&   •K  — | ]  }|‰f–— Œ
 y ­wrg   r/   )rh   rØ   Ú
parent_keys     €r1   rk   z&create_node_mapping.<locals>.<genexpr>  s   øè ø€ ò !Ø,-˜˜Jœñ!ùs   ƒÚdNc                 óJ   — | D ]  }t        | |   «      | |<   Œ t        | «      } y rg   )r1  r0  )r¯  Úkeys     r1   Úconvert_sets_to_listsz2create_node_mapping.<locals>.convert_sets_to_lists  s+   € Øò &�Ü˜a ™f›��#’ð&ä�Q“‰Ar0   z+Unexpected error in create_node_mapping: %sz post_to_pre_grad_nodes_json:  %sz$triton_kernel_to_post_grad_json:  %szpre_grad_graph_id:  %s)r;   r^  r@   r0  r«  rB   rs   Údefaultdictr   r¢   r1  r£   rr   r   r€   rª   ÚpopÚextendr)  Ú	tracebackÚ
format_exc)r   r¡  r¢  Úempty_returnÚpre_to_postÚpost_to_preÚpost_to_cpp_codeÚ	outer_keyÚ
node_arrayÚ	curr_noder¬  rJ   rØ   rÊ   Úcurrent_noder²  Úer®  s                    @r1   ra  ra  ¸  sM  ø€ ð ØØØñ	/€Lô ‡H�HÐ=Ô>äÐ1´4Ô8Ü�	‰	ÐWÔXØÐäÐ5´tÔ<Ü�	‰	ØUô	
ð ÐäÐ'¬Ô-Ü�	‰	ÐMÔNØÐä"-×"9Ñ"9¼*Ó"E€KÜ"-×"9Ñ"9¼*Ó"E€Kä'2×'>Ñ'>¼zÓ'JÐðKØ%D×%JÑ%JÓ%Lò 	;Ñ!ˆI�zÜ˜j¬$Ô/Ü—	‘	Øcôð $Ò#Ø'ò ;�	Ø  Ñ+×/Ñ/°	Õ:ñ;ð	;ð	œ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øô6 ò 
ô 	�	‰	Ð?ÀÔCÜ�	‰	Ð4Ð6QÔRÜ�	‰	Ø2Ð4Sô	
ô 	�	‰	Ð*Ð,=Ô>Ü�	‰	”)×&Ñ&Ó(Ô)ØÕûð
úsX   Ã>K% ÄA9K% ÆK% Æ,AK% ÈK ÈK% È K% È3A.K% Ê"=K% Ë K% Ë%	M9Ë.B M4Í.M9Í4M9rR   rd   c                  óÈ  — 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.
    z/tmp/inductor_saved_argsri   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.
        )r@   ru   r’  rž  r   rb   ©ri   s    r1   Úhandle_tensorz5save_args_for_compile_fx_inner.<locals>.handle_tensor9  s.   € ô �aœŸ™Ô&Ü'Ô(@ÀÓ(CÀQÇXÁXÓNÐNàˆHr0   Ú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×   Úmkdirr   r   ÚnextÚsave_args_cntrï   Úpickler`  r;   r—  r·   rÄ   rF   )
rR   rd   ÚfolderrÄ  Úargs_to_saveÚkwargs_to_saveÚfn_namer¿   rò   Úmessages
             r1   Úsave_args_for_compile_fx_innerrÒ  .  sê   € ð (€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   Á>CÃC!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   )rÅ  Úrbri   r'   c                 ó
  — t        | t        «      rrt        j                  j                  j                  | j                  j                  | j                  j                  | j                  j                  | j                  «      S | S rg   )r@   rž  ru   Ú_dynamoÚtestingÚrand_stridedrŸ  Úshaperp  rE   rb   rÃ  s    r1   rÄ  z9load_args_and_run_compile_fx_inner.<locals>.handle_tensorb  se   € Ü�aÔ-Ô.Ü—=‘=×(Ñ(×5Ñ5Ø×!Ñ!×'Ñ'Ø×!Ñ!×(Ñ(Ø×!Ñ!×'Ñ'Ø—‘ó	ð ð ˆHr0   T)Úallow_non_fake_inputsÚ	save_argsF)Útorch._inductor.compile_fxrÅ  rï   rÌ  Úloadr   ru   rA  ÚFakeTensorModer   r	   r   )r¿   rÅ  rò   rR   rd   rÄ  Ú	fake_modes          r1   Ú"load_args_and_run_compile_fx_innerrà  \  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_configsrá  c                ó¨  — ddl m} ddlm} ddlm} ddlm} |j                  j                  }|j                  «       }	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¬«        | |	|
||||¬«      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_inputsé   Úaot_inductor)Úoptionsé   r   F)Ú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Úmoduler@   ru   r   r   Úexample_inputsÚrepro_levelrê   ÚdeepcopyrA   Úexportr;   r<   r)  )râ  rã  rä  rá  ræ  rç  r   rè  Úuse_minifierrL   rR   rd   Úgm_copyÚexample_inputs_copyÚconfig_copyÚflat_example_inputsÚtuple_inputsÚflattened_eprÀ  ró  s                       r1   Úaot_inductor_minifier_wrapperr  s  sâ  € õ 8Ý7Ý&Ý?à×&Ñ&×9Ñ9€Là	×	 Ñ	 Ó	"€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ÙØ×#Ñ#Ó%ØØ!,Ø)Ø!Ø)õñ ØØØØ-Ø%Ø%ô
ð 	
øð ò ÙØØ#ØØ$õ		
ô 	�‰Ð%Ô&ØˆûÜò ÙØˆGà×"Ñ"×.Ñ.°!Ò3Ø�áØ ØØØ(õ	ð ˆûðús%   Á5C5E+ Å+GÅ0#FÆGÆ-GÇG)FNrT   )grs   r»   rê   ÚdataclassesÚ	functoolsrP  r.  r_  r·   r´   Úos.pathrÌ  r  ræ   r+   r¶  Úcollections.abcr   Útypingr   r   r   r   r   Úunittest.mockr	   ru   Úfunctorch.compiler
   r   r   r   Útorch._dynamo.repro.after_aotr   Útorch._dynamo.utilsr   Útorch._loggingr   Útorch.fx.graph_moduler   Útorch.fx.passes.shape_propr   r   Útorch.fx.passes.tools_commonr   Útorch.typesr   Útorch.utils._ordered_setr   Útorch.utils._pytreer   rm  r   r   Ú	schedulerr   r   r   r   r   Úvirtualizedr    r¸   rV   r;   r–  r›  r1  r“  rt   r#   rY  Ú	lru_cacher€   r2   rr   rM   rv   r=   r0  rB   rš   r§   r«   r4  rÌ   rÍ   r2  rÎ   rÐ   r(  r™  rœ  Ú	dataclassrž  r/  rË  ra  rÒ  rà  rý  ÚExportedProgramr  r/   r0   r1   ú<module>r     s�  ðÜ Û Û Û Û Û 	Û Û Û Û 	Û Û Û Û Û Û Ý $ß 5Õ 5Ý ã ß VÑ VÝ Ý :Ý -Ý ,Ý -ß OÝ 7Ý  Ý /Ý (ç ÷õ õ ð €g×Ñ˜Ó!€á% h°Ó@Ð Ù& xÐ1AÓBÐ Ø˜‘IÐ Ø
 ˆ+×
 Ñ
  ¨V°ZÐ,@Ó
A€ÚTÐ ð €×Ñ�TÓð�ò ó ðð Øñ+ØÐ!Ñ"ð+àð+ð �C‰=ð+ð 
ó	+ð\_ $Ð'8Ñ"9ð _¸b¿h¹hó _ðJ &*Øñ	 ØÐ%Ñ&ð à  S ™>ð ð ˜c‘]ð ð ð	 ð
 
ó ðF!Ø  S ™>ð!à	ˆ#ˆwˆ,Ñó!ð"IØ�‰×ÑðIàðIð 
óIð" ×Ñð%˜H T™Nò %ó ð%ðV 46Ð   $ s¨C x¡.Ó 5Ø$(Ð �H˜S‘MÓ (÷\ñ \÷~{ñ {ð|!Ð.ð !°4ó !ð"Ð/ð "°Dó "ð ×Ñ÷ð ó ðð
  �	—‘Ó!€ðsØðsà!% c¨3 h¡ðsð &*¨#¨s¨(¡^ðsð 
ˆ#ˆt�C˜�H‰~Ð
Ñó	sðl+¨#ð +¸ð +Àó +ð\1¨Sð 1°Só 1ð8 (,òQØ
�3˜�8Ñ
ðQà—l‘l×2Ñ2ðQð ˜3 ˜8‘nð	Qð
 ˜8Ñ$ðQð 	ôQr0   