o
    闦i                     @  s  d Z 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	Z	 ddl
mZ ddlmZmZmZmZmZmZ ddlmZmZ g d	Zejejd
dZedededdddddZeddddZ ededddddZ!ededddd d!Z"ed"dd#d$Z#ed%ededd&ddd'd(Z$ed)	*ddd+d,Z%ed-edd&dd.d/Z&ed0e'd1d2d3gd4ed5e'd6d7d3gd4ed8e'd9d:d3gd4ed;e'd<d2d=gd4ed>e'd?d7d=gd4ed@e'dAd:d=gd4edBe'dCd7dDgd4ddJdKZ(edLedd*d*d*d*d*d*ddMdNZ)edOedd&dddddPdQZ*edRedd&ddddSdTZ+edUedd&dVdddWdXZ,edYddZd[Z-ed\dd]d^Z.ed_dd`daZ/edbddcddZ0ededdfdgZ1edhddidjZ2edkdddldmZ3ednddodpZ4edqddrdsZ5edtddudvZ6edwedddxdyZ7edzdd{d|Z8ed}edd&d&d&dd~dZ9ededd&d&d&d&dddZ:ededdd&d&d&dVddddZ;ededd&d&dVddddZ<ededd&d&dVddddZ=ededd&ddddZ>eddddZ?ededdd&d&ddddZ@ededdd&d&ddddZAededd&d&ddddZBdddZCedddddZDedededdddZEedededdddZFeddddZGeddddZHeddddZIeddddZJededd&dddZKedejdd*dddddZLedddddZMedÃdddńZNedƃdddȄZOedɃddd˄ZPed̃ddd΄ZQedσdddфZRed҃edӃdddՄZSedփed׃dddلZTdddۄZUddd݄ZVddd߄ZWededdddddddZXeddddZYededd*d*edd&d&dddZZededdddddddZ[ededddd&d&d&dd&d&	dddZ\ededddddddZ]eddddZ^ed						ddddZ_edddd Z`eddddZaeddddZbedddd	Zced
dddZdeddddZedS (  z(This file exports ONNX ops for opset 11.    )annotationsN)Sequence)_C)_onnx)_type_utilserrorssymbolic_helpersymbolic_opset10symbolic_opset9utils)	jit_utilsregistration)9addappendarangeargsort
atleast_1d
atleast_2d
atleast_3dcatchunk	clamp_max	clamp_minclampconstant_pad_ndcumsumDeleteembedding_bagembedding_renormflattengatherhardtanhhstackim2col
index_fillindex
index_copy	index_putinsert
linalg_detlinalg_vector_normlogdetmasked_scattermasked_selectmmnarrownormalpadpixel_shufflepopprim_constant_chunkreflection_padrelu6	remainderreplication_padroundscatterselectsizesortsplit_with_sizessplitsqueezestacktopkunbind
unique_dim	unsqueezevstack   )opsetzaten::hardtanhTvfgjit_utils.GraphContextself_C.Valuemin_valfloatmax_valc                 C  s`   t j|t jj}| jdtj|| dd}| jdtj|| dd}tj	| d|||ddS )NConstantdtypevalue_tClip   opset_before)
r   JitScalarType
from_valueFLOAToptorchtensorrT   r   _op_with_optional_float_cast)rK   rM   rO   rQ   scalar_type rc   Y/home/ubuntu/transcripts/venv/lib/python3.10/site-packages/torch/onnx/symbolic_opset11.pyr!   \   s   r!   zaten::clampc                   s    fdd}t j|t jj}|t jjkr|||}|||}t|r*t ||S t|r5t ||S t|dkrNt|dkrNtj	 d|||ddS t t |||S )Nc                   s*   | d urt | s jd| | dS | S )NCastto_i)r   _is_noner^   	onnx_type)r`   rT   rK   rc   rd   _cast_if_not_noner   s   z clamp.<locals>._cast_if_not_noner   rW   rX   rY   )
r   r[   r\   	UNDEFINEDr   rh   r   r   _get_tensor_rankra   )rK   rM   minmaxrk   rb   rc   rj   rd   r   p   s"   




