
    ij                        d dl Zd dlmZ d dlmZ d dlmc m	c mc m Z
 d dlm	Z	 d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ d	 Zd
 ZdFdZd Zd Zd Zd ZdGdZdGdZd Zd Zd Zd ZdHdZ d Z!d Z"d Z#dFdZ$d Z%dIdZ&dJdZ'dJdZ(dJdZ)dJd Z*dKd!Z+d" Z,d# Z-	 	 	 dLd$Z.	 	 	 dLd%Z/d& Z0d' Z1dMd(Z2dMd)Z3	 	 	 dLd*Z4d+ Z5d, Z6d- Z7d. Z8d/ Z9d0 Z:	 	 	 	 dNd1Z;	 	 	 	 dNd2Z<	 	 	 	 dNd3Z=	 	 	 	 	 dOd4Z>dPd5Z?dPd6Z@dQd7ZAdQd8ZBdRd9ZCdSd:ZD	 dTd;ZEdUd<ZF	 	 dVd=ZG	 	 	 dWd>ZH	 	 	 	 	 dXd?ZId@ ZJ	 	 	 	 	 	 dYdAZKdZdBZLdZdCZMd[dDZNd[dEZOy)\    N)Type)backend)"_get_output_shape_given_tf_padding)OPENVINO_DTYPES)OpenVINOKerasTensor)get_ov_output)ov_to_keras_typec                 r    t        |       } t        t        j                  |       j	                  d            S Nr   )r   r   ov_opsetreluoutputxs    r/var/www/html/emotional.easysim.app/public_html/venv/lib/python3.12/site-packages/keras/src/backend/openvino/nn.pyr   r      +    aAx}}Q/66q9::    c                 v    t        |       } t        t        j                  | dd      j	                  d            S )N        g      @r   r   r   r   clampr   r   s    r   relu6r      s/    aAx~~ac:AA!DEEr   c                 d   t        |       } t        d| j                               }t        || j                               }t        d| j                               }t        j                  t        j                  | |            j                  d      }t        j                  |t        j                  ||            }t        j                  t        j                  | |      j                  d      t        j                  ||      j                  d            }t        |j                  d            S )Nr         ?r   )r   get_element_typer   expdivider   multiplysubtractaddmaximumminimumr   )r   alpha
const_zeroconst_alpha	const_oneexp_x_div_alphanegative_branchcelu_xs           r   celur*      s    aAsA$6$6$89Jq'9'9';<Kc1#5#5#78Ill8??1k#BCJJ1MO''X&&	BO \\J'..q1*5<<Q?F v}}Q/00r   c                 r    t        |       } t        t        j                  |       j	                  d            S r   )r   r   r   sigmoidr   r   s    r   r,   r,   +   s-    aAx//299!<==r   c                 r    t        |       } t        t        j                  |       j	                  d            S r   )r   r   r   tanhr   r   s    r   r.   r.   0   r   r   c                     t        |       } t        t        j                  | t        j                  |             j                  d            S r   )r   r   r   r   r.   r   r   s    r   tanh_shrinkr0   5   s8    aAx00HMM!4DELLQOPPr   c                 v    t        |       } t        t        j                  | dd      j	                  d            S )N      r   r   r   r   s    r   	hard_tanhr3   :   s/    aAx~~as;BB1EFFr   c                 t   t        |       } | j                         }t        ||      }t        d|      }t        j                  |       }t        j                  ||      }t        j
                  ||      }t        j                  |       }t        j                  ||      }	t        |	j                  d            S Nr   r   )
r   r   r   absr   r!   signr   r   r   )
r   	thresholdetthrzeroabs_xsubshrunkr7   outs
             r   soft_shrinkr@   ?   s    aA	
			B
	2
&Cb!DLLOE


E3
'Cc4(F==D


D&
)Cszz!}--r   c                    t        |       } | j                         }t        ||      }t        d|      }t        j                  t        j                  |       |      }t        j
                  || |      }t        |j                  d            S r5   )r   r   r   greaterr6   selectr   r   )r   r8   r9   r:   r;   condr?   s          r   hard_shrinkrE   L   sq    aA	
			B
	2
