o
    ,i                  	   @   s  d dl Z d dlZd dlm  mZ d dlmZmZm	Z	m
Z
mZmZmZ d dlmZmZmZ e jejddZede
ddd	ejdld
ejfddZede
ddd	ejdld
ejfddZede
dddejdmd
ejfddZede
ddddejdld
ejfddZedejdld
ejfddZedej	dld
ejfddZedej	dld
ejfddZ ed e
ddddej	dld
ejfd!d"Z!ed#e
dddejdnd
ejfd$d%Z"ed&ejdld
ejfd'd(Z#ed)e
ddddejdod
ejfd*d+Z$ed,e
ddddddej	-	.dpd
ejfd/d0Z%ed1e
dddddej	-	.dpd
ejfd2d3Z&ejd4d5 Z'ed6e
(d7d8gd9ejd:d; Z)ed<ejd
ejfd=d>Z*ed?e
ddddejdld
ejfd@dAZ+edBejd
ejfdCdDZ,edEej	dqd
ejfdFdGZ-edHe
ddddejd
ejfdIdJZ.edKejd
ejfdLdMZ/edNejd
ejfdOdPZ0edQejd
ejfdRdSZ1edTejd
ejfdUdVZ2edWejd
ejfdXdYZ3edZejd
ejfd[d\Z4ed]ejd
ejfd^d_Z5ed`ejd
ejfdadbZ6edcejd
ejfdddeZ7edfejd
ejfdgdhZ8ediejd
ejfdjdkZ9dS )r    N)
_constants_type_utilserrorssymbolic_helpersymbolic_opset11symbolic_opset9utils)	_beartype	jit_utilsregistration   )opsetzaten::softmaxvinonegc                 C   P   | j d||d}|r&|  dkr&t|dd}| j d|t| d}|S )NSoftmaxaxis_iprim::Constantr   dtypeCastto_iopnodekindr   
_get_constr   JitScalarType	onnx_type)r   inputdimr   softmaxparsed_dtype r&   Y/home/ubuntu/SoloSpeech/.venv/lib/python3.10/site-packages/torch/onnx/symbolic_opset13.pyr$      s   r$   zaten::log_softmaxc                 C   r   )N
LogSoftmaxr   r   r   r   r   r   r   )r   r"   r#   r   	return_opr%   r&   r&   r'   log_softmax'   s   r*   zaten::frobenius_normFc                 C   s^   t |d}t |st|dkr| jd|ddS | d||}t j| |||d}| d|S )Nisr   ReduceL2
keepdims_iMulSqrt)r   _maybe_get_const	_is_valuelenr   _reducesum_helper)r   selfr#   keepdimdim_valsqrsumsqrr&   r&   r'   frobenius_norm4   s   r:   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 | d}| dkr jd||||dS t |dd}t ||}|d u r|d ur|| }ntd||g||  }|| }|r|
|  jdt|d} jd||||dS )NSplitToSequencer   c                    s   g | ]
}t  |d gqS )r   )r   _unsqueeze_helper).0r   )r   r&   r'   
<listcomp>M   s    zsplit.<locals>.<listcomp>Constantr   r   value_tAddSlicec                    s2   g | ]}  d  j dtj|gtjddqS )
SequenceAtr?   r@   rA   r   torchtensorlong)r=   r   r   	split_outr&   r'   r>   \   s    valueSplitr   outputsr   
split_size$Unknown dimension size not supported)r   _is_split_staticr   _is_packed_listr3   _unpack_listrG   rH   rI   rangeappend	_node_getr   r#   r   _get_tensor_dim_sizer   SymbolicValueError)r   r5   split_size_or_sizesr#   _outputssplit_sizesstartaxisresr   end	split_valrP   sizesplitsleftoverr&   rJ   r'   split@   sP   

	

re   zaten::split_with_sizesc                 C      t | ||||S Nre   r   r5   r\   r#   r[   r&   r&   r'   split_with_sizesz   s   rj   zaten::unsafe_splitc                 C   rf   rg   rh   )r   r5   rZ   r#   r[   r&   r&   r'   unsafe_split      rk   zaten::unsafe_split_with_sizesc                 C   rf   rg   )rj   ri   r&   r&   r'   unsafe_split_with_sizes   rl   rm   zaten::tensor_splitc           "      C   s  | j dtj|tjdd}t| |d}| j dtjdtjdd}t||rt|	 d}|
 dkr| j dtjdgtjdd}g }	|d usKJ t|d D ]%}
| j d|| j dtj|
gtjdddd}|	|  d	|||| |}qQt| ||}|	|  d	|||| |	S t|d
d}t||}|d u r|d ur|| }ntd||| }|| }||d g }|| |g }| j dtj|| tjdd}| j d||||dS t|rt|dkrt| || j dtdd}t| |d}| j d|tjjd}| j dtjdgtjdd}| j d||dd}|  d}tj| d|||ddd\}\}}|j}t|}t|}t|}|j d||dd}|j d|| d||dd}| d	||||}| d||}| d|}t|| t|| |	  }| j d|| j dtjdtjdddd}t| |d}t| ||}|  d	||||}|  d||S t| ||} |  d| |}|  d||}!|  d| |}|  d|!|}|  d||  dt| |d|}| j d||dd}|d u r| j d|||dS | j d||||dS )Nr?   r@   rA   r      rL   Gatherr   rD   r   indices_or_sectionsrQ   rM   rN   r   r   ConcatSequenceEmptyLoop)rO   n_blocksrC   SequenceInsertIdentityDivModTileSubr;   )r   rG   rH   rI   opset11	unsqueezer   rR   rW   r   r#   rU   rV   _size_helperr   rX   r   rY   
_is_tensor_get_tensor_rank_C_onnxTensorProtoDataTypeBOOLr
   add_op_with_blocksblockr   _add_input_to_block_add_output_to_blockoutput)"r   r5   rp   r#   r[   r^   const_1ra   r]   r_   r   r`   rP   rb   min_split_sizenum_splits_one_extrarc   rd   loop_lenloop_condition	padding_0final_splitslooploop_context_
