Ë
    [^(h�Ë  ã                   óþ  — U d dl Z d dlZd dlZd dlZd dlmZmZ d dlmZm	Z	m
Z
mZmZm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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  er&d dl!Z!d dl"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a,ee-   e.d<   g d¢Z/de-fd„Z0i Z1e2e3e4f   e.d<   	 dPde5deejl                  jn                     de3fd„Z8dee3   fd„Z9de3fd„Z:d„ Z;de3fd„Z< ejz                  e>«      Z? G d„ de«      Z@dejl                  jn                  ddfd„ZAdeBe3df   fd„ZCdejl                  jn                  deBedf   fd„ZDdejl                  jn                  defd „ZEdejl                  jn                  deBe3df   fd!„ZFd"eBe3df   deBe3df   fd#„ZGd$eBeej�                  ej’                  e4ej”                  eKej˜                  e-f   df   deBd%   fd&„ZMd'eBej�                  df   d(eBd%   deBej�                  df   fd)„ZNd*edej�                  fd+„ZOd,eej�                  e4eKe-f   d-d.dej�                  fd/„ZPd*ej�                  d0eej�                  ej’                  e4ej”                  eKej˜                  e-f   deej�                  e4eKe-f   fd1„ZQd2d3d4eBe3df   d5eBej�                  df   d6eBd%   d7eBe3df   d8eBej�                  df   d9eBd%   d:e-d;eBd<   d=eBeej�                  ej’                  e4ej”                  eKej˜                  e-f   df   deBeej�                  e4eKe-f   df   fd>„ZRd2d3d4eBe3df   d5eBej�                  df   d6eBd%   d7eBe3df   d8eBej�                  df   d9eBd%   d:e-d;eBd<   d=eBeej�                  ej’                  e4ej”                  eKej˜                  e-f   df   deBeej�                  e4eKe-f   df   fd?„ZS G d@„ dA«      ZTe jª                   G dB„ dC«      «       ZVee3eBe3ee3ef   f   f   ZWee.dD<   	  e jª                  dE¬F«       edG¬H«       G dI„ dJ«      «       «       ZX edG¬H«       G dK„ dL«      «       ZY edG¬H«      ddMœdejl                  jn                  dNeeeXee3ef   f      fdO„«       ZZy)Qé    N)ÚMappingÚSequence)ÚAnyÚCallableÚFinalÚOptionalÚTYPE_CHECKINGÚUnion)Ú	TypeAlias)Ú
FakeTensor)Úcompatibility)ÚFakeTensorProp)ÚOperatorSupport)ÚCALLABLE_NODE_OPS)Ú_pytree©Ú_pybind_stateÚ_SUPPORT_ONNXRT)Úis_onnxrt_backend_supportedÚtorch_compile_backendÚOrtExecutionProviderÚOrtBackendOptionsÚ
OrtBackendÚreturnc                  ó  — t         €d	 t        j                  d«       t        j                  d«       t        j                  d«       ddl} ddl} ddl} ddl} ddlm}m	}m
}m} da t         S t         S # t        $ r
 da Y t         S w xY w)	a!  Returns ``True`` if ONNX Runtime dependencies are installed and usable
    to support TorchDynamo backend integration; ``False`` otherwise.

    Example::

        # xdoctest: +REQUIRES(env:TORCH_DOCTEST_ONNX)
        >>> import torch
        >>> if torch.onnx.is_onnxrt_backend_supported():
        ...     @torch.compile(backend="onnxrt")
        ...     def f(x):
        ...             return x * x
        ...     print(f(torch.randn(10)))
        ... else:
        ...     print("pip install onnx onnxscript onnxruntime")
        ...
    NÚonnxruntimezonnxruntime.capi._pybind_stateÚ
onnxscriptr   )Údecomposition_tableÚfx_onnx_interpreterÚpassesÚ
type_utilsTF)r   Ú	importlibÚimport_moduleÚ
torch.onnxÚtorch.onnx._internalÚ%torch.onnx._internal._exporter_legacyÚ torch.onnx._internal.diagnosticsÚtorch.onnx._internal.fxr   r   r    r!   ÚImportError)Útorchr   r   r    r!   s        ú^/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/onnx/_internal/onnxruntime.pyr   r   /   s‚   € ô& Ðð	$Ü×#Ñ# MÔ2Ü×#Ñ#Ð$DÔEô ×#Ñ# LÔ1ãÛ'Û8Û3÷ó ð #ˆOô ÐŒ?Ðøô ò 	$Ø#‰OäÐð	$ús   ˆAA1 Á1BÂBÚ_dumped_onnx_modelÚmodel_stringÚgraph_modulec                 ó¨  — t         j                  j                  dd«      }|syt        j                  |d«      dz   }|› |› d�}t	        |d«      5 }|j                  | «       ddd«       |t        |<   |�D|› |› d�}t	        |d	d
¬«      5 }|j                  t        |j                  «      «       ddd«       |S |S # 1 sw Y   ŒZxY w# 1 sw Y   |S xY w)a  Stores the onnx model into a file.
    The name is "{ONNXRT_DUMP_PATH}{N}.onnx"
    where *N* is the number of files already stored with
    this prefix.
    If graph_module is not None, the graph is stored as a string with
    the same filename except the extension (.txt).
    ÚONNXRT_DUMP_PATHNÚ éÿÿÿÿé   z.onnxÚwbz.txtÚwzutf-8)Úencoding)ÚosÚenvironÚgetr,   ÚopenÚwriteÚstrÚgraph)r-   r.   ÚprefixÚnÚfilenameÚfÚfilename_txts          r+   Ú_dump_onnx_modelrC   c   s×   € ô �Z‰Z�^‰^Ð.°Ó5€FÙØÜ×Ñ˜v rÓ*¨QÑ.€AØ�˜!˜˜EÐ"€HÜ	ˆh˜Ó	ð  Ø	�‰�Ô÷à!"Ô�vÑØÐØ ˜ !  DÐ)ˆÜ�, ¨gÔ6ð 	-¸!Ø�G‰G”C˜×*Ñ*Ó+Ô,÷	-à€Oˆ8€O÷ð ú÷
	-à€Oús   ÁB;Â
%CÂ;CÃCc                  ó   — dgS )NÚCPUExecutionProvider© rF   ó    r+   Ú_infer_default_epsrH   |   s   € ð #Ð#Ð#rG   Únamec                 ó”   — t         j                  j                  «       r*t         j                  j                  j	                  | «       yy)zŠIf PyTorch is installed with CUDA support, this starts NVTX range.

    Check torch.cuda.nvtx.range_push's document for more details.
    N)r*   ÚcudaÚis_availableÚnvtxÚ
range_push©rI   s    r+   Ú_nvtx_range_pushrP   ‚   s/   € ô
 ‡z�z×ÑÔ Ü�
‰
�‰×"Ñ" 4Õ(ð !rG   c                  ó’   — t         j                  j                  «       r)t         j                  j                  j	                  «        yy)z�If PyTorch is installed with CUDA support, this terminates NVTX range.

    Check torch.cuda.nvtx.range_pop's document for more details.
    N)r*   rK   rL   rM   Ú	range_poprF   rG   r+   Ú_nvtx_range_poprS   ‹   s-   € ô
 ‡z�z×ÑÔ Ü�
