Ë
    ÃÓ^jí¥  ã                  ó4  — 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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/m0Z0m1Z1 ddl2m3Z3 ddl4m5Z5  e
jl                  e7«      Z8 ed«      Z9 ed«      Z:e:jw                  «       Z<e<rddl=Z>g Z?dZ@dZAe<reg d¢Z?e>j„                  j†                  jˆ                  j‹                  «       j�                  dd«      ZAdj�                  e?D � cg c]  } d| › d�‘Œ
 c} «      Z@g d¢ZH G d„ d«      ZIdAd„ZJd ZK G d!„ d"eL«      ZM G d#„ d$«      ZNejž                  dAd%„«       ZPd&d'œdBd(„ZQd&d'œdBd)„ZRdAd*„ZSdCd+„ZT G d,„ d-eU«      ZVdDd.„ZW	 	 dE	 	 	 	 	 	 	 	 	 dFd/„ZX	 dGd&d&d0œ	 	 	 	 	 	 	 	 	 	 	 	 	 dHd1„ZYdId2„ZZ	 	 	 	 	 	 	 	 dJd3„Z[	 	 	 	 	 	 dKd4„Z\	 dGd&d&d0œ	 	 	 	 	 	 	 	 	 	 	 	 	 dLd5„Z]	 	 	 	 	 	 dMd6„Z^dNd7„Z_ e_ejÀ                  «      Za e_ ejÄ                  d8«      «      Zc e_d«      Zd e_d&«      Ze e_d&«      Zf G d9„ d:«      Zg G d;„ d<«      Zh G d=„ d>«      Zi	 	 	 dO	 	 	 	 	 	 	 	 	 dPd?„ZjdQd@„Zkyc c} w )Raã  
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ÚcastÚ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("ú"))Ú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      úd/var/www/ramen.bs-engineer-server.com/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)   )r2   ÚxÚextra_cpp_depss      r5   Ú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)   r9   r,   ÚopenÚwriter@   ÚBUCK_CMD_PREFIXr1   ÚlogÚwarning)r2   Ú	print_msgÚtarget_fileÚfdÚ	cmd_splits        r5   rF   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)r3   ÚstrÚreturnÚNone©rO   rN   )T)rJ   ÚboolrO   ú	list[str])Ú__name__Ú
__module__Ú__qualname__r6   r@   rF   © r7   r5   r"   r"   Z   s   „ ó6ó
õ4r7   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)   r9   r   ÚtempfileÚ
gettempdirÚgetpassÚgetuserÚexistsÚmakedirs)r)   s    r5   Úminifier_dirra   ‘   sb   € Ü�7‰7�<‰<œ›¨Ó4€DØ€|Ü×%Ñ%Ó'Ð(¨
´7·?±?Ó3DÐ2EÐFˆÜ�7‰7�>‰>˜$ÔÜ
�‰�D 4Õ(Ø€Kr7   é   c                  ó   — e Zd Zy)ÚUnsupportedNNModuleErrorN©rT   rU   rV   rW   r7   r5   rd   rd   �   ó   „ Ør7   rd   c                  óh  — e Zd ZddhZh d£Zddh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                  j0                  ej                  j2                  ej                  j4                  ej                  j6                  ej                  j8                  ej                  j:                  gZedd„«       Z edd„«       Z!edd	„«       Z"edd
„«       Z#edd„«       Z$edd„«       Z%edd„«       Z&edd„«       Z'eddœ	 	 	 	 	 dd„«       Z(eddœdd„«       Z)y)ÚNNModuleToStringz0torch.ao.quantization.fake_quantize.FakeQuantizezAtorch.ao.quantization.fake_quantize.FusedMovingAvgObsFakeQuantize>   ú#torch.ao.nn.qat.modules.conv.Conv1dú#torch.ao.nn.qat.modules.conv.Conv2dú#torch.ao.nn.qat.modules.conv.Conv3dú5torch.ao.nn.intrinsic.qat.modules.conv_fused.ConvBn1dú5torch.ao.nn.intrinsic.qat.modules.conv_fused.ConvBn2dú5torch.ao.nn.intrinsic.qat.modules.conv_fused.ConvBn3dú7torch.ao.nn.intrinsic.qat.modules.conv_fused.ConvReLU1dú7torch.ao.nn.intrinsic.qat.modules.conv_fused.ConvReLU2dú7torch.ao.nn.intrinsic.qat.modules.conv_fused.ConvReLU3dú9torch.ao.nn.intrinsic.qat.modules.conv_fused.ConvBnReLU1dú9torch.ao.nn.intrinsic.qat.modules.conv_fused.ConvBnReLU2dú9torch.ao.nn.intrinsic.qat.modules.conv_fused.ConvBnReLU3dz%torch.ao.nn.qat.modules.linear.Linearz8torch.ao.nn.intrinsic.qat.modules.linear_relu.LinearReLU)ÚfbgemmÚx86ÚqnnpackÚonednnc                óà   — t        «       }| j                  «       D ],  \  }}t        j                  |«      �Œ|j	                  |«       Œ. t        |«      dkD  rt        j                  d|«       yy)Nr   z2Cannot safely convert some modules to strings - %sFT)ÚsetÚnamed_childrenrh   Ú_module_constructor_stringÚaddÚlenrH   rI   )ÚgmÚcant_convertÚ_Úmodules       r5   Úcan_convert_to_stringz&NNModuleToString.can_convert_to_string×   sl   € ä“uˆØ×*Ñ*Ó,ò 	)‰IˆAˆvÜ×:Ñ:¸6ÓBÑJØ× Ñ  Õ(ð	)ô ˆ|Ó˜qÒ Ü�K‰KØDÀlôð Ør7   c                ó\   — t        | «      j                  › dt        | «      j                  › �S ©Nr%   )ÚtyperU   rT   )r‚   s    r5   Ú_module_type_namez"NNModuleToString._module_type_nameå   s)   € ä�v“,×)Ñ)Ð*¨!¬D°«L×,AÑ,AÐ+BÐCÐCr7   c                ó8   — | j                   › d| j                  › �S r…   )rU   rT   )Útype_s    r5   Ú
_type_namezNNModuleToString._type_nameé   s   € à×"Ñ"Ð# 1 U§^¡^Ð$4Ð5Ð5r7   c                ó„  — t         j                  | «      }|t         j                  vry | j                  }t	        t
        | j                  «      }t	        t
        | j                  «      }t        |dd«      r|dz  }|dz  dz   }dt         j                  t        |«      «      › �d|›�d|›�d| j                  ›�d	| j                  ›�d