loop_blockblock_input_itercondslicecond_outloop_out
last_slicedim_sizemin_split_size_plus_1r&   r&   r'   tensor_split   s   






r   zaten::unbindc              	      s   |d u rj d|j dtjdtjdd ddS j dtdg| d}j d|| |d	}|dkr7|gn|} fd
d|D }|S )Nr;   r?   rn   r@   rA   r   r   r.   rM   rN   c                    s,   g | ]} d |j dt gdqS )Squeezer?   rA   )r   rG   rH   )r=   outr#   r   r&   r'   r>   +  s    zunbind.<locals>.<listcomp>rF   )r   r5   r#   r[   rc   rO   squeezed_outputsr&   r   r'   unbind  s   r   zaten::nonzero_numpyc                 C   s   t | t| |d|dS )Nrn   )r[   )r   opset9nonzero)r   r"   r[   r&   r&   r'   nonzero_numpy2  s   r   zaten::wherec              	   C   sb   t |s| jd|tjjd}|d u r)t| |}t | || jdt	
dd|S | d|||S )Nr   r   r?   rn   rA   Where)r   _is_boolr   r   r   r   r   r   _unbind_helperrG   rH   )r   	conditionr5   otherr[   r&   r&   r'   where9  s   
r   z&aten::fake_quantize_per_channel_affine   c                 C   s   ||fdvrt d| d| d||dkr"| jd|tjjd}n
| jd|tjjd}| jd||||d	}||fd
krR| d|t| | jdt	j
dt	jdd}| jd||||d	S )N)r      r   r   r   r   VFor (quant_min, quant_max), ONNX allows only (0, 127), (0, 255) and (-128, 127). Got (, )r   r   r   QuantizeLinearr   r   Clipr?   r   r@   rA   DequantizeLinear)r   rY   r   r   r   UINT8INT8r   unusedrG   rH   uint8)r   inputsscale
zero_pointr^   	quant_min	quant_max	quantizedr&   r&   r'    fake_quantize_per_channel_affineH  s*   r   z%aten::fake_quantize_per_tensor_affinec                 C   s   ||fdvrt d| d| d||dkr"| jd|tjjd}n
| jd|tjjd}tj	|tjj
tjjkrC| jd|tjjd}| d|||}||fd	krg| d
|t| | jdtjdtjdd}| d|||S )Nr   r   r   r   r   r   r   r   r   r   r?   r   r@   rA   r   )r   rY   r   r   r   r   r   r   r    
from_value	UNDEFINEDFLOATr   r   rG   rH   r   )r   r   r   r   r   r   r   r&   r&   r'   fake_quantize_per_tensor_affinel  s2   r   c                    s   t jd fdd	}|S )Nc                    sB   t | |}|d u rt | | S t |dd}| j |||dS )Nr   r6   r-   )r   _maybe_cast_reduce_op_input_handle_reduce_dim_noner   r   )r   r5   r#   r6   onnx_op_namer&   r'   symbolic  s
   z%_reduce_op_symbolic.<locals>.symbolicNN)r	   beartype)r   r   r&   r   r'   _reduce_op_symbolic  s   	r   z	aten::sum	ReduceSumsum)decoratec                    s&   t | tjtj fdd}|S )Nc                    sL   t ddtj fdd}t ddddtj fdd}||fS )Nr   r   c                    s   d }|   dkr!t|dd}t| }| jd||d}n|   dkr0t d|S | |}|d urMtj	| }||krM| jd||d}|S Nzonnx::Constantr   r   r   r   r   