‰
�‰×!Ñ!Õ#ð !rG   Údevice_typec                 óä   — ddl m} | dk(  r|j                  j                  «       S | dk(  r|j                  j	                  «       S | dk(  r|j                  j                  «       S t        d| z   «      ‚)Nr   r   rK   ÚcpuÚmaiazUnsupported device type: )Úonnxruntime.capir   Ú	OrtDevicerK   rV   ÚnpuÚ
ValueError)rT   ÚORTCs     r+   Ú_get_ort_device_typer]   ”   sg   € Ý6à�fÒØ�~‰~×"Ñ"Ó$Ð$Ø�eÒØ�~‰~×!Ñ!Ó#Ð#à�fÒØ�~‰~×!Ñ!Ó#Ð#Ü
Ð0°;Ñ>Ó
?Ð?rG   c                   ó®   ‡ — e Zd ZdZdee   deeef   fˆ fd„Zde	ee
j                  j                  f   de
j                  j                  defˆ fd„Zˆ xZS )	ÚOrtOperatorSupporta0  Operator support for ONNXRuntime backend.

    It has two-level of support decision. One is via support_dict and the other one
    is via extra_support_dict. The logic of using support_dict is implemented in
    OrtOperatorSupport and extra_support_dict is used by OperatorSupport.is_node_supported.
    Úsupport_dictÚextra_support_dictc                 ó2   •— t         ‰| �  |«       || _        y ©N)ÚsuperÚ__init__Ú_onnx_support_dict)Úselfr`   ra   Ú	__class__s      €r+   re   zOrtOperatorSupport.__init__¯   s   ø€ ô
 	‰ÑÐ+Ô,Ø".ˆÕrG   Ú
submodulesÚnoder   c                 óÖ  •— |j                   t        vry|j                   dk(  rM|j                  | j                  v r5t        j                  d|j                  t        |j                  «      «       yt        ‰| �!  ||«      r5t        j                  d|j                  t        |j                  «      «       yt        j                  d|j                  t        |j                  «      «       y)NFÚcall_functionz0support_dict supports node.target: %s (type: %s)Tz6extra_support_dict supports node.target: %s (type: %s)zLsupport_dict and extra_support_dict don't support node.target: %s (type: %s))
Úopr   Útargetrf   ÚloggerÚinfoÚtyperd   Úis_node_supportedÚwarning)rg   ri   rj   rh   s      €r+   rr   z$OrtOperatorSupport.is_node_supported·   s¸   ø€ ð �7‰7Ô+Ñ+Øà�7‰7�oÒ%¨$¯+©+¸×9PÑ9PÑ*PÜ�K‰KØBØ—‘Ü�T—[‘[Ó!ôð
 ô ‰7Ñ$ Z°Ô6Ü�K‰KØHØ—‘Ü�T—[‘[Ó!ôð
 Ü�‰ØZØ�K‰KÜ�—‘Óô	
ð
 rG   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úsetr   Údictr<   re   r   r*   ÚnnÚModuleÚfxÚNodeÚboolrr   Ú__classcell__)rh   s   @r+   r_   r_   §   sc   ø„ ñð/ S¨¡Xð /À4ÈÈSÈÁ>õ /ðØ! # u§x¡x§¡Ð"6Ñ7ðØ?D¿x¹x¿}¹}ðà	÷ñ rG   r_   c                 óæ   — | j                   }g }d}|j                  D ]7  }|j                  dk(  r|j                  |«       |�Œ&|j                  dk7  sŒ6|}Œ9 |€y|D ]  }|j	                  |«       Œ y)z«
    In torch.fx.Graph, placeholder is a special assignment node. If it's not
    executed in the beginning, it could overwrite values computed by upstream
    nodes.
    NÚplaceholder)r=   Únodesrm   ÚappendÚprepend)r.   r=   ÚplaceholdersÚfirst_not_placeholderrj   r�   s         r+   Ú_move_placeholder_to_frontr‡   Ù   s†   € ð ×Ñ€EØ€LØ ÐØ—‘ò )ˆØ�7‰7�mÒ#Ø×Ñ Ô%Ø Ñ(¨T¯W©W¸Ó-EØ$(Ñ!ð	)ð
 Ð$ØØ#ò 3ˆØ×%Ñ% kÕ2ñ3rG   .c                  óà   — g }| D ]]  }t        |d«      sŒ|j                  }|j                  dk(  r|j                  d«       Œ=|j                  dk(  sŒM|j                  d«       Œ_ t	        |«      S )zBReturn the first valid device (i.e., GPU or CPU) in argument list.ÚdevicerK   ÚCUDAExecutionProviderrV   rE   )Úhasattrr‰   rq   rƒ   Útuple)ÚargsÚepsÚargr‰   s       r+   Ú_infer_ep_from_devicer�   î   sg   € à
€CØò 3ˆÜ�3˜Õ!Ø—Z‘ZˆFØ�{‰{˜fÒ$Ø—
‘
Ð2Õ3Ø—‘ Ó%Ø—
‘
Ð1Õ2ð3ô �‹:ÐrG   c                 ó  — g }| j                   j                  D ]f  }|j                  dk(  sŒt        |d«      r7d|j                  v r)t        |j                  d   t        j                  «      sJ ‚|j                  |«       Œh t        |«      S )Nr�   ÚmetaÚval)
r=   r‚   rm   r‹   r’   Ú
isinstancer*   ÚTensorrƒ   rŒ   )r.   r…   rj   s      r+   Ú_extract_graph_module_inputsr–   û   s{   € Ø€LØ×"Ñ"×(Ñ(ò &ˆØ�7‰7�mÓ#Ü�t˜VÔ$¨°$·)±)Ñ);Ü! $§)¡)¨EÑ"2´E·L±LÔAÐAÐAØ×Ñ Õ%ð	&ô
 �ÓÐrG   c                 óŽ   — | j                   j                  D ]"  }|j                  dk(  sŒ|j                  d   c S  t	        d«      ‚)zHCollect "val" fields from outputs metadata in this torch.fx.GraphModule.Úoutputr   z2No output node found in this torch.fx.GraphModule.)r=   r‚   rm   r�   r[   )r.   rj   s     r+   Ú_extract_graph_module_outputsr™     sG   € à×"Ñ"×(Ñ(ò  ˆØ�7‰7�hÓð —9‘9˜Q‘<Òð	 ô
 ÐIÓ
JÐJrG   c                 óÊ   — t        j                  t        | «      «      \  }}|D �cg c]+  }t        |d«      rd|j                  v r|j                  d   ‘Œ- }}t        |Ž S c c}w )z[Return the all valid devices (i.e., GPU or CPU) among outputs of this torch.fx.GraphModule.r’   r“   )r   Útree_flattenr™   r‹   r’   r�   )r.   Úflattened_output_argsÚ_Ú
output_argÚselected_output_argss        r+   Ú_infer_ep_from_graph_moduler      ss   € ä&×3Ñ3Ü% lÓ3ó ÑÐ˜1ð 0öàô �J Ô'¨E°Z·_±_Ñ,Dð	 	�‰˜ÓðÐð ô !Ð"6Ð7Ð7ùòs   ¦0A rŽ   c                 óf   — dt         dt        fd„}t        | «      }t        t	        ||d¬«      «      S )z:Sort execution providers in eps based on pre-set priority.Úepr   c                 ó   — | dk(  ry| dk(  ryy)NrE   é   rŠ   r3   r   rF   )r¢   s    r+   Úget_execution_provider_priorityz2_sort_eps.<locals>.get_execution_provider_priority"  s   € ØÐ'Ò'àØÐ(Ò(ð àrG   T)ÚkeyÚreverse)r<   Úintrx   rŒ   Úsorted)rŽ   r¥   Ú
unique_epss      r+   Ú	_sort_epsr«     s6   € ð	¬Cð 	´Có 	ô �S“€JÜ”˜
Ð(GÐQUÔVÓWÐWrG   Úvalues©zORTC.OrtDevice.c           	      óP  ‡‡‡— ddl mŠ dt        dt        fd„Šdt        t        j
                  t        j                  t        t        j                  t        t        j                  t        f   dt        fˆˆfd„Št        | «      dkD  rt        ˆfd„| D «       «      }|S  ‰d	«      fS )
Nr   r   Ú	device_idr   c                 ó   — | xs dS )Nr   rF   )r¯   s    r+   Ú_device_id_or_zeroz-_get_onnx_devices.<locals>._device_id_or_zero;  s   € ØŠ~˜AÐrG   Úvaluec           	      ó8  •— t        | t        j                  «      rc ‰j                  t	        | j
                  j                  «      ‰j                  j                  «        ‰| j
                  j                  «      «      S t        | t        j                  t        t        j                  t        t        j                  t        f«      r5 ‰j                  t	        d«      ‰j                  j                  «       d«      S t        dt!        t        | «      «      z   «      ‚)NrV   r   zUnsupported value type: )r”   r*   r•   rY   r]   r‰   rq   Údefault_memoryÚindexÚSymIntr¨   ÚSymFloatÚfloatÚSymBoolr~   r[   r<   )r²   r\   r±   s    €€r+   Ú_map_tensor_or_sym_to_devicez7_get_onnx_devices.<locals>._map_tensor_or_sym_to_device>  sÌ   ø€ ô
 �eœUŸ\™\Ô*Ø!�4—>‘>Ü$ U§\¡\×%6Ñ%6Ó7Ø—‘×-Ñ-Ó/Ù" 5§<¡<×#5Ñ#5Ó6óð ô
 Ø”E—L‘L¤#¤u§~¡~´u¼e¿m¹mÌTÐRô
ð "�4—>‘>Ü$ UÓ+¨T¯^©^×-JÑ-JÓ-LÈaóð ô Ð7¼#¼dÀ5»kÓ:JÑJÓKÐKrG   c              3   ó.   •K  — | ]  } ‰|«      –— Œ y ­wrc   rF   )Ú.0r²   rº   s     €r+   ú	<genexpr>z$_get_onnx_devices.<locals>.<genexpr>S  s   øè ø€ ÒTÀEÑ8¸×?ÑTùs   ƒr3   )rX   r   r¨   r
   r*   r•   r¶   r·   r¸   r¹   r~   ÚlenrŒ   )r¬   Úort_devicesr\   r±   rº   s     @@@r+   Ú_get_onnx_devicesrÀ   1  sŽ   ú€ õ 7ð¤cð ¬có ðLÜÜ�L‰Lœ%Ÿ,™,¬¬U¯^©^¼UÄEÇMÁMÔSWÐWñ
ðLô 
ö	Lô( ˆ6ƒ{�Q‚ÜÓTÈVÔTÓTˆØÐá,¨QÓ/Ð1Ð1rG   ÚtensorsÚdevicesc                 óp  — ddl m} ddlm}  |j                  «       }|j                  t        | «      «       g }g }g }| D ]^  }|j                  ||j                     «       |j                  |j                  «       «       |j                  |j                  «       «       Œ` |j                  | ||||«       |S )Nr   r   )Ú_TORCH_DTYPE_TO_NUMPY_DTYPE)rX   r   Ú"torch.onnx._internal.fx.type_utilsrÄ   ÚOrtValueVectorÚreserver¾   rƒ   ÚdtypeÚsizeÚdata_ptrÚpush_back_batch)	rÁ   rÂ   r\   rÄ   Ú	ortvaluesÚdtypesÚshapesÚ	data_ptrsÚtensors	            r+   Ú!_get_ortvalues_from_torch_tensorsrÑ   Y  s¥   € õ 7åNà#�×#Ñ#Ó%€IØ×Ñ”c˜'“lÔ#Ø€FØ€FØ€Iàò ,ˆØ�‰Ð1°&·,±,Ñ?Ô@Ø�‰�f—k‘k“mÔ$Ø×Ñ˜Ÿ™Ó*Õ+ð,ð ×Ñ˜g y°&¸&À'ÔJØÐrG   rÐ   c                 ó¨   — | j                   rt        d«      ‚t        j                  | j	                  «       | j
                  | j                  ¬«      }|S )Nz#sparse tensor is not yet supported.)rÈ   r‰   )Ú	is_sparser[   r*   ÚemptyrÉ   rÈ   r‰   )rÐ   Úouts     r+   Ú_to_real_tensorrÖ   n  s<   € Ø×ÒÜÐ>Ó?Ð?Ü