| j                  ›�g}t        |d«      r|j                  d|j                   ›�«       t        |d«      r|j                  d|j"                  ›�«       |› ddj%                  |«      › d�S )NÚreduce_rangeFé   r   z	observer=z
quant_min=z
quant_max=údtype=zqscheme=zis_dynamic=zreduce_range=Úch_axiszch_axis=ú(ú, ú))rh   r‡   Úfake_quant_modulesÚactivation_post_processr   ÚintÚ	quant_minÚ	quant_maxÚgetattrrŠ   r†   ÚdtypeÚqschemeÚ
is_dynamicÚhasattrÚappendrŒ   r�   r9   )r‚   Úmodule_typeÚobserverr–   r—   Úargss         r5   Ú_fake_quant_constructorz(NNModuleToString._fake_quant_constructorí   sA  € ä&×8Ñ8¸Ó@ˆØÔ.×AÑAÑAØà×1Ñ1ˆÜœ˜f×.Ñ.Ó/ˆ	Üœ˜f×.Ñ.Ó/ˆ	Ü�8˜^¨UÔ3Ø˜‰NˆIØ! A™¨Ñ)ˆIàÔ(×3Ñ3´D¸³NÓCÐDÐEØ˜˜Ð&Ø˜˜Ð&Ø�V—\‘\Ð$Ð%Ø�v—~‘~Ð(Ð)Ø˜&×+Ñ+Ð.Ð/ð
ˆô �8˜^Ô,Ø�K‰K˜-¨×(=Ñ(=Ð'@ÐAÔBÜ�8˜YÔ'Ø�K‰K˜( 8×#3Ñ#3Ð"6Ð7Ô8Ø�˜a §	¡	¨$£Ð0°Ð2Ð2r7   c                óø   — t        | dd «      }t        j                  D ]K  }	 t        j                  j
                  j                  |«      }t        |«      t        |«      k(  sŒEd|›d�c S  y # t        $ r Y ŒZw xY w)NÚqconfigz6qconfig=torch.ao.quantization.get_default_qat_qconfig(r’   )	r˜   rh   Údefault_qat_qconfig_backendsÚtorchÚaoÚquantizationÚget_default_qat_qconfigÚAssertionErrorÚrepr)r‚   r£   ÚbackendÚdefault_qconfigs       r5   Ú_qat_qconfig_constructorz)NNModuleToString._qat_qconfig_constructor  s‡   € ä˜& )¨TÓ2ˆÜ'×DÑDò 		ˆGðÜ"'§(¡(×"7Ñ"7×"OÑ"OÐPWÓ"X�ô �G‹}¤ _Ó 5Ó5ðØ�{ !ð%òð		ð øô "ò Ùðús   ¢)A-Á-	A9Á8A9c           
     ó‚  — t         j                  | «      }|t         j                  vry t         j                  | «      }|€y t	        | j
                  «      t	        | j                  «      d| j                  ›�d| j                  ›�d| j                  ›�d| j                  ›�d| j                  ›�d| j                  d u› �d| j                  ›�g	}t        | dd «      }|�;|j                  d	|j                   ›�d
|j"                  ›�d| j$                  ›�g«       |j'                  |«       |› ddj)                  |«      › d�S )Nzkernel_size=zstride=zpadding=z	dilation=zgroups=úbias=zpadding_mode=Úbnzeps=z	momentum=z
freeze_bn=r�   r‘   r’   )rh   r‡   Úqat_conv_modulesr­   rª   Úin_channelsÚout_channelsÚkernel_sizeÚstrideÚpaddingÚdilationÚgroupsÚbiasÚpadding_moder˜   ÚextendÚepsÚmomentumÚ	freeze_bnr�   r9   )r‚   rž   r£   r    r°   s        r5   Ú_qat_conv_constructorz&NNModuleToString._qat_conv_constructor  sP  € ä&×8Ñ8¸Ó@ˆØÔ.×?Ñ?Ñ?ØÜ"×;Ñ;¸FÓCˆØˆ?Øô �×#Ñ#Ó$Ü�×$Ñ$Ó%Ø˜6×-Ñ-Ð0Ð1Ø�f—m‘mÐ&Ð'Ø�v—~‘~Ð(Ð)Ø˜Ÿ™Ð*Ð+Ø�f—m‘mÐ&Ð'Ø�F—K‘K tÐ+Ð,Ð-Ø˜F×/Ñ/Ð2Ð3ð

