U
    •Ê¹jÓ:  ã                   @   s¼  d Z ddlZddlZddlZddlmZ ddlmZm	Z	m
Z
mZ ddlmZmZ ejejdd�ZdZeD ]Zed	e› �ƒe
 e¡ƒ qhd
d„ Zededddƒgd�ededddƒgd�ededddƒgd�ededddƒgd�ededddƒgd�ededddƒgd�dd„ ƒƒƒƒƒƒZed ƒejd!œd"d#„ƒZejd!œd$d%„Zejd!œd&d'„Zejd!œd(d)„Zed*ƒejd!œd+d,„ƒZed-ƒejd!œd.d/„ƒZed0ƒejd!œd1d2„ƒZed3ƒejd!œd4d5„ƒZ ed6ƒejd!œd7d8„ƒZ!ed9ƒejd!œd:d;„ƒZ"ed<ƒe
 #d=d=d=d>d>¡ejd!œd?d@„ƒƒZ$edAƒejd!œdBdC„ƒZ%eje&dDœdEdF„Z'edGƒe
 #d=dHd=d=d=d=¡deejd!œdJdK„ƒƒZ(edLƒe
 #d=dHd=d=d=d=¡dfejd!œdMdN„ƒƒZ)edOƒe
 #d=dHd=d=d=¡dgejd!œdPdQ„ƒƒZ*edRƒe
 #d=dHd=d=d=d=¡dhejd!œdSdT„ƒƒZ+edUƒe
 #d=dHd=d=d=¡diejd!œdVdW„ƒƒZ,edXƒe
 #d=dHd=d=d=d=¡djejd!œdYdZ„ƒƒZ-ed[ƒdkejd!œd\d]„ƒZ.ed^ƒe
 #d=d_dHd=d=d=d=¡dlejd!œd`da„ƒƒZ/edbƒejd!œdcdd„ƒZ0dS )ma›  
Note [ONNX operators that are added/updated from opset 8 to opset 9]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
New operators:
    Compress
    ConstantOfShape
    EyeLike
    MaxUnpool
    OneHot
    Sinh
    Cosh
    Asinh
    Acosh
    Atanh
    Shrink
    IsNaN
    Sign
    Erf
    Scatter
    Where
    NonZero
    TfIdfVectorizer
    MeanVarianceNormalization

Updated operators:
    BatchNormalization: removed spatial attribute.
    Greater, Less, Constant, MatMul, PRelu, Gemm, Flatten: more data types{integers} supported.
    Cast: more data types{string} supported.
    Upsample: moved scales from attribute to input.
    Scan
é    N)Ú_onnx)Ú_type_utilsÚerrorsÚsymbolic_helperÚsymbolic_opset9)Ú	jit_utilsÚregistrationé   )Zopset)ZnonzeroÚwhereZscatterZscatter_addÚerfÚsignÚisnanZgatherZarangeZmasked_fillZ
index_fillZ
index_copyZrepeat_interleaveÚanyÚallzaten::c                     s   ‡ ‡fdd„}|S )z_Returns a decorator that calls the decorated (higher-order) function with the given parameters.c                    s
   | ˆ ˆŽS ©N© )Úfn©ÚargsÚkwargsr   úY/var/www/html/bwave/python/venv/lib/python3.8/site-packages/torch/onnx/symbolic_opset8.pyÚ_applyF   s    z_apply_params.<locals>._applyr   )r   r   r   r   r   r   Ú_apply_paramsC   s    r   zaten::upsample_nearest1dZupsample_nearest1dé   Znearest)Zdecoratezaten::upsample_nearest2dZupsample_nearest2dé   zaten::upsample_nearest3dZupsample_nearest3dé   zaten::upsample_linear1dZupsample_linear1dZlinearzaten::upsample_bilinear2dZupsample_bilinear2dzaten::upsample_trilinear3dZupsample_trilinear3dc                    s   ‡ ‡‡fdd„}|S )Nc                    s�   t  | ˆ|¡\}}t  ˆ¡ t  |¡}|r8t  ˆdˆ ¡S t  ˆd¡‰t  ˆ¡rZt  ˆd¡S |d kr~‡‡ ‡fdd„tdˆƒD ƒ}| jdˆ ˆ|d�S )	Núalign_corners == TrueÚisz%torch._C.Value (output_size) indexingc                    sD   g | ]<}|d k rdn*t ˆˆ |   ƒt ˆ ¡  ¡ ˆ |   ƒ ‘qS )é   ç      ð?)ÚfloatÚtypeÚsizes)Ú.0Úi)ÚdimÚinputÚoutput_sizer   r   Ú