�+‰+�f—k‘k“m¨6¯<©<ÀÇÁÔ
N€CØ€JrG   Údynamo_valueÚ
value_infoúonnx.ValueInfoProtoc                 ó€  — t        | t        j                  «      rZt        |j                  j
                  j                  j                  «      dk(  r$| j                  dk(  rt        j                  | «      S t        | t        «      r%t        j                  | t        j                  ¬«      S t        | t        «      r%t        j                  | t        j                  ¬«      S t        | t        «      r%t        j                  | t        j                  ¬«      S t        | t        j                  «      sJ ‚| j                  «       S )z9Helper function to wrap PyTorch variables as torch.Tensorr   )r3   )rÈ   )r”   r*   r•   r¾   rq   Útensor_typeÚshapeÚdimÚsqueezer¨   rÐ   Úint64r¸   Úfloat32r~   Ú
contiguous)r×   rØ   s     r+   Ú_adjust_scalar_from_fx_to_onnxrâ   u  sÔ   € ô 	�<¤§¡Ô.Ü�
—‘×+Ñ+×1Ñ1×5Ñ5Ó6¸!Ò;Ø×Ñ $Ò&ô �}‰}˜\Ó*Ð*Ü	�L¤#Ô	&Ü�|‰|˜L´·±Ô<Ð<Ü	�L¤%Ô	(Ü�|‰|˜L´·±Ô>Ð>Ü	�L¤$Ô	'Ü�|‰|˜L´·
±
Ô;Ð;ä˜,¬¯©Ô5Ð5Ð5Ø×&Ñ&Ó(Ð(rG   Ú
prim_valuec           	      óø   — t        | t        j                  «      sJ d«       ‚t        |t        j                  t        t        j
                  t        t        j                  t        f«      r| j                  «       S | S )zFHelper function to wrap ORT-produced torch.Tensor as PyTorch variableszORT's output must be tensor.)
r”   r*   r•   r¶   r¨   r·   r¸   r¹   r~   Úitem)rÐ   rã   s     r+   Ú_adjust_scalar_from_onnx_to_fxræ   •  sX   € ô$ �fœeŸl™lÔ+ÐKÐ-KÓKÐ+ÜØÜ	�‰”sœEŸN™N¬E´5·=±=Ä$ÐGôð
 �{‰{‹}ÐØ€MrG   Úsessúonnxruntime.InferenceSessionÚinput_namesÚinputsÚinput_devicesÚoutput_namesÚoutputsÚoutput_devicesÚpreallocate_outputÚinput_value_infos©rÙ   .Únormalized_prim_outputsc
                 óè  — dd l }
