o
    iz                     @  s  d dl mZ d dlZd dlZd dlZd dlmZmZmZm	Z	m
Z
mZ d dlZd dlm  mZ d dlZd dlmZ d dlmZmZmZmZmZ d dlmZ d dlmZmZmZ g dZejej d	d
Z!dd Z"e!dej#dddZ$e%dddej#dddZ&e!dej#dddZ'e!de%ddddej#ddddZ(e!de%ddddddej#dddd Z)e!d!e"d"ej*j+j,j-d#d$d%gd&e!d'e"d(ej*j+j,j.d)d$d%gd&e!d*e"d+ej*j+j,j/d,d$d%gd&e!d-e"d.ej*j+j,j-d#d/d%gd&e!d0e"d1ej*j+j,j.d)d/d%gd&e!d2e"d3ej*j+j,j/d,d/d%gd&ej#dd<d=Z0ddEdFZ1e!dGe"dHd#gd&e!dIe"dJd)gd&e!dKe"dLd,gd&ej#dMdN Z2e!dOe"dPd,dQgd&e!dRe"dSdTdQgd&e!dUe"dVdWdQgd&e!dXe"dYd,dZgd&e!d[e"d\dTdZgd&e!d]e"d^dWdZgd&ej#d_d` Z3e!daej#ddbdcZ4ej#	dddldmZ5e!dnej#ddodpZ6e!dqe%ddrej#ddsdtZ7e!duej#ddvdwZ8e!dxe%ddddddddd	ej#ddydzZ9e!d{e%dddddej#	|	}ddd~dZ:e!dej#dddZ;e!dej#dddZ<e!dej#dddZ=e!dej#dddZ>e!de%ddddej#dddZ?e!dej#dddZ@e!dej#dddZAe!dej#dddZBe!dej#dddZCe!dej#dddZDe!dej#dddZEe!dej#dddZFe!dej#dddZGe!dej#dddZHe!de%ddddddej#dddZIe!dej#dddZJe!dej#dddZKe!dej#dddZLe!dej#dddZMe!dej#dddZNe!dej#dddZOe!dej#dddZPe!dÃej#dddńZQe!dƃej#dddȄZRe!dɃe%ddddej#dddЄZSdS )    )annotationsN)CallableListOptionalSequenceTupleUnion)_C)
_constants_type_utilserrorssymbolic_helpersymbolic_opset9)GLOBALS)	_beartype	jit_utilsregistration)!
dequantizedivembedding_bagfake_quantize_per_tensor_affineflipfmodisfiniteisinf
nan_to_numquantize_per_tensorquantized_add_reluquantized_addquantized_catquantized_conv1d_reluquantized_conv2d_reluquantized_conv3d_reluquantized_conv1dquantized_conv2dquantized_conv3dquantized_conv_transpose1dquantized_conv_transpose2dquantized_conv_transpose3dquantized_group_normquantized_hardswishquantized_instance_normquantized_layer_normquantized_leaky_reluquantized_linearquantized_mulquantized_sigmoidslicesorttopk
   )Zopsetc                    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kwargsr6   j/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/torch/onnx/symbolic_opset10.py_applyK   s   z_apply_params.<locals>._applyr6   )r9   r:   r<   r6   r8   r;   _apply_paramsH   s   r=   z	aten::divgjit_utils.GraphContextc                 G  s.   t |dkrt| ||S t| ||g|R  S Nr   )lenopset9true_divide_div_rounding_mode)r>   selfotherr9   r6   r6   r;   r   Q   s   r   vsc                 C  s$   |dkr
