U
    Mh                  "   @  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
 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 dd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)g"Zejejd*d+Z e d,ej!d-d.d/d	Z"e#d0d0d1ej!d-d.d2d3Z$e d4ej!d-d.d5d6Z%e d7e#d0d8d8d9ej!dd-d.d:d(Z&e d;e#d0d0d8d8d8d9ej!dd-d.d<d)Z'd-d=d>d>d>d>d?d@d=dA	dBdCZ(d@dDdDdDdDdEdFdGdHZ)d-d=d>d>d>d>d?d@d>d>d>dIdJdKdLZ*e dMej+dNdOdPdQgdRe dSej+dTdUdPdQgdRe dVej+dWdXdPdQgdRe dYej+dZdOd[dQgdRe d\ej+d]dUd[dQgdRe d^ej+d_dXd[dQgdRej!d`d@d?dadbdcZ,d@dDdDdDdddedfdgZ-e dhe+didOgdRe dje+dkdUgdRe dle+dmdXgdRej!dndo Z.e dpe+dqdXdrgdRe dse+dtdudrgdRe dve+dwdxdrgdRe dye+dzdXd{gdRe d|e+d}dud{gdRe d~e+ddxd{gdRej!dd Z/e dej!d-d.ddZ0ej!dd-ddddddddZ1e dej!d-d.dd'Z2e de#d0dej!d-d.ddZ3e dej!d-d.ddZ4e de#d0d0d0d8d8d8d0d8d8	ej!d-d.dd
Z5e de#d0d0d0d8d8ej!dd-d.ddZ6e dej!d-d.ddZ7e dej!d-d.ddZ8e dej!d-d.ddZ9e dej!d-d.ddZ:e de#d0dddej!d-d.ddZ;e dej!d-d.dd#Z<e dej!d-d.dd$Z=e dej!d-d.ddZ>e dej!d-d.ddZ?e dej!d-d.dd%Z@e dej!d-d.ddZAe dej!d-d.dd&ZBe dej!d-d.dd"ZCe dej!d-d.dd!ZDe dej!d-d.ddZEe de#d0d0d0dd0d0ej!d-d.dd ZFe dej!d-d.ddZGe dej!d-d.ddZHe dej!d-d.ddZIe dej!d-d.ddZJe dej!d-d.ddZKe dÃej!d-d.ddZLe dŃej!d-d.ddZMe dǃej!d-d.ddZNe dɃej!d-d.ddZOe d˃e#d0d8d0d0ej!d-d=d@d=d=d=d̜ddZPdS )    )annotationsN)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_linear_reluquantized_mulquantized_sigmoidslicesorttopk
   )Zopsetz	aten::divjit_utils.GraphContextgc                 G  s0   t |dkrt| ||S t| ||f| S d S Nr   )lenopset9true_divide_div_rounding_mode)r7   selfotherargs r@   M/var/www/html/venv/lib/python3.8/site-packages/torch/onnx/symbolic_opset10.pyr   J   s    vsc                 C  s(   |dkrt | ||S t| |||S d S )Nfloor)_floor_divider:   r<   )r7   r=   r>   Zrounding_moder@   r@   rA   r<   S   s    r<   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 d S )NZFloorDivConstantr   dtypeZvalue_tZXorZLessModZfmod_iAndNotZEqual   SubWhere)r   _is_fpr:   r;   optorchtensorint64)r7   r=   r>   outr   zeronegativemodZ
