a
    8SicG                     @   s  d Z ddlZddlZddlmZmZ ddlZddlmZ ddlm	Z	 ddlm
Z ddlmZ ddlmZ dd	lmZ e	d
dddd Zdd Ze	d
d
dd Ze	d
d
dd Zdd Ze	d
dd
dd ZdddZe	d
ddd Zdd Zed d!d"Zed#d$d"Zed%d&d"Zed'd!d(Zed)d$d(Zed*d&d(Z ed+d$d,Z!e	"d-ddddddd.d/ Z#e	d
dd
d
dd0d1Z$e	d
dd
d
d2d3 Z%e	d
dd4dd5d6Z&d7d8 Z'd9d: Z(d;d< Z)d=d> Z*d?d@ Z+dAdB Z,ddCdDZ-dEdF Z.dGdH Z/dIdJ Z0dKdL Z1dMdN Z2e	d
ddddOdP Z3dQdR Z4e4dSej5j6jj7Z8e4dTej5j6jj9Z:e4dUej5j6jj;Z<e	d
dddddVdW Z=e	d
d
dddd4ddXdYZ>e	d
ddd4ddZd[Z?d\d] Z@d^d_ ZAe	d
d
dddd`daZBe	d
d
ddddbdcZCe	d
ddddddeZDdfdg ZEddhdiZFdjdk ZGdldm ZHeGZIeGZJeGZKeHZLeHZMeHZNdndo ZOdpdq ZPdrds ZQdtdu ZRe	d
ddvdw ZSddxdyZTddzd{ZUd|d} ZVd~d ZWdd ZXdd ZYdd ZZdd Z[dd Z\dd Z]dd Z^dd Z_e	d
dddddd Z`dd Zae	"d-dde	d
dddd Zbe	d
dddd
dd Zce	d
d
d
dddd
dd	dd Zde	d
d
dddd Zedd Zfdd ZgG dd dZhdS )z(This file exports ONNX ops for opset 11.    N)TupleUnion)_C)symbolic_helper)symbolic_opset9)symbolic_opset10)utils)GLOBALSvfc                 C   s   |   }|d u rtjj}ntjtj| }| jdt	j
|tj| dd}| jdt	j
|tj| dd}tj| d|||ddS )NConstantdtypevalue_tClip   Zopset_before)type
scalarTyper   
ScalarTypeFLOATscalar_type_to_onnxindexcast_pytorch_to_onnxoptorchtensorscalar_type_to_pytorch_typeopset9op_with_optional_float_cast)gselfmin_valmax_valr    r%   W/var/www/html/django/DPS/env/lib/python3.9/site-packages/torch/onnx/symbolic_opset11.pyhardtanh   s*    


r'   c                    s   |   } fdd}|d ur4|||}|||}t|rJt ||S t|r`t ||S t|dkrt|dkrtj d|||ddS t t |||S d S )Nc                    s0   | d ur(t | s( jd| t j| dS | S d S )NCastto_i)r   _is_noner   r   )r   r   r!   r%   r&   _cast_if_not_none2   s
    z clamp.<locals>._cast_if_not_noner   r   r   r   )	r   r   r   r+   	clamp_max	clamp_min_get_tensor_rankr   r    )r!   r"   minmaxr   r-   r%   r,   r&   clamp/   s"    



r3   c                 C   sh   |   }| jd|tj| d}t|dkrPt| }tj| d|||ddS tj| d||ddS d S )Nr(   r)   r   r   r   r   Max	r   r   r   r   r   r0   r   unusedr    )r!   r"   r1   r   r2   r%   r%   r&   r/   N   s    
r/   c                 C   sh   |   }| jd|tj| d}t|dkrPt| }tj| d|||ddS tj| d||ddS d S )Nr(   r)   r   r   r   r   Minr5   )r!   r"   r2   r   r1   r%   r%   r&   r.   [   s    
r.   c                 C   s   t j| d|dd}|  }|d u r0tjj}ntjtj	| }| j
dtjdtj| dd}| j
dtjdtj| dd}t| |||S )	NRelu   r   r   r   r   r      )r   r    r   r   r   r   r   r   r   r   r   r   r   r   r3   )r!   inputrelur   r#   r$   r%   r%   r&   relu6h   s(    


