a
    h^                     @  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 erdd	lmZ g d
ZejejddZedede ddddddddddZ!edddddZ"ede ddddddZ#ede dddddd Z$ed!ddd"d#Z%ed$ede dd%dddd&d'Z&ed(dddd*d+Z'ed,e dd%ddd-d.Z(ed/e)d0d1d2gd3ed4e)d5d6d2gd3ed7e)d8d9d2gd3ed:e)d;d1d<gd3ed=e)d>d6d<gd3ed?e)d@d9d<gd3edAe)dBd6dCgd3dDdEdDdFdGdHZ*edIedd)d)d)d)d)d)dddJdKZ+edLe 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%dSddddTdUZ.edVdddWdXZ/edYdddZd[Z0ed\ddd]d^Z1ed_ddd`daZ2edbdddcddZ3ededddfdgZ4edhddddidjZ5edkdddldmZ6edndddodpZ7edqdddrdsZ8edteddddudvZ9edwdddxdyZ:edze dd%d%d%ddd{d|Z;ed}e dd%d%d%d%ddd~dZ<ede ddd%d%d%dSdddddZ=ede dd%d%dSdddddZ>ede dd%d%dSdddddZ?ede dd%dddddZ@edddddZAede ddd%d%dddddZBede ddd%d%dddddZCede dd%d%dddddZDddddZEeddddddZFedededddddZGedededddddZHedddddddddZIedddddZJedddddZKedddddZLede dd%ddddZMedejdd)ddddddZNeddddddZOedddddZPedddddÄZQedăddddƄZRedǃddddɄZSedʃdddd̄ZTed̓ed΃ddddЄZUedуed҃ddddԄZVddddքZWdddd؄ZXddddڄZYedۃe dddddܡddddބZZed߃ddddZ[ededd)d)e dd%d%ddddZ\ede dddddddddddZ]ede dddd%d%d%dd%d%	ddddZ^ede ddddddddZ_edddddZ`eddddddZaeddddddZbeddddddZced dddddZdedddddZeedddddd	Zfed
dddddZgdS (  z(This file exports ONNX ops for opset 11.    )annotationsN)TYPE_CHECKING)_C)_onnx)_type_utilserrorssymbolic_helpersymbolic_opset10symbolic_opset9utils)	jit_utilsregistration)Sequence)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   )Zopsetzaten::hardtanhTvfzjit_utils.GraphContextz_C.Valuefloat)gselfmin_val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Zvalue_tClip   Zopset_before)
r   JitScalarType
from_valueFLOAToptorchtensorrR   r   _op_with_optional_float_cast)rL   rM   rN   rO   scalar_type r_   I/var/www/auris/lib/python3.9/site-packages/torch/onnx/symbolic_opset11.pyr"   `   s    r"   zaten::clamprL   c                   s    fdd}t j|t jj}|t jjkr>|||}|||}t|rTt ||S t|rjt ||S t|dkrt|dkrtj	 d|||ddS t t |||S d S )Nc                   s.   | d ur&t | s& jd| | dS | S d S )NCastZto_i)r   _is_nonerZ   	onnx_type)r\   rR   ra   r_   r`   _cast_if_not_nonev   s    z clamp.<locals>._cast_if_not_noner   rT   rU   rV   )
r   rW   rX   	UNDEFINEDr   rd   r   r   _get_tensor_rankr]   )rL   rM   minmaxrf   r^   r_   ra   r`   r   t   s&    