ddlm} t        d«       t	        d„ t        ||«      D «       «      }t        «        t        d«       t        ||«      }|rt	        d„ |D «       «      }t        ||«      }n |j                  «       }t        «        t        d«        |
j                  «       }|j                  dd	«       | j                  ||||||«       t        «        |r3t        d
«       t	        d„ t        |	«      D «       «      }t        «        |S t        d
«       |
j                  j                  j                  j                  |«      }t	        d„ t        ||	«      D «       «      }t        «        |S )Nr   r   rá   c              3   ó:   K  — | ]  \  }}t        ||«      –— Œ y ­wrc   ©râ   ©r¼   r�   rØ   s      r+   r½   z8_run_onnx_session_with_ortvaluevector.<locals>.<genexpr>Æ  ó#   è ø€ ò áˆC�ô 	' s¨J×7ñùó   ‚rË   c              3   óV   K  — | ]!  }t        |t        «      rt        |«      n|–— Œ# y ­wrc   )r”   r   rÖ   )r¼   Úts     r+   r½   z8_run_onnx_session_with_ortvaluevector.<locals>.<genexpr>Ó  s(   è ø€ ò 
ØGH¤*¨Q´
Ô";ŒO˜AÔÀÓBñ
ùs   ‚')Úrun_with_ortvaluevectorÚ'disable_synchronize_execution_providersÚ1zafter run_with_ortvaluevectorc              3   ó:   K  — | ]  \  }}t        ||«      –— Œ y ­wrc   ©ræ   ©r¼   Úonnx_outputÚprim_outputs      r+   r½   z8_run_onnx_session_with_ortvaluevector.<locals>.<genexpr>ì  ó#   è ø€ ò 
á(�˜[ô +¨;¸×Dñ
ùrø   c              3   ó:   K  — | ]  \  }}t        ||«      –— Œ y ­wrc   rÿ   r   s      r+   r½   z8_run_onnx_session_with_ortvaluevector.<locals>.<genexpr>ú  r  rø   )r   rX   r   rP   rŒ   ÚziprS   rÑ   rÆ   Ú
RunOptionsÚadd_run_config_entryrû   ÚtrainingÚ	ortmoduleÚ_utilsÚ_ortvalues_to_torch_tensor)rç   ré   rê   rë   rì   rí   rî   rï   rð   rò   r   r\   Ú
ort_inputsÚpth_outputsÚort_outputsÚrun_optionss                   r+   Ú%_run_onnx_session_with_ortvaluevectorr  ±  sx  € ó" Ý6ä�\Ô"Üñ ä" 6Ð+<Ó=ôó €Fô ÔäÐ&Ô'Ü2°6¸=ÓI€Jñ
 Üñ 
