Ë
    L²jV„  ã                  ó  — d Z ddlm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 ddlmZmZmZ ddlZddlmZ ddl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+m,Z,m-Z- erddl.m/Z/m0Z0 ddl1m2Z2 ddl3m4Z4  e
jj                  e6«      Z7 ed«      Z8 ed«      Z9e9ju                  «       Z;e;rddl<Z=g Z>dZ?dZ@e;reg d¢Z>e=j‚                  j„                  j†                  j‰                  «       j‹                  dd«      Z@dj�                  e>D � cg c]  } d| › d�‘Œ
 c} «      Z?g d¢ZG G d„ d«      ZHd?d„ZId ZJ G d!„ d"«      ZKej˜                  d?d#„«       ZMd$d%œd@d&„ZNd$d%œd@d'„ZOd?d(„ZPdAd)„ZQ G d*„ d+eR«      ZSdBd,„ZT	 	 dC	 	 	 	 	 	 	 	 	 dDd-„ZU	 dEd$d$d.œ	 	 	 	 	 	 	 	 	 	 	 	 	 dFd/„ZVdGd0„ZW	 	 	 	 	 	 	 	 dHd1„ZX	 	 	 	 	 	 dId2„ZY	 dEd$d$d.œ	 	 	 	 	 	 	 	 	 	 	 	 	 dJd3„ZZ	 	 	 	 	 	 dKd4„Z[dLd5„Z\ e\ejº                  «      Z^ e\ ej¾                  d6«      «      Z` e\d«      Za e\d$«      Zb e\d$«      Zc G d7„ d8«      Zd G d9„ d:«      Ze G d;„ d<«      Zf	 	 	 dM	 	 	 	 	 	 	 	 	 dNd=„ZgdOd>„Zhyc c} w )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Ú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                  ó&   — e Zd Zdd„Zdd„Zddd„Zy)	ÚBuckTargetWriterc                ó.  — t         j                  j                  t         j                  j                  |«      «      \  | _        | _        | j
                  j                  dd«      | _        | j                  j                  dd«      › d| j                  › �| _        | j                  | j                  j                  d«      d  | _        | j                  dd  | _        | j                  }||j                  d«      d  dd  }d|› d	| j                  › �| _	        y )
Nz.pyr   ú/ú.zfbcode.é   zfbcode/r   ú:)
ÚosÚpathÚsplitÚabspathÚsubdirÚpy_fileÚreplaceÚtargetÚfindÚcmd_line_path)ÚselfÚfilenameÚtmps      úX/var/www/html/ia-enhanced/venv/lib/python3.12/site-packages/torch/_dynamo/debug_utils.pyÚ__init__z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                óè   — dj                  t        D �cg c]  }d|› d�‘Œ
 c}«      }t        j                  d| j                  › d| j
                  › dt        › d|› d| j                  › d	�«      S c c}w )
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'   )r0   ÚxÚextra_cpp_depss      r3   ÚbuildzBuckTargetWriter.buildi   sŠ   € ØŸ™¼zÖ#J¸! i°¨s°"Ò$5Ò#JÓKˆÜ�‰ðð �;‰;ˆ-ð Ø�l‰lˆ^ð 
ô ˆð ð Ð ð à—I‘I�;ð ð#ó
ð 	
ùò $Ks   ”A/c                óP  — t         j                  j                  | j                  d«      }t	        |d«      5 }|j                  | j                  «       «       d d d «       t        | j                  gz   }|r%t        j                  ddj                  |«      «       |S # 1 sw Y   ŒFxY w)NÚTARGETSÚwzFFound an example that reproduces the error. Run this cmd to repro - %sú )r&   r'   r7   r*   ÚopenÚwriter>   ÚBUCK_CMD_PREFIXr/   ÚlogÚwarning)r0   Ú	print_msgÚtarget_fileÚfdÚ	cmd_splits        r3   rD   zBuckTargetWriter.writeƒ   sˆ   € Ü—g‘g—l‘l 4§;¡;°	Ó:ˆÜ�+˜sÓ#ð 	# rØ�H‰H�T—Z‘Z“\Ô"÷	#ô $ t×'9Ñ'9Ð&:Ñ:ˆ	ÙÜ�K‰KØXØ—‘˜Ó#ôð Ð÷	#ð 	#ús   · BÂB%N)r1   ÚstrÚreturnÚNone©rM   rL   )T)rH   ÚboolrM   ú	list[str])Ú__name__Ú
__module__Ú__qualname__r4   r>   rD   © r5   r3   r    r    Z   s   „ ó6ó
õ4r5   r    c                 ó  — t         j                  j                  t        «       d«      } | €+t	        j
                  «       › dt        j                  «       › �} t         j                  j                  | «      st        j                  | d¬«       | S )NÚminifierz
/minifier_T)Úexist_ok)
r&   r'   r7   r   ÚtempfileÚ
gettempdirÚgetpassÚgetuserÚexistsÚmakedirs)r'   s    r3   Úminifier_dirr_   ‘   sb   € Ü�7‰7�<‰<œ›¨Ó4€DØ€|Ü×%Ñ%Ó'Ð(¨
´7·?±?Ó3DÐ2EÐFˆÜ�7‰7�>‰>˜$ÔÜ
�‰�D 4Õ(Ø€Kr5   é   c                  ó¦  — e Zd Zej                  j
                  ej                  j                  ej                  j                  ej                  j                  ej                  j                  ej                  j                  ej                  j                  ej                  j                  ej                  j                  ej                  j                  ej                  j                  ej                  j                   ej                  j"                  ej                  j$                  ej                  j&                  ej                  j(                  ej                  j*                  ej                  j,                  ej                  j.                  ej                  j0                  ej                  j2                  gZedd„«       Zedd„«       Zy)ÚNNModuleToStringc                óê   — t        «       }| j                  «       D ]2  \  }}t        |«      t        j                  vsŒ"|j                  |«       Œ4 t        |«      dkD  rt        j                  d|«       y)Nr   z-We have not tested reprs of some modules - %sT)	ÚsetÚnamed_childrenÚtyperb   Ú