t | ||S t| |||S )Nfloor)_floor_dividerB   rD   )r>   rE   rF   Zrounding_moder6   r6   r;   rD   Z   s   rD   zaten::_floor_dividec                 C  s   t |s
t |rt| ||}| d|S | d||}| jdtjdtjdd}| d| d||| d||}| jd	||dd
}| d|| d| d||}| jdtjdtjdd}	| d||	}
| d||
|S )NZFloorDivConstantr   dtypeZvalue_tZXorZLessModZfmod_iAndNotZEqual   SubWhere)r   _is_fprB   rC   optorchtensorZint64)r>   rE   rF   outr   zeronegativemodZ
fixup_maskonefixupr6   r6   r;   rJ   c   s   " rJ   z
aten::sortinonec                 C  s   t j| ||||dS )N)	decendingr[   )r   Z_sort_helper)r>   rE   dimrc   r[   r6   r6   r;   r2   y   s   r2   z
aten::topkc              	   C  s   t j| ||||||dS )N)largestsortedr[   )r   Z_topk_helper)r>   rE   krd   re   rf   r[   r6   r6   r;   r3      s   r3   zaten::max_pool1dZ
max_pool1drT   F)return_indices)Zdecoratezaten::max_pool2dZ
max_pool2d   zaten::max_pool3dZ
max_pool3d   zaten::max_pool1d_with_indicesZmax_pool1d_with_indicesTzaten::max_pool2d_with_indicesZmax_pool2d_with_indiceszaten::max_pool3d_with_indicesZmax_pool3d_with_indicesnamestrtuple_fnr   ndimsintrh   boolc              	     s<   t ddddddt dddddd fdd}|S )NTFrG   isra   c                   s:  |s|}t |}|r#t||||}|t dd t||D  }n|d }|||dd}t|dhkrA||d< r| jd|fd	di|\}	}
| jd|dd
d t D dd t D d\}}tj| |dd t D t	dt	dd}t
| |
|}
|	|
fS | jd|fd	di|}	|	S )Nc                 s  s    | ]	\}}|| V  qd S r5   r6   ).0abr6   r6   r;   	<genexpr>   s    z1_max_pool.<locals>.symbolic_fn.<locals>.<genexpr>ri   r   )kernel_shape_ipads_i	strides_iceil_mode_irT   Zdilations_iZMaxPooloutputsc                 S     g | ]}d qS rT   r6   rr   _r6   r6   r;   
<listcomp>       z2_max_pool.<locals>.symbolic_fn.<locals>.<listcomp>c                 S  r{   r|   r6   r}   r6   r6   r;   r      r   )rz   rv   rx   c                 S  s   g | ]}d | qS )ri   r6   )rr   ra   r6   r6   r;   r      s    )axesstartsends)tuplerB   Zget_pool_ceil_paddingzipsetrX   ranger   _slice_helperlistsub)r>   inputkernel_sizestridepaddingdilation	ceil_modeZpadding_ceilr:   rindicesr~   Zflattened_indicesrH   rn   rh   rm   r6   r;   symbolic_fn   sH   


z_max_pool.<locals>.symbolic_fn)r   quantized_args
parse_args)rk   rm   rn   rh   r   r6   r   r;   	_max_pool   s   ;7r   expand_sizer   Union[Sequence[int], int]r   r   return2Tuple[Sequence[int], Sequence[int], Sequence[int]]c                 C  s   t |tr|g|  }n|}t |tr|g|  d }nt|dkr'||  d }nt|dkr2||  }n|d }t |trA|g|  }n|sF|}n|}|||fS )z:Adjust attributes of avg_pool to match ONNX specification.ri   rT   )
isinstancero   rA   )r   r   r   r   kernel_shapepadsstridesr6   r6   r;   _adjust_attributes_of_avg_pool  s    




r   zaten::avg_pool1dZ
avg_pool1dzaten::avg_pool2dZ
avg_pool2dzaten::avg_pool3dZ
avg_pool3dc              
     sH   t dddddddt dddddddtj	 dd fdd}|S )NTFrG   rq   ra   rb   r   _C.Valuer   Sequence[int]r   r   Union[int, Sequence[int]]r   ro   count_include_padc              	     s0   t  |||\}}	}
| jd|||||
|	d}|S )NZAveragePool)ry   Zcount_include_pad_irv   rw   rx   )r   rX   )r>   r   r   r   r   r   r   Zdivisor_overrider   r   r   resultr   r6   r;   r   /  s   

z_avg_pool.<locals>.symbolic_fnr5   )r   r   r   r   r   r   r   r   r   ro   r   ro   )r   r   r   r   beartype)rk   r   r   r6   r   r;   	_avg_pool!  s   	r   zaten::upsample_nearest1dZupsample_nearest1dZnearestzaten::upsample_nearest2dZupsample_nearest2d   zaten::upsample_nearest3dZupsample_nearest3d   zaten::upsample_linear1dZupsample_linear1dlinearzaten::upsample_bilinear2dZupsample_bilinear2dzaten::upsample_trilinear3dZupsample_trilinear3dc                   s(   t dddtj fdd}|S )NTFc                   sb   t | |\}}t  t |}|rt d|S |d u r(t | || }| jd||dS )Nzalign_corners == TrueResizeZmode_s)r   Z_get_interpolate_attributesZ_interpolate_warning_maybe_get_scalarZ_unimplementedZ_interpolate_size_to_scalesrX   )r>   r   Zoutput_sizer9   scalesalign_cornersrd   interpolate_moderk   r6   r;   r   i  s   

