U
    1þjg§•  ã                "   @  sê  d dl mZ d dlZd dlZd dlZd dlmZmZmZm	Z	m
Z
 d dlZd dlm  mZ d dlZd dlmZ d dlmZmZmZmZmZ d dlmZ d dlmZmZmZ dd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)g"Zejejd*d+Z e d,ƒej!d-d.œd/d	„ƒƒZ"e #d0d0d1¡ej!d-d.œd2d3„ƒƒZ$e d4ƒej!d-d.œd5d6„ƒƒZ%e d7ƒe #d0d8d8d9¡ej!dÎd-d.œd:d(„ƒƒƒZ&e d;ƒe #d0d0d8d8d8d9¡ej!dÏd-d.œd<d)„ƒƒƒZ'd-d=d>d>d>d>d?d@d=dAœ	dBdC„Z(d@dDdDdDdDdEdFœdGdH„Z)d-d=d>d>d>d>d?d@d>d>d>dIdJœdKdL„Z*e dMej+dNdOdPdQgdRe dSej+dTdUdPdQgdRe dVej+dWdXdPdQgdRe dYej+dZdOd[dQgdRe d\ej+d]dUd[dQgdRe d^ej+d_dXd[dQgdRej!d`d@d?daœdbdc„ƒƒƒƒƒƒƒZ,d@dDdDdDdddeœdfdg„Z-e dhe +didO¡gdRe dje +dkdU¡gdRe dle +dmdX¡gdRej!dndo„ ƒƒƒƒZ.e dpe +dqdXdr¡gdRe dse +dtdudr¡gdRe dve +dwdxdr¡gdRe dye +dzdXd{¡gdRe d|e +d}dud{¡gdRe d~e +ddxd{¡gdRej!d€d„ ƒƒƒƒƒƒƒZ/e d‚ƒej!d-d.œdƒd„„ƒƒZ0ej!dÐd-d…d†d†d†d‡dˆœd‰dŠ„ƒZ1e d‹ƒej!d-d.œdŒd'„ƒƒZ2e dƒe #d0dŽ¡ej!d-d.œdd„ƒƒƒZ3e dƒej!d-d.œd‘d„ƒƒZ4e d’ƒe #d0d0d0d8d8d8d0d8d8¡	ej!d-d.œd“d
