
    &Vfw                        d dl Z d dl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 dlmZ d	 Zd
 Zd Zd Zd Zd Zd Zd Zd<dZd Zd Zd=dZ	 	 d>dZd?dZd@dZd@dZ	 	 dAdZ	 	 dBd!Z	 	 	 dCd"Z 	 d@d#Z!	 	 dDd%Z"	 	 	 	 dEd'Z#	 	 	 	 dEd(Z$	 	 	 	 dEd)Z%	 	 	 	 	 dFd*Z&dGd-Z'dGd.Z(dHd/Z)dHd0Z*dId1Z+dJd2Z,	 dKd4Z-dLd5Z.	 	 dMd6Z/	 	 	 dNd8Z0	 	 	 	 	 dOd:Z1d; Z2dS )P    N)lax)backend)+compute_conv_transpose_padding_args_for_jax)cast)convert_to_tensor)	is_tensor)scipyc                 z    t          |           } t          j        | t          j        d| j                            S N        r   npmaximumarraydtypexs    W/var/www/html/software/conda/lib/python3.11/site-packages/keras/src/backend/numpy/nn.pyrelur      s/    !A:a#qw//000    c           	          t          |           } t          j        t          j        | t          j        d| j                            t          j        d| j                            S )Nr         @)r   r   minimumr   r   r   r   s    r   relu6r      sR    !A :

1bhsAG,,--rxQW/E/E  r   c                     t          |           } t          j        d| j                  t          j        d| j                  t          j        |            z   z  S N      ?)r   r   r   r   expr   s    r   sigmoidr      sE    !A8C!!RXc17%;%;bfaRjj%HIIr   c                 *    t          j        |           S N)r   tanhr   s    r   r"   r"   "   s    71::r   c                 z    t          |           } t          j        | t          j        d| j                            S r   )r   r   	logaddexpr   r   r   s    r   softplusr%   &   s/    !A<28C11222r   c                     t          |           } | t          j        d| j                  t          j        |           z   z  S r   )r   r   r   r   absr   s    r   softsignr(   +   s5    !Aag&&233r   c                 D    t          |           } | t          |           z  S r!   )r   r   r   s    r   silur*   0   s    !Awqzz>r   c                 B    t          |           } t          |             S r!   )r   r%   r   s    r   log_sigmoidr,   5   s    !AaRLL=r   皙?c                     t          |           } t          j        | t          j        || j                  | z            S r!   r   )r   negative_slopes     r   
leaky_relur0   :   s4    !A:a.!'::Q>???r   c                 6   | t          j        d| j                  z  t          j        d| j                  z   } t          j        | dk    t          j        d| j                  t          j        | dk    t          j        d| j                  |                     S )Nr         ?r   r   )r   r   r   wherer   s    r   hard_sigmoidr4   ?   s~     	
BHS!'"""RXc17%;%;;A8	S
ag
c28C11155  r   c                 &    | t          |           z  S r!   )r4   r   s    r   	hard_silur6   J   s    |Ar   r   c                     t          |           } t          j        | t          j        d| j                  k    | t          j        || j                  t          j        |           z            S r   )r   r   r3   r   r   expm1)r   alphas     r   elur:   N   sX    !A8	RXc17###Q(@(@28A;;(N  r   ,x?2֫?c                 v    t          |           } t          j        || j                  t	          | |          z  S r!   )r   r   r   r   r:   )r   r9   scales      r   selur?   U   s2    
 	!A8E17##c!Umm33r   Tc           
         t          |           } |rt          j        dt          j        z                                | j                  }t          j        d| j                  t          j        d| j                  t          j        || t          j        d| j                  | dz                      | j                  z  z   z            z   z  }| |z  S t          j        d                              | j                  }| t          j	        
                    | |z            dz                       | j                  z  t          j        d| j                  z  S )N   r2   r   gHm?      )r   r   sqrtpiastyper   r   r"   r	   specialerf)r   approximatesqrt_2_over_picdfsqrt_2s        r   gelurM   ^   s'   !A 
RU++2217;;hsAG$$HS!'""grx!'22ad]]175K5KKKM 
 3w""17++}  V,,q088AABhq!'""#	