r   zaten::clamp_minc                 C  s^   | j d|tj| d}t|dkr%t| }tj	| d|||ddS tj	| d||ddS )Nre   rf   r   rW   rX   rY   Max
r^   r   r[   r\   ri   r   rm   opset9unusedra   )rK   rM   rn   ro   rc   rc   rd   r         

r   zaten::clamp_maxc                 C  s^   | j d|tj| d}t|dkr%t| }tj	| d|||ddS tj	| d||ddS )Nre   rf   r   rW   rX   rY   Minrq   )rK   rM   ro   rn   rc   rc   rd   r      rt   r   zaten::relu6c                 C  sX   t j|t jj}| jdtjd| dd}| jdtjd| dd}t| |||S )NrR   r   rS   rU      )	r   r[   r\   r]   r^   r_   r`   rT   r   )rK   inputrb   rO   rQ   rc   rc   rd   r6      s   r6   zaten::selectic                 C  s   | j d|||dS )NGatheraxis_ir^   )rK   rM   dimr%   rc   rc   rd   r;      s   r;   zaten::index_putFc                   s  t |rt |}n|g}t |d}t|dkr|S t|dkrmtt|D ]}t || r;d|| ||< q(|d }|dd  D ]	}t	||}qFd|  fdd|D }jdg|R d	d
i}nW|d }|}	t |	rt 
|}
|
d ur|
dkrt||	|S t 
|	}t 
|}|d ur|d ur||krt |	tt||}	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 ||}tj|tjj}|tjjkr&tj|tjj}||kr%jd|| d}n	|r/td||rVjdd|tjdg| dd}d|||}t	||}|S d|||}|S )Nbr      NonZeroShapec                   s(   g | ]}t t| d dgqS )N)r   _unsqueeze_helperrr   expand).0indbroadcast_index_shaperK   rc   rd   
<listcomp>   s    zindex_put.<locals>.<listcomp>Concatr{   r   axesstartsendsrz   re   rf   z'self does not have a valid scalar type.ConstantOfShaperS   rU   	ScatterND)r   _is_packed_list_unpack_list
_parse_arglenrange_is_boolr^   rr   r   rm   masked_fillr   listr,   _slice_helpersysmaxsizer   _reshape_helperr   r[   r\   rl   ri   r   SymbolicValueErrorr_   r`   rT   )rK   rM   indices_list_valuevalues
accumulateindices_listidx_r%   r   bool_inprank	mask_rank	self_ranksub_data_shapevalues_shapeself_scalar_typevalues_scalar_typezerosresultrc   r   rd   r'      s   
(






r'   zaten::pixel_shufflec                 C  s8   t |}|d ur|dkrt ddS | jd||ddS )N   r2   zonly support 4d inputDepthToSpaceCRD)blocksize_imode_s)r   rm   _unimplementedr^   )rK   rM   upscale_factorr   rc   rc   rd   r2   E  s   
r2   zaten::upsample_nearest1dupsample_nearest1d   nearest)decoratezaten::upsample_nearest2dupsample_nearest2dr   zaten::upsample_nearest3dupsample_nearest3d   zaten::upsample_linear1dupsample_linear1dlinearzaten::upsample_bilinear2dupsample_bilinear2dzaten::upsample_trilinear3dupsample_trilinear3dzaten::upsample_bicubic2dupsample_bicubic2dcubicnamestrr}   intinterpolate_modec                 C  s   t | ||S N)r   _interpolate_helper)r   r}   r   rc   rc   rd   _interpolateN  s   r   zaten::__interpolatec              	   C  s   t | ||||||S r   )r   __interpolate_helper)rK   rw   r<   scale_factormodealign_cornersrecompute_scale_factor	antialiasrc   rc   rd   __interpolaten  s   r   zaten::gatherc                 C  s*   t |drt ddS | jd|||dS )Nrx   r    zsparse_grad == TrueGatherElementsrz   )r   _maybe_get_constr   r^   )rK   rM   r}   r%   sparse_gradrc   rc   rd   r      s   r    zaten::scatterc              	   C  s~   t j|}t|}t|r| jd||||dS t j||kr0| jd|t j| d}| jd||t	| |||dS )NScatterElementsrz   re   rf   )
r   r[   r\   r   _maybe_get_scalar	_is_valuer^   ri   rr   	expand_as)rK   rM   r}   r%   srcsrc_typerc   rc   rd   r:     s   

