o
    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rJd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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/d0Z(ed1e)d2d3d4gd5ed6e)d7d8d4gd5ed9e)d:d;d4gd5ed<e)d=d3d>gd5ed?e)d@d8d>gd5edAe)dBd;d>gd5edCe)dDd8dEgd5ddKdLZ*edMedd+d+d+d+d+d+ddNdOZ+edPe dd'dddddQdRZ,edSe dd'ddddTdUZ-edVe dd'dWdddXdYZ.edZdd[d\Z/ed]dd^d_Z0ed`ddadbZ1edcddddeZ2edfddgdhZ3ediddjdkZ4edldddmdnZ5edoddpdqZ6edrddsdtZ7eduddvdwZ8edxedddydzZ9ed{dd|d}Z:ed~e dd'd'd'dddZ;ede dd'd'd'd'dddZ<ede ddd'd'd'dWddddZ=ede dd'd'dWddddZ>ede dd'd'dWddddZ?ede dd'ddddZ@eddddZAede ddd'd'ddddZBede ddd'd'ddddZCede dd'd'ddddZDdddZEedddddZFedededdddZGedededdddZHeddddZIeddddZJeddddZKeddddZLede dd'dddZMedejdd+dddddZNedddddÄZOedădddƄZPedǃdddɄZQedʃddd̄ZRed̓dddτZSedЃddd҄ZTedӃedԃdddքZUed׃ed؃dddڄZVddd܄ZWdddބZXdddZYede ddddddddZZeddddZ[ededd+d+e dd'd'dddZ\e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Zaeddd dZbeddddZceddddZdeddd	d
ZeeddddZfe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   )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tensorrU   r   _op_with_optional_float_cast)rL   rN   rP   rR   scalar_type rd   o/var/www/html/construction_image-detection-poc/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)ra   rU   rL   rd   re   _cast_if_not_nonev   s   z clamp.<locals>._cast_if_not_noner   rX   rY   rZ   )
r   r\   r]   	UNDEFINEDr   ri   r   r   _get_tensor_rankrb   )rL   rN   minmaxrl   rc   rd   rk   re   r   t   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 )Nrf   rg   r   rX   rY   rZ   Max
r_   r   r\   r]   rj   r   rn   opset9unusedrb   )rL   rN   ro   rp   rd   rd   re   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 )Nrf   rg   r   rX   rY   rZ   Minrr   )rL   rN   rp   ro   rd   rd   re   r      ru   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 )NrS   r   rT   rV      )	r   r\   r]   r^   r_   r`   ra   rU   r   )rL   inputrc   rP   rR   rd   rd   re   r7      s   r7   zaten::selectic                 C  s   | j d|||dS )NGatheraxis_ir_   )rL   rN   dimr&   rd   rd   re   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_helperrs   expand).0indbroadcast_index_shaperL   rd   re   
<listcomp>   s    zindex_put.<locals>.<listcomp>Concatr|   r   axesstartsendsr{   rf   rg   z'self does not have a valid scalar type.ConstantOfShaperT   rV   	ScatterND)r   _is_packed_list_unpack_list
_parse_arglenrange_is_boolr_   rs   r   rn   masked_fillr   listr-   _slice_helpersysmaxsizer   _reshape_helperr   r\   r]   rm   rj   r   SymbolicValueErrorr`   ra   rU   )rL   rN   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resultrd   r   re   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 inputDepthToSpaceCRD)blocksize_imode_s)r   rn   _unimplementedr_   )rL   rN   upscale_factorr   rd   rd   re   r3   I  s   
r3   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   rd   rd   re   _interpolateR  s   r   zaten::__interpolatec              	   C  s   t | ||||||S r   )r   __interpolate_helper)rL   rx   r=   scale_factormodealign_cornersrecompute_scale_factor	antialiasrd   rd   re   __interpolater  s   r   zaten::gatherc                 C  s*   t |drt ddS | jd|||dS )Nry   r!   zsparse_grad == TrueGatherElementsr{   )r   _maybe_get_constr   r_   )rL   rN   r~   r&   sparse_gradrd   rd   re   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ScatterElementsr{   rf   rg   )
r   r\   r]   r   _maybe_get_scalar	_is_valuer_   rj   rs   	expand_as)rL   rN   r~   r&   srcsrc_typerd   rd   re   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 )
NrS   rT   rV   zprim::Constantry   rU   rf   rg   CumSum)r_   r`   ra   r   nodekindr   
_get_constr   r\   rj   )rL   rN   r~   rU   
dim_tensorparsed_dtypecastcsumrd   rd   re   r     s   r   zaten::masked_selectc                 C  s$   t | t | ||}| d||S )NGatherND)rs   nonzeror   r_   )rL   rN   maskr&   rd   rd   re   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   )
rs   r   r   r   r   r`   
LongTensorr   r=   r_   )rL   rN   r   sourcer&   rd   rd   re   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SequenceLengthrS   r   rV   )	r   _is_tensor_listr   r   r_   r=   r`   r   _squeeze_helper)rL   rN   sz_0rd   rd   re   _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   )rL   rN   ry   getitemrd   rd   re   r     s   
r   zaten::_set_itemc                 C  s   |  d||}|  d|||S )NSequenceEraseSequenceInsertr}   )rL   tensor_listry   rJ   rd   rd   re   	_set_item  s   r   zaten::appendc                 C     |  d||S Nr   r}   )rL   rN   ra   rd   rd   re   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_   rs   r   )rL   rN   otheralphatensor_list_nodetensorsltrd   rd   re   r     s   
r   zaten::insertc                 C  s   |  d|||S r   r}   )rL   rN   posra   rd   rd   re   r)     s   r)   z	aten::popc                 C  r   Nr   r}   rL   r   r~   rd   rd   re   r4     r   r4   zaten::Deletec                 C  r   r   r}   r   rd   rd   re   r     r   r   z	aten::catc                 C  s6   t |rt| ||S t |dd}| jd||dS )Nry   r~   ConcatFromSequencer{   )r   r   rs   r   r   r_   r   rd   rd   re   r     s   
r   zaten::stackc                 C  s8   t |rt| ||S t |dd}| jd||ddS )Nry   r~   r   r   r|   
new_axis_i)r   r   rs   rB   r   r_   r   rd   rd   re   rB     s   
rB   zaten::_unique2c           	      C  s$   | j d||dd\}}}}|||fS )NUniquer   )sorted_ioutputsr}   )	rL   rN   sortedreturn_inversereturn_countsu_indicesinverse_indicescountsrd   rd   re   _unique2  s   
r  zaten::unique_dimc           
      C  s&   | j d|||dd\}}}}	|||	fS )Nr  r   )r|   r  r  r}   )
rL   rN   r~   r  r  r  r	  r
  r  r  rd   rd   re   rE   #  s   

rE   z
aten::topkc              	   C  s   t j| ||||||dS )N)largestr  out)r   _topk_helper)rL   rN   kr~   r  r  r  rd   rd   re   rC   .  s   rC   z
aten::sortc                 C  s   t j| ||||dS N)	decendingr  r   _sort_helper)rL   rN   r~   r  r  rd   rd   re   r>   6  s   r>   zaten::argsortc                 C  s   t j| ||||d\}}|S r  r  )rL   rN   r~   r  r  _indicesrd   rd   re   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   RoundMulrS   
   rV   r   )r   _is_fpr_   r`   ra   pow)rL   rN   decimalsmulr:   rd   rd   re   r:   E  s   
