U
    9%ez                  !   @  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
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(g!Zejej d)d*Z!d+d, Z"e!d-ej#d.d/d0d	Z$e%d1d1d2ej#d.d/d3d4Z&e!d5ej#d.d/d6d7Z'e!d8e%d1d9d9d:ej#dd.d/d;d'Z(e!d<e%d1d1d9d9d9d:ej#dd.d/d=d(Z)e!d>e"d?ej*j+j,j-d@dAdBgdCe!dDe"dEej*j+j,j.dFdAdBgdCe!dGe"dHej*j+j,j/dIdAdBgdCe!dJe"dKej*j+j,j-d@dLdBgdCe!dMe"dNej*j+j,j.dFdLdBgdCe!dOe"dPej*j+j,j/dIdLdBgdCej#dQdRdSdTdUdVdWZ0dSdXdXdXdYdZd[d\Z1e!d]e"d^d@gdCe!d_e"d`dFgdCe!dae"dbdIgdCej#dcdd Z2e!dee"dfdIdggdCe!dhe"didjdggdCe!dke"dldmdggdCe!dne"dodIdpgdCe!dqe"drdjdpgdCe!dse"dtdmdpgdCej#dudv Z3e!dwej#d.d/dxdyZ4ej#dd.dzd{d{d{d|d}d~dZ5e!dej#d.d/dd&Z6e!de%d1dej#d.d/ddZ7e!dej#d.d/ddZ8e!de%d1d1d1d9d9d9d1d9d9	ej#d.d/dd
Z9e!de%d1d1d1d9d9ej#dd.d/ddZ:e!dej#d.d/ddZ;e!dej#d.d/ddZ<e!dej#d.d/ddZ=e!dej#d.d/ddZ>e!de%d1dddej#d.d/ddZ?e!dej#d.d/dd#Z@e!dej#d.d/ddZAe!dej#d.d/ddZBe!dej#d.d/dd$ZCe!dej#d.d/ddZDe!dej#d.d/dd%ZEe!dej#d.d/dd"ZFe!dej#d.d/dd!ZGe!dej#d.d/ddZHe!de%d1d1d1dd1d1ej#d.d/dd ZIe!dej#d.d/ddZJe!dej#d.d/ddZKe!dej#d.d/ddZLe!dej#d.d/ddZMe!dej#d.d/ddZNe!dej#d.d/ddZOe!dej#d.d/ddZPe!dej#d.d/ddZQe!dej#d.d/ddZRe!de%d1d9d1d1ej#d.ddSddddddZSdS )    )annotationsN)Callable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_mulquantized_sigmoidslicesorttopk
   )Zopsetc                    s    fdd}|S )z_Returns a decorator that calls the decorated (higher-order) function with the given parameters.c                   s
   |  S N )fnargskwargsr6   Z/var/www/html/Darija-Ai-API/env/lib/python3.8/site-packages/torch/onnx/symbolic_opset10.py_applyK   s    z_apply_params.<locals>._applyr6   )r9   r:   r<   r6   r8   r;   _apply_paramsH   s    r=   z	aten::divz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)r?   selfotherr9   r6   r6   r;   r   Q   s    vsc                 C  s(   |dkrt | ||S t| |||S d S )Nfloor)_floor_dividerB   rD   )r?   rE   rF   Zrounding_moder6   r6   r;   rD   Z   s    rD   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FloorDivConstantr   dtypeZvalue_tZXorZLessModZfmod_iAndNotZEqual   SubWhere)r   _is_fprB   rC   optorchtensorZint64)r?   rE   rF   outr   zeronegativemodZ
