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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mZ g d	¢Zejejd
dZedƒe d¡e  ddd¡ej!ddd„ƒƒƒƒZ"edƒej!ddd„ƒƒZ#edƒe  dd¡ej!ddd„ƒƒƒZ$edƒe  dd¡ej!dd d!„ƒƒƒZ%ed"ƒej!dd#d$„ƒƒZ&ed%ƒe d¡e  dd&d¡ej!dd'd(„ƒƒƒƒZ'ed)ƒej!	*ddd+d,„ƒƒZ(ed-ƒe  dd&¡ej!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ej!ddJdK„ƒƒƒƒƒƒƒƒZ+edLƒe dd*d*d*d*d*d*¡ej!ddMdN„ƒƒƒZ,edOƒe  dd&dd¡ej!dddPdQ„ƒƒƒZ-edRƒe  dd&dd¡ej!ddSdT„ƒƒƒZ.edUƒe  dd&dV¡ej!dddWdX„ƒƒƒZ/edYƒej!ddZd[„ƒƒZ0ed\ƒej!dd]d^„ƒƒZ1ed_ƒej!dd`da„ƒƒZ2edbƒej!ddcdd„ƒƒZ3edeƒej!ddfdg„ƒƒZ4edhƒej!ddidj„ƒƒZ5edkƒej!dddldm„ƒƒZ6ednƒej!ddodp„ƒƒZ7edqƒej!ddrds„ƒƒZ8edtƒej!ddudv„ƒƒZ9edwƒe d¡ej!ddxdy„ƒƒƒZ:edzƒej!dd{d|„ƒƒZ;ed}ƒe  dd&d&d&¡ej!dd~d„ƒƒƒZ<ed€ƒe  dd&d&d&d&¡ej!ddd‚„ƒƒƒZ=edƒƒe  ddd&d&d&dV¡ej!ddd„d…„ƒƒƒZ>ed†ƒe  dd&d&dV¡ej!ddd‡dˆ„ƒƒƒZ?ed‰ƒe  dd&d&dV¡ej!dddŠd‹„ƒƒƒZ@edŒƒe  dd&¡ej!ddddŽ„ƒƒƒZAedƒej!ddd‘„ƒƒZBed’ƒe  ddd&d&¡ej!ddd“d”„ƒƒƒZCed•ƒe  ddd&d&¡ej!ddd–d—„ƒƒƒZDed˜ƒe  dd&d&¡ej!ddd™dš„ƒƒƒZEej!dd›dœ„ƒZFedƒej!dddždŸ„ƒƒZGed ƒed¡ƒed¢ƒej!dd£d¤„ƒƒƒƒZHed¥ƒed¦ƒed§ƒej!dd¨d©„ƒƒƒƒZIedªƒej!dd¯d¬„ƒƒZJed°ƒej!dd±d²„ƒƒZKed³ƒej!dd´dµ„ƒƒZLed¶ƒej!dd·d¸„ƒƒZMed¹ƒe  dd&¡ej!ddºd»„ƒƒƒZNed¼ƒejdd*d½ej!ddd¾d¿„ƒƒƒZOedÀƒej!dddÁdÂ„ƒƒZPedÃƒej!ddÄdÅ„ƒƒZQedÆƒej!ddÇdÈ„ƒƒZRedÉƒej!ddÊdË„ƒƒZSedÌƒej!ddÍdÎ„ƒƒZTedÏƒej!ddÐdÑ„ƒƒZUedÒƒedÓƒej!ddÔdÕ„ƒƒƒZVedÖƒed×ƒej!ddØdÙ„ƒƒƒZWej!ddÚdÛ„ƒZXej!ddÜdÝ„ƒZYej!ddÞdß„ƒZZedàƒe  ddádádádá¡ej!ddâdã„ƒƒƒZ[edäƒej!ddådæ„ƒƒZ\edçƒe dd*d*¡e  dd&d&¡ej!ddèdé„ƒƒƒƒZ]edêƒe  dddádëd¡ej!ddïdð„ƒƒƒZ^edñƒe  dddd&d&d&dd&d&¡	ej!ddòdó„ƒƒƒZ_edôƒe  dddd¡ej!ddõdö„ƒƒƒZ`ed÷ƒej!ddødù„ƒƒZaedúƒej!						dddûdü„ƒƒZbedýƒej!ddÿd „ƒƒZcedƒej!ddd„ƒƒZdedƒej!ddd„ƒƒZeedƒej!ddd	„ƒƒZfed
ƒej!ddd„ƒƒZgedƒej!ddd„ƒƒZhdS (  z(This file exports ONNX ops for opset 11.é    )ÚannotationsN)ÚOptionalÚSequence)Ú_C)Ú_onnx)Ú_type_utilsÚerrorsÚsymbolic_helperÚsymbolic_opset10Úsymbolic_opset9Úutils)Ú	_beartypeÚ	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ÚtensorrV   r	   Ú_op_with_optional_float_cast)rM   rO   rQ   rS   Úscalar_type© re   úY/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/torch/onnx/symbolic_opset11.pyr#   Y   s   ÿþþÿr#   zaten::clampc                   s¶   t j‡ fdd„ƒ}tj |tjj¡}|tjjkr"|||ƒ}|||ƒ}t |¡r-tˆ ||ƒS t |¡r8t	ˆ ||ƒS t 
|¡dkrQt 
|¡dkrQt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)rb   rV   ©rM   re   rf   Ú_cast_if_not_noneq   s   ýz clamp.<locals>._cast_if_not_noner   rY   rZ   r[   )r   Úbeartyper   r]   r^   Ú	UNDEFINEDr	   rj   r   r   Ú_get_tensor_rankrc   )rM   rO   ÚminÚmaxrm   rd   re   rl   rf   r   n   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 )Nrg   rh   r   rY   rZ   r[   ÚMax©
r`   r   r]   r^   rk   r	   rp   Úopset9Úunusedrc   )rM   rO   rq   rr   re   re   rf   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 )Nrg   rh   r   rY   rZ   r[   ÚMinrt   )rM   rO   rr   rq   re   re   rf   r   £   rw   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 )NrT   r   rU   rW   é   )	r   r]   r^   r_   r`   ra   rb   rV   r   )rM   Úinputrd   rQ   rS   re   re   rf   r8   ³   s   ÿþþr8   zaten::selectÚic                 C  s   | j d|||dS )NÚGather©Úaxis_i©r`   )rM   rO   Údimr'   re   re   rf   r=   Ä   s   r=   zaten::index_putFc                   sð  t  |¡rt  |¡}n|g}t  ¡ r$|g| ||g }ˆjdg|¢R Ž S t  |d¡}t|ƒdkr2|S t|ƒdkrƒtt|ƒƒD ]}t  || ¡rQˆ 	d|| ¡||< q>|d }|dd … D ]	}	t
 ˆ||	¡}q\ˆ 	d|¡‰ ‡ ‡fdd„|D ƒ}ˆj	d	g|¢R d
diŽ}nW|d }|}
t  |
¡rÌt  |¡}|d ur£|dkr£t
 ˆ||
|¡S t  |
¡}t  |¡}|d urÅ|d urÅ||krÅt  ˆ|
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rt
 ˆ||d ¡}t  ˆ||¡}tj |tjj¡}|tjjkr>tj |tjj¡}||kr=ˆj	d|| ¡ d}n	|rGt d|¡‚|rnˆj	dˆ 	d|¡tjdg| ¡ dd}ˆ 	d|||¡}tˆ||ƒ}|S ˆ 	d|||¡}|S )Nr)   Úbr   é   ÚNonZeroÚShapec                   s(   g | ]}t  ˆt ˆ|ˆ d ¡dg¡‘qS )Néÿÿÿÿ)r	   Ú_unsqueeze_helperru   Úexpand)Ú.0Úind©Úbroadcast_index_shaperM   re   rf   Ú
<listcomp>è   s    ýÿÿzindex_put.<locals>.<listcomp>ÚConcatr~   r…   ©ÚaxesÚstartsÚendsr}   rg   rh   z'self does not have a valid scalar type.ÚConstantOfShaperU   rW   Ú	ScatterND) r	   Ú_is_packed_listÚ_unpack_listÚis_caffe2_aten_fallbackÚatÚ
_parse_argÚlenÚrangeÚ_is_boolr`   ru   r   rp   Úmasked_fillr†   Úlistr.   Ú_slice_helperÚsysÚmaxsizer‡   Ú_reshape_helperr   r]   r^   ro   rk   r   ÚSymbolicValueErrorra   rb   rV   )rM   rO   Úindices_list_valueÚvaluesÚ
accumulateÚindices_listÚargsÚidx_r'   r‰   Úbool_inpÚrankÚ	mask_rankÚ	self_rankÚsub_data_shapeÚvalues_shapeÚself_scalar_typeÚvalues_scalar_typeÚzerosÚresultre   rŠ   rf   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é   r4   zonly support 4d inputÚDepthToSpaceÚCRD)Úblocksize_iÚmode_s)r	   rp   Ú_unimplementedr`   )rM   rO   Úupscale_factorrª   re   re   rf   r4   N  s   
r4   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Ê   re   re   rf   Ú_interpolateX  s   rÍ   zaten::__interpolatec              	   C  s   t  | ||||||¡S rË   )r	   Ú__interpolate_helper)rM   rz   r>   Úscale_factorÚmodeÚalign_cornersÚrecompute_scale_factorÚ	antialiasre   re   rf   Ú__interpolatey  s   ÿrÔ   zaten::gatherc                 C  sD   t  |d¡rt  dd¡S t  ¡ r|  d||||¡S | jd|||dS )Nr{   r"   zsparse_grad == TrueÚGatherElementsr}   )r	   Ú_maybe_get_constr¸   r–   r—   r`   )rM   rO   r€   r'   Úsparse_gradre   re   rf   r"   ‹  s
   r"   zaten::scatterc              	   C  sœ   t  ¡ r| jd||||ddS tj |¡}t  |¡}t  |¡r)| jd||||dS tj |¡|kr?| jd|tj |¡ 	¡ d}| jd||t
 | ||¡|dS )Nr<   Úsrc©Úoverload_nameÚScatterElementsr}   rg   rh   )r	   r–   r—   r   r]   r^   Ú_maybe_get_scalarÚ	_is_valuer`   rk   ru   Ú	expand_as)rM   rO   r€   r'   rØ   Úsrc_typere   re   rf   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 )
NrT   rU   rW   zprim::Constantr{   rV   rg   rh   ÚCumSum)r`   ra   rb   rÉ   ÚnodeÚkindr	   Ú
_get_constr   r]   rk   )rM   rO   r€   rV   Ú
dim_tensorÚparsed_dtypeÚcastÚcsumre   re   rf   r   ®  s   ÿr   zaten::masked_selectc                 C  s$   t  | t  | ||¡¡}|  d||¡S )NÚGatherND)ru   ÚnonzerorÞ   r`   )rM   rO   Úmaskr'   re   re   rf   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“   )
ru   rê   rÞ   r	   r¡   ra   Ú
LongTensorrž   r>   r`   )rM   rO   rë   Úsourcer'   re   re   rf   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ÚSequenceLengthrT   r   rW   )	r	   Ú_is_tensor_listrâ   rã   r`   r>   ra   rì   Ú_squeeze_helper)rM   rO   Úsz_0re   re   rf   Ú_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ô   )rM   rO   r{   Úgetitemre   re   rf   rô   ã  s   
rô   zaten::_set_itemc                 C  s   |   d||¡}|   d|||¡S )NÚSequenceEraseÚSequenceInsertr   )rM   Útensor_listr{   rK   re   re   rf   Ú	_set_itemï  s   rú   zaten::appendc                 C  ó   |   d||¡S ©Nrø   r   )rM   rO   rb   re   re   rf   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`   ru   r   )rM   rO   ÚotherÚalphaÚtensor_list_nodeÚtensorsÚlÚtre   re   rf   r   ü  s   ÿ
r   zaten::insertc                 C  s   |   d|||¡S rü   r   )rM   rO   Úposrb   re   re   rf   r*     s   r*   z	aten::popc                 C  rû   ©Nr÷   r   ©rM   rù   r€   re   re   rf   r5     rý   r5   zaten::Deletec                 C  rû   r  r   r  re   re   rf   r     rý   r   z	aten::catc                 C  s6   t  |¡rt | ||¡S t  |dd¡}| jd||dS )Nr{   r€   ÚConcatFromSequencer}   )r	   r”   ru   r   rä   r`   r  re   re   rf   r      s   
r   zaten::stackc                 C  s8   t  |¡rt | ||¡S t  |dd¡}| jd||ddS )Nr{   r€   r  r‚   ©r~   Ú
new_axis_i)r	   r”   ru   rC   rä   r`   r  re   re   rf   rC   +  s   
rC   zaten::_unique2c           	      C  s$   | j d||dd\}}}}|||fS )NÚUniquer³   )Úsorted_iÚoutputsr   )	rM   rO   ÚsortedÚreturn_inverseÚreturn_countsÚuÚindicesÚinverse_indicesÚcountsre   re   rf   Ú_unique25  s   ÿ
r  zaten::unique_dimc           
      C  s&   | j d|||dd\}}}}	|||	fS )Nr
  r³   )r~   r  r  r   )
rM   rO   r€   r  r  r  r  r  r  r  re   re   rf   rF   ?  s   
ÿ
rF   z
aten::topkc              	   C  s   t j| ||||||dS )N)Úlargestr  Úout)r	   Ú_topk_helper)rM   rO   Úkr€   r  r  r  re   re   rf   rD   K  s   ÿrD   z
aten::sortc                 C  s   t j| ||||dS ©N)Ú	decendingr  ©r	   Ú_sort_helper)rM   rO   r€   r  r  re   re   rf   r?   T  s   r?   zaten::argsortc                 C  s   t j| ||||d\}}|S r  r  )rM   rO   r€   r  r  Ú_r  re   re   rf   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ÚMulrT   é
   rW   r…   )r	   Ú_is_fpr`   ra   rb   Úpow)rM   rO   ÚdecimalsÚmulr;   re   re   rf   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!  ru   r9   r`   )rM   rz   rþ   re   re   rf   r9   t  s   r9   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ˆ   rK   rl   re   rf   rŒ   ‰  s    ÿÿzsplit.<locals>.<listcomp>rT   r   rU   rW   ÚAddÚSlicec                   s2   g | ]}ˆ   d ˆˆ j dtj|gtjdd¡‘qS )ró   rT   rU   rW   )r`   ra   rb   Úlong)rˆ   r{   ©rM   Ú	split_outre   rf   rŒ   —  s    ûýÿ)r	   Ú_is_split_staticr`   r”   r™   r•   ra   rb   r+  rš   r   ru   rA   )rM   rO   Úsplit_size_or_sizesr€   Ú_outputsÚsplit_sizesÚstartÚaxisÚresr{   Úendre   r,  rf   rA   |  s0   ÿ
þ
ÿú	rA   zaten::split_with_sizesc                 C  s   t | ||||ƒS rË   )rA   )rM   rO   r1  r€   r0  re   re   rf   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'  rT   r‚   rU   rW   r   )r~   Ú
keepdims_i)r`   ra   rb   r+  ru   rE   )rM   rO   r€   r0  re   re   rf   rE   ª  s   ûrE   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  rT   rW   NÚSizer„   rU   ÚSubr  é   rg   rh   r   r’   r}   r…   Ú	Transpose©Úperm_i)r	   r”   Ú_is_listÚ_is_scalar_listr`   ru   r>   ra   rb   rp   Úint64Ú_C_onnxÚTensorProtoDataTypeÚINT64r¡   Úopset10Úflip)rM   rz   r3   Úpad_lenrª   Ú	extensionÚpaddingsÚ	padding_cre   re   rf   Ú_prepare_onnx_paddingsº  sF   ÿþý 
"ýÿúÿ ÿrI  zaten::constant_pad_ndc                 C  s:   d}t  |¡}t  ||¡}t| ||ƒ}| jd||||dS )NÚconstantÚPad©r·   )r	   rÜ   Ú_if_scalar_type_asrI  r`   )rM   rz   ÚpaddingÚvaluerÐ   r3   re   re   rf   r   ô  s
   