r:   zaten::cumsumnonec                 C  sn   | j dtj|tjdd}|r,|  dkr,t|dd}| j d|t	|
 d}n|}|  d	||}|S )
NrR   rS   rU   zprim::Constantrx   rT   re   rf   CumSum)r^   r_   r`   r   nodekindr   
_get_constr   r[   ri   )rK   rM   r}   rT   
dim_tensorparsed_dtypecastcsumrc   rc   rd   r     s   r   zaten::masked_selectc                 C  s$   t | t | ||}| d||S )NGatherND)rr   nonzeror   r^   )rK   rM   maskr%   rc   rc   rd   r-     s   r-   zaten::masked_scatterc                 C  sr   t | t | ||}t| |tdg}tj| |tdgtdgt | |tdgd}| 	d|||S )Nr   r   r   r   )
rr   r   r   r   r   r_   
LongTensorr   r<   r^   )rK   rM   r   sourcer%   rc   rc   rd   r,     s   

r,   z	aten::lenc                 C  sT   t |s|  dkr| d|S t| || jdtdgd}t | |dgS )Nzonnx::SplitToSequenceSequenceLengthrR   r   rU   )	r   _is_tensor_listr   r   r^   r<   r_   r   _squeeze_helper)rK   rM   sz_0rc   rc   rd   _len  s   r   zaten::__getitem_c                 C  s0   t |r| d||S ddlm} || ||S )N
SequenceAtr   )
__getitem_)r   r   r^   torch.onnx.symbolic_opset9r   )rK   rM   rx   getitemrc   rc   rd   r     s   
r   zaten::_set_itemc                 C  s   |  d||}|  d|||S )NSequenceEraseSequenceInsertr|   )rK   tensor_listrx   rI   rc   rc   rd   	_set_item  s   r   zaten::appendc                 C     |  d||S Nr   r|   )rK   rM   r`   rc   rc   rd   r        r   z	aten::addc                 C  sn   t |r/t |r/| }| dkrt ddS t |}|}|D ]	}| d||}q#|S t	| |||S )Nzprim::ListConstructr   z6does not support adding dynamic tensor list to anotherr   )
r   r   r   r   r   r   r   r^   rr   r   )rK   rM   otheralphatensor_list_nodetensorsltrc   rc   rd   r     s   
r   zaten::insertc                 C  s   |  d|||S r   r|   )rK   rM   posr`   rc   rc   rd   r(     s   r(   z	aten::popc                 C  r   Nr   r|   rK   r   r}   rc   rc   rd   r3     r   r3   zaten::Deletec                 C  r   r   r|   r   rc   rc   rd   r     r   r   z	aten::catc                 C  s6   t |rt| ||S t |dd}| jd||dS )Nrx   r}   ConcatFromSequencerz   )r   r   rr   r   r   r^   r   rc   rc   rd   r     s   
r   zaten::stackc                 C  s8   t |rt| ||S t |dd}| jd||ddS )Nrx   r}   r   r   r{   
new_axis_i)r   r   rr   rA   r   r^   r   rc   rc   rd   rA     s   
rA   zaten::_unique2c           	      C  s$   | j d||dd\}}}}|||fS )NUniquer   )sorted_ioutputsr|   )	rK   rM   sortedreturn_inversereturn_countsu_indicesinverse_indicescountsrc   rc   rd   _unique2  s   
r  zaten::unique_dimc           
      C  s&   | j d|||dd\}}}}	|||	fS )Nr  r   )r{   r  r  r|   )
rK   rM   r}   r  r  r  r  r	  r
  r  rc   rc   rd   rD     s   

rD   z
aten::topkc              	   C  s   t j| ||||||dS )N)largestr  out)r   _topk_helper)rK   rM   kr}   r  r  r  rc   rc   rd   rB   *  s   rB   z
aten::sortc                 C  s   t j| ||||dS N)	decendingr  r   _sort_helper)rK   rM   r}   r  r  rc   rc   rd   r=   2  s   r=   zaten::argsortc                 C  s   t j| ||||d\}}|S r  r  )rK   rM   r}   r  r  _indicesrc   rc   rd   r   8  s   

r   zaten::roundc                 C  sz   t |s|S |dkr| d|S | d|| jdttd|d}| d|}| d|| jdttdd| dS )Nr   RoundMulrR   
   rU   r   )r   _is_fpr^   r_   r`   pow)rK   rM   decimalsmulr9   rc   rc   rd   r9   A  s   
