Ë
    g^(h�v  ã                   óÌ  — d 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$m%Z% ddl&m'Z' ddlm(Z(m)Z)  ejT                  e+«      Z, ed«      Z- ed«      Z.e.j_                  «       Z0e0rddl1Z2g Z3dZ4e0reg d¢Z3e2jj                  jl                  jn                  jq                  «       js                  dd«      Z:djw                  e3D � cg c]  } d| › d�‘Œ
 c} «      Z4g d¢Z< G d„ d«      Z=d„ Z>dZ? G d„ d«      Z@ ej‚                  d«      d„ «       ZBdd œd!„ZCdd œd"„ZDd#„ ZEd$„ ZF G d%„ d&eG«      ZHd'„ ZIdEd(„ZJ	 dFddd)œd*„ZKd+„ ZLd,„ ZMd-„ ZN	 dFddd)œd.„ZOd/ed0   d1d2d3d0fd4„ZPd5e-d3eee-   ge-f   fd6„ZQ eQej¤                  «      ZS eQ ej¨                  d7«      «      ZU eQd«      ZV eQd«      ZW eQd«      ZX G d8„ d9«      ZY G d:„ d;«      ZZ G d<„ d=«      Z[	 	 	 dGd>ee\e   ge\e   f   d?e]d@ee^e]e_f      dAee_   d3e^e]ef   f