r   zaten::clamp_minc                 C  sb   | j d|tj| d}t|dkrJt| }tj	| d|||ddS tj	| d||ddS d S )Nrb   rc   r   rT   rU   rV   ZMax
rZ   r   rW   rX   re   r   rh   opset9Zunusedr]   )rL   rM   ri   rj   r_   r_   r`   r      s    

r   zaten::clamp_maxc                 C  sb   | j d|tj| d}t|dkrJt| }tj	| d|||ddS tj	| d||ddS d S )Nrb   rc   r   rT   rU   rV   ZMinrk   )rL   rM   rj   ri   r_   r_   r`   r      s    

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 )NrP   r   rQ   rS      )	r   rW   rX   rY   rZ   r[   r\   rR   r   )rL   inputr^   rN   rO   r_   r_   r`   r7      s    r7   zaten::selectic                 C  s   | j d|||dS )NGatheraxis_irZ   )rL   rM   dimr&   r_   r_   r`   r<      s    r<   zaten::index_putFc                   s  t |rt |}n|g}t |d}t|dkr8|S t|dkrtt|D ]&}t || rPd|| ||< qP|d }|dd  D ]}t	||}qd|  fdd|D }jdg|R d	d
i}n|d }|}	t |	rxt 
|}
|
d ur |
dkr t||	|S t 
|	}t 
|}|d urj|d urj||krjt |	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rnjd|| d}n|rntd||rjdd|tjdg| dd}d|||}t	||}nd|||}|S )Nbr      ZNonZeroShapec                   s(   g | ] }t t| d dgqS )N)r   _unsqueeze_helperrl   expand).0indZbroadcast_index_shaperL   r_   r`   
<listcomp>   s   zindex_put.<locals>.<listcomp>Concatrr   rx   ZaxesZstartsZendsrq   rb   rc   z'self does not have a valid scalar type.ConstantOfShaperQ   rS   	ScatterND)r   _is_packed_list_unpack_list
_parse_arglenrange_is_boolrZ   rl   r   rh   Zmasked_fillry   listr-   _slice_helpersysmaxsizerz   _reshape_helperr   rW   rX   rg   re   r   SymbolicValueErrorr[   r\   rR   )rL   rM   Zindices_list_valuevalues
accumulateZindices_listZidx_r&   r|   Zbool_inprankZ	mask_rankZ	self_rankZsub_data_shapeZvalues_shapeZself_scalar_typeZvalues_scalar_typezerosresultr_   r}   r`   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   r3   zonly support 4d inputZDepthToSpaceZCRD)Zblocksize_imode_s)r   rh   _unimplementedrZ   )rL   rM   Zupscale_factorr   r_   r_   r`   r3   I  s    
r3   zaten::upsample_nearest1dZupsample_nearest1d   Znearest)Zdecoratezaten::upsample_nearest2dZupsample_nearest2dr   zaten::upsample_nearest3dZupsample_nearest3d   zaten::upsample_linear1dZupsample_linear1dZlinearzaten::upsample_bilinear2dZupsample_bilinear2dzaten::upsample_trilinear3dZupsample_trilinear3dzaten::upsample_bicubic2dZupsample_bicubic2dZcubicstrintnamert   Zinterpolate_modec                 C  s   t | ||S N)r   Z_interpolate_helperr   r_   r_   r`   _interpolateR  s    r   zaten::__interpolatec              	   C  s   t | ||||||S r   )r   Z__interpolate_helper)rL   rn   r=   Zscale_factormodeZalign_cornersZrecompute_scale_factorZ	antialiasr_   r_   r`   __interpolater  s    r   zaten::gatherc                 C  s*   t |drt ddS | jd|||dS )Nro   r!   zsparse_grad == TrueZGatherElementsrq   )r   _maybe_get_constr   rZ   )rL   rM   rt   r&   Zsparse_gradr_   r_   r`   r!     s    r!   zaten::scatterc              	   C  s   t j|}t|}t|r4| jd||||dS t j||kr`| jd|t j| d}| jd||t	| |||dS d S )NZScatterElementsrq   rb   rc   )
r   rW   rX   r   _maybe_get_scalar	_is_valuerZ   re   rl   	expand_as)rL   rM   rt   r&   srcZsrc_typer_   r_   r`   r;     s    

r;   zaten::cumsumnonec                 C  sn   | j dtj|tjdd}|rX|  dkrXt|dd}| j d|t	|
 d}n|}|  d	||}|S )