ØLSô
ó 
ˆô 8¸À^ÓT‰à)�d×)Ñ)Ó+ˆÜÔäÐ.Ô/Ø(�+×(Ñ(Ó*€KØ×$Ñ$Ð%NÐPSÔTØ× Ñ Ø�[ *¨l¸KÈôô Ôñ äÐ8Ô9ô ñ 
ä,/°Ð=TÓ,Uô
ó 
ˆô 	ÔØÐô 	Ð8Ô9à!×*Ñ*×4Ñ4×;Ñ;×VÑVØó
ˆô ñ 
ä,/°Ð=TÓ,Uô
ó 
ˆô 	ÔØÐrG   c
           	      óV  — dd l }
t        d„ t        ||«      D «       «      }t        ||«      D ��ci c]=  \  }}||
j                  j	                  |j                  «       j                  «       «      “Œ? }}}| j                  ||«      }t        d„ t        ||	«      D «       «      }|S c c}}w )Nr   c              3   ó:   K  — | ]  \  }}t        ||«      –— Œ y ­wrc   rõ   rö   s      r+   r½   z/_run_onnx_session_with_fetch.<locals>.<genexpr>  r÷   rø   c              3   ó`   K  — | ]&  \  }}t        t        j                  |«      |«      –— Œ( y ­wrc   )ræ   r*   Ú
from_numpy)r¼   r²   r  s      r+   r½   z/_run_onnx_session_with_fetch.<locals>.<genexpr>  s4   è ø€ ò ñ
 ˆE�;ô	 	'Ü×Ñ˜UÓ#Ø÷	
ñùs   ‚,.)r   rŒ   r  ÚOrtValueÚortvalue_from_numpyrV   ÚnumpyÚrun)rç   ré   rê   rë   rì   rí   rî   rï   rð   rò   r   rI   rÐ   Úfeedr  r  s                   r+   Ú_run_onnx_session_with_fetchr    sµ   € ó" äñ ä" 6Ð+<Ó=ôó €Fô   ¨VÓ4÷áˆD�&ð 	ˆk×"Ñ"×6Ñ6°v·z±z³|×7IÑ7IÓ7KÓLÑLð€Dñ ð —(‘(˜<¨Ó.€KÜñ ô
 #& kÐ3JÓ"Kôó €Kð Ðùós   °AB%c                   ó¦   — e Zd ZdZdddeedf   ded   deedf   d	ed   d
ed   ded   deeej                  df   ej                  f   fd„Z	d„ Z
y)ÚOrtExecutionInfoPerSessionzWInformation required to execute torch.fx.GraphModule using onnxruntime.InferenceSessionÚsessionrè   ré   .rð   rñ   rì   Úoutput_value_infosrë   r­   rî   Úexample_outputsc	                 ót   — || _         || _        || _        || _        || _        || _        || _        || _        y rc   ©r  ré   rð   rì   r  rë   rî   r  )	rg   r  ré   rð   rì   r  rë   rî   r  s	            r+   re   z#OrtExecutionInfoPerSession.__init__+  sM   € ð 6=ˆŒð -8ˆÔàBSˆÔà-9ˆÔàCUˆÔð :GˆÔà:HˆÔð ð 	ÕrG   c                 ó˜  — ddl m}m} t        |«      t        | j                  «      k7  ryt        || j                  «      D �]†  \  }}t        |t        j                  t        t        f«      s yt        |t        t        t        f«      ro |t        |«      «      }||j                  j                  j                  k7  r yt        |j                  j                  j                  j                   «      dk7  r yŒ¸||j"                     }||j                  j                  j                  k7  r yt        |j                  |j                  j                  j                  j                   «      D ]Z  \  }}t        |t        «      r|j$                  |k(  s|j&                  rŒ2t        |t        j(                  «      r|j&                  rŒY  y �Œ‰ y)Nr   )Ú(_TORCH_DTYPE_TO_ONNX_TENSOR_ELEMENT_TYPEÚ,from_python_type_to_onnx_tensor_element_typeFT)rÅ   r#  r$  r¾   rð   r  r”   r*   r•   r¸   r¨   r~   rq   rÛ   Ú	elem_typerÜ   rÝ   rÈ   Ú	dim_valueÚ	dim_paramr¶   )	rg   r�   r#  r$  r�   rØ   Ú
onnx_dtyperÝ   Úonnx_dims	            r+   Úis_supportedz'OrtExecutionInfoPerSession.is_supportedL  sd  € ÷	
ô ˆt‹9œ˜D×2Ñ2Ó3Ò3ØÜ" 4¨×)?Ñ)?Ó@ó 	!‰OˆC�Ü˜c¤E§L¡L´%¼Ð#=Ô>Ùô ˜#¤¤U¬DÐ1Ô2áIÌ$ÈsË)ÓT�
Ø §¡×!<Ñ!<×!FÑ!FÒFÙ Ü�z—‘×2Ñ2×8Ñ8×<Ñ<Ó=ÀÒBÙ Øð BÀ#Ç)Á)ÑLˆJØ˜ZŸ_™_×8Ñ8×BÑBÒBÙÜ!$ S§Y¡Y°
·±×0KÑ0K×0QÑ0Q×0UÑ0UÓ!Vò !‘��XÜ˜c¤3Ô'Ø×&Ñ&¨#Ò-°×1CÒ1CàÜ ¤U§\¡\Ô2°x×7IÒ7IØâ ò!ð%	!ð6 rG   N)rt   ru   rv   rw   rŒ   r<   r
   r*   r•   re   r*  rF   rG   r+   r  r  (  s¢   „ Ùað
à/ð
ð ˜3 ˜8‘_ð
ð !Ð!;Ñ<ð	
ð
 ˜C ˜H‘oð
ð "Ð"<Ñ=ð
ð Ð2Ñ3ð
ð Ð3Ñ4ð
ð ˜u U§\¡\°3Ð%6Ñ7¸¿¹ÐEÑFó
óB%rG   r  c                   ó€   — e Zd Zdd„Zdej
                  j                  fd„Zdej
                  j                  defd„Z	y)Ú"OrtExecutionInfoForAllGraphModulesNc                 ó   — i | _         y rc   )Úexecution_info_per_graph_module)rg   s    r+   re   z+OrtExecutionInfoForAllGraphModules.__init__v  s   € ð
 ð 	Õ,rG   r.   c                 ót   — || j                   vry | j                   |   }|D ]  } |j                  |Ž sŒ|c S  y rc   )r.  r*  )rg   r.   r�   Ú
candidatesÚ	candidates        r+   Ú&search_reusable_session_execution_infozIOrtExecutionInfoForAllGraphModules.search_reusable_session_execution_info}  sQ   € ð ˜t×CÑCÑCØð ×9Ñ9¸,ÑGˆ
à#ò 	!ˆIØ%ˆy×%Ñ% tÒ,à Ò ð	!ð
 rG   rp   c                 ó~   — || j                   vr|g| j                   |<   y | j                   |   j                  |«       y rc   )r.  rƒ   )rg   r.   rp   s      r+   Úcache_session_execution_infoz?OrtExecutionInfoForAllGraphModules.cache_session_execution_info�  s=   € ð ˜t×CÑCÑCØBFÀˆD×0Ñ0°Ò>à×0Ñ0°Ñ>×EÑEÀdÕKrG   )r   N)
rt   ru   rv   re   r*   r|   ÚGraphModuler2  r  r4  rF   rG   r+   r,  r,  t  s@   „ óðØ!ŸH™H×0Ñ0óð LØ!ŸH™H×0Ñ0ðLØ8RôLrG   r,  r   T)ÚfrozenF)Úis_backward_compatiblec                   óÌ   — e Zd ZU dZdZeee      ed<   	 dZ	e
ed<   	 dZeee      ed<   	 dZe
ed<   	 dZe
ed	<   	 dZed
   ed<   	 dZed   ed<   	 dZeeedgdf         ed<   y)r   aJ  Options for constructing an ``OrtBackend``, the ONNX Runtime
    backend (``"onnxrt"``) for ``torch.compile``.

    Example::

        >>> @torch.compile(
        ...     backend="onnxrt",
        ...     options=torch.onnx._OrtBackendOptions(...),
        ... )
        ... def ort_function(x):
        ...     return x ** x
    NÚpreferred_execution_providersTÚinfer_execution_providersÚdefault_execution_providersFrï   Úuse_aot_autogradztorch.onnx.ExportOptionsÚexport_optionszonnxruntime.SessionOptionsÚort_session_optionszonnx.ModelProtoÚpre_ort_model_transforms)rt   ru   rv   rw   r9  r   r   r   Ú__annotations__r:  r~   r;  rï   r<  r=  r>  r?  r   rF   rG   r+   r   r   £  sÌ   … ñð OSÐ! 8¨HÐ5IÑ,JÑ#KÓRðð '+Ð˜tÓ*ØmàLPÐ ¨(Ð3GÑ*HÑ!IÓPðð  %Ð˜Ó$ØVà!Ð�dÓ!ðð <@€N�HÐ7Ñ8Ó?ØUàBFÐ˜Ð">Ñ?ÓFØVð 	ð ˜hØ�Ð,Ð-¨tÐ3Ñ4Ñ5ñó ð1rG   r   c            	       óì  — e Zd ZU dZddee   fd„Zdej                  j                  de
eeeeef   f      fd„Zdej                  j                  fd„Zdej                  j                  dej                  j                  fd	„Zdej                  j                  dej                  j                  fd
„ZdZeed<   g Zeed       ed<   e	 ddeeeeeef   f      dd fd„«       Zed„ «       Zed„ «       Zy)r   a	  A backend compiles (sub-)graphs in torch.fx.GraphModule to onnxruntime.InferenceSession calls.

    The compiler entry point is OrtBackend.compile, which
        1. partitions the original graph into supported sub-graphs (type: torch.fx.GraphModule) and unsupported
           sub-graphs.
        2. For each supported sub-graph, it replaces its _wrapped_call function with _ort_accelerated_call.
        3. Inside _ort_accelerated_call, it creates onnxruntime.InferenceSession and calls it to execute the sub-graph.
    NÚoptionsc                 ó¬  — ddl m} dd l}dd l}dd l}|€
t        «       n|| _        |j                  j                  j                  j                  | j                  j                  €|j                  j                  «       n| j                  j                  «      | _        |j                  j                  j                  j                  j!                  | j                  j"                  «      }d d d d d dœ}t%        ||«      | _        i | _        t+        «       | _        d| _        d| _        t3        |j4                  d«      rt6        | _        y t8        | _        y )Nr   r   )Úgetattrz_operator.getitemz_operator.mulz_operator.addz_operator.subFrË   )rX   r   r$   r&   Ú+torch.onnx._internal.fx.decomposition_tabler   Ú_optionsÚonnxÚ	_internalÚ_exporter_legacyÚResolvedExportOptionsr=  ÚExportOptionsÚ_resolved_onnx_exporter_optionsr|   r   Ú'_create_onnx_supports_op_overload_tableÚonnx_registryr_   Ú_supported_opsÚ_partitioner_cacher,  Ú_all_ort_execution_infoÚ_assert_allclose_to_baselineÚexecution_countr‹   rÆ   r  r  r  )rg   rB  r\   r*   r`   ra   s         r+   re   zOrtBackend.__init__ï  s1  € Ý:ãÛ4Û:à6=°oÔ0Ô2È7ˆŒð  �J‰J× Ñ ×1Ñ1×GÑGà—=‘=×/Ñ/Ð7ð —
‘
×(Ñ(Ô*à—]‘]×1Ñ1óð 	Ô,ð& —z‘z×+Ñ+×.Ñ.×BÑB×jÑjØ×0Ñ0×>Ñ>ó
ˆð
 ð "&ð "Ø!Ø!ñ