$ r9   zaten::remainderc                 C  s4   t |s
t |rt| ||S | jd||ddS )NModr   )fmod_i)r   r  rr   r7   r^   )rK   rw   r   rc   rc   rd   r7   O  s   r7   zaten::splitc              
     s  t ||sy jd|||d|d u rS t |rmtt ||krm 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 ]}	 d	|||	 }
|
 d
|||
| |
}qQ|S  fddt	|D S t ||||S )NSplitToSequencerz   c                   s   g | ]
}t  |d gqS r   )r   r   )r   rI   rj   rc   rd   r   b  s    zsplit.<locals>.<listcomp>rR   r   rS   rU   AddSlicec                   s2   g | ]}  d  j dtj|gtjddqS )r   rR   rS   rU   )r^   r_   r`   long)r   rx   rK   	split_outrc   rd   r   p  s    )r   _is_split_staticr^   r   r   r   r_   r`   r$  r   r   rr   r?   )rK   rM   split_size_or_sizesr}   _outputssplit_sizesstartaxisresrx   endrc   r%  rd   r?   V  s0   

	r?   zaten::split_with_sizesc                 C  s   t | ||||S r   )r?   )rK   rM   r*  r}   r)  rc   rc   rd   r>   |  s   r>   zaten::unbindc              	   C  sB   |d u r| j d|| j dtjdtjdd|ddS t| |||S )Nr   rR   r   rS   rU   r   )r{   
keepdims_i)r^   r_   r`   r$  rr   rC   )rK   rM   r}   r)  rc   rc   rd   rC     s   rC   c                 C  sz  t |st |rt |r| jd|ddd}t| || jdtdgd}t 	|}|du r<| 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j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jd}|S )a!  Generate paddings in ONNX order based on pad in pytorch.

    Args:
        input: the input tensor.
        pad: the paddings in pytorch.
            The order is dim_n_begin, dim_n_end, dim_n-1_begin, dim_n-1_end, ..., dim_m_begin, dim_m_end,
            where m is in range [0, n].
    r   r   r   r   rR   rU   NSizer   rS   Subr     re   rf   r   r   rz   r   	Transposeperm_i)r   r   _is_list_is_scalar_listr^   rr   r<   r_   r`   rm   int64_C_onnxTensorProtoDataTypeINT64r   opset10flip)rK   rw   r1   pad_lenr   	extensionpaddings	padding_crc   rc   rd   _prepare_onnx_paddings  sF   
 
" rB  zaten::constant_pad_ndc                 C  s:   d}t |}t ||}t| ||}| jd||||dS )NconstantPadr   )r   r   _if_scalar_type_asrB  r^   )rK   rw   paddingvaluer   r1   rc   rc   rd   r     s
   
r   zaten::reflection_pad1dzaten::reflection_pad2dzaten::reflection_pad3dc                 C  "   d}t | ||}| jd|||dS )NreflectrD  rE  rB  r^   rK   rw   rG  r   r@  rc   rc   rd   r5        r5   zaten::replication_pad1dzaten::replication_pad2dzaten::replication_pad3dc                 C  rI  )NedgerD  rE  rK  rL  rc   rc   rd   r8     rM  r8   z	aten::padrw   r1   r   rH  c                 C  sr   t |d}|dkrt| ||S |dkrt| ||S |dkr%t| |||S |dkr0t| ||S td| |)Ns	replicaterJ  rC  circularzUnrecognized padding mode )	r   r   r8   r5   r   rr   _pad_circularr   r   )rK   rw   r1   r   rH  rc   rc   rd   r1     s   zaten::linalg_detc                 C  s   |  d|S )NDetr|   )rK   rM   rc   rc   rd   r)     s   r)   zaten::logdetc                 C  s   t | t| |S r   )rr   logr)   )rK   rw   rc   rc   rd   r+     s   r+   aten::arangec                 G  s  dd }t |dkrFtdd |D rFtj}| jdtj|d |dd	}| jdtj|d
 |dd	}| jdtjd