dB„Z`dCe]d3ee-ge-f   fdD„Zayc c} w )Haã  
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
é    N)ÚCounter)Úimport_module)ÚAnyÚCallableÚOptionalÚTypeVar)ÚTensor)Úrand_strided)Úis_float_dtype)ÚStorageWeakRef)ÚContentStoreReaderÚContentStoreWriteré   )Úconfig)Úclone_inputsÚget_debug_dirÚ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„ Zd„ Z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      úW/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/_dynamo/debug_utils.pyÚ__init__zBuckTargetWriter.__init__R   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!   )r*   ÚxÚextra_cpp_depss      r-   ÚbuildzBuckTargetWriter.build`   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!   r1   r$   ÚopenÚwriter8   ÚBUCK_CMD_PREFIXr)   ÚlogÚwarning)r*   Ú	print_msgÚtarget_fileÚfdÚ	cmd_splits        r-   r>   zBuckTargetWriter.writez   sˆ   € Ü—g‘g—l‘l 4§;¡;°	Ó:ˆÜ�+˜sÓ#ð 	# rØ�H‰H�T—Z‘Z“\Ô"÷	#ô $ t×'9Ñ'9Ð&:Ñ:ˆ	ÙÜ�K‰KØXØ—‘˜Ó#ôð Ð÷	#ð 	#ús   · BÂB%N)T)Ú__name__Ú
__module__Ú__qualname__r.   r8   r>   © r/   r-   r   r   Q   s   „ ò6ò
ô4r/   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!   r1   r   ÚtempfileÚ
gettempdirÚgetpassÚgetuserÚexistsÚmakedirs)r!   s    r-   Úminifier_dirrS   ˆ   sb   € Ü�7‰7�<‰<œ›¨Ó4€DØ€|Ü×%Ñ%Ó'Ð(¨
´7·?±?Ó3DÐ2EÐFˆÜ�7‰7�>‰>˜$ÔÜ
�‰�D 4Õ(Ø€Kr/   é   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„ «       Ze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ÚtyperV   Ú
safe_reprsÚaddÚlenr@   rA   )ÚgmÚcant_convertÚ_Úmodules       r-   Úcan_convert_to_stringz&NNModuleToString.can_convert_to_string­   sg   € ä“uˆØ×*Ñ*Ó,ò 	)‰IˆAˆvÜ�F‹|Ô#3×#>Ñ#>Ò>Ø× Ñ  Õ(ð	)ô ˆ|Ó˜qÒ Ü�K‰KÐGÈÔVàr/   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))rT   )Útorch.nn.modules.modulerd   r3   r4   rY   Ú__repr__ÚnextÚ
parametersÚis_cudaÚ_buffersÚitemsÚnumelÚMAX_CONSTANT_NUMEL_INLINEÚtorch._tensor_strrg   Ú	thresholdÚreprÚtorchÚis_floating_pointÚlistÚshapeÚdtypeÚ_parametersÚcode)r^   rd   ÚtabÚ	model_strÚmodule_namera   Ú
module_strÚexample_paramÚbuffer_nameÚbufferrg   Ú
tensor_strÚ
param_nameÚparamÚmaybe_devices                  r-   Ú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ˆ	ØÐr/   N)rF   rG   rH   ru   ÚnnÚLinearÚConv1dÚConv2dÚConv3dÚBatchNorm1dÚBatchNorm2dÚBatchNorm3dÚ	LayerNormÚDropoutÚSoftmaxÚReLUÚGELUÚIdentityÚ	MaxPool2dÚ	EmbeddingÚTanhÚConvTranspose1dÚGLUÚLSTMÚFlattenÚAdaptiveAvgPool2dr[   Ústaticmethodrb   r‡   rI   r/   r-   rV   rV   ”   s0  „ à�‰�‰Ø�‰�‰Ø�‰�‰Ø�‰�‰Ø�‰×ÑØ�‰×ÑØ�‰×ÑØ�‰×ÑØ�‰×ÑØ�‰×ÑØ�‰�‰Ø�‰�‰Ø�‰×ÑØ�‰×ÑØ�‰×ÑØ�‰�‰Ø�‰× Ñ Ø�‰�‰Ø�‰�‰Ø�‰×ÑØ�‰×"Ñ"ð+€Jð0 ñ	ó ð	ð ñ=ó ñ=r/   rV   c                  ó2  — t         j                  j                  «       syd} 	 t        j                  ddg«      }|j                  «       j                  d«      }dj                  |D �cg c]  }|dvsŒd|› d	�‘Œ c}«      }| |› 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   )r   ú# z 
z# nvcc not found
c              3   óZ   K  — | ]#  }t         j                  j                  |«      –— Œ% y ­w©N)ru   ÚcudaÚget_device_name)Ú.0Úis     r-   ú	<genexpr>z,_cuda_system_info_comment.<locals>.<genexpr>  s$   è ø€ ò Ø*+Œ�
‰
×"Ñ" 1×%ñùs   ‚)+z# GPU Hardware Info: 
z : )ru   r¤   Úis_availableÚ
subprocessÚcheck_outputÚdecoder"   r1   ÚFileNotFoundErrorÚCalledProcessErrorr   ÚrangeÚdevice_countro   )r}   Úcuda_version_outÚcuda_version_linesÚsÚcommentÚ	gpu_namesÚnameÚcounts           r-   Ú_cuda_system_info_commentr¸   ú   s-  € ä�:‰:×"Ñ"Ô$ØLà!€Ið*Ü%×2Ñ2°F¸KÐ3HÓIÐØ-×4Ñ4Ó6×<Ñ<¸TÓBÐØ—'‘'Ð0BÖT¨1ÀaÈtÂm˜R ˜s #š;ÒTÓUˆØ˜�y �^Ñ#ˆ	ô ñ Ü/4´U·Z±Z×5LÑ5LÓ5NÓ/Oôó €Ið Ð*Ñ*€IØ —‘Ó(ò .‰ˆˆeØ�r˜$˜˜s 5 '¨Ð-Ñ-‰	ð.à�Ñ€IØÐùò Uøäœz×<Ñ<Ð=ò *ØÐ)Ñ)Š	ð*ús*   £AC5 Á(	C0Á2C0Á:C5 Ã0C5 Ã5DÄDF)Ústable_outputc           	      óà   ‡‡— | ryg d¢Šg d¢Šˆˆfd„}t         j                  j                  «       D ��cg c]  \  }} ||«      r	d|› d|› d�‘Œ }}}dj                  |«      }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£   rI   )r¦   ÚstringÚkeys     €r-   r¨   z;generate_env_vars_string.<locals>.filter.<locals>.<genexpr>  s   øè ø€ Ò: V�6˜S”=Ñ:ùs   ƒ)Úany)rÅ   Ú
allow_listÚ	skip_lists   `€€r-   Úfilterz(generate_env_vars_string.<locals>.filter  s   ù€ ÜÓ:¨zÔ:Ó:ÒS¸sÈ)Ð?SÐSr/   zos.environ['z'] = 'ú'r   z
import os
z
    )r    Úenvironro   r1   )r¹   rÉ   rÅ   ÚvalueÚconfig_linesÚconfig_stringrÇ   rÈ   s         @@r-   Úgenerate_env_vars_stringrÏ     s�   ù€ ñ Ø<â:€JÚU€IõTô
 Ÿ*™*×*Ñ*Ó,÷áˆC�Ù�#Œ;ð �s�e˜6 % ¨Ò*ð€Lñ ð
 —I‘I˜lÓ+€Mðà€ð ðð ùós   µA*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¹   ru   Úexperimental_configs      r-   Úgenerate_config_stringrÛ   ,  s¥   € Û"Û!áØ;àŸ(™(×/Ñ/×7Ñ7×FÑFÓHÐðð
 ‡�×Ñ×$Ñ$Ó&Ð 'ð (Ø‡�×Ñ×&Ñ&Ó(Ð )ð *Ø×Ñ×Ñ×'Ñ'Ó)Ð *ð +ØÐ ð ð	ð 	r/   c                  óR   — t         j                  j                  t        «       d«      S )Nzminifier_launcher.py)r    r!   r1   rS   rI   r/   r-   Úget_minifier_repro_pathrÝ   @  s   € Ü�7‰7�<‰<œ›Ð(>Ó?Ð?r/   c                 óL  — 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:
%sr;   r   z(Could not write to {minified_repro_path})
rÝ   r@   rA   Úuse_buckr   r>   r=   ÚOSErrorÚ	exceptionÚNotImplementedError)ÚcontentsÚminified_repro_pathrD   Úes       r-   Úhelper_for_dump_minifyræ   D  s’   € Ü1Ó3ÐÜ‡K�KÐ0Ð2EÔFåÜÐ,Ó-×3Ñ3Ô5ðUÜÐ% sÓ+ð 	¨rØ�H‰H�XÔ÷	÷ 	ñ 	ûô ò UÜ�‰�bÔÜ!Ð"LÓMÐSTÐTûðUús6   ÁA4 ÁA(ÁA4 Á(A1Á-A4 Á1A4 Á4	B#Á=!BÂB#c                   ó   — e Zd Zy)ÚAccuracyErrorN)rF   rG   rH   rI   r/   r-   rè   rè   S  s   „ Ør/   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¯   r]   Ú
isinstanceru   r	   Úrequires_grad_Úrequires_grad)Úexample_inputsÚcloned_inputsÚidxs      r-   Úclone_inputs_retaining_gradnessrð   W  sb   € ô ! Ó0€MÜ”S˜Ó(Ó)ò QˆÜ�m CÑ(¬%¯,©,Õ7Ø˜#Ñ×-Ñ-¨n¸SÑ.A×.OÑ.OÕPðQð Ðr/   c                 ó$  — ddl m}m}m} t	        j
                  | «      } |st        |«      }t        | d«      r| j                  d«       t        | 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_callN)
Útestingrò   ró   rô   ÚcopyÚdeepcopyrð   Úhasattrrõ   Úbackward)	r^   ÚargsÚonly_fwdÚdisable_clonerò   ró   rô   ÚoutÚlosss	            r-   Úrun_fwd_maybe_bwdr  d  sŠ   € ÷ SÑRä	�‰�rÓ	€BÙÜ.¨tÓ4ˆäˆr�;ÔØ
�‰�TÔô ˜b -Ô0‰"ˆTŒ(±b¸$°i€CáØˆ
Ù˜ÔÙ$ SÓ)ˆØ�‰ŒÙ˜2˜s D¨$Ó/Ð/r/   ©Ú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ÚRuntimeErrorr@   rA   rá   Úrepro_tolerance)r^   Úopt_gmrí   rý   r  r  r  ÚrefÚfp64_refÚ
fp64_modelÚfp64_examplesÚresÚpassings                r-   Ú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                  k(  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_functionrf   r   r   ry   )ÚgraphÚnodesÚopr'   ru   ÚopsÚprimsÚconvert_element_typeÚdefaultr]   rü   r   Úfloat64ÚkwargsÚgetÚdictÚlintÚ	recompile)ÚmodelÚnodery   Ú
new_kwargss       r-   Úcast_dtype_args_to_fp64r)  ¹  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ÔØ€Lr/   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ê   ru   r	   rv   Úto)r6   ry   s    €r-   ú<lambda>zcast_to.<locals>.<lambda>Ø  s3   ø€ Ü�aœŸ™Ô&¨1×+>Ñ+>Ô+@ð —$‘$�u“+€ àð r/   )Útorch.utils._pytreer+  r-  ru   r   r)  )ry   r&  Úinputsr+  s   `   r-   Úcast_tor1  Î  sK   ø€ Ý,à�H‰H�U‹O€EØ”—‘Òô (¨Ó.ˆáó	ð 	ó	€Fð �&ˆ=Ðr/   c                 ó8   — t        t        j                  | |«      S r£   )r1  ru   r   )r&  r0  s     r-   r  r  à  s   € Ü”5—=‘= %¨Ó0Ð0r/   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  r@   rá   )r^   rí   Úcompiler_fnrý   r  r  Úcompiled_gms          r-   Úbackend_accuracy_failsr6  ä  st   € ðÙ!Ü�M‰M˜"ÓÔ>¸~ÓNó
ˆô #ØØØØØ%Ø'ô
ð 
ð 	
øô ò ô 	�‰ð#ô	
ñ
 ðús   ‚69 ¹AÁAÚstrideztorch._prims_common.StrideTyperx   ztorch._prims_common.ShapeTypeÚreturnc                ó4   — | �| S t        j                  |«      S r£   )r	  Úmake_contiguous_strides_for)r7  rx   s     r-   Ú_stride_or_defaultr;    s   € ð
 Ð'ˆ6ÐU¬U×-NÑ-NÈuÓ-UÐUr/   Údc                 ó   ‡ — ˆ fd„S )Nc                 ó   •— | �| S ‰S r£   rI   )r6   r<  s    €r-   r.  z_mk_defaulter.<locals>.<lambda>  s   ø€ ˜!˜-�Q€ ¨Q€ r/   rI   )r<  s   `r-   Ú_mk_defaulterr?    s	   ø€ Û.Ð.r/   Úcpuc                   ó.   — e Zd Zdd„Zdddœd„Zd„ Zd„ Zy)ÚNopInputReaderNc                 ó   — d| _         y )Nr   ©Útotal)r*   s    r-   r.   zNopInputReader.__init__!  s	   € Øˆ�
r/   ©ÚdeviceÚ
dtype_hintc                ó.   — | xj                   dz  c_         y )Nr   rD  )r*   Ústorage_hashÚnbytesrG  rH  s        r-   ÚstoragezNopInputReader.storage$  s   € Ø�
Š
�a‰Ž
r/   c                  ó   — y r£   rI   ©r*   rü   r!  s      r-   ÚtensorzNopInputReader.tensor'  ó   € Ør/   c                  ó   — y r£   rI   rN  s      r-   ÚsymintzNopInputReader.symint*  rP  r/   ©r8  N©rF   rG   rH   r.   rL  rO  rR  rI   r/   r-   rB  rB     s   „ óð 7;Àtô òór/   rB  c                   óD   — e Zd Zd	ddœd„Zdddœd„Z	 d	dddddœd„Zd„ Zy)
ÚInputReaderN)Úpbarc                óv   — |€t         j                  d«       |�t        |«      nd | _        g | _        || _        y )Nz0no save_dir specified, will generate random data)r@   rA   r   Ústorerü   rW  )r*   Úsave_dirrW  s      r-   r.   zInputReader.__init__1  s9   € ð
 ÐÜ�K‰KÐJÔKØ5=Ð5IÔ'¨Ô1ÈtˆŒ
ØˆŒ	Øˆ�	r/   rF  c                óð  — | j                   �| j                   j                  d«       t        |«      }t        |«      }| j                  �P|�N	 | j                  j                  |«      }||j                  k7  r!t        j                  d||j                  «       |S t        j                  d|«       ||j                  z  f}t        d |¬«      }t        ||||«      j                  «       S # t        $ r Y ŒZw xY w)Nr   zdevice mismatch: %s != %sz1could not load %s, generating random data instead©rx   )rW  ÚupdateÚ_device_or_defaultÚ_dtype_or_defaultrY  Úread_storagerG  r@   rA   r­   Úitemsizer;  r
   Úuntyped_storage)r*   rJ  rK  rG  rH  rL  rx   r7  s           r-   rL  zInputReader.storage<  sà   € Ø�9‰9Ð Ø�I‰I×Ñ˜QÔÜ# FÓ+ˆÜ& zÓ2ˆ
