o
    闦i                     @  s  d dl mZ d dlZd dlZd dlZd dl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 g dZejejd	d
ZeddddZeddddddZeddddZededdddddddZ ededdddddddddZ!dd+d,Z"dd4d5Z#dd:d;Z$ed<ej%d=d>d?d@gdAedBej%dCdDd?d@gdAedEej%dFdGd?d@gdAedHej%dId>dJd@gdAedKej%dLdDdJd@gdAedMej%dNdGdJd@gdAddRdSZ&ddUdVZ'edWe%dXd>gdAedYe%dZdDgdAed[e%d\dGgdAd]d^ Z(ed_e%d`dGdagdAedbe%dcdddagdAedee%dfdgdagdAedhe%didGdjgdAedke%dldddjgdAedme%dndgdjgdAdodp Z)edqddrdsZ*	ddd|d}Z+ed~dddZ,ededddddZ-eddddZ.ededdddddddd	dddZ/ededdddd		ddddZ0eddddZ1eddddZ2eddddZ3eddddZ4ededddddddZ5eddddZ6eddddZ7eddddZ8eddddZ9eddddZ:eddddZ;eddddZ<eddddZ=eddddZ>eddddZ?ededddddddddZ@eddddÄZAedădddƄZBedǃdddɄZCedʃddd̄ZDed̓dddτZEedЃddd҄ZFedӃdddՄZGedփddd؄ZHedكdddۄZIed܃edddddddZJdS )    )annotationsN)Sequence)_C)
_constants_type_utilserrorssymbolic_helpersymbolic_opset9)GLOBALS)	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_linear_reluquantized_mulquantized_sigmoidslicesorttopk
   )opsetz	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)r1   selfotherargs r;   Y/home/ubuntu/transcripts/venv/lib/python3.10/site-packages/torch/onnx/symbolic_opset10.pyr   L   s   r   vsc                 C  s$   |dkr
t | ||S t| |||S )Nfloor)_floor_divider5   r7   )r1   r8   r9   rounding_moder;   r;   r<   r7   T   s   r7   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 )NFloorDivConstantr   dtypevalue_tXorLessModfmod_iAndNotEqual   SubWhere)r   _is_fpr5   r6   optorchtensorint64)r1   r8   r9   outr   zeronegativemod
fixup_maskonefixupr;   r;   r<   r@   \   s   " r@   z
aten::sortinonec                 C  s   t j| ||||dS )N)	decendingrY   )r   _sort_helper)r1   r8   dimrb   rY   r;   r;   r<   r-   q   s   r-   z
aten::topkc              	   C  s   t j| ||||||dS )N)largestsortedrY   )r   _topk_helper)r1   r8   krd   re   rf   rY   r;   r;   r<   r.   w   s   r.   r8   _C.Valuekernel_shapeSequence[int]stridespads	dilations	ceil_modeboolunbatched_rankintreturnc              
   C  s   |  d|  d|}||kr!|  d|| j dtjdgtjdd}| j d|d	|||||d
\}	}
||krG|  d|	| j dtjdgtjdd}	|	S )NSizeShape	UnsqueezerD   r   rE   rG   MaxPool   outputsceil_mode_idilations_ikernel_shape_ipads_i	strides_iSqueezerU   rV   rW   rX   )r1   r8   rj   rl   rm   rn   ro   rq   	self_rankpool_result_r;   r;   r<   _aten_max_pool_onnx   s0   

r   expand_sizekernel_sizeSequence[int] | intstridepaddingdilationAtuple[Sequence[int], Sequence[int], Sequence[int], Sequence[int]]c                 C  s   t |tr
|g|  }t |tr|g|  }n|}t |tr$|g|  d }n%t|dkr1||  d }nt|dkr<|d }nt|dkrG|d }n|}t |trT|g|  }n|sY|}n|}||||fS ):Adjust attributes of avg_pool to match ONNX specification.rx   rQ      
isinstancerr   r4   )r   r   r   r   r   rj   rm   rl   r;   r;   r<   _adjust_attributes_of_max_pool   s(   
	





r   
n_dims_onen_dims_zeron_dims_axestuple[_C.Value, Sequence[int]]c              
   C  s"  |  d|  d|}||kr!|  d|| j dtjdgtjdd}| j d|d	|||||d
\}}| j d|d	|||d\}}| j dt|d}| j dt|	d}| j dt|
d}|  d||||}|  d||}||kr| j d|tjdgtjdd}| j d|tjdgtjdd}||fS )Nrt   ru   rv   rD   r   rE   rG   rw   rx   ry   )rz   r|   r}   r   SlicerR   r   r   )r1   r8   rj   rl   rm   rn   ro   rq   r   r   r   r   r   indicesr   flatten_indicesendsstartsaxesdeltar;   r;   r<    _aten_max_pool_with_indices_onnx   sH   


	r   zaten::max_pool1d