fixup_maskonefixupr6   r6   r;   rJ   c   s    " rJ   z
aten::sortinonec                 C  s   t j| ||||dS )N)	decendingr[   )r   Z_sort_helper)r?   rE   dimrc   r[   r6   r6   r;   r2   y   s    z
aten::topkc              	   C  s   t j| ||||||dS )N)largestsortedr[   )r   Z_topk_helper)r?   rE   krd   re   rf   r[   r6   r6   r;   r3      s          zaten::max_pool1dZ
max_pool1drT   F)return_indices)Zdecoratezaten::max_pool2dZ
max_pool2d   zaten::max_pool3dZ
max_pool3d   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strr   intbool)nametuple_fnndimsrh   c              	     s<   t ddddddt dddddd fdd}|S )NTFrG   isra   c                   s@  |s|}t |}|rFt||||}|t dd t||D  }n|d }|||dd}t|dhkr||d< r | jd|fd	di|\}	}
| jd|dd
d t D dd t D d\}}tj| |dd t D t	dt	dd}t
| |
|}
|	|
fS | jd|fd	di|}	|	S d S )Nc                 s  s   | ]\}}|| V  qd S r5   r6   ).0abr6   r6   r;   	<genexpr>   s     z1_max_pool.<locals>.symbolic_fn.<locals>.<genexpr>ri   r   )kernel_shape_ipads_i	strides_iceil_mode_irT   Zdilations_iZMaxPooloutputsc                 S  s   g | ]}d qS rT   r6   rr   _r6   r6   r;   
<listcomp>   s     z2_max_pool.<locals>.symbolic_fn.<locals>.<listcomp>c                 S  s   g | ]}d qS r{   r6   r|   r6   r6   r;   r~      s     )rz   rv   rx   c                 S  s   g | ]}d | qS )ri   r6   )rr   ra   r6   r6   r;   r~      s     )axesstartsends)tuplerB   Zget_pool_ceil_paddingzipsetrX   ranger   _slice_helperlistsub)r?   inputkernel_sizestridepaddingdilation	ceil_modeZpadding_ceilr:   rindicesr}   Zflattened_indicesrH   rp   rh   ro   r6   r;   symbolic_fn   sN       


z_max_pool.<locals>.symbolic_fn)r   quantized_args
parse_args)rn   ro   rp   rh   r   r6   r   r;   	_max_pool   s    ;7r   zUnion[Sequence[int], int]z2Tuple[Sequence[int], Sequence[int], Sequence[int]])expand_sizer   r   r   returnc                 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 )z:Adjust attributes of avg_pool to match ONNX specification.ri   rT   )
isinstancerl   rA   )r   r   r   r   kernel_shapepadsstridesr6   r6   r;   _adjust_attributes_of_avg_pool  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 )NTFrG   rq   ra   rb   _C.ValuezSequence[int]zUnion[int, Sequence[int]]rl   )r   r   r   r   r   count_include_padc              	     s0   t  |||\}}	}
| jd|||||
|	d}|S )NZAveragePool)ry   Zcount_include_pad_irv   rw   rx   )r   rX   )r?   r   r   r   r   r   r   Zdivisor_overrider   r   r   resultr   r6   r;   r   /  s        

z_avg_pool.<locals>.symbolic_fn)N)r   r   r   r   beartype)rn   r   r   r6   r   r;   	_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_scalesrX   )r?   r   Zoutput_sizer9   scalesalign_cornersrd   interpolate_modern   r6   r;   r   i  s"      

   z!_interpolate.<locals>.symbolic_fn)r   r   r   r   )rn   rd   r   r   r6   r   r;   _interpolateO  s    r   zaten::__interpolatec           	      C  s*   t | |||||\}}| jd|||dS )Nr   r   )r   Z _interpolate_get_scales_and_moderX   )	r?   r   sizeZscale_factormoder   Zrecompute_scale_factorZ	antialiasr   r6   r6   r;   __interpolate|  s         r   ztorch._C.Valuez)Union[List, torch.Tensor, torch._C.Value]z3Optional[Union[List, torch.Tensor, torch._C.Value]])r?   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   rY   r	   ValuenodekindtypeZNoneType)valuer6   r6   r;   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 )NrL   rO   r   rT   zRank must be 0 or 1, not )r   r   rY   TensorrX   rZ   r   Z_get_tensor_rank_unsqueeze_helperr   SymbolicValueError)list_or_valuedefault_valueZrankr?   r   r6   r;   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 )NrT   r   ra   )r   r   rY   r   rA   r   Z_maybe_get_const)r   r6   r6   r;   get_const_value  s
    z_slice.<locals>.get_const_valuer   rT   )r   Slice)N)r
   	INT64_MAXrX   )r?   r   r   r   r   r   r   r   r6   r   r;   _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   rj   r   zUnknown aten::slice signaturer   r   r   r   )rA   r   r   r   r   )r?   rE   r9   dimsstartendstepr6   r6   r;   r1     s    