safe_reprsÚaddÚlenrF   rG   )ÚgmÚcant_convertÚ_Úmodules       r3   Úcan_convert_to_stringz&NNModuleToString.can_convert_to_string¶   sg   € ä“uˆØ×*Ñ*Ó,ò 	)‰IˆAˆvÜ�F‹|Ô#3×#>Ñ#>Ò>Ø× Ñ  Õ(ð	)ô ˆ|Ó˜qÒ Ü�K‰KÐGÈÔVàr5   c                óê  — ddl m} d}t        j                  d«      }| j	                  «       D ]T  \  }}|j                  «       › }t        |j                  «       d «      }|�|j                  r|› d�}||dz  › d|› d|› d	�z  }ŒV | j                  j                  «       D ]Ê  \  }}	|	€Œ	|	j                  «       t        k  r'dd
lm}
 |
j                  t        k\  sJ ‚t!        |	«      }nbt#        j$                  |	«      r'dt'        |	j(                  «      › d|	j*                  › d�}n&dt'        |	j(                  «      › d|	j*                  › d�}|	j                  r|› d�}||dz  › d|› d|› d�z  }ŒÌ | j,                  j                  «       D ]Q  \  }}|€Œ	d}|j                  rd}dt'        |j(                  «      › d|j*                  › |› d�}||dz  › d|› d|› d	�z  }ŒS | || j.                  d«      › d	�z  }|S )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))r`   )Útorch.nn.modules.modulerp   r9   r:   re   Ú__repr__ÚnextÚ
parametersÚis_cudaÚ_buffersÚitemsÚnumelÚMAX_CONSTANT_NUMEL_INLINEÚtorch._tensor_strrs   Ú	thresholdÚreprÚtorchÚis_floating_pointÚlistÚshapeÚdtypeÚ_parametersÚcode)rj   rp   ÚtabÚ	model_strÚmodule_namerm   Ú
module_strÚexample_paramÚbuffer_nameÚbufferrs   Ú
tensor_strÚ
param_nameÚparamÚmaybe_devices                  r3   ÚconvertzNNModuleToString.convertÂ   s>  € å6àˆä—O‘Oðó
ˆ	ð $&×#4Ñ#4Ó#6ò 	IÑˆK˜Ø"ŸO™OÓ-Ð.ˆJô ! ×!2Ñ!2Ó!4°dÓ;ˆMØÐ(¨]×-BÒ-BØ *˜|¨7Ð3�
Ø˜C !™G˜9 E¨+¨°c¸*¸ÀRÐHÑH‰Ið	Ið $&§;¡;×#4Ñ#4Ó#6ò 	ÑˆK˜Øˆ~Øà�|‰|‹~Ô!:Ò:Ý8à!×+Ñ+Ô/HÒHÐHÐHÜ! &›\‘
Ü×(Ñ(¨Ô0Ø+¬D°·±Ó,>Ð+?¸xÈÏÉÀ~ÐUVÐW‘
ð -¬T°&·,±,Ó-?Ð,@ÀÈÏÉÈÐVWÐXð ð �~Š~Ø *˜|¨7Ð3�
ØØ˜‘7�)Ð1°+°¸cÀ*ÀÈSÐQñ‰Ið#	ð* "$§¡×!5Ñ!5Ó!7ò 	HÑˆJ˜Øˆ}ØØˆLØ�}Š}Ø0�Ø:¼4ÀÇÁÓ;LÐ:MÈXÐV[×VaÑVaÐUbÐcoÐbpÐprÐsˆJØ˜C !™G˜9 E¨*¨°S¸¸ÀBÐGÑG‰Ið	Hð  	™
 2§7¡7¨AÓ.Ð/¨rÐ2Ñ2ˆ	ØÐr5   N)rj   útorch.fx.GraphModulerM   rP   )rj   r”   rM   rL   )rR   rS   rT   r�   ÚnnÚLinearÚConv1dÚConv2dÚConv3dÚBatchNorm1dÚBatchNorm2dÚBatchNorm3dÚ	LayerNormÚDropoutÚSoftmaxÚReLUÚGELUÚIdentityÚ	MaxPool2dÚ	EmbeddingÚTanhÚConvTranspose1dÚGLUÚLSTMÚFlattenÚAdaptiveAvgPool2drg   Ústaticmethodrn   r“   rU   r5   r3   rb   rb   �   s0  „ à�‰�‰Ø�‰�‰Ø�‰�‰Ø�‰�‰Ø�‰×ÑØ�‰×ÑØ�‰×ÑØ�‰×ÑØ�‰×ÑØ�‰×ÑØ�‰�‰Ø�‰�‰Ø�‰×ÑØ�‰×ÑØ�‰×ÑØ�‰�‰Ø�‰× Ñ Ø�‰�‰Ø�‰�‰Ø�‰×ÑØ�‰×"Ñ"ð+€Jð0 ò	ó ð	ð ò=ó ñ=r5   rb   c                 ót  — t         j                  j                  «       syd} 	 t         j                  j                  €ht        j                  ddg«      }|j                  «       j                  d«      }dj                  |D �cg c]  }|dk7  sŒ	d|› d�‘Œ c}«      }| |› d�z  } n| d	z  } t        d„ t        t         j                  j                  «       «      D «       «      }| dz  } |j                  «       D ]  \  }}| d|› d|› d�z  } Œ | dz  } | S c c}w # t        t
        j                  f$ r | d