z!_interpolate.<locals>.symbolic_fn)r   r   r   r   )rk   rd   r   r   r6   r   r;   _interpolateO  s   r   zaten::__interpolatec           	      C  s*   t | |||||\}}| jd|||dS )Nr   r   )r   Z _interpolate_get_scales_and_moderX   )	r>   r   sizeZscale_factormoder   Zrecompute_scale_factorZ	antialiasr   r6   r6   r;   __interpolate|  s   r   r   torch._C.Valuer   )Union[List, torch.Tensor, torch._C.Value]r   r   steps3Optional[Union[List, torch.Tensor, torch._C.Value]]c                   s   dd d fdd	}dd }||dkr)||t jkr)|d u s'||dkr)|S ||}||dd	}||t jd	}|d u rG d
||||S ||dd	} d
|||||S )Nc                 S  s:   | d u rdS t | tjjo|   dkot |  tjS )NTzprim::Constant)r   rY   r	   ValuenodekindtypeNoneType)valuer6   r6   r;   is_none_value  s   z_slice.<locals>.is_none_valuec                   sz   | r|d ur|g} t | ttjfr jdt| dS t| }|dkr.t | dgS |dkr4| S t	
d| | )NrL   rO   r   rT   zRank must be 0 or 1, not )r   r   rY   TensorrX   rZ   r   Z_get_tensor_rank_unsqueeze_helperr   SymbolicValueError)list_or_valuedefault_valueZrankr>   r   r6   r;   to_slice_input  s   

z_slice.<locals>.to_slice_inputc                 S  s4   t | ttjfrt| dkr| d S d S t| dS )NrT   r   ra   )r   r   rY   r   rA   r   Z_maybe_get_const)r   r6   r6   r;   get_const_value  s
   z_slice.<locals>.get_const_valuer   rT   )r   Slicer5   )r
   	INT64_MAXrX   )r>   r   r   r   r   r   r   r   r6   r   r;   _slice  s   			r   zaten::slicec                 G  sZ   t |dkr|\}}}}nt |dkr|\}}}dg}ntd|tj| |||||dS )Nr   rj   r   zUnknown aten::slice signaturer   r   r   r   )rA   r   r   r   r   )r>   rE   r9   dimsstartendstepr6   r6   r;   r1     s   
r1   z
aten::fliprq   c              	   C  s8   t j| ||dgt| tj gt| dgt| dS )Nr   )r   r   rA   r
   r   )r>   r   r   r6   r6   r;   r     s   r   z
aten::fmodc                 C  s   | j d||ddS )NrP   rT   rQ   )rX   )r>   r   rF   r6   r6   r;   r     s   r   zaten::embedding_bagc
                 C  s  |r
t jr
tdS |	d ur|	dkrtdtd t|d}
|
d ur|r.|
d }|}n|
}|| jdt	
tjgdg}| jdg|R d	di}g }t|D ]}t| t| |t	
dt	
|dg}t| t| |t	
dt	
|d dg}| jdt	
dgd}| d
||||}| d||}t|s| d
||||}t| |dg}| d||}|dkrtj| |dgdd}n|dkr| jd|dgdd}n
| jd|dgdd}t| |dg}|| qP| jdg|R d	di}|d d d fS tdS )Nz7embedding_bag with scale_grad_by_freq for training moder   zembedding_bag with padding_idxzExport of embedding_bag with dynamic input/offsets shape is not supported in opset 10. Please use opset 11 or higher to export model for dynamic input shape.'rT   rL   rO   Concataxis_ir   ZGatherZMul)Zaxes_iZ
keepdims_iZ
ReduceMeanZ	ReduceMaxziembedding_bag with unknown shape of offsets for opset 10 is not supported. please use opset 11 or higher.)r   Zexport_trainingr   Z_onnx_unsupportedRuntimeErrorwarningswarnZ_get_tensor_dim_sizerX   rY   rZ   sysmaxsizer   r   rB   selectZ_is_noneZ_reducesum_helperappend)r>   Zembedding_matrixr   offsetsZscale_grad_by_freqr   sparseZper_sample_weightsZinclude_last_offsetZpadding_idxZoffsets_dim_0Z
offset_lenZoffsets_extendedlist_ra   Zstart_end_Zaxes_Zindices_rowZ
embeddingsZper_sample_weights_rowoutputr6   r6   r;   r     st   