.
Ðô 1°Ð?QÓRˆÔð UWˆÔô (JÓ'KˆÔ$à,1ˆÔ)à ˆÔô
 �t×*Ñ*Ð,=Ô>ô 2ð 	�ô .ð 	�rG   r.   r   c                 ó¤  — d}| j                   j                  rt        |Ž x}r|}nt        |«      x}r|}g }g | j                   j                  xs g ¢t        |«      ¢| j                   j                  xs
 t        «       ¢­D ]L  }t        |t        «      r|i f}nt        |t        «      r|d   €|d   i f}|€Œ7||vsŒ<|j                  |«       ŒN |S )NrF   r3   r   )rF  r:  r�   r    r9  r«   r;  rH   r”   r<   rŒ   rƒ   )rg   r.   r�   Úinferred_epsÚeps_from_argsÚeps_from_graph_moduleÚselected_epsr¢   s           r+   Ú_select_epszOrtBackend._select_epsG  sò   € ð )+ˆØ�=‰=×2Ò2Ü 5°tÐ <Ð<ˆ}Ð<ð
  -‘Ü*EÀlÓ*SÐSÐ&ÐSð  5�àˆð
Ø�m‰m×9Ñ9Ò?¸Rð
ä�|Ó$ð
ð �m‰m×7Ñ7ÒOÔ;MÓ;Oñ
ò 
	(ˆBô
 ˜"œcÔ"Ø˜"�X‘Ü˜B¤Ô&¨2¨a©5¨=Ø˜‘e˜R�[�Ø‰~ "¨LÒ"8Ø×#Ñ# BÕ'ð
	(ð ÐrG   c                 ó„	  — ddl }ddlm}m}  | j                  j
                  |g|¢­Ž }|rb|j                  }|j                  }	|j                  }
|j                  }|j                  }|j                  }|j                  }|j                  }�ní|j                  | j                  j                   |«      j#                  «       }| j                  j$                  r,d| _        t)        |«      }d„ }t+        j,                  ||«      }n	  t/        |«      j0                  |i |¤Ž}|j9                  | j                  j                   ¬«      }|j;                  | j                  j                   |«      j#                  «       }|j#                  || j                  j<                  ¬«      }|j?                  | j                  j@                  jB                  ¬	«      }| jD                  jF                  r#| jD                  jF                  D ]
  } ||«       Œ |jI                  «       }tJ        jL                  jO                  d
d«      rtQ        ||¬«        |jR                  || jD                  jT                   | jV                  |g|¢­Ž ¬«      }tY        d„ |jZ                  j\                  D «       «      }	tY        d„ |jZ                  j^                  D «       «      }
ta        |«      }tc        |tX        «      rta        |«      }nta        |f«      }tY        d„ |jZ                  j\                  D «       «      }tY        d„ |jZ                  j^                  D «       «      }te        ||	||
||||¬«      }| j                  jg                  ||«       | xjh                  dz  c_4        tc        |tj        jl                  «      }|r|fn|}tc        |tX        «      sJ ‚to        d„ |D «       «      sJ ‚tq        d«       | j#                  ||	|||
||| jD                  j&                  ||«
      }ts        «        | jt                  rhtk        jv                  jx                  jz                  |g|¢­ddiŽ}|r|fn|}t}        ||«      D ]%  \  }}tj        j~                  j�                  ||«       Œ' |r|d   S |S # t2        $ r t4        j7                  d|«       d| _        ‚ w xY w)a  This function replaces GraphModule._wrapped_call in compiled model.

        The _wrapped_call is the underlying implementation of forward method. Replacing
        it means we delegate the computation to _ort_acclerated_call and therefore
        onnxruntime.InferenceSession.
        r   N)r   r    Fc                 óX   — t        | d«      rd| j                  v r| j                  d   S | S )Nr’   r“   )r‹   r’   )r²   s    r+   Úmaybe_map_to_meta_valz>OrtBackend._ort_acclerated_call.<locals>.maybe_map_to_meta_val”  s-   € Ü˜u fÔ-°%¸5¿:¹:Ñ2Eð  %Ÿz™z¨%Ñ0Ð0à$˜rG   zFakeTensorProb failed for %s)Údiagnostic_context)Úfx_graph_moduleÚonnxfunction_dispatcher)Úopset_versionr0   )r.   )Úpath_or_bytesÚsess_optionsÚ	providersc              3   ó4   K  — | ]  }|j                   –— Œ y ­wrc   rO   ©r¼   Úinputs     r+   r½   z2OrtBackend._ort_acclerated_call.<locals>.<genexpr>ç  s   è ø€ ÒO¨u §