r=   ic                 C   s   | j d|||dS )NGatheraxis_ir   )r!   r"   dimr   r%   r%   r&   select   s    rD   Fc                    s  t |rt |}n|g}t  rH|g| ||g }jdg|R  S t |d}t|dkrd|S t|dkrtt|D ],}||  	 dkr~
d|| ||< q~|d }|dd  D ]}	t||	}q
d|  fdd	|D }j
d
g|R ddi}n|d }|}
|
 d urv|
 	 dkrvt |}|d urh|dkrht||
|S t||
|S 
d| t |dg}t j
d|dgt|gtjgd}j
d
 |dd}t |}|d ur|dkrt||d }t ||}| 	 }|d urF|| 	 krFj
d|t j| d}t jt j| }t j| }|rj
d
d|tjdg|dd}
d|||}t||}n
d|||}|S )N	index_putbr      BoolZNonZeroShapec                    s(   g | ] }t t| d dgqS )N)r   _unsqueeze_helperr   expand).0indZbroadcast_index_shaper!   r%   r&   
<listcomp>   s   zindex_put.<locals>.<listcomp>ConcatrA   rJ   )axesstartsendsr@   r(   r)   ConstantOfShaper   r   	ScatterND)r   _is_packed_list_unpack_listis_caffe2_aten_fallbackat
_parse_arglenranger   r   r   r   addr0   masked_fillmasked_scatterrK   _slice_helpersysmaxsizerL   _reshape_helperr   r   r   r   r   r   )r!   r"   Zindices_list_valuevalues
accumulateindices_listargsZidx_r   rN   Zbool_inprankZsub_data_shapevalues_shaper   zerosresultr%   rO   r&   rE      sn    
( 



rE   c                 C   s8   t |}|d ur&|dkr&t ddS | jd||ddS )N   pixel_shufflezonly support 4d inputDepthToSpaceZCRD)Zblocksize_imode_s)r   r0   _unimplementedr   )r!   r"   upscale_factorri   r%   r%   r&   rn      s    
rn   c                 C   s   t | ||S N)r   _interpolate_helper)namerC   interpolate_moder%   r%   r&   _interpolate   s    rw   upsample_nearest1d   nearestupsample_nearest2drm   upsample_nearest3d   upsample_linear1dlinearupsample_bilinear2dupsample_trilinear3dupsample_bicubic2dcubicTc              	   C   s   t | ||||||S rs   )r   __interpolate_helper)r!   r;   sizescale_factormodealign_cornersrecompute_scale_factor	antialiasr%   r%   r&   __interpolate  s    r   c                 C   sD   t |drt ddS t  r2| d||||S | jd|||dS )Nr>   gatherzsparse_grad == TrueZGatherElementsr@   )r   _maybe_get_constrq   rY   rZ   r   )r!   r"   rC   r   sparse_gradr%   r%   r&   r     s
    r   c              	   C   s   t  r| jd||||ddS |  }t |}t |rR| jd||||dS |  |kr| jd|t j|   d}| jd||t	
| |||dS d S )Nscattersrcoverload_nameZScatterElementsr@   r(   r)   )r   rY   rZ   r   r   _maybe_get_scalar	_is_valuer   r   r   	expand_as)r!   r"   rC   r   r   src_typer%   r%   r&   r     s    

r   nonec                 C   sj   | j dtj|tjdd}|rT|  dkrTt|dd}| j d|tj| d}n|}|  d	||}|S )
Nr   r   r   zprim::Constantr>   r   r(   r)   ZCumSum)	r   r   r   intnodekindr   
_get_constr   )r!   r"   rC   r   
dim_tensorZparsed_dtypecastZcsumr%   r%   r&   cumsum3  s    r   c                 C   s$   t | t | ||}| d||S )NGatherND)r   nonzeror   r   )r!   r"   maskr   r%   r%   r&   masked_selectA  s    r   c                 C   st   t | t | ||}t| |tdg}tj| |tdgtdgt | |tdgdd}| 	d|||S )NrJ   r   TrR   rS   rT   dynamic_slicerV   )
r   r   r   r   rd   r   
LongTensorra   r   r   )r!   r"   r   sourcer   r%   r%   r&   r`   F  s    