|dd	}| d|||S t |dksRt |dkrt |dkr[d }n||d
 }tj| |d |d\}}}}| jdtjd| dd	}	| jdtjd
| dd	}| d|	||S t |dkst |dkrt |dkrd }n||d }tj| |d |d
 |d |d\}
}}}| d|||S t |dkr||d }tj| |d |d
 |d\}}}}| jdtjd
| dd	}| d|||S t	ddt | dS )Nc                 S  s   t | d} | S )Nrx   )r   r   rS   rc   rc   rd   _get_arange_dtype  s   z!arange.<locals>._get_arange_dtyper2  c                 s  s    | ]}t |tV  qd S r   )
isinstancer   )r   valrc   rc   rd   	<genexpr>
  s    zarange.<locals>.<genexpr>rR   r   rS   rU   r   Ranger   )r.  rT   r      r   )r+  r.  steprT   rv   )r+  r.  rT   rU  zwith z
 arguments)
r   allr_   r8  r^   r`   r   _arange_cast_helperrT   r   )rK   argsrV  rT   r+  r.  delta_defaulttype_r\  start_defaultr  rc   rc   rd   r     sj   
r   zaten::_dim_arangec                 C  s@   |  d|}| j d|| j dt|ddd}t| |dd d d S )Nr   ry   rR   rU   r   rz   r   )r^   r_   r`   r   )rK   liker}   
like_shapestoprc   rc   rd   _dim_arangeL  s
   rf  z
aten::size)quantize_outputc                 C  s"   |d u r
|  d|S t| ||S )Nr   )r^   r   _size_helperrK   rM   r}   rc   rc   rd   r<   V  s   r<   zaten::squeezec                 C  sx  |d u r
|  d|S t|st| ||gS t|dd}t|}|}|d ur1|dk r1||7 }t||}|dk r?|d u sC|d u r| j dt|gd}t	| ||}| j dtj
dtjdd}|  d	||}	tj| d
|	dd\}
\}}}t|||g}t|j| | d|}t|j| |
S |}|dkrtdt| d d t| d d d  |S t| ||gS )NSqueezerx   r}   r   rR   rU   r   rS   EqualIfr2  )n_blocks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   rm   _get_tensor_dim_sizer_   r`   rh  onesr8  r   add_op_with_blocksr   _add_output_to_blockblockwarningswarnr   )rK   rM   r}   
input_rankadjusted_dimdim_sizedim_constantr<   	const_onecondif_op
if_contextelse_contextr  squeeze_	identity_rc   rc   rd   r@   ^  sX   


r@   zaten::unsqueezec                 C  s(   t |rt |dd}t | ||gS )Nrx   r}   )r   ro  r   r   ri  rc   rc   rd   rE     s   
rE   zaten::mmc                 C  s   | j d||dddS )NGemmg        g      ?)beta_falpha_fr|   )rK   rM   r   rc   rc   rd   r.     s   r.   zaten::indexc                 C  s   t |rt |}n|g}t|dkr9|d }t |s9t |s,tj|tjj	kr9t
| |}| d||S t
| ||S )Nr   r   r   )r   r   r   r   rh   r   r   r[   r\   UINT8rr   r   r^   r%   )rK   rM   r%   r  rc   rc   rd   r%     s   


r%   zaten::index_fillc                 C  sJ   t | |||\}}t |}t ||}t| ||d }t| ||||S r   )r   _index_fill_reshape_helperr   rF  rr   r   r:   )rK   rM   r}   r%   rH  expanded_index_shapeexpanded_indexexpanded_valuerc   rc   rd   r$     s   
r$   zaten::index_copyc                 C  s$   t | |||\}}t| ||||S r   )r   r  r:   )rK   rM   r}   r%   r   _expanded_index_shaper  rc   rc   rd   r&     s   r&   zaten::bitwise_right_shiftzaten::__rshift_c                 C     t j|t jjt j|kr| jd|t j| d}t j|t jjt jjkr3| jd||ddS | jdtjdtj	dd	}t
|sO| jd|tjjd}| d
||}| jd|t j| d}| d||}|S )Nre   rf   BitShiftRIGHTdirection_srR   r2  rS   rU   PowDivr   r[   r\   rl   r^   ri   r  r_   r`   float32r   r  r9  r:  r]   )rK   rM   r   twotwo_powrshiftrc   rc   rd   	__rshift_  2   