z
aten::fliprq   c              	   C  s8   t j| ||dgt| tj gt| dgt| dS )Nr   )r   r   rA   r
   r   )r?   r   r   r6   r6   r;   r     s    z
aten::fmodc                 C  s   | j d||ddS )NrP   rT   rQ   )rX   )r?   r   rF   r6   r6   r;   r     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rt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_idxzExport 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.'rT   rL   rO   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_sizerX   rY   rZ   sysmaxsizer   r   rB   selectZ_is_noneZ_reducesum_helperappend)r?   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_ra   Zstart_end_Zaxes_Zindices_rowZ
embeddingsZper_sample_weights_rowoutputr6   r6   r;   r     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datarX   _C_onnxTensorProtoDataTypeZUINT8ZINT8)r?   inputsscale
zero_pointZ	quant_minZ	quant_maxr6   r6   r;   r   K  s@    

zaten::isinfc                 C  s   |  d| j d|tjjdS )NZIsInfr   r   )rX   r   r   DOUBLEr?   r   r6   r6   r;   r   |  s    zaten::isfinitec                 C  s,   t | |}t| |}t| t| ||S r5   )r   rB   isnanZ__not_Z__or_)r?   r   Zinf_nodeZnan_noder6   r6   r;   r     s    
zaten::quantize_per_tensorc                 C  sL   t |dd}| jd|t| d}| jd|tjjd}t 	| |||S )Nra   rN   r   r   )
r   Z
_get_constrX   r   JitScalarTypeZ	onnx_typer   r   FLOATquantize_helper)r?   r   r   r   rN   r6   r6   r;   r     s      zaten::dequantizec                 C  s   t | |d S r@   r   dequantize_helperr   r6   r6   r;   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        rV   rL   rM   rO   r   )r   rW   r   r   
from_valuerN   rB   r   rX   rY   rZ   finfomaxlogical_andr   gtZ
LongTensorminlt)r?   r   nanZposinfZneginfZinput_dtypeZnan_condZ
nan_resultr   Zposinf_condZnan_posinf_resultZneginf_condr6   r6   r;   r     sV    
	
  zquantized::linearc                 C  sl   t | |\}}}}t | |\}	}
}}t | |||
}t | |\}}}}t| ||	|}t | |||S r5   )r   r   requantize_bias_helperrB   r   r   )r?   q_inputq_weightbiasop_scaleop_zero_pointr   input_scaler}   weightweight_scaleq_biasr   r6   r6   r;   r.     s    zquantized::addc                 C  sF   t | |\}}}}t | |\}}}}t| ||}t | |||S r5   )r   r   rB   addr   r?   xyr   r   r}   r   r6   r6   r;   r     s    zquantized::add_reluc                 C  sR   t | |\}}}}t | |\}}}}t| ||}t| |}t | |||S r5   )r   r   rB   r  relur   r  r6   r6   r;   r     s
    zquantized::mulc                 C  sF   t | |\}}}}t | |\}}}}t| ||}t | |||S r5   )r   r   rB   mulr   r  r6   r6   r;   r/     s    zquantized::hardswishc                 C  s0   t | |\}}}}t| |}t | |||S r5   )r   r   rB   Z	hardswishr   r?   r  r   r   r}   r   r6   r6   r;   r*     s    zquantized::sigmoidc                 C  s0   t | |\}}}}t| |}t | |||S r5   )r   r   rB   Zsigmoidr   r  r6   r6   r;   r0     s    zquantized::leaky_reluc                 C  s4   t | |\}}}}t| |||}t | |||S r5   )r   r   rB   Z
leaky_relur   )r?   r  Znegative_slopeZinplacer   r   r}   r   r6   r6   r;   r-     s    zquantized::layer_normc           
   	   C  s:   t | |\}}}}t| |||||d}	t | |	||S NF)r   r   rB   Z