fixup_maskonefixupr@   r@   rA   rE   \   s    " rE   z
aten::sortinonec                 C  s   t j| ||||dS )N)	decendingrW   )r   Z_sort_helper)r7   r=   dimr_   rW   r@   r@   rA   r2   r   s    z
aten::topkc              	   C  s   t j| ||||||dS )N)largestsortedrW   )r   Z_topk_helper)r7   r=   kr`   ra   rb   rW   r@   r@   rA   r3   y   s          _C.ValueSequence[int]boolint)	r7   r=   kernel_shapestridespads	dilations	ceil_modeunbatched_rankreturnc              
   C  s   |  d|  d|}||krB|  d|| j dtjdgtjdd}| j d|d	|||||d
\}	}
||kr|  d|	| j dtjdgtjdd}	|	S )NSizeShape	UnsqueezerG   r   rH   rJ   MaxPool   outputsceil_mode_idilations_ikernel_shape_ipads_i	strides_iSqueezerS   rT   rU   rV   )r7   r=   rh   ri   rj   rk   rl   rm   	self_rankpool_result_r@   r@   rA   _aten_max_pool_onnx   s0    

r   zUnion[Sequence[int], int]zATuple[Sequence[int], Sequence[int], Sequence[int], Sequence[int]])expand_sizekernel_sizestridepaddingdilationrn   c                 C  s   t |tr|g|  }t |tr*|g|  }n|}t |trH|g|  d }nJt|dkrb||  d }n0t|dkrx|d }nt|dkr|d }n|}t |tr|g|  }n|s|}n|}||||fS ):Adjust attributes of avg_pool to match ONNX specification.rs   rO      
isinstancerg   r9   )r   r   r   r   r   rh   rj   ri   r@   r@   rA   _adjust_attributes_of_max_pool   s(    	






r   zTuple[_C.Value, Sequence[int]])r7   r=   rh   ri   rj   rk   rl   rm   
n_dims_onen_dims_zeron_dims_axesrn   c              
   C  s$  |  d|  d|}||krB|  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 )Nro   rp   rq   rG   r   rH   rJ   rr   rs   rt   )ru   rw   rx   rz   SlicerP   r{   r|   )r7   r=   rh   ri   rj   rk   rl   rm   r   r   r   r}   r~   indicesr   Zflatten_indicesendsstartsaxesdeltar@   r@   rA    _aten_max_pool_with_indices_onnx   sL    


	
  r   zaten::max_pool1dZ
max_pool1drO   F)return_indices)Zdecoratezaten::max_pool2dZ
max_pool2drs   zaten::max_pool3dZ
max_pool3dr   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str)namer   r   c              
     sL   t ddddddt ddddddddddd	dd
d fdd}|S )NTFrB   isr]   r5   rd   re   Union[int, Sequence[int]]rf   )r7   inputr   r   r   r   rl   c                   st   t  ||||\}}}	}
rVt| ||||	|
| d dg  dg  dd t D S t| ||||	|
| d S d S )NrO   r   c                 S  s   g | ]}d | qS )rs   r@   ).0r]   r@   r@   rA   
<listcomp>T  s     z2_max_pool.<locals>.symbolic_fn.<locals>.<listcomp>)r   r   ranger   )r7   r   r   r   r   r   rl   rh   ri   rj   rk   r   r   r@   rA   symbolic_fn9  s>        z_max_pool.<locals>.symbolic_fn)r   quantized_args
parse_args)r   r   r   r   r@   r   rA   	_max_pool  s    ,$'r   z2Tuple[Sequence[int], Sequence[int], Sequence[int]])r   r   r   r   rn   c                 C  s   t |tr|g|  }n|}t |tr4|g|  d }n8t|dkrN||  d }nt|dkrd||  }n|d }t |tr|g|  }n|s|}n|}|||fS )r   rs   rO   r   )r   r   r   r   rh   rj   ri   r@   r@   rA   _adjust_attributes_of_avg_poolf  s     



r   zaten::avg_pool1dZ
avg_pool1dzaten::avg_pool2dZ
avg_pool2dzaten::avg_pool3dZ
avg_pool3dc                   sT   t dddddddt dddddddtjddddd	d
d
d fdd}|S )NTFrB   r   r]   r^   rd   re   r   rg   )r   r   r   r   rl   count_include_padc              	     s0   t  |||\}}	}
| jd|||||
|	d}|S )NZAveragePool)rv   Zcount_include_pad_irx   ry   rz   )r   rS   )r7   r   r   r   r   rl   r   Zdivisor_overriderh   ri   rj   resultr   r@   rA   r     s        

z_avg_pool.<locals>.symbolic_fn)N)r   r   r   r   beartype)r   r   r   r@   r   rA   	_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 |}|r8t d|S |d krPt | || }| 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_scalesrS   )r7   r   Zoutput_sizer?   scalesalign_cornersr`   interpolate_moder   r@   rA   r     s"      

   z!_interpolate.<locals>.symbolic_fn)r   r   r   r   )r   r`   r   r   r@   r   rA   _interpolate  s    r   zaten::__interpolatec           	      C  s*   t | |||||\}}| jd|||dS )Nr   r   )r   Z _interpolate_get_scales_and_moderS   )	r7   r   sizeZscale_factormoder   Zrecompute_scale_factorZ	antialiasr   r@   r@   rA   __interpolate  s         r   ztorch._C.Valuez)Union[List, torch.Tensor, torch._C.Value]z3Optional[Union[List, torch.Tensor, torch._C.Value]])r7   r   r   r   r   stepsc                   s   dd d fdd	}dd }||dkrR||t jkrR|d ksN||dkrR|S ||}||dd	}||t jd	}|d kr d
||||S ||dd	} d
|||||S )Nc                 S  s:   | d krdS t | tjjo8|   dko8t |  tjS )NTzprim::Constant)r   rT   r   ValuenodekindtypeZNoneType)valuer@   r@   rA   is_none_value  s    z_slice.<locals>.is_none_valuec                   s~   | r|d k	r|g} t | ttjfr: jdt| dS t| }|dkr\t | dgS |dkrh| S t	
d| | d S )NrG   rJ   r   rO   zRank must be 0 or 1, not )r   listrT   TensorrS   rU   r   Z_get_tensor_rank_unsqueeze_helperr   SymbolicValueError)list_or_valuedefault_valueZrankr7   r   r@   rA   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 )NrO   r   r]   )r   r   rT   r   r9   r   Z_maybe_get_const)r   r@   r@   rA   get_const_value  s
    z_slice.<locals>.get_const_valuer   rO   )r   r   )N)r	   	INT64_MAXrS   )r7   r   r   r   r   r   r   r   r@   r   rA   _slice  s&    			

r   zaten::slicec                 G  sZ   t |dkr|\}}}}n*t |dkr8|\}}}dg}ntd|tj| |||||dS )Nr   r   r   zUnknown aten::slice signaturer   r   r   r   )r9   r   r   r   _slice_helper)r7   r=   r?   dimsstartendstepr@   r@   rA   r1   .  s    
z
aten::flipr   c              	   C  s8   t j| ||dgt| tj gt| dgt| dS )Nr   )r   r   r9   r	   r   )r7   r   r   r@   r@   rA   r   E  s    z
aten::fmodc                 C  s   | j d||ddS )NrK   rO   rL   )rS   )r7   r   r>   r@   r@   rA   r   S  s    zaten::embedding_bagc
                 C  s  |rt jrtdS |	d k	r,|	dkr,tdtd t|d}
|
d k	r|r^|
d }|}n4|
}|| jdt	
tjgdg}| jd|d	di}g }t|D ]8}t| t| |t	
dt	
|dg}t| t| |t	
dt	
|d dg}| jdt	
dgd}| d
||||}| d||}t|sj| d
||||}t| |dg}| d||}|dkrtj| |dgdd}n4|dkr| jd|dgdd}n| jd|dgdd}t| |dg}|| q| jd|d	di}|d d d fS tdS 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.'rO   rG   rJ   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   )r   )r   Zexport_trainingr   Z_onnx_unsupportedRuntimeErrorwarningswarnZ_get_tensor_dim_sizerS   rT   rU   sysmaxsizer   r   r:   selectZ_is_noneZ_reducesum_helperappend)r7   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_r]   Zstart_end_Zaxes_Zindices_rowZ
embeddingsZper_sample_weights_rowoutputr@   r@   rA   r   Y  s    

         
   
z%aten::fake_quantize_per_tensor_affine   c              	   C  s   ||fdkrt dddd| ||fdkrDtd| d| d	|t |}|d krht dddd
| | j}|dkr| 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datarS   _C_onnxTensorProtoDataTypeZUINT8ZINT8)r7   inputsscale
zero_pointZ	quant_minZ	quant_maxr@   r@   rA   r     s@    

zaten::isinfc                 C  s   |  d| j d|tjjdS )NZIsInfr   r   )rS   r   r   DOUBLEr7   r   r@   r@   rA   r     s    zaten::isfinitec                 C  s,   t | |}t| |}t| t| ||S N)r   r:   isnanZ__not_Z__or_)r7   r   Zinf_nodeZnan_noder@   r@   rA   r     s    
zaten::quantize_per_tensorc                 C  sL   t |dd}| jd|t| d}| jd|tjjd}t 	| |||S )Nr]   rI   r   r   )
r   Z
_get_constrS   r
   JitScalarTypeZ	onnx_typer   r   FLOATquantize_helper)r7   r   r   r   rI   r@   r@   rA   r     s      zaten::dequantizec                 C  s   t | |d S r8   r   dequantize_helperr   r@   r@   rA   r     s    zaten::nan_to_numfc                 C  s.  t |s|S tj| }|d kr*d}t| |}| d|| jdt	j
|g|dd|}t	|}|d krt|j}t| t| |t| || jdt	dgd}	| d|	| jdt	j
|g|dd|}
|d kr|j}t| t| |
t| |
| jdt	dgd}| d|| jdt	j
|g|dd|
S )N        rQ   rG   rH   rJ   r   )r   rR   r
   r   
from_valuerI   r:   r   rS   rT   rU   finfomaxlogical_andr   gtZ
LongTensorminlt)r7   r   nanZposinfZneginfZinput_dtypeZnan_condZ
nan_resultr   Zposinf_condZnan_posinf_resultZneginf_condr@   r@   rA   r     sV    
	
  zquantized::linearc                 C  sl   t | |\}}}}t | |\}	}
}}t | |||
}t | |\}}}}t| ||	|}t | |||S r   )r   r   requantize_bias_helperr:   r   r   r7   q_inputq_weightbiasop_scaleop_zero_pointr   input_scaler   weightweight_scaleq_biasr   r@   r@   rA   r-   :  s    zquantized::linear_reluc                 C  sx   t | |\}}}}t | |\}	}
}}t | |||
}t | |\}}}}t| ||	|}t| |}t | |||S r   )r   r   r   r:   r   relur   r   r@   r@   rA   r.   I  s    zquantized::addc                 C  sF   t | |\}}}}t | |\}}}}t| ||}t | |||S r   )r   r   r:   addr   r7   xyr  r  r   r   r@   r@   rA   r   Y  s    zquantized::add_reluc                 C  sR   t | |\}}}}t | |\}}}}t| ||}t| |}t | |||S r   )r   r   r:   r  r
  r   r  r@   r@   rA   r   d  s
    zquantized::mulc                 C  sF   t | |\}}}}t | |\}}}}t| ||}t | |||S r   )r   r   r:   mulr   r  r@   r@   rA   r/   p  s    zquantized::hardswishc                 C  s0   t | |\}}}}t| |}t | |||S r   )r   r   r:   Z	hardswishr   r7   r  r  r  r   r   r@   r@   rA   r)   {  s    zquantized::sigmoidc                 C  s0   t | |\}}}}t| |}t | |||S r   )r   r   r:   Zsigmoidr   r  r@   r@   rA   r0     s    zquantized::leaky_reluc                 C  s4   t | |\}}}}t| |||}t | |||S r   )r   r   r:   Z
leaky_relur   )r7   r  Znegative_slopeZinplacer  r  r   r   r@   r@   rA   r,     s    zquantized::layer_normc           
   	   C  s:   t | |\}}}}t| |||||d}	t | |	||S NF)r   r   r:   Z
layer_normr   )
r7   r  Znormalized_shaper  r  epsr  r  r   r   r@   r@   rA   r+     s    zquantized::group_normc           
   	   C  s:   t | |\}}}}t| |||||d}	t | |	||S r  )r   r   r:   Z
group_normr   )
r7   r  Z
num_groupsr  r  r  r  r  r   r   r@   r@   rA   r(     s    zquantized::instance_normc           
      C  s@   t | |\}}}}t| |||d d dd|d
}	t | |	||S )NFr   )r   r   r:   Zinstance_normr   )
r7   r  r  r  r  r  r  r   r   r   r@   r@   rA   r*     s             zquantized::conv1d_reluc
              
   C  s   t | |\}
}}}t | |\}}}}t | |||}t | |\}}}}t| |
||||||}t| |}t | |||	S r   )r   r   r   r:   conv1dr
  r   r7   r  r  r  r   r   r   groupsr  r  r   r  r   r  r  r	  r   r@   r@   rA   r     s    zquantized::conv2d_reluc
              
   C  s   t | |\}
}}}t | |\}}}}t | |||}t | |\}}}}t| |
||||||}t| |}t | |||	S r   )r   r   r   r:   conv2dr
  r   r  r@   r@   rA   r      s    zquantized::conv3d_reluc
              
   C  s   t | |\}
}}}t | |\}}}}t | |||}t | |\}}}}t| |
||||||}t| |}t | |||	S r   )r   r   r   r:   conv3dr
  r   r  r@   r@   rA   r!     s    zquantized::conv1dc
              
   C  st   t | |\}
}}}t | |\}}}}t | |||}t | |\}}}}t| |
||||||}t | |||	S r   )r   r   r   r:   r  r   r  r@   r@   rA   r"   !  s    zquantized::conv2dc
              
   C  st   t | |\}
}}}t | |\}}}}t | |||}t | |\}}}}t| |
||||||}t | |||	S r   )r   r   r   r:   r  r   r  r@   r@   rA   r#   9  s    zquantized::conv3dc
              
   C  st   t | |\}
}}}t | |\}}}}t | |||}t | |\}}}}t| |
||||||}t | |||	S r   )r   r   r   r:   r  r   r  r@   r@   rA   r$   Q  s    zquantized::conv_transpose1dc                 C  sv   t | |\}}}}t | |\}}}}t | |||}t | |\}}}}t| ||||||||	}t | ||	|
S r   r   r   r   r:   Zconv_transpose2dr   r7   r  r  r  r   r   Zoutput_paddingr   r  r  r  r   r  r   r  r  r	  r   r@   r@   rA   r%   i  s             zquantized::conv_transpose2dc                 C  sv   t | |\}}}}t | |\}}}}t | |||}t | |\}}}}t| ||||||||	}t | ||	|
S r   r  r  r@   r@   rA   r&     s             zquantized::conv_transpose3dc                 C  sv   t | |\}}}}t | |\}}}}t | |||}t | |\}}}}t| ||||||||	}t | ||	|
S r   )r   r   r   r:   Zconv_transpose3dr   r  r@   r@   rA   r'     s             zquantized::cat)r7   q_inputsr`   r  r  rn   c                   s@   t |} fdd|D } jd|d|i}t  |||S )Nc                   s   g | ]}t  |d  qS )r   r   )r   r   r6   r@   rA   r     s    z!quantized_cat.<locals>.<listcomp>r   r   )r   )r   Z_unpack_listrS   r   )r7   r  r`   r  r  Zunpacked_inputsZdequantizedZconcatenatedr@   r6   rA   r     s    


)N)N)N)r   r   )Q
__future__r   	functoolsr   r   typingr   r   r   r   r   rT   Ztorch._C._onnxr   Z_onnxr   Z
torch.onnxr	   r
   r   r   r   r:   Ztorch.onnx._globalsr   Ztorch.onnx._internalr   r   r   __all__partialZonnx_symbolicZ_onnx_symbolicr   r   r   r<   rE   r2   r3   r   r   r   Z_apply_paramsr   r   r   r   r   r   r1   r   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   r@   r@   r@   rA   <module>   s   &(+$8


 . ! :
T  .
6	
	