$ r:   zaten::remainderc                 C  s4   t |s
t |rt| ||S | jd||ddS )NModr   )fmod_i)r   r  rs   r8   r_   )rL   rx   r   rd   rd   re   r8   S  s   r8   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SplitToSequencer{   c                   s   g | ]
}t  |d gqS r   )r   r   )r   rJ   rk   rd   re   r   f  s    zsplit.<locals>.<listcomp>rS   r   rT   rV   AddSlicec                   s2   g | ]}  d  j dtj|gtjddqS )r   rS   rT   rV   )r_   r`   ra   long)r   ry   rL   	split_outrd   re   r   t  s    )r   _is_split_staticr_   r   r   r   r`   ra   r%  r   r   rs   r@   )rL   rN   split_size_or_sizesr~   _outputssplit_sizesstartaxisresry   endrd   r&  re   r@   Z  s0   

	r@   zaten::split_with_sizesc                 C  s   t | ||||S r   )r@   )rL   rN   r+  r~   r*  rd   rd   re   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!  rS   r   rT   rV   r   )r|   
keepdims_i)r_   r`   ra   r%  rs   rD   )rL   rN   r~   r*  rd   rd   re   rD     s   rD   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  rS   rV   NSizer   rT   Subr     rf   rg   r   r   r{   r   	Transposeperm_i)r   r   _is_list_is_scalar_listr_   rs   r=   r`   ra   rn   int64_C_onnxTensorProtoDataTypeINT64r   opset10flip)rL   rx   r2   pad_lenr   	extensionpaddings	padding_crd   rd   re   _prepare_onnx_paddings  sF   
 
" rC  zaten::constant_pad_ndc                 C  s:   d}t |}t ||}t| ||}| jd||||dS )NconstantPadr   )r   r   _if_scalar_type_asrC  r_   )rL   rx   paddingvaluer   r2   rd   rd   re   r     s
   
