U
    ¯Ê¹j  ã                   @   sx   d dl mZmZmZ d dlZdd„ Zdejjeeej	 e
e
e
e
eeeeef ee e
e
ee
 ee ee dœd	d
„ZdS )é    )ÚOptionalÚTupleÚListNc                 C   sJ   dd l }| ¡ }| | |¡}| ¡ d j}| g || ¡ i¡}|d }|S )Nr   )ÚonnxruntimeZSessionOptionsZInferenceSessionÚ
get_inputsÚnameÚrunÚnumpy)Z	onnx_fileÚexample_inputr   Zsess_optionsÚsessionZ
input_nameÚoutput© r   úN/var/www/html/bwave/python/venv/lib/python3.8/site-packages/timm/utils/onnx.pyÚonnx_forward   s    r   FTé@   )ÚmodelÚoutput_filer
   ÚtrainingÚverboseÚcheckÚcheck_forwardÚ
batch_sizeÚ
input_sizeÚopsetÚdynamic_sizeÚaten_fallbackÚkeep_initializersÚinput_namesÚoutput_namesc                 C   sl  dd l }|r tj jj}|  ¡  ntj jj}|  ¡  |d krl|sXt| dƒsLt‚| j	 
d¡}tj|f| |d�}| |ƒ}|p|dg}|p†dg}ddiddidœ}|
r¶d	|d d
< d|d d< |rÆtj jj}n
tj jj}tj j| |||d||||||	|d�}|�rh| |¡}|jj|dd� |�rh|�shdd l}t||ƒ}|jj|j ¡ |dd� |jj|j ¡ |j ¡ dd� d S )Nr   Údefault_cfgr   )Zrequires_gradÚinput0Úoutput0Úbatch)r    r!   Úheighté   Úwidthé   T)	r   Zexport_paramsr   r   r   Zkeep_initializers_as_inputsÚdynamic_axesZopset_versionZoperator_export_type)Z
full_check)Údecimalé   )ÚonnxÚtorchZTrainingModeZTRAININGÚtrainZEVALÚevalÚhasattrÚAssertionErrorr   ÚgetZrandnZOperatorExportTypesZONNX_ATEN_FALLBACKZONNXZ_exportÚloadÚcheckerZcheck_modelr	   r   ZtestingZassert_almost_equalÚdata)r   r   r
   r   r   r   r   r   r   r   r   r   r   r   r   r*   Ztraining_modeZoriginal_outr'   Zexport_typeZ	torch_outZ
onnx_modelÚnpZonnx_outr   r   r   Úonnx_export   sV    


	


ô

r5   )NFFTFr   NNFFNNN)Útypingr   r   r   r+   r   ÚnnÚModuleÚstrZTensorÚboolÚintr5   r   r   r   r   Ú<module>   s@                ññ