„ƒƒƒZ5e d”ƒe #d0d0d0d8d8¡ej!dÑd-d.œd—d„ƒƒƒZ6e d˜ƒej!d-d.œd™d„ƒƒZ7e dšƒej!d-d.œd›d„ƒƒZ8e dœƒej!d-d.œdd„ƒƒZ9e džƒej!d-d.œdŸd„ƒƒZ:e d ƒe #d0d¡d¡d¡¡ej!d-d.œd¢d„ƒƒƒZ;e d£ƒej!d-d.œd¤d#„ƒƒZ<e d¥ƒej!d-d.œd¦d$„ƒƒZ=e d§ƒej!d-d.œd¨d„ƒƒZ>e d©ƒej!d-d.œdªd„ƒƒZ?e d«ƒej!d-d.œd¬d%„ƒƒZ@e d­ƒej!d-d.œd®d„ƒƒZAe d¯ƒej!d-d.œd°d&„ƒƒZBe d±ƒej!d-d.œd²d"„ƒƒZCe d³ƒej!d-d.œd´d!„ƒƒZDe dµƒej!d-d.œd¶d„ƒƒZEe d·ƒe #d0d0d0d¡d0d0¡ej!d-d.œd¸d „ƒƒƒZFe d¹ƒej!d-d.œdºd„ƒƒZGe d»ƒej!d-d.œd¼d„ƒƒZHe d½ƒej!d-d.œd¾d„ƒƒZIe d¿ƒej!d-d.œdÀd„ƒƒZJe dÁƒej!d-d.œdÂd„ƒƒZKe dÃƒej!d-d.œdÄd„ƒƒZLe dÅƒej!d-d.œdÆd„ƒƒZMe dÇƒej!d-d.œdÈd„ƒƒZNe dÉƒej!d-d.œdÊd„ƒƒZOe dËƒe #d0d8d0d0¡ej!d-d=d@d=d=d=dÌœdÍd„ƒƒƒZPdS )Òé    )ÚannotationsN)ÚListÚOptionalÚSequenceÚTupleÚUnion)Ú_C)Ú
_constantsÚ_type_utilsÚerrorsÚsymbolic_helperÚsymbolic_opset9)ÚGLOBALS)Ú	_beartypeÚ	jit_utilsÚregistrationÚ
dequantizeÚdivÚembedding_bagÚfake_quantize_per_tensor_affineÚflipÚfmodÚisfiniteÚisinfÚ
nan_to_numÚquantize_per_tensorÚquantized_add_reluÚquantized_addÚquantized_catÚquantized_conv1d_reluÚquantized_conv2d_reluÚquantized_conv3d_reluÚquantized_conv1dÚquantized_conv2dÚquantized_conv3dÚquantized_conv_transpose1dÚquantized_conv_transpose2dÚquantized_conv_transpose3dÚquantized_group_normÚquantized_hardswishÚquantized_instance_normÚquantized_layer_normÚquantized_leaky_reluÚquantized_linearÚquantized_linear_reluÚquantized_mulÚquantized_sigmoidÚsliceÚsortÚtopké
   )Zopsetz	aten::divújit_utils.GraphContext©Úgc                 G  s0   t |ƒdkrt | ||¡S t| ||f|žŽ S d S ©Nr   )ÚlenÚopset9Útrue_divideÚ_div_rounding_mode)r7   ÚselfÚotherÚargs© r@   ú?/tmp/pip-unpacked-wheel-ttp2cnii/torch/onnx/symbolic_opset10.pyr   J   s    ÚvÚsc                 C  s(   |dkrt | ||ƒS t | |||¡S d S )NÚfloor)Ú_floor_divider:   r<   )r7   r=   r>   Zrounding_moder@   r@   rA   r<   S   s    r<   zaten::_floor_dividec                 C  sæ   t  |¡st  |¡r.t | ||¡}|  d|¡S |  d||¡}| jdtjdtjdd}|  d|  d||¡|  d||¡¡}| jd	||dd
}|  d||  d|  d||¡¡¡}| jdtjdtjdd}	|  d||	¡}
|  d||
|¡S d S )NZFloorZDivÚConstantr   ©Údtype©Zvalue_tZXorZLessÚMod©Zfmod_iÚAndZNotZEqualé   ÚSubÚWhere)r   Ú_is_fpr:   r;   ÚopÚtorchÚtensorÚint64)r7   r=   r>   Úoutr   ZzeroÚnegativeÚmodZ
fixup_maskZoneÚfixupr@   r@   rA   rE   \   s    " rE   z
aten::sortÚiÚnonec                 C  s   t j| ||||dS )N)Ú	decendingrU   )r   Z_sort_helper)r7   r=   Údimr[   rU   r@   r@   rA   r2   r   s    z
aten::topkc              	   C  s   t j| ||||||dS )N)ÚlargestÚsortedrU   )r   Z_topk_helper)r7   r=   Úkr\   r]   r^   rU   r@   r@   rA   r3   y   s          ÿú_C.ValueúSequence[int]ÚboolÚint)	r7   r=   Úkernel_shapeÚstridesÚpadsÚ	dilationsÚ	ceil_modeÚunbatched_rankÚreturnc              
   C  s’   |   d|   d|¡¡}||krB|   d|| j dtjdgtjdd¡}| j d|d	|||||d