&Cb!DHLLOS1D
//$4
(Cszz!}--r   c                 r    t        |       } t        t        j                  |       j	                  d            S r   )r   r   r   softplusr   r   s    r   rG   rG   V   -    aAx003::1=>>r   c                 r    t        |       } t        t        j                  |       j	                  d            S r   )r   r   r   softsignr   r   s    r   rJ   rJ   [   rH   r   c                     t        |       } t        d| j                               }t        t        j                  | |      j                  d            S )Nr   )betar   )r   r   r   r   swishr   )r   rL   s     r   silurN   `   sB    aAa0023Dx~~ad;BB1EFFr   c                     t        |       } t        j                  |       }t        t        j                  t        j                  |            j                  d            S r   )r   r   negativer   rG   r   )r   neg_xs     r   log_sigmoidrR   f   sM    aAa E(++E23::1= r   c                     t        |       } t        j                  || j                               j	                  d      }t        j
                  | |      j	                  d      }t        |      S r   )r   r   constantr   r   prelur   )r   negative_slopeslope_const
leaky_relus       r   rX   rX   n   s^    aA##**,fQi  ;/66q9Jz**r   c                 \   t        |       } | j                         }t        d|      }t        d|      }t        d|      }t        j                  t        j                  | |      |      }t        j
                  |t        j                  ||            }t        |j                  d            S )Nr   r2         ?r   )	r   r   r   r"   r!   r   r    r   r   )r   r9   oneneg_onehalfyr?   s          r   sparse_sigmoidr_   w   s    aA	
			B
R
 CD"%Gb!D))!W5s;A


D(,,q#"6
7Cszz!}--r   c                     t        |       } t        d| j                               }t        d| j                               }t        t        j                  | ||      j                  d            S )NgUUUUUU?rZ   r   )r   r   r   r   hard_sigmoidr   )r   r#   rL   s      r   ra   ra      s[    aA)Q%7%7%9:Ea0023Dx44QtDKKANOOr   c                 r    t        |       } t        t        j                  |       j	                  d            S r   )r   r   r   hswishr   r   s    r   	hard_silurd      s+    aAxq188;<<r   c                 t    t        |       } t        t        j                  | |      j	                  d            S r   )r   r   r   elur   )r   r#   s     r   rf   rf      s-    aAx||Au5<<Q?@@r   c                     d}d}t        |       } t        || j                               }t        || j                               }t        t        j                  | ||      j                  d            S )Ng,x?g2֫?r   )r   r   r   r   selur   )r   r#   scales      r   rh   rh      sc    -E-EaA%!3!3!56E%!3!3!56Ex}}Qu=DDQGHHr   c                     t        |       } d}|rd}t        t        j                  | |      j	                  d            S )Nerfr.   r   )r   r   r   gelur   )r   approximateapproximate_modes      r   rl   rl      s=    aA!x}}Q0@AHHKLLr   c                 (   t        |       } t        j                  | d|      }t        |d         }t        |d         }t        j                  |      j                  d      }t        j                  ||      }t        |j                  d            S )N   axisr      )r   onpsplitr   r,   r   r   r   )r   rr   half_splitsx1x2sig_x2results          r   glur{      s{    aA))Aqt,K	{1~	&B	{1~	&Bb!((+Fr6*Fv}}Q/00r   c                 @   t        |       } |t        j                  |       }t        j                  dgt        j
                        j                  d      }t        j                  | |d      j                  d      }t        j                  |d      j                  d      }t        t        j                  ||d      j                  d            S t        |t        t        f      r
|st        |       S t        j                  t        |      t        j
                        j                  d      }t        j                  | |d      j                  d      }t        j                  t        j                   | |      j                  d            j                  d      }t        j"                  ||d      j                  d      }	t        t        j$                  ||	      j                  d            S t        t        j                  | |      j                  d            S Nr   FT)r   r   shape_ofrT   r   i32r   reshapesoftmaxr   
isinstancetuplelistsorted
reduce_maxr   r   
reduce_sumr   )
r   rr   x_shapeflatten_shape	flatten_x	softmax_x
axes_constx_maxexp_xsum_exps
             r   r   r      s   aA|##A& ))2$9@@C$$Qu=DDQG	$$Y299!<	"Y7>>qA
 	
 $&&q))&&vd|TXX>EEaH
##Az48??BX..q%8??BCJJ1M%%eZ>EEaH"8??5'#B#I#I!#LMMx//48??BCCr   c                    t        |       } t        |t        t        f      r|st	        |       S |t        j                  |       }t        j                  dgt        j                        j                  d      }t        j                  | |d      j                  d      } t        j                  | d      j                  d      }t        j                  ||d      j                  d      }t	        |      S t        |t        t        f      r#t        |      }t        j                  |t        j                        j                  d      }t        j                  | |d      j                  d      }t        j                  | |      j                  d      }t        j                   t        j"                  |      j                  d      |d      j                  d      }	t        j                  |t        j$                  |	      j                  d            j                  d      }t	        |      S t	        t        j                  | |      j                  d            S r}   )r   r   r   r   r   r   r   rT   r   r   r   r   log_softmaxr   r   r   r   r   log)
r   rr   restore_shaper   rz   axesr   r   	x_shiftedr   s
             r   r   r      s   aA$&t"1%%| ))!, ))2$9@@CQu5<<Q?%%a+2215!!&-?FFqI"6**$&d|&&tTXX6==a@
##Az48??B%%a/66q9	%%LL#**1-z4

&) 	 ""x||G,33A6

&) 	 #6**x33At<CCAFGGr   c                 	   t        |       } | j                         }| j                         j                  j	                         }|dk  r||z   }t        j                  |       j                  d      }t        j                  t        t        j                  ||                  j                  d      }t        j                  |t        j                        j                  d      }t        j                  ||      j                  d      }| j                         |   j	                         }t        j                  t        j                  t        j                  dt        j                        j                  d      t        j                  |dz   t        j                        j                  d      t        j                  dt        j                        j                  d      t        j                        j                  d      |      j                  d      }	dg|z  }
d|
|<   t        j                   |	t        j                  |
t        j                        j                  d      d      j                  d      }	t        d|      }t        d|      }t        j"                  t        j$                  |t        j&                  t        j$                  ||      j                  d      |	      j                  d            j                  d      |      j                  d      }t        j                  |gt        j                        j                  d      }t        j(                  t        j                  ||      j                  d      |d	      j                  d      }t        j(                  t        j*                  |||      j                  d      |d	      j                  d      }t        j&                  t        j$                  ||      j                  d      |      j                  d      }t-        t        j.                  t        j$                  | |      j                  d      |      j                  d            S )
Nr   rq   rs   output_typer~   Fr   r   T)r   r   get_partial_shaperank
get_lengthr   rP   r   rt   sortrT   r   r   cumsumconvertranger   rB   r   r   r   rC   r   r!   )r   rr   r9   r   rQ   logits_sortedaxis_scalarlogits_cumsumdim_sizerr_shaper[   zero_fpsupportaxis_1dksum_safetaus                     r   	sparsemaxr      s   aA	
			B %%002Daxd{a ''*E%%chhu401fQi  ##D$((3::1=KOOM;?FFqIM""$T*557Ha*11!4hlDHH5<<Q?a*11!4		

 &)
	 fQi  cDjGGDM	8Wdhh/66q95	fQi  R
 CC$GOO!!-5<<Q?fQi		

 &) fQi  188;G"%,,Q/$	fQi  ""8??B fQi	 
 //(++Hc:AA!Da
H
O
O	C **1c299!<gFMMaP r   c                 v   t        |       } | j                         }t        ||      }t        d|      }t        j                  | |       }t        j                  ||      }t        j
                  |      }t        j                  | |      }t        j                  ||      }t        |j                  d            S )Ng       @r   )	r   r   r   r   r    sqrtr   r   r   )	r   br9   two	x_squaredinsiderootsummedr?   s	            r   
squareplusr     s    aA	
			BaA
R
 C!!!Q'I\\)Q'F== D\\!T"F
//&#
&Cszz!}--r   c           	         t        |       } | j                         }t        d|      }t        d|      }t        d|      }t        d|      }t        j                  | |      }t        j                  |t        j                  ||            }t        j
                  | |      }t        j                  | |      }	t        j                  ||t        j                  |	||             }
t        |
j                  d            S )Nr   r2   r   g      ?r   )
r   r   r   r    r   
less_equallessrC   r   r   )r   r9   r[   r\   r;   quarterx_plus_1quadleq_than_neg_oneless_than_oner?   s              r   sparse_plusr   &  s    aA	
			B
R
 CD"%Gb!DD"%G||As#HWh&7&7(&KLD**1g6MM!S)M
//tQ/C
 szz!}--r   c                     t        |       } | j                         }t        ||      }t        ||      }t        j                  | |      }t        j                  || |      }t        |j                  d            S r   )r   r   r   rB   rC   r   r   )r   r8   default_valuer9   r:   dvrD   r?   s           r   r8   r8   9  si    aA	
			B
	2
&C	}b	)BAs#D
//$2
&Cszz!}--r   c                     t        |       j                         j                  j                         dz
  }ddg|z  i}t	        | |t
        j                  |||fi |S )Nrp   	dilationsrs   )r   r   r   r   _poolr   max_pool)inputs	pool_sizestridespaddingdata_formatnum_spatial_dimskwargss          r   r   r   C  sq     	f//166AACaG  A3!112F  r   c                     t        |       j                         j                  j                         dz
  }t	        | |t
        j                  |||ddg|z        S )Nrp   Trs   )exclude_padr   )r   r   r   r   r   r   avg_pool)r   r   r   r   r   r   s         r   average_poolr   Y  sc     	f//166AACaG  #((	 	r   c           	         t        j                  t        j                  |      | z  |z        j                  t         j                        }t        j
                  t        j                  t        j                  d|dz         | z  |z        j                  t         j                        |       }t        j
                  || dz
        }||z
  }t        d| |z
  dz         }t        j                  ||k(  ||z   |      j                         S )z6Compute gather indices for the two-pool gather method.rs   )
npfloorarangeastypeint32r"   ceilmaxwheretolist)	input_dimoutput_sizesmall_window
big_windowwindow_startswindow_endswindow_sizessmall_pool_lens           r    _compute_adaptive_gather_indicesr   o  s     HH
		+*[8fRXX  **
		![1_-	9KGHOOHH	
 		K JJ}i!m<M.LI4q89N88
"& fh	r   c                    t        |t              r|f|z  }t        j                  |      }t	        |       } t        | ||      }t        |      D ]  }d|z   }|j                         }||   j                         }	||   }
|	|
k(  r7t        t        j                  |	|
z              }|dz   }t        |	|
||      }dg|z  }dg|z  }|||<   |dk(  r1t        j                  ||g g |dddg|z        j                  d      }n/t        j                  ||dg|z  g g |d      j                  d      }||	k  rdg|z  }|||<   |dk(  r1t        j                  ||g g |dddg|z        j                  d      }n/t        j                  ||dg|z  g g |d      j                  d      }t        j                   ||g|      j                  d      }n|}t        j"                  |t$        j&                        j                  d      }t        j"                  |t$        j&                        j                  d      }t        j(                  |||      j                  d      } t+        |||      }t-        |      S )	a   Shared OpenVINO implementation for adaptive average/max pooling.

    Uses the two-pool gather method: for each spatial axis independently,
    apply pooling with the small and big kernel sizes (stride=1, VALID),
    concatenate the results, then gather the correct output positions.
    rp   rs   avgTVALID)r   
pads_beginpads_endkernel_shaper   auto_padr   r   )r   r   r   r   r   r   )r   intr   standardize_data_formatr   _adjust_inputr   r   r   r   r   r   r   r   r   r   concatrT   r   r   gather_adjust_outputsr   )r   r   	pool_typer   r   currentspatial_idxgather_axis
current_psr   
output_dimsmall_wbig_wgather_indicesr   small_kernel
small_pool
big_kernelbig_poolcombinedindices_node	axis_noderz   s                          r   _adaptive_pool_ovr    s    +s#"n'7711+>K6"FF$4kBG-. NO+o..0
{+668	 -

"bggi*456!9z7E
 #((s--$+[!!**)  # 00	 fQi  "**# 00)  fQi  I//J&+J{#E!#,,#!!+ $$ c$44	 &)  $,,# c$44!!+$ &)   X&fQi  "H((BII!L%%k488<CCAF	//(L)DKKAN]NO` W&6DFv&&r   c                     t        |       }|j                         j                  j                         dz
  }|dvrt	        d      t        | |d||      S )Nrp   rs   rp      z9adaptive_average_pool supports 1D, 2D, or 3D inputs only.r   r   r   r   r   