r  zaten::bitwise_left_shiftzaten::__lshift_c                 C  r  )Nre   rf   r  LEFTr  rR   r2  rS   rU   r  r  r  )rK   rM   r   r  r  lshiftrc   rc   rd   	__lshift_  r  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"  rR   r2  rU   r1  r   rZ  r   r   )r^   r_   r`   r   rE   r   r   r   )rK   input_dkernel_size_d
dilation_d	padding_dstride_dblocks_dblocks_d_indiceskernel_gridkernel_mask
block_maskrc   rc   rd   _get_im2col_indices_along_dim	  s0   	r  c                 C  s.   | j dtdd||gd d}|  d||S )NrR   r   r2  rU   rD  )r^   r_   r   )rK   rw   	padding_h	padding_wr1   rc   rc   rd   _get_im2col_padded_input4  s    r  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 )	NrR   r   rU   r   r  r   r   rz   )r<   r^   r_   r`   r   r   )rK   rw   kernel_hkernel_w	batch_dimchannel_dimchannel_unfoldedrc   rc   rd   _get_im2col_output_shape<  s   r  zaten::im2colisc                 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 )NrR   r2  rU   r   r   r   ry   rz   r   r3  )r   r   r2  r   r   r   r4  )	r<   r^   r_   r`   r  r  r  r   r   )rK   rw   kernel_sizedilationrG  strideinput_hinput_wstride_hstride_wr  r  
dilation_h
dilation_wr  r  blocks_row_indicesblocks_col_indicesoutput_shapepadded_inputoutputrc   rc   rd   r#   L  s$   r#   zaten::narrowc                 C  s"   |  d||}tj| ||||dS )Nr"  r   )r^   r   r   )rK   rw   r}   r+  lengthr.  rc   rc   rd   r/     s   r/   zaten::flattenc                 C  s   t |}|dkr|S |dkr&|dks|d ur%||d kr%| jd||dS n|dkrB|dks8|d urB||d krB| jd||d dS |d u rLt dd	S |dk rT|| }t | ||||S )
Nr   r   Flattenrz   r   r2  r}   zfONNX and PyTorch use different strategies to split the input. Input rank must be known at export time.)r   rm   r^   r   _flatten_helper)rK   rw   	start_dimend_dimr}   rc   rc   rd   r     s$   
r   zaten::linalg_vector_normr~   Sequence[int] | Nonekeepdimboolc                 C  s   t | |||||S r   )r   _linalg_vector_norm_helper)rK   rM   ordr}   r  rT   rc   rc   rd   r*     s   
r*   zaten::embedding_bagc
           
      C  s   t | |||||||||	
S r   )r   _embedding_bag_helper)
rK   embedding_matrixr  offsetsscale_grad_by_freqr   sparseper_sample_weightsinclude_last_offsetpadding_idxrc   rc   rd   r     s   r   zaten::embedding_renormc              	   C  s   |  d|}|  d||}t|}|dkrd}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  ry   r   ReduceL1r2  ReduceL2z8Unsupported: ONNX export of embedding_renorm with norm: z. Only 1. and 2. are supported.)axes_ir/  r"  rR   gHz>rU   r  r  WhereGreaterr   )r^   r   r   r   r_   r`   r   r   )rK   weightr  max_norm	norm_typeunique_indicespartial_weightnorm_ipartial_weight_normpartial_weight_norm_scalespartial_weight_renormrc   rc   rd   r     s<   

r   zaten::chunkc              
   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 )Nry   r   r   rz   r1  rR   r   rS   rU   r  r"  r  r   r{   )r^   r_   r`   r$  rr   r   r?   )rK   rM   chunksr}   ry  chunk_size_s
chunk_size	chunk_vecrc   rc   rd   r     s   r   zaten::normalc	           
      C  sD   |d urt |st| ||d }t| || d|}	t| |	|S )NRandomNormalLike)r   rh   rr   r   r  r^   r   )
