ó
    Eñi?€  ã                  ót  • S r SSKJr  SSKrSSKrSSKrSSKrSSKrSSKrSSK	r	SSK
r
SSKrSSKrSSKrSSKrSSKrSSKrSSKJr  SSKJr  SSKJrJrJrJr  SSKrSSKJr  SSKrSSKJr  SSK J!r!  SS	K"J#r#  SS
KJ$r$  SSK%J&r&  SSK'J(r(J)r)  SSK*J+r+  SSKJ,r,J-r-J.r.  \(       a  SSK/J0r0J1r1  SSK2J3r3  SSK4J5r5  \
Rl                  " \75      r8\" S5      r9\" S5      r:\:Rw                  5       r<\<(       a  SSK=r>/ r?Sr@SrA\<(       ah  / SQr?\>R„                  R†                  Rˆ                  R‹                  5       R�                  SS5      rASR�                  \? V s/ s H	  n SU  S3PM     sn 5      r@/ SQrH " S S5      rIS?S jrJS rK " S! S"5      rL\Rš                  S?S# j5       rNS$S%.S@S& jjrOS$S%.S@S' jjrPS?S( jrQSAS) jrR " S* S+\S5      rTSBS, jrU  SC         SDS- jjrV SES$S$S..             SFS/ jjjrWSGS0 jrX        SHS1 jrY      SIS2 jrZ SES$S$S..             SJS3 jjjr[      SKS4 jr\SLS5 jr]\]" \R¼                  5      r_\]" \RÀ                  " S65      5      ra\]" S5      rb\]" S$5      rc\]" S$5      rd " S7 S85      re " S9 S:5      rf " S; S<5      rg   SM         SNS= jjrhSOS> jrigs  sn f )Paã  
Debug utilities for TorchDynamo compilation and execution.

This module provides various debugging tools and utilities for TorchDynamo, including:

- Minification support for reducing test cases while preserving bugs
- Input/output handling via InputReader and InputWriter for reproducible testing
- Accuracy checking between original and compiled models
- Neural network module string conversion via NNModuleToString
- Profiling tools and system information collection
- Buck build system integration for Meta-internal testing