z  } Y ŒŒw xY w)Nz:# torch.cuda.is_available()==False, no GPU info collected
z# CUDA Info: 
Únvccz	--versionr   r   z# z 
z'# Not searching for nvcc on ROCM setup
z# nvcc not found
c              3  óZ   K  — | ]#  }t         j                  j                  |«      –— Œ% y ­w©N)r�   ÚcudaÚget_device_name)Ú.0Úis     r3   ú	<genexpr>z,_cuda_system_info_comment.<locals>.<genexpr>  s$   è ø€ ò Ø*+Œ�
‰
×"Ñ" 1×%ñùs   ‚)+z# GPU Hardware Info: 
z : )r�   r°   Úis_availableÚversionÚhipÚ
subprocessÚcheck_outputÚdecoder(   r7   ÚFileNotFoundErrorÚCalledProcessErrorr   ÚrangeÚdevice_countr{   )r‰   Úcuda_version_outÚcuda_version_linesÚsÚcommentÚ	gpu_namesÚnameÚcounts           r3   Ú_cuda_system_info_commentrÆ     sJ  € ä�:‰:×"Ñ"Ô$ØLà!€Ið	*Ü�=‰=×ÑÐ$Ü)×6Ñ6¸ÀÐ7LÓMÐØ!1×!8Ñ!8Ó!:×!@Ñ!@ÀÓ!FÐØ—g‘gÐ4FÖR¨qÈ!ÈrË'  A 3 cš{ÒRÓSˆGØ˜G˜9 B˜Ñ'‰IàÐCÑCˆIô ñ Ü/4´U·Z±Z×5LÑ5LÓ5NÓ/Oôó €Ið Ð*Ñ*€IØ —‘Ó(ò .‰ˆˆeØ�r˜$˜˜s 5 '¨Ð-Ñ-‰	ð.à�Ñ€IØÐùò Søô œz×<Ñ<Ð=ò *ØÐ)Ñ)Š	ð*ús*   £AD Â
DÂDÂD ÄD ÄD7Ä6D7F)Ústable_outputc                ó  ‡‡— | ryg d¢Šg d¢Šdˆˆfd„}t         j                  j                  «       D ��cg c]&  \  }} ||«      rd|› d|j                  dd«      › d�‘Œ( }}}d	j	                  |«      }t        d
|› d�«      S c c}}w )zl
    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                ó:   •‡ — t        ˆ fd„‰D «       «      xr ‰ ‰vS )Nc              3  ó&   •K  — | ]  }|‰v –— Œ
 y ­wr¯   rU   )r²   ÚstringÚkeys     €r3   r´   z;generate_env_vars_string.<locals>.filter.<locals>.<genexpr>*  s   øè ø€ Ò: V�6˜S”=Ñ:ùs   ƒ)Úany)rÓ   Ú
allow_listÚ	skip_lists   `€€r3   Úfilterz(generate_env_vars_string.<locals>.filter)  s   ù€ ÜÓ:¨zÔ:Ó:ÒS¸sÈ)Ð?SÐSr5   zos.environ['z'] = 'ú'ú"r   z
import os
z
    )rÓ   rL   rM   rP   )r&   Úenvironr{   r,   r7   r   )rÇ   r×   rÓ   ÚvalueÚconfig_linesÚconfig_stringrÕ   rÖ   s         @@r3   Úgenerate_env_vars_stringrÞ     s£   ù€ ñ Ø<â:€JÚU€IöTô
 Ÿ*™*×*Ñ*Ó,÷áˆC�Ù�#Œ;ð ˜˜˜V E§M¡M°#°sÓ$;Ð#<¸AÒ@ð€Lñ ð
 —I‘I˜lÓ+€MÜ#ð )à€ð ð%ó 	ð 	ùós   ¶+Bc           	     ó^  — dd l }dd l}| ry|j                  j                  j                  j                  «       }d|j                  j                  j                  «       › d|j                  j                  j                  «       › d|j                  j                  j                  «       › d|› d�	S )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      r3   Úgenerate_config_stringrê   8  s¥   € Û"Û!áØ;àŸ(™(×/Ñ/×7Ñ7×FÑFÓHÐðð
 ‡�×Ñ×$Ñ$Ó&Ð 'ð (Ø‡�×Ñ×&Ñ&Ó(Ð )ð *Ø×Ñ×Ñ×'Ñ'Ó)Ð *ð +ØÐ ð ð	ð 	r5   c                 óR   — t         j                  j                  t        «       d«      S )Nzminifier_launcher.py)r&   r'   r7   r_   rU   r5   r3   Úget_minifier_repro_pathrì   L  s   € Ü�7‰7�<‰<œ›Ð(>Ó?Ð?r5   c                óR  — t        «       }t        j                  d|«       t        rt	        |«      j                  «        	 t        |d«      5 }|j                  | «       d d d «       y # 1 sw Y   y xY w# t        $ r)}t        j                  d«       t        d|› �«      |‚d }~ww xY w)NzWriting minified repro to:
%srA   r   zCould not write to )
rì   rF   rG   Úuse_buckr    rD   rC   ÚOSErrorÚ	exceptionÚNotImplementedError)ÚcontentsÚminified_repro_pathrJ   Úes       r3   Úhelper_for_dump_minifyrõ   P  s›   € Ü1Ó3ÐÜ‡K�KÐ0Ð2EÔFåÜÐ,Ó-×3Ñ3Ô5ðVÜÐ% sÓ+ð 	¨rØ�H‰H�XÔ÷	÷ 	ñ 	ûô ò VÜ�‰�bÔÜ!Ð$7Ð8KÐ7LÐ"MÓNÐTUÐUûðVús6   ÁA4 ÁA(ÁA4 Á(A1Á-A4 Á1A4 Á4	B&Á=$B!Â!B&c                  ó   — e Zd Zy)ÚAccuracyErrorN)rR   rS   rT   rU   r5   r3   r÷   r÷   _  s   „ Ør5   r÷   c                óÌ   — t        | «      }t        t        | «      «      D ]A  }t        ||   t        j
                  «      sŒ!||   j                  | |   j                  «       ŒC |S )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½   ri   Ú
isinstancer�   r	   Úrequires_grad_Úrequires_grad)Úexample_inputsÚcloned_inputsÚidxs      r3   Úclone_inputs_retaining_gradnessrÿ   c  sb   € ô ! Ó0€MÜ”S˜Ó(Ó)ò QˆÜ�m CÑ(¬%¯,©,Õ7Ø˜#Ñ×-Ñ-¨n¸SÑ.A×.OÑ.OÕPðQð Ðr5   c                ó&  — ddl m}m}m} t	        j
                  | «      } |st        |«      }t        | d«      r| j                  d«       t        | dd«      r | |«      n | |Ž }|r|S  ||«      r ||«      }|j                  «         || |d|«      S )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)	rj   ÚargsÚonly_fwdÚdisable_cloner  r  r  ÚoutÚlosss	            r3   Úrun_fwd_maybe_bwdr  p  sŒ   € ÷ SÑRä	�‰�rÓ	€BÙÜ.¨tÓ4ˆäˆr�;ÔØ
�‰�TÔô ˜b -°Ô7‰"ˆTŒ(¹RÀ¸Y€CáØˆ
Ù˜ÔÙ$ SÓ)ˆØ�‰ŒÙ˜2˜s D¨$Ó/Ð/r5   ©Úrequire_fp64Úignore_non_fpc               óÀ  — ddl m} t        | ||«      }d}t        j                  r9	 t        t        j                  | «      t        |«      «      \  }	}
t        |	|
|«      }	 t        |||«      } ||||t        j                  d|¬«      }|S # t        $ r% |rt        d«      ‚t        j                  d«       Y ŒYw xY w# t        $ r t        j                  d«       Y yw xY w)	aa  
    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ÚRuntimeErrorrF   rG   rð   Úrepro_tolerance)rj   Úopt_gmrü   r  r  r  r  ÚrefÚfp64_refÚ
fp64_modelÚfp64_examplesÚresÚpassings                r3   Úsame_two_modelsr&  �  sô   € õ" ä
˜B °Ó
9€Cà€HÜ×&Ò&ð
	;Ü(4Ü—‘˜bÓ!Ô#BÀ>Ó#Ró)Ñ%ˆJ˜ô )¨°]ÀHÓMˆHð
Ü ¨¸ÓAˆñ ØØØÜ×"Ñ"ØØ#ô€Gð €Nøô7 ò 	;ÙÜ"Ø|óð ô �K‰KÐ9Ö:ð	;ûô ò ô 	�‰ð$ô	
ñ
 ðús#   §8B Á B< Â+B9Â8B9Â<CÃCc                óä  — | j                   j                  D �]+  }|j                  dk(  r°|j                  t        j
                  j                  j                  j                  u rvt        |j                  «      dk(  sJ ‚t        |j                  d   «      rD|j                  d   t        j                  k7  r$|j                  d   t        j                  f|_
        |j                  dk(  sŒÓ|j                  j                  d«      }|€Œñt        |«      sŒýt        |j                  «      }t        j                  |d<   ||_        �Œ. | j                   j!                  «        | j#                  «        | S )NÚcall_functionrr   r   r   r…   )ÚgraphÚnodesÚopr-   r�   ÚopsÚprimsÚconvert_element_typeÚdefaultri   r  r   Úfloat64ÚkwargsÚgetÚdictÚlintÚ	recompile)ÚmodelÚnoder…   Ú
new_kwargss       r3   Úcast_dtype_args_to_fp64r9  Ê  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ÔØ€Lr5   c                óŽ   ‡ — ddl m} |j                  ‰ «      }‰ t        j                  k(  rt        |«      } |ˆ fd„|«      }||fS )Nr   )Útree_mapc                ó~   •— t        | t        j                  «      r!| j                  «       r| j	                  ‰«      S | S r¯   )rù   r�   r	   r‚   Úto)r<   r…   s    €r3   ú<lambda>zcast_to.<locals>.<lambda>ë  s3   ø€ Ü�aœŸ™Ô&¨1×+>Ñ+>Ô+@ð —$‘$�u“+€ àð r5   )Útorch.utils._pytreer;  r=  r�   r0  r9  )r…   r6  Úinputsr;  s   `   r3   Úcast_torA  ß  sM   ø€ õ -à�H‰H�U‹O€EØ”—‘Òô (¨Ó.ˆáó	ð 	ó	€Fð �&ˆ=Ðr5   c                ó8   — t        t        j                  | |«      S r¯   )rA  r�   r0  )r6  r@  s     r3   r  r  ó  s   € ô ”5—=‘= %¨Ó0Ð0r5   c               óº   — 	  |t        j                  | «      t        |«      «      }t        | |||||¬«       S # t        $ r t
        j                  d«       Y yw xY w)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ÿ   r&  r  rF   rð   )rj   rü   Úcompiler_fnr  r  r  Úcompiled_gms          r3   Úbackend_accuracy_failsrF  ù  st   € ðÙ!Ü�M‰M˜"ÓÔ>¸~ÓNó