NrP   rQ   rS   zprim::Constantro   rR   rb   rc   ZCumSum)rZ   r[   r\   r   nodekindr   
_get_constr   rW   re   )rL   rM   rt   rR   Z
dim_tensorZparsed_dtypecastZcsumr_   r_   r`   r     s    r   zaten::masked_selectc                 C  s$   t | t | ||}| d||S )NGatherND)rl   nonzeror   rZ   )rL   rM   maskr&   r_   r_   r`   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 )Nrx   r   r   r   )
rl   r   r   r   r   r[   
LongTensorr   r=   rZ   )rL   rM   r   sourcer&   r_   r_   r`   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::SplitToSequenceZSequenceLengthrP   r   rS   )	r   _is_tensor_listr   r   rZ   r=   r[   r   _squeeze_helper)rL   rM   Zsz_0r_   r_   r`   _len  s    r   zaten::__getitem_c                 C  s4   t |r| d||S ddlm} || ||S d S )N
SequenceAtr   )
__getitem_)r   r   rZ   Ztorch.onnx.symbolic_opset9r   )rL   rM   ro   getitemr_   r_   r`   r     s    
r   zaten::_set_itemc                 C  s   |  d||}|  d|||S )NSequenceEraseSequenceInsertrs   )rL   tensor_listro   rI   r_   r_   r`   	_set_item  s    r   zaten::appendc                 C  s   |  d||S Nr   rs   )rL   rM   r\   r_   r_   r`   r     s    r   z	aten::addc                 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   r   r   rZ   rl   r   )rL   rM   otheralphaZtensor_list_nodeZtensorsltr_   r_   r`   r     s    
r   zaten::insertc                 C  s   |  d|||S r   rs   )rL   rM   posr\   r_   r_   r`   r)     s    r)   z	aten::popc                 C  s   |  d||S Nr   rs   rL   r   rt   r_   r_   r`   r4     s    r4   zaten::Deletec                 C  s   |  d||S r   rs   r   r_   r_   r`   r     s    r   z	aten::catc                 C  s:   t |rt| ||S t |dd}| jd||dS d S )Nro   rt   ConcatFromSequencerq   )r   r   rl   r   r   rZ   r   r_   r_   r`   r     s    
r   zaten::stackc                 C  s<   t |rt| ||S t |dd}| jd||ddS d S )Nro   rt   r   rv   rr   Z
new_axis_i)r   r   rl   rB   r   rZ   r   r_   r_   r`   rB     s    
rB   zaten::_unique2c           	      C  s$   | j d||dd\}}}}|||fS )NUniquer   )sorted_ioutputsrs   )	rL   rM   sortedreturn_inversereturn_countsu_indicesinverse_indicescountsr_   r_   r`   _unique2  s    r   zaten::unique_dimc           
      C  s&   | j d|||dd\}}}}	|||	fS )Nr   r   )rr   r   r   rs   )
rL   rM   rt   r   r   r   r   r   r   r   r_   r_   r`   rE   #  s    
rE   z
aten::topkc              	   C  s   t j| ||||||dS )N)largestr   out)r   Z_topk_helper)rL   rM   krt   r   r   r   r_   r_   r`   rC   .  s    rC   z
aten::sortc                 C  s   t j| ||||dS N)	decendingr   r   Z_sort_helper)rL   rM   rt   r   r   r_   r_   r`   r>   6  s    r>   zaten::argsortc                 C  s   t j| ||||d\}}|S r   r   )rL   rM   rt   r   r   _indicesr_   r_   r`   r   <  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   ZRoundMulrP   
   rS   rx   )r   _is_fprZ   r[   r\   pow)rL   rM   Zdecimalsmulr:   r_   r_   r`   r:   E  s    
$ r:   zaten::remainderc                 C  s4   t |st |r"t| ||S | jd||ddS )NModr   )Zfmod_i)r   r   rl   r8   rZ   )rL   rn   r   r_   r_   r`   r8   S  s    r8   zaten::splitc              
     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SplitToSequencerq   c                   s   g | ]}t  |d gqS )r   )r   ry   )r{   rI   ra   r_   r`   r~   f  s   zsplit.<locals>.<listcomp>rP   r   rQ   rS   AddSlicec                   s2   g | ]*}  d  j dtj|gtjddqS )r   rP   rQ   rS   )rZ   r[   r\   long)r{   ro   rL   Z	split_outr_   r`   r~   t  s   )r   Z_is_split_staticrZ   r   r   r   r[   r\   r   r   r   rl   r@   )rL   rM   Zsplit_size_or_sizesrt   _outputssplit_sizesstartaxisresro   endr_   r   r`   r@   Z  s2    

	r@   zaten::split_with_sizesc                 C  s   t | ||||S r   )r@   )rL   rM   r   rt   r   r_   r_   r`   r?     s    r?   zaten::unbindc              	   C  sF   |d u r2| j d|| j dtjdtjdd|ddS t| |||S d S )Nr   rP   rv   rQ   rS   r   )rr   
keepdims_i)rZ   r[   r\   r   rl   rD   )rL   rM   rt   r   r_   r_   r`   rD     s    rD   c                 C  sz  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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   rv   r   rP   rS   NSizerw   rQ   Subr      rb   rc   r   r   rq   rx   	TransposeZperm_i)r   r   Z_is_listZ_is_scalar_listrZ   rl   r=   r[   r\   rh   int64_C_onnxTensorProtoDataTypeZINT64r   opset10Zflip)rL   rn   r2   Zpad_lenr   	extensionpaddingsZ	padding_cr_   r_   r`   _prepare_onnx_paddings  sF    
 