ˆô �V˜T 4Ó(ˆØˆ>Ø�K‰Kà˜2Ÿ6™6˜*Ð%Ø §¡˜Ð/Ø  ×!1Ñ!1Ð 4Ð5ðôð 	�‰�GÔØ�˜a §	¡	¨$£Ð0°Ð2Ð2r7   c                ó&  — t         j                  | «      }|t         j                  vry t         j                  | «      }|€y t	        | j
                  «      t	        | j                  «      d| j                  d u› �|g}|› ddj                  |«      › d�S )Nr¯   r�   r‘   r’   )	rh   r‡   Úqat_linear_modulesr­   rª   Úin_featuresÚout_featuresr¹   r9   )r‚   rž   r£   r    s       r5   Ú_qat_linear_constructorz(NNModuleToString._qat_linear_constructor6  s–   € ä&×8Ñ8¸Ó@ˆØÔ.×AÑAÑAØÜ"×;Ñ;¸FÓCˆØˆ?Øô �×#Ñ#Ó$Ü�×$Ñ$Ó%Ø�F—K‘K tÐ+Ð,Ð-Øð	
ˆð �˜a §	¡	¨$£Ð0°Ð2Ð2r7   c                ó|   — t        | «      t        j                  vry	 t        d|› �dd«       y# t        $ r Y yw xY w)NFzmod = z<module repr>ÚexecT)r†   rh   Ú
safe_reprsÚcompileÚSyntaxError)r‚   Ú
module_strs     r5   Ú_can_emit_module_constructorz-NNModuleToString._can_emit_module_constructorG  sI   € ä�‹<Ô/×:Ñ:Ñ:Øð	Ü�f˜Z˜LÐ)¨?¸FÔCð øô ò 	Ùð	ús   ž/ ¯	;º;F©Úallow_unsafe_reprc               óà   — t        | «      }t        j                  | |«      r|S t        j                  | «      xs, t        j	                  | «      xs t        j                  | «      }|�|S |r|S y ©N)rª   rh   rË   r¡   r¿   rÄ   )r‚   rÍ   rÊ   Úconstructor_strs       r5   r|   z+NNModuleToString._module_constructor_stringR  sx   € ô ˜&“\ˆ
Ü×8Ñ8¸ÀÔLØÐä×4Ñ4°VÓ<ò @Ü×5Ñ5°fÓ=ò@ä×7Ñ7¸Ó?ð 	ð
 Ð&Ø"Ð"ÙØÐØr7   c               ó0  — ddl m} d}t        j                  d«      }| j	                  «       D ]¢  \  }}t
        j                  ||¬«      }|€t        d|›�«      ‚t        |j                  «       d «      }|�|nt        |j                  «       d «      }	|	�+|	j                  j                  dk7  r|› d|	j                  › d	�}||d
z  › d|› d|› d�z  }Œ¤ | j                  j                  «       D �]  \  }
}|€Œ
|j                  «       t         k  rEddlm} |j&                  t         k  r t)        d|j&                  › dt         › d�«      ‚t+        |«      }nbt-        j.                  |«      r'dt1        |j2                  «      › d|j4                  › d�}n&dt1        |j2                  «      › d|j4                  › d�}|j                  j                  dk7  r|› d|j                  › d	�}||d
z  › d|
› d|› d�z  }�Œ | j6                  j                  «       D ]l  \  }}|€Œ	d}|j                  j                  dk7  rd|j                  › d�}dt1        |j2                  «      › d|j4                  › |› d�}||d
z  › d|› d|› d�z  }Œn | || j8                  d«      › d�z  }|S )Nr   )Ú
_addindentú    z­
            from torch.nn import *
            class Repro(torch.nn.Module):
                def __init__(self) -> None:
                    super().__init__()
            rÌ   z!Cannot convert module to string: Úcpuz.to("r   r�   zself.z = r   )Ú
PRINT_OPTSzPRINT_OPTS.threshold (z() must be >= MAX_CONSTANT_NUMEL_INLINE (r’   ztorch.randn(z, dtype=ztorch.randint(1, size=zself.register_buffer('z', z)
r   z
, device="ú"ztorch.nn.Parameter(torch.randn(z))rb   )Útorch.nn.modules.modulerÒ   r;   r<   r{   rh   r|   rd   ÚnextÚ
parametersÚbuffersÚdevicer†   Ú_buffersÚitemsÚnumelÚMAX_CONSTANT_NUMEL_INLINEÚtorch._tensor_strrÕ   Ú	thresholdr©   rª   r¥   Úis_floating_pointÚlistÚshaper™   Ú_parametersÚcode)r   rÍ   rÒ   ÚtabÚ	model_strÚmodule_namer‚   rÊ   Úexample_paramÚexample_tensorÚbuffer_nameÚbufferrÕ   Ú
tensor_strÚ
param_nameÚparamÚmaybe_devices                    r5   ÚconvertzNNModuleToString.convertd  s   € å6àˆä—O‘Oðó
ˆ	ð $&×#4Ñ#4Ó#6ò 	IÑˆK˜Ü)×DÑDØÐ*;ð Eó ˆJð Ð!Ü.Ø7¸°zÐBóð ô
 ! ×!2Ñ!2Ó!4°dÓ;ˆMð !Ð,ñ ä˜&Ÿ.™.Ó*¨DÓ1ð ð
 Ð)¨n×.CÑ.C×.HÑ.HÈEÒ.QØ *˜|¨5°×1FÑ1FÐ0GÀrÐJ�
Ø˜C !™G˜9 E¨+¨°c¸*¸ÀRÐHÑH‰Ið%	Ið( $&§;¡;×#4Ñ#4Ó#6ó 	ÑˆK˜Øˆ~Øà�|‰|‹~Ô!:Ò:Ý8à×'Ñ'Ô*CÒCÜ(Ø0°×1EÑ1EÐ0Fð G6Ü6OÐ5PÐPQðSóð ô " &›\‘
Ü×(Ñ(¨Ô0Ø+¬D°·±Ó,>Ð+?¸xÈÏÉÀ~ÐUVÐW‘
ð -¬T°&·,±,Ó-?Ð,@ÀÈÏÉÈÐVWÐXð ð �}‰}×!Ñ! UÒ*Ø *˜|¨5°·±°¸rÐB�
ØØ˜‘7�)Ð1°+°¸cÀ*ÀÈSÐQñŠIð+	ð2 "$§¡×!5Ñ!5Ó!7ò 	HÑˆJ˜Øˆ}ØØˆLØ�|‰|× Ñ  EÒ)Ø!+¨E¯L©L¨>¸Ð;�Ø:¼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ˆ	ØÐr7   N)r   útorch.fx.GraphModulerO   rR   )r‚   útorch.nn.ModulerO   rN   )r‰   ztype[object]rO   rN   )r‚   rô   rO   ú
str | None)r‚   rô   rÊ   rN   rO   rR   )r‚   rô   rÍ   rR   rO   rõ   )r   ró   rÍ   rR   rO   rN   )*rT   rU   rV   r“   r±   rÁ   r¤   r¥   ÚnnÚLinearÚConv1dÚConv2dÚConv3dÚBatchNorm1dÚBatchNorm2dÚBatchNorm3dÚ	LayerNormÚDropoutÚSoftmaxÚReLUÚGELUÚIdentityÚ	MaxPool2dÚ	EmbeddingÚTanhÚConvTranspose1dÚGLUÚLSTMÚFlattenÚAdaptiveAvgPool2drÇ   Ústaticmethodrƒ   r‡   rŠ   r¡   r­   r¿   rÄ   rË   r|   rò   rW   r7   r5   rh   rh   ¡   s#  „ à:ØKðÐò
Ðð  	0ØBðÐð $JÐ ð 	�‰�‰Ø�‰�‰Ø�‰�‰Ø�‰�‰Ø�‰×ÑØ�‰×ÑØ�‰×ÑØ�‰×ÑØ�‰×ÑØ�‰×ÑØ�‰�‰Ø�‰�‰Ø�‰×ÑØ�‰×ÑØ�‰×ÑØ�‰�‰Ø�‰× Ñ Ø�‰�‰Ø�‰�‰Ø�‰×ÑØ�‰×"Ñ"ð+€Jð0 òó ðð òDó ðDð ò6ó ð6ð ò3ó ð3ð2 òó ðð ò3ó ð3ð> ò3ó ð3ð  òó ðð à>CñØðØ7;ðà	òó ðð" ØGLô Ló ñLr7   rh   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rÏ   )r¥   ÚcudaÚget_device_name)Ú.0Úis     r5   ú	<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*   r9   Ú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¨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                óP  ‡‡‡— | ryg d¢Šg d¢ŠddgŠdˆˆˆfd„}t         j                  j                  «       D ��cg c]&  \  }} ||«      rd|› d|j                  d	d
«      › d	�‘Œ( }}}|j	                  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_PATHÚTORCHDYNAMO_REPRO_AFTERÚTORCHDYNAMO_REPRO_LEVELc                óF   •‡ — t        ˆ fd„‰D «       «      xr
 ‰ ‰vxr ‰ ‰vS )Nc              3  ó&   •K  — | ]  }|‰v –— Œ
 y ­wrÏ   rW   )r  ÚstringÚkeys     €r5   r  z;generate_env_vars_string.<locals>.filter.<locals>.<genexpr>Ý  s   øè ø€ Ò7 &�˜#”Ñ7ùs   ƒ)Úany)r5  Ú