r`   c                 C   sT   t |s|  dkr&| d|S t| || jdtdgd}t | |dgS )Nzonnx::SplitToSequenceZSequenceLengthr   r   r   )	r   _is_tensor_listr   r   r   r   r   r   _squeeze_helper)r!   r"   Zsz_0r%   r%   r&   _lenW  s    r   c                 C   s4   t |r| d||S ddlm} || ||S d S )N
SequenceAtr   )
__getitem_)r   r   r   torch.onnx.symbolic_opset9r   )r!   r"   r>   getitemr%   r%   r&   r   a  s    
r   c                 C   s   |  d||}|  d|||S )NSequenceEraseSequenceInsertrB   )r!   tensor_listr>   r
   r%   r%   r&   	_set_itemk  s    r   c                 C   s   |  d||S Nr   rB   )r!   r"   r   r%   r%   r&   appendp  s    r   c                 C   sn   t |r^t |r^| }| dkr4t ddS t |}|}|D ]}| d||}qF|S t	| |||S )Nzprim::ListConstructr^   z6does not support adding dynamic tensor list to anotherr   )
r   r   r   r   r   rq   rX   r   r   r^   )r!   r"   otheralphaZtensor_list_nodetensorsltr%   r%   r&   r^   t  s    
r^   c                 C   s   |  d|||S r   rB   )r!   r"   posr   r%   r%   r&   insert  s    r   c                 C   s   |  d||S Nr   rB   r!   r   rC   r%   r%   r&   pop  s    r   c                 C   s   |  d||S r   rB   r   r%   r%   r&   Delete  s    r   c                 C   s:   t |rt| ||S t |dd}| jd||dS d S )Nr>   rC   ConcatFromSequencer@   )r   rW   r   catr   r   r   r%   r%   r&   r     s    
r   c                 C   s<   t |rt| ||S t |dd}| jd||ddS d S )Nr>   rC   r   rG   rA   Z
new_axis_i)r   rW   r   stackr   r   r   r%   r%   r&   r     s    
r   c           	      C   s$   | j d||dd\}}}}|||fS )NUniquerm   )sorted_ioutputsrB   )	r!   r"   sortedreturn_inversereturn_countsuindicesinverse_indicescountsr%   r%   r&   _unique2  s    r   c                    sr   t dddddddt ddddddddtjttdf ttdf ttttdf f ttd fd	d
}|S )NTFr
   isr>   r   .)r;   kernel_sizestridepadding	ceil_modecount_include_padc           	   	      s|   t |||| }|s|}|rV| jd|| jdtd| d ddd}dt| }| jd	||||d |d
}|S )NPadr   )r   r      r   constantrp   r   ZAveragePool)Zkernel_shape_iZ	strides_iZpads_iZceil_mode_i)r   _avgpool_helperr   r   r   r\   )	r!   r;   r   r   r   r   r   divisor_overrideoutputru   tuple_fnr%   r&   symbolic_fn  s,    z_avg_pool.<locals>.symbolic_fn)N)r   quantized_args
parse_argsr   Valuer   r   r   )ru   r   r   r%   r   r&   	_avg_pool  s    	 

!r   
avg_pool1d
avg_pool2d
avg_pool3dc           
      C   s&   | j d|||dd\}}}}	|||	fS )Nr   rm   )rA   r   r   rB   )
r!   r"   rC   r   r   r   r   r   r   r   r%   r%   r&   
unique_dim  s    
r   c              	   C   s   t j| ||||||dS )N)largestr   out)r   _topk_helper)r!   r"   krC   r   r   r   r%   r%   r&   topk  s    r   c                 C   s   t j| ||||dS )N)	decendingr   )r   _sort_helper)r!   r"   rC   r   r   r%   r%   r&   sort  s    r   c                 C   s   |  d|S )NRoundrB   r!   r"   r%   r%   r&   round  s    r   c                 C   s4   t |st |r"t| ||S | jd||ddS )NModr   )Zfmod_i)r   _is_fpr   	remainderr   )r!   r;   r   r%   r%   r&   r     s    r   c              
      s  t ||s jd|||d|d u r*S t |rtt ||krڇ fddt |D } jdtjdgtjdd} jdtj|gtjdd}g }t	|D ]2}	 d	|||	 }
|
 d
|||
| |
}q|S  fddt	|D S t ||||S d S )NSplitToSequencer@   c                    s   g | ]}t  |d gqS r   )r   rK   )rM   r
   r,   r%   r&   rP     s   zsplit.<locals>.<listcomp>r   r   r   r   AddSlicec                    s2   g | ]*}  d  j dtj|gtjddqS )r   r   r   r   )r   r   r   long)rM   r>   r!   	split_outr%   r&   rP     s   )r   _is_split_staticr   rW   r\   rX   r   r   r   r]   r   r   split)r!   r"   split_size_or_sizesrC   _outputssplit_sizesstartaxisresr>   endr%   r   r&   r     s2    

	r   c                 C   s   t | ||||S rs   )r   )r!   r"   r   rC   r   r%   r%   r&   split_with_sizes  s    r  c              	   C   sF   |d u r2| j d|| j dtjdtjdd|ddS t| |||S d S )Nr   r   rG   r   r   r   )rA   
keepdims_i)r   r   r   r   r   unbind)r!   r"   rC   r   r%   r%   r&   r    s    r  c                 C   s~  t |s0t |r0t |r0| jd|ddd}t| || jdtdgd}t 	|}|d u rx| d| d|}n| jdtj|tj
d	d}| d
| d|| jdtjdtj
d	d|}| jd|t jd d}| jd|| jd|tjdgtj
d	ddd}t | || jdtddgd}| jdt| |dgddgd}t | || jdtdgd}| jd|t jd d}|S )Nr   r   rG   r   r   r   SizerI   r   SubMulr   r(   Longr)   rQ   rU   r@   rJ   	Transposeperm_i)r   rW   _is_list_is_scalar_listr   r   r   r   r   r0   int64r   rd   opset10flip)r!   r;   padZpad_lenri   	extensionpaddingsZ	padding_cr%   r%   r&   _prepare_onnx_paddings0  sJ     
" r  c                 C   s<   d}t |}t | ||}t| ||}| jd||||dS )Nr   r   r   )r   r   _if_scalar_type_asr  r   )r!   r;   r   valuer   r  r%   r%   r&   constant_pad_ndc  s
    
r  c                 C   s"   d}t | ||}| jd|||dS )Nreflectr   r   r  r   r!   r;   r   r   r  r%   r%   r&   reflection_padk  s    r  c                 C   s"   d}t | ||}| jd|||dS )Nedger   r   r  r  r%   r%   r&   replication_padq  s    r  c                 C   sr   t |d}|dkr t| ||S |dkr4t| ||S |dkrJt| |||S |dkr`t| ||S td| d S )Ns	replicater  r   circularzUnrecognized padding mode )r   r[   r  r  r  r   _pad_circularRuntimeError)r!   r;   r  r   r  r%   r%   r&   r    s    r  c                 C   s   |  d|S )NZDetrB   r   r%   r%   r&   
linalg_det  s    r%  c                 C   s   t | t| |S rs   )r   logr%  )r!   r;   r%   r%   r&   logdet  s    r'  c                 G   s  dd }t |dks t |dkrt |dkr2d }n||d }tj| |d |d\}}}}| jdtjdtj| d	d
}| jdtjdtj| d	d
}	| d|||	}
nt |dkst |dkrt |dkrd }n||d }tj| |d |d |d |d\}}}}| d|||}
nt |dkr||d }tj| |d |d |d\}}}}| jdtjdtj| d	d
}	| d|||	}
ntdtt | d |
S )Nc                 S   s   t | d} | S )Nr>   )r   r   r   r%   r%   r&   _get_arange_dtype  s    z!arange.<locals>._get_arange_dtyper   r}   rG   r   )r  r   r   r   r   Rangerm      ry   )r   r  stepr   r:   )r   r  r   z&Unknown aten::arange signature taking z arguments.)	r\   r   _arange_cast_helperr   r   r   r   NotImplementedErrorstr)r!   rh   r(  r   r   r  r   r+  Zstart_defaultZdelta_defaultZarange_tensorr%   r%   r&   arange  sZ    



r/  c                 C   sT   |  d|}| j d|| j dt|ddd}t rB|  d|S t| |dd d d S )	NrI   r?   r   r   r   r@   z_caffe2::Rangerm   )r   r   r   r   rY   r/  )r!   likerC   
like_shapestopr%   r%   r&   _dim_arange  s    r3  c                 C   s"   |d u r|  d|S t| ||S )NrI   )r   r   _size_helperr!   r"   rC   r%   r%   r&   r     s    r   c                 C   s  |d u r|  d|S t|s.t| ||gS t|dd}t|}|}|d urb|dk rb||7 }t||}|dk r~|d u s|d u r4| j dt|gd}t	| ||}| j dtj
dtjdd}|  d	||}	|  d
|	}
|
 }t|}t|||g}t|| t|}| d|}t|| |