" r   zaten::constant_pad_ndc                 C  s:   d}t |}t ||}t| ||}| jd||||dS )NconstantPadr   )r   r   _if_scalar_type_asr   rZ   )rL   rn   paddingvaluer   r2   r_   r_   r`   r     s
    
r   zaten::reflection_pad1dzaten::reflection_pad2dzaten::reflection_pad3dc                 C  s"   d}t | ||}| jd|||dS )Nreflectr   r   r   rZ   rL   rn   r   r   r   r_   r_   r`   r6     s    r6   zaten::replication_pad1dzaten::replication_pad2dzaten::replication_pad3dc                 C  s"   d}t | ||}| jd|||dS )NZedger   r   r   r   r_   r_   r`   r9     s    r9   z	aten::padrL   rn   r2   r   r   c                 C  sv   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sZ	replicater   r   ZcircularzUnrecognized padding mode )	r   r   r9   r6   r   rl   Z_pad_circularr   r   r   r_   r_   r`   r2     s    r2   zaten::linalg_detc                 C  s   |  d|S )NZDetrs   rL   rM   r_   r_   r`   r*     s    r*   zaten::logdetc                 C  s   t | t| |S r   )rl   logr*   )rL   rn   r_   r_   r`   r,     s    r,   aten::arangec                 G  s   dd }t |dkrtdd |D rt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st |dkr(t |dkrd }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sDt |dkrt |dkrXd }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 d S )Nc                 S  s   t | d} | S )Nro   )r   r   rQ   r_   r_   r`   _get_arange_dtype
  s    z!arange.<locals>._get_arange_dtyper   c                 s  s   | ]}t |tV  qd S r   )
isinstancer   )r{   valr_   r_   r`   	<genexpr>      zarange.<locals>.<genexpr>rP   r   rQ   rS   rv   Ranger   )r   rR   r      r   )r   r   steprR   rm   )r   r   rR   r  zwith z
 arguments)
r   allr[   r   rZ   r\   r   Z_arange_cast_helperrR   r   )rL   argsr  rR   r   r   Zdelta_defaulttype_r
  Zstart_defaultr   r_   r_   r`   r     sj    
r   zaten::_dim_arangec                 C  s@   |  d|}| j d|| j dt|ddd}t| |dd d d S )Nrw   rp   rP   rS   r   rq   r   )rZ   r[   r\   r   )rL   likert   Z
like_shapestopr_   r_   r`   _dim_arangeP  s
    r  z
aten::size)Zquantize_outputc                 C  s"   |d u r|  d|S t| ||S )Nrw   )rZ   r   _size_helperrL   rM   rt   r_   r_   r`   r=   Z  s    r=   zaten::squeezec                 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 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rltdt| d d t| d d d  |S t| ||gS )NZSqueezero   rt   r   rP   rS   rv   rQ   EqualIfr   )n_blocksZ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.)rZ   r   _is_constantr   r   rh   Z_get_tensor_dim_sizer[   r\   r  Zonesr   r   add_op_with_blocksr   _add_output_to_blockblockwarningswarnr   )rL   rM   rt   Z
input_rankZadjusted_dimdim_sizeZdim_constantr=   	const_oneZcondZif_opZ
if_contextZelse_contextr   Zsqueeze_Z	identity_r_   r_   r`   rA   b  sX    



rA   zaten::unsqueezec                 C  s(   t |rt |dd}t | ||gS )Nro   rt   )r   r  r   ry   r  r_   r_   r`   rF     s    
rF   zaten::mmc                 C  s   | j d||dddS )NZGemmg        g      ?)Zbeta_fZalpha_frs   )rL   rM   r   r_   r_   r`   r/     s    r/   zaten::indexc                 C  s   t |rt |}n|g}t|dkrr|d }t |srt |sXtj|tjj	krrt
| |}| d||S t
| ||S )Nrv   r   r   )r   r   r   r   rd   r   r   rW   rX   UINT8rl   r   rZ   r&   )rL   rM   r&   r   r_   r_   r`   r&     s    