layer_normr   )
r?   r  Znormalized_shaper   r   epsr   r   r}   r   r6   r6   r;   r,   &  s    zquantized::group_normc           
   	   C  s:   t | |\}}}}t| |||||d}	t | |	||S r  )r   r   rB   Z
group_normr   )
r?   r  Z
num_groupsr   r   r	  r   r   r}   r   r6   r6   r;   r)   9  s    zquantized::instance_normc           
      C  s@   t | |\}}}}t| |||d d dd|d
}	t | |	||S )NFr   )r   r   rB   Zinstance_normr   )
r?   r   r   r   r	  r   r   r   r}   r   r6   r6   r;   r+   L  s             zquantized::conv1d_reluc
              
   C  s   t | |\}
}}}t | |\}}}}t | |||}t | |\}}}}t| |
||||||}t| |}t | |||	S r5   )r   r   r   rB   conv1dr  r   r?   r   r   r   r   r   r   groupsr   r   r   r   r}   r   r   r   r   r6   r6   r;   r    a  s    zquantized::conv2d_reluc
              
   C  s   t | |\}
}}}t | |\}}}}t | |||}t | |\}}}}t| |
||||||}t| |}t | |||	S r5   )r   r   r   rB   conv2dr  r   r  r6   r6   r;   r!   z  s    zquantized::conv3d_reluc
              
   C  s   t | |\}
}}}t | |\}}}}t | |||}t | |\}}}}t| |
||||||}t| |}t | |||	S r5   )r   r   r   rB   conv3dr  r   r  r6   r6   r;   r"     s    zquantized::conv1dc
              
   C  st   t | |\}
}}}t | |\}}}}t | |||}t | |\}}}}t| |
||||||}t | |||	S r5   )r   r   r   rB   r
  r   r  r6   r6   r;   r#     s    zquantized::conv2dc
              
   C  st   t | |\}
}}}t | |\}}}}t | |||}t | |\}}}}t| |
||||||}t | |||	S r5   )r   r   r   rB   r  r   r  r6   r6   r;   r$     s    zquantized::conv3dc
              
   C  st   t | |\}
}}}t | |\}}}}t | |||}t | |\}}}}t| |
||||||}t | |||	S r5   )r   r   r   rB   r  r   r  r6   r6   r;   r%     s    zquantized::conv_transpose1dc                 C  sv   t | |\}}}}t | |\}}}}t | |||}t | |\}}}}t| ||||||||	}t | ||	|
S r5   r   r   r   rB   Zconv_transpose2dr   r?   r   r   r   r   r   Zoutput_paddingr   r  r   r   r   r   r}   r   r   r   r   r6   r6   r;   r&     s             zquantized::conv_transpose2dc                 C  sv   t | |\}}}}t | |\}}}}t | |||}t | |\}}}}t| ||||||||	}t | ||	|
S r5   r  r  r6   r6   r;   r'     s             zquantized::conv_transpose3dc                 C  sv   t | |\}}}}t | |\}}}}t | |||}t | |\}}}}t| ||||||||	}t | ||	|
S r5   )r   r   r   rB   Zconv_transpose3dr   r  r6   r6   r;   r(   *  s             zquantized::catr   )r?   q_inputsrd   r   r   r   c                   s@   t |} fdd|D } jd|d|i}t  |||S )Nc                   s   g | ]}t  |d  qS )r   r   )rr   r   r>   r6   r;   r~   P  s    z!quantized_cat.<locals>.<listcomp>r   r   )r   )r   Z_unpack_listrX   r   )r?   r  rd   r   r   Zunpacked_inputsZdequantizedZconcatenatedr6   r>   r;   r   E  s    


)N)N)N)r   r   )T
__future__r   	functoolsr   r   typingr   r   r   r   r   r   rY   Ztorch._C._onnxr	   Z_onnxr   Z
torch.onnxr
   r   r   r   r   rB   Ztorch.onnx._globalsr   Ztorch.onnx._internalr   r   r   __all__partialZonnx_symbolicZ_onnx_symbolicr=   r   r   r   rD   rJ   r2   r3   nnmodulesutilsZ_singleZ_pairZ_tripler   r   r   r   r   r   r1   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   r6   r6   r6   r;   <module>   s   %	 
   
   
  


"> 


! :
T  .
6	
	