S |}|dkrttdt| d d t| d d d  |S t| ||gS )NSqueezer>   rC   r   r   r   rG   r   EqualIfIdentityz5This model contains a squeeze operation on dimension z. The size of z%this dimension in the given input is z. The model will zWbe exported without the squeeze node. If the model is intended to be used with dynamic z7input shapes, please export with dynamic_axes argument.)r   r   _is_constantr   r   r0   _get_tensor_dim_sizer   r   r4  onesr  r   r   
_add_block_add_output_to_blockwarningswarnr.  )r!   r"   rC   
input_rankZadjusted_dimdim_sizeZdim_constantr   Z	const_onecondZif_node_outputsZif_nodeZif_blocksqueeze_Z
else_blockZ	identity_r%   r%   r&   squeeze  sZ    





rE  c                 C   s(   t |rt |dd}t | ||gS )Nr>   rC   )r   r:  r   rK   r5  r%   r%   r&   	unsqueeze  s    
rF  c                 C   s   | j d||dddS )NZGemmg        g      ?)Zbeta_fZalpha_frB   )r!   r"   r   r%   r%   r&   mm  s    rG  c                 C   s   t  r| jd||ddS t |r0t |}n|g}t|dkr|d }t |s|  dkst|  dkrt	
| |}| d||S t	| ||S )	Nr   Tensorr   rG   r   rH   Byter   )r   rY   rZ   rW   rX   r\   r+   r   r   r   r   r   r   )r!   r"   r   r   r%   r%   r&   r     s    