max_pool1drQ   F)return_indices)decoratezaten::max_pool2d
max_pool2drx   zaten::max_pool3d
max_pool3dr   zaten::max_pool1d_with_indicesmax_pool1d_with_indicesTzaten::max_pool2d_with_indicesmax_pool2d_with_indiceszaten::max_pool3d_with_indicesmax_pool3d_with_indicesnamestrr   c              	     s<   t ddddddt ddddddd fdd}|S )NTFr=   isr`   r1   r2   inputri   r   rk   r   r   int | Sequence[int]r   ro   rp   c                   sp   t  ||||\}}}	}
r+t| ||||	|
| d dg  dg  dd t D S t| ||||	|
| d S )NrQ   r   c                 S  s   g | ]}d | qS )rx   r;   ).0r`   r;   r;   r<   
<listcomp>P  s    z2_max_pool.<locals>.symbolic_fn.<locals>.<listcomp>)r   r   ranger   )r1   r   r   r   r   r   ro   rj   rl   rm   rn   r   r   r;   r<   symbolic_fn5  s6   
z_max_pool.<locals>.symbolic_fn)r1   r2   r   ri   r   rk   r   rk   r   r   r   rk   ro   rp   r   quantized_args
parse_args)r   r   r   r   r;   r   r<   	_max_pool
  s   +'r   2tuple[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 )r   rx   rQ   r   )r   r   r   r   rj   rm   rl   r;   r;   r<   _adjust_attributes_of_avg_poolb  s    




r   zaten::avg_pool1d
avg_pool1dzaten::avg_pool2d
avg_pool2dzaten::avg_pool3d
avg_pool3dc              
     sB   t dddddddt ddddddd	 dd fdd}|S )NTFr=   r   r`   ra   r   ri   r   rk   r   r   r   ro   rr   count_include_padc              	     s0   t  |||\}}	}
| jd|||||
|	d}|S )NAveragePool)r{   count_include_pad_ir}   r~   r   )r   rU   )r1   r   r   r   r   ro   r   divisor_overriderj   rl   rm   resultr   r;   r<   r     s   

z_avg_pool.<locals>.symbolic_fnN)r   ri   r   rk   r   rk   r   r   ro   rr   r   rr   r   )r   r   r   r;   r   r<   	_avg_pool  s
   	r   zaten::upsample_nearest1dupsample_nearest1dnearestzaten::upsample_nearest2dupsample_nearest2d   zaten::upsample_nearest3dupsample_nearest3d   zaten::upsample_linear1dupsample_linear1dlinearzaten::upsample_bilinear2dupsample_bilinear2dzaten::upsample_trilinear3dupsample_trilinear3dc                   s"   t ddd 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mode_s)r   _get_interpolate_attributes_interpolate_warning_maybe_get_scalar_unimplemented_interpolate_size_to_scalesrU   )r1   r   output_sizer:   scalesalign_cornersrd   interpolate_moder   r;   r<   r     s   

z!_interpolate.<locals>.symbolic_fn)r   r   )r   rd   r   r   r;   r   r<   _interpolate  s   r   zaten::__interpolatec           	      C  s*   t | |||||\}}| jd|||dS )Nr   r   )r    _interpolate_get_scales_and_moderU   )	r1   r   sizescale_factormoder   recompute_scale_factor	antialiasr   r;   r;   r<   __interpolate  s   r   r   torch._C.Valuer   $list | torch.Tensor | torch._C.Valuer   r   steps+list | torch.Tensor | torch._C.Value | Nonec                   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   rV   r   ValuenodekindtypeNoneType)valuer;   r;   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| | )NrD   rG   r   rQ   zRank must be 0 or 1, not )r   listrV   TensorrU   rW   r   _get_tensor_rank_unsqueeze_helperr   SymbolicValueError)list_or_valuedefault_valuerankr1   r   r;   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 )NrQ   r   r`   )r   r   rV   r   r4   r   _maybe_get_const)r   r;   r;   r<   get_const_value  s
   z_slice.<locals>.get_const_valuer   rQ   )r   r   r   )r   	INT64_MAXrU   )r1   r   r   r   r   r   r   r   r;   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   r   r   zUnknown aten::slice signaturer   r   r   r   )r4   r   r   r   _slice_helper)r1   r8   r:   dimsstartendstepr;   r;   r<   r,   $  s   
