o
    2h9                     @   s  d dl m  mZ d dlmZ d dlmZ d dlm	Z	 d dlm
Z
 dd Zdd	 Zd
d Zdd Zdd Zdd Zdd Zdd Zd\ddZdd Zdd Zd]ddZd d! Zd^d#d$Zd_d&d'Zd_d(d)Z		*	d`d+d,Z		*	d`d-d.Zd/d0 Zd1d2 Zd3d4 Zd5d6 Z d7d8 Z!d9d: Z"	;	*		;dad<d=Z#	;	*		;dad>d?Z$	;	*		;dad@dAZ%	;	*			;dbdBdCZ&dcdEdFZ'dcdGdHZ(dddIdJZ)dddKdLZ*dedMdNZ+dfdOdPZ,	QdgdRdSZ-dhdTdUZ.	V	W	;	"	 didXdYZ/dZd[ Z0dS )j    N)Type)backend)OpenVINOKerasTensor)get_ov_outputc                 C      t | } tt| dS Nr   )r   r   ov_opsetreluoutputx r   X/var/www/html/chatgem/venv/lib/python3.10/site-packages/keras/src/backend/openvino/nn.pyr	   	      r	   c                 C   s    t | } tt| dddS )Ng        g      @r   )r   r   r   clampr
   r   r   r   r   relu6   s   r   c                 C   r   r   )r   r   r   sigmoidr
   r   r   r   r   r      r   r   c                 C   r   r   )r   r   r   tanhr
   r   r   r   r   r      r   r   c                 C   r   r   )r   r   r   softplusr
   r   r   r   r   r      r   r   c                 C   r   r   )r   r   r   softsignr
   r   r   r   r   r   "   r   r   c                 C   s$   t | } tt| t| dS r   )r   r   r   multiplyr   r
   r   r   r   r   silu'   s   r   c                 C      t d)Nz4`log_sigmoid` is not supported with openvino backendNotImplementedErrorr   r   r   r   log_sigmoid.      r   皙?c                 C   s8   t | } t||  d}t| |d}t|S r   )r   r   constantget_element_typer
   prelur   )r   negative_slopeslope_const
leaky_relur   r   r   r#   4   s   r#   c                 C   s<   t | } t d|  }t d|  }tt| ||dS )NgUUUUUU?g      ?r   )r   r   r   r   hard_sigmoidr
   )r   alphabetar   r   r   r$   =   s   r$   c                 C   s*   t t| }t | } tt| |dS r   )r   r$   r   r   r   r
   )r   hard_sigmoid_outputr   r   r   	hard_siluD   s
   r(         ?c                 C   s   t | } tt| |dS r   )r   r   r   elur
   )r   r%   r   r   r   r*   L   s   r*   c                 C   sD   d}d}t | } t ||  }t ||  }tt| ||dS )Ng,x?g2֫?r   )r   r   r   r   selur
   )r   r%   scaler   r   r   r+   Q   s   r+   Tc                 C   s*   t | } d}|r
d}tt| |dS )Nerfr   r   )r   r   r   gelur
   )r   approximateapproximate_moder   r   r   r.   Z   s
   r.   c                 C      t | } |d u r7t| }tdgtjd}t| |dd}t|dd}t	t||ddS t	t| |dS Nr1   r   F)
r   r   shape_ofr   r   i32r
   reshapesoftmaxr   )r   axisx_shapeflatten_shape	flatten_x	softmax_xr   r   r   r7   b      
r7   c                 C   r2   r3   )
r   r   r4   r   r   r5   r
   r6   log_softmaxr   )r   r8   r9   r:   r;   log_softmax_xr   r   r   r>   o   r=   r>   validc                 C   r   )Nz1`max_pool` is not supported with openvino backendr   inputs	pool_sizestridespaddingdata_formatr   r   r   max_pool|      rG   c                 C   r   )Nz5`average_pool` is not supported with openvino backendr   rA   r   r   r   average_pool   rH   rI   c                 C   s$   t | tr
| f| n| } t| } | S )N)
isinstanceintlist)r   num_spatial_dimsr   r   r   _adjust_strides_dilation   s   rN   c                 C   s   t | tr	|  n| } | dkrdg g fS | dkrdg g fS | dkr&dg g fS g }g }| D ]}||d  ||d  q,d	||fS )
Nsame
SAME_UPPER
same_lower
SAME_LOWERr@   VALIDr      EXPLICIT)rJ   strlowerappend)rE   
pads_beginpads_endpadding_pairr   r   r   _adjust_padding   s   



r\   c                 C   X   |dkr| S |dkrg d}n|dkrg d}ng d}t |tj}t | |dS )Nchannels_firstrT   r      rT   r`   )r      rT   r`   )r      rT   r`   ra   r   r   r   r   r5   	transposer
   )rB   rM   rF   permutationr   r   r   _adjust_input   s   

rf   c                 C   L   |dkr	g d}n|dkrg d}ng d}t |tj}t | |dS )NrT   )r`   rT   r   r`   )ra   r`   r   rT   )rb   ra   r   rT   r`   r   rc   kernelrM   re   r   r   r   _adjust_kernel   s   

rj   c                 C   rg   )NrT   )rT   r`   r   r`   )r`   ra   r   rT   )ra   rb   r   rT   r`   r   rc   rh   r   r   r   _adjust_depthwise_kernel   s   

rk   c                 C   r]   )Nr^   rT   r_   r`   )r   r`   ra   rT   )r   r`   ra   rb   rT   r   rc   )outputsrM   rF   re   r   r   r   _adjust_outputs   s   