r   zaten::reflection_pad1dzaten::reflection_pad2dzaten::reflection_pad3dc                 C  ó"   d}t | ||ƒ}| jd|||dS )NÚreflectrK  rL  ©rI  r`   ©rM   rz   rN  rÐ   rG  re   re   rf   r7   þ  ó   r7   zaten::replication_pad1dzaten::replication_pad2dzaten::replication_pad3dc                 C  rP  )NÚedgerK  rL  rR  rS  re   re   rf   r:     rT  r:   z	aten::padrz   r3   rÐ   rO  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Ú	replicaterQ  rJ  ÚcircularzUnrecognized padding mode )	r	   r˜   r:   r7   r   ru   Ú_pad_circularr   r¢   )rM   rz   r3   rÐ   rO  re   re   rf   r3     s   	zaten::linalg_detc                 C  s   |   d|¡S )NÚDetr   )rM   rO   re   re   rf   r+   (  s   r+   zaten::logdetc                 C  s   t  | t| |ƒ¡S rË   )ru   Úlogr+   )rM   rz   re   re   rf   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r“t |ƒ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sŸt |ƒdkrÊt |ƒdkr¨d }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 )Nr{   )r	   rÖ   rU   re   re   rf   Ú_get_arange_dtype7  s   z!arange.<locals>._get_arange_dtyper9  c                 s  s    | ]}t |tƒV  qd S rË   )Ú
isinstancerÉ   )rˆ   Úvalre   re   rf   Ú	<genexpr>;  s   € zarange.<locals>.<genexpr>rT   r   rU   rW   r‚   ÚRangerÀ   )r5  rV   r³   é   r»   )r2  r5  ÚsteprV   ry   )r2  r5  rV   r\  zwith z
 arguments)