ˆô #ØØØØØ%Ø'ô
ð 
ð 	
øô ò ô 	�‰ð#ô	
ñ
 ðús   ‚69 ¹AÁAc               ó4   — | �| S t        j                  |«      S r¯   )r  Úmake_contiguous_strides_for)Ústrider„   s     r3   Ú_stride_or_defaultrJ  "  s   € ð
 Ð'ˆ6ÐU¬U×-NÑ-NÈuÓ-UÐUr5   c                ó   ‡ — ˆ fd„S )Nc                ó   •— | �| S ‰S r¯   rU   )r<   Úds    €r3   r>  z_mk_defaulter.<locals>.<lambda>+  s   ø€ ˜!˜-�Q€ ¨Q€ r5   rU   )rM  s   `r3   Ú_mk_defaulterrN  *  s	   ø€ Û.Ð.r5   Úcpuc                  óf   — e Zd Zdd„Zdddœ	 	 	 	 	 	 	 	 	 dd„Zdd„Zdd„Zdd„Zdd„Zdd	„Z	dd
„Z
y)ÚNopInputReaderc                ó   — d| _         y )Nr   ©Útotal)r0   s    r3   r4   zNopInputReader.__init__6  s	   € Øˆ�
r5   N©ÚdeviceÚ
dtype_hintc               ó.   — | xj                   dz  c_         y ©Nr   rS  )r0   Ústorage_hashÚnbytesrV  rW  s        r3   ÚstoragezNopInputReader.storage9  s   € ð 	�
Š
�a‰Ž
r5   c                 ó   — y r¯   rU   ©r0   r  r1  s      r3   ÚtensorzNopInputReader.tensorC  ó   € Ør5   c                 ó   — y r¯   rU   r^  s      r3   ÚsymintzNopInputReader.symintF  r`  r5   c                 ó   — y r¯   rU   ©r0   rÄ   s     r3   ÚconstzNopInputReader.constI  r`  r5   c                 ó   — y r¯   rU   rd  s     r3   ÚunsupportedzNopInputReader.unsupportedL  r`  r5   c                 ó   — y r¯   rU   )r0   Údevice_typeÚdevice_indexs      r3   Ú	generatorzNopInputReader.generatorO  r`  r5   c                ó.   — | xj                   dz  c_         y rY  rS  ©r0   Úscript_class_names     r3   ÚopaquezNopInputReader.opaqueR  s   € Ø�
Š
�a‰Ž
r5   ©rM   rN   )
rZ  ú
str | Noner[  ÚintrV  ú)torch._prims_common.DeviceLikeType | NonerW  útorch.dtype | NonerM   rN   )r  r   r1  r   rM   ztorch.Tensor | None)r  r   r1  r   rM   ú
int | None©rÄ   rL   rM   rN   )ri  rL   rj  rr  rM   rN   ©rn  rL   rM   rN   ©rR   rS   rT   r4   r\  r_  rb  re  rg  rk  ro  rU   r5   r3   rQ  rQ  5  sc   „ óð =AØ)-ñà ðð ðð
 :ðð 'ðð 