r   z%aten::fake_quantize_per_tensor_affine   c              	   C  s   ||fdkrt dddd| ||fdvr"td| d| d	|t |}|d u r4t dddd
| | j}|dkrH| jd|tj	j
d}n
| jd|tj	jd}| d| d|||||S )N)r   r   r   r4      z=Quantize range (0, 127) not supported, requires opset 13 Clip))r      r   r   zLFor (quant_min, quant_max), ONNX allows only (0, 255) and (-128, 127). Got (z, )z Non-constant scale not supportedr   CastZto_iZDequantizeLinearZQuantizeLinear)r   Z _onnx_opset_unsupported_detailedr   r   r   floatdatarX   _C_onnxTensorProtoDataTypeZUINT8ZINT8)r>   Zinputsscale
zero_pointZ	quant_minZ	quant_maxr6   r6   r;   r   K  sH   

r   zaten::isinfc                 C  s   |  d| j d|tjjdS )NZIsInfr   r   )rX   r   r   DOUBLEr>   r   r6   r6   r;   r   |  s   r   zaten::isfinitec                 C  s,   t | |}t| |}t| t| ||S r5   )r   rB   isnanZ__not_Z__or_)r>   r   Zinf_nodeZnan_noder6   r6   r;   r     s   
r   zaten::quantize_per_tensorc                 C  sL   t |dd}| jd|t| d}| jd|tjjd}t 	| |||S )Nra   rN   r   r   )
r   Z
_get_constrX   r   JitScalarTypeZ	onnx_typer   r   FLOATquantize_helper)r>   r   r   r   rN   r6   r6   r;   r     s   r   zaten::dequantizec                 C  s   t | |d S r@   r   dequantize_helperr   r6   r6   r;   r     s   r   zaten::nan_to_numfc                 C  s.  t |s|S tj| }|d u rd}t| |}| d|| jdt	j
|g|dd|}t	|}|d u r:|j}t| t| |t| || jdt	dgd}	| d|	| jdt	j
|g|dd|}
|d u rl|j}t| t| |
t| |
| jdt	dgd}| d|| jdt	j
|g|dd|
S )N        rV   rL   rM   rO   r   )r   rW   r   r   
from_valuerN   rB   r   rX   rY   rZ   finfomaxlogical_andr   gtZ
LongTensorminlt)r>   r   nanZposinfZneginfZinput_dtypeZnan_condZ
nan_resultr   Zposinf_condZnan_posinf_resultZneginf_condr6   r6   r;   r     sR   

	r   zquantized::linearc                 C  sl   t | |\}}}}t | |\}	}
}}t | |||
}t | |\}}}}t| ||	|}t | |||S r5   )r   r   requantize_bias_helperrB   r   r   )r>   q_inputq_weightbiasop_scaleop_zero_pointr   input_scaler~   weightweight_scaleq_biasr   r6   r6   r;   r.     s   r.   zquantized::addc                 C  F   t | |\}}}}t | |\}}}}t| ||}t | |||S r5   )r   r   rB   addr   r>   xyr  r  r~   r   r6   r6   r;   r        r   zquantized::add_reluc                 C  sR   t | |\}}}}t | |\}}}}t| ||}t| |}t | |||S r5   )r   r   rB   r  relur   r  r6   r6   r;   r     s
   r   zquantized::mulc                 C  r  r5   )r   r   rB   mulr   r  r6   r6   r;   r/     r  r/   zquantized::hardswishc                 C  0   t | |\}}}}t| |}t | |||S r5   )r   r   rB   Z	hardswishr   r>   r  r  r  r~   r   r6   r6   r;   r*        r*   zquantized::sigmoidc                 C  r  r5   )r   r   rB   Zsigmoidr   r  r6   r6   r;   r0     r  r0   zquantized::leaky_reluc                 C  s4   t | |\}}}}t| |||}t | |||S r5   )r   r   rB   Z