r,   z
aten::flipr   c              	   C  s8   t j| ||dgt| tj gt| dgt| dS )Nr   )r   r   r4   r   r   )r1   r   r   r;   r;   r<   r   :  s   r   z
aten::fmodc                 C  s   | j d||ddS )NrK   rQ   rL   )rU   )r1   r   r9   r;   r;   r<   r   G  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.'rQ   rD   rG   Concataxis_ir   GatherMul)axes_i
keepdims_i
ReduceMean	ReduceMaxziembedding_bag with unknown shape of offsets for opset 10 is not supported. please use opset 11 or higher.)r
   export_trainingr   _onnx_unsupportedRuntimeErrorwarningswarn_get_tensor_dim_sizerU   rV   rW   sysmaxsizer   r   r5   select_is_none_reducesum_helperappend)r1   embedding_matrixr   offsetsscale_grad_by_freqr   sparseper_sample_weightsinclude_last_offsetpadding_idxoffsets_dim_0
offset_lenoffsets_extendedlist_r`   start_end_axes_indices_row
embeddingsper_sample_weights_rowoutputr;   r;   r<   r   L  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   r/      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to_iDequantizeLinearQuantizeLinear)r    _onnx_opset_unsupported_detailedr   r   r   floatdatarU   _C_onnxTensorProtoDataTypeUINT8INT8)r1   inputsscale
zero_point	quant_min	quant_maxr;   r;   r<   r     sH   

r   zaten::isinfc                 C  s   |  d| j d|tjjdS )NIsInfr,  r-  )rU   r4  r5  DOUBLEr1   r   r;   r;   r<   r     s   r   zaten::isfinitec                 C  s,   t | |}t| |}t| t| ||S r   )r   r5   isnan__not___or_)r1   r   inf_nodenan_noder;   r;   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 )Nr`   rF   r,  r-  )
r   
_get_constrU   r   JitScalarType	onnx_typer4  r5  FLOATquantize_helper)r1   r   r9  r:  rF   r;   r;   r<   r     s   r   zaten::dequantizec                 C  s   t | |d S r3   r   dequantize_helperr?  r;   r;   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        rS   rD   rE   rG   r   )r   rT   r   rF  
from_valuerF   r5   r@  rU   rV   rW   finfomaxlogical_andr   gt
LongTensorminlt)r1   r   nanposinfneginfinput_dtypenan_cond
nan_resultrO  posinf_condnan_posinf_resultneginf_condr;   r;   r<   r     sR   

	r   zquantized::linearc                 C  sl   t | |\}}}}t | |\}	}
}}t | |||
}t | |\}}}}t| ||	|}t | |||S r   )r   rK  requantize_bias_helperr5   r   rI  r1   q_inputq_weightbiasop_scaleop_zero_pointr   input_scaler   weightweight_scaleq_biasr%  r;   r;   r<   r(   &  s   r(   zquantized::linear_reluc                 C  sx   t | |\}}}}t | |\}	}
}}t | |||
}t | |\}}}}t| ||	|}t| |}t | |||S r   )r   rK  r_  r5   r   relurI  r`  r;   r;   r<   r)   4  s   r)   zquantized::addc                 C  F   t | |\}}}}t | |\}}}}t| ||}t | |||S r   )r   rK  r5   addrI  r1   xyrd  re  r   r%  r;   r;   r<   r   C     r   zquantized::add_reluc                 C  sR   t | |\}}}}t | |\}}}}t| ||}t| |}t | |||S r   )r   rK  r5   rl  rj  rI  rm  r;   r;   r<   r   M  s
   r   zquantized::mulc                 C  rk  r   )r   rK  r5   mulrI  rm  r;   r;   r<   r*   X  rp  r*   zquantized::hardswishc                 C  0   t | |\}}}}t| |}t | |||S r   )r   rK  r5   	hardswishrI  r1   rn  rd  re  r   r%  r;   r;   r<   r$   b     r$   zquantized::sigmoidc                 C  rr  r   )r   rK  r5   sigmoidrI  rt  r;   r;   r<   r+   k  ru  r+   zquantized::leaky_reluc                 C  s4   t | |\}}}}t| |||}t | |||S r   )r   rK  r5   
leaky_relurI  )r1   rn  negative_slopeinplacerd  re  r   r%  r;   r;   r<   r'   t  s   r'   zquantized::layer_normc           
   	   C  :   t | |\}}}}t| |||||d}	t | |	||S NF)r   rK  r5   
layer_normrI  )
r1   rn  normalized_shaperg  rc  epsrd  re  r   r%  r;   r;   r<   r&        r&   zquantized::group_normc           
   	   C  rz  r{  )r   rK  r5   
group_normrI  )
r1   rn  
num_groupsrg  rc  r~  rd  re  r   r%  r;   r;   r<   r#     r  r#   zquantized::instance_normc           
      C  s@   t | |\}}}}t| |||d d dd|d
}	t | |	||S )NFrM  )r   rK  r5   instance_normrI  )
r1   ra  rg  rc  r~  rd  re  r   r   r%  r;   r;   r<   r%     s
   r%   zquantized::conv1d_reluc
              
   C     t | |\}
}}}t | |\}}}}t | |||}t | |\}}}}t| |
||||||}t| |}t | |||	S r   )r   rK  r_  r5   conv1drj  rI  r1   ra  rb  rc  r   r   r   groupsrd  re  r   rf  r   rg  rh  ri  r%  r;   r;   r<   r        r   zquantized::conv2d_reluc
              
   C  r  r   )r   rK  r_  r5   conv2drj  rI  r  r;   r;   r<   r     r  r   zquantized::conv3d_reluc
              
   C  r  r   )r   rK  r_  r5   conv3drj  rI  r  r;   r;   r<   r     r  r   zquantized::conv1dc
              
   C  t   t | |\}
}}}t | |\}}}}t | |||}t | |\}}}}t| |
||||||}t | |||	S r   )r   rK  r_  r5   r  rI  r  r;   r;   r<   r        r   zquantized::conv2dc
              
   C  r  r   )r   rK  r_  r5   r  rI  r  r;   r;   r<   r     r  r   zquantized::conv3dc
              
   C  r  r   )r   rK  r_  r5   r  rI  r  r;   r;   r<   r   -  r  r   zquantized::conv_transpose1dc                 C  v   t | |\}}}}t | |\}}}}t | |||}t | |\}}}}t| ||||||||	}t | ||	|
S r   r   rK  r_  r5   conv_transpose2drI  r1   ra  rb  rc  r   r   output_paddingr   r  rd  re  r   rf  r   rg  rh  ri  r%  r;   r;   r<   r    D     r    zquantized::conv_transpose2dc                 C  r  r   r  r  r;   r;   r<   r!   ^  r  r!   zquantized::conv_transpose3dc                 C  r  r   )r   rK  r_  r5   conv_transpose3drI  r  r;   r;   r<   r"   x  r  r"   zquantized::catq_inputsrd   rd  re  c                   sD   t |} fdd|D } jdg|R d|i}t  |||S )Nc                   s   g | ]
}t  |d  qS )r   rJ  )r   r   r1   r;   r<   r     s    z!quantized_cat.<locals>.<listcomp>r   r  )r   _unpack_listrU   rI  )r1   r  rd   rd  re  unpacked_inputsdequantizedconcatenatedr;   r  r<   r     s   
	
r   )r1   r2   r   )r1   r2   r8   ri   rj   rk   rl   rk   rm   rk   rn   rk   ro   rp   rq   rr   rs   ri   )r   rr   r   r   r   r   r   r   r   r   rs   r   )r1   r2   r8   ri   rj   rk   rl   rk   rm   rk   rn   rk   ro   rp   rq   rr   r   rk   r   rk   r   rk   rs   r   )r   r   r   rr   r   rp   )
r   rr   r   r   r   r   r   r   rs   r   )r1   r2   r   r   r   r   r   r   r   r   r   r   r*  )r1   r2   r  ri   rd   rr   rd  ri   re  ri   rs   ri   )K
__future__r   	functoolsr  r  typingr   rV   torch._C._onnxr   _onnxr4  
torch.onnxr   r   r   r   r	   r5   torch.onnx._globalsr
   torch.onnx._internalr   r   __all__partialonnx_symbolic_onnx_symbolicr   r   r7   r@   r-   r.   r   r   r   _apply_paramsr   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#   r%   r   r   r   r   r   r   r    r!   r"   r   r;   r;   r;   r<   <module>   sl  &

(
+8



.  :
T.
6	
	
