o
    i:                     @   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 q4d
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 d!ejfd"d#Zd!ejfd$d%Zd!ejfd&d'Zd!ejfd(d)Zed*d!ejfd+d,Zed-d!ejfd.d/Zed0d!ejfd1d2Zed3d!ejfd4d5Z ed6d!ejfd7d8Z!ed9d!ejfd:d;Z"ed<e
#d=d=d=d>d>d!ejfd?d@Z$edAd!ejfdBdCZ%d!ejdDe&fdEdFZ'edGe
#d=dHd=d=d=d=	I	ded!ejfdJdKZ(edLe
#d=dHd=d=d=d=	I	ded!ejfdMdNZ)edOe
#d=dHd=d=d=dfd!ejfdPdQZ*edRe
#d=dHd=d=d=d=	I	ded!ejfdSdTZ+edUe
#d=dHd=d=d=dfd!ejfdVdWZ,edXe
#d=dHd=d=d=d=	I	ded!ejfdYdZZ-ed[	Idfd!ejfd\d]Z.ed^e
#d=d_dHd=d=d=d=	I	ded!ejfd`daZ/edbd!ejfdcddZ0dS )ga  
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isnan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   |  i S N )fnargskwargsr   i/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/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 |}|rt d S t dt r-t dS |d u 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   )r7   r&   r6   r8   r   r5   r   _interpolateL   s   r9   zaten::__interpolater2   c           	      C   s   t |d}t |s|rt ddS t |s#t |r#t ddS t |s3t |r3t 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_moder1   )	r2   r'   sizeZscale_factormoder4   Zrecompute_scale_factorZ	antialiasr3   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r8|}||vr4| }t fdd|D }n	d| S t	
d |f| S )Nr   c                 3   s$    | ]} j d |tjjdV  qdS )CastZto_iN)r1   _C_onnxZTensorProtoDataTypeFLOAT)r$   argr2   r   r   	<genexpr>   s
    
z-_try_cast_integer_to_float.<locals>.<genexpr>r   zOnly 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_value	UNDEFINEDZscalar_nametuplewarningswarn)r2   r   Zfloating_scalar_typesold_typeZ	arg0_typer   rC   r   _try_cast_integer_to_float   s(   

rM   c                 C   s$   |d u r|S t td| | |dS )NZ_cast_F)getattropset9)r2   r'   Zto_typer   r   r   _cast_to_type   s   rP   c                 C   s6   t |}t ||}t| ||\}}}| |||S r   )r   r,   Z_if_scalar_type_asrM   r1   )r2   r'   otherZop_name_r   r   r   _comparison_operator   s   
rS   zaten::gtc                 C      t | ||dS )NZGreaterrS   r2   r'   rQ   r   r   r   gt      rW   zaten::ltc                 C   rT   )NZLessrU   rV   r   r   r   lt   rX   rY   z	aten::bmmc                 C   s@   t |rt| ||\}}}t| | d|||S | d||S )NZMatMul)r   _try_get_scalar_typerM   rP   r1   )r2   selfrQ   rL   r   r   r   bmm   s   
r\   zaten::matmulc                 C   s   t | ||S r   )r\   )r2   r[   rQ   r   r   r   matmul   s   r]   zaten::preluc                 C   s   t |}t |}|d ur"|dkr"| jd|ttd|d d}n|dkr3|dgkr3t | |dg}t |rLt| ||\}}}t	| | d|||S | d||S )Nr   Z	Unsqueeze   )Zaxes_ir   ZPRelu)
r   Z_get_tensor_rankZ_get_tensor_sizesr1   listr0   Z_squeeze_helperrZ   rM   rP   )r2   r[   weightZ	self_rankZweight_sizesrL   r   r   r   prelu   s   

 
ra   zaten::mmc              
   C   s   t ||}|d u 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   rZ   r   ZSymbolicValueErrorr1   torchtensorrc   rM   rP   )r2   r[   rQ   scalar_typeZzero_constantrL   r   r   r   mm   s&   
rj   zaten::addmmvtc                 C   sl   t |r%t| |||\}}}}t| | jd|||t |t |d|S | jd|||t |t |dS )Nre   rf   )r   rZ   rM   rP   r1   Z_scalar)r2   r[   Zmat1Zmat2betaalpharL   r   r   r   addmm  s,   
ro   zaten::flattenc                 C   s   t |dd}t |dd}|  }|dk r|| }|dkrF||d krFt |r>t| |\}}t| | jd||d|S | jd||dS |dkrt||d krtt |rjt| |\}}t| | jd||d d|S | jd||d dS t	| |||S )	Nr%   	start_dimend_dimr   r^   ZFlatten)Zaxis_ir   )
r   
_get_constr"   r&   rZ   rM   rP   r1   rO   flatten)r2   r'   rp   rq   Zstart_dim_iZ	end_dim_ir&   rL   r   r   r   rs   -  s(   