r   r   r   r   r   r    r!   r   _unimplementedr   )r   r5   r   
dtype_onnxresultresult_dtype_onnxnamer   r&   r'   reduce_nodim  s"   
z8_reduce_with_dtype.<locals>.reduce.<locals>.reduce_nodimr   c                    s   d }|   dkr!t|dd}t| }| jd||d}n|   dkr0t d|S | |||}|d urOtj	| }||krO| jd||d}|S r   r   )r   r5   r#   r6   r   r   r   r   r   r&   r'   
reduce_dim  s"   z6_reduce_with_dtype.<locals>.reduce.<locals>.reduce_dim)r   
parse_argsr	   r   )r   argskwargsr   r   r   r&   r'   reduce  s   
z"_reduce_with_dtype.<locals>.reduce)r   r   _overload_by_arg_countr	   r   )onnx_opr   r   r&   r   r'   _reduce_with_dtype  s
   )r   zaten::unflattenc              
   C   sP  t |}|d u rt ddS | jdtj|gtjdd}| d||}| d||}| d|}| jdtjd	gtjdd}| d
|| jdtjdgtjdd}| d|||}| d|| jdtjdgtjdd}	| d
|	| jdtjdgtjdd}
| jdtjtjgtjdd}| d||
|}| jd|||d	d}t 	| ||S )Nr#   zfONNX and PyTorch use different strategies to split the input. Input rank must be known at export time.r?   r@   rA   rC   ry   Shaper   Reshapern   rD   rq   r   )
r   r   r   r   rG   rH   int64r   	INT64_MAX_reshape_helper)r   r"   r#   unflattened_size	input_dim
input_sizehead_start_idxhead_end_idxhead_part_rankdim_plus_onetail_start_idxtail_end_idxtail_part_rankfinal_shaper&   r&   r'   	unflatten  s>   

r   zaten::unsafe_chunkc           	   	   C   s   |d u r| j d|| j dtjdtjdd|ddS t||}|d u r)tdd	S || d | }|g||  }|| }|rC|| | j dtj|tjdd}| j d
||||dS )Nr;   r?   rn   r@   rA   r   r   unsafe_chunkzunknown dimension sizerM   rN   )r   rG   rH   rI   r   rX   r   rV   )	r   r5   chunksr#   r[   rb   rP   rc   rd   r&   r&   r'   r     s$   
r   z
aten::tilec                 C   s  |  d|}|  d|}|  d|}|  d||}| j dtdgd}|  d||}tj| d|d	d
d\}	\}
}}|
j dtd
gd}|
 d||}|
 d||}|
j d||dd}t|
j| | d|}t|j| |		 
 }|  d||}tj| d|d	d