leaky_relur   )r>   r  Znegative_slopeZinplacer  r  r~   r   r6   r6   r;   r-     s   r-   zquantized::layer_normc           
   	   C  :   t | |\}}}}t| |||||d}	t | |	||S NF)r   r   rB   Z
layer_normr   )
r>   r  Znormalized_shaper  r  epsr  r  r~   r   r6   r6   r;   r,   &     r,   zquantized::group_normc           
   	   C  r  r  )r   r   rB   Z
group_normr   )
r>   r  Z
num_groupsr  r  r  r  r  r~   r   r6   r6   r;   r)   9  r  r)   zquantized::instance_normc           
      C  s@   t | |\}}}}t| |||d d dd|d
}	t | |	||S )NFr   )r   r   rB   Zinstance_normr   )
r>   r  r  r  r  r  r  r   r~   r   r6   r6   r;   r+   L  s
   r+   zquantized::conv1d_reluc
              
   C     t | |\}
}}}t | |\}}}}t | |||}t | |\}}}}t| |
||||||}t| |}t | |||	S r5   )r   r   r  rB   conv1dr  r   r>   r  r  r  r   r   r   groupsr  r  r   r  r~   r  r	  r
  r   r6   r6   r;   r    a     r    zquantized::conv2d_reluc
              
   C  r  r5   )r   r   r  rB   conv2dr  r   r  r6   r6   r;   r!   z  r  r!   zquantized::conv3d_reluc
              
   C  r  r5   )r   r   r  rB   conv3dr  r   r  r6   r6   r;   r"     r  r"   zquantized::conv1dc
              
   C  t   t | |\}
}}}t | |\}}}}t | |||}t | |\}}}}t| |
||||||}t | |||	S r5   )r   r   r  rB   r  r   r  r6   r6   r;   r#        r#   zquantized::conv2dc
              
   C  r!  r5   )r   r   r  rB   r  r   r  r6   r6   r;   r$     r"  r$   zquantized::conv3dc
              
   C  r!  r5   )r   r   r  rB   r   r   r  r6   r6   r;   r%     r"  r%   zquantized::conv_transpose1dc                 C  v   t | |\}}}}t | |\}}}}t | |||}t | |\}}}}t| ||||||||	}t | ||	|
S r5   r   r   r  rB   Zconv_transpose2dr   r>   r  r  r  r   r   Zoutput_paddingr   r  r  r  r   r  r~   r  r	  r
  r   r6   r6   r;   r&        r&   zquantized::conv_transpose2dc                 C  r#  r5   r$  r%  r6   r6   r;   r'     r&  r'   zquantized::conv_transpose3dc                 C  r#  r5   )r   r   r  rB   Zconv_transpose3dr   r%  r6   r6   r;   r(   *  r&  r(   zquantized::catq_inputsr   rd   r  r  c                   sD   t |} fdd|D } jdg|R d|i}t  |||S )Nc                   s   g | ]
}t  |d  qS )r   r   )rr   r   r>   r6   r;   r   P  s    z!quantized_cat.<locals>.<listcomp>r   r   )r   Z_unpack_listrX   r   )r>   r'  rd   r  r  Zunpacked_inputsZdequantizedZconcatenatedr6   r(  r;   r   E  s   


r   )r>   r?   r5   )rk   rl   rm   r   rn   ro   rh   rp   )
r   ro   r   r   r   r   r   r   r   r   )r>   r?   r   r   r   r   r   r   r   r   r   r   r   )r>   r?   r'  r   rd   ro   r  r   r  r   r   r   )T
__future__r   	functoolsr   r   typingr   r   r   r   r   r   rY   Ztorch._C._onnxr	   Z_onnxr   Z
torch.onnxr
   r   r   r   r   rB   Ztorch.onnx._globalsr   Ztorch.onnx._internalr   r   r   __all__partialZonnx_symbolicZ_onnx_symbolicr=   r   r   r   rD   rJ   r2   r3   nnmodulesutilsZ_singleZ_pairZ_tripler   r   r   r   r   r   r1   r   r   r   r   r   r   r   r   r   r.   r   r   r/   r*   r0   r-   r,   r)   r+   r    r!   r"   r#   r$   r%   r&   r'   r(   r   r6   r6   r6   r;   <module>   s    
%	



> 


!:
T.
6	
	