Ø�:‰:Ð! lÐ&>ð
ØŸ*™*×1Ñ1°,Ó?�ð ˜WŸ^™^Ò+Ü—K‘KÐ ;¸VÀWÇ^Á^ÔTð �Ü�‰ÐGÈÔVØ˜:×.Ñ.Ñ.Ð0ˆÜ# D°Ô6ˆÜ˜E 6¨:°vÓ>×NÑNÓPÐPøô %ò Ùðús   ÁC) Ã)	C5Ã4C5)Ústorage_offsetry   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\  )ry   rG  rì   )Úmemory_format)r;  Ú_storage_offset_or_defaultr_  Ú_is_leaf_or_defaultÚ_requires_grad_or_defaultru   rO  rG  Úno_gradÚset_Úenable_gradÚcloneÚpreserve_formatÚ_subclassesÚ
meta_utilsÚsafe_is_leafÚ_utilsÚset_tensor_metadatarü   Úappend)
r*   rL  rx   r7  rc  ry   rì   rd  ÚmetadataÚts
             r-   rO  zInputReader.tensorR  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ü   rt  )r*   Úvals     r-   rR  zInputReader.symints  s   € Ø�	‰	×Ñ˜ÔØˆ
r/   r£   rT  rI   r/   r-   rV  rV  0  s>   „ ð	¨dô 	ð 7;Àtô Qð4 ð	ð ØØØôóBr/   rV  c                   óP   — e Zd Zddœd„Zd„ Zdddœdefd„Zdd	„Zd
„ Zdd„Z	dd„Z
y)ÚInputWriterF©Ústable_hashc                óŒ   — g | _         t        j                  «       | _        || _        |�t        ||¬«      nd | _        i | _        y )Nr{  )Ú_linesÚ	itertoolsr·   Ústorage_counterrZ  r   rY  Úseen_storages)r*   rZ  r|  s      r-   r.   zInputWriter.__init__…  sG   € ØˆŒä(Ÿ™Ó0ˆÔØ ˆŒð Ð#ô ˜x°[ÕAàð 	Œ
ð
  ˆÕr/   c                 ór   — dg}|j                  d„ | j                  D «       «       |j                  d«       |S )Nzdef load_args(reader):c              3   ó&   K  — | ]	  }d |› �–— Œ y­w)re   NrI   )r¦   Úls     r-   r¨   z$InputWriter.lines.<locals>.<genexpr>•  s   è ø€ Ò1 �4˜�s”Ñ1ùs   ‚zload_args._version = 0)Úextendr~  rt  )r*   Úrs     r-   ÚlineszInputWriter.lines‘  s8   € à$ð