óóóóóóôr5   rQ  c                  ó¬   — e Zd Z	 dddœ	 	 	 	 	 dd„Zdddœ	 	 	 	 	 	 	 	 	 dd„Z	 ddddddœ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Zdd	„Zdd
„Zdd„Z	dd„Z
y)ÚInputReaderN)Úpbarc               óv   — |€t         j                  d«       |�t        |«      nd | _        g | _        || _        y )Nz0no save_dir specified, will generate random data)rF   rG   r   Ústorer  r{  )r0   Úsave_dirr{  s      r3   r4   zInputReader.__init__Y  s9   € ð ÐÜ�K‰KÐJÔKØ5=Ð5IÔ'¨Ô1ÈtˆŒ
Ø!ˆŒ	Øˆ�	r5   rU  c               óâ  — | j                   �| j                   j                  d«       t        |«      }t        |«      }| j                  �P|�N	 | j                  j                  |«      }||j                  k7  r!t        j                  d||j                  «       |S t        d|› d�«       ||j                  z  f}t        d |¬«      }t        ||||«      j                  «       S # t        $ r Y ŒSw xY w)Nr   zdevice mismatch: %s != %szcould not load z , generating random data instead©r„   )r{  ÚupdateÚ_device_or_defaultÚ_dtype_or_defaultr}  Úread_storagerV  rF   rG   r»   r   ÚitemsizerJ  r
   Úuntyped_storage)r0   rZ  r[  rV  rW  r\  r„   rI  s           r3   r\  zInputReader.storagef  så   € ð �9‰9Ð Ø�I‰I×Ñ˜QÔÜ# FÓ+ˆÜ& zÓ2ˆ
Ø�:‰:Ð! lÐ&>ð
ØŸ*™*×1Ñ1°,Ó?�ð ˜WŸ^™^Ò+Ü—K‘KÐ ;¸VÀWÇ^Á^ÔTð �Ü�O L >Ð1QÐRÔSØ˜:×.Ñ.Ñ.Ð0ˆÜ# D°Ô6ˆÜ˜E 6¨:°vÓ>×NÑNÓPÐPøô %ò Ùðús   ÁC" Ã"	C.Ã-C.)Ústorage_offsetr…   rû   Úis_leafc               ó  — t        ||¬«      }t        |«      }t        |«      }t        |«      }t	        |«      }t        j                  g ||j                  |¬«      }	t        j                  «       5  |	j                  ||||«       d d d «       |snt        j                  «       5  |	j                  t
        j                  ¬«      }	d d d «       t        j                  «       5  |	j                  ||||«       d d d «       t
        j                  j                  j                  |	«      |k(  sJ ‚t
        j                   j#                  |	|«       | j$                  j'                  |	«       |	S # 1 sw Y   ŒäxY w# 1 sw Y   Œ±xY w# 1 sw Y   ŒŒxY w)Nr€  )r…   rV  rû   )Úmemory_format)rJ  Ú_storage_offset_or_defaultrƒ  Ú_is_leaf_or_defaultÚ_requires_grad_or_defaultr�   r_  rV  Úno_gradÚset_Úenable_gradÚcloneÚpreserve_formatÚ_subclassesÚ
meta_utilsÚsafe_is_leafÚ_utilsÚset_tensor_metadatar  Úappend)
r0   r\  r„   rI  r‡  r…   rû   rˆ  ÚmetadataÚts
             r3   r_  zInputReader.tensorƒ  sC  € ô $ F°%Ô8ˆÜ3°NÓCˆÜ! %Ó(ˆÜ% gÓ.ˆÜ1°-Ó@ˆÜ�L‰LØ�e G§N¡NÀ-ô
ˆô �]‰]‹_ñ 	;Ø�F‰F�7˜N¨E°6Ô:÷	;áä×"Ñ"Ó$ñ AØ—G‘G¬%×*?Ñ*?�GÓ@�÷Aä—‘“ñ ?Ø—‘�w °°vÔ>÷?ä× Ñ ×+Ñ+×8Ñ8¸Ó;¸wÒFÐFÐFÜ�‰×(Ñ(¨¨HÔ5Ø�	‰	×Ñ˜ÔØˆ÷	;ð 	;ú÷Að Aú÷?ð ?ús$   Á1E)Â$!E5Ã!FÅ)E2Å5E>ÆF
c                ó<   — | j                   j                  |«       |S r¯   ©r  r˜  )r0   Úvals     r3   rb  zInputReader.symint¤  s   € Ø�	‰	×Ñ˜ÔØˆ
r5   c                ó:   — | j                   j                  d «       y r¯   rœ  rd  s     r3   re  zInputReader.const¨  ó   € Ø�	‰	×Ñ˜Õr5   c                ó:   — | j                   j                  d «       y r¯   rœ  rd  s     r3   rg  zInputReader.unsupported«  rŸ  r5   c                ó’   — t         j                  j                  |   j                  «       }| j                  j                  |«       |S r¯   )r�   r°   Údefault_generatorsÚclone_stater  r˜  )r0   ri  rj  Úgens       r3   rk  zInputReader.generator®  s6   € Ü�j‰j×+Ñ+¨LÑ9×EÑEÓGˆØ�	‰	×Ñ˜ÔØˆ
r5   c                ó:   — | j                   j                  d «       y r¯   rœ  rm  s     r3   ro  zInputReader.opaque³  rŸ  r5   r¯   )r~  rq  r{  ztqdm | NonerM   rN   )
rZ  rq  r[  rr  rV  rs  rW  rt  rM   r   )r\  r   r„   útorch._prims_common.ShapeTyperI  ú%torch._prims_common.StrideType | Noner‡  ru  r…   rt  rû   úbool | Nonerˆ  r¨  r™  r   rM   útorch.Tensor)r�  r   rM   r   rv  )ri  rL   rj  rr  rM   útorch._C.Generatorrw  rx  rU   r5   r3   rz  rz  X  sþ   „ à%)ðØBFñØ"ðØ4?ðà	óð$ =AØ)-ñQà ðQð ðQð
 :ðQð 'ðQð 