r™   Úallra   r?  r`   rb   r	   Ú_arange_cast_helperrV   r¸   )rM   r§   r]  rV   r2  r5  Údelta_defaultÚtype_rc  Ústart_defaultr  re   re   rf   r   4  sj   þþþ
ÿþþÿÿþÿr   zaten::_dim_arangec                 C  sT   |   d|¡}| j d|| j dt |¡ddd}t ¡ r!|   d|¡S t| |dd d d ƒS )	Nr„   r|   rT   rW   r   r}   z_caffe2::Ranger³   )r`   ra   rb   r	   r–   r   )rM   Úliker€   Ú
like_shapeÚstopre   re   rf   Ú_dim_arange}  s   ÿrl  z
aten::size)Úquantize_outputc                 C  s"   |d u r
|   d|¡S t | ||¡S )Nr„   )r`   r	   Ú_size_helper©rM   rO   r€   re   re   rf   r>   Š  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r´t dt|ƒ d d t|ƒ d d d ¡ |S t | ||g¡S )NÚSqueezer{   r€   r   rT   rW   r‚   rU   ÚEqualÚIfr9  )Ú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ä   rp   Ú_get_tensor_dim_sizera   rb   rn  Úonesr?  r   Úadd_op_with_blocksr   Ú_add_output_to_blockÚblockÚwarningsÚwarnrÈ   )rM   rO   r€   Ú
input_rankÚadjusted_dimÚdim_sizeÚdim_constantr>   Ú	const_oneÚcondÚif_opÚ
if_contextÚelse_contextr  Úsqueeze_Ú	identity_re   re   rf   rB   “  sX   

ÿÿþýüûúùÿ
rB   zaten::unsqueezec                 C  s(   t  |¡rt  |dd¡}t  | ||g¡S )Nr{   r€   )r	   ru  rä   r†   ro  re   re   rf   rG   Ç  s   
rG   zaten::mmc                 C  s   | j d||dddS )NÚGemmg        g      ð?)Úbeta_fÚalpha_fr   )rM   rO   rþ   re   re   rf   r0   Ð  s   r0   zaten::indexc                 C  sš   t  ¡ r| jd||ddS t  |¡rt  |¡}n|g}t|ƒdkrF|d }t  |¡sFt  |¡s9tj	 
|¡tj	jkrFt | |¡}|  d||¡S t | ||¡S )Nr'   ÚTensorrÙ   r‚   r   ré   )r	   r–   r—   r”   r•   r™   rj   r›   r   r]   r^   ÚUINT8ru   rê   r`   r'   )rM   rO   r'   r  re   re   rf   r'   Ö  s    