r&   zaten::index_fillc                 C  sJ   t | |||\}}t |}t ||}t| ||d }t| ||||S r   )r   _index_fill_reshape_helperr   r   rl   rz   r;   )rL   rM   rt   r&   r   Zexpanded_index_shapeexpanded_indexZexpanded_valuer_   r_   r`   r%     s    
r%   zaten::index_copyc                 C  s$   t | |||\}}t| ||||S r   )r   r  r;   )rL   rM   rt   r&   r   Z_expanded_index_shaper   r_   r_   r`   r'     s    r'   zaten::bitwise_right_shiftzaten::__rshift_c                 C  s   t j|t jjt j|kr:| jd|t j| d}t j|t jjt jjkrf| jd||ddS | jdtjdtj	dd	}t
|s| jd|tjjd}| d
||}| jd|t j| d}| d||}|S )Nrb   rc   BitShiftRIGHTZdirection_srP   r   rQ   rS   PowDivr   rW   rX   rg   rZ   re   r  r[   r\   float32r   r   r   r   rY   )rL   rM   r   twotwo_powrshiftr_   r_   r`   	__rshift_  s4    

r+  zaten::bitwise_left_shiftzaten::__lshift_c                 C  s   t j|t jjt j|kr:| jd|t j| d}t j|t jjt jjkrf| jd||ddS | jdtjdtj	dd	}t
|s| jd|tjjd}| d
||}| jd|t j| d}| d||}|S )Nrb   rc   r!  LEFTr#  rP   r   rQ   rS   r$  r   r&  )rL   rM   r   r(  r)  lshiftr_   r_   r`   	__lshift_  s4    

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   rP   r   rS   r   rv   r  r   rx   )rZ   r[   r\   r   rF   r   ry   r   )rL   Zinput_dZkernel_size_dZ
dilation_dZ	padding_dZstride_dZblocks_dZblocks_d_indicesZkernel_gridZkernel_maskZ
block_maskr_   r_   r`   _get_im2col_indices_along_dim  s0    	r/  c                 C  s.   | j dtdd||gd d}|  d||S )NrP   r   r   rS   r   )rZ   r[   r   )rL   rn   	padding_h	padding_wr2   r_   r_   r`   _get_im2col_padded_input8  s     r2  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 )	NrP   r   rS   rv   r   r   rx   rq   )r=   rZ   r[   r\   r   ry   )rL   rn   kernel_hkernel_wZ	batch_dimZchannel_dimZchannel_unfoldedr_   r_   r`   _get_im2col_output_shape@  s    r5  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 )NrP   r   rS   r   r   rv   rp   rq   r   r   )r   rv   r   r   r   r   r   )	r=   rZ   r[   r\   r/  r5  r2  r   r   )rL   rn   Zkernel_sizeZdilationr   ZstrideZinput_hZinput_wZstride_hZstride_wr0  r1  Z
dilation_hZ
dilation_wr3  r4  Zblocks_row_indicesZblocks_col_indicesZoutput_shapeZpadded_inputoutputr_   r_   r`   r$   P  s$    r$   zaten::narrowc                 C  s"   |  d||}tj| ||||dS )Nr   r   )rZ   r   r   )rL   rn   rt   r   lengthr   r_   r_   r`   r0     s    r0   zaten::flattenc                 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 )
Nrv   rx   ZFlattenrq   r   r   rt   zfONNX and PyTorch use different strategies to split the input. Input rank must be known at export time.)r   rh   rZ   r   Z_flatten_helper)rL   rn   Z	start_dimZend_dimrt   r_   r_   r`   r      s"    
r    zaten::linalg_vector_normru   zSequence[int] | Nonebool)rL   rt   keepdimc                 C  s   t | |||||S r   )r   Z_linalg_vector_norm_helper)rL   rM   ordrt   r;  rR   r_   r_   r`   r+     s    
r+   zaten::embedding_bagc
           
      C  s   t | |||||||||	