ˆð 	
�‰Ñ1 T§[¡[Ô1Ô1ð 	
�‰Ð)Ô*Øˆr/   N©rH  Údevice_hintr8  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(ú, rh   )r   r�  r"  rk   r€  r_  rG  rZ   r^  rK  rY  Úwrite_storager~  rt  )r*   rb  rH  r‰  ÚwsÚvÚmaybe_dtype_hintr†   rG  rK  rJ  s              r-   rL  zInputWriter.storage   sB  € Ü˜OÓ,ˆØ×Ñ×"Ñ" 2Ó&ˆØˆ=ØˆHØ”$�t×+Ñ+Ó,Ð-Ð.ˆØÐÜ˜TÓ"Ô&7¸
Ó&CÒCØ!.¨z¨nÐ=Ðð ˆØ ×'Ñ'ˆØ�;‰;˜&Ò ØÐ*Ð*Ð*Ø ˆFÜ˜dÓ# vÒ-Ø& v jÐ1ˆLØ ×'Ñ'Ó)ˆØˆØ�:‰:Ð! o×&<Ñ&<×&AÑ&AÀVÒ&KØŸ:™:×3Ñ3°OÓDˆLØ�‰×ÑØˆcÐ# LÐ#3°2°f°ZÀ¸~ÐN^ÐM_Ð_`Ðaô	
ð "#ˆ×Ñ˜2ÑØˆr/   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_eqrˆ  r\  zdtype=zstorage_offset=c              3   ó0   K  — | ]  \  }}|› d |›�–— Œ y­w)ú=NrI   )r¦   Úkr�  s      r-   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”  rL  rb  ry   rG  r;  rx   r7  rt  ÚstrÚtupler_  rg  rc  ru   rr  Úget_tensor_metadatar…  ro   ri  rì   ro  rp  rq  rh  r~  r1   )	r*   r¶   rv  r“  r”  rL  rü   Útensor_metadatard  s	            r-   rO  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ñõ	
r/   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 )Nr¡   z# was unsupported type for dumping: z"""ú[ú])r~  rt  rZ   rê   rw   r›  Ú	enumerateru   r	   rO  ÚintÚSymIntrR  Úunsupported)r*   r¶   Úargr§   ÚaÚname_is         r-   r¤  zInputWriter.unsupportedÜ  sÖ   € à�‰×Ñ˜R ˜vÐ%HÌÈcËÈÐTÔUô �cœD¤%˜=Ô)Ø�K‰K×Ñ˜uÔ%Ü! #›ò 0‘��1Ø ˜6  1 # Q˜�Ü˜a¤§¡Ô.Ø—K‘K ¨Õ*Ü ¤C¬¯©Ð#6Ô7Ø—K‘K ¨Õ*à×$Ñ$ V¨QÕ/ð0ð �K‰K×Ñ˜uÕ%ð *r/   c                 óH   — | j                   j                  d|›d|› d�«       y )Nzreader.const(r˜  z!, filtered out during compilation)r~  rt  )r*   r¶   s     r-   ÚconstzInputWriter.constî  s'   € Ø�‰×ÑØ˜D˜8 5¨¨Ð.OÐPõ	
r/   c                 ó¦   — t        |t        j                  «      r|j                  j                  }| j
                  j                  d|›d|› �«       y )Nzreader.symint(r˜  )rê   ru   r£  r'  Úhintr~  rt  )r*   r¶   rx  s      r-   rR  zInputWriter.symintô  s<   € Ü�cœ5Ÿ<™<Ô(Ø—(‘(—-‘-ˆCØ�‰×Ñ˜^¨C¨7°%¸°vÐ>Õ?r/   rS  )rF   rG   rH   r.   r‡  rš  rL  rO  r¤  r©  rR  rI   r/   r-   rz  rz  „  s9   „ Ø05ô 
 òð 6:Àtò ÐPSó ó8