óQðB 9=ð	ð &*Ø$(Ø%)Ø#ñàðð -ðð 6ð	ð #ðð "ðð #ðð ðð ðð 
óóBóóóô
r5   rz  c                  óp   — e Zd Zddœdd„Zdd„Zdddœ	 	 	 	 	 	 	 dd„Zdd„Zdd	„Zdd
„Zdd„Z	dd„Z
dd„Zy)ÚInputWriterF©Ústable_hashc               óŒ   — g | _         t        j                  «       | _        || _        |�t        ||¬«      nd | _        i | _        y )Nr­  )Ú_linesÚ	itertoolsrÅ   Ústorage_counterr~  r   r}  Úseen_storages)r0   r~  r®  s      r3   r4   zInputWriter.__init__Ä  sG   € Ø!#ˆŒä(Ÿ™Ó0ˆÔØ ˆŒð Ð#ô ˜x°[ÕAàð 	Œ
ð
 9;ˆÕr5   c                ór   — dg}|j                  d„ | j                  D «       «       |j                  d«       |S )Nzdef load_args(reader):c              3  ó&   K  — | ]	  }d |› �–— Œ y­w)rq   NrU   )r²   Úls     r3   r´   z$InputWriter.lines.<locals>.<genexpr>Ô  s   è ø€ Ò1 �4˜�s”Ñ1ùs   ‚zload_args._version = 0)Úextendr°  r˜  )r0   Úrs     r3   ÚlineszInputWriter.linesÐ  s8   € à$ð
ˆð 	
�‰Ñ1 T§[¡[Ô1Ô1ð 	
�‰Ð)Ô*Øˆr5   N)Údevice_hintrW  c          
     óD  — t        |«      }| j                  j                  |«      }|�|S dt        | j                  «      › �}d}t        d «      t        |«      k7  rd|›�}d}|j                  }|j                  dk(  r|€J ‚|}t        d «      |k7  rd|›�}|j                  «       }	d }
| j                  �4|j                  j                  dk7  r| j                  j                  |«      }
| j                  j                  |› d|
›d|	›|› |› d�«       || j                  |<   |S )	NÚbufr   z, dtype_hint=Úmetaz	, device=z = reader.storage(ú, rt   )r   r³  r2  rw   r²  rƒ  rV  rf   r‚  r[  r}  Úwrite_storager°  r˜  )r0   r†  rº  rW  ÚwsÚvÚmaybe_dtype_hintr’   rV  r[  rZ  s              r3   r\  zInputWriter.storageß  sD  € ô ˜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ÑØˆr5   c                ót  — ddl m}m} | j                  |j	                  «       |j
                  |j                  ¬«      }g } | |t        d |j                  ¬«      |j                  «       «      «      s1|j                  t        t        |j                  «       «      «      «       t        d «      |j
                  k7  r|j                  d|j
                  ›�«        |t        d «      |j                  «       k(  «      s"|j                  d|j                  «       ›�«       t         j"                  j%                  |«      }|r&|j'                  d„ |j)                  «       D «       «       t+        d «      |j,                  k7  r|j                  d|j,                  ›�«       t         j.                  j0                  j3                  |«      }t5        d «      |k7  r|j                  d	|›�«       | j6                  j                  d
dj9                  |t        t        |j                  «      «      g|¢«      z   d|› �z   «       y )Nr   )Ústatically_known_trueÚsym_eq)rW  rº  r€  zdtype=zstorage_offset=c              3  ó0   K  — | ]  \  }}|› d |›�–— Œ y­w)ú=NrU   )r²   ÚkrÁ  s      r3   r´   z%InputWriter.tensor.<locals>.<genexpr>  s   è ø€ ÒI©¨¨A˜1˜#˜Q˜q˜eœÑIùs   ‚zrequires_grad=zis_leaf=zreader.tensor(r¾  ú)  # )Ú%torch.fx.experimental.symbolic_shapesrÄ  rÅ  r\  r†  r…   rV  rJ  r„   rI  r˜  rL   Útuplerƒ  r‹  r‡  r�   r–  Úget_tensor_metadatar·  r{   r�  rû   r“  r”  r•  rŒ  r°  r7   )	r0   rÄ   rš  rÄ  rÅ  r\  r  Útensor_metadatarˆ  s	            r3   r_  z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ñõ	
r5   c                ó  — | j                   j                  d|›dt        |«      › �«       t        |t        t
        f«      rÄ| j                   j                  d«       t        |«      D ]  \  }}|› d|› d�}t        |t        j                  «      r| j                  ||«       Œ;t        |t        t        j                  f«      r| j                  ||«       Œn| j                  ||«       Œ� | j                   j                  d«       y y )Nzreader.unsupported(z#)  # unsupported type for dumping: z"""ú[ú])r°  r˜  rf   rù   rƒ   rË  Ú	enumerater�   r	   r_  rr  ÚSymIntrb  rg  )r0   rÄ   Úargr³   ÚaÚname_is         r3   rg  zInputWriter.unsupported!  sÚ   € à�‰×ÑØ! $ Ð)LÌTÐRUËYÈKÐXô	
ô
 �cœD¤%˜=Ô)Ø�K‰K×Ñ˜uÔ%Ü! #›ò 0‘��1Ø ˜6  1 # Q˜�Ü˜a¤§¡Ô.Ø—K‘K ¨Õ*Ü ¤C¬¯©Ð#6Ô7Ø—K‘K ¨Õ*à×$Ñ$ V¨QÕ/ð0ð �K‰K×Ñ˜uÕ%ð *r5   c                óH   — | j                   j                  d|›d|› d�«       y )Nzreader.const(rÉ  z!, filtered out during compilation©r°  r˜  rd  s     r3   re  zInputWriter.const5  s'   € Ø�‰×ÑØ˜D˜8 5¨¨Ð.OÐPõ	