\}	}
||krŽ|   d|	| j dtjdgtjdd¡}	|	S )NÚSizeÚShapeÚ	UnsqueezerF   r   rG   rI   ÚMaxPoolé   ©ÚoutputsÚceil_mode_iÚdilations_iÚkernel_shape_iÚpads_iÚ	strides_iÚSqueeze©rQ   rR   rS   rT   )r7   r=   rd   re   rf   rg   rh   ri   Ú	self_rankÚpool_resultÚ_r@   r@   rA   Ú_aten_max_pool_onnx‚   s0    
ýø
ýr|   zUnion[Sequence[int], int]zATuple[Sequence[int], Sequence[int], Sequence[int], Sequence[int]])Úexpand_sizeÚkernel_sizeÚstrideÚpaddingÚdilationrj   c                 C  sÂ   t |tƒr|g|  }t |tƒr*|g|  }n|}t |tƒrH|g|  d }nJt|ƒdkrb||  d }n0t|ƒdkrx|d }nt|ƒdkrŽ|d }n|}t |tƒr¨|g|  }n|s²|}n|}||||fS )ú:Adjust attributes of avg_pool to match ONNX specification.ro   rM   é   ©Ú
isinstancerc   r9   )r}   r~   r   r€   r   rd   rf   re   r@   r@   rA   Ú_adjust_attributes_of_max_poolª   s(    	






r†   zTuple[_C.Value, Sequence[int]])r7   r=   rd   re   rf   rg   rh   ri   Ú
n_dims_oneÚn_dims_zeroÚn_dims_axesrj   c              
   C  s$  |   d|   d|¡¡}||krB|   d|| j dtjdgtjdd¡}| j d|d	|||||d
\}}| j d|d	|||d\}}| j dt |¡d}| j dt |	¡d}| j dt |
¡d}|   d||||¡}|   d||¡}||kr| j d|tjdgtjdd}| j d|tjdgtjdd}||fS )Nrk   rl   rm   rF   r   rG   rI   rn   ro   rp   )rq   rs   rt   rv   ÚSlicerN   rw   rx   )r7   r=   rd   re   rf   rg   rh   ri   r‡   rˆ   r‰   ry   rz   Úindicesr{   Zflatten_indicesÚendsÚstartsÚaxesÚdeltar@   r@   rA   Ú _aten_max_pool_with_indices_onnxÕ   sL    ýø

ú
	
  ÿr   zaten::max_pool1dZ
max_pool1drM   F)Úreturn_indices)Zdecoratezaten::max_pool2dZ
max_pool2dro   zaten::max_pool3dZ
max_pool3drƒ   zaten::max_pool1d_with_indicesZmax_pool1d_with_indicesTzaten::max_pool2d_with_indicesZmax_pool2d_with_indiceszaten::max_pool3d_with_indicesZmax_pool3d_with_indicesÚstr)Únamer}   r‘   c              
     sL   t  dddddd¡t  dddddd¡ddddd	dd