r   c           	      C   sv   t |d}t  r*| jd|||d|dS t | |||\}}t |}t | ||}t| ||d }t	| ||||S )Nr>   
index_fillZ
int_Scalar)r   dim_i)
r   r[   rY   rZ   _index_fill_reshape_helperr   r  r   rL   r   )	r!   r"   rC   r   r  	dim_valueexpanded_index_shapeexpanded_indexZexpanded_valuer%   r%   r&   rJ  3  s"    	
rJ  c                 C   sL   t |d}t  r(| jd||||dS t | |||\}}t| ||||S )Nr>   
index_copy)rK  )r   r[   rY   rZ   rL  r   )r!   r"   rC   r   r   rM  rN  rO  r%   r%   r&   rP  H  s    rP  c                 C   s   |   |   kr6| jd|tj|    d}|   dkrX| jd||ddS | jdtjdtjd	d
}t|s| jd|tjd d}| d||}| jd|tj|    d}| d||}|S )Nr(   r)   rI  BitShiftRIGHTZdirection_sr   r   r   r   FloatPowDiv	r   r   r   r   r   r   r   float32r   )r!   r"   r   twotwo_powrshiftr%   r%   r&   	__rshift_R  s&    
r\  c                 C   s   |   |   kr6| jd|tj|    d}|   dkrX| jd||ddS | jdtjdtjd	d
}t|s| jd|tjd d}| d||}| jd|tj|    d}| d||}|S )Nr(   r)   rI  rQ  LEFTrS  r   r   r   r   rT  rU  r	  rW  )r!   r"   r   rY  rZ  lshiftr%   r%   r&   	__lshift_m  s&    
r_  c                 C   s   |  d|| j dt|d d}|  d|| j dt||d  d}|  d| j dtdd|| j dt|d}td|| |}| j d|dd}t| |dg}t| || j dtd	dgd}	|  d||	}
|
S )
Nr   r   r   r   r  rG   r)  r   rJ   )r   r   r   r/  rF  r   rK   rd   )r!   Zinput_dZkernel_size_dZ
dilation_dZ	padding_dstride_dZblocks_dZblocks_d_indicesZkernel_gridkernel_maskZ
block_maskr%   r%   r&   _get_im2col_indices_along_dim  s0    	rb  c                 C   s.   | j dtdd||gd d}|  d||S )Nr   r   r   r   r   )r   r   r   )r!   r;   	padding_h	padding_wr  r%   r%   r&   _get_im2col_padded_input  s     re  c              
   C   s   t | || jdtdd}t | || jdtdd}| d|| jdt|| d}| jdt| |dgt| |dg| jdtdgdddS )	Nr   r   r   rG   r	  rQ   rJ   r@   )r   r   r   r   r   rK   )r!   r;   kernel_hkernel_w	batch_dimchannel_dimZchannel_unfoldedr%   r%   r&   _get_im2col_output_shape  s    rj  r   c                 C   s  t | || jdtdd}t | || jdtdd}|d |d  }}	|d |d  }
}|d |d  }}|d |d  }}t| ||||
|}t| |||||	}t| |||}t| ||
|}| jd||dd}| jd||d	d}| jd
|g dd}t| ||S )Nr   r   r   ry   r   rG   r?   r@   rm   r  )r   rG   r   rm   ry   r}   r  )	r   r   r   r   rb  rj  re  r   rd   )r!   r;   r   dilationr   r   input_hinput_wstride_hstride_wrc  rd  Z
dilation_hZ
dilation_wrf  rg  Zblocks_row_indicesZblocks_col_indicesoutput_shapepadded_inputr   r%   r%   r&   im2col  s$    rr  c                 C   s$   |  d||}tj| ||||ddS )Nr   Tr   )r   r   ra   )r!   r;   rC   r   lengthr  r%   r%   r&   narrow  s    rt  c                 C   s   t |}|dkr|S |dkrL|dks:|d ur||d kr| jd||dS n8|dkr|dksp|d ur||d kr| jd||d dS |d u rt dd	S |dk r|| }t | ||||S )
NrG   rJ   Flattenr@   r   r   rC   zfONNX and PyTorch use different strategies to split the input. Input rank must be known at export time.)r   r0   r   rq   _flatten_helper)r!   r;   	start_dimend_dimrC   r%   r%   r&   flatten  s"    
rz  c                 C   s   |dkr|d u r:t | || jdtjdgtjdd}d }| d| d|| jdtdgd}| jd|t jd	 d
}t j| |||dS t	
| |||||S d S )Nr   r   rJ   r   r   Notr7  r(   r
  r)   axes_ir  )r   rd   r   r   r   r  r   r   _reducesum_helperr   linalg_vector_norm)r!   r"   ordrC   keepdimr   Zcond_opr%   r%   r&   r     s      r  c
                 C   sv  |rt jrtdS |	d ur,|	dkr,td| jdtdd}