ÿ
ÿr'   zaten::index_fillc           	      C  st   t  |d¡}t  ¡ r| jd|||d|dS t  | |||¡\}}t  |¡}t  ||¡}t | ||d ¡}t	| ||||ƒS )Nr{   r&   Ú
int_Scalar)rÚ   Údim_i)
r	   r˜   r–   r—   Ú_index_fill_reshape_helperrÜ   rM  ru   r‡   r<   )	rM   rO   r€   r'   rO  Ú	dim_valueÚexpanded_index_shapeÚexpanded_indexÚexpanded_valuere   re   rf   r&   î  s"   ú	ÿ
r&   zaten::index_copyc                 C  sL   t  |d¡}t  ¡ r| jd||||dS t  | |||¡\}}t| ||||ƒS )Nr{   r(   )rŽ  )r	   r˜   r–   r—   r  r<   )rM   rO   r€   r'   rí   r  r‘  r’  re   re   rf   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 )Nrg   rh   ÚBitShiftÚRIGHT©Údirection_srT   r9  rU   rW   ÚPowÚDiv©r   r]   r^   ro   r`   rk   rŒ  ra   rb   Úfloat32r	   r!  r@  rA  r_   )rM   rO   rþ   ÚtwoÚtwo_powÚrshiftre   re   rf   Ú	__rshift_  ó2   ÿ
þýÿ
ýr   zaten::bitwise_left_shiftzaten::__lshift_c                 C  r”  )Nrg   rh   r•  ÚLEFTr—  rT   r9  rU   rW   r™  r  r›  )rM   rO   rþ   r  rž  Úlshiftre   re   rf   Ú	__lshift_4  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)  rT   r9  rW   r8  r‚   ra  r   r…   )r`   ra   rb   r   rG   r	   r†   r¡   )rM   Úinput_dÚkernel_size_dÚ
dilation_dÚ	padding_dÚstride_dÚblocks_dÚblocks_d_indicesÚkernel_gridÚkernel_maskÚ
block_maskre   re   rf   Ú_get_im2col_indices_along_dimW  s0   
ÿýüÿÿr¯  c                 C  s.   | j dt dd||gd ¡d}|   d||¡S )NrT   r   r9  rW   rK  )r`   ra   rì   )rM   rz   Ú	padding_hÚ	padding_wr3   re   re   rf   Ú_get_im2col_padded_inputƒ  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 )	NrT   r   rW   r‚   r  r   r…   r}   )r>   r`   ra   rb   r	   r†   )rM   rz   Úkernel_hÚkernel_wÚ	batch_dimÚchannel_dimÚchannel_unfoldedre   re   rf   Ú_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 )NrT   r9  rW   r»   r   r‚   r|   r}   r³   r:  )r   r‚   r9  r³   r»   rÀ   r;  )	r>   r`   ra   rb   r¯  r¸  r²  r	   r¡   )rM   rz   Úkernel_sizeÚdilationrN  Ú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Úoutputre   re   rf   r%     s$   ÿÿr%   zaten::narrowc                 C  s"   |   d||¡}tj| ||||dS )Nr)  rŽ   )r`   r	   rž   )rM   rz   r€   r2  Úlengthr5  re   re   rf   r1   Ó  s   r1   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   éþÿÿÿr9  r€   zfONNX and PyTorch use different strategies to split the input. Input rank must be known at export time.)r	   rp   r`   r¸   Ú_flatten_helper)rM   rz   Ú	start_dimÚend_dimr€   re   re   rf   r!   Ú  s$   
€þr!   zaten::linalg_vector_normr   úOptional[Sequence[int]]ÚkeepdimÚboolc                 C  s   t  | |||||¡S rË   )r	   Ú_linalg_vector_norm_helper)rM   rO   Úordr€   rÏ  rV   re   re   rf   r,   ö  s   r,   zaten::embedding_bagc
           
      C  s   t  | |||||||||	¡