dœ‡ ‡fdd„ƒƒ}|S )NTFrB   ÚisrY   r5   r`   ra   úUnion[int, Sequence[int]]rb   )r7   Úinputr~   r   r€   r   rh   c                   st   t ˆ ||||ƒ\}}}	}
ˆrVt| ||||	|
|ˆ d dgˆ  dgˆ  dd„ tˆ ƒD ƒƒS t| ||||	|
|ˆ d ƒS d S )NrM   r   c                 S  s   g | ]}d | ‘qS )ro   r@   )Ú.0rY   r@   r@   rA   Ú
<listcomp>T  s     z2_max_pool.<locals>.symbolic_fn.<locals>.<listcomp>)r†   r   Úranger|   )r7   r–   r~   r   r€   r   rh   rd   re   rf   rg   ©r}   r‘   r@   rA   Úsymbolic_fn9  s>        ÿõøz_max_pool.<locals>.symbolic_fn)r   Úquantized_argsÚ
parse_args)r“   r}   r‘   r›   r@   rš   rA   Ú	_max_pool  s    ,$'rž   z2Tuple[Sequence[int], Sequence[int], Sequence[int]])r}   r~   r   r€   rj   c                 C  sš   t |tƒr|g|  }n|}t |tƒr4|g|  d }n8t|ƒdkrN||  d }nt|ƒdkrd||  }n|d }t |tƒr‚|g|  }n|sŒ|}n|}|||fS )r‚   ro   rM   r„   )r}   r~   r   r€   rd   rf   re   r@   r@   rA   Ú_adjust_attributes_of_avg_poolf  s     



rŸ   zaten::avg_pool1dZ
avg_pool1dzaten::avg_pool2dZ
avg_pool2dzaten::avg_pool3dZ
avg_pool3dc                   sT   t  ddddddd¡t  ddddddd¡tjddddd	d
d
dœ‡ fdd„ƒƒƒ}|S )NTFrB   r”   rY   rZ   r`   ra   r•   rc   )r–   r~   r   r€   rh   Úcount_include_padc              	     s0   t ˆ |||ƒ\}}	}
| jd|||||
|	d}|S )NZAveragePool)rr   Zcount_include_pad_irt   ru   rv   )rŸ   rQ   )r7   r–   r~   r   r€   rh   r    Zdivisor_overriderd   re   rf   Úresult©r}   r@   rA   r›   ”  s        ÿ
ù
z_avg_pool.<locals>.symbolic_fn)N)r   rœ   r   r   Úbeartype)r“   r}   r›   r@   r¢   rA   Ú	_avg_pool†  s    	 ø$r¤   zaten::upsample_nearest1dZupsample_nearest1dZnearestzaten::upsample_nearest2dZupsample_nearest2dé   zaten::upsample_nearest3dZupsample_nearest3dé   zaten::upsample_linear1dZupsample_linear1dÚlinearzaten::upsample_bilinear2dZupsample_bilinear2dzaten::upsample_trilinear3dZupsample_trilinear3dc                   s(   t  ddd¡tj‡ ‡‡fdd„ƒƒ}|S )NTFc                   sb   t  | ˆ|¡\}}t  ˆ¡ t  |¡}|r8t  ˆd|¡S |d krPt  | ||ˆ ¡}| jd||ˆdS )Nzalign_corners == TrueÚResize©Zmode_s)r   Z_get_interpolate_attributesZ_interpolate_warningÚ_maybe_get_scalarZ_unimplementedZ_interpolate_size_to_scalesrQ   )r7   r–   Zoutput_sizer?   ÚscalesÚalign_corners©r\   Úinterpolate_moder“   r@   rA   r›   Î  s"      ÿ

   ÿz!_interpolate.<locals>.symbolic_fn)r   rœ   r   r£   )r“   r\   r®   r›   r@   r­   rA   Ú_interpolate´  s    r¯   zaten::__interpolatec           	      C  s*   t  | |||||¡\}}| jd|||dS )Nr¨   r©   )r   Z _interpolate_get_scales_and_moderQ   )	r7   r–   ÚsizeZscale_factorÚmoder¬   Zrecompute_scale_factorZ	antialiasr«   r@   r@   rA   Ú__interpolateá  s         ÿr²   ztorch._C.Valuez)Union[List, torch.Tensor, torch._C.Value]z3Optional[Union[List, torch.Tensor, torch._C.Value]])r7   r–   rŽ   r   rŒ   Ústepsc                   s®   dd„ ‰d‡ ‡fdd„	}dd„ }||ƒdkrR||ƒt jkrR|d ksN||ƒdkrR|S ||ƒ}||dd	}||t jd	}|d krŽˆ  d