rs   rc   c                 C   sn   |d u r	t jj}nt |}| js+| jd|t jj d|d}| jd|| dS | jd|| d|dS )NZConstantFillr^   )Zdtype_iZinput_as_shape_iZvalue_fr>   r?   )r   rE   rA   rc   Zis_floating_pointr1   Z	onnx_type)r2   r#   rc   const_valueri   resultr   r   r   _constant_fillJ  s&   



rv   zaten::emptyr%   Fc                 C      t | |||||S r   )zeros)r2   r#   rc   layoutdevice
pin_memorymemory_formatr   r   r   emptyb     r}   zaten::empty_likec                 C   rw   r   )
zeros_like)r2   r'   rc   ry   rz   r{   r|   r   r   r   
empty_likep  r~   r   zaten::zerosc                 C   rT   )Nr   rv   r2   r#   rc   ry   rz   r{   r   r   r   rx   ~  s   rx   zaten::zeros_likec                 C      |  d|}t| ||dS )NShaper   r1   rv   r2   r'   rc   ry   rz   r{   r|   shaper   r   r   r        r   z
aten::onesc                 C   rT   )Nr^   r   r   r   r   r   ones  s   r   zaten::ones_likec                 C   r   )Nr   r^   r   r   r   r   r   	ones_like  r   r   z
aten::fullc           	   
   C   sb   t |d}t |r#t| ||||}t| ||| jdtddS t 	|dd}t
| |||S )Nrl   rb   r^   rd   r%   rc   )r   r.   r/   rx   rO   addr1   rg   rh   rr   rv   )	r2   r#   valuerc   ry   rz   r{   rt   tmpr   r   r   full  s   
 r   zaten::full_likefc           	      C   s   |  d|}t| |||S )Nr   r   )	r2   r'   Z
fill_valuerc   ry   rz   r{   r|   r   r   r   r   	full_like  s   r   zaten::repeatc              
   C   s   t |s| jdt|d}t |rtt |}n
t |d}t|}|	 rN|
  }|t| }|dkrNt| || jdtdg| | d}| d||S )Nrb   rd   r   r   r^   ZTile)r   r/   r1   rg   Z
LongTensorZ_is_packed_listlenZ_unpack_listr.   ZisCompleteTensorr"   r#   rO   viewrh   )r2   r[   ZrepeatsZrepeat_size_lenZconst_repeatsr#   Z	diff_dimsr   r   r   repeat  s   

 r   )FN)F)1__doc__	functoolsrJ   rg   Ztorch._Cr   r@   Z
torch.onnxr   r   r   r   rO   Ztorch.onnx._internalr   r   partialZonnx_symbolicZ_onnx_symbolicZblock_listed_operatorsZblock_listed_opZ_block_list_in_opsetr   r9   ZGraphContextr=   rM   rP   rS   rW   rY   r\   r]   ra   rj   
parse_argsro   rs   intrv   r}   r   rx   r   r   r   r   r   r   r   r   r   r   <module>   s     	!	