ò@&ó$
ô@r/   rz  ÚfuncrG  Ú
sym_shapesÚdefault_sym_shapec           	      óÀ  ‡‡‡‡— 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 Šˆˆfd„Šdt        fˆˆ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)rF   rG   rH   Ú__doc__rI   r/   r-   ÚTensorContainerr´    s   „ Ú-r/   r¶  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 inrI   )rR  s   €r-   r.  z=aot_graph_input_parser.<locals>.get_sym_int.<locals>.<lambda>'  s   ø€ �v�hÐYÐZ€ r/   )ru   Ú_checkr"  )rR  r®  r­  s   `€€r-   Úget_sym_intz+aot_graph_input_parser.<locals>.get_sym_int$  s9   ù€ Ü�‰Ø�jÐ ÒAÐ$5¸TÐ$AÛZô	
ð �~‰~˜fÐ&7Ó8Ð8r/   r8  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³   )ry   rG  )
r¡  Ústriprt  r¢  rv   ru   ÚrandnÚzerosr×   Úmark_dynamic)rx   ry   Úresolved_shapeÚdynamic_dimsr§   Údimr³   Úconstructorrÿ   r<  rG  rº  s             €€r-   Ú
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Õ.ð	/àˆ
r/   ú,r   r*   )Útorch.fx.graphr°  ro   r1   ÚvaluesÚinspectÚ	getsourcer	   Ú__annotations__ÚreÚsearchÚgroupsr›  r"   ÚgroupÚ	signaturerl   ÚfinditerÚsetattr)r¬  rG  r­  r®  r°  rÅ   rÌ   Ú	dtype_mapÚdtype_patternÚsourceÚtensor_assignment_regexÚtensor_regexÚsym_shape_regexr¶  r!  rÄ  Úannotationsr…   Ú
annotationÚmatchÚ	data_typeÚ	shape_strrx   ry   Ú	containerÚ	attr_namer`   rº  s    ```                       @r-   Úaot_graph_input_parserrß  ú  sð  û€ õ* +à.9×.?Ñ.?Ó.A×B¡
  U�˜‘ÐB€IÑBØ—H‘H˜[×/Ñ/Ó1Ó2€Mô ×Ñ˜tÓ$€Fð "<¸M¸?ÐJzÐ{ÐØ˜�Ð&6Ð7€LØ&€O÷.ñ .ð  €FàÒ!˜r€Jõ9ð¤Fö ð* ×&Ñ&€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 Cs   žGr+   c                 óê   ‡ ‡— t        j                  «       Št        j                  j	                  t        j                  j                  ‰ «      «      Š ˆf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                 óF   •‡ — t        j                  ‰ «      ˆ ˆfd„«       }|S )Nc                  ó€   •— ‰j                  «        	  ‰| i |¤Ž‰j                  «        S # ‰j                  «        w xY wr£   )ÚenableÚdisable)rü   r!  ÚfnÚprofs     €€r-   Úwrapperz3profile_to_file.<locals>.decorator.<locals>.wrapperh  s1   ø€ à�K‰KŒMðÙ˜4Ð* 6Ñ*à—‘•ø�—‘•ús   “+ «=)Ú	functoolsÚwraps)rå  rç  ræ  s   ` €r-   Ú	decoratorz"profile_to_file.<locals>.decoratorg  s%   ù€ Ü	�‰˜Ó	ô	ó 
ð	ð ˆr/   c            	      óš   •— ‰j                  ‰ «       t        j                  j                  t	        j
                  d‰ › d‰ › d�«      «       y )Nz!                Wrote profile to z+, view with:

                    snakeviz z

                )Ú