| jd|
dd	}
| jdtdgd}t| t	| || jdtdddg}|s||g}| jd
g|R ddi}tj
| |dgdgtjgdgd}tj
| |dgdgtjgdgd}t	| || jdtdd}| d||
}t| }t|}t|}|jd||dd}|jd||dd}t||dg}t||dg}|d||||}|jd||dd}t|s|d||||}t||dg}|d||}|dkrtj||dgdd}n4|dkr&|jd|dgdd}n|jd|dgdd}|jd|
dd	}t|| t|| |  d d d fS )Nz7embedding_bag with scale_grad_by_freq for training moder   zembedding_bag with padding_idxr   rG   r   r(   	   r)   rQ   rA   )rR   rS   rT   stepsLoopr?   r@   r   r	  r|  Z
ReduceMeanZ	ReduceMax)r	   training_moder   _onnx_unsupportedr$  r   r   r   rK   r4  ra   rb   rc   r   r=  r   Z_add_input_to_blockr+   r~  r>  r   )r!   Zembedding_matrixr   offsetsscale_grad_by_freqr   sparseper_sample_weightsinclude_last_offsetpadding_idxloop_conditionzeroZindices_lenZoffsets_startsZoffsets_endsloop_lenloopZ
loop_blockZblock_input_iterrC  Zindices_startZindices_endZindices_row
embeddingsZper_sample_weights_rowZcond_outr%   r%   r&   embedding_bag5  sr    






