a
    d                     @   s   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 zXd dl	Z
eje
jeje
jeje
jeje
jeje
jeje
jeje
jeje
jeje
ji	ZW n ey   dZY n0 dd Zdd Zeeddd	d
dZdS )    N   )device_from_inputsfake_tensor_unsupported)register_backendc                 C   s"   dt jv rt jd S ddd|  S )NZONNXRT_PROVIDERZCPUExecutionProviderZCUDAExecutionProvider)cpuZcuda)osenviron)device_type r
   f/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/torch/_dynamo/backends/onnxrt.pydefault_provider   s    

r   c                   C   s*   zt d W dS  ty$   Y dS 0 d S )NonnxruntimeTF)	importlibimport_moduleImportErrorr
   r
   r
   r   has_onnxruntime&   s
    
r   )filenameproviderc                   s  |d u rDt jdd }t| ||jdW  d    S 1 s:0    Y  dd l}tsXJ dt|j | | }dd |D dd tt	|D d	d tt	|D t
jjt
j| ||d
 ~~|d u rt }|| v sJ |j||gd fdd}|S )Nz.onnx)suffix)r   r   zrequires numpyc                 S   s$   g | ]}|j |j|j|j|jfqS r
   )shapedtypelayoutdevicerequires_grad).0or
   r
   r   
<listcomp>;   s   zonnxrt.<locals>.<listcomp>c                 S   s   g | ]}d | qS )ir
   )r   r   r
   r
   r   r   >       c                 S   s   g | ]}d | qS )r   r
   )r   xr
   r
   r   r   ?   r   )input_namesoutput_names)	providersc               
      s     }dd | D }t|D ]8\}}|j}|||j|jp@dt|j | |	  q dd D }t|D ]8\}}|j}|
||j|jpdt|j | |	  qr|  dkr|  |S )Nc                 S   s   g | ]}|  qS r
   )
contiguous)r   ar
   r
   r   r   Q   r   z)onnxrt.<locals>._call.<locals>.<listcomp>r   c              	   S   s*   g | ]"\}}}}}t j|||||d qS ))r   r   r   r   )torchempty)r   r   r   r   r   r   r
   r
   r   r   \   s   r   )Z
io_bindingzipr   Z
bind_inputtypeindex	_np_dtyper   sizeZdata_ptrZbind_outputZrun_with_iobindingZcopy_outputs_to_cpu)Zinitial_argsZbindingargsnamevaluedevoutputsr	   r    r!   Zoutput_specsessionr
   r   _callO   s:    
zonnxrt.<locals>._call)tempfileNamedTemporaryFileonnxrtr-   r   r*   r   r(   rangelenr%   ZonnxexportZjitscriptr   Zget_available_providersZInferenceSession)ZgmZexample_inputsr   r   tmpr   Zexample_outputsr3   r
   r1   r   r6   .   s4    .

'r6   )r   r   r4   r%   commonr   r   registryr   numpynpfloat16float32float64Zuint8Zint8int16int32int64ZlonglongboolZbool_r*   r   r   r   r6   r
   r
   r
   r   <module>   s0   