r   zaten::reflection_pad1dzaten::reflection_pad2dzaten::reflection_pad3dc                 C  "   d}t | ||}| jd|||dS )NreflectrE  rF  rC  r_   rL   rx   rH  r   rA  rd   rd   re   r6        r6   zaten::replication_pad1dzaten::replication_pad2dzaten::replication_pad3dc                 C  rJ  )NedgerE  rF  rL  rM  rd   rd   re   r9     rN  r9   z	aten::padrx   r2   r   rI  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	replicaterK  rD  circularzUnrecognized padding mode )	r   r   r9   r6   r   rs   _pad_circularr   r   )rL   rx   r2   r   rI  rd   rd   re   r2     s   zaten::linalg_detc                 C  s   |  d|S )NDetr}   )rL   rN   rd   rd   re   r*     s   r*   zaten::logdetc                 C  s   t | t| |S r   )rs   logr*   )rL   rx   rd   rd   re   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 )Nry   )r   r   rT   rd   rd   re   _get_arange_dtype
  s   z!arange.<locals>._get_arange_dtyper3  c                 s  s    | ]}t |tV  qd S r   )
isinstancer   )r   valrd   rd   re   	<genexpr>  s    zarange.<locals>.<genexpr>rS   r   rT   rV   r   Ranger   )r/  rU   r      r   )r,  r/  steprU   rw   )r,  r/  rU   rV  zwith z
 arguments)
r   allr`   r9  r_   ra   r   _arange_cast_helperrU   r   )rL   argsrW  rU   r,  r/  delta_defaulttype_r]  start_defaultr  rd   rd   re   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   rz   rS   rV   r   r{   r   )r_   r`   ra   r   )rL   liker~   
like_shapestoprd   rd   re   _dim_arangeP  s
   rg  z
aten::size)quantize_outputc                 C  s"   |d u r
|  d|S t| ||S )Nr   )r_   r   _size_helperrL   rN   r~   rd   rd   re   r=   Z  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Squeezery   r~   r   rS   rV   r   rT   EqualIfr3  )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   rn   _get_tensor_dim_sizer`   ra   ri  onesr9  r   add_op_with_blocksr   _add_output_to_blockblockwarningswarnr   )rL   rN   r~   
input_rankadjusted_dimdim_sizedim_constantr=   	const_onecondif_op
if_contextelse_contextr  squeeze_	identity_rd   rd   re   rA   b  sX   


rA   zaten::unsqueezec                 C  s(   t |rt |dd}t | ||gS )Nry   r~   )r   rp  r   r   rj  rd   rd   re   rF     s   
rF   zaten::mmc                 C  s   | j d||dddS )NGemmg        g      ?)beta_falpha_fr}   )rL   rN   r   rd   rd   re   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   ri   r   r   r\   r]   UINT8rs   r   r_   r&   )rL   rN   r&   r  rd   rd   re   r&     s   


r&   zaten::index_fillc                 C  sJ   t | |||\}}t |}t ||}t| ||d }t| ||||S r   )r   _index_fill_reshape_helperr   rG  rs   r   r;   )rL   rN   r~   r&   rI  expanded_index_shapeexpanded_indexexpanded_valuerd   rd   re   r%     s   
r%   zaten::index_copyc                 C  s$   t | |||\}}t| ||||S r   )r   r  r;   )rL   rN   r~   r&   r   _expanded_index_shaper  rd   rd   re   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 )Nrf   rg   BitShiftRIGHTdirection_srS   r3  rT   rV   PowDivr   r\   r]   rm   r_   rj   r  r`   ra   float32r   r  r:  r;  r^   )rL   rN   r   twotwo_powrshiftrd   rd   re   	__rshift_  2   