rK   meanstdsizes	generatorrT   layoutdevice
pin_memoryr   rc   rc   rd   r0     s   r0   zaten::atleast_1dtorch._C.Valuec              
   C  s   t |r?t |r?t |}g }|D ]"}|}t |}|dkr0t | || jdtdgd}|	| q| jdg|R  S t |}|dkrXt | || jdtdgd}|S )Nr   rR   r   rU   SequenceConstruct)
r   r   r   r   rm   r   r^   r_   r`   r   rK   rM   r   new_tensor_listr`   
new_tensortensor_rankrc   rc   rd   r     s$   


r   zaten::atleast_2dc                 C  s   t |rNt |rNt |}g }|D ]1}|}t |}|dkr2t | || jdtddgd}n|dkr?t j	| |dgd}|
| q| jdg|R  S t |}|dkrjt | || jdtddgd}|S |dkrwt j	| |dgd}|S )Nr   rR   r   rU   r  r  r   r   r   r   rm   r   r^   r_   r`   r   r   r  rc   rc   rd   r   4  s2   


r   zaten::atleast_3dc                 C  sP  t |ret |ret |}g }|D ]H}|}t |}|dkr2t | || jdtg dd}n$|dkrIt j	| |dgd}t j	| |dgd}n|dkrVt j	| |dgd}|
| q| jd	g|R  S t |}|dkrt | || jdtg dd}|S |dkrt j	| |dgd}t j	| |dgd}|S |dkrt j	| |dgd}|S )
Nr   rR   )r   r   r   rU   r   r  r   r2  r  r  r  rc   rc   rd   r   U  sH   


r   zprim::ConstantChunkc              
   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 ]'}| j dtj|d gtjdd}|  d||}||  d|||| |}q]|S )Nr   rR   rS   rU   ry   r   rz   r   r"  r  r  r#  )r^   r_   r`   r$  r   r   )rK   rM   r  r}   input_shaper,  input_shape_dimr+  r  chunk_size_minus_1input_shape_dim_shift	chunk_dimr-  rx   r%   r.  rc   rc   rd   r4     s"    r4   zaten::hstackr   c              
   C  s   t | |}| d|| jdtjdtjdd}| d|}| d|}| jdtjdtjdd}| d	||}tj| d
|ddd\}\}}	}
|jd|ddd}t|j	| |	jd|ddd}t|	j	| |
  }|S )Nr   rR   r   rS   rU   r   r0  r   rk  rl  r2  )rm  r  r   r   )r   r^   r_   r`   r$  r   rr  r   rs  rt  r   r  )rK   r   first_tensorfirst_tensor_shapefirst_tensor_dimr{  equal_to_oneif_op_greaterif_context_equalelse_context_equalr  	result_ifresult_elser   rc   rc   rd   r"     s2   
r"   zaten::vstackc                 C  s   t | |}| jd|dddS )Nr   r   r   )r   r^   )rK   r   rc   rc   rd   rF     s   
rF   )rK   rL   rM   rN   rO   rP   rQ   rP   )rK   rL   )F)r   r   r}   r   r   r   r   r!  )r   N)
rK   rL   rw   rN   r1   rN   r   rN   rH  rN   )rK   rL   r}   r  r  r  )NNNNNN)rK   rL   rM   r  )rK   rL   r   rN   )f__doc__
__future__r   	functoolsr   ru  typingr   r_   r   torch._Cr   r9  
torch.onnxr   r   r   r	   r<  r
   rr   r   torch.onnx._internalr   r   __all__partialonnx_symbolic_onnx_symbolicquantized_args
parse_argsr!   r   r   r   r6   r;   r'   r2   _apply_paramsr   r   r    r:   r   r-   r,   r   r   r   r   r   r(   r3   r   r   rA   r  rD   rB   r=   r   r9   r7   r?   r>   rC   rB  r   r5   r8   r1   r)   r+   r   rf  r<   r@   rE   r.   r%   r$   r&   r  r  r  r  r  r#   r/   r   r*   r   r   r   r0   r   r   r   r4   r"   rF   rc   rc   rc   rd   <module>   s   <"

{


	
$9G
2
  +3% +