¥
ÑOùó   ‚c              3   ó4   K  — | ]  }|j                   –— Œ y ­wrc   rO   ©r¼   r˜   s     r+   r½   z2OrtBackend._ort_acclerated_call.<locals>.<genexpr>è  s   è ø€ Ò S° §¥Ñ Sùrg  c              3   ó    K  — | ]  }|–— Œ y ­wrc   rF   re  s     r+   r½   z2OrtBackend._ort_acclerated_call.<locals>.<genexpr>ò  s   è ø€ Ò%P°¤eÑ%Pùó   ‚c              3   ó    K  — | ]  }|–— Œ y ­wrc   rF   ri  s     r+   r½   z2OrtBackend._ort_acclerated_call.<locals>.<genexpr>ó  s   è ø€ Ò&T°&¤vÑ&Tùrk  r!  r3   c              3   óz   K  — | ]3  }t        |t        j                  t        j                  t        f«      –— Œ5 y ­wrc   )r”   r*   r•   r¶   r¨   )r¼   Úelems     r+   r½   z2OrtBackend._ort_acclerated_call.<locals>.<genexpr>  s.   è ø€ ò 
àô �tœeŸl™l¬E¯L©L¼#Ð>×?ñ
ùs   ‚9;Ú$run_onnx_session_with_ortvaluevectorÚexecutorÚaten)Ar   r(   r   r    rQ  r2  r  ré   rì   rð   r  rë   rî   r  ÚMovePlaceholderToFrontrL  r]  r  Údynamic_shapesrï   r™   r   Útree_mapr   Ú	propagateÚ	Exceptionro   rs   ÚFxOnnxInterpreterÚInsertTypePromotionr_  Úto_model_protorN  r`  rF  r?  ÚSerializeToStringr7   r8   r9   rC   ÚInferenceSessionr>  rY  rŒ   r=   rf  r˜   rÀ   r”   r  r4  rS  r*   r•   ÚallrP   rS   rR  Ú_primsrp  Úexecuter  ÚtestingÚassert_close)rg   r.   r�   Úkwargsr   r   r    Ú!cached_execution_info_per_sessionÚonnx_sessionré   rì   rð   r  rë   rî   Úprim_outputsÚextracted_outputsr\  Úfx_interpreterÚexportedÚ
onnx_modelÚ	transformÚonnx_model_bytesÚexecution_info_per_sessionÚis_single_tensor_outputrò   Úonnx_outputsÚbaseline_outputsÚnormalized_baseline_ouptutsr  Úbaseline_outputs                                  r+   Ú_ort_acclerated_callzOrtBackend._ort_acclerated_callh  sÁ  € ó 	çGð PˆD×(Ñ(×OÑOØðØ#òð 	*ñ
 -Ø<×DÑDˆLØ;×GÑGˆKØ<×IÑIˆLØ A× SÑ SÐØ!B×!UÑ!UÐØ=×KÑKˆMØ>×MÑMˆNØ<×LÑLŠLð
 "×8Ñ8Ø×4Ñ4×GÑGØó÷ ‰c‹eð ð ×3Ñ3×BÒBà*/�Ô'Ü$AÀ,Ó$OÐ!ò%ô  '×/Ñ/Ø)Ð+<ó ‘ðØ#I¤>°,Ó#?×#IÑ#IØð$Ø!'ñ$�Lð 1×BÑBØ#'×#GÑ#G×#ZÑ#Zð Có ˆNð "×5Ñ5Ø×4Ñ4×GÑGÈóç‰c‹eð ð
 &×)Ñ)Ø ,Ø(,×(LÑ(L×(dÑ(dð *ó ˆHð
 "×0Ñ0Ø"×BÑB×PÑP×^Ñ^ð 1ó ˆJð �}‰}×5Ò5Ø!%§¡×!GÑ!Gò *�IÙ˜jÕ)ð*ð  *×;Ñ;Ó=ÐÜ�z‰z�~‰~Ð0°$Ô7ô !Ð!1ÀÕMð 8˜;×7Ñ7Ø.Ø!Ÿ]™]×>Ñ>Ø*˜$×*Ñ*¨<Ð?¸$Ò?ôˆLô  ÑO¸
×8HÑ8H×8NÑ8NÔOÓOˆKÜ Ñ S¸:×;KÑ;K×;RÑ;RÔ SÓSˆLÜ-¨dÓ3ˆMô ˜,¬Ô.Ü!2°<Ó!@‘ä!2°L°?Ó!C�ä %Ñ%P¸×9IÑ9I×9OÑ9OÔ%PÓ PÐÜ!&Ñ&T¸J×<LÑ<L×<SÑ<SÔ&TÓ!TÐä)CØ$Ø'Ø"3Ø)Ø#5Ø+Ø-Ø ,ô	*Ð&ð ×(Ñ(×EÑEØÐ8ôð 	×Ò Ñ!Õô
 #-¨\¼5¿<¹<Ó"HÐá6ˆ\‰O¸Lð 	 ô Ð1´5Ô9Ð9Ð9Üñ 
à/ô
ô 
ð 	
ð 
ô
 	Ð?Ô@Ø—x‘xØØØØØØ#ØØ�M‰M×,Ñ,ØØ#ó
ˆô 	Ôà×,Ò,ä$Ÿ|™|×4Ñ4×<Ñ<Øð Ø#ò Ø.4ñ Ðñ (?Ð!Ñ#ÐDTð (ô 14ØÐ9ó1ò IÑ,�˜_ô —‘×*Ñ*¨;¸ÕHðIñ #:ˆ|˜A‰ÐK¸|ÐKøôW !ò Ü—N‘NÐ#AÀ<ÔPð /4�DÔ+ð ðús   ÄR Ò(R?c                 ó~  — ddl m} || j                  v r| j                  |   }|S |} ||| j                  d¬«      }|j	                  «       }|| j                  |<   |j
                  j                  D ]H  }|j                  dk(  sŒd|j                  v sŒ"t        ||j                  «      }| j                  |_        ŒJ |S )Nr   )ÚCapabilityBasedPartitionerT)Úallows_single_node_partitionÚcall_moduleÚfused_)Ú!torch.fx.passes.infra.partitionerr“  rP  rO  Úpartition_and_fuser=   r‚   rm   rI   rD  r‘  Ú_wrapped_call)	rg   r.   r�   r“  Úpartitioned_prim_graph_moduleÚprim_graph_moduleÚpartitionerrj   Úfused_modules	            r+   ÚcompilezOrtBackend.compile1  sÔ   € õ
 	Qð, ˜4×2Ñ2Ñ2Ø,0×,CÑ,CÀLÑ,QÐ)ð0 -Ð,ð- !-ÐÙ4Ø!Ø×#Ñ#Ø-1ôˆKð
 -8×,JÑ,JÓ,LÐ)Ø4QˆD×#Ñ# LÑ1ð 6×;Ñ;×AÑAò K�ð —7‘7˜mÓ+°¸D¿I¹IÒ0EÜ#*Ð+HÈ$Ï)É)Ó#T�Lð 26×1JÑ1J�LÕ.ðKð -Ð,rG   c                 óÊ   — | j                   j                  r<ddlm} ddlm}   || j                  || j                  j                  ¬«      ||«      S | j                  ||«      S )zçIf ``OrtBackendOptions.use_aot_autograd`` is ``True``, the `auto_autograd` compiler
        will be invoked, wrapping this ``OrtBackend`` instance's ``compile`` method. Otherwise,
        the ``compile`` method is invoked directly.r   )Ú#min_cut_rematerialization_partition)Úaot_autograd)Úfw_compilerÚpartition_fnÚdecompositions)	rF  r<  Úfunctorch.compiler   Útorch._dynamo.backends.commonr¡  rž  rL  r   )rg   r.   r�   r   r¡  s        r+   Ú__call__zOrtBackend.__call__g  s`   € ð �=‰=×)Ò)ÝMÝBð‘<Ø ŸL™LØ@Ø#×CÑC×WÑWôð ˜Dó	"ð "ð �|‰|˜L¨$Ó/Ð/rG   é   Ú%_OrtBackend__instance_cache_max_countÚ_OrtBackend__instance_cachec                 óª  ‡ ‡— dt         dt         fd„Št        ‰ t         «      st        d
i ‰ xs i ¤ŽŠ t        ˆ ˆfd„t        j                  D «       d«      }|€{t        t        j                  «      t        j                  k  s'J dt        j                  › dt        › dt        › d	�«       ‚t        j                  j                  t        ‰ «      x}«       |S )a½  Returns a possibly cached instance of an ``OrtBackend``. If an existing
        backend was created previously through this function with the same options,
        it will be returned. Otherwise a new backend will be created, cached, and
        returned.

        Note: if ``options`` sets ``ort_session_options``, a new ``OrtBackend``
        will always be returned, since ``onnxruntime.SessionOptions`` cannot
        participate in caching.ÚaÚbc                 ó6  — | j                   |j                   k7  s}| j                  |j                  k7  sd| j                  |j                  k7  sK| j                  |j                  k7  s2| j                  |j                  k7  s| j
                  |j
                  k7  ry| j                  €|j                  �y| j                  |j                  u ry| j                  �Ä|j                  �¸| j                  j                  |j                  j                  k(  xr‰ | j                  j                  |j                  j                  k(  xrZ | j                  j                  |j                  j                  u xr, | j                  j                  |j                  j                  u S y)NFT)r9  r:  r;  rï   r<  r?  r>  r=  rs  Údiagnostic_optionsrN  Úfake_context)r¬  r­  s     r+   Úreusablez<OrtBackend.get_cached_instance_for_options.<locals>.reusable‰  sl  € à×/Ñ/°1×3RÑ3RÒRØ×.Ñ.°!×2MÑ2MÒMØ×0Ñ0°A×4QÑ4QÒQØ×'Ñ'¨1×+?Ñ+?Ò?Ø×%Ñ%¨×);Ñ);Ò;Ø×-Ñ-°×1KÑ1KÒKàð ×$Ñ$Ð0°A×4IÑ4IÐ4UØà×Ñ 1×#3Ñ#3Ñ3Øð ×ÑÐ+°×0@Ñ0@Ð0Là×$Ñ$×3Ñ3°q×7GÑ7G×7VÑ7VÑVò WØ×(Ñ(×;Ñ;Ø×'Ñ'×:Ñ:ñ;òWð ×(Ñ(×6Ñ6¸!×:JÑ:J×:XÑ:XÐXòWð ×(Ñ(×5Ñ5¸×9IÑ9I×9VÑ9VÐVðð rG   c              3   óJ   •K  — | ]  } ‰|j                   ‰«      sŒ|–— Œ y ­wrc   )rF  )r¼   r­  rB  r±  s     €€r+   r½   z=OrtBackend.get_cached_instance_for_options.<locals>.<genexpr>°  s   øè ø€ ÒU�1±xÀÇ