||||¡S ||dd	}ˆ  d
|||||¡S )Nc                 S  s:   | d krdS t | tjjƒo8|  ¡  ¡ dko8t |  ¡ tjƒS )NTzprim::Constant)r…   rR   r   ÚValueÚnodeÚkindÚtypeZNoneType)Úvaluer@   r@   rA   Úis_none_valueü  s    ÿýz_slice.<locals>.is_none_valuec                   s~   ˆ| ƒr|d k	r|g} t | ttjfƒr:ˆ jdt | ¡dS t | ¡}|dkr\t ˆ | dg¡S |dkrh| S t	 
d|› | ¡‚d S )NrF   rI   r   rM   zRank must be 0 or 1, not )r…   ÚlistrR   ÚTensorrQ   rS   r   Z_get_tensor_rankÚ_unsqueeze_helperr   ÚSymbolicValueError)Úlist_or_valueÚdefault_valueZrank©r7   r¹   r@   rA   Úto_slice_input  s    
 ÿz_slice.<locals>.to_slice_inputc                 S  s4   t | ttjfƒr(t| ƒdkr$| d S d S t | d¡S )NrM   r   rY   )r…   rº   rR   r»   r9   r   Z_maybe_get_const)r¾   r@   r@   rA   Úget_const_value  s
    z_slice.<locals>.get_const_valuer   rM   )r¿   rŠ   )N)r	   Ú	INT64_MAXrQ   )r7   r–   rŽ   r   rŒ   r³   rÁ   rÂ   r@   rÀ   rA   Ú_sliceó  s&    			
ÿþý
ýrÄ   zaten::slicec                 G  sZ   t |ƒdkr|\}}}}n*t |ƒdkr8|\}}}dg}nt d|¡‚tj| |||||dS )Nr¥   rƒ   r   zUnknown aten::slice signature©rŽ   r   rŒ   r³   )r9   r   r½   r   Ú_slice_helper)r7   r=   r?   ÚdimsÚstartÚendÚstepr@   r@   rA   r1   .  s    
úz
aten::flipr”   c              	   C  s8   t j| ||dgt|ƒ tj gt|ƒ dgt|ƒ dS )NéÿÿÿÿrÅ   )r   rÆ   r9   r	   rÃ   )r7   r–   rÇ   r@   r@   rA   r   E  s    úz
aten::fmodc                 C  s   | j d||ddS )NrJ   rM   rK   )rQ   )r7   r–   r>   r@   r@   rA   r   S  s    zaten::embedding_bagc
                 C  s  |rt jrt d¡S |	d k	r,|	dkr,tdƒ‚t d¡ t |d¡}
|
d k	rú|r^|
d }|}n4|
}|| jdt	 
tjg¡dg}| jd|žd	diŽ}g }t|ƒD ]8}t | t | |t	 
d¡t	 
|¡¡dg¡}t | t | |t	 
d¡t	 
|d ¡¡dg¡}| jdt	 
dg¡d}|  d
||||¡}|  d||¡}t |¡sj|  d
||||¡}t | |dg¡}|  d||¡}|dkrŠtj| |dgdd}n4|dkrª| jd|dgdd}n| jd|dgdd}t | |dg¡}| |¡ qž| jd|žd	diŽ}|d d d fS t d¡S d S )Nz7embedding_bag with scale_grad_by_freq for training moder   zembedding_bag with padding_idxzžExport of embedding_bag with dynamic input/offsets shape is not supported in opset 10. Please use opset 11 or higher to export model for dynamic input shape.'rM   rF   rI   ÚConcatÚaxis_irŠ   ZGatherZMul)Zaxes_iZ
keepdims_iZ
ReduceMeanZ	ReduceMaxziembedding_bag with unknown shape of offsets for opset 10 is not supported. please use opset 11 or higher.)rÌ   )rÌ   )r   Zexport_trainingr   Z_onnx_unsupportedÚRuntimeErrorÚwarningsÚwarnZ_get_tensor_dim_sizerQ   rR   rS   ÚsysÚmaxsizer™   r¼   r:   ÚselectZ_is_noneZ_reducesum_helperÚappend)r7   Zembedding_matrixr‹   ÚoffsetsZscale_grad_by_freqr±   ÚsparseZper_sample_weightsZinclude_last_offsetZpadding_idxZoffsets_dim_0Z
offset_lenZoffsets_extendedÚlist_rY   Zstart_Úend_Zaxes_Zindices_rowZ
embeddingsZper_sample_weights_rowÚoutputr@   r@   rA   r   Y  sŒ    
ÿÿ
þý   ÿû    ÿ  ÿ
   ÿ