S r   )r   Z_embedding_bag_helper)
rL   Zembedding_matrixr   offsetsZscale_grad_by_freqr   sparseZper_sample_weightsZinclude_last_offsetZpadding_idxr_   r_   r`   r     s    r   zaten::embedding_renormc              	   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   rp   rv   ZReduceL1r   ZReduceL2z8Unsupported: ONNX export of embedding_renorm with norm: z. Only 1. and 2. are supported.)axes_ir   r   rP   gHz>rS   r%  r   ZWhereZGreaterr   )rZ   r   r   r   r[   r\   r   ry   )rL   Zweightr   Zmax_normZ	norm_typeZunique_indicesZpartial_weightZnorm_iZpartial_weight_normZpartial_weight_norm_ZscalesZpartial_weight_renormr_   r_   r`   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 )Nrp   rw   r   rq   r   rP   rv   rQ   rS   r%  r   r   r   rr   )rZ   r[   r\   r   rl   rz   r@   )rL   rM   chunksrt   r  Zchunk_size_s
chunk_sizeZ	chunk_vecr_   r_   r`   r     s    r   zaten::normalc	           
      C  sD   |d ur"t |s"t| ||d }t| || d|}	t| |	|S )NZRandomNormalLike)r   rd   rl   rz   r   rZ   r   )
rL   meanZstdsizes	generatorrR   ZlayoutZdeviceZ
pin_memoryr   r_   r_   r`   r1     s    r1   zaten::atleast_1dztorch._C.Valuer   c              
   C  s   t |r~t |r~t |}g }|D ]D}|}t |}|dkr`t | || jdtdgd}|	| q&| jdg|R  S t |}|dkrt | || jdtdgd}|S )Nr   rP   rv   rS   SequenceConstruct)
r   r   r   r   rh   r   rZ   r[   r\   r   rL   rM   r   Znew_tensor_listr\   Z
new_tensorZtensor_rankr_   r_   r`   r     s$    


r   zaten::atleast_2dc                 C  s   t |rt |rt |}g }|D ]b}|}t |}|dkrdt | || 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rt | || jdtddgd}n|dkrt j	| |dgd}|S )Nr   rP   rv   rS   r?  rE  r   r   r   r   rh   r   rZ   r[   r\   ry   r   rF  r_   r_   r`   r   8  s0    


r   zaten::atleast_3dc                 C  sR  t |rt |rt |}g }|D ]}|}t |}|dkrdt | || jdtg dd}nH|dkrt j	| |dgd}t j	| |dgd}n|dkrt j	| |dgd}|
| q&| jd	g|R  S t |}|dkrt | || jdtg dd}nL|dkr2t j	| |dgd}t j	| |dgd}n|dkrNt j	| |dgd}|S )
Nr   rP   )rv   rv   rv   rS   rv   rG  rx   r   rE  rH  rF  r_   r_   r`   r   Y  sD    





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 ]N}| j dtj|d gtjdd}|  d||}||  d|||| |}q|S )Nrw   rP   rQ   rS   rp   r   rq   rv   r   r%  r   r   )rZ   r[   r\   r   r   r   )rL   rM   r@  rt   Zinput_shaper   Zinput_shape_dimr   rA  Zchunk_size_minus_1Zinput_shape_dim_shiftZ	chunk_dimr   ro   r&   r   r_   r_   r`   r5     s"     r5   zaten::hstackrL   r   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   rP   r   rQ   rS   rw   r   rv   r  r  r   )r  r   r   r   )r   rZ   r[   r\   r   r   r  r   r  r  r   r7  )rL   r   Zfirst_tensorZfirst_tensor_shapeZfirst_tensor_dimr  Zequal_to_oneZif_op_greaterZif_context_equalZelse_context_equalr   Z	result_ifZresult_elser   r_   r_   r`   r#     s2    
r#   zaten::vstackc                 C  s   t | |}| jd|dddS )Nr   r   r   )r   rZ   rI  r_   r_   r`   rG     s    
rG   )F)F)N)N)N)N)N)r   )N)N)r   N)N)N)N)NNNNNN)h__doc__
__future__r   	functoolsr   r  typingr   r[   r   Ztorch._Cr   r   Z
torch.onnxr   r   r   r	   r   r
   rl   r   Ztorch.onnx._internalr   r   collections.abcr   __all__partialZonnx_symbolicZ_onnx_symbolicZquantized_args
parse_argsr"   r   r   r   r7   r<   r(   r3   Z_apply_paramsr   r   r!   r;   r   r.   r-   r   r   r   r   r   r)   r4   r   r   rB   r   rE   rC   r>   r   r:   r8   r@   r?   rD   r   r   r6   r9   r2   r*   r,   r   r  r=   rA   rF   r/   r&   r%   r'   r+  r.  r/  r2  r5  r$   r0   r    r+   r   r   r   r1   r   r   r   r5   r#   rG   r_   r_   r_   r`   <module>   s   <"

{
 

	
$9G
2
  +3%      +