r   c                     t          j        | t          j        | |d          z
            }|t          j        ||d          z  S NTaxiskeepdims)r   r   maxsum)r   rQ   exp_xs      r   softmaxrV   t   sC    F1rvadT::::;;E26%dT:::::r   c                     t          j        | |d          }t          j        t          j        | |z
                                |d                    }| |z
  |z
  S rO   )r   rS   logr   rT   )r   rQ   max_x	logsumexps       r   log_softmaxr[   y   sW    F14$///Erva%i((,,$,FFGGIu9y  r   channels_lastc                 p    t          | t                    r| f|z  n| } |s| S |dk    r	d| z   dz   } nd| z   } | S )Nr\   rC   )rC   rC   )
isinstanceint)r   num_spatial_dimsdata_formatinclude_batch_and_channelss       r   _convert_to_spatial_operandrd      sZ     $.a#5#5<1A% o%%1HtO!OHr   validc           
          |dvrt          d| d          |                                }t          j        t	          j        | |||||                    S )aC  Helper function to define pooling functions.

    Args:
        inputs: input data of shape `N+2`.
        initial_value: the initial value for the reduction.
        reduce_fn: a reduce function of the form `(T, T) -> T`.
        pool_size: a sequence of `N` integers, representing the window size to
            reduce over.
        strides: a sequence of `N` integers, representing the inter-window
            strides (default: `(1, ..., 1)`).
        padding: either the string `same` or `valid`.

    Returns:
        The output of the reduction for each window slice.
    )samere   zInvalid padding 'z', must be 'same' or 'valid'.)