ÿz%aten::fake_quantize_per_tensor_affineé€ÿÿÿé   c              	   C  sÀ   ||fdkrt  dddd|¡ ||fdkrDt d|› d|› d	|¡‚t  |¡}|d krht  dddd
|¡ | ¡ j}|dkr| jd|tj	j
d}n| jd|tj	jd}|  d|  d|||¡||¡S )N)r   rÛ   r   r4   é   z=Quantize range (0, 127) not supported, requires opset 13 Clip))r   éÿ   )rÚ   rÛ   zLFor (quant_min, quant_max), ONNX allows only (0, 255) and (-128, 127). Got (z, ú)z Non-constant scale not supportedr   ÚCast©Zto_iZDequantizeLinearZQuantizeLinear)r   Z _onnx_opset_unsupported_detailedr   r½   rª   ÚfloatÚdatarQ   Ú_C_onnxÚTensorProtoDataTypeZUINT8ZINT8)r7   ÚinputsÚscaleÚ
zero_pointZ	quant_minZ	quant_maxr@   r@   rA   r   °  s@    ûý
û
üzaten::isinfc                 C  s   |   d| j d|tjjd¡S )NZIsInfrß   rà   )rQ   rã   rä   ZDOUBLE©r7   r–   r@   r@   rA   r   á  s    zaten::isfinitec                 C  s,   t | |ƒ}t | |¡}t | t | ||¡¡S ©N)r   r:   ÚisnanZ__not_Z__or_)r7   r–   Zinf_nodeZnan_noder@   r@   rA   r   ç  s    
zaten::quantize_per_tensorc                 C  sL   t  |dd¡}| jd|t |¡ ¡ d}| jd|tjjd}t  	| |||¡S )NrY   rH   rß   rà   )
r   Z
_get_constrQ   r
   ÚJitScalarTypeZ	onnx_typerã   rä   ÚFLOATÚquantize_helper)r7   r–   ræ   rç   rH   r@   r@   rA   r   ï  s      ÿzaten::dequantizec                 C  s   t  | |¡d S r8   ©r   Údequantize_helperrè   r@   r@   rA   r   û  s    zaten::nan_to_numÚfc                 C  s.  t  |¡s|S tj |¡ ¡ }|d kr*d}t | |¡}|  d|| jdt	j
|g|dd|¡}t	 |¡}|d krt|j}t | t| |ƒt | || jdt	 dg¡d¡¡}	|  d|	| jdt	j
|g|dd|¡}
|d krØ|j}t | t| |
ƒt | |
| jdt	 dg¡d¡¡}|  d|| jdt	j
|g|dd|
¡S )Nç        rO   rF   rG   rI   r   )r   rP   r
   rë   Ú