allow_listÚrepro_env_varsÚ	skip_lists   `€€€r5   Úfilterz(generate_env_vars_string.<locals>.filterÛ  s0   ù€ äÓ7¨JÔ7Ó7ò *Ø˜9Ð$ò*à˜>Ð)ð	
r7   zos.environ['z'] = 'ú'rÖ   c              3  ó(   K  — | ]
  }d |› d�–— Œ y­w)zos.environ.pop('z', None)NrW   )r  r5  s     r5   r  z+generate_env_vars_string.<locals>.<genexpr>è  s   è ø€ ÒS¸SÐ*¨3¨%¨xÔ8ÑSùs   ‚r   z
import os
z
    )r5  rN   rO   rR   )r(   ÚenvironrÝ   r.   r»   r9   r   )	r'  r:  r5  ÚvalueÚconfig_linesÚconfig_stringr7  r8  r9  s	         @@@r5   Úgenerate_env_vars_stringrA  Ð  sÁ   ú€ ñ Ø<â:€JÚU€IØ/Ð1JÐK€N÷
ô Ÿ*™*×*Ñ*Ó,÷áˆC�Ù�#Œ;ð ˜˜˜V E§M¡M°#°sÓ$;Ð#<¸AÒ@ð€Lñ ð ×ÑÑSÀNÔSÔSØ—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      r5   Úgenerate_config_stringrM  ð  s¥   € Û"Û!áØ;àŸ(™(×/Ñ/×7Ñ7×FÑFÓHÐðð
 ‡�×Ñ×$Ñ$Ó&Ð 'ð (Ø‡�×Ñ×&Ñ&Ó(Ð )ð *Ø×Ñ×Ñ×'Ñ'Ó)Ð *ð +ØÐ ð ð	ð 	r7   c                 óR   — t         j                  j                  t        «       d«      S )Nzminifier_launcher.py)r(   r)   r9   ra   rW   r7   r5   Úget_minifier_repro_pathrO    s   € Ü�7‰7�<‰<œ›Ð(>Ó?Ð?r7   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:
%srC   r   zCould not write to )
rO  rH   rI   Úuse_buckr"   rF   rE   ÚOSErrorÚ	exceptionÚNotImplementedError)ÚcontentsÚminified_repro_pathrL   Úes       r5   Úhelper_for_dump_minifyrX    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)ÚAccuracyErrorNre   rW   r7   r5   rZ  rZ    rf   r7   rZ  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  r~   Ú
isinstancer¥   r
   Úrequires_grad_Úrequires_grad)Úexample_inputsÚcloned_inputsÚidxs      r5   Úclone_inputs_retaining_gradnessrb    sb   € ô ! Ó0€MÜ”S˜Ó(Ó)ò QˆÜ�m CÑ(¬%¯,©,Õ7Ø˜#Ñ×-Ñ-¨n¸SÑ.A×.OÑ.OÕPðQð Ðr7   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)Útestingrd  re  rf  ÚcopyÚdeepcopyrb  rœ   rg  r˜   Úbackward)	r   r    Úonly_fwdÚdisable_clonerd  re  rf  ÚoutÚlosss	            r5   Úrun_fwd_maybe_bwdrq  (  sŒ   € ÷ SÑRä	�‰�rÓ	€BÙÜ.¨tÓ4ˆäˆr�;ÔØ
�‰�TÔô ˜b -°Ô7‰"ˆTŒ(¹RÀ¸Y€CáØˆ
Ù˜ÔÙ$ SÓ)ˆØ�‰ŒÙ˜2˜s D¨$Ó/Ð/r7   ©Ú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_nanrt  )Úutilsrv  rq  r   Úsame_two_models_use_fp64Úcast_to_fp64rj  rk  rb  Ú	ExceptionÚRuntimeErrorrH   rI   rS  Úrepro_tolerance)r   Úopt_gmr_  rm  rs  rt  rv  ÚrefÚfp64_refÚ
fp64_modelÚfp64_examplesÚresÚpassings                r5   Úsame_two_modelsr†  H  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 �]L  }|j                  dk(  rÏ|j                  t        j
                  j                  j                  j                  u r•t        |j                  «      dk7  r!t        dt        |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<   ||_        �ŒO | j                   j#                  «        | j%                  «        | S )NÚcall_functionr�   z"Expected node to have 2 args, got r   r   r™   )ÚgraphÚnodesÚopr/   r¥   ÚopsÚprimsÚconvert_element_typeÚdefaultr~   r    r©   r   Úfloat64ÚkwargsÚgetÚdictÚlintÚ	recompile)ÚmodelÚnoder™   Ú
new_kwargss       r5   Úcast_dtype_args_to_fp64r™  ‚  s#  € Ø—‘×!Ñ!ó )ˆà�G‰G�Ò&Ø—‘œuŸy™yŸ™×CÑC×KÑKÑKä�4—9‘9‹~ Ò"Ü$Ø8¼¸T¿Y¹Y»Ð8HÐIóð ô ˜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ÔØ€Lr7   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    €r5   ú<lambda>zcast_to.<locals>.<lambda>¦  s3   ø€ Ü�aœŸ™Ô&¨1×+>Ñ+>Ô+@ð —$‘$�u“+€ àð r7   )Útorch.utils._pytreer›  r�  r¥   r�  r™  )r™   r–  Úinputsr›  s   `   r5   Úcast_tor¡  š  sM   ø€ õ -à�H‰H�U‹O€EØ”—‘Òô (¨Ó.ˆáó	ð 	ó	€Fð �&ˆ=Ðr7   c                ó8   — t        t        j                  | |«      S rÏ   )r¡  r¥   r�  )r–  r   s     r5   r{  r{  ®  s   € ô ”5—=‘= %¨Ó0Ð0r7   c               óº   — 	  |t        j                  | «      t        |«      «      }t        | |||||¬«       S # t        $ r t
        j                  d«       Y yw xY w)Nrr  z�While minifying the program in accuracy minification mode, ran into a runtime exception which is likely an unrelated issue. Skipping this graphF)rj  rk  rb  r†  r|  rH   rS  )r   r_  Úcompiler_fnrm  rs  rt  Úcompiled_gms          r5   Úbackend_accuracy_failsr¦  ´  st   € ðÙ!Ü�M‰M˜"ÓÔ>¸~ÓNó