ValueErrorr  r   r   r   	inputs_ovr   s        r   adaptive_average_poolr
    sb    f%I 22499DDFJy(G
 	
 UK1A r   c                     t        |       }|j                         j                  j                         dz
  }|dvrt	        d      t        | |d||      S )Nrp   r  z5adaptive_max_pool supports 1D, 2D, or 3D inputs only.r   r  r  s        r   adaptive_max_poolr    sb    f%I 22499DDFJy(C
 	
 UK1A r   c                    t        j                  |      }t        |       } | j                         j                  j                         dz
  }t        |t              r|g|z  }||}t        ||      }t        |      \  }}	}
t        | ||      } ||||	|
d|} || fi |j                  d      }t        |||      }t        |      S )Nrp   )r   r   r   r   r   r   )r   r   r   r   r   r   r   r   _adjust_strides_dilation_adjust_paddingr   r   r   r   )r   r   pooling_funcr   r   r   r   r   pad_moder   r   pool_kwargspooledadjusted_pooleds                 r   r   r     s     11+>K6"F//166AACaG)S!K"22	&w0@AG%4W%="Hj(6#3[AF!  K &0K077:F%f.>LO//r   c                 L    t        | t              r| f|z  n| } t        |       } | S N)r   r   r   )r   r   s     r   r  r  &  s,    
 $.a#51A 	QAHr   c                     t        | t              r| j                         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 ]*  }|j                  |d          |j                  |d          , d	||fS )