rm   rT   c              	   C   s  t | } t |}t|}|  j d }|dkr%|  d| d  }n|  d }| d }t||}t||}t|\}	}
}t| ||} t	||}| |  }|dkret
| |||
|||	}nt
| d}t
|d}t
dgtjd}t
dgtjd}t
dgtjd}t
||||d}t
||||d}t
||d}t
dgtjd}t
||||d}t
||d}t
||||d}t
|||gdd}t
||dd}t
| |||
|||	}t|d||}t|S )Nr`   channels_lastrT   r   iF)r   r   standardize_data_formatget_partial_shaperank
get_lengthrN   r\   rf   rj   r   convolutionr4   r
   r   r   r5   slicedivideconcatr6   group_convolutionrm   r   )rB   ri   rD   rE   rF   dilation_raterM   inputs_in_channelskernel_in_channelspad_moderY   rZ   
num_groupsconvinput_shapefilter_shape
zero_const	one_const	two_const	input_cin
filter_cinint_max_constfilter_coutfilter_new_coutshape_cin_xyfilter_new_shape
new_filterr   r   r   r~      s   






	r~   c              	   C   s   t | } t |}t|}|  j d }|dksJ dt||}t||}t|\}}}	t| ||} t	||}t
dgtj}
t
||
}t
| ||||	||}t|d||}t|S )Nr`   rn   z@`depthwise_conv` is supported only for channels_last data_formatr   )r   r   rp   rq   rr   rs   rN   r\   rf   rk   r   r   r   r5   	unsqueezerx   rm   r
   r   )rB   ri   rD   rE   rF   ry   rM   r|   rY   rZ   unsqueeze_dim
group_convr   r   r   depthwise_conv8  s*   




r   c                 C   r   )Nz7`separable_conv` is not supported with openvino backendr   )rB   depthwise_kernelpointwise_kernelrD   rE   rF   ry   r   r   r   separable_conv\     	r   c                 C   r   )Nz7`conv_transpose` is not supported with openvino backendr   )rB   ri   rD   rE   output_paddingrF   ry   r   r   r   conv_transposej  r   r   Fc                 C   r   )Nz0`one_hot` is not supported with openvino backendr   r   num_classesr8   dtypesparser   r   r   one_hotx  r   r   c                 C   r   )Nz2`multi_hot` is not supported with openvino backendr   r   r   r   r   	multi_hot~  r   r   c                 C   r   )NzA`categorical_crossentropy` is not supported with openvino backendr   targetr
   from_logitsr8   r   r   r   categorical_crossentropy  r   r   c                 C   r   )NzH`sparse_categorical_crossentropy` is not supported with openvino backendr   r   r   r   r   sparse_categorical_crossentropy  r   r   c                 C   r   )Nz<`binary_crossentropy` is not supported with openvino backendr   )r   r
   r   r   r   r   binary_crossentropy  r   r   c           
      C   s   t | } t|tjd}t| ||d}td|  d}t| |d}t||d}t|||}t	|}t	t
||d}	||	fS )Nr   r`   )r   r   r   r   r5   r
   reduce_meanr   powerr   subtract)
r   axeskeepdimssynchronizedmean	const_two	squared_xsquared_meansquared_x_meanvariancer   r   r   moments  s   r   MbP?c                 C   sl  t | } t |}t |}|d urt |}nt|}| }tdg|}	t|	|}|d ur4t |}nt|}| }tdg|}
t|
|}|  j }|dk rY||7 }|dkrt	t
d|}||d< d||< t|tjd}t| |d} t| |||||d}|dkrt	t
d|}||d< d||< t|tjd}t||d}t|S )Nr   rT   )r   r   r4   r   r   	broadcastrq   rr   rs   rL   ranger   r5   r
   rd   batch_norm_inferencer   )r   r   r   r8   offsetr,   epsilon
mean_shape	mean_typer   r   x_rankperm_vector
batch_normr   r   r   batch_normalization  sH   



r   c                 C   r   )Nz1`ctc_loss` is not supported with openvino backendr   )r   r
   target_lengthoutput_length
mask_indexr   r   r   ctc_loss  r   r   greedyd   c                 C   r   )Nz3`ctc_decode` is not supported with openvino backendr   )rB   sequence_lengthsstrategy
beam_width	top_pathsmerge_repeatedr   r   r   r   
ctc_decode  r   r   c                 C   r   )Nz-`psnr` is not supported with openvino backendr   )x1x2max_valr   r   r   psnr  s   r   )r   )r)   )T)r1   )Nr@   N)rT   r@   NrT   )rT   r@   NNrT   )r1   NF)Fr1   )F)FF)NNr   )r   )r   r   rT   Tr   )1openvino.runtime.opset14runtimeopset14r   openvinor   	keras.srcr   keras.src.backend.openvino.corer   r   r	   r   r   r   r   r   r   r   r#   r$   r(   r*   r+   r.   r7   r>   rG   rI   rN   r\   rf   rj   rk   rm   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s    
	

	




T
(









+	