ˆô #ØØØØØ%Ø'ô
ð 
ð 	
øô ò ô 	�‰ð#ô	
ñ
 ðús   ‚69 ¹AÁAc               ó4   — | �| S t        j                  |«      S rÏ   )ry  Úmake_contiguous_strides_for)rµ   rä   s     r5   Ú_stride_or_defaultr©  Ý  s   € ð
 Ð'ˆ6ÐU¬U×-NÑ-NÈuÓ-UÐUr7   c                ó   ‡ — ˆ fd„S )Nc                ó   •— | �| S ‰S rÏ   rW   )r>   Úds    €r5   rž  z_mk_defaulter.<locals>.<lambda>æ  s   ø€ ˜!˜-�Q€ ¨Q€ r7   rW   )r¬  s   `r5   Ú_mk_defaulterr­  å  s	   ø€ Û.Ð.r7   rÔ   c                  ó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)r2   s    r5   r6   zNopInputReader.__init__ñ  s	   € Øˆ�
r7   N©rÛ   Ú
dtype_hintc               ó.   — | xj                   dz  c_         y ©Nr   r±  )r2   Ústorage_hashÚnbytesrÛ   r´  s        r5   ÚstoragezNopInputReader.storageô  s   € ð 	�
Š
�a‰Ž
r7   c                 ó   — y rÏ   rW   ©r2   r    r‘  s      r5   ÚtensorzNopInputReader.tensorþ  ó   € Ør7   c                 ó   — y rÏ   rW   r»  s      r5   ÚsymintzNopInputReader.symint  r½  r7   c                 ó   — y rÏ   rW   ©r2   r$  s     r5   ÚconstzNopInputReader.const  r½  r7   c                 ó   — y rÏ   rW   rÁ  s     r5   ÚunsupportedzNopInputReader.unsupported  r½  r7   c                 ó   — y rÏ   rW   )r2   Údevice_typeÚdevice_indexs      r5   Ú	generatorzNopInputReader.generator
  r½  r7   c                ó.   — | xj                   dz  c_         y r¶  r±  ©r2   Úscript_class_names     r5   ÚopaquezNopInputReader.opaque  s   € Ø�
Š
�a‰Ž
r7   ©rO   rP   )
r·  rõ   r¸  r•   rÛ   ú)torch._prims_common.DeviceLikeType | Noner´  útorch.dtype | NonerO   rP   )r    r   r‘  r   rO   ztorch.Tensor | None)r    r   r‘  r   rO   ú
int | None©r$  rN   rO   rP   )rÆ  rN   rÇ  r•   rO   rP   ©rË  rN   rO   rP   ©rT   rU   rV   r6   r¹  r¼  r¿  rÂ  rÄ  rÈ  rÌ  rW   r7   r5   r¯  r¯  ð  sc   „ óð =AØ)-ñà ðð ðð
 :ðð 'ðð 
óóóóóóôr7   r¯  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œ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)rH   rI   r   Ústorer    rÖ  )r2   Úsave_dirrÖ  s      r5   r6   zInputReader.__init__  s9   € ð ÐÜ�K‰KÐJÔKØ5=Ð5IÔ'¨Ô1ÈtˆŒ
Ø!ˆŒ	Øˆ�	r7   r³  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_storagerÛ   rH   rI   r  r   Úitemsizer©  r   Úuntyped_storage)r2   r·  r¸  rÛ   r´  r¹  rä   rµ   s           r5   r¹  zInputReader.storage!  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                  |	«      |k7  r8t!        dt
        j                  j                  j                  |	«      › d|› �«      ‚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™   rÛ   r^  )Úmemory_formatz/Tensor leaf status mismatch: safe_is_leaf(t) = z, expected )r©  Ú_storage_offset_or_defaultrÞ  Ú_is_leaf_or_defaultÚ_requires_grad_or_defaultr¥   r¼  rÛ   Úno_gradÚset_Úenable_gradÚcloneÚpreserve_formatÚ_subclassesÚ
meta_utilsÚsafe_is_leafr©   Ú_utilsÚset_tensor_metadatar    r�   )
r2   r¹  rä   rµ   râ  r™   r^  rã  ÚmetadataÚts
             r5   r¼  zInputReader.tensor>  sx  € ô $ 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Ô>÷?ä×Ñ×'Ñ'×4Ñ4°QÓ7¸7ÒBÜ ØAÜ×$Ñ$×/Ñ/×<Ñ<¸QÓ?Ð@ÀÈGÈ9ðVóð ô 	�‰×(Ñ(¨¨HÔ5Ø�	‰	×Ñ˜ÔØˆ÷	;ñ 	;ú÷Að Aú÷?ð ?ús$   Á1FÂ$!F,Ã!F8ÆF)Æ,F5Æ8G)Úexprc               ó°   — | j                   j                  |«       |�8t        | d«      si | _        || j                  t	        | j                   «      dz
  <   |S )NÚsymint_exprsr   )r    r�   rœ   r÷  r~   )r2   Úvalrõ  s      r5   r¿  zInputReader.symintc  sN   € Ø�	‰	×Ñ˜ÔØÐÜ˜4 Ô0Ø46�Ô!Ø48ˆD×Ñœc $§)¡)›n¨qÑ0Ñ1Øˆ
r7   c                ó:   — | j                   j                  d «       y rÏ   ©r    r�   rÁ  s     r5   rÂ  zInputReader.constk  ó   € Ø�	‰	×Ñ˜Õr7   c                ó:   — | j                   j                  d «       y rÏ   rú  rÁ  s     r5   rÄ  zInputReader.unsupportedn  rû  r7   c                ó”   — t        j                  ||«      }t        j                  |¬«      }| j                  j	                  |«       |S )N)rÛ   )r¥   rÛ   Ú	Generatorr    r�   )r2   rÆ  rÇ  rÛ   Úgens        r5   rÈ  zInputReader.generatorq  s7   € Ü—‘˜k¨<Ó8ˆÜ�o‰o VÔ,ˆØ�	‰	×Ñ˜ÔØˆ
r7   c                ó:   — | j                   j                  d «       y rÏ   rú  rÊ  s     r5   rÌ  zInputReader.opaquew  rû  r7   rÏ   )rÙ  rõ   rÖ  ztqdm | NonerO   rP   )
r·  rõ   r¸  r•   rÛ   rÎ  r´  rÏ  rO   r   )r¹  r   rä   útorch._prims_common.ShapeTyperµ   ú%torch._prims_common.StrideType | Nonerâ  rÐ  r™   rÏ  r^  úbool | Nonerã  r  ró  r   rO   útorch.Tensor)rø  r   rõ  rõ   rO   r   rÑ  )rÆ  rN   rÇ  r•   rO   r   rÒ  rÓ  rW   r7   r5   rÕ  rÕ    s  „ à%)ðØBFñØ"ðØ4?ðà	óð$ =AØ)-ñQà ðQð ðQð
 :ðQð 'ðQð 
óQðB 9=ð	#ð &*Ø$(Ø%)Ø#ñ#àð#ð -ð#ð 6ð	#ð #ð#ð "ð#ð #ð#ð ð#ð ð#ð 
ó#ðJ 6:õ óóóôr7   rÕ  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)r2   rÙ  r  s      r5   r6   zInputWriter.__init__ˆ  sG   € Ø!#ˆŒä(Ÿ™Ó0ˆÔØ ˆŒð Ð#ô ˜x°[ÕAàð 	Œ
ð
 9;ˆÕr7   c                ór   — dg}|j                  d„ | j                  D «       «       |j                  d«       |S )Nzdef load_args(reader):c              3  ó&   K  — | ]	  }d |› �–— Œ y­w)rÓ   NrW   )r  Úls     r5   r  z$InputWriter.lines.<locals>.<genexpr>˜  s   è ø€ Ò1 �4˜�s”Ñ1ùs   ‚zload_args._version = 0)r»   r
  r�   )r2   Úrs     r5   ÚlineszInputWriter.lines”  s8   € à$ð