Nsame
SAME_UPPER
same_lower
SAME_LOWERvalidr   r   rs   EXPLICIT)r   strlowerappend)r   r   r   padding_pairs       r   r  r  2  s     ",GS!9gmmowG&R##	L	 R##	G	BJH ),q/*Q() z8++r   c                     |dk(  r| S |dk(  rg d}n|dk(  rg d}ng d}t        j                  |t        j                        }t        j                  | |      j                  d      S )Nchannels_firstrs   r   rp   rs   rp   r   r  rs   rp   )r      rs   rp   r  r   r   rT   r   r   	transposer   )r   r   r   permutations       r   r   r   D  sc    &&1	Q	"%##K:Kfk299!<<r   c                     |dk(  rg d}n|dk(  rg d}ng d}t        j                  |t        j                        }t        j                  | |      j                  d      S )Nrs   )rp   rs   r   rp   )r  rp   r   rs   )r&  r  r   rs   rp   r   r'  kernelr   r)  s      r   _adjust_kernelr-  Q  sU    1	Q	"%##K:Kfk299!<<r   c                     |dk(  rg d}n|dk(  rg d}ng d}t        j                  |t        j                        }t        j                  | |      j                  d      S )Nrs   )rs   rp   r   rp   )rp   r  r   rs   )r  r&  r   rs   rp   r   r'  r+  s      r   _adjust_depthwise_kernelr/  \  sW    1	Q	" &##K:Kfk299!<<r   c                     |dk(  r| S |dk(  rg d}n|dk(  rg d}ng d}t        j                  |t        j                        }t        j                  | |      j                  d      S )Nr#  rs   r$  rp   r   rp   r  rs   )r   rp   r  r&  rs   r   r'  )outputsr   r   r)  s       r   r   r   k  sc    &&1	Q	"%##K:Kg{3::1==r   c           	      Z   t        |       } t        |      }t        j                  |      }| j                         j                  j                         dz
  }|dk(  r| j                         d|z   dz
     }n| j                         d   }|j                         d   }t        ||      }t        ||      }t        |      \  }	}
}t        | ||      } t        ||      }|j                         |j                         z  }|dk(  rt        j                  | |||
|||	      }ngt        j                  |       j                  d      }t        j                  |      j                  d      }t        j                  dgt        j                         j                  d      }t        j                  dgt        j                         j                  d      }t        j                  dgt        j                         j                  d      }t        j"                  ||||      j                  d      }t        j"                  ||||      j                  d      }t        j$                  ||      j                  d      }t        j                  dgt        j                         j                  d      }t        j"                  ||||      j                  d      }t        j$                  ||      j                  d      }t        j"                  ||||      j                  d      }t        j&                  |||gd      j                  d      }t        j(                  ||d      j                  d      }t        j*                  | |||
|||	      }t-        |j                  d      ||      }t/        |      S )Nrp   channels_lastrs   r   iF)r   r   r   r   r   r   r  r  r   r-  r   convolutionr   r   rT   r   r   slicer   r   r   group_convolutionr   r   )r   r,  r   r   r   dilation_rater   inputs_in_channelskernel_in_channelsr  r   r   
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_filters                              r   r=  r=  y  sW    6"F6"F11+>K//166AACaGo%#557  1$
 $557:113B7&w0@AG,]<LMM%4W%="Hj(6#3[AFF$45F 	%%'+=+H+H+JJ  Q##
 ''/66q9((077:&&sDHH5<<Q?
%%qc4884;;A>	%%qc4884;;A>	NNIy

&) 	 ^^)Y	

&) 	 __Y
;BB1E
 !))9+txx@GGJnn*i

&) 	 #//+zBII!L~~)]I

&) 	 $??,7

&) 	 %%f.>FMMaP
))
 4;;q>+;[IDt$$r   c           	      (   t        |       } t        |      }t        j                  |      }| j                         j                  j                         dz
  }t        ||      }t        ||      }t        |      \  }}}	t        | ||      } t        ||      }t        j                  dgt        j                        }
t        j                  ||
      }t        j                  | ||||	||      }t!        |j#                  d      ||      }t%        |      S )Nrp   r   )r   r   r   r   r   r   r  r  r   r/  r   rT   r   r   	unsqueezer8  r   r   r   )r   r,  r   r   r   r9  r   r  r   r   unsqueeze_dim
group_convs               r   depthwise_convrO    s    6"F6"F11+>K//166AACaG&w0@AG,]<LMM%4W%="Hj(6#3[AF%f.>?F%%qc4884M6F++X}hJ !!.J z**r   c                 n    t        j                  |      }t        | |||||      }t        ||dd||      S )Nrs   r  )r   r   r   r9  )r   r   rO  r=  )r   depthwise_kernelpointwise_kernelr   r   r   r9  depthwise_conv_outputs           r   separable_convrT    sR     11+>K* # r   c           	         t        |       } t        |      }t        j                  |      }| j                         j                  j                         dz
  }t        ||      }t        ||      }t        | ||      } t        ||      }| j                         }|j                         }	g }
