
    &Vfp                        d dl Z d dlZd dlZd dl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 dlmZ d Zd	 Zd
 Zd Zd Zd Zd Zd Zd9dZd Zd Zd:dZd Z d;dZ!d<dZ"d<dZ#	 	 d=dZ$	 	 d>dZ%	 	 	 d?d Z&	 d@d!Z'	 	 dAd#Z(	 	 	 	 dBd%Z)	 	 	 	 dBd&Z*	 	 	 	 dBd'Z+	 	 	 	 	 dCd(Z,dDd*Z-dDd+Z.dEd,Z/dEd-Z0dFd.Z1dGd/Z2	 dHd1Z3dId2Z4	 	 dJd3Z5	 	 	 dKd5Z6	 	 	 	 	 dLd7Z7d8 Z8dS )M    N)lax)nn)backend)+compute_conv_transpose_padding_args_for_jax)cast)convert_to_tensorc                 H    t          |           } t          j        |           S N)r   jnnreluxs    U/var/www/html/software/conda/lib/python3.11/site-packages/keras/src/backend/jax/nn.pyr   r          !A8A;;    c                 H    t          |           } t          j        |           S r
   )r   r   relu6r   s    r   r   r      s    !A9Q<<r   c                 H    t          |           } t          j        |           S r
   )r   r   sigmoidr   s    r   r   r      s    !A;q>>r   c                 H    t          |           } t          j        |           S r
   )r   r   tanhr   s    r   r   r   !   r   r   c                 H    t          |           } t          j        |           S r
   )r   r   softplusr   s    r   r   r   &   s    !A<??r   c                 H    t          |           } t          j        |           S r
   )r   r   	soft_signr   s    r   softsignr   +       !A=r   c                 H    t          |           } t          j        |           S r
   )r   r   silur   s    r   r   r   0   r   r   c                 H    t          |           } t          j        |           S r
   )r   r   log_sigmoidr   s    r   r!   r!   5   s    !A?1r   皙?c                 L    t          |           } t          j        | |          S )N)negative_slope)r   r   