ValueErrorupperr   r   r   reduce_window)inputsinitial_value	reduce_fn	pool_sizestridespaddings         r   _poolrq      su    . '''FFFF
 
 	
 mmooG8	
 	
	 	 	r   c                     t          j        |          }| j        dz
  }t          |||          }||n|}t          |||          }t	          | t
          j         t          j        |||          S )NrA   )	r   standardize_data_formatndimrd   rq   r   infr   rS   )rk   rn   ro   rp   rb   ra   s         r   max_poolrv      s}     1+>>K{Q+#[ I #?iiG)!; G "&#'9gwGGGr   c                    t          j        |          }| j        dz
  }t          |||          }||n|}t          |||          }t	          | dt
          j        |||          }|dk    r|t          j        |          z  S d t          | j
        |          D             }t	          t          j        || j                  dt
          j        |||          }||z  S )NrA   r   re   c                 (    g | ]\  }}|d k    r|nd S r^    ).0abs      r   
<listcomp>z average_pool.<locals>.<listcomp>   s5     
 
 
%+a!q&&QQa
 
 
r   )r   rs   rt   rd   rq   r   addr   prodzipshapeonesr   )	rk   rn   ro   rp   rb   ra   pooledr   window_countss	            r   average_poolr      s    1+>>K{Q+#[ I #?iiG)!; G 63GWEEF'	****
 
/26</K/K
 
 
 GE6<((G
 
 %%r   Fc                    | dz   }|dk    r+t          t          d|dz
                      }d|dz
  f|z   }n"t          t          d|                    }d|z   }|r+|dz
  |dz
  ft          t          |dz
                      z   }n*|dz
  |dz
  ft          t          |dz
                      z   }t          j        |||          S )z9Create a `lax.ConvDimensionNumbers` for the given inputs.rA   r\   rC   r   r   rC   )lhs_specrhs_specout_spec)tupleranger   ConvDimensionNumbers)ra   rb   	transposenum_dimsspatial_dims	inputs_dn	kernel_dns          r   &_convert_to_lax_conv_dimension_numbersr      s      !#Ho%%U1hl33441%4		U1h//00\)	 N\8a<05x!|9L9L3M3MM		\8a<05x!|9L9L3M3MM	#Y   r   rC   c                    t          j        |          }| j        dz
  }t          ||d          }t	          |||d          }t	          |||d          }|dk    r| j        d         }n| j        d         }|j        d         }	||	z  d	k    rt          d
| d|	 d          ||	z  }
t          j        t          j
                            | t          |          r|n|                                |||||
                    S )NrA   Fr   rc   r\   rC   r   zgThe number of input channels must be evenly divisible by kernel's in_channels. Received input channels z and kernel in_channels z. rhs_dilationdimension_numbersfeature_group_count)r   rs   rt   r   rd   r   rh   r   r   jaxr   conv_general_dilatedr   numpy)rk   kernelro   rp   rb   dilation_ratera   r   channelskernel_in_channelsr   s              r   convr     sf    1+>>K{Q>  
 *#(	  G 0#(	  M o%%<#<?b)$$q((9=E9 9"49 9 9
 
 	

 #&888$$'';FFV\\^^&/ 3 	% 	
 	

 
 
r   c                    t          j        |          }| j        dz
  }t          ||d          }t	          |||d          }t	          |||d          }|dk    r| j        d         n| j        d         }t          j        t          |          r|n|	                                |j        d d         d||j        d         z  fz             }t          j
        t          j                            | ||||||	                    S )
NrA   Fr   r   r\   r   rC   r   r   )r   rs   rt   r   rd   r   r   reshaper   r   r   r   r   r   )	rk   r   ro   rp   rb   r   ra   r   r   s	            r   depthwise_convr   @  sA    1+>>K{Q>  
 *#(	  G 0#(	  M (?::RQ  ZF##7SbSQ 3fl26F FGG F 8$$&/ 3 	% 	
 	

 
 
r   c                 |    t          j        |          }t          | |||||          }t          ||dd||          S )NrC   re   )ro   rp   rb   r   )r   rs   r   r   )rk   depthwise_kernelpointwise_kernelro   rp   rb   r   depthwise_conv_outputs           r   separable_convr   o  sa     1+>>K*  #   r   c                    t          j        |          }| j        dz
  }t          | j        |j        ||||          }t          ||d          }	t          |||d          }t          |||d          }t          j        t          j
                            | t          |          r|n|                                ||||	d                    S )NrA   )input_shapekernel_shapero   rp   output_paddingr   Fr   r   T)rp   r   r   transpose_kernel)r   rs   rt   r   r   r   rd   r   r   r   r   conv_transposer   r   )
rk   r   ro   rp   r   rb   r   ra   padding_valuesr   s
             r   r   r     s    1+>>K{Q@L\%#  N ?  
 *#(	  G 0#(	  M 8'';FFV\\^^"&/! 	 	
 	

 
 
r   r   float32c                 .   |rt          d          t          |           } | j        }|r6|d         dk    r*t          |          dk    rt	          |d d                   }|                     d          } |st          j        |           dz   }| j        d         }t          j        ||f|          }| dk    }d|t          j	        |          |         | |         f<   ||fz   }	t          j        ||	          }|dk    rt          j
        |d|          }|S )N2Unsupported value `sparse=True` with numpy backendr   rC   r   r   )rh   r   r   lenr   r   r   rS   zerosarangemoveaxis)
r   num_classesrQ   r   sparser   
batch_sizecategoricalvalid_indicesoutput_shapes
             r   one_hotr     s)    OMNNN!A'K  .{2!++K0@0@10D0DK,--			"A $fQii!mJ(J4EBBBKFMJKK	*%%m4a6FFG +/L*[,77K rzzk+r488r   c                     |rt          d          t          |           } t          | j                  dk    rdnd}t	          j        t          t          | d          |||          |          }|S )Nr   rC   r   int32)rQ   r   rQ   )rh   r   r   r   r   rS   r   r   )r   r   rQ   r   r   reduction_axisoutputss          r   	multi_hotr     s     OMNNN!Aag,,**QQNfQ  +DFFF  G Nr   c                 L   t          j        |           } t          j        |          }| j        |j        k    rt          d| j         d|j                   t	          | j                  dk     rt          d| j         d|j                   |rt          ||          }ni|t          j        ||d          z  }t          j        |t          j	                    dt          j	                    z
            }t          j
        |          }t          j        | |z  |           S )	NQArguments `target` and `output` must have the same shape. Received: target.shape=, output.shape=rC   zPArguments `target` and `output` must be at least rank 1. Received: target.shape=r   TrR   r   )r   r   r   rh   r   r[   rT   clipr   epsilonrX   targetoutputfrom_logitsrQ   log_probs        r   categorical_crossentropyr     sE   XfFXfF|v|##H"LH H9?H H
 
 	

 6<1H"LH H9?H H
 
 	
  "vD111"&====!2!2C'/:K:K4KLL6&>>F6H$400000r   c                 ,   t          j        | d          } t          j        |          }t          | j                  t          |j                  k    r'| j        d         dk    rt          j        | d          } t          |j                  dk     rt          d|j                   | j        |j        d d         k    rt          d| j         d|j                   |rt          ||          }ni|t          j        ||d	
          z  }t          j        |t          j
                    dt          j
                    z
            }t          j        |          }t          | |j        |         |          } t          j        | |z  |           S )Nr   r   r   rC   r   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   )r   r   r   r   squeezerh   r[   rT   r   r   r   rX   r   r   s        r   sparse_categorical_crossentropyr     s   XfG,,,FXfF
6<C----&,r2Ba2G2GF,,,
6<1+"L+ +
 
 	

 |v|CRC(((H"LH H9?H H
 
 	

  "vD111"&====!2!2C'/:K:K4KLL6&>>VV\$/d;;;FF6H$400000r   c                    t          j        |           } t          j        |          }| j        |j        k    rt          d| j         d|j                   |rt	          |          }t          j        |t          j                    dt          j                    z
            }| t          j        |          z  }|d| z
  t          j        d|z
            z  z  }| S )Nr   r   r   )	r   r   r   rh   r   r   r   r   rX   )r   r   r   bces       r   binary_crossentropyr     s    XfFXfF|v|##H"LH H9?H H
 
 	
  !WVW_..go6G6G0GHHF
26&>>
!CC&LBF3<0000C4Kr   c                    |rt          d          t          |t                    rt          |          n|}d}t	          j        | j                  }|dk    rd}t          | d          } t          j	        | |d          }t          j	        t          j
        |           |d          t          j
        |          z
  }|s*t          j        ||          }t          j        ||          }|rt          j        |t          j        t          j                  j        t          j        t          j                  j                  }t          j        |t          j        t          j                  j        t          j        t          j                  j                  }t          ||          }t          ||          }||fS )Nz7Argument synchronized=True is not supported with NumPy.Ffloat16Tr   r   rP   )NotImplementedErrorr_   listr   r   standardize_dtyper   r   r   meansquarer   r   finfor   minrS   )r   axesrR   synchronized	need_cast	ori_dtyper   variances           r   momentsr   1  s}    
!E
 
 	
 %T400:5;;;dD I)!'22II	I71dT***D wry||$>>>4PH .z$%%:h-- -wtRXbj115rx
7K7K7OPP7bhrz**.0D0D0H
 
 D)$$),,>r   MbP?c                 f   dgt          | j                  z  }|j        d         ||<   t          j        ||          }t          j        ||          }dt          j        ||z             z  }|t          j        ||          }||z  }| |z  }	|t          j        ||          }|	|z   }	| |z  |	z   S )NrC   r   r   )r   r   r   r   rD   )
r   r   r   rQ   offsetr>   r   r   invress
             r   batch_normalizationr   T  s     C#ag,,E*Q-E$K:dE""Dz(E**H
7*++
+C
5%((Ek%#+CFE**Fls7S=r   c                 N   t          | d          } t          |          }t          |d          }t          |d          }|j        \  }}| j        \  }dt          j        |j        d          }|                    |          }d }	 |	||          }
 |	||          }|
                    |j                  }
|                    |j                  }t          |d          }|t          j        |
d                              t          j	                  z
  }| d d d df         | d d dd f         k                        t          j
                  t          j        d	          |d d d d ||dz   f         }t          j        |d
          }t          | |          }t          j        d||          }t          j        |d
          }t          j        |dz   f|j                  z  }d|d d df<   t          j        |f|j                  z  }d fd}d }|||                    d          f} ||||f|          \  }\  }} |d         |d                   }||d<   t          ||dz             }t          j        d||           }|S )Nr   r   g     jr   c                     t          j        |                              d| j        z  |fz             }t          j        | d          } || k     }t          j        |          S )Nr^   r   r   )r   r   r   rt   expand_dimslogical_not)lengths
max_lengthindices
elem_valids       r   _lengths_to_paddingsz&ctc_loss.<locals>._lengths_to_paddingsx  sb    )J''//7<:-/
 
 .r222w&
~j)))r   r   r   rC   )r   r   r   rC   r   rA   )r   zbtk,bnk->btnr   r   c           	          t          j        | d d d df         t          j        | d d dd f         |          gd          S )NrC   r   r   )r   concatenater$   )phiadded_scores     r   update_phi_scorez"ctc_loss.<locals>.update_phi_score  sQ    ~BQBZc!!!QRR%j+>>?b
 
 
 	
r   c                 @   | \  }}|} ||z  z             }|\  }}}t          j        |d d d df         |z   ||z             }||z   }	 |	||z   dz
  z  z             }	|                    
df          }||z  d|z
  |z  z   }||z  d|z
  |	z  z   }	|	|f|	|ffS )Nr   r   rC   )r   r$   r   )prevr   prev_phi	prev_emitprev_phi_origlogprob_emitlogprob_phipad	next_emitnext_phir   log_epsilonrepeatr   s             r   	loop_bodyzctc_loss.<locals>.loop_body  s    ") ##Hi+:N.NOO)*&k3 LQQQV|+Y-E
 
	 k)##i+-sV|0LL
 
 kk:q/**)OsSyI&==	&#)x)??)$x&;;;r   c                 (   |}g }t          | D ]&} | ||          \  }}|                    |           'g }t          t          |d                             D ]5|                    t	          j        fd|D                                  6||fS )Nr   c                      g | ]
}|         S ry   ry   )rz   yis     r   r}   z-ctc_loss.<locals>.np_scan.<locals>.<listcomp>  s    #5#5#5QAaD#5#5#5r   )r   appendr   r   r   stack)	finitxscarryysr   r  resultr  s	           @r   np_scanzctc_loss.<locals>.np_scan  s    b 	 	Aq{{HE1IIaLLLLs2a5zz"" 	8 	8AMM"(#5#5#5#5"#5#5#5667777f}r   rC   r   zbn,bn->b)r   r   r   result_typer   rF   r[   r   rT   r   r   r  r   r   einsumr   )r   r   target_lengthoutput_length
mask_index_r   max_label_lengthr   r   target_paddingsoutput_paddingslogprobslabel_lengthslogprobs_phi_one_hotlogprobs_emitlogalpha_phi_initlogalpha_emit_initr  r  r  logalpha_philogalpha_emitlogalpha_phi_lastper_seq_lossr   r
  r  r   s                             @@@@r   ctc_lossr/  i  s;    vW555Fv&&F%mW==M%mW==M!'J;#)< J K i88E]]5!!F* * * +*=:JKKO**=:JKKO%,,V\::O%,,V\::O6+++H$rvoA'F'F'F'M'M
( ( M
 QQQVnqqq!""u-55bjAAFVF,--FAAAqqq*zA~"==>L<i88Lv;777HInhAAML	::M 	-12&,GGG
	  "aaad
-.flCCC
	 

 
 
< < < < < < < <2	 	 	 '@'@'H'H	IB'.w%'9:B( ($A$m
 )(b)9=;LMM(L }2BQ2FGGGHIj*;XFFFLr   c                    t          |           } t          |d          }| j        \  }}}||dz
  }t          j        | d                              d          }t          j        | d          }t          j        |          d d d f         }	|	|d d d f         k    }	t          j        |	||          }t          j        |	d|          }|rI|d d dd f         |d d d df         k    }
t          j        |
d          }
t          j        |
||          }||k    }t          j	        t          j        |          d          }t          j
        ||df          }t          j        |||          }t          j        |d          }t          j        ||d          }t          j        |d|          }t          j        |d          d d d f          }t          j	        |d          }||fS )	Nr   r   rC   r   r   r   )r   r  r   )r   r   r   argmaxrF   rS   r   r3   r  r   tileargsorttake_along_axisrT   )rk   sequence_lengthmerge_repeatedr  r   r   r   r   scoresseqlen_maskrepeat_maskinvalid_maskorders                r   _ctc_greedy_decoder<    s    v&&F'wGGGO*0,'J
K 1_
iR(((//88GVF$$$F)J''aaa0KD!99Kh{J88GXk3//F =aaaen3B37f[*:;;(;
G<< j(LN29Z00q999EGEJ?++EH\:u55EJu2&&&E %b999G h|R11GfV!$$$QQQW--FnW1---GF?r   d   c                    t          |           } t          |          }| j        \  }}t          | d          } t          j        |          d d d f         |d d d f         k    }dz
  t          j        | d          } z
  dz
  dt          j        |dz  |ft          j                  }t          j        t          j	        g                    }	t          j
        | d d df         d          d d |	 d f         }
t          j        |
k    |
          }||d d d |	df<   t          j        |dz  ft          j         | j                  }t          j        | d d df         |
d          |d d d |	f<   |d d d d df         k    }fdd fd	fd
fdfdfdt          |||| |          D             }t          j        d |D                       }t          j        d |D                       }t          j        |k    |z
  dz
            }t          j        |g d          }||fS )Nr   r   rC   rA   r   r   c                 @   t          j        | d          } t          j        |          }t          j        |          }t          j        | 
k    d          }t          j        dz  z            }| ||dz
  f         }t          j        |dk    
|          }t          j                  }
|<   t          j        |dz            }|}|
k    }| ||k    z  }	t          j        |	
|          }|| ||f<   t          j        |dz            }||z   }| ||fS )Nr   r   rC   rA   )r   r  r1  r   r3   r2  )pathsr7  maskedr   path_tail_indexpaths_arange
path_tailsclassesprev_maskedmasked_repeat_pad
beam_widthr  r   s             r   _extend_pathsz._ctc_beam_search_decode.<locals>._extend_paths/  s1   	%15556;//6;//)ETM:::yZ+!=>><1)<<=
Xo2D*EE
)K(("
''1z>22D$
g(=>(=$88/6lO+,GAq:~&&!ff$$r   c                    t          j        |          }t          j        ||z
            }t          j        |          }t	          |           D ]\  }}||xx         ||         z  cc<   t          j        |          |z   }|S r!   )r   rS   r   
zeros_like	enumeraterX   )unique_inverser7  
scores_max
scores_expr  us         r   _merge_scoresz._ctc_beam_search_decode.<locals>._merge_scoresI  s    VF^^
VFZ/00
v&&n-- 	' 	'DAq1IIIA&IIII*,r   c                 b   t          j        | dd          \  } }dz  z  t          |           z
  }|dk    rt          j        | d|gddgg
          } | d dz  z           } t          |j                  dk    rt          j        |d          }t          j        |t           j         |          }t          j        ||t           j                   } 	||          } 	||          }t          j        ||          }t          j	        |d	           d          }| |         } ||         }||         }t          j
        | d
          } t          j        ||g          }t          j        t          j        t                    t          j        t                    g          }| ||fS )NTr   return_inverserQ   rA   constant_valuesrC   r   stable)kind)rA   rC   )r   uniquer   r  r   r   r3   ru   r$   r3  r2  r   r   boolr   )r@  r7  rA  rN  pad_sizeemit_scoresmask_scorestotal_scorestop_indicesrR  rH  rI  r   s            r   _prune_pathsz-_ctc_beam_search_decode.<locals>._prune_pathsR  s    "	%1 M M M~Oj0CJJ>a<<F5Ax=1a&"94PPPE4K*445~#$$))ZQ???Nhvw77hvvw77#mNK@@#mNK@@|K==jH===zkllKk"!+.!+.v&&k :;;Xj$''T)B)BC
 
 ff$$r   c                 T     | |||          \  } }} | ||          \  } }}| ||fS r!   ry   )r@  r7  rA  r   rJ  ra  s       r   _decode_stepz-_ctc_beam_search_decode.<locals>._decode_stepp  sF     -eVVQ G Gvv ,UFF C Cvvff$$r   c                 P    | \  }}}|\  }}|s ||||          \  }}}|||fd fS r!   ry   )r  r   r@  r7  rA  r8  rc  s         r   _stepz&_ctc_beam_search_decode.<locals>._stepu  sO     $vv; 	K$0L$J$J!E66vv&,,r   c                    d } || ||f|dd          |dd          f          \  \  }}}}	t          j        |dd          \  }}
dz  z  t          |          z
  }|dk    rt          j        |d|gddgg          }|d dz  z           }t          |
j                  dk    rt          j        |
d          }
 |
|          }t          j        |           d          d d d	         }||         }||         }||fS )
Nc                 D    |}t          | D ]} | ||          \  }}|d fS r!   )r   )r  r  r  r  r   r  s         r   np_scan_only_carryzJ_ctc_beam_search_decode.<locals>._decode_batch.<locals>.np_scan_only_carry  s9    E"X ' '1UA;;qq$;r   rC   Tr   rT  rA   rV  r   r   )r   rZ  r   r  r   r   r3  )
init_pathsinit_scoresinit_maskedrk   r8  rh  r@  r7  rA  r   rN  r\  r`  rR  rH  re  rI  r   	top_pathss                r   _decode_batchz._ctc_beam_search_decode.<locals>._decode_batch|  sP   	 	 	 &8%7k2ABBZQRR)&
 &
" !#	%1 M M M~Oj0CJJ>a<<F5Ax=1a&"94PPPE4K*445~#$$))ZQ???N~v66j(()5ddd;k"$f}r   c           	      :    g | ]\  }}}}} |||||          S ry   ry   )rz   psmr  smrm  s         r   r}   z+_ctc_beam_search_decode.<locals>.<listcomp>  sE       Aq!Q 	aAq"%%  r   c                     g | ]
}|d          S r   ry   rz   rs     r   r}   z+_ctc_beam_search_decode.<locals>.<listcomp>  s    ,,,qad,,,r   c                     g | ]
}|d          S r^   ry   ru  s     r   r}   z+_ctc_beam_search_decode.<locals>.<listcomp>  s    ---qt---r   r   )r   r   r[   r   r   flipfullr   r   r   r3  r3   ru   r   r4  r   r  r   )rk   r5  rI  rl  r  r   max_seq_lenr8  ri  num_init_pathsmax_classesinit_classesrj  rk  resultsr@  r7  rm  rc  rJ  rR  rH  ra  re  r   s     ```            @@@@@@@@r   _ctc_beam_search_decoder    so    v&&F'88O+1<(J[b)))F)K((qqq1_QQQW5MMK 1_
 WV!$$$Fz)A-JD	Q^[14rx  J VBHk:%>??@@N*VAAAqD\222111~o6F6F3FGK8K:5t[IIL(4Jqqq/>/1$%'	Q^$rvgV\  K ')&8qqq!tk' ' 'K?N?"# QQQ1W%-K% % % % % % % %4  % % % % % % % %<% % % % % %
- - - - -         <   ![&+
 
  G H,,G,,,--EX--W---..F HUd]D+*=*ABBEL			**E&=r   greedyc                     t          |           } t          j        | j        d          }t	          | |          } |dk    rt          | |||          S |dk    rt          | ||||          S t          d| d          )Nr   r  )r6  r  beam_search)rI  rl  r  zInvalid strategy z2. Supported values are 'greedy' and 'beam_search'.)r   r   r  r   r   r<  r  rh   )rk   r5  strategyrI  rl  r6  r  r   s           r   
ctc_decoder    s     v&&Fi88E&%  F8!)!	
 
 
 	
 
]	"	"&!!
 
 
 	
 * * * *
 
 	
r   c                 B   | j         |j         k    r t          d| j          d|j          d          t          ||j                  }t	          j        t	          j        | |z
                      }dt	          j        |          z  dt	          j        |          z  z
  }|S )NzInput shapes z and z" must match for PSNR calculation. r      
   )r   rh   r   r   r   r   r   log10)x1x2max_valmsepsnrs        r   r  r    s    	x28+BH + +28 + + +
 
 	

  rx888G
'")BG$$
%
%C!!!B#$66DKr   )r-   )r   )r;   r<   )Tr!   )r\   T)Nre   )Nre   N)r\   F)rC   re   NrC   )rC   re   NNrC   )r   r   F)Fr   )F)FF)NNr   rt  )TN)r=  rC   N)r  r=  rC   TN)3r   r   r   r   	keras.srcr   &keras.src.backend.common.backend_utilsr   keras.src.backend.numpy.corer   r   r   keras.src.utils.module_utilsr	   r   r   r   r"   r%   r(   r*   r,   r0   r4   r6   r:   r?   rM   rV   r[   rd   rq   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r/  r<  r  r  r  ry   r   r   <module>r     s   



                      . - - - - - : : : : : : 2 2 2 2 2 2 . . . . . .1 1 1
  J J J
  3 3 3
4 4 4
  
  
@ @ @ @
        ,
+4 4 4 4
 
 
 
,; ; ; ;
! ! ! !  #	   , % % % %V H H H H0 %& %& %& %&T     8 1 1 1 1n , , , ,f    > / / / /d   <	 	 	 	1 1 1 141 1 1 18   (       H ?C   *n n n nh 	' ' ' 'Z b b b bP  
  
  
  
F
 
 
 
 
r   