<listcomp>s   s   ýÿÿz5_interpolate.<locals>.symbolic_fn.<locals>.<listcomp>r   ÚUpsample©Zmode_sZscales_f)	r   Z_get_interpolate_attributesZ_interpolate_warningÚ_maybe_get_scalarÚ_unimplementedÚ_maybe_get_constÚ	_is_valueÚrangeÚop)Úgr&   r'   r   ÚscalesÚalign_corners©r%   Úinterpolate_modeÚname)r&   r'   r   Úsymbolic_fne   s(      ÿ


 ÿûz!_interpolate.<locals>.symbolic_fnr   )r6   r%   r5   r7   r   r4   r   Ú_interpolateL   s    r8   zaten::__interpolate©r1   c           	      C   s�   t  |d¡}t  |¡s&|r&t  dd¡S t  |¡sFt  |¡rFt  dd¡S t  |¡sft  |¡rft  dd¡S t  | |||||¡\}}| jd|||d�S )NÚbZinterpolater   zdynamic scales in opset 8zdynamic size in opset 8r)   r*   )r   r-   Z_is_noner,   r.   Z _interpolate_get_scales_and_moder0   )	r1   r&   ÚsizeZscale_factorÚmoder3   Zrecompute_scale_factorZ	antialiasr2   r   r   r   Ú__interpolate   s*    ÿ ÿ     ÿr=   c                    s†   t jjt jjt jjh}d }t j |d t jj¡}|t jjkrr|}||krh| ¡ }t‡ fdd„|D ƒƒ}q|d| S n
t	 
d¡ |f| S )Nr   c                 3   s"   | ]}ˆ j d |tjjd�V  qdS )ÚCast©Zto_iN)r0   Ú_C_onnxZTensorProtoDataTypeÚFLOAT)r#   Úargr9   r   r   Ú	<genexpr>±   s   ÿz-_try_cast_integer_to_float.<locals>.<genexpr>r   zºOnly floating datatype is supported for these operators: {Greater, Less, MatMul, PRelu, Gemm, Flatten}. This might cause the onnx model to be incorrect, if inputs have integer datatypes.)r   ÚJitScalarTypeZHALFrA   ÚDOUBLEÚ
from_valueZ	UNDEFINEDZscalar_nameÚtupleÚwarningsÚwarn)r1   r   Zfloating_scalar_typesÚold_typeZ	arg0_typer   r9   r   Ú_try_cast_integer_to_float¡   s*    ý ÿþ

ÿrK   c                 C   s$   |d kr|S t td|› �ƒ| |dƒS )NZ_cast_F)ÚgetattrÚopset9)r1   r&   Zto_typer   r   r   Ú_cast_to_typeÀ   s    rN   c                 C   s6   t  |¡}t  ||¡}t| ||ƒ\}}}|  |||¡S r   )r   r+   Z_if_scalar_type_asrK   r0   )r1   r&   ÚotherZop_nameÚ_r   r   r   Ú_comparison_operatorÆ   s    
rQ   zaten::gtc                 C   s   t | ||dƒS )NZGreater©rQ   ©r1   r&   rO   r   r   r   ÚgtÏ   s    rT   zaten::ltc                 C   s   t | ||dƒS )NZLessrR   rS   r   r   r   ÚltÔ   s    rU   z	aten::bmmc                 C   sD   t  |¡r2t| ||ƒ\}}}t| |  d||¡|ƒS |  d||¡S d S )NZMatMul)r   Ú_try_get_scalar_typerK   rN   r0   )r1   ÚselfrO   rJ   r   r   r   ÚbmmÙ   s    
rX   zaten::matmulc                 C   s   t | ||ƒS r   )rX   )r1   rW   rO   r   r   r   Úmatmulâ   s    rY   zaten::preluc                 C   sª   t  |¡}t  |¡}|d k	rD|dkrD| jd|ttd|d ƒƒd�}n"|dkrf|dgkrft  | |dg¡}t  |¡r˜t| ||ƒ\}}}t	| |  d||¡|ƒS |  d||¡S d S )Nr   Z	Unsqueezeé   )Zaxes_ir   ZPRelu)
r   Z_get_tensor_rankZ_get_tensor_sizesr0   Úlistr/   Z_squeeze_helperrV   rK   rN   )r1   rW   ÚweightZ	self_rankZweight_sizesrJ   r   r   r   Úpreluç   s    

 
r]   zaten::mmc              
   C   s’   t  ||¡}|d kr t d|¡‚| jdtjdg| ¡ d�d�}t  |¡r|t| |||ƒ\}}}}t	| | jd|||ddd	�|ƒS | jd|||ddd	�S )
Nz/mm can only operate on tensors with known typesÚConstantr   )Údtype©Zvalue_tÚGemmg        r   ©Zbeta_fZalpha_f)
r   rV   r   ZSymbolicValueErrorr0   ÚtorchÚtensorr_   rK   rN   )r1   rW   rO   Úscalar_typeZzero_constantrJ   r   r   r   Úmm÷   s.     ÿþ
   ÿýrf   zaten::addmmÚvÚtc                 C   sp   t  |¡rJt| |||ƒ\}}}}t| | jd|||t  |¡t  |¡d�|ƒS | jd|||t  |¡t  |¡d�S d S )Nra   rb   )r   rV   rK   rN   r0   Z_scalar)r1   rW   Zmat1Zmat2ÚbetaÚalpharJ   r   r   r   Úaddmm  s,    