Key classes:
- InputReader/InputWriter: Handle serialization of model inputs/outputs
- NNModuleToString: Converts nn.Modules to string representations
- BuckTargetWriter: Manages Buck build system integration
é    )ÚannotationsN)ÚCounter)Úimport_module)ÚAnyÚOptionalÚTYPE_CHECKINGÚTypeVar)ÚTensor)Úrand_strided)Únormalize_path_separator)Úis_float_dtype)ÚStorageWeakRef)ÚContentStoreReaderÚContentStoreWriteré   )Úconfig)Úclone_inputsÚget_debug_dirÚ	warn_once)ÚCallableÚSequence)Útqdm)ÚUntypedStorageÚTztorch._inductor.configÚ )z1//caffe2/torch/fb/sparsenn:sparsenn_operators_gpuz-//caffe2/torch/fb/sparsenn:sparsenn_operatorsz///deeplearning/fbgemm/fbgemm_gpu:sparse_ops_cpuz+//deeplearning/fbgemm/fbgemm_gpu:sparse_opszfbcode:ú//Ú
ztorch.ops.load_library("z"))Úbuck2Úrunz@mode/dev-nosanc                  ó6   • \ rS rSrSS jrSS jrS	S
S jjrSrg)ÚBuckTargetWriteréZ   c                ó,  • [         R                  R                  [         R                  R                  U5      5      u  U l        U l        U R
                  R                  SS5      U l        U R                  R                  SS5       SU R                   3U l        U R                  U R                  R                  S5      S  U l        U R                  SS  U l        U R                  nX"R                  S5      S  SS  nSU S	U R                   3U l	        g )
Nz.pyr   Ú/Ú.zfbcode.é   zfbcode/r   Ú:)
ÚosÚpathÚsplitÚabspathÚsubdirÚpy_fileÚreplaceÚtargetÚfindÚcmd_line_path)ÚselfÚfilenameÚtmps      ÚV/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/_dynamo/debug_utils.pyÚ__init__ÚBuckTargetWriter.__init__[   sÜ   € Ü$&§G¡G§M¡M´"·'±'·/±/À(Ó2KÓ$LÑ!ˆŒ�T”\Ø—l‘l×*Ñ*¨5°"Ó5ˆŒð —{‘{×*Ñ*¨3°Ó4Ð5°Q°t·{±{°mÐDˆŒ	Ø—I‘I˜dŸi™iŸn™n¨YÓ7Ð9Ð:ˆŒ	Ø—I‘I˜a˜b�MˆŒ	ð �k‰kˆØ—(‘(˜9Ó%Ð'Ð(¨¨Ð,ˆØ! #  a¨¯© }Ð5ˆÕó    c                óð   • SR                  [         Vs/ s H	  nSU S3PM     sn5      n[        R                  " SU R                   SU R
                   S[         SU SU R                   S	35      $ s  snf )
Nr   z	        "z",za
load("@fbcode_macros//build_defs:python_binary.bzl", "python_binary")

python_binary(
    name="z",
    srcs = ["z©"],
    compile = False,
    deps = [
        "//caffe2:torch",
        "//caffe2:libtorch",
        "//caffe2/functorch:functorch",
        "//triton:triton",
        "z",
    ],
    cpp_deps = [
z
    ],
    main_module = "z",
    par_style = "xar",
)
)ÚjoinÚ
extra_depsÚtextwrapÚdedentr/   r-   Ú
cur_targetr)   )r2   ÚxÚextra_cpp_depss      r5   ÚbuildÚBuckTargetWriter.buildi   sŽ   € ØŸ™½zÓ#Jºz¸! i°¨s°"Ó$5¹zÑ#JÓKˆÜ�Šðð �;‰;ˆ-ð Ø�l‰lˆ^ð 
ô ˆð ð Ð ð à—I‘I�;ð ð#ó
ð 	
ùò $Ks   ”A3c                ód  • [         R                  R                  U R                  S5      n[	        US5       nUR                  U R                  5       5        S S S 5        [        U R                  /-   nU(       a%  [        R                  SSR                  U5      5        U$ ! , (       d  f       NP= f)NÚTARGETSÚwzFFound an example that reproduces the error. Run this cmd to repro - %sÚ )r(   r)   r:   r,   ÚopenÚwriterA   ÚBUCK_CMD_PREFIXr1   ÚlogÚwarning)r2   Ú	print_msgÚtarget_fileÚfdÚ	cmd_splits        r5   rH   ÚBuckTargetWriter.writeƒ   s�   € Ü—g‘g—l‘l 4§;¡;°	Ó:ˆÜ�+˜sÔ# rØ�H‰H�T—Z‘Z“\Ô"÷ $ô $ t×'9Ñ'9Ð&:Ñ:ˆ	ÞÜ�K‰KØXØ—‘˜Ó#ôð Ð÷ $Õ#ús   · B!Â!
B/)r1   r)   r-   r,   r/   N)r3   ÚstrÚreturnÚNone©rR   rQ   )T)rL   ÚboolrR   ú	list[str])Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r6   rA   rH   Ú__static_attributes__© r8   r5   r!   r!   Z   s   † ô6ô
÷4ñ r8   r!   c                 ó(  • [         R                  R                  [        5       S5      n U c-  [        R
                  " 5        S[        R                  " 5        3n [         R                  R                  U 5      (       d  [         R                  " U SS9  U $ )NÚminifierz
/minifier_T)Úexist_ok)
r(   r)   r:   r   ÚtempfileÚ
gettempdirÚgetpassÚgetuserÚexistsÚmakedirs)r)   s    r5   Úminifier_dirrf   ‘   se   € Ü�7‰7�<‰<œ›¨Ó4€DØ�|Ü×%Ò%Ó'Ð(¨
´7·?²?Ó3DÐ2EÐFˆÜ�7‰7�>‰>˜$×ÑÜ
�Š�D 4Ò(Ø€Kr8   é   c                  ó²  • \ rS rSr\R
                  R                  \R
                  R                  \R
                  R                  \R
                  R                  \R
                  R                  \R
                  R                  \R
                  R                  \R
                  R                  \R
                  R                  \R
                  R                  \R
                  R                   \R
                  R"                  \R
                  R$                  \R
                  R&                  \R
                  R(                  \R
                  R*                  \R
                  R,                  \R
                  R.                  \R
                  R0                  \R
                  R2                  \R
                  R4                  /r\SS j5       r\SS j5       rSrg)ÚNNModuleToStringé�   c                óô   • [        5       nU R                  5        H5  u  p#[        U5      [        R                  ;  d  M$  UR                  U5        M7     [        U5      S:”  a  [        R                  SU5        g)Nr   z-We have not tested reprs of some modules - %sT)	ÚsetÚnamed_childrenÚtyperi   Ú
safe_reprsÚaddÚlenrJ   rK   )ÚgmÚcant_convertÚ_Úmodules       r5   Úcan_convert_to_stringÚ&NNModuleToString.can_convert_to_string¶   s`   € ä“uˆØ×*Ñ*Ö,‰IˆAÜ�F‹|Ô#3×#>Ñ#>Õ>Ø× Ñ  Ö(ñ -ô ˆ|Ó˜qÓ Ü�K‰KÐGÈÔVàr8   c                ó$  • SSK Jn  Sn[        R                  " S5      nU R	                  5        HY  u  pEUR                  5        n[        UR                  5       S 5      nUb  UR                  (       a  U S3nX2S-   SU SU S	3-  nM[     U R                  R                  5        HÙ  u  p‰U	c  M
  U	R                  5       [        ::  a(  SS
KJn
  U
R                  [        :¼  d   e[!        U	5      nOh["        R$                  " U	5      (       a'  S['        U	R(                  5       SU	R*                   S3nO&S['        U	R(                  5       SU	R*                   S3nU	R                  (       a  U S3nUUS-   SU SU S3-  nMÛ     U R,                  R                  5        HW  u  pÍUc  M
  SnUR                  (       a  SnS['        UR(                  5       SUR*                   U S3nX2S-   SU SU S	3-  nMY     X1" U R.                  S5       S	3-  nU$ )Nr   )Ú
_addindentú    z­
            from torch.nn import *
            class Repro(torch.nn.Module):
                def __init__(self) -> None:
                    super().__init__()
            z.cuda()é   zself.z = r   )Ú
PRINT_OPTSztorch.randn(z, dtype=Ú)ztorch.randint(1, size=zself.register_buffer('z', z)
r   z, device="cuda"ztorch.nn.Parameter(torch.randn(z))rg   )Útorch.nn.modules.modulery   r<   r=   rm   Ú__repr__ÚnextÚ
parametersÚis_cudaÚ_buffersÚitemsÚnumelÚMAX_CONSTANT_NUMEL_INLINEÚtorch._tensor_strr|   Ú	thresholdÚreprÚtorchÚis_floating_pointÚlistÚshapeÚdtypeÚ_parametersÚcode)rr   ry   ÚtabÚ	model_strÚmodule_nameru   Ú
module_strÚexample_paramÚbuffer_nameÚbufferr|   Ú
tensor_strÚ
param_nameÚparamÚmaybe_devices                  r5   ÚconvertÚNNModuleToString.convertÂ   s$  € å6àˆä—O’Oðó
ˆ	ð $&×#4Ñ#4Ö#6ÑˆKØ"ŸO™OÓ-Ð.ˆJô ! ×!2Ñ!2Ó!4°dÓ;ˆMØÑ(¨]×-B×-BØ *˜|¨7Ð3�
Ø !™G˜9 E¨+¨°c¸*¸ÀRÐHÑHŠIñ $7ð $&§;¡;×#4Ñ#4Ö#6ÑˆKØ‰~Ùà�|‰|‹~Ô!:Ó:Ý8à!×+Ñ+Ô/HÓHÐHÐHÜ! &›\‘
Ü×(Ò(¨×0Ñ0Ø+¬D°·±Ó,>Ð+?¸xÈÏÉÀ~ÐUVÐW‘
ð -¬T°&·,±,Ó-?Ð,@ÀÈÏÉÈÐVWÐXð ð �~�~Ø *˜|¨7Ð3�
ØØ˜‘7�)Ð1°+°¸cÀ*ÀÈSÐQñŠIñ# $7ð* "$§¡×!5Ñ!5Ö!7ÑˆJØ‰}ÙØˆLØ�}�}Ø0�Ø:¼4ÀÇÁÓ;LÐ:MÈXÐV[×VaÑVaÐUbÐcoÐbpÐprÐsˆJØ !™G˜9 E¨*¨°S¸¸ÀBÐGÑGŠIñ "8ð  	˜
 2§7¡7¨AÓ.Ð/¨rÐ2Ñ2ˆ	ØÐr8   r\   N)rr   útorch.fx.GraphModulerR   rU   )rr   rž   rR   rQ   ) rW   rX   rY   rZ   rŠ   ÚnnÚLinearÚConv1dÚConv2dÚConv3dÚBatchNorm1dÚBatchNorm2dÚBatchNorm3dÚ	LayerNormÚDropoutÚSoftmaxÚReLUÚGELUÚIdentityÚ	MaxPool2dÚ	EmbeddingÚTanhÚConvTranspose1dÚGLUÚLSTMÚFlattenÚAdaptiveAvgPool2dro   Ústaticmethodrv   rœ   r[   r\   r8   r5   ri   ri   �   s0  † à�‰�‰Ø�‰�‰Ø�‰�‰Ø�‰�‰Ø�‰×ÑØ�‰×ÑØ�‰×ÑØ�‰×ÑØ�‰×ÑØ�‰×ÑØ�‰�‰Ø�‰�‰Ø�‰×ÑØ�‰×ÑØ�‰×ÑØ�‰�‰Ø�‰× Ñ Ø�‰�‰Ø�‰�‰Ø�‰×ÑØ�‰×"Ñ"ð+€Jð0 ó	ó ð	ð ó=ó ó=r8   ri   c                 óŽ  • [         R                  R                  5       (       d  gSn  [         R                  R                  cl  [
        R                  " SS/5      nUR                  5       R                  S5      nSR                  U Vs/ s H  o3S:w  d  M
  SU S3PM     sn5      nX S3-  n OU S	-  n  [        S [        [         R                  R                  5       5       5       5      nU S-  n UR                  5        H  u  pgU SU SU S3-  n M     U S-  n U $ s  snf ! [        [
        R                  4 a    U S
-  n  NŽf = f)Nz:# torch.cuda.is_available()==False, no GPU info collected
z# CUDA Info: 
Únvccz	--versionr   r   ú# z 
z'# Not searching for nvcc on ROCM setup
z# nvcc not found
c              3  ó`   #   • U  H$  n[         R                  R                  U5      v •  M&     g 7f©N)rŠ   ÚcudaÚget_device_name)Ú.0Úis     r5   Ú	<genexpr>Ú,_cuda_system_info_comment.<locals>.<genexpr>  s&   é € ð Ú/O¨!Œ�
‰
×"Ñ" 1×%Ð%Ò/Oùs   ‚,.z# GPU Hardware Info: 
z : )rŠ   r»   Úis_availableÚversionÚhipÚ
subprocessÚcheck_outputÚdecoder*   r:   ÚFileNotFoundErrorÚCalledProcessErrorr   ÚrangeÚdevice_countr„   )r’   Úcuda_version_outÚcuda_version_linesÚsÚcommentÚ	gpu_namesÚnameÚcounts           r5   Ú_cuda_system_info_commentrÒ     sJ  € ä�:‰:×"Ñ"×$Ñ$ØLà!€Ið	*Ü�=‰=×ÑÑ$Ü)×6Ò6¸ÀÐ7LÓMÐØ!1×!8Ñ!8Ó!:×!@Ñ!@ÀÓ!FÐØ—g‘gÑ4FÓRÒ4F¨qÈrÉ'›{  A 3 c›{Ñ4FÑRÓSˆGØ˜9 B˜Ñ'‰IàÐCÑC‰Iô ñ Ü/4´U·Z±Z×5LÑ5LÓ5NÔ/Oóó €Ið Ð*Ñ*€IØ —‘Ö(‰ˆØ�r˜$˜˜s 5 '¨Ð-Ñ-Š	ñ )à�Ñ€IØÐùò Søô œz×<Ñ<Ð=ó *ØÐ)Ñ)Š	ð*ús0   ¨A!D" Â		DÂ
DÂ D" Â/D" ÄD" Ä"EÅEF)Ústable_outputc                ó4  ^^• U (       a  g/ SQm/ SQmSUU4S jjn[         R                  R                  5        VVs/ s H-  u  p#U" U5      (       d  M  SU SUR                  SS5       S3PM/     nnnS	R	                  U5      n[        S
U S35      $ s  snnf )zd
Generate a string configuration for environment variables related to Dynamo, Inductor, and Triton.
z+# env var omitted due to stable_output=True)ÚTORCHÚDYNAMOÚINDUCTORÚTRITON)ÚTRITON_LIBDEVICE_PATHÚTRITON_PTXAS_PATHÚTRITON_LIBCUDA_PATHc                óH   >^ • [        U 4S jT 5       5      =(       a    T T;  $ )Nc              3  ó,   >#   • U  H	  oT;   v •  M     g 7frº   r\   )r½   ÚstringÚkeys     €r5   r¿   Ú;generate_env_vars_string.<locals>.filter.<locals>.<genexpr>*  s   øé € Ð:ªz V˜S–=ªzùs   ƒ)Úany)rß   Ú
allow_listÚ	skip_lists   `€€r5   ÚfilterÚ(generate_env_vars_string.<locals>.filter)  s   ù€ ÜÔ:©zÓ:Ó:×S¸sÈ)Ñ?SÐSr8   zos.environ['z'] = 'Ú'Ú"r   z
import os
z
    )rß   rQ   rR   rU   )r(   Úenvironr„   r.   r:   r   )rÓ   rä   rß   ÚvalueÚconfig_linesÚconfig_stringrâ   rã   s         @@r5   Úgenerate_env_vars_stringrì     s­   ù€ ö Ø<â:€JÚU€I÷Tð Tô
 Ÿ*™*×*Ñ*Ô,ôâ,‰JˆCÙ�#�;ó 	AˆL˜˜˜V E§M¡M°#°sÓ$;Ð#<¸AÓ@Ù,ð ñ ð
 —I‘I˜lÓ+€MÜ#ð )à€ð ð%ó 	ð 	ùós   ½BÁBc           	     óh  • SS K nSS KnU (       a  gUR                  R                  R                  R                  5       nSUR                  R                  R                  5        SUR                  R                  R                  5        SUR                  R                  R                  5        SU S3	$ )Nr   z*# config omitted due to stable_output=Truez~import torch._dynamo.config
import torch._inductor.config
import torch._functorch.config
import torch.fx.experimental._config
r   )
Útorch._functorch.configÚtorch._inductor.configÚfxÚexperimentalÚ_configÚcodegen_configÚ_dynamor   Ú	_inductorÚ
_functorch)rÓ   rŠ   Úexperimental_configs      r5   Úgenerate_config_stringrø   8  s¥   € Û"Û!æØ;àŸ(™(×/Ñ/×7Ñ7×FÑFÓHÐðð
 ‡�×Ñ×$Ñ$Ó&Ð 'ð (Ø‡�×Ñ×&Ñ&Ó(Ð )ð *Ø×Ñ×Ñ×'Ñ'Ó)Ð *ð +ØÐ ð ð	ð 	r8   c                 óR   • [         R                  R                  [        5       S5      $ )Nzminifier_launcher.py)r(   r)   r:   rf   r\   r8   r5   Úget_minifier_repro_pathrú   L  s   € Ü�7‰7�<‰<œ›Ð(>Ó?Ð?r8   c                óh  • [        5       n[        R                  SU5        [        (       a  [	        U5      R                  5          [        US5       nUR                  U 5        S S S 5        g ! , (       d  f       g = f! [         a)  n[        R                  S5        [        SU 35      UeS nAff = f)NzWriting minified repro to:
%srE   r   zCould not write to )
rú   rJ   rK   Úuse_buckr!   rH   rG   ÚOSErrorÚ	exceptionÚNotImplementedError)ÚcontentsÚminified_repro_pathrN   Úes       r5   Úhelper_for_dump_minifyr  P  s”   € Ü1Ó3ÐÜ‡K�KÐ0Ð2EÔFç‚xÜÐ,Ó-×3Ñ3Ô5ðVÜÐ% sÔ+¨rØ�H‰H�XÔ÷ ,×+Ö+ûô ó VÜ�‰�bÔÜ!Ð$7Ð8KÐ7LÐ"MÓNÐTUÐUûðVús6   ÁA> ÁA-Á$A> Á-
A;Á7A> Á;A> Á>
B1Â$B,Â,B1c                  ó   • \ rS rSrSrg)ÚAccuracyErrori_  r\   N)rW   rX   rY   rZ   r[   r\   r8   r5   r  r  _  s   † Úr8   r  c                óÖ   • [        U 5      n[        [        U 5      5       HE  n[        X   [        R
                  5      (       d  M&  X   R                  X   R                  5        MG     U$ )zÖ
This clone inputs is different from utils clone_input. In case of minifier,
all the tensors are leaf tensors while creating a new graph. So, we set the
requires_grad field w/o checking the leafness of the tensor.
)r   rÉ   rq   Ú
isinstancerŠ   r
   Úrequires_grad_Úrequires_grad)Úexample_inputsÚcloned_inputsÚidxs      r5   Úclone_inputs_retaining_gradnessr  c  sX   € ô ! Ó0€MÜ”S˜Ó(Ö)ˆÜ�mÑ(¬%¯,©,×7Ó7ØÑ×-Ñ-¨nÑ.A×.OÑ.OÖPñ *ð Ðr8   c                óX  • SSK JnJnJn  [        R
                  " U 5      n U(       d  [        U5      n[        U S5      (       a  U R                  S5        [        U SS5      (       a  U " U5      OU " U6 nU(       a  U$ U" U5      (       a  U" U5      nUR                  5         U" XSU5      $ )zÓ
Runs a forward and possibly backward iteration for a given mod and args.

When disable_clone is True, we will use args as-is without cloning.
This is higher fidelity but we may destroy the args in the process.
r   )Úcollect_resultsÚreduce_to_scalar_lossÚrequires_bwd_passÚ	zero_gradTÚ_boxed_callFN)Útestingr  r  r  ÚcopyÚdeepcopyr  Úhasattrr  ÚgetattrÚbackward)	rr   ÚargsÚonly_fwdÚdisable_cloner  r  r  ÚoutÚlosss	            r5   Úrun_fwd_maybe_bwdr  p  s“   € ÷ SÑRä	�Š�rÓ	€BÞÜ.¨tÓ4ˆäˆr�;×ÑØ
�‰�TÔô ˜b -°×7Ñ7‰"ˆTŒ(¹RÀ¸Y€CæØˆ
Ù˜×ÑÙ$ SÓ)ˆØ�‰ŒÙ˜2 D¨$Ó/Ð/r8   ©Úrequire_fp64Úignore_non_fpc          	     óÌ  • SSK Jn  [        XU5      nSn[        R                  (       a8   [        [        R                  " U 5      [        U5      5      u  pš[        XšU5      n [        XU5      nU" UUU[        R                  SUS9nU$ ! [         a*    U(       a  [        S5      e[        R                  S5         N[f = f! [         a    [        R                  S5         gf = f)	aI  
Check two models have same accuracy.

require_fp64: if True, raise an error if we unable to calculate the fp64 reference
ignore_non_fp: if True, do not compare outputs which are not floating point.  This
    is mostly useful for the minifier (which wants to avoid quantizing floating point
    error into integer/boolean error)
r   )ÚsameNzfCould not generate fp64 outputs, workaround with torch._dynamo.config.same_two_models_use_fp64 = FalsezCould not generate fp64 outputsz�While minifying the program in accuracy minification mode, ran into a runtime exception which is likely an unrelated issue. Skipping this graph.T)ÚtolÚ	equal_nanr"  )Úutilsr$  r  r   Úsame_two_models_use_fp64Úcast_to_fp64r  r  r  Ú	ExceptionÚRuntimeErrorrJ   rK   rþ   Úrepro_tolerance)rr   Úopt_gmr
  r  r!  r"  r$  ÚrefÚfp64_refÚ
fp64_modelÚfp64_examplesÚresÚpassings                r5   Úsame_two_modelsr4  �  sì   € õ" ä
˜B°Ó
9€Cà€HÜ×&×&ð
	;Ü(4Ü—’˜bÓ!Ô#BÀ>Ó#Ró)Ñ%ˆJô )¨ÀHÓMˆHð
Ü ¸ÓAˆñ ØØØÜ×"Ñ"ØØ#ñ€Gð €Nøô7 ó 	;ÞÜ"Ø|óð ô �K‰KÐ9Ö:ð	;ûô ó ô 	�‰ð$ô	
ñ
 ðús#   «7B
 Á#C Â
1B>Â=B>ÃC#Ã"C#c                ó  • U R                   R                   GH?  nUR                  S:X  a¸  UR                  [        R
                  R                  R                  R                  L a}  [        UR                  5      S:X  d   e[        UR                  S   5      (       aE  UR                  S   [        R                  :w  a$  UR                  S   [        R                  4Ul
        UR                  S:X  d  MÞ  UR                  R                  S5      nUc  Mþ  [        U5      (       d  GM  [        UR                  5      n[        R                  US'   X1l        GMB     U R                   R!                  5         U R#                  5         U $ )NÚcall_functionr{   r   r   rŽ   )ÚgraphÚnodesÚopr/   rŠ   ÚopsÚprimsÚconvert_element_typeÚdefaultrq   r  r   Úfloat64ÚkwargsÚgetÚdictÚlintÚ	recompile)ÚmodelÚnoderŽ   Ú
new_kwargss       r5   Úcast_dtype_args_to_fp64rG  Ê  s  € Ø—‘×!Õ!ˆà�G‰G�Ó&Ø—‘œuŸy™yŸ™×CÑC×KÑKÒKä�t—y‘y“> QÓ&Ð&Ð&Ü˜dŸi™i¨™l×+Ñ+°·	±	¸!±ÄÇÁÓ0MØ!ŸY™Y q™\¬5¯=©=Ð9�”	Ø�7‰7�oÕ%Ø—K‘K—O‘O GÓ,ˆEØÓ ¤^°E×%:Ô%:Ü! $§+¡+Ó.�
Ü&+§m¡m�
˜7Ñ#Ø(—ñ "ð 
‡K�K×ÑÔØ	‡O�OÔØ€Lr8   c                ó�   ^ • SSK Jn  UR                  T 5      nT [        R                  :X  a  [        U5      nU" U 4S jU5      nX4$ )Nr   )Útree_mapc                ó’   >• [        U [        R                  5      (       a&  U R                  5       (       a  U R	                  T5      $ U $ rº   )r  rŠ   r
   r‹   Úto)r?   rŽ   s    €r5   Ú<lambda>Úcast_to.<locals>.<lambda>ë  s<   ø€ Ü�aœŸ™×&Ñ&¨1×+>Ñ+>×+@Ñ+@ð —$‘$�u“+ð àðr8   )Útorch.utils._pytreerI  rK  rŠ   r>  rG  )rŽ   rD  ÚinputsrI  s   `   r5   Úcast_torP  ß  sK   ø€ õ -à�H‰H�U‹O€EØ”—‘Óô (¨Ó.ˆáô	ð 	ó	€Fð ˆ=Ðr8   c                ó6   • [        [        R                  X5      $ rº   )rP  rŠ   r>  )rD  rO  s     r5   r)  r)  ó  s   € ô ”5—=‘= %Ó0Ð0r8   c          	     óÀ   •  U" [         R                  " U 5      [        U5      5      n[        U UUUUUS9(       + $ ! [         a    [
        R                  S5         gf = f)Nr   z�While minifying the program in accuracy minification mode, ran into a runtime exception which is likely an unrelated issue. Skipping this graphF)r  r  r  r4  r*  rJ   rþ   )rr   r
  Úcompiler_fnr  r!  r"  Úcompiled_gms          r5   Úbackend_accuracy_failsrU  ù  st   € ðÙ!Ü�MŠM˜"ÓÔ>¸~ÓNó
ˆô #ØØØØØ%Ø'ñ
ô 
ð 	
øô ó ô 	�‰ð#ô	
ñ
 ðús   ‚8; »AÁAc               ó8   • U b  U $ [         R                  " U5      $ rº   )r'  Úmake_contiguous_strides_for)Ústrider�   s     r5   Ú_stride_or_defaultrY  "  s   € ð
 Ñ'ˆ6ÐU¬U×-NÒ-NÈuÓ-UÐUr8   c                ó   ^ • U 4S j$ )Nc                ó   >• U b  U $ T$ rº   r\   )r?   Úds    €r5   rL  Ú_mk_defaulter.<locals>.<lambda>+  s   ø€ ˜!™-�QÐ.¨QÐ.r8   r\   )r\  s   `r5   Ú_mk_defaulterr^  *  s	   ø€ Ü.Ð.r8   Úcpuc                  óX   • \ rS rSrS	S jrSSS.         S
S jjrSS jrSS jrSrg)ÚNopInputReaderi5  c                ó   • SU l         g )Nr   ©Útotal)r2   s    r5   r6   ÚNopInputReader.__init__6  s	   € Øˆ�
r8   N©ÚdeviceÚ
dtype_hintc               ó.   • U =R                   S-  sl         g )Nr   rc  )r2   Ústorage_hashÚnbytesrg  rh  s        r5   ÚstorageÚNopInputReader.storage9  s   € ð 	�
Š
�a‰Ž
r8   c                ó   • g rº   r\   ©r2   r  r?  s      r5   ÚtensorÚNopInputReader.tensorC  ó   € Ør8   c                ó   • g rº   r\   ro  s      r5   ÚsymintÚNopInputReader.symintF  rr  r8   rc  ©rR   rS   )
rj  úOptional[str]rk  Úintrg  ú,Optional[torch._prims_common.DeviceLikeType]rh  úOptional[torch.dtype]rR   rS   )r  r   r?  r   rR   zOptional[torch.Tensor])r  r   r?  r   rR   úOptional[int]©	rW   rX   rY   rZ   r6   rl  rp  rt  r[   r\   r8   r5   ra  ra  5  sP   † ôð @DØ,0ñà#ðð ðð
 =ðð *ðð 
õô÷r8   ra  c                  ó¦   • \ rS rSr SSS.     SS jjjrSSS.         SS jjr SSSSSS.                 SS jjjrSS	 jrS
rg)ÚInputReaderiL  N)Úpbarc               óx   • Uc  [         R                  S5        Ub  [        U5      OS U l        / U l        X l        g )Nz0no save_dir specified, will generate random data)rJ   rK   r   Ústorer  r  )r2   Úsave_dirr  s      r5   r6   ÚInputReader.__init__M  s7   € ð ÑÜ�K‰KÐJÔKØ5=Ñ5IÔ'¨Ô1ÈtˆŒ
Ø!ˆŒ	Ø�	r8   rf  c               óÜ  • U R                   b  U R                   R                  S5        [        U5      n[        U5      nU R                  bP  UbM   U R                  R                  U5      nX5R                  :w  a   [        R                  SX5R                  5        U$ [        SU S35        X$R                  -  4n[        S US9n[        XgXC5      R                  5       $ ! [         a     NNf = f)Nr   zdevice mismatch: %s != %szcould not load z , generating random data instead©r�   )r  ÚupdateÚ_device_or_defaultÚ_dtype_or_defaultr�  Úread_storagerg  rJ   rK   rÇ   r   ÚitemsizerY  r   Úuntyped_storage)r2   rj  rk  rg  rh  rl  r�   rX  s           r5   rl  ÚInputReader.storageZ  sÛ   € ð �9‰9Ñ Ø�I‰I×Ñ˜QÔÜ# FÓ+ˆÜ& zÓ2ˆ
Ø�:‰:Ñ! lÑ&>ð
ØŸ*™*×1Ñ1°,Ó?�ð Ÿ^™^Ó+Ü—K‘KÐ ;¸VÇ^Á^ÔTð �Ü�O L >Ð1QÐRÔSØ×.Ñ.Ñ.Ð0ˆÜ# D°Ñ6ˆÜ˜E¨:Ó>×NÑNÓPÐPøô %ó Ùðús   ÁC Ã
C+Ã*C+)Ústorage_offsetrŽ   r	  Úis_leafc               ó,  • [        X2S9n[        U5      n[        U5      n[        U5      n[	        U5      n[
        R                  " / XQR                  US9n	[
        R                  " 5          U	R                  XX#5        S S S 5        U(       dk  [
        R                  " 5          U	R                  [
        R                  S9n	S S S 5        [
        R                  " 5          U	R                  XX#5        S S S 5        [
        R                  R                  R                  U	5      U:X  d   e[
        R                   R#                  X˜5        U R$                  R'                  U	5        U	$ ! , (       d  f       Në= f! , (       d  f       Nº= f! , (       d  f       N›= f)Nr…  )rŽ   rg  r	  )Úmemory_format)rY  Ú_storage_offset_or_defaultrˆ  Ú_is_leaf_or_defaultÚ_requires_grad_or_defaultrŠ   rp  rg  Úno_gradÚset_Úenable_gradÚcloneÚpreserve_formatÚ_subclassesÚ
meta_utilsÚsafe_is_leafÚ_utilsÚset_tensor_metadatar  Úappend)
r2   rl  r�   rX  r�  rŽ   r	  rŽ  ÚmetadataÚts
             r5   rp  ÚInputReader.tensorw  s  € ô $ FÑ8ˆÜ3°NÓCˆÜ! %Ó(ˆÜ% gÓ.ˆÜ1°-Ó@ˆÜ�LŠLØ�e§N¡NÀ-ñ
ˆô �]Š]�_Ø�F‰F�7¨EÔ:÷ æä×"Ò"Õ$Ø—G‘G¬%×*?Ñ*?�GÐ@�÷ %ä—’•Ø—‘�w°Ô>÷ !ä× Ñ ×+Ñ+×8Ñ8¸Ó;¸wÓFÐFÐFÜ�‰×(Ñ(¨Ô5Ø�	‰	×Ñ˜ÔØˆ÷ �_ú÷ %Õ$úç •ús$   Á+E#Â"E4ÃFÅ#
E1Å4
FÆ
Fc                ó<   • U R                   R                  U5        U$ rº   )r  rž  )r2   Úvals     r5   rt  ÚInputReader.symint˜  s   € Ø�	‰	×Ñ˜ÔØˆ
r8   )r  r  r�  rº   )r‚  z
str | Noner  ztqdm | NonerR   rS   )
rj  rw  rk  rx  rg  ry  rh  rz  rR   r   )rl  r   r�   útorch._prims_common.ShapeTyperX  ú(Optional[torch._prims_common.StrideType]r�  r{  rŽ   rz  r	  úOptional[bool]rŽ  r§  rŸ  r   rR   útorch.Tensor)r£  r   rR   r   r|  r\   r8   r5   r~  r~  L  sì   † à%)ðØBFñØ"ðØ4?ðà	öð$ @DØ,0ñQà#ðQð ðQð
 =ðQð *ðQð 
õQðB <@ð	ð )-Ø'+Ø(,Ø"&ñàðð -ðð 9ð	ð &ðð %ðð &ðð  ðð ðð 
ö÷Br8   r~  c                  óz   • \ rS rSrSS.SS jjrSS jrSSS.       SS jjrSS	 jrSS
 jrSS jr	SS jr
Srg)ÚInputWriteri©  F©Ústable_hashc               ó†   • / U l         [        R                  " 5       U l        Xl        Ub	  [        XS9OS U l        0 U l        g )Nr«  )Ú_linesÚ	itertoolsrÑ   Ústorage_counterr‚  r   r�  Úseen_storages)r2   r‚  r¬  s      r5   r6   ÚInputWriter.__init__ª  sC   € Ø!#ˆŒä(ŸšÓ0ˆÔØ Œð Ñ#ô ˜xÒAàð 	Œ
ð
 9;ˆÕr8   c                ór   • S/nUR                  S U R                   5       5        UR                  S5        U$ )Nzdef load_args(reader):c              3  ó,   #   • U  H
  nS U 3v •  M     g7f)rz   Nr\   )r½   Úls     r5   r¿   Ú$InputWriter.lines.<locals>.<genexpr>º  s   é € Ð1¢[ �4˜�s•¢[ùs   ‚zload_args._version = 0)Úextendr®  rž  )r2   Úrs     r5   ÚlinesÚInputWriter.lines¶  s8   € à$ð
ˆð 	
�‰Ñ1 T§[¢[Ó1Ô1ð 	
�‰Ð)Ô*Øˆr8   N)Údevice_hintrh  c          
     óX  • [        U5      nU R                  R                  U5      nUb  U$ S[        U R                  5       3nSn[        S 5      [        U5      :w  a  SU< 3nSnUR                  nUR                  S:X  a  Uc   eUn[        S 5      U:w  a  SU< 3nUR                  5       n	S n
U R                  b5  UR                  R                  S:w  a  U R                  R                  U5      n
U R                  R                  U SU
< SU	< U U S35        XPR                  U'   U$ )	NÚbufr   z, dtype_hint=Úmetaz	, device=z = reader.storage(ú, r}   )r   r±  r@  r€   r°  rˆ  rg  rn   r‡  rk  r�  Úwrite_storager®  rž  )r2   r‹  r»  rh  ÚwsÚvÚmaybe_dtype_hintr›   rg  rk  rj  s              r5   rl  ÚInputWriter.storageÅ  sB  € ô ˜OÓ,ˆØ×Ñ×"Ñ" 2Ó&ˆØ‰=ØˆHØ”$�t×+Ñ+Ó,Ð-Ð.ˆØÐÜ˜TÓ"Ô&7¸
Ó&CÓCØ!.¨z©nÐ=Ðð ˆØ ×'Ñ'ˆØ�;‰;˜&Ó ØÑ*Ð*Ð*Ø ˆFÜ˜dÓ# vÓ-Ø& v¡jÐ1ˆLØ ×'Ñ'Ó)ˆØˆØ�:‰:Ñ! o×&<Ñ&<×&AÑ&AÀVÓ&KØŸ:™:×3Ñ3°OÓDˆLØ�‰×ÑØˆcÐ# LÑ#3°2°f±ZÀ¸~ÐN^ÐM_Ð_`Ðaô	
ð "#×Ñ˜2ÑØˆr8   c                ó”  • SSK JnJn  U R                  UR	                  5       UR
                  UR                  S9n/ nU" U" [        S UR                  S9UR                  5       5      5      (       d1  UR                  [        [        UR                  5       5      5      5        [        S 5      UR
                  :w  a  UR                  SUR
                  < 35        U" [        S 5      UR                  5       :H  5      (       d#  UR                  SUR                  5       < 35        [         R"                  R%                  U5      nU(       a&  UR'                  S UR)                  5        5       5        [+        S 5      UR,                  :w  a  UR                  SUR,                  < 35        [         R.                  R0                  R3                  U5      n[5        S 5      U:w  a  UR                  S	U< 35        U R6                  R                  S
SR9                  U[        [        UR                  5      5      /UQ5      -   SU 3-   5        g )Nr   )Ústatically_known_trueÚsym_eq)rh  r»  r…  zdtype=zstorage_offset=c              3  ó6   #   • U  H  u  pU S U< 3v •  M     g7f)Ú=Nr\   )r½   ÚkrÂ  s      r5   r¿   Ú%InputWriter.tensor.<locals>.<genexpr>û  s   é € ÐIÒ1H©¨˜1˜#˜Q˜q™e�Ò1Hùs   ‚zrequires_grad=zis_leaf=zreader.tensor(r¿  ú)  # )Ú%torch.fx.experimental.symbolic_shapesrÆ  rÇ  rl  r‹  rŽ   rg  rY  r�   rX  rž  rQ   Útuplerˆ  r‘  r�  rŠ   rœ  Úget_tensor_metadatar·  r„   r“  r	  r™  rš  r›  r’  r®  r:   )	r2   rÐ   r   rÆ  rÇ  rl  r  Útensor_metadatarŽ  s	            r5   rp  ÚInputWriter.tensorç  sÊ  € ßWà—,‘,Ø×ÑÓ¨A¯G©GÀÇÁð ð 
ˆð ˆá$ÙÔ% d°!·'±'Ñ:¸A¿H¹H»JÓG÷
ñ 
ð �K‰KœœE !§(¡(£*Ó-Ó.Ô/Ü˜TÓ" a§g¡gÓ-Ø�K‰K˜& §¡¡Ð,Ô-Ù$Ü& tÓ,°×0@Ñ0@Ó0BÑB÷
ñ 
ð �K‰K˜/¨!×*:Ñ*:Ó*<Ñ)?Ð@ÔAÜŸ,™,×:Ñ:¸1Ó=ˆÞØ�K‰KÑI°×1FÑ1FÔ1HÓIÔIÜ$ TÓ*¨a¯o©oÓ=Ø�K‰K˜.¨¯©Ñ(;Ð<Ô=Ü×#Ñ#×.Ñ.×;Ñ;¸AÓ>ˆÜ˜tÓ$¨Ó/Ø�K‰K˜( 7¡+Ð.Ô/Ø�‰×ÑØØ�i‰i˜¤#¤e¨A¯G©G£nÓ"5Ð=¸Ð=Ó>ñ?à�d�Vˆnñõ	
r8   c                ó*  • U R                   R                  SU S[        U5       35        [        U[        [
        45      (       aÎ  U R                   R                  S5        [        U5       Hˆ  u  p4U SU S3n[        U[        R                  5      (       a  U R                  XT5        M?  [        U[        [        R                  45      (       a  U R                  XT5        Mw  U R                  XT5        MŠ     U R                   R                  S5        g g )Nr¸   z# was unsupported type for dumping: z"""Ú[Ú])r®  rž  rn   r  rŒ   rÎ  Ú	enumeraterŠ   r
   rp  rx  ÚSymIntrt  Úunsupported)r2   rÐ   Úargr¾   ÚaÚname_is         r5   r×  ÚInputWriter.unsupported  sÒ   € à�‰×Ñ˜R ˜vÐ%HÌÈcËÈÐTÔUô �cœD¤%˜=×)Ñ)Ø�K‰K×Ñ˜uÔ%Ü! #ž‘�Ø ˜6  1 # Q˜�Ü˜a¤§¡×.Ñ.Ø—K‘K Ö*Ü ¤C¬¯©Ð#6×7Ñ7Ø—K‘K Ö*à×$Ñ$ VÖ/ñ 'ð �K‰K×Ñ˜uÕ%ð *r8   c                óJ   • U R                   R                  SU< SU S35        g )Nzreader.const(rÌ  z!, filtered out during compilation)r®  rž  )r2   rÐ   s     r5   ÚconstÚInputWriter.const  s'   € Ø�‰×ÑØ˜D™8 5¨¨Ð.OÐPõ	
r8   c                ó²   • [        U[        R                  5      (       a  UR                  R                  nU R
                  R                  SU< SU 35        g )Nzreader.symint(rÌ  )r  rŠ   rÖ  rE  Úhintr®  rž  )r2   rÐ   r£  s      r5   rt  ÚInputWriter.symint  s?   € Ü�cœ5Ÿ<™<×(Ñ(Ø—(‘(—-‘-ˆCØ�‰×Ñ˜^¨C©7°%¸°vÐ>Õ?r8   )r®  r‚  r±  r°  r�  )r‚  rw  r¬  rU   rR   rS   )rR   rV   )r‹  r   r»  ry  rh  rz  rR   rQ   )rÐ   rQ   r   r¨  rR   rS   )rÐ   rQ   rØ  r   rR   rS   )rÐ   rQ   rR   rS   )rÐ   rQ   r£  r   rR   rS   )rW   rX   rY   rZ   r6   r¹  rl  rp  r×  rÝ  rt  r[   r\   r8   r5   rª  rª  ©  s\   † ØGL÷ 
;ôð& EIØ,0ñ à'ð ð Bð	 ð
 *ð ð 
õ ôD
ô@&ô$
÷@r8   rª  c           	     óú  ^^^^• SSK Jn  UR                  5        VVs0 s H  u  pVXe_M	     nnnSR                  UR	                  5       5      n[
        R                  " U 5      n	SU S3n
SU S3nSn " S	 S
5      n0 nU=(       d    0 mSUU4S jjmSUU4S jjnU R                  nUR                  " 5        H¤  u  nnUS:X  a  M  [        R                  " UU5      nU(       a>  UR                  5       u  nn[        UR                  S5      5      nUU   nU" UU5      UU'   [        R                  " UU5      nU(       d  MŠ  T" UR                  S5      5      UU'   M¦     S[
        R                  " U 5      R                  ;   aq  U" 5       nUUS'   [        R                   " X©5       HK  nUR                  5       u  nnnn[        UR                  S5      5      nUU   n[#        UUU" UU5      5        MM     U$ s  snnf )aÞ  
Takes in a function which has been printed with print_readable() and constructs kwargs to run it.

Handles Tensor inputs, Symints, and a graph module which might have tensor constants.

Consider a function `forward` defined as follows:

def forward(self, primals_1: "f32[1001, 6]", primals_2: "f32[s0]", primals_3: "Sym(s0)",):
    _tensor_constant0: "i64[4190]" = self._tensor_constant0
    # Further implementation

kwargs = aot_graph_input_parser(forward)
forward(**kwargs)
r   )Údtype_abbrsÚ|z(_tensor_constant\d+): \"(z0)\[\s*(.*?)\s*\]\" = self\.(_tensor_constant\d+)Ú(z)\[\s*(.*?)\s*\]zSym\((s\d+)\)c                  ó   • \ rS rSrSrSrg)Ú/aot_graph_input_parser.<locals>.TensorContaineriI  z#Container for tensors as attributesr\   N)rW   rX   rY   rZ   Ú__doc__r[   r\   r8   r5   ÚTensorContainerrç  I  s   † Ü-r8   ré  rR   c                ó|   >^ • [         R                  " T T;   =(       d    TS LU 4S j5        TR                  T T5      $ )Nc                 ó   >• T  S3$ )Nz; not in symbolic_shapes and default sym shape not passed inr\   )rt  s   €r5   rL  Ú=aot_graph_input_parser.<locals>.get_sym_int.<locals>.<lambda>T  s   ø€ �v�hÐYÑZr8   )rŠ   Ú_checkr@  )rt  Údefault_sym_shapeÚsym_shapes_dicts   `€€r5   Úget_sym_intÚ+aot_graph_input_parser.<locals>.get_sym_intQ  s;   ù€ Ü�ŠØ�oÑ%×FÐ):À$Ð)FÜZô	
ð ×"Ñ" 6Ð+<Ó=Ð=r8   c                óÂ  >• / n/ n[        U 5       Hj  u  pEUR                  5       nSU;   a,  T" U5      nUR                  U5        UR                  U5        MG  U(       d  MP  UR                  [        U5      5        Ml     UR                  (       a  [
        R                  O[
        R                  nU" X!T
S9nU H"  n	[
        R                  R                  X‰5        M$     U$ )NrÍ   )rŽ   rg  )
rÕ  Ústriprž  rx  r‹   rŠ   ÚrandnÚzerosrô   Úmark_dynamic)r�   rŽ   Úresolved_shapeÚdynamic_dimsr¾   ÚdimrÍ   Úconstructorr  r\  rg  rð  s             €€r5   Ú
gen_tensorÚ*aot_graph_input_parser.<locals>.gen_tensorX  s³   ø€ àˆØˆÜ Ö&‰FˆAØ—)‘)“+ˆCØ�c‹zÙ Ó$�Ø×%Ñ% aÔ(Ø×#Ñ# AÖ&ç�3Ø"×)Ñ)¬#¨c«(Ö3ñ 'ð &+×%<×%<”e—k’kÄ%Ç+Á+ˆÙ˜.¸fÑEˆÛˆAÜ�M‰M×&Ñ& sÖ.ñ àˆ
r8   Ú,r   r2   )rt  rQ   rR   rx  )r�   r¥  rŽ   útorch.dtyperR   r
   )Útorch.utils._dtype_abbrsrã  r„   r:   ÚvaluesÚinspectÚ	getsourceÚ__annotations__ÚreÚsearchÚgroupsrÎ  r*   ÚgroupÚ	signaturer�   ÚfinditerÚsetattr)Úfuncrg  Ú
sym_shapesrî  rã  rß   ré   Ú	dtype_mapÚdtype_patternÚsourceÚtensor_assignment_regexÚtensor_regexÚsym_shape_regexré  r?  rû  r   rš   Ú
annotationÚmatchÚ	data_typeÚ	shape_strr�   rŽ   Ú	containerÚ	attr_namert   rð  rï  s    ` `                       @@r5   Úaot_graph_input_parserr  %  sñ  û€ õ* 5ð &1×%6Ñ%6Ô%8ô)Ú%8‘z�sˆŠ
Ñ%8ð ñ )ð Ÿ™ +×"4Ñ"4Ó"6Ó7€Mô ×Ò˜tÓ$€Fð "<¸M¸?ÐJzÐ{ÐØ˜�Ð&6Ð7€LØ&€O÷.ñ .ð  €Fà&0×&6°B€O÷>ð >÷ð ð* ×&Ñ&€KØ(×.Ò.Ö0Ñˆˆzà�HÓÙä—	’	˜,¨
Ó3ˆÞØ#(§<¡<£>Ñ ˆI�yÜ˜)Ÿ/™/¨#Ó.Ó/ˆEØ˜iÑ(ˆEá& u¨eÓ4ˆF�5‰Mä—	’	˜/¨:Ó6ˆßˆ5Ù'¨¯©°A«Ó7ˆF�5‹Mñ 1ð" ”×"Ò" 4Ó(×3Ñ3Ó3Ù#Ó%ˆ	Ø"ˆˆv‰Ü—[’[Ð!8ÖAˆEØ16·±³Ñ.ˆI�y )¨QÜ˜)Ÿ/™/¨#Ó.Ó/ˆEØ˜iÑ(ˆEä�I˜y©*°U¸EÓ*BÖCñ Bð €Mùó[)s   žG7c                óú   ^ ^• [         R                  " 5       m[        R                  R	                  [        R                  R                  T 5      5      m SU4S jjnSU U4S jjn[        R                  " U5        U$ )z†
Decorator to cProfile a given function and save the result to disk on process exit.

Args:
    filename: filename to save profile to
c                óN   >^ • [         R                  " T 5      SU U4S jj5       nU$ )Nc                 ó€   >• TR                  5          T" U 0 UD6TR                  5         $ ! TR                  5         f = frº   )ÚenableÚdisable)r  r?  ÚfnÚprofs     €€r5   ÚwrapperÚ3profile_to_file.<locals>.decorator.<locals>.wrapper—  s1   ø€ à�K‰KŒMðÙ˜4Ð* 6Ñ*à—‘•ø�—‘•ús   “+ «=)r  r   r?  r   rR   r   )Ú	functoolsÚwraps)r  r!  r   s   ` €r5   Ú	decoratorÚ"profile_to_file.<locals>.decorator–  s%   ù€ Ü	�Š˜Ó	÷	ó 
ð	ð ˆr8   c            	     óœ   >• TR                  T 5        [        R                  R                  [        R
                  " ST  ST  S35      5        g )Nz!                Wrote profile to z+, view with:

                    snakeviz z

                )Ú
dump_statsÚsysÚstderrrH   r<   r=   )r3   r   s   €€r5   Úsave_itÚ profile_to_file.<locals>.save_it¡  sK   ø€ Ø�‰˜Ô!Ü�
‰
×ÑÜ�OŠOð"Ø"* ð ,à&˜Zð (ðóõ		
r8   )r  r   rR   r   rv  )ÚcProfileÚProfiler(   r)   r+   Ú
expanduserÚatexitÚregister)r3   r%  r+  r   s   `  @r5   Úprofile_to_filer2  Œ  sW   ù€ ô ×ÒÓ€DÜ�w‰w�‰œrŸw™w×1Ñ1°(Ó;Ó<€H÷	÷
ð 
ô ‡O‚O�GÔØÐr8   rT   )rÓ   rU   rR   rQ   )r   rQ   rR   rS   )r
  úSequence[Any]rR   ú	list[Any])FF)
rr   rž   r  r3  r  rU   r  rU   rR   r   )F)rr   rž   r-  rž   r
  r3  r  rU   r!  rU   r"  rU   rR   rU   )rD  rž   rR   rž   )rŽ   rþ  rD  rž   rO  r4  rR   ú&tuple[torch.fx.GraphModule, list[Any]])rD  rž   rO  r4  rR   r5  )rr   rž   r
  r3  rS  zACallable[[torch.fx.GraphModule, list[Any]], torch.fx.GraphModule]r  rU   r!  rU   r"  rU   rR   rU   )rX  r¦  r�   r¥  rR   ztorch._prims_common.StrideType)r\  r   rR   zCallable[[Optional[T]], T])r»   NN)
r  z&Callable[[list[Tensor]], list[Tensor]]rg  rQ   r  zOptional[dict[str, int]]rî  r{  rR   zdict[str, Any])r3   rQ   rR   zCallable[[T], T])jrè  Ú
__future__r   r0  r  r-  r#  rb   r  r¯  Úloggingr(   r  rÄ   r)  r`   r<   Úcollectionsr   Ú	importlibr   Útypingr   r   r   r	   rŠ   Útorch._prims_commonÚ_prims_commonr'  Útorch._subclasses.meta_utilsr
   Útorch._dynamo.testingr   Útorch._inductor.cpp_builderr   r   Ú torch.multiprocessing.reductionsr   Útorch.utils._content_storer   r   r   r   r   r   r   Úcollections.abcr   r   Ú	torch.hubr   Útorch.storager   Ú	getLoggerrW   rJ   r   Úinductor_configÚ	is_fbcoderü   Úlibfb.py.build_infoÚlibfbr;   Úextra_importsr>   ÚpyÚ
build_infoÚ	BuildInfoÚget_build_ruler.   r:   rI   r!   rf   r†   ri   ÚcacherÒ   rì   rø   rú   r  r*  r  r  r  r4  rG  rP  r)  rU  rY  r^  Úfloat32rˆ  rg  r‡  r‘  r“  r’  ra  r~  rª  r  r2  )r?   s   0r5   Ú<module>rQ     s·  ðñõ$ #ã Û Û Û Û Û Û Û Û 	Û 	Û Û 
Û Û Ý Ý #ß 8Ó 8ã Ý #Û #Ý Ý .Ý @Ý .Ý ;ß Må ß 9Ñ 9ö ß2åÝ,ð ×Ò˜Ó!€áˆCƒL€ñ  Ð 8Ó9€Ø×$Ñ$Ó&€æÛð €
Ø€Ø€
Þò€Jð —‘×$Ñ$×.Ñ.×=Ñ=Ó?×GÑGÈ	ÐSWÓX€JØ—I‘IÉÓTÊÀAÐ!9¸!¸¸BÓ?ÉÑTÓU€Mò 6€÷4ñ 4ônð Ð ÷cñ cðL ‡�óó ðð6 7<÷ 	ð2 5:÷ ô(@ôVô	�Iô 	ô
ð  Øð	0Øð0à
ð0ð ð0ð ð	0ð
 	õ0ðH ð	7ð Øñ7Øð7à ð7ð "ð7ð ð	7ð ð7ð ð7ð 
ö7ôtð*ØðØ3ðØ=Fðà+ôð(1Øð1Ø)2ð1à+ô1ð ð	ð ØñØðà!ðð Sðð ð	ð ðð ðð 
öðRVØ4ðVð )ðVð $ô	Vô/ñ " %§-¡-Ó0Ð Ù" 5§<¢<°Ó#6Ó7Ð Ù*¨1Ó-Ð Ù)¨%Ó0Ð Ù# EÓ*Ð ÷ñ ÷.Nñ N÷zy@ñ y@ð| Ø+/Ø'+ð	dØ
0ðdàðdð )ðdð %ð	dð
 õdõN#ùòq Us   ÅJ5