d}t        |      D ]  }|d|z      }|	d|z      }||   }||   }|t        |t              r|n||   }|j                  rK|j                  r?t        |j                         |j                         ||||      }|
j                  |       d} n |j                         dk(  rdnd}|r4t!        j"                  |
t$        j&                        j)                  d      }nd }t!        j*                  | |||||	      }t-        |j)                  d      ||      }t/        |      S )
Nrp   T)
input_sizekernel_sizer   r   output_paddingr9  Fr  r  r   r   )r   output_shaper   r   )r   r   r   r   r   r   r  r   r-  r   r   r   	is_staticr   r   r  r   rT   r   i64r   convolution_backprop_datar   r   )r   r,  r   r   rX  r   r9  r   input_pshapekernel_pshapespatial_output_shape
all_staticiin_dimk_dimsdop_iout_dimr  output_shape_nodeconv_trz   s                          r   conv_transposerj    s    6"F6"F11+>K//166AACaG&w0@AG,]<LMM 6#3[AF F$45F ++-L,,.MJ#$ a!e$a!e$AJ! %NC)H " 	
 8!,,.!,,.#G !''0J-0  '}}&8|gH$-- $((

&) 	 !//&F V]]1-/?MFv&&r   c                    |rt        d      t        |       } |t        j                         }t        |   }t        d|      }t        d|      }t        j                  | ||||      j                  d      }t        |      S )Nz4`sparse=True` is not supported with openvino backendrs   r   )depthrr   on_value	off_value)	r  r   r   floatxr   r   one_hotr   r   )	r   num_classesrr   dtypesparseov_dtyperm  rn  one_hot_encodeds	            r   rp  rp  Q  s    OPPaA} u%HQ)Ha*I&&	 fQi  //r   c                 6   t        | j                        dkD  rdnd}t        j                  |      dk(  r't	        | ||||      }t        j                  ||      }n%t	        | |||      }t        j                  ||      }t        |j                  d            S )Nrs   r   bool)rr   rr  rs  )rr   rr  )
lenshaper   standardize_dtyperp  r   reduce_logical_orr   r   r   )r   rq  rr   rr  rs  reduction_axisr2  rz   s           r   	multi_hotr}  d  s    agg,*QN  '61![t5P++G^D![t5A$$Wn=v}}Q/00r   c                    t        |       } t        |      }| j                  |j                  k7  r%t        d| j                   d|j                         t        | j                        dk  r%t        d| j                   d|j                         |r&t	        j
                  ||      j                  d      }nt	        j                  ||d      j                  d      }t	        j                  ||      j                  d      }t	        j                  |t        j                         dt        j                         z
        j                  d      }t	        j                  |      j                  d      }t	        j                  | |      j                  d      }t	        j                  ||      j                  d      }t	        j                  |      j                  d      }t        |      S )	NQArguments `target` and `output` must have the same shape. Received: target.shape=, output.shape=rs   zPArguments `target` and `output` must be at least rank 1. Received: target.shape=r   T	keep_dims	min_value	max_value)r   ry  r  rx  r   r   r   r   r   r   r   epsilonr   r   rP   r   )targetr   from_logitsrr   log_prob
sum_resultrz   losss           r   categorical_crossentropyr  o  s   6"F6"F||v||#"LL>H
 	

 6<<1"LL>H
 	
 ''5<<Q?((FMMaP
4;;A>goo/1w?P;P

&) 	 <<'..q1vx077:Fvt,33A6DT"))!,Dt$$r   c                 @   t        |       } t        j                  | t        j                        j                  d      } t        |      }t        | j                        t        |j                        k(  r7| j                  d   dk(  r%t        j                  | d      j                  d      } t        |j                        dk  rt        d|j                         t        |j                        }||= t        | j                        |k7  r%t        d| j                   d|j                         |r&t        j                  ||      j                  d      }nt        j                  ||d      j                  d      }t        j                  ||      j                  d      }t        j                  |t        j                          dt        j                          z
  	      j                  d      }t        j"                  |      j                  d      }|j%                         }t        j&                  d|      j                  d      }t        j&                  d|      j                  d      }	t        j(                  | |j                  |   ||	|
      j                  d      }
t        j*                  |
|      j                  d      }t        j                  ||      j                  d      }t        j,                  |      j                  d      }t/        |      S )Nr   r~   rs   zBArgument `output` must be at least rank 1. Received: output.shape=zcArguments `target` and `output` must have the same shape up until the last dimension: target.shape=r  Tr  r  )rl  rm  rn  rr   )r   r   r   r   r[  r   rx  ry  squeezer  r   r   r   r   r   r   r  r   r   rT   rp  r   rP   r   )r  r   r  rr   output_shape_without_class_dimr  sumr   on_valoff_valone_hot_targetrz   r  s                r   sparse_categorical_crossentropyr    s   6"F fdhh/66q9F6"F
6<<C--&,,r2Ba2G!!&"-44Q7
6<<1"LL>+
 	
 &*&,,%7"&t,FLL;;"LL>H
 	
 ''5<<Q?!!&$$?FFqI-44Q7goo/1w?P;P

&) 	 <<'..q1))+Kq+.55a8F;/66q9G%%ll4  fQi  ~x8??BFvt,33A6DT"))!,Dt$$r   c           	      &   t        |       } t        |      }| j                         |j                         k7  r3t        j                  || j                               j	                  d      }| j
                  |j
                  k7  r%t        d| j
                   d|j
                         |r6t        j                  d| j                               j	                  d      }t        j                  |      j	                  d      }t        j                  ||       j	                  d      }t        j                  t        j                  | t        j                  |      j	                  d            j	                  d      t        j                  |t        j                  |      j	                  d            j	                  d            j	                  d      }t        |      S t        j                  |t        j                          dt        j                          z
        j	                  d      }t        j                  d| j                               j	                  d      }t        j                  ||      j	                  d      }t        j                  ||       j	                  d      }t        j"                  |      j	                  d      }	t        j"                  |      j	                  d      }