úöúrk   zaten::flattenc                 C   sø   t  |dd¡}t  |dd¡}| ¡  ¡ }|dk r8|| }|dkrŒ||d krŒt  |¡r|t| |ƒ\}}t| | jd||d�|ƒS | jd||d�S |dkrè||d krèt  |¡rÔt| |ƒ\}}t| | jd||d d�|ƒS | jd||d d�S t 	| |||¡S )	Nr$   Ú	start_dimÚend_dimr   rZ   ZFlatten)Zaxis_ir   )
r   Ú
_get_constr!   r%   rV   rK   rN   r0   rM   Úflatten)r1   r&   rl   rm   Zstart_dim_iZ	end_dim_ir%   rJ   r   r   r   ro   -  s0    
  ÿ
  ÿro   )r1   r_   c                 C   sr   |d krt jj}n
t  |¡}| ¡ jsV| jd|t jj ¡ d|d�}| jd|| ¡ d�S | jd|| ¡ d|d�S d S )NZConstantFillrZ   )Zdtype_iZinput_as_shape_iZvalue_fr>   r?   )r   rD   rA   r_   Zis_floating_pointr0   Z	onnx_type)r1   r"   r_   Úconst_valuere   Úresultr   r   r   Ú_constant_fillJ  s&    



ûûrr   zaten::emptyr$   Fc                 C   s   t | |||||ƒS r   )Úzeros)r1   r"   r_   ÚlayoutÚdeviceÚ
pin_memoryÚmemory_formatr   r   r   Úemptyb  s    rx   zaten::empty_likec                 C   s   t | |||||ƒS r   )Ú
zeros_like)r1   r&   r_   rt   ru   rv   rw   r   r   r   Ú
empty_likep  s    rz   zaten::zerosc                 C   s   t | ||dƒS )Nr   ©rr   ©r1   r"   r_   rt   ru   rv   r   r   r   rs   ~  s    rs   zaten::zeros_likec                 C   s   |   d|¡}t| ||dƒS )NÚShaper   ©r0   rr   ©r1   r&   r_   rt   ru   rv   rw   Úshaper   r   r   ry   …  s    ry   z
aten::onesc                 C   s   t | ||dƒS )NrZ   r{   r|   r   r   r   Úones”  s    r�   zaten::ones_likec                 C   s   |   d|¡}t| ||dƒS )Nr}   rZ   r~   r   r   r   r   Ú	ones_likeš  s    r‚   z
aten::fullc           	   
   C   sf   t  |d¡}t  |¡rFt| ||||ƒ}t | ||| jdt d¡d�¡S t  	|dd¡}t
| |||ƒS d S )Nrh   r^   rZ   r`   r$   r_   )r   r-   r.   rs   rM   Úaddr0   rc   rd   rn   rr   )	r1   r"   Úvaluer_   rt   ru   rv   rp   Útmpr   r   r   Úfull©  s    
 r†   zaten::full_likeÚfc           	      C   s   |   d|¡}t| |||ƒS )Nr}   r~   )	r1   r&   Z
fill_valuer_   rt   ru   rv   rw   r€   r   r   r   Ú	full_like¶  s    rˆ   zaten::repeatc              
   C   sª   t  |¡s| jdt |¡d�}t  |¡r8tt  |¡ƒ}nt  |d¡}t|ƒ}| 	¡ rœ| 
¡  ¡ }|t|ƒ }|dkrœt | || jdt dg| | ¡d�¡}|  d||¡S )Nr^   r`   r   r   rZ   ZTile)r   r.   r0   rc   Z
LongTensorZ_is_packed_listÚlenZ_unpack_listr-   ZisCompleteTensorr!   r"   rM   Úviewrd   )r1   rW   ZrepeatsZrepeat_size_lenZconst_repeatsr"   Z	diff_dimsr   r   r   ÚrepeatÆ  s     

  ÿr‹   )FN)FN)F)FN)F)FN)F)FN)1Ú__doc__Ú	functoolsrH   rc   Ztorch._Cr   r@   Z
torch.onnxr   r   r   r   rM   Ztorch.onnx._internalr   r   ÚpartialZonnx_symbolicZ_onnx_symbolicZblock_listed_operatorsZblock_listed_opZ_block_list_in_opsetr   r8   ZGraphContextr=   rK   rN   rQ   rT   rU   rX   rY   r]   rf   Ú
parse_argsrk   ro   Úintrr   rx   rz   rs   ry   r�   r‚   r†   rˆ   r‹   r   r   r   r   Ú<module>   sÜ    ÿ	þþþþþþÿ!	  ùÿ  ùÿ  ùÿ  ùÿ ÿÿ  øÿ