r5   c                ó¦   — t        |t        j                  «      r|j                  j                  }| j
                  j                  d|›d|› �«       y )Nzreader.symint(rÉ  )rù   r�   rÒ  r7  Úhintr°  r˜  )r0   rÄ   r�  s      r3   rb  zInputWriter.symint;  s<   € Ü�cœ5Ÿ<™<Ô(Ø—(‘(—-‘-ˆCØ�‰×Ñ˜^¨C¨7°%¸°vÐ>Õ?r5   c                óŒ   — |j                   }| j                  j                  d|j                  ›d|j                  ›d|› �«       y )Nzreader.generator(r¾  rÉ  )rV  r°  r˜  rf   Úindex)r0   rÄ   rÓ  rV  s       r3   rk  zInputWriter.generator@  s<   € Ø—‘ˆØ�‰×ÑØ §¡˜¨b°·±Ð0@ÀÀdÀVÐLõ	
r5   c                óF   — | j                   j                  d|›d|› �«       y )Nzreader.opaque(rÉ  r×  )r0   rÄ   rn  s      r3   ro  zInputWriter.opaqueF  s#   € Ø�‰×Ñ˜^Ð,=Ð+@ÀÀdÀVÐLÕMr5   )r~  rq  r®  rP   rM   rN   )rM   rQ   )r†  r   rº  rs  rW  rt  rM   rL   )rÄ   rL   rš  r©  rM   rN   )rÄ   rL   rÓ  r   rM   rN   rv  )rÄ   rL   r�  r   rM   rN   )rÄ   rL   rÓ  rª  rM   rN   )rÄ   rL   rn  rL   rM   rN   )rR   rS   rT   r4   r¹  r\  r_  rg  re  rb  rk  ro  rU   r5   r3   r¬  r¬  Ã  sf   „ ØDIõ 
;óð& BFØ)-ñ à'ð ð ?ð	 ð
 'ð ð 
ó óD
ó@&ó(
ó@ó

ôNr5   r¬  c           	     ó¸  ‡‡‡‡— ddl m} |j                  «       D ��ci c]  \  }}||“Œ
 }}}dj                  |j	                  «       «      }t        j                  | «      }	d|› d�}
d|› d�}d} G d	„ d
«      }i }|xs i Šdˆˆfd„Šdˆˆfd„}| j                  } |j                  «       D ]”  \  }}|dk(  rŒt        j                  ||«      }|r>|j                  «       \  }}t        |j                  d«      «      }||   } |||«      ||<   t        j                  ||«      }|sŒ{ ‰|j                  d«      «      ||<   Œ– dt        j                  | «      j                  v ro |«       }||d<   t        j                   |
|	«      D ]J  }|j                  «       \  }}}}t        |j                  d«      «      }||   }t#        || |||«      «       ŒL |S c c}}w )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                  ó   — e Zd ZdZy)ú/aot_graph_input_parser.<locals>.TensorContainerz#Container for tensors as attributesN)rR   rS   rT   Ú__doc__rU   r5   r3   ÚTensorContainerrâ  n  s   „ Ú-r5   rä  rM   c                ól   •‡ — t        j                  ‰ ‰v xs ‰d uˆ fd„«       ‰j                  ‰ ‰«      S )Nc                 ó   •— ‰ › d�S )Nz; not in symbolic_shapes and default sym shape not passed inrU   )rb  s   €r3   r>  z=aot_graph_input_parser.<locals>.get_sym_int.<locals>.<lambda>y  s   ø€ �v�hÐYÐZ€ r5   )r�   Ú_checkr2  )rb  Údefault_sym_shapeÚsym_shapes_dicts   `€€r3   Úget_sym_intz+aot_graph_input_parser.<locals>.get_sym_intv  s;   ù€ Ü�‰Ø�oÐ%ÒFÐ):À$Ð)FÛZô	
ð ×"Ñ" 6Ð+<Ó=Ð=r5   c                óª  •— g }g }t        | «      D ]a  \  }}|j                  «       }d|v r+ ‰|«      }|j                  |«       |j                  |«       ŒE|sŒH|j                  t        |«      «       Œc |j                  rt
        j                  nt
        j                  } |||‰
¬«      }|D ]"  }	t
        j                  j                  ||	«       Œ$ |S )NrÁ   )r…   rV  )