d\}\}}}|j dtd
gd}| d| d||}| d||}|j d||dd}| d||}t|j| | d|}t|j| |	 
 }| j d|tjjd}|  d||S )Nr   Sizer{   r?   r   rA   GreaterIf   rn   )rt   rO   r   Expandrq   r   rv   LessAbsr   r   rz   )r   rG   rH   r
   r   
LongTensorr   r   r   r   r   r   r   INT64)r   r5   dims
self_shape	self_rank	dims_rankdiff
const_zerodims_shorter_than_self_shapeif_op_greaterif_context_greaterelse_context_greaterr   	const_onediff_1d_greaterexapnd_ones_greaterdims_identity_dim
dims_finaldims_longer_than_self_shape
if_op_lessif_context_lesselse_context_lessdiff_1d_lessexapnd_ones_lessself_final_shapeself_identity_self
self_finalr&   r&   r'   tile$  s\   


r  zaten::repeat_interleavec           !   	   C   s  t |}t |}t |}|d u rtd||d u r#td||d u r-td||}t |rMt | || jdt	dgd}tj	dtj
d}nt |}|dk r\|t|7 }| }	t|D ]\}
}|d u rtd	\|	|
< ||
< qd|dks|d
kr|d d
krt | |||S |d
ko|d d u }|	| dks|rt | ||}t| |d}|rt | || jdtdgd}| d|| jdtd
gd}t| || d|||}nt| |||S | jd| d|tj	d
gtjdd}t| ||d}t| |||}d\|	|< ||< | jdt	d
d}| jd|tjjd}|}| d}tj| d|||d
d\}\}}|j}t |}t |}t |}|d||}|d||}t|||d
 }|jdt|d |d
  d||jdt||d
 d  dg}|jdg|R ddi}t!|||d }t ||| jdt|	d}|d||}|jd|tjjd}t"|| t"|| |# $ } | jd| |d} | S )NzGUnsupported: ONNX export of repeat_interleave for unknown repeats rank.zGUnsupported: ONNX export of repeat_interleave for unknown repeats size.zEUnsupported: ONNX export of repeat_interleave for unknown input size.r?   rw   rA   r   r@   )r   rw   rn   Equalr   ConstantOfShaper   )rw   rn   r   r   rr   rs   rt   rE   rq   r   ru   ConcatFromSequencer   )%r   r   _get_tensor_sizesr   rY   _is_noner   r   rG   rH   r   _maybe_get_scalarr3   copy	enumerate-_repeat_interleave_single_value_repeat_helperr~   r|   r}   r   r   r   repeat_interleaverI   re   r   r   r   r
   r   r   r   r   expandr   r   r   )!r   r5   repeatsr#   output_sizerepeats_dimrepeats_sizesinput_sizes	final_dimoutput_sizesidxr   cond_dynamic_repeatsreps
repeat_dimrepeat_cond	reps_liker_splitsi_splitsr   r   r   r   r   r   r   r   r   r_spliti_splitr_concatr   r   r&   r&   r'   r$  \  s   










r$  zaten::diagonalc                    s"  t |}|d ur|dkr|n|| }|dkr|n|| }tj | jdt|gdd}tj | jdt|gdd} jd||dd}t |d d d }	 jd|	|d}	|d urztt	|}
|

| |

|  jd	||
||g d
}nt ddS  d||	t j dgdd jdt|gd}|dkr d d| d|| jdtdgd}d}n d d d||| jdtdgd} jd|dd}t |dd d } d| jdtdgd} d| jdtt|d gd} fddtt	|d d D }||  jdg|R ddi}t |dd d } d d| jdtjdtjdd}tj d|dd \}\}}}|d||}t |||d g}|jd!||d d"}t||d#d d }t|j| t|j| |S )$Nr   r?   rA   r#   rq   r   EyeLike)k_i	Transpose)perm_idiagonalzunknown input rankr/   rw   )axes_ir.   MaxMinr{   rC      CumSumrn   c              
      s.   g | ]}t j  jd t|gddqS )r?   rA   r8  )r   rb   r   rG   r   )r=   r^   r   r   r&   r'   r>   7  s     zdiagonal.<locals>.<listcomp>r   Notr  r@   r   r   r  GatherND)batch_dims_i   )r   r   r   rb   r   rG   r   zeroslistrU   remover   r4   onesabsrV   rH   r   r
   r   r<   r   r   r   )r   r5   offsetdim1dim2rank	dim1_size	dim2_size