from_valuerH   r:   rê   rQ   rR   rS   ÚfinfoÚmaxÚlogical_andr   ÚgtZ
LongTensorÚminÚlt)r7   r–   ÚnanZposinfZneginfZinput_dtypeZnan_condZ
nan_resultró   Zposinf_condZnan_posinf_resultZneginf_condr@   r@   rA   r     sV    
ü	
ýü  ÿýüzquantized::linearc                 C  sl   t  | |¡\}}}}t  | |¡\}	}
}}t  | |||
¡}t  | |¡\}}}}t | ||	|¡}t  | |||¡S ré   )r   rï   Úrequantize_bias_helperr:   r§   rí   ©r7   Úq_inputÚq_weightÚbiasÚop_scaleÚop_zero_pointr–   Úinput_scaler{   ÚweightÚweight_scaleÚq_biasrÙ   r@   r@   rA   r-   :  s    zquantized::linear_reluc                 C  sx   t  | |¡\}}}}t  | |¡\}	}
}}t  | |||
¡}t  | |¡\}}}}t | ||	|¡}t | |¡}t  | |||¡S ré   )r   rï   rú   r:   r§   Úrelurí   rû   r@   r@   rA   r.   I  s    zquantized::addc                 C  sF   t  | |¡\}}}}t  | |¡\}}}}t | ||¡}t  | |||¡S ré   )r   rï   r:   Úaddrí   ©r7   ÚxÚyrÿ   r   r{   rÙ   r@   r@   rA   r   Y  s    zquantized::add_reluc                 C  sR   t  | |¡\}}}}t  | |¡\}}}}t | ||¡}t | |¡}t  | |||¡S ré   )r   rï   r:   r  r  rí   r  r@   r@   rA   r   d  s
    zquantized::mulc                 C  sF   t  | |¡\}}}}t  | |¡\}}}}t | ||¡}t  | |||¡S ré   )r   rï   r:   Úmulrí   r  r@   r@   rA   r/   p  s    zquantized::hardswishc                 C  s0   t  | |¡\}}}}t | |¡}t  | |||¡S ré   )r   rï   r:   Z	hardswishrí   ©r7   r  rÿ   r   r{   rÙ   r@   r@   rA   r)   {  s    zquantized::sigmoidc                 C  s0   t  | |¡\}}}}t | |¡}t  | |||¡S ré   )r   rï   r:   Zsigmoidrí   r  r@   r@   rA   r0   …  s    zquantized::leaky_reluc                 C  s4   t  | |¡\}}}}t | |||¡}t  | |||¡S ré   )r   rï   r:   Z
leaky_relurí   )r7   r  Znegative_slopeZinplacerÿ   r   r{   rÙ   r@   r@   rA   r,     s    zquantized::layer_normc           
   	   C  s:   t  | |¡\}}}}t | |||||d¡}	t  | |	||¡S ©NF)r   rï   r:   Z
layer_normrí   )
r7   r  Znormalized_shaper  rþ   Úepsrÿ   r   r{   rÙ   r@   r@   rA   r+   ›  s    zquantized::group_normc           
   	   C  s:   t  | |¡\}}}}t | |||||d¡}	t  | |	||¡S r  )r   rï   r:   Z