rÑ  Ústripr˜  rr  r‚   r�   ÚrandnÚzerosræ   Úmark_dynamic)r„   r…   Úresolved_shapeÚdynamic_dimsr³   ÚdimrÁ   Úconstructorr  rM  rV  rê  s             €€r3   Ú
gen_tensorz*aot_graph_input_parser.<locals>.gen_tensor}  sÁ   ø€ àˆØˆÜ Ó&ò 	4‰FˆAˆsØ—)‘)“+ˆCØ�c‰zÙ Ó$�Ø×%Ñ% aÔ(Ø×#Ñ# AÕ&âØ"×)Ñ)¬#¨c«(Õ3ð	4ð &+×%<Ò%<”e—k’kÄ%Ç+Á+ˆÙ˜.°¸fÔEˆØò 	/ˆAÜ�M‰M×&Ñ& s¨AÕ.ð	/àˆ
r5   ú,r   r0   )rb  rL   rM   rr  )r„   r¦  r…   útorch.dtyperM   r	   )Útorch.utils._dtype_abbrsrÞ  r{   r7   ÚvaluesÚinspectÚ	getsourceÚ__annotations__ÚreÚsearchÚgroupsrË  r(   ÚgroupÚ	signaturerx   ÚfinditerÚsetattr)ÚfuncrV  Ú
sym_shapesrè  rÞ  rÓ   rÛ   Ú	dtype_mapÚdtype_patternÚsourceÚtensor_assignment_regexÚtensor_regexÚsym_shape_regexrä  r1  rô  r   r‘   Ú
annotationÚmatchÚ	data_typeÚ	shape_strr„   r…   Ú	containerÚ	attr_namerl   rê  ré  s    ` `                       @@r3   Úaot_graph_input_parserr  J  sõ  û€ õ* 5ð &1×%6Ñ%6Ó%8÷)Ù!�s˜Eˆˆs‰
ð)€Iñ )ð Ÿ™ +×"4Ñ"4Ó"6Ó7€Mô ×Ñ˜tÓ$€Fð "<¸M¸?ÐJzÐ{ÐØ˜�Ð&6Ð7€LØ&€O÷.ñ .ð  €Fà&0Ò&6°B€Oö>öð* ×&Ñ&€KØ.˜[×.Ñ.Ó0ò 8Ñˆˆzà�HÒØä—	‘	˜,¨
Ó3ˆÙØ#(§<¡<£>Ñ ˆI�yÜ˜)Ÿ/™/¨#Ó.Ó/ˆEØ˜iÑ(ˆEá& u¨eÓ4ˆF�5‰Mä—	‘	˜/¨:Ó6ˆÚÙ'¨¯©°A«Ó7ˆF�5ŠMð8ð" ”×"Ñ" 4Ó(×3Ñ3Ñ3Ù#Ó%ˆ	Ø"ˆˆv‰Ü—[‘[Ð!8¸&ÓAò 	DˆEØ16·±³Ñ.ˆI�y )¨QÜ˜)Ÿ/™/¨#Ó.Ó/ˆEØ˜iÑ(ˆEä�I˜y©*°U¸EÓ*BÕCð	Dð €Mùó[)s   žGc                óî   ‡ ‡— t        j                  «       Št        j                  j	                  t        j                  j                  ‰ «      «      Š dˆfd„}dˆ ˆfd„}t        j                  |«       |S )z–
    Decorator to cProfile a given function and save the result to disk on process exit.

    Args:
        filename: filename to save profile to
    c                óH   •‡ — t        j                  ‰ «      dˆ ˆfd„«       }|S )Nc                 ó€   •— ‰j                  «        	  ‰| i |¤Ž‰j                  «        S # ‰j                  «        w xY wr¯   )ÚenableÚdisable)r  r1  ÚfnÚprofs     €€r3   Úwrapperz3profile_to_file.<locals>.decorator.<locals>.wrapper¼  s1   ø€ à�K‰KŒMðÙ˜4Ð* 6Ñ*à—‘•ø�—‘•ús   “+ «=)r  r   r1  r   rM   r   )Ú	functoolsÚwraps)r  r  r  s   ` €r3   Ú	decoratorz"profile_to_file.<locals>.decorator»  s%   ù€ Ü	�‰˜Ó	õ	ó 
ð	ð ˆr5   c            	     óš   •— ‰j                  ‰ «       t        j                  j                  t	        j
                  d‰ › d‰ › d�«      «       y )Nz!                Wrote profile to z+, view with:

                    snakeviz z

                )Ú
dump_statsÚsysÚstderrrD   r9   r:   )r1   r  s   €€r3   Úsave_itz profile_to_file.<locals>.save_itÆ  sK   ø€ Ø�‰˜Ô!Ü�
‰
×ÑÜ�O‰Oð"Ø"* ð ,à&˜Zð (ðóõ		
r5   )r  r   rM   r   rp  )ÚcProfileÚProfiler&   r'   r)   Ú
expanduserÚatexitÚregister)r1   r  r!  r  s   `  @r3   Úprofile_to_filer'  ±  sR   ù€ ô ×ÑÓ€DÜ�w‰w�‰œrŸw™w×1Ñ1°(Ó;Ó<€Hõ	ö
ô ‡O�O�GÔØÐr5   rO   )rÇ   rP   rM   rL   )rò   rL   rM   rN   )rü   úSequence[Any]rM   ú	list[Any])FF)
rj   r”   r  r(  r  rP   r  rP   rM   r   )F)rj   r”   r  r”   rü   r(  r  rP   r  rP   r  rP   rM   rP   )r6  r”   rM   r”   )r…   rö  r6  r”   r@  r)  rM   ú&tuple[torch.fx.GraphModule, list[Any]])r6  r”   r@  r)  rM   r*  )rj   r”   rü   r(  rD  zACallable[[torch.fx.GraphModule, list[Any]], torch.fx.GraphModule]r  rP   r  rP   r  rP   rM   rP   )rI  r§  r„   r¦  rM   ztorch._prims_common.StrideType)rM  r   rM   zCallable[[T | None], T])r°   NN)
r  z&Callable[[list[Tensor]], list[Tensor]]rV  rL   r  zdict[str, int] | Nonerè  ru  rM   zdict[str, Any])r1   rL   rM   zCallable[[T], T])irã  Ú
__future__r   r%  r  r"  r  r[   rù  r±  Úloggingr&   rü  r¸   r  rY   r9   Úcollectionsr   Ú	importlibr   Útypingr   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   Ú	getLoggerrR   rF   r   Úinductor_configÚ	is_fbcoderî   Úlibfb.py.build_infoÚlibfbr8   Úextra_importsr;   ÚpyÚ
build_infoÚ	BuildInfoÚget_build_ruler,   r7   rE   r    r_   r}   rb   ÚcacherÆ   rÞ   rê   rì   rõ   r  r÷   rÿ   r  r&  r9  rA  r  rF  rJ  rN  Úfloat32rƒ  rV  r‚  r‹  r�  rŒ  rQ  rz  r¬  r  r'  )r<   s   0r3   ú<module>rF     s¸  ðñõ$ #ã Û Û Û Û Û Û Û Û 	Û 	Û Û 
Û Û Ý Ý #ß .Ñ .ã Ý #Û #Ý Ý .Ý @Ý .Ý ;ß Må ß 9Ñ 9ñ ß2åÝ,ð €g×Ñ˜Ó!€áˆ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Ø1ðVð )ðVð $ó	Vó/ñ " %§-¡-Ó0Ð Ù" < 5§<¡<°Ó#6Ó7Ð Ù*¨1Ó-Ð Ù)¨%Ó0Ð Ù# EÓ*Ð ÷ñ ÷F\ñ \÷VDNñ DNðR Ø(,Ø$(ð	dØ
0ðdàðdð &ðdð "ð	dð
 ódôN#ùò{ Us   ÅJ