mask_shapemaskaxes	offset_op	diag_sizeselect_window_ones_fillselect_windowgather_shapegather_indicesoverrun_condif_op
if_contextelse_contextr   gather_indices_if_blockfinal_non_overrunfinal_overrunr&   rC  r'   r=    s   


	
	r=  zquantized::linearc                 C   sn   t | |\}}}}t | |\}	}
}}t | |||
|}t | |\}}}}t| ||	|}t | |||S rg   )r   dequantize_helperrequantize_bias_helperr   linearquantize_helperr   q_inputq_weightbiasop_scaleop_zero_pointr"   input_scaler   weightweight_scaler^   q_biasr   r&   r&   r'   quantized_linearf  s   
rr  zquantized::linear_reluc                 C   sz   t | |\}}}}t | |\}	}
}}t | |||
|}t | |\}}}}t| ||	|}t| |}t | |||S rg   )r   rd  re  r   rf  relurg  rh  r&   r&   r'   quantized_linear_reluw  s   
rt  zquantized::conv1d_reluc
              
   C      t | |\}
}}}t | |\}}}}t | ||||}t | |\}}}}t| |
||||||}t| |}t | |||	S rg   )r   rd  re  r   conv1drs  rg  r   ri  rj  rk  stridepaddingdilationgroupsrl  rm  r"   rn  r   ro  rp  r^   rq  r   r&   r&   r'   quantized_conv1d_relu     
r|  zquantized::conv2d_reluc
              
   C   ru  rg   )r   rd  re  r   conv2drs  rg  rw  r&   r&   r'   quantized_conv2d_relu  r}  r  zquantized::conv3d_reluc
              
   C   ru  rg   )r   rd  re  r   conv3drs  rg  rw  r&   r&   r'   quantized_conv3d_relu  r}  r  zquantized::conv1dc
              
   C   v   t | |\}
}}}t | |\}}}}t | ||||}t | |\}}}}t| |
||||||}t | |||	S rg   )r   rd  re  r   rv  rg  rw  r&   r&   r'   quantized_conv1d     
r  zquantized::conv2dc
              
   C   r  rg   )r   rd  re  r   r~  rg  rw  r&   r&   r'   quantized_conv2d  r  r  zquantized::conv3dc
              
   C   r  rg   )r   rd  re  r   r  rg  rw  r&   r&   r'   quantized_conv3d  r  r  zquantized::conv_transpose1dc                 C   x   t | |\}}}}t | |\}}}}t | ||||}t | |\}}}}t| ||||||||	}t | ||	|
S rg   r   rd  re  r   conv_transpose2drg  r   ri  rj  rk  rx  ry  output_paddingrz  r{  rl  rm  r"   rn  r   ro  rp  r^   rq  r   r&   r&   r'   quantized_conv_transpose1d(     
r  zquantized::conv_transpose2dc                 C   r  rg   r  r  r&   r&   r'   quantized_conv_transpose2dE  r  r  zquantized::conv_transpose3dc                 C   r  rg   )r   rd  re  r   conv_transpose3drg  r  r&   r&   r'   quantized_conv_transpose3db  r  r  rg   )NF)r   N)NNNr   r   ):	functoolsrG   torch._C._onnx_C_onnxr   
torch.onnxr   r   r   r   r   r|   r   r   r   torch.onnx._internalr	   r
   r   partialonnx_symbolic_onnx_symbolicr   r   GraphContextr$   r*   r:   re   rj   rk   rm   r   r   r   r   r   r   r   _apply_paramsr   r   r   r  r$  r=  rr  rt  r|  r  r  r  r  r  r  r  r  r&   r&   r&   r'   <module>   s8  $	
	7 	!$
4*6 y