ˆð 	
�‰Ñ1 T§[¡[Ô1Ô1ð 	
�‰Ð)Ô*Øˆr7   N)Údevice_hintr´  c          
     óV  — t        |«      }| j                  j                  |«      }|�|S dt        | j                  «      › �}d}t        d «      t        |«      k7  rd|›�}d}|j                  }|j                  dk(  r|€t        d«      ‚|}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_hint must be provided when storage device is 'meta'z	, device=z = reader.storage(r‘   r’   )r   r  r’  rØ   r  rÞ  rÛ   r†   r©   rÝ  r¸  rØ  Úwrite_storager
  r�   )r2   rá  r  r´  ÚwsÚvÚmaybe_dtype_hintrñ   rÛ   r¸  r·  s              r5   r¹  zInputWriter.storage£  sP  € ô ˜OÓ,ˆØ×Ñ×"Ñ" 2Ó&ˆØˆ=ØˆHØ”$�t×+Ñ+Ó,Ð-Ð.ˆØÐÜ˜TÓ"Ô&7¸
Ó&CÒCØ!.¨z¨nÐ=Ðð ˆØ ×'Ñ'ˆØ�;‰;˜&Ò ØÐ"Ü$ØPóð ð !ˆ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ÑØˆr7   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)r´  r  rÛ  rŽ   zstorage_offset=c              3  ó0   K  — | ]  \  }}|› d |›�–— Œ y­w)ú=NrW   )r  Úkr  s      r5   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™   rÛ   r©  rä   rµ   r�   rN   ÚtuplerÞ  ræ  râ  r¥   rñ  Úget_tensor_metadatar»   rÝ   rè  r^  rî  rï  rð  rç  r
  r9   )	r2   r$  rô  r  r  r¹  r    Útensor_metadatarã  s	            r5   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ñõ	
r7   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�   r†   r\  rã   r#  Ú	enumerater¥   r
   r¼  r•   ÚSymIntr¿  rÄ  )r2   r$  Úargr  ÚaÚname_is         r5   rÄ  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Õ%ð *r7   c                óH   — | j                   j                  d|›d|› d�«       y )Nzreader.const(r!  z!, filtered out during compilation©r
  r�   rÁ  s     r5   rÂ  zInputWriter.constü  s'   € Ø�‰×ÑØ˜D˜8 5¨¨Ð.OÐPõ	
r7   c                ó.  — t        |t        j                  «      rZt        |j                  j
                  «      }|j                  j                  }| j                  j                  d|›d|›d|› �«       y | j                  j                  d|›d|› �«       y )Nzreader.symint(z, expr=r!  )	r\  r¥   r*  rN   r—  rõ  Úhintr
  r�   )r2   r$  rø  Úexpr_strr1  s        r5   r¿  zInputWriter.symint  st   € Ü�cœ5Ÿ<™<Ô(Ü˜3Ÿ8™8Ÿ=™=Ó)ˆHØ—8‘8—=‘=ˆDØ�K‰K×Ñ °¨x°w¸x¸lÈ%ÐPTÈvÐVÕWà�K‰K×Ñ °¨w°e¸D¸6ÐBÕCr7   c                óŒ   — |j                   }| j                  j                  d|j                  ›d|j                  ›d|› �«       y )Nzreader.generator(r‘   r!  )rÛ   r
  r�   r†   Úindex)r2   r$  r+  rÛ   s       r5   rÈ  zInputWriter.generator
  s<   € Ø—‘ˆØ�‰×ÑØ §¡˜¨b°·±Ð0@ÀÀdÀVÐLõ	
r7   c                óF   — | j                   j                  d|›d|› �«       y )Nzreader.opaque(r!  r/  )r2   r$  rË  s      r5   rÌ  zInputWriter.opaque  s#   € Ø�‰×Ñ˜^Ð,=Ð+@ÀÀdÀVÐLÕMr7   )rÙ  rõ   r  rR   rO   rP   )rO   rS   )rá  r   r  rÎ  r´  rÏ  rO   rN   )r$  rN   rô  r  rO   rP   )r$  rN   r+  r   rO   rP   rÑ  )r$  rN   rø  r   rO   rP   )r$  rN   r+  ztorch._C.GeneratorrO   rP   )r$  rN   rË  rN   rO   rP   )rT   rU   rV   r6   r  r¹  r¼  rÄ  rÂ  r¿  rÈ  rÌ  rW   r7   r5   r  r  ‡  sf   „ ØDIõ 
;óð& BFØ)-ñ#à'ð#ð ?ð	#ð
 'ð#ð 