r  zaten::bitwise_left_shiftzaten::__lshift_c                 C  r  )Nrf   rg   r  LEFTr  rS   r3  rT   rV   r  r  r  )rL   rN   r   r  r  lshiftrd   rd   re   	__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#  rS   r3  rV   r2  r   r[  r   r   )r_   r`   ra   r   rF   r   r   r   )rL   input_dkernel_size_d
dilation_d	padding_dstride_dblocks_dblocks_d_indiceskernel_gridkernel_mask
block_maskrd   rd   re   _get_im2col_indices_along_dim  s0   	r  c                 C  s.   | j dtdd||gd d}|  d||S )NrS   r   r3  rV   rE  )r_   r`   r   )rL   rx   	padding_h	padding_wr2   rd   rd   re   _get_im2col_padded_input8  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 )	NrS   r   rV   r   r  r   r   r{   )r=   r_   r`   ra   r   r   )rL   rx   kernel_hkernel_w	batch_dimchannel_dimchannel_unfoldedrd   rd   re   _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 )NrS   r3  rV   r   r   r   rz   r{   r   r4  )r   r   r3  r   r   r   r5  )	r=   r_   r`   ra   r  r  r  r   r   )rL   rx   kernel_sizedilationrH  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outputrd   rd   re   r$   P  s$   r$   zaten::narrowc                 C  s"   |  d||}tj| ||||dS )Nr#  r   )r_   r   r   )rL   rx   r~   r,  lengthr/  rd   rd   re   r0     s   r0   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   Flattenr{   r   r3  r~   zfONNX and PyTorch use different strategies to split the input. Input rank must be known at export time.)r   rn   r_   r   _flatten_helper)rL   rx   	start_dimend_dimr~   rd   rd   re   r      s$   
r    zaten::linalg_vector_normr   Sequence[int] | Nonekeepdimboolc                 C  s   t | |||||S r   )r   _linalg_vector_norm_helper)rL   rN   ordr~   r  rU   rd   rd   re   r+     s   
r+   zaten::embedding_bagc
           
      C  s   t | |||||||||	
S r   )r   _embedding_bag_helper)
rL   embedding_matrixr  offsetsscale_grad_by_freqr   sparseper_sample_weightsinclude_last_offsetpadding_idxrd   rd   re   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  rz   r   ReduceL1r3  ReduceL2z8Unsupported: ONNX export of embedding_renorm with norm: z. Only 1. and 2. are supported.)axes_ir0  r#  rS   gHz>rV   r  r  WhereGreaterr   )r_   r   r   r   r`   ra   r   r   )rL   weightr  max_norm	norm_typeunique_indicespartial_weightnorm_ipartial_weight_normpartial_weight_norm_scalespartial_weight_renormrd   rd   re   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 )Nrz   r   r   r{   r2  rS   r   rT   rV   r  r#  r  r   r|   )r_   r`   ra   r%  rs   r   r@   )rL   rN   chunksr~   rz  chunk_size_s
chunk_size	chunk_vecrd   rd   re   r     s   r   zaten::normalc	           
      C  sD   |d urt |st| ||d }t| || d|}	t| |	|S )NRandomNormalLike)r   ri   rs   r   r  r_   r   )
rL   meanstdsizes	generatorrU   layoutdevice
pin_memoryr   rd   rd   re   r1     s   r1   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   rS   r   rV   SequenceConstruct)
r   r   r   r   rn   r   r_   r`   ra   r   rL   rN   r   new_tensor_listra   
new_tensortensor_rankrd   rd   re   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   rS   r   rV   r  r  r   r   r   r   rn   r   r_   r`   ra   r   r   r  rd   rd   re   r   8  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   rS   )r   r   r   rV   r   r  r   r3  r  r  r  rd   rd   re   r   Y  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   rS   rT   rV   rz   r   r{   r   r#  r  r  r$  )r_   r`   ra   r%  r   r   )rL   rN   r  r~   input_shaper-  input_shape_dimr,  r  chunk_size_minus_1input_shape_dim_shift	chunk_dimr.  ry   r&   r/  rd   rd   re   r5     s"    r5   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   rS   r   rT   rV   r   r1  r   rl  rm  r3  )rn  r  r   r  )r   r_   r`   ra   r%  r   rs  r   rt  ru  r   r  )rL   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   rd   rd   re   r#     s2   
r#   zaten::vstackc                 C  s   t | |}| jd|dddS )Nr   r   r  )r   r_   )rL   r   rd   rd   re   rG     s   
rG   )rL   rM   rN   rO   rP   rQ   rR   rQ   )rL   rM   )F)r   r   r~   r   r   r   r   r"  )r   N)
rL   rM   rx   rO   r2   rO   r   rO   rI  rO   )rL   rM   r~   r  r  r  )NNNNNN)rL   rM   rN   r  )rL   rM   r   rO   )h__doc__
__future__r   	functoolsr   rv  typingr   r`   r   torch._Cr   r:  
torch.onnxr   r   r   r	   r=  r
   rs   r   torch.onnx._internalr   r   collections.abcr   __all__partialonnx_symbolic_onnx_symbolicquantized_args
parse_argsr"   r   r   r   r7   r<   r(   r3   _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   rC  r   r6   r9   r2   r*   r,   r   rg  r=   rA   rF   r/   r&   r%   r'   r  r  r  r  r  r$   r0   r    r+   r   r   r   r1   r   r   r   r5   r#   rG   rd   rd   rd   re   <module>   s   <"

{


	
$9G
2
  +3% +