S rË   )r	   Ú_embedding_bag_helper)
rM   Úembedding_matrixr  ÚoffsetsÚscale_grad_by_freqrÐ   ÚsparseÚper_sample_weightsÚinclude_last_offsetÚpadding_idxre   re   rf   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
  r|   r‚   ÚReduceL1r9  ÚReduceL2z8Unsupported: ONNX export of embedding_renorm with norm: z. Only 1. and 2. are supported.)Úaxes_ir6  r)  rT   gH¯¼šò×z>rW   rš  r  ÚWhereÚGreaterr“   )r`   rÉ   r   r¢   ra   rb   r	   r†   )rM   Úweightr  Úmax_normÚ	norm_typeÚunique_indicesÚpartial_weightÚnorm_iÚpartial_weight_normÚpartial_weight_norm_ÚscalesÚpartial_weight_renormre   re   rf   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 )Nr|   r„   r   r}   r8  rT   r‚   rU   rW   rš  r)  r  r   r~   )r`   ra   rb   r+  ru   r‡   rA   )rM   rO   Úchunksr€   r  Úchunk_size_sÚ
chunk_sizeÚ	chunk_vecre   re   rf   r   I  s   ÿþr   zaten::normalc	           
      C  sD   |d urt  |¡st | ||d ¡}t | ||  d|¡¡}	t| |	|ƒS )NÚRandomNormalLike)r	   rj   ru   r‡   r$  r`   r   )
rM   ÚmeanÚstdÚsizesÚ	generatorrV   ÚlayoutÚdeviceÚ
pin_memoryr²   re   re   rf   r2   [  s   r2   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   rT   r‚   rW   ÚSequenceConstruct)
r	   rÝ   r”   r•   rp   r¡   r`   ra   rb   r   ©rM   rO   rù   Únew_tensor_listrb   Ú
new_tensorÚtensor_rankre   re   rf   r   s  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   rT   r‚   rW   ©rÝ  r÷  ©r	   rÝ   r”   r•   rp   r¡   r`   ra   rb   r†   r   rø  re   re   rf   r   Ž  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r™t j	| |dgd}t j	| |dgd}|S |dkr¦t j	| |dgd}|S )
Nr   rT   )r‚   r‚   r‚   rW   r‚   rü  r…   r9  r÷  rý  rø  re   re   rf   r   °  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„   rT   rU   rW   r|   r   r}   r‚   r)  rš  r  r*  )r`   ra   rb   r+  rš   r   )rM   rO   rê  r€   Úinput_shaper3  Úinput_shape_dimr2  rì  Úchunk_size_minus_1Úinput_shape_dim_shiftÚ	chunk_dimr4  r{   r'   r5  re   re   rf   r6   Ý  s"   ÿ r6   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ó   rT   r   rU   rW   r„   r7  r‚   rq  rr  r9  )rs  r  r  r  )r   r`   ra   rb   r+  r   rx  r   ry  rz  râ   rÇ  )rM   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²   re   re   rf   r$   ó  s2   
ýüÿÿr$   zaten::vstackc                 C  s   t | |ƒ}| jd|dddS )Nr  r   r  )r   r`   )rM   rù   re   re   rf   rH     s   
rH   )rM   rN   rO   rP   rQ   rR   rS   rR   )rM   rN   )F)rÇ   rÈ   r€   rÉ   rÊ   rÈ   rË   r(  )r   N)
rM   rN   rz   rP   r3   rP   rÐ   rP   rO  rP   )rM   rN   r€   rÎ  rÏ  rÐ  )NNNNNN)rM   rN   rO   rö  )rM   rN   rù   rP   )iÚ__doc__Ú
__future__r   Ú	functoolsrŸ   r{  Útypingr   r   ra   r   Útorch._Cr   r@  Ú
torch.onnxr   r   r	   r
   rC  r   ru   r   Útorch.onnx._internalr   r   r   Ú__all__ÚpartialÚonnx_symbolicÚ_onnx_symbolicÚquantized_argsÚ
parse_argsrn   r#   r   r   r   r8   r=   r)   r4   Ú_apply_paramsrÍ   rÔ   r"   r<   r   r/   r.   rò   rô   rú   r   r   r*   r5   r   r   rC   r  rF   rD   r?   r   r;   r9   rA   r@   rE   rI  r   r7   r:   r3   r+   r-   r   rl  r>   rB   rG   r0   r'   r&   r(   r   r¤  r¯  r²  r¸  r%   r1   r!   r,   r   r    r   r2   r   r   r   r6   r$   rH   re   re   re   rf   Ú<module>   s@   <#

ÿ
þþþþþþþ

	
$9G

2
  +3%÷ +