r  c              	   C   s   |  d|}|  d||}t|}|dkr0d}n|dkr>d}ntd| d| j ||dgdd	}|  d
|| j dtdd}t|}|  d||}	|  d||	}
|  d|  d|||
|}
|  d|t| |dg|
S )Nr   r?   rG   ZReduceL1r   ZReduceL2z8Unsupported: ONNX export of embedding_renorm with norm: z. Only 1. and 2. are supported.r|  r   r   gHz>r   rV  r	  WhereGreaterrV   )r   r   r$  r   r   r   rK   )r!   weightr   max_norm	norm_typeunique_indicesZpartial_weightZpartial_weight_normZpartial_weight_norm_scalesZpartial_weight_renormr%   r%   r&   embedding_renorm  s:    

r  c              
   C   s   | j d|  d||dd}|  d|| j dtjdgtjdd	}|  d
|  d|||}t| ||d |  d||  d||g}| j dg|R ddi}t| |||S )Nr?   rI   r   r@   r  r   rG   r   r   rV  r   r	  rQ   rA   )r   r   r   r   r   rL   r   )r!   r"   chunksrC   rB  Zchunk_size_s
chunk_sizeZ	chunk_vecr%   r%   r&   chunk  s    r  c                 C   s"   t | || d|}t| ||S )NZRandomNormalLike)r   mulr   r^   )r!   locscaleseedrl   r%   r%   r&   normal  s    r  c                   @   s   e Zd ZdZedd ZdS )Primprimc              
   C   s  |  d|}| j dtj|gtjdd}| j d||dd}| j dtjdgtjdd}| j dtj|gtjdd}| j dtj|d gtjdd}	|  d	||	}
|  d
|
|}g }t|D ]N}| j dtj|d gtjdd}|  d||}||  d|||| |}q|S )NrI   r   r   r   r?   r   r@   rG   r   rV  r	  r   )r   r   r   r   r]   r   )r!   r"   r  rC   input_shaper  Zinput_shape_dimr   r  Zchunk_size_minus_1Zinput_shape_dim_shiftZ	chunk_dimr  r>   r   r  r%   r%   r&   ConstantChunk  s"     zPrim.ConstantChunkN)__name__
__module____qualname__domainstaticmethodr  r%   r%   r%   r&   r    s   r  )F)F)N)N)N)N)N)N)r   N)N)N)N)i__doc__rb   r?  typingr   r   r   r   
torch.onnxr   r   r   r   r  r   torch.onnx._globalsr	   r   r'   r3   r/   r.   r=   rD   rE   rn   rw   rx   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   nnmodules_singler   _pairr   _tripler   r   r   r   r   r   r   r  r  r  r  r  r  reflection_pad1dreflection_pad2dreflection_pad3dreplication_pad1dreplication_pad2dreplication_pad3dr  r%  r'  r/  r3  r   rE  rF  rG  r   rJ  rP  r\  r_  rb  re  rj  rr  rt  rz  r  r  r  r  r  r  r%   r%   r%   r&   <module>   s   






p







'
$3
;




3
+
3

V
$