t        j                  | |	      j	                  d      }t        j                  ||
      j	                  d      }t        j                  ||      j	                  d      }t        j                  |      j	                  d      }t        |      S )Nr   r  r  rs   r  )r   r   r   r   r   ry  r  rT   rP   r   r    r   rG   r   r   r   r  r   )r  r   r  r[   
neg_outputone_minus_targetbceminus_outputminus_targetr  minus_log_probrz   minus_results                r   binary_crossentropyr    s   6"F6"F F$;$;$==!!&&*A*A*CDKKAN||v||#"LL>H
 	
 6#:#:#<=DDQG&&v.55a8
#,,S&9@@Cll))*5<<Q?fQi ("3"3F";"B"B1"EfQi
 &) 	 #3''^^'//+q7??;L7LfQi  

Av668
9
@
@
CC$$S&188;L$$S&188;L||F#**1-H\\,/66q9Nvx077:F$$\>BII!LL
,,v|
,
3
3A
6C


C
 
'
'
*Cs##r   c                    t        |       } | j                         }|t        j                  k(  r3t	        j
                  | t        j                        j                  d      } t	        j                  |t        j                        j                  d      }t	        j                  d| j                               j                  d      }t	        j                  | ||      j                  d      }t	        j                  t	        j                  | |      j                  d      ||      j                  d      }t	        j                  |t	        j                  ||      j                  d            j                  d      }	|t        j                  k(  rt        t        j                  t        j                         j"                        }
t        t        j                  t        j                         j$                        }t	        j
                  t	        j&                  |||
      j                  d      t        j                        j                  d      }t	        j
                  t	        j&                  |	d|
      j                  d      t        j                        j                  d      }	t)        |      t)        |	      fS )Nr   rp   r   )r   r   r   f16r   r   f32r   rT   r   reduce_meanpowerr   floatr   finfofloat16r   minr   r   )r   r   keepdimssynchronizedori_typeaxes_c	const_twomeansquared_x_meanvariancefp16_maxfp16_mins               r   momentsr    s   aA!!#H488Q)003tTXX.55a8F!!!Q%7%7%9:AA!DI684;;A>D))q)$++A.fQi    tY7>>qAfQi  488"**-112"**-112NN484;;A>

&) 	 ##NN8S(3::1=txx

&) 	 t$&9(&CCCr   c                    t        |       } t        |      }t        |      }|t        |      }nRt        j                  |      }|j                         }t        j                  dg|      }	t        j
                  |	|      }|t        |      }nRt        j                  |      }|j                         }t        j                  dg|      }
t        j
                  |
|      }| j                         j                  j                         }|dk  r||z  }|dk7  rwt        t        d|            }||d<   d||<   t        j                  |t        j                        j                  d      }t        j                  | |      j                  d      } t        j                  | |||||      j                  d      }|dk7  rwt        t        d|            }||d<   d||<   t        j                  |t        j                        j                  d      }t        j                  ||      j                  d      }t!        |      S )Nr   rs   )r   r   r   r   rT   	broadcastr   r   r   r   r   r   r   r   r(  batch_norm_inferencer   )r   r  r  rr   offsetri   r  
mean_shape	mean_typer@  rA  x_rankperm_vector
batch_norms                 r   batch_normalizationr  
  s    	aADX&Hv&&&t,
))+	&&sI6
##J
;e$&&t,
))+	%%qc95	""9j9   "''224Faxqy5F+,AD''TXX>EEaHq+.55a8..	5&$'fQi  qy5F+,AD''TXX>EEaH''
K@GGJ
z**r   c                    t        |       } t        |      }t        |      }t        |      }t        j                  | t        j                        j                  d      } t        j                  ||| ||      }t        j                  |t        t        j                                  }t        |j                  d            S )Nr   )blank_index)r   r   r   r   r   r   ctc_lossr   r   ro  r   )r  r   target_lengthoutput_length
mask_index	ctc_loss_s         r   r  r  5  s    6"F6"F!-0M!-0Mfdhh/66q9F!!v}*I   OGNN<L,MNIy//233r   c                 
   t        |       } t        j                  t        |      t        j                        j                  d      }t        j                  t        | j                               d      }t        |   }t        j                  | |      j                  d      } t        j                  t        |      t        j                        j                  d      }t        j                  | |||      }|j                  d      }t        j                  |t        j                  dgt        j                        j                  d            j                  d      }t        j                  dgt        j                        j                  d      }	t        j                  | |	d      j                  d      }
t        j                  |       j                  d      }t        j                   |t        j                  dgt        j                        j                  d      t        j                  dt        j                        j                  d            j                  d      }t        j"                  |t        j                  dgt        j                        j                  d            j                  d      }t        j$                  t        j                  dt        j                        j                  d      |t        j                  dt        j                        j                  d      t        j                        j                  d      }t        j                  |t        j                  dgt        j                        j                  d            j                  d      }t        j                  |t        j                  dgt        j                        j                  d            j                  d      }t        j&                  ||      j                  d      }t        j                  d|      j                  d      }t        j(                  ||
|      j                  d      }
t        j*                  |
t        j                  dgt        j                        j                  d      d      j                  d      }t        j,                  |      j                  d      }t        j                  |t        j                  dgt        j                        j                  d            j                  d      }t/        |      t/        |      fS )	Nr   float32)merge_repeatedrp   Frs   r   r   )r   r   r   r   r   r   r   result_typer	   r   r   ctc_greedy_decoder_seq_lenrL  rT   r   r   r   r  r   r   rC   r   rP   r   )r   sequence_lengthsr  r  rr  rt  r  decodeddecoded_dense
class_axistimestep_maxry  time_dim
time_rangeseq_len
valid_maskzerosscores                     r   _ctc_greedy_decoder  C  s    6"F''&'fQi  0023YE u%Hfh/66q9F""=#<dhhGNN	K 11%	G NN1%M&&x((!dhh7>>qAfQi  ""A3188;J&&vz5AHHKLf%,,Q/E1#txx(//2!TXX&--a0 fQi	 
 (##QC299!<fQi  !TXX&--a0!TXX&--a0HH	
 fQi  ##H%%qc4884;;A>fQi    (++QC:AA!DfQi  z73::1=Jc8,33A6E??:|UCJJ1ML1#txx(//2 fQi	 

 e$++A.Ex  !dhh/66q9fQi 
 }-/B5/IIIr   c                     t        d      )NzOpenVINO CTC beam-search decode is not yet supported. The current Keras beam-search algorithm requires path dedup/merge via `unique`, and OpenVINO backend `unique` is not implemented yet.)NotImplementedError)r   r  