dump_statsÚsysÚstderrr>   r3   r4   )r+   ræ  s   €€r-   Úsave_itz profile_to_file.<locals>.save_itr  sK   ø€ Ø�‰˜Ô!Ü�
‰
×ÑÜ�O‰Oð"Ø"* ð ,à&˜Zð (ðóõ		
r/   )ÚcProfileÚProfiler    r!   r#   Ú
expanduserÚatexitÚregister)r+   rê  rï  ræ  s   `  @r-   Úprofile_to_filerõ  ]  sR   ù€ ô ×ÑÓ€DÜ�w‰w�‰œrŸw™w×1Ñ1°(Ó;Ó<€Hô	õ
ô ‡O�O�GÔØÐr/   )FF)F)r¤   NN)brµ  ró  rø   rð  rè  rO   rÈ  r  Úloggingr    rË  rª   rí  rM   r3   Úcollectionsr   Ú	importlibr   Útypingr   r   r   r   ru   Útorch._prims_commonÚ_prims_commonr	  Útorch._subclasses.meta_utilsr	   Útorch._dynamo.testingr
   r   Ú torch.multiprocessing.reductionsr   Útorch.utils._content_storer   r   r   r   r   r   Ú	getLoggerrF   r@   r   Úinductor_configÚ	is_fbcoderß   Úlibfb.py.build_infoÚlibfbr2   Úextra_importsÚpyÚ
build_infoÚ	BuildInfoÚget_build_ruler&   r5   r1   r?   r   rS   rq   rV   Ú	lru_cacher¸   rÏ   rÛ   rÝ   ræ   r  rè   rð   r  r  r)  r1  r  r6  r;  r?  Úfloat32r_  rG  r^  rg  ri  rh  rB  rV  rz  rw   rš  r#  r¢  rß  rõ  )r6   s   0r-   ú<module>r     s  ðñó$ Û Û Û Û Û Û Û Û 	Û 	Û Û 
Û Û Ý Ý #ß 3Ó 3ã Ý #Û #Ý Ý .Ý .Ý ;ß Må ß .ð €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 €×Ñ�TÓñó ðð0 /4ô ð2 -2ô ò(@òUô	�Iô 	ò
ó0ð> ð	7ð Øô7òtò*ò$1ð ð	ð ØôðRVØÐ5Ñ6ðVð +ðVð &ó	Vð/�Qð /˜8 X¨a¡[ M°1Ð$4Ñ5ó /ñ " %§-¡-Ó0Ð Ù" < 5§<¡<°Ó#6Ó7Ð Ù*¨1Ó-Ð Ù)¨%Ó0Ð Ù# EÓ*Ð ÷ñ ÷ Eñ E÷hs@ñ s@ðp Ø+/Ø'+ñ	`Ø
�D˜‘L�> 4¨¡<Ð/Ñ
0ð`àð`ð ˜˜c 3˜h™Ñ(ð`ð   ‘}ð	`ð
 
ˆ#ˆsˆ(�^ó`ðF#˜cð # h°¨s°A¨vÑ&6ô #ùòe Us   ÄI!