Á
ÈGÕ7TŒQÑUùs   ƒ#œ#NzNo more than z instances of z allowed. Please instantiate `z‚` explicitly to pass to `torch.compile`. See https://github.com/pytorch/pytorch/pull/107973#discussion_r1306144795 for discussion.rF   )r   r”   Únextr   rª  r¾   r©  rƒ   )rB  Úbackendr±  s   ` @r+   Úget_cached_instance_for_optionsz*OrtBackend.get_cached_instance_for_options|  sÍ   ù€ ð!	Ô)ð !	Ô.?ó !	ôF ˜'Ô#4Ô5Ü'Ñ:¨7ª=°bÑ:ˆGäÜUœ
×3Ñ3ÔUØó
ˆð
 ˆ?ä”J×/Ñ/Ó0´:×3XÑ3XÒXðð  ¤
× EÑ EÐFÀnÜ�,Ð<¼Z¸Lð I"ð"óØXô ×'Ñ'×.Ñ.¼*ÀWÓ:MÐ/M¨wÔNàˆrG   c                  ó@   — t         j                  j                  «        y rc   )r   rª  ÚclearrF   rG   r+   Úclear_cached_instancesz!OrtBackend.clear_cached_instancesÂ  s   € ä×#Ñ#×)Ñ)Õ+rG   c                  ó4   — t        t        j                  «      S rc   )rŒ   r   rª  rF   rG   r+   Úget_cached_instanceszOrtBackend.get_cached_instancesÆ  s   € ä”Z×0Ñ0Ó1Ð1rG   rc   )rt   ru   rv   rw   r   r   re   r*   r|   r5  r   rŒ   r<   r   r   rY  r‘  rž  r§  r©  r   r@  rª  ÚlistÚstaticmethodr
   rµ  r¸  rº  rF   rG   r+   r   r   ä  sM  … ññV
 Ð):Ñ ;ó V
ðpØ!ŸH™H×0Ñ0ðà	�%˜˜W S¨# XÑ.Ð.Ñ/Ñ	0óðBGL°·±×1EÑ1Eó GLðR4- E§H¡H×$8Ñ$8ð 4-À5Ç8Á8×CWÑCWó 4-ðl0Ø!ŸH™H×0Ñ0ð0à	�‰×	Ñ	ó0ð$ )*Ð Ó)Ø24Ð�e˜D Ñ.Ñ/Ó4ààIMñCØ˜%Ð 1°7¸3À¸8Ñ3DÐ DÑEÑFðCà	òCó ðCðJ ñ,ó ð,ð ñ2ó ñ2rG   r   )rB  rB  c                ó8   — t        j                  |«      | |«      S rc   )r   rµ  )r.   r�   rB  s      r+   r   r   Ë  s   € ô ×5Ñ5°gÓ>¸|ÈTÓRÐRrG   rc   )[Údataclassesr"   Úloggingr7   Úcollections.abcr   r   Útypingr   r   r   r   r	   r
   Útyping_extensionsr   r*   Útorch._CÚ
torch._opsÚtorch._prims.executorÚtorch.fxÚtorch._subclasses.fake_tensorr   Útorch.fx._compatibilityr   Ú torch.fx.passes.fake_tensor_propr   Ú torch.fx.passes.operator_supportr   Útorch.fx.passes.tools_commonr   Útorch.utilsr   rG  r   rX   r   r\   r$   r%   r&   r'   rE  Útorch.onnx._internal.fx.passesr   r~   r@  Ú__all__r   r,   ry   r<   r¨   Úbytesr|   r5  rC   rH   rP   rS   r]   Ú	getLoggerrt   ro   r_   r‡   rŒ   r�   r–   r™   r    r«   r•   r¶   r·   r¸   r¹   rÀ   rÑ   rÖ   râ   ræ   r  r  r  Ú	dataclassr,  r   r   r   r   rF   rG   r+   ú<module>rÒ     sY  ðä Û Û Û 	ß -ß G× GÝ 'ã Û Û Û Û Ý 4Ý 1Ý ;Ý <Ý :Ý ñ ÛÛÝ6ãÛÛ0Û+Û6Û)ð #'€�˜$‘Ó &ò€ð. Tó .ðb &(Ð �D˜˜c˜‘NÓ 'ð IMñØðØ'/°·±×0DÑ0DÑ'Eðàóð2$˜H S™Mó $ð)˜3ó )ò$ð
@ có 
@ð 
ˆ×	Ñ	˜8Ó	$€ô/˜ô /ðd3¨U¯X©X×-AÑ-Að 3Àdó 3ð*
 E¨#¨s¨(¡Oó 
ð¨u¯x©x×/CÑ/Cð ÈÈcÐSVÈhÉó ðK°·±×0DÑ0Dð KÈó Kð8¨e¯h©h×.BÑ.Bð 8ÀuÈSÐRUÈXÁó 8ð X�5˜˜c˜‘?ð X u¨S°#¨X¡ó Xð$%2ØØØ�L‰L˜%Ÿ,™,¨¨U¯^©^¸UÀEÇMÁMÐSWÐWñ	
ð 	ð	ñð%2ð Ð Ñ!ó%2ðPØ�5—<‘< Ð$Ñ%ðØ05Ð6KÑ0Lðà
ˆ5�<‰<˜ÐÑóð*˜Jð ¨5¯<©<ó ð)ØØ�‰ØØØð	ñð)ð &ð)ð ‡\�\ó)ð@Ø�L‰LðàØ�‰Ø�‰ØØ�‰ØØ�‰Øð	ñðð Ø	‡L�LØØ	Øð
ñóð8NØ
(ðNà�s˜C�x‘ðNð �%—,‘, Ð#Ñ$ðNð Ð.Ñ/ð	Nð
 ˜˜S˜‘/ðNð �5—<‘< Ð$Ñ%ðNð Ð/Ñ0ðNð ðNð Ð7Ñ8ðNð #ØØ�L‰L˜%Ÿ,™,¨¨U¯^©^¸UÀEÇMÁMÐSWÐWñ	
ð 	ð	ñðNð  ˆ5�—‘˜s E¨4Ð/Ñ0°#Ð5Ñ6ó!Nðb#Ø
(ð#à�s˜C�x‘ð#ð �%—,‘, Ð#Ñ$ð#ð Ð.Ñ/ð	#ð
 ˜˜S˜‘/ð#ð �5—<‘< Ð$Ñ%ð#ð Ð/Ñ0ð#ð ð#ð Ð7Ñ8ð#ð #ØØ�L‰L˜%Ÿ,™,¨¨U¯^©^¸UÀEÇMÁMÐSWÐWñ	
ð 	ð	ñð#ð  ˆ5�—‘˜s E¨4Ð/Ñ0°#Ð5Ñ6ó!#÷LIñ IðX ×Ñ÷Lð Ló ðLðB #(¨¨U°3¸ÀÀSÀÑ8IÐ3IÑ-JÐ(JÑ"KÐ �iÓ Kð	ð €×Ñ˜dÔ#Ù eÔ,÷<1ð <1ó -ó $ð<1ñ~  eÔ,÷c2ð c2ó -ðc2ñL  eÔ,ð
 FJò	SØ—(‘(×&Ñ&ðSð �eÐ-¨w°s¸C°xÑ/@Ð@ÑAÑBò	Só -ñSrG   