beam_width	top_pathsr  s        r   _ctc_beam_search_decoder    s     	N r   c                 p    |dvrt        d| d      |dk(  rt        | |||      S t        | ||||      S )N)greedybeam_searchzInvalid strategy z2. Supported values are 'greedy' and 'beam_search'.r  )r  r  )r  r  r  )r  r  r  )r   r  strategyr  r  r  r  s          r   
ctc_decoder    sl     00z ** *
 	
 8!)!	
 	
 # r   c           
      &   ddl m} t        |       } t        |      }t        || j                               }t	        j
                  | |      }t	        j                  ||      }t        t        d| j                         j                  j                                     }t	        j                  ||      j                  d      }t         |t        |                  }t         |t        |                  }	t	        j
                  t	        j                  t	        j                  d|j                               |      t	        j                  t	        j                  d|	j                               |	            j                  d      }
t        |
      S )Nr   )log10   
   ) keras.src.backend.openvino.numpyr  r   r   r   r   r   r   r   r   r   r   r  r   r   rT   )rw   rx   max_valr  diffsquared_diffreduction_axesmselog_max_vallog_msepsnrs              r   r  r    sA   6	r	B	r	BGR%8%8%:;GR$D$$T40L%2#7#7#9#>#>#I#I#KLMN


|^
<
C
CA
FC&9'&B CDKE"5c":;<Gb+">">"@A;	
 	b'":":"<=w	
	 fQi 	 t$$r   c	                    |t        d      t        |       } t        |      }t        |      }| j                         |j                         k7  ret        t	        j
                            }	t        j                  | |	      j                  d      } t        j                  ||	      j                  d      }|j                         | j                         k7  r3t        j                  || j                               j                  d      }t        j                  g dt        j                        j                  d      }
t        j                  | |
      } t        j                  ||
      }t        j                  ||
      }|t        |      nd }|t        |      }|j                         | j                         k7  r3t        j                  || j                               j                  d      }|L|j                         t        j                  k(  rt        | j                               }|dk(  r-t        j                   t        j"                        j$                  n,t        j                   t        j&                        j$                  }t        j                  || j                               j                  d      }t        j                  d| j                               j                  d      }t        j(                  |||      j                  d      }t        j*                  ||      j                  d      }n|}|r|t        j                  dgt        j                        j                  d      }t        j                  dt        j                        j                  d      }t        j                  dgt        j                        j                  d      }t        j,                  t        j.                  t        j0                  |       j                  d      ||      j                  d      |      j                  d      }t        j,                  t        j.                  t        j0                  |      j                  d      ||      j                  d      |      j                  d      }t        j                  dt        j                        j                  d      }t        j                  dt        j                        j                  d      }t        j2                  t        j4                  |||t        j                        j                  d      t        j                  dgt        j                        j                  d            j                  d      }t        j2                  t        j4                  |||t        j                        j                  d      t        j                  dgt        j                        j                  d            j                  d      }t        j6                  ||      j                  d      }|j                         t        j                  k(  r[t        j                  d	t        j                        j                  d      }t        j(                  |||      j                  d      }n)t        | j                               }|dk(  r-t        j                   t        j"                        j$                  n,t        j                   t        j&                        j$                  }t        j                  || j                               j                  d      }t        j                  d| j                               j                  d      }t        j(                  |||      j                  d      }t        j*                  ||      j                  d      }d	}|t        || j                               nd }t        j8                  | |||||
      }t        j                  ||
      }t;        |j                  d            S )NzZ`dot_product_attention` with `attn_logits_soft_cap` is not supported with openvino backendr   )r   rp   rs   r  r  r   rp   rs   r   F)attention_maskri   causal)r  r   r   r   r   ro  r   r   r   rT   r   r   r(  booleanr	   r   r  r  r  r  rC   r    r  r   r   rL  r   r   scaled_dot_product_attentionr   )querykeyvaluebiasmaskri   	is_causalflash_attentionattn_logits_soft_capov_typer   query_dtypemin_val	large_negr;   seq_axisr   squeeze_axist_lens_lenzero_idxone_idxrowscolscausal_keepfalse_const
causal_adddpas                               r   dot_product_attentionr    sy    '!.
 	
 % E

C% E3#7#7#99!'.."23  077:sG,33A65#9#9#;;  (>(>(@AHHK""<:AA!DJuj1E


S*
-Cuj1E"&"2=DT"  "e&<&<&>>##D%*@*@*BCJJ1MD$$&$,,6.u/E/E/GH #i/ HHRZZ(,,"**-11 
 %--U335&)   ((e.D.D.FGNN  tT9=DDQG<<d+2215DDT%
 $$aS$((3::1=''4884;;A>((!dhh7>>qA  OO!!%(//2HkfQi	

 &) 	   OO!!#&--a0(KfQi	

 &) 	 $$Q188;##Atxx077:!!NN%dhhfQiqc488,33A6	

 &) 	 !!NN%dhhfQiqc488,33A6	

 &) 	 ))$5<<Q?  "dll2"++E4<<@GGJK??;kBII!LD*5+A+A+CDK )+ $((XXbjj)-- 
 !))//1fQi  $$S%*@*@*BCJJ1MD!dIFMMaPJ<<j188;D	  	eU3356 

 