group_normrí   )
r7   r  Z
num_groupsr  rþ   r  rÿ   r   r{   rÙ   r@   r@   rA   r(   ®  s    zquantized::instance_normc           
      C  s@   t  | |¡\}}}}t | |||d d dd|d¡
}	t  | |	||¡S )NFrñ   )r   rï   r:   Zinstance_normrí   )
r7   rü   r  rþ   r  rÿ   r   r–   r{   rÙ   r@   r@   rA   r*   Á  s             ÿzquantized::conv1d_reluc
              
   C  s€   t  | |¡\}
}}}t  | |¡\}}}}t  | |||¡}t  | |¡\}}}}t | |
||||||¡}t | |¡}t  | |||	¡S ré   )r   rï   rú   r:   Úconv1dr  rí   ©r7   rü   rý   rþ   r   r€   r   Úgroupsrÿ   r   r–   r  r{   r  r  r  rÙ   r@   r@   rA   r   Ö  s    zquantized::conv2d_reluc
              
   C  s€   t  | |¡\}
}}}t  | |¡\}}}}t  | |||¡}t  | |¡\}}}}t | |
||||||¡}t | |¡}t  | |||	¡S ré   )r   rï   rú   r:   Úconv2dr  rí   r  r@   r@   rA   r    ï  s    zquantized::conv3d_reluc
              
   C  s€   t  | |¡\}
}}}t  | |¡\}}}}t  | |||¡}t  | |¡\}}}}t | |
||||||¡}t | |¡}t  | |||	¡S ré   )r   rï   rú   r:   Úconv3dr  rí   r  r@   r@   rA   r!     s    zquantized::conv1dc
              
   C  st   t  | |¡\}
}}}t  | |¡\}}}}t  | |||¡}t  | |¡\}}}}t | |
||||||¡}t  | |||	¡S ré   )r   rï   rú   r:   r  rí   r  r@   r@   rA   r"   !  s    zquantized::conv2dc
              
   C  st   t  | |¡\}
}}}t  | |¡\}}}}t  | |||¡}t  | |¡\}}}}t | |
||||||¡}t  | |||	¡S ré   )r   rï   rú   r:   r  rí   r  r@   r@   rA   r#   9  s    zquantized::conv3dc
              
   C  st   t  | |¡\}
}}}t  | |¡\}}}}t  | |||¡}t  | |¡\}}}}t | |
||||||¡}t  | |||	¡S ré   )r   rï   rú   r:   r  rí   r  r@   r@   rA   r$   Q  s    zquantized::conv_transpose1dc                 C  sv   t  | |¡\}}}}t  | |¡\}}}}t  | |||¡}t  | |¡\}}}}t | ||||||||¡	}t  | ||	|
¡S ré   ©r   rï   rú   r:   Zconv_transpose2drí   ©r7   rü   rý   rþ   r   r€   Zoutput_paddingr   r  rÿ   r   r–   r  r{   r  r  r  rÙ   r@   r@   rA   r%   i  s             ÿzquantized::conv_transpose2dc                 C  sv   t  | |¡\}}}}t  | |¡\}}}}t  | |||¡}t  | |¡\}}}}t | ||||||||¡	}t  | ||	|
¡S ré   r  r  r@   r@   rA   r&   „  s             ÿzquantized::conv_transpose3dc                 C  sv   t  | |¡\}}}}t  | |¡\}}}}t  | |||¡}t  | |¡\}}}}t | ||||||||¡	}t  | ||	|
¡S ré   )r   rï   rú   r:   Zconv_transpose3drí   r  r@   r@   rA   r'   Ÿ  s             ÿzquantized::cat)r7   Úq_inputsr\   rÿ   r   rj   c                   s@   t  |¡}‡ fdd„|D ƒ}ˆ jd|žd|iŽ}t  ˆ |||¡S )Nc                   s   g | ]}t  ˆ |¡d  ‘qS )r   rî   )r—   r–   r6   r@   rA   r˜   Å  s    z!quantized_cat.<locals>.<listcomp>rÌ   rÍ   )rÌ   )r   Z_unpack_listrQ   rí   )r7   r  r\   rÿ   r   Zunpacked_inputsZdequantizedZconcatenatedr@   r6   rA   r   º  s    


ÿ)N)N)N)rÚ   rÛ   )QÚ
__future__r   Ú	functoolsrÑ   rÏ   Útypingr   r   r   r   r   rR   Ztorch._C._onnxr   Z_onnxrã   Z
torch.onnxr	   r
   r   r   r   r:   Ztorch.onnx._globalsr   Ztorch.onnx._internalr   r   r   Ú__all__ÚpartialZonnx_symbolicZ_onnx_symbolicr£   r   r   r<   rE   r2   r3   r|   r†   r   Z_apply_paramsrž   rŸ   r¤   r¯   r²   rÄ   r1   r   r   r   r   r   r   r   r   r   r-   r.   r   r   r/   r)   r0   r,   r+   r(   r*   r   r    r!   r"   r#   r$   r%   r&   r'   r   r@   r@   r@   rA   Ú<module>   s   Þ&(+$8þþþýÿþ
ýÿþ
ýÿþ
 . þþþ!þþþþþþ ú:
T  ú.
6	
	