leaky_relu)r   r$   s     r   r%   r%   :   s$    !A>!N;;;;r   c                 H    t          |           } t          j        |           S r
   )r   r   hard_sigmoidr   s    r   r'   r'   ?   s     !AAr   c                 H    t          |           } t          j        |           S r
   )r   r   	hard_silur   s    r   r)   r)   D   r   r         ?c                 L    t          |           } t          j        | |          S )N)alpha)r   r   elu)r   r,   s     r   r-   r-   I   s$    !A71E""""r   c                 H    t          |           } t          j        |           S r
   )r   r   selur   s    r   r/   r/   N   r   r   Tc                 J    t          |           } t          j        | |          S r
   )r   r   gelu)r   approximates     r   r1   r1   S   s!    !A8A{###r   c                 L    t          |           } t          j        | |          S Naxis)r   r   softmaxr   r7   s     r   r8   r8   X   s$    !A;qt$$$$r   c                 L    t          |           } t          j        | |          S r5   )r   r   log_softmaxr9   s     r   r;   r;   ]   s$    !A?14((((r   channels_lastc                 p    t          | t                    r| f|z  n| } |s| S |dk    r	d| z   dz   } nd| z   } | S )Nr<      )r?   r?   )
isinstanceint)r   num_spatial_dimsdata_formatinclude_batch_and_channelss       r   _convert_to_spatial_operandrE   b   sZ     $.a#5#5<1A% o%%1HtO!OHr   validc                     |dvrt          d| d          |                                }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.
    )samerF   zInvalid padding 'z', must be 'same' or 'valid'.)
ValueErrorupperr   reduce_window)inputsinitial_value	reduce_fn	pool_sizestridespaddings         r   _poolrR   s   sf    . '''FFFF
 
 	
 mmooG  r   c                     t          j        |          }| j        dz
  }t          |||          }||n|}t          |||          }t	          | t
          j         t          j        |||          S )N   )	r   standardize_data_formatndimrE   rR   jnpinfr   max)rL   rO   rP   rQ   rC   rB   s         r   max_poolrZ      s}     1+>>K{Q+#[ I #?iiG)!; G #'37IwHHHr   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 )NrT           rF   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   rU   rV   rE   rR   r   addmathprodzipshaperW   onesdtype)	rL   rO   rP   rQ   rC   rB   pooledrg   window_countss	            r   average_poolrl      s    1+>>K{Q+#[ I #?iiG)!; G 63GWEEF'	),,,,
 
/26</K/K
 
 
 HUFL))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.rT   r<   r?   r   r   r?   )lhs_specrhs_specout_spec)tupleranger   ConvDimensionNumbers)rB   rC   	transposenum_dimsspatial_dims	inputs_dn	kernel_dns          r   &_convert_to_lax_conv_dimension_numbersrz      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   r?   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          |           t          |          |||||
          S )NrT   Fru   rD   r<   r3   r?   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   rU   rV   rz   rE   rg   rI   jaxr   conv_general_dilatedr   )rL   kernelrP   rQ   rC   dilation_raterB   r   channelskernel_in_channelsr   s              r   convr      sN    1+>>K{Q>  
 *#(	  G 0#(	  M o%%<#<?b)$$q((9=E9 9"49 9 9
 
 	

 #&887''&!!&!!"+/ (   r   c           	         t          j        |          }| j        dz
  }t          ||d          }t	          |||d          }t	          |||d          }|dk    r| j        d         n| j        d         }t          j        ||j        d d         d||j        d         z  fz             }t          j	        
                    | ||||||	          S )
NrT   Fr|   r}   r<   r3   r?   r~   r   )r   rU   rV   rz   rE   rg   rW   reshaper   r   r   )	rL   r   rP   rQ   rC   r   rB   r   r   s	            r   depthwise_convr     s    1+>>K{Q>  
 *#(	  G 0#(	  M (?::RQ  [SbSQ 3fl26F FGG F 7''"+/ (   r   c                 |    t          j        |          }t          | |||||          }t          ||dd||          S )Nr?   rF   )rP   rQ   rC   r   )r   rU   r   r   )rL   depthwise_kernelpointwise_kernelrP   rQ   rC   r   depthwise_conv_outputs           r   separable_convr   L  sa     1+>>K*  #   r   c           	      8   t          j        |          }| j        dz
  }t          | j        |j        ||||          }t          ||d          }	t          |||d          }t          |||d          }t          j        	                    | |||||	d          S )NrT   )input_shapekernel_shaperP   rQ   output_paddingr   Fr|   r}   T)rQ   r   r   transpose_kernel)
r   rU   rV   r   rg   rz   rE   r   r   conv_transpose)
rL   r   rP   rQ   r   rC   r   rB   padding_valuesr   s
             r   r   r   h  s     1+>>K{Q@L\%#  N ?  
 *#(	  G 0#(	  M 7!!"+ "   r   float32c                    t          |           } |r-|dk     r|t          | j                  z   dz   }|d}t          j        t          j        |           d                              |          }|j        d         d | j        D             }t          j        |ddi}|                    |t          j	        | d                     fd|D             }t          j
        |d          }t          | j                  }|                    ||           t          |          }t          j        ||f|d	d	
          S t          j        | |||          S )Nr   r?   r   c                 6    g | ]}t          j        |          S r^   )rW   arange)r_   dims     r   rb   zone_hot.<locals>.<listcomp>  s     666s3:c??666r   indexingijc                 b    g | ]+}|                     d                               d          ,S )r?   int32)r   astype)r_   r`   values_counts     r   rb   zone_hot.<locals>.<listcomp>  s5    OOO!199\1--44W==OOOr   r6   Trg   indices_sortedunique_indicesr7   ri   )r   lenrg   rW   greater_equalravelr   meshgridinsertmaximumconcatenatelistrr   
jax_sparseBCOOr   one_hot)	r   num_classesr7   ri   sparsevaluesindicesrg   r   s	           @r   r   r     s^   !A 
!88#ag,,&*D=E "39Q<<33::5AA|A66ag666,7$77tS[A..///OOOOwOOO/'222QWT;'''eW	
 
 
 	
 ;q+D>>>>r   c                    t          |           } t          | j                  dk    rdnd}|rt          | ||d|          }t	          j        ||f          }t	          j        |          }t          j        |j	        d          
                    |          }t	          j        ||j        f|j        dd          S t          j        t          t          | d          |||          |	          S )
Nr?   r   r   )r7   ri   r   )axesTr   r   r6   )r   r   rg   r   r   bcoo_reduce_sumbcoo_sum_duplicatesrW   r   datar   r   r   rY   r   )r   r   r7   ri   r   reduction_axisresultr   s           r   	multi_hotr     s   !Aag,,**QQN 
{WV
 
 
 +F.9JKKK/77"6;2299%@@V^$,	
 
 
 	
 7Q  +DFFF   r   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
          j                            ||          }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=r?   zPArguments `target` and `output` must be at least rank 1. Received: target.shape=r6   Tkeepdimsr*   )rW   arrayrg   rI   r   r   r   r;   sumclipr   epsilonlogtargetoutputfrom_logitsr7   log_probs        r   categorical_crossentropyr     sM   YvFYvF|v|##H"LH H9?H H
 
 	

 6<1H"LH H9?H H
 
 	
  #6%%f4%88#'&$>>>>&'/"3"3S7?;L;L5LMM76??GFX%D11111r   c                 V   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          j                            ||          }ni|t          j	        ||d	
          z  }t          j
        |t          j                    dt          j                    z
            }t          j        |          }t          j        | |j        |         |          } t          j	        | |z  |           S )Nr   ri   r3   r?   r6   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*   )rW   r   r   rg   squeezerI   r   r   r;   r   r   r   r   r   r   r   r   s        r   sparse_categorical_crossentropyr     s   YvW---FYvF
6<C----&,r2Ba2G2GV"---
6<1+"L+ +
 
 	

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

  #6%%f4%88#'&$>>>>&'/"3"3S7?;L;L5LMM76??[d!3$???FGFX%D11111r   c                 >   t          j        |           } t          j        |          }| j        |j        k    rt          d| j         d|j                   |rPt          j                            |          }t          j                            |           }d| z  |z  d| z
  |z  z
  S t          j        |t          j	                    dt          j	                    z
            }| t          j
        |          z  }|d| z
  t          j
        d|z
            z  z  }| S )Nr   r   g      r*   )rW   r   rg   rI   r   r   r!   r   r   r   r   )r   r   r   
log_logitslog_neg_logitsbces         r   binary_crossentropyr     s   YvFYvF|v|##H"LH H9?H H
 
 	
  LV''//
++VG44f}z)S6\^,KKKXfgo//w7H7H1HIIF
376??
"CC&LCGC&L1111C4Kr   c                    |rt          d          d}t          j        | j                  }|dv rd}t	          | d          } t          j        | |d          }t          j        | |d          }|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 )Nz5Argument synchronized=True is not supported with JAX.F)float16bfloat16Tr   r   )r7   r   )NotImplementedErrorr   standardize_dtyperi   r   rW   meanvarr   r   finfor   minrY   )r   r   r   synchronized	need_cast	ori_dtyper   variances           r   momentsr     sN    
!C
 
 	
 I)!'22I+++	I8Atd+++Dwqtd333H /{4&&;x.. 	-x#)CK((,ci.D.D.H
 
 8ci,,0#)CK2H2H2L
 
 D)$$),,>r   MbP?c                    dgt          | j                  z  }|j        d         ||<   t          j        ||          }t          j        ||          }t          j                            ||z             }|t          j        ||          }||z  }| |z  }	|t          j        ||          }|	|z   }	t          j        | |z  |	          S )Nr?   r   )r   rg   rW   r   r   r   rsqrtrc   )
r   r   r   r7   offsetscaler   rg   invress
             r   batch_normalizationr   8  s     C#ag,,E*Q-E$K;tU##D{8U++H
'--7*
+
+CE5))Ek%#+CVU++Fl71s7C   r   c                    t          | d          } t          |          }t          |d          }t          |d          }|j        \  }}| j        \  }dt          j        |j        d          }t          ||          }d }	 |	||          }
 |	||          }|
                    |j                  }
|                    |j                  }t          j        |          }|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          j                            | |          }t          j        d||          }t          j        |d
          }t          j        |dz   f|j                  z  }|j        d d df                             d          }t          j        |f|j                  z  }d fd}|||                    d          f}t          j                            |||f|          \  }\  }} |d         |d                   }|j        d                             |          }t          j                            ||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>   r3   r6   )rW   r   r   rV   expand_dimslogical_not)lengths
max_lengthr   
elem_valids       r   _lengths_to_paddingsz&ctc_loss.<locals>._lengths_to_paddings\  sb    *Z((007<:-/
 
 /'333w&
z***r   r?   r6   r3   )r   r   rn   r?   r   rT   )r   zbtk,bnk->btnr   r\   c           	          t          j        | d d d df         t          j        | d d dd f         |          gd          S )Nr?   r3   r6   )rW   r   	logaddexp)phiadded_scores     r   update_phi_scorez"ctc_loss.<locals>.update_phi_score  sQ    BQBZs111abb5z;??@r
 
 
 	
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 )Nr3   r*   r?   )rW   r   r   )prevr   prev_phi	prev_emitprev_phi_origlogprob_emitlogprob_phipad	next_emitnext_phi
batch_sizelog_epsilonrepeatr   s             r   	loop_bodyzctc_loss.<locals>.loop_body  s    ") ##Hi+:N.NOO)*&k3 MQQQV|+Y-E
 
	 k)##i+-sV|0LL
 
 kk:q/**)OsSyI&==	&#)x)??)$x&;;;r   r?   r   zbn,bn->b)r   rg   r   result_typeri   r   r   r   r;   rW   r   r   r   r  ru   r   r   r   einsumrh   atsetr   scan)r   r   target_lengthoutput_length
mask_index_r   max_label_lengthri   r   target_paddingsoutput_paddingslogprobslabel_lengthslogprobs_phi_one_hotlogprobs_emitlogalpha_phi_initlogalpha_emit_initr
  xslogalpha_philogalpha_emitlogalpha_phi_lastper_seq_lossr  r  r	  r   s                            @@@@r   ctc_lossr$  M  sW    vW555Fv&&F%mW==M%mW==M!'J;#)< J K i88E&%  F+ + + +*=:JKKO**=:JKKO%,,V\::O%,,V\::Ov&&H$swQ'G'G'G'N'N	( ( M
 QQQVnqqq!""u-55ckBBFWV-..FAAAqqq*zA~"==>L=y99Lv~~f+~>>HJ~xBBMM-;;M 	*.236<HHH
	  *,QQQT266s;;*./v|DDD
	 

 
 
< < < < < < < <2 '@'@'H'H	IB'*w||%'9:B( ($A$m
 )(b)9=;LMM?2&**+<==L v~~m9IA9M~NNHJz+<hGGGLr   c                    t          |           } t          |d          }| j        \  }}}||dz
  }t          j        | 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   r?   r3   r6   r\   )r   r  r   )r   rg   rW   argmaxrY   r   wherer  r   tileargsorttake_along_axisr   )rL   sequence_lengthmerge_repeatedr  r  r   r   r   scoresseqlen_maskrepeat_maskinvalid_maskorders                r   _ctc_greedy_decoder2    s    v&&F'wGGGO*0,'J
K 1_
jb)))GWV"%%%F*Z((qqq1KD!99KiZ99GY{C00F >aaaen3B37gk+;<<)KW== j(LOCJz22;;;EHUZO,,EIlJ66EKB'''E!'5r:::G ib'22Ggf1%%%aaag..FogA...GF?r   d   c                    t          |           } t          |          }| j        \  }}t          j        |           } 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        | d d df         d          d d |	 d f         }
t	          j        |
k    |
          }|j        d d d |	df                             |          }t	          j        |dz  ft          j         | j                  j        d d d |	f                             t	          j        | d d df         |
d                    }|d d d d df         k    }fdd fd	fd
fdfd} t%          j        |          |||| |          \  }}t	          j        |k    |z
  dz
            }t	          j        |g d          }||fS )Nr?   rT   r6   r3   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                  j                                     
          }t          j        |dz            }|}|
k    }| ||k    z  }	t          j        |	
|          }| j        ||f                             |          } t          j        |dz            }||z   }| ||fS )Nr   r6   r?   rT   )rW   r	  r&  r   r'  r  r  r(  )pathsr-  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  sM   
5+A666FK00FK00*Ud];;;z!j.;">??<1)<<=
Y!3T:FF
*[)),Z8<<TBB(7A
N33D$
g(=>)M49967;;GDDHQJ''!ff$$r   c                     t          j        |          }t          j        ||z
            }t          j        |          j        |                              |          }t          j        |          |z   }|S r
   )rW   rY   exp
zeros_liker  rc   r   )unique_inverser-  
scores_max
scores_exps       r   _merge_scoresz._ctc_beam_search_decode.<locals>._merge_scores   s_    WV__
WVj011
''*>:>>zJJ:-r   c                    t          j        | ddz  
z  d	          \  } }t          |j                  dk    rt          j        |d          }t          j        |t           j         |          }t          j        ||t           j                   } ||          } ||          }t          j        ||          }t          j        |          
 d          }| |         } ||         }||         }t          j	        | d          } t          j
        ||g          }t          j
        t          j        
t                    t          j        
t                    g          }| ||fS )NTrT   r   return_inversesizer7   
fill_valuer?   r6   )rT   r?   )rW   uniquer   rg   r   r'  rX   r   r)  r(  r   zerosboolrh   )r6  r-  r7  rD  emit_scoresmask_scorestotal_scorestop_indicesrG  r>  r?  r   s           r   _prune_pathsz-_ctc_beam_search_decode.<locals>._prune_paths'  s`    #
[:-!
 !
 !
~ ~#$$)) [a@@@Ni&99i99#mNK@@#mNK@@}[+>>k,//=k"!+.!+.''+{!;<<Yz4((#(:t*D*DE
 
 ff$$r   c                 T     | |||          \  } }} | ||          \  } }}| ||fS r
   r^   )r6  r-  r7  r   r@  rT  s       r   _decode_stepz-_ctc_beam_search_decode.<locals>._decode_stepG  sF     -eVVQ G Gvv ,UFF C Cvvff$$r   c           	      f    | \  }}}|\  }}t          j        |d ||||          \  }}}|||fd fS )Nc                     | ||fS r
   r^   )r6  r-  r7  r   s       r   <lambda>z8_ctc_beam_search_decode.<locals>._step.<locals>.<lambda>R  s    eVV-D r   )r   cond)r   r   r6  r-  r7  r.  rV  s         r   _stepz&_ctc_beam_search_decode.<locals>._stepL  s\     $vv; #DD!
 !
vv vv&,,r   c                    t          j        | ||f|dd          |dd          f          \  \  }}}}t          j        |ddz  z  d          \  }}	t	          |	j                  dk    rt          j        |	d          }	 |	|          }t          j        |           d          d d d         }
||
         }||
         }||fS )Nr?   TrT   r   rI  r6   r3   )r   r  rW   rM  r   rg   r   r)  )
init_pathsinit_scoresinit_maskedrL   r.  r6  r-  r7  r  rD  rS  rG  r>  r[  r?  r   	top_pathss              r   _decode_batchz._ctc_beam_search_decode.<locals>._decode_batch\  s     &)Xk2ABBZQRR)&
 &
" !$
[:-!
 !
 !
~ ~#$$)) [a@@@N~v66k&))9*++6ttt<k"$f}r   r   )r   rg   r   r;   rW   r   flipfullr   builtinsr   r)  r'  r  r  rX   ri   r*  r   vmapru   )rL   r+  r?  r`  r  r  max_seq_lenr.  r]  num_init_pathsmax_classesinit_classesr^  r_  ra  r6  r-  rV  r@  rG  r>  rT  r[  r   s     ```            @@@@@@@r   _ctc_beam_search_decoderj    s"    v&&F'88O+1<(J[_V$$F*[))$'2oaaag6NNK 1_
 Xf1%%%Fz)A-JD	Q^[14sy  J \+z::N+fQQQTl333AAA7G7G4GHK9[J6kJJLqqq/>/14599,GGJ 	*a*n-xv|LLL	AAA	 	S 1{CCC	D	D 
 QQQ1W%-K% % % % % % % %2  % % % % % % % %@% % % % % %
- - - - -          4 ,CH]++Kfk ME6
 IetmT;+>+BCCEM%++E&=r   greedyc                     t          |           } t          j        | j        d          }t	          | |          } |dk    rt          | |||          S |dk    rt          | ||||          S t          d| d          )Nr   rk  )r,  r  beam_search)r?  r`  r  zInvalid strategy z2. Supported values are 'greedy' and 'beam_search'.)r   r   r  ri   r   r2  rj  rI   )rL   r+  strategyr?  r`  r,  r  ri   s           r   
ctc_decodero    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      
   )rg   rI   r   ri   rW   r   squarelog10)x1x2max_valmsepsnrs        r   ry  ry    s    	x28+BH + +28 + + +
 
 	

  rx888G
(3:b2g&&
'
'C	'"""R#)C..%88DKr   )r"   )r*   )T)r3   )r<   T)NrF   )NrF   Nr
   )r<   F)r?   rF   Nr?   )r?   rF   NNr?   )r3   r   F)Fr3   )F)FF)NNr   )r   )TN)r3  r?   N)rk  r3  r?   TN)9rd  rd   r   jax.experimental.sparseexperimentalr   r   	jax.numpynumpyrW   r   r   r   	keras.srcr   &keras.src.backend.common.backend_utilsr   keras.src.backend.jax.corer   r   r   r   r   r   r   r   r   r!   r%   r'   r)   r-   r/   r1   r8   r;   rE   rR   rZ   rl   rz   r   r   r   r   r   r   r   r   r   r   r   r$  r2  rj  ro  ry  r^   r   r   <module>r     s     



 , , , , , , , , ,                              , + + + + + 8 8 8 8 8 8  
  
  
  
  
  
  
  
< < < <
  
  
# # # #
  
$ $ $ $
% % % %
) ) ) )  #	   , # # # #R I I I I0 %& %& %& %&T     8 / / / /j * * * *b    > - - - -`? ? ? ?8   .2 2 2 242 2 2 28   ,   D ?C! ! ! !*c c c cR 	' ' ' 'Z ` ` ` `L  
  
  
  
F
 
 
 
 
r   