ó#óJ
ó@&ó(
óDó
ôNr7   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+)r�   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)rT   rU   rV   Ú__doc__rW   r7   r5   ÚTensorContainerr:  8  s   „ Ú-r7   r<  rO   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 inrW   )r¿  s   €r5   rž  z=aot_graph_input_parser.<locals>.get_sym_int.<locals>.<lambda>C  s   ø€ �v�hÐYÐZ€ r7   )r¥   Ú_checkr’  )r¿  Údefault_sym_shapeÚsym_shapes_dicts   `€€r5   Úget_sym_intz+aot_graph_input_parser.<locals>.get_sym_int@  s;   ù€ Ü�‰Ø�oÐ%ÒFÐ):À$Ð)FÛZô	
ð ×"Ñ" 6Ð+<Ó=Ð=r7   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™   rÛ   )
r)  Ústripr�   r•   râ   r¥   ÚrandnÚzerosrI  Úmark_dynamic)rä   r™   Úresolved_shapeÚdynamic_dimsr  Údimr!  Úconstructorro  r¬  rÛ   rB  s             €€r5   Ú
gen_tensorz*aot_graph_input_parser.<locals>.gen_tensorG  sÁ   ø€ àˆØˆÜ Ó&ò 	4‰FˆAˆsØ—)‘)“+ˆCØ�c‰zÙ Ó$�Ø×%Ñ% aÔ(Ø×#Ñ# AÕ&âØ"×)Ñ)¬#¨c«(Õ3ð	4ð &+×%<Ò%<”e—k’kÄ%Ç+Á+ˆÙ˜.°¸fÔEˆØò 	/ˆAÜ�M‰M×&Ñ& s¨AÕ.ð	/àˆ
r7   ú,r   r2   )r¿  rN   rO   r•   )rä   r  r™   útorch.dtyperO   r
   )Útorch.utils._dtype_abbrsr7  rÝ   r9   ÚvaluesÚinspectÚ	getsourceÚ__annotations__ÚreÚsearchr¸   r#  r*   ÚgroupÚ	signaturerÙ   ÚfinditerÚsetattr)ÚfuncrÛ   Ú
sym_shapesr@  r7  r5  r>  Ú	dtype_mapÚdtype_patternÚsourceÚtensor_assignment_regexÚtensor_regexÚsym_shape_regexr<  r‘  rL  r   rð   Ú
annotationÚmatchÚ	data_typeÚ	shape_strrä   r™   Ú	containerÚ	attr_namer�   rB  rA  s    ` `                       @@r5   Úaot_graph_input_parserrh    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    r‘  ÚfnÚprofs     €€r5   Úwrapperz3profile_to_file.<locals>.decorator.<locals>.wrapper†  s1   ø€ à�K‰KŒMðÙ˜4Ð* 6Ñ*à—‘•ø�—‘•ús   “+ «=)r    r   r‘  r   rO   r   )Ú	functoolsÚwraps)rn  rp  ro  s   ` €r5   Ú	decoratorz"profile_to_file.<locals>.decorator…  s%   ù€ Ü	�‰˜Ó	õ	ó 
ð	ð ˆr7   c            	     óš   •— ‰j                  ‰ «       t        j                  j                  t	        j
                  d‰ › d‰ › d�«      «       y )Nz!                Wrote profile to z+, view with:

                    snakeviz z

                )Ú
dump_statsÚsysÚstderrrF   r;   r<   )r3   ro  s   €€r5   Úsave_itz profile_to_file.<locals>.save_it�  sK   ø€ Ø�‰˜Ô!Ü�
‰
×ÑÜ�O‰Oð"Ø"* ð ,à&˜Zð (ðóõ		
r7   )rn  r   rO   r   rÍ  )ÚcProfileÚProfiler(   r)   r+   Ú
expanduserÚatexitÚregister)r3   rs  rx  ro  s   `  @r5   Úprofile_to_filer~  {  sR   ù€ ô ×ÑÓ€DÜ�w‰w�‰œrŸw™w×1Ñ1°(Ó;Ó<€Hõ	ö
ô ‡O�O�GÔØÐr7   rQ   )r'  rR   rO   rN   )rU  rN   rO   rP   )r_  úSequence[Any]rO   ú	list[Any])FF)
r   ró   r    r  rm  rR   rn  rR   rO   r   )F)r   ró   r  ró   r_  r  rm  rR   rs  rR   rt  rR   rO   rR   )r–  ró   rO   ró   )r™   rN  r–  ró   r   r€  rO   ú&tuple[torch.fx.GraphModule, list[Any]])r–  ró   r   r€  rO   r�  )r   ró   r_  r  r¤  zACallable[[torch.fx.GraphModule, list[Any]], torch.fx.GraphModule]rm  rR   rs  rR   rt  rR   rO   rR   )rµ   r  rä   r  rO   ztorch._prims_common.StrideType)r¬  r   rO   zCallable[[T | None], T])r  NN)
rZ  z&Callable[[list[Tensor]], list[Tensor]]rÛ   rN   r[  zdict[str, int] | Noner@  rÐ  rO   zdict[str, Any])r3   rN   rO   zCallable[[T], T])lr;  Ú
__future__r   r|  rj  ry  rq  r]   rQ  r  Úloggingr(   rT  r  rv  r[   r;   Úcollectionsr   Ú	importlibr   Útypingr   r   r   r	   r¥   Útorch._prims_commonÚ_prims_commonry  Ú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   Ú	getLoggerrT   rH   r   Úinductor_configÚ	is_fbcoderQ  Úlibfb.py.build_infoÚlibfbr:   Úextra_importsr=   ÚpyÚ
build_infoÚ	BuildInfoÚget_build_ruler.   r9   rG   r"   ra   rß   r©   rd   rh   Úcacher&  rA  rM  rO  rX  r|  rZ  rb  rq  r†  r™  r¡  r{  r¦  r©  r­  Úfloat32rÞ  rÛ   rÝ  ræ  rè  rç  r¯  rÕ  r  rh  r~  )r>   s   0r5   ú<module>r�     sÅ  ðñõ$ #ã Û Û Û Û Û Û Û Û 	Û 	Û Û 
Û Û Ý Ý #ß 4Ó 4ã Ý #Û #Ý Ý .Ý @Ý .Ý ;ß 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ð Ð ô	˜~ô 	÷Pñ Pðf ‡�òó ðð6 7<õ 	ð@ 5:õ ó(@óVô	�Iô 	ó
ð  Øð	0Øð0à
ð0ð ð0ð ð	0ð
 	ó0ðH ð	7ð Øñ7Øð7à ð7ð "ð7ð ð	7ð ð7ð ð7ð 
ó7ótð0ØðØ3ðØ=Fðà+óð(1Øð1Ø)2ð1à+ó1ð ð	ð ØñØðà!ðð Sðð ð	ð ðð ðð 
óðRVØ1ðVð )ðVð $ó	Vó/ñ " %§-¡-Ó0Ð Ù" < 5§<¡<°Ó#6Ó7Ð Ù*¨1Ó-Ð Ù)¨%Ó0Ð Ù# EÓ*Ð ÷ñ ÷Feñ e÷hJNñ JNð^ Ø(,Ø$(ð	dØ
0ðdàðdð &ðdð "ð	dð
 ódôN#ùòO! Us   ÅJ