/
/sE$eIC 

S*
-Cszz!}--r   c           	      d   d } ||      } ||      } ||      } ||      }	| j                   \  }
}}}t        d |D              r*t        j                  | dd|d   |d   f|d   |d   ff      } t	        j
                  | |d   |d   g|	d   |	d   g|d   |d   gd      }|j                   \  }
}}}t	        j                  ||
|d   |d   |||gd      }t	        j                  |g d	      }t	        j                  ||
||d   z  |d   z  ||z  gd      }t        |j                  d            S )
Nc                 .    t        | t              r| | fS | S r  r   r   r   s    r   _pairzunfold.<locals>._pairC  s    #As+1v22r   c              3   &   K   | ]	  }|d kD    yw)r   N ).0_s     r   	<genexpr>zunfold.<locals>.<genexpr>N  s     
Q1q5
s   )r   r   r   rs   r   )imagesizesr   ratesr   F)r   r  rs   rp   r&     )
ry  anyrt   padr   extract_image_patchesr   r(  r   r   )inputrW  dilationr   strider  r   re  prd  NCHWpatchesDnHnWs                     r   unfoldr%  B  s\   3 	kAhAgAfAJAq!Q 
!
1qtqtQqTlKL ,,tQqTl1qttQqTlG ==LAq"bwAaD!A$2r(BEJG  #G wA!HqtOR"W(EuMGw~~a011r   c           
         d } ||      \  }} ||      \  }	}
 ||      \  }} ||      \  }} ||      \  }}t        |       } t        j                  ||gt        j                        j                  d      }t        j                  |	|
gt        j                        j                  d      }t        j                  | ||||g||g||g||g      j                  d      }t        |      S )Nc                 .    t        | t              r| | fS | S r  r  )vals    r   r  zfold.<locals>._pairc  s    'S1Sz:s:r   r   )r   r   r   r   )r   r   rT   r   r[  r   col2imr   )r   r   rW  r  r   r  r  oHoWkHkWdHdWpHpWsHsWoutput_size_nodekernel_size_noderz   s                       r   foldr6  b  s    ; ;FB;FB8_FB7^FB6]FBaA(("b488<CCAF(("b488<CCAF__	Rr(8b fQi  v&&r   c                 N   t        |       } |dk(  rt        j                  g dt        j                        j                  d      }t        j                  | |      j                  d      } t        j                  | d|      j                  d      }t        j                  g dt        j                        j                  d      }t        j                  ||      j                  d      }t        |      S t        j                  | d|      j                  d      }t        |      S )a0  OpenVINO implementation of depth_to_space (pixel shuffle).

    Rearranges data from depth into blocks of spatial data.

    Args:
        x: 4-D tensor with shape (N, H, W, C) for channels_last or
            (N, C, H, W) for channels_first.
        block_size: An integer specifying the block size.
        data_format: "channels_last" or "channels_first".

    Returns:
        A tensor with shape (N, H*block_size, W*block_size, C/block_size**2)
        for channels_last or (N, C/block_size**2, H*block_size, W*block_size)
        for channels_first.
    r4  r%  r   blocks_firstr1  )	r   r   rT   r   r   r   r(  depth_to_spacer   r   
block_sizer   r   rz   	axes_backs         r   r9  r9  {        	aA o%  txx8??Bq$'..q1((NJGNN
 %%lDHH=DDQG	##FI6==a@
 v&& ((NJGNN
 v&&r   c                 N   t        |       } |dk(  rt        j                  g dt        j                        j                  d      }t        j                  | |      j                  d      } t        j                  | d|      j                  d      }t        j                  g dt        j                        j                  d      }t        j                  ||      j                  d      }t        |      S t        j                  | d|      j                  d      }t        |      S )a(  OpenVINO implementation of space_to_depth (pixel unshuffle).

    Rearranges blocks of spatial data into depth.

    Args:
        x: 4-D tensor with shape (N, H, W, C) for channels_last or
            (N, C, H, W) for channels_first.
        block_size: An integer specifying the block size.
        data_format: "channels_last" or "channels_first".

    Returns:
        A tensor with shape (N, H/block_size, W/block_size, C*block_size**2)
        for channels_last or (N, C*block_size**2, H/block_size, W/block_size)
        for channels_first.
    r4  r%  r   r8  r1  )	r   r   rT   r   r   r   r(  space_to_depthr   r:  s         r   r?  r?    r=  r   )r   )rZ   )g?)T)r~   )r&  )Nr  Nr  )rs   r  Nrs   )rs   r  NNrs   )r~   NF)Fr~   )F)FF)NNgMbP?)r   )Tr   )d   rs   r   )r  r@  rs   Tr   )NNNFNN)rs   r   rs   )r4  )Pnumpyr   openvino.opset16opset16r   openvinor   r  srcr   rt   	keras.src&keras.src.backend.common.backend_utilsr   keras.src.backend.openvino.corer   r   r   r	   r   r   r*   r,   r.   r0   r3   r@   rE   rG   rJ   rN   rR   rX   r_   ra   rd   rf   rh   rl   r{   r   r   r   r   r   r8   r   r   r   r  r
  r  r   r  r  r   r-  r/  r   r=  rO  rT  rj  rp  r}  r  r  r  r  r  r  r  r  r  r  r  r%  r6  r9  r?  r  r   r   <module>rI     s    #  . .  < ? 9 <;
F
1">
;
Q
G

..?
?
G+.P=
A
IM1D*H49x
..&. 2 ,.b'J		   0F	,$
===>" N%h +H > H'V0&1%@2%j)$XD6 ?C(+V4" 	CJR " <%8 
	
r.j2@'2!'H!'r   