
    2Vh$                        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dZdd	Zdd
Zd ZddZddZd Zd Zd Zd Zd Zd dZd dZ	 d!dZ	 	 	 d"dZd Zd Zd Z d Z!d#dZ"d Z#y)$    N)config)standardize_dtype)dtypes)cast)convert_to_tensor)scipyc                 b    |t        d      t        j                  j                  | |||      S Nz[Argument `num_segments` must be set when using the JAX backend. Received: num_segments=None)indices_are_sorted)
ValueErrorjaxopssegment_sumdatasegment_idsnum_segmentssorteds       J/home/dcms/DCMS/lib/python3.12/site-packages/keras/src/backend/jax/math.pyr   r      A    *
 	
 77k<F       c                 b    |t        d      t        j                  j                  | |||      S r
   )r   r   r   segment_maxr   s       r   r   r      r   r   c                 B    t         j                  j                  | |      S N)r   laxtop_k)xkr   s      r   r   r   $   s     77==Ar   c                 V   t        j                  |t        j                  | d      d      }t        j                  t        j                  |      t         j
                   |      }dt        j                  t        j                  ||      d      z   }t        j                  ||      S )N)axis   )	jnptake_along_axisexpand_dimswhereisnaninfsumgreater
less_equal)targetspredictionsr   preds_at_labelranks        r   in_top_kr1   *   s}    ((S__W26RN YY		.!CGG8^N swws{{;?bIID>>$""r   c                 Z    t         j                  j                  j                  | ||      S )N)r"   keepdims)r   r   special	logsumexp)r   r"   r3   s      r   r5   r5   6   s$    99&&qth&GGr   c                 h    |dvrt        d|       t        j                  j                  | |      S )N>   reducedcompletez]`mode` argument value not supported. Expected one of {'reduced', 'complete'}. Received: mode=mode)r   r$   linalgqr)r   r:   s     r   r<   r<   :   s@    **"V%
 	

 ::===&&r   c                 *   | j                   ^ }}t        |      }t        j                  | t	        j
                  |      |df      } t        j                  j                  | |f|fdd      } t        j                  | g || j                   dd        S )Nr#   VALID)NTCOITr?   )dimension_numbers)	shapelistr$   reshapemathprodr   r   conv_general_dilated_patches)r   sequence_lengthsequence_stridebatch_shapesignal_lengths        r   extract_sequencesrM   D   s    "#''[-{#KA		+.qABA,,			/ 	- 	A ;;q7K7!''"#,788r   c                    t        | t        t        f      rt        |       dk7  rt	        d|        | \  }}|j
                  |j
                  k7  r%t	        d|j
                   d|j
                         t        j                  |j                  t        j                        r.t        j                  |j                  t        j                        st	        d|  d      t        j                  j                  ||      }|S )N   zLInput `x` should be a tuple of two tensors - real and imaginary.Received: x=zInput `x` should be a tuple of two tensors - real and imaginary.Both the real and imaginary parts should have the same shape. Received: x[0].shape = z, x[1].shape = zBAt least one tensor in input `x` is not of type float.Received: x=.)
isinstancetuplerD   lenr   rC   r$   
issubdtypedtypefloatingr   r   complex)r   realimagcomplex_inputs       r   _get_complex_tensor_from_tupler[   R   s    a%'3q6Q;#
 	
 JD$zzTZZ&&*jj\N
 	
 >>$**cll33>>

CLL< #Q 
 	
 GGOOD$/Mr   c                     t        |       }t        j                  j                  |      }t        j                  |      t        j                  |      fS r   )r[   r$   fftrX   rY   r   rZ   complex_outputs      r   r]   r]   n   s;    215MWW[[/N88N#SXXn%===r   c                     t        |       }t        j                  j                  |      }t        j                  |      t        j
                  |      fS r   )r[   r$   r]   fft2rX   rY   r^   s      r   ra   ra   t   s;    215MWW\\-0N88N#SXXn%===r   c                     t        |       }t        j                  j                  |      }t        j                  |      t        j
                  |      fS r   )r[   r$   r]   ifft2rX   rY   r^   s      r   rc   rc   z   s;    215MWW]]=1N88N#SXXn%===r   c                     t         j                  j                  | |dd      }t        j                  |      t        j                  |      fS Nr!   backward)nr"   norm)r$   r]   rfftrX   rY   )r   
fft_lengthr_   s      r   ri   ri      s9    WW\\!z\LN88N#SXXn%===r   c                 ^    t        |       }t        j                  j                  ||dd      S re   )r[   r$   r]   irfft)r   rj   rZ   s      r   rl   rl      s'    215M77==*2J=OOr   c           
         t        | j                        dvrt        d| j                         ||k  rt        d| d|       t	        |t
              r|dvrt        d|       t        |       } |rPt        t        | j                              D cg c]  }d }}|dz  |dz  f|d	<   t        j                  | |d
      } ||z
  dz  }||z
  |z
  }	|t	        |t
              r6t        t        j                  j                  ||      | j                        }
nt        || j                        }
t        |
j                        dk7  s|
j                  d	   |k7  rt        d|
j                         t        j                  |
||	gg      }
n't        j                  ||z   |	z   | j                        }
t         j                  j                  j#                  | d|
||z   |	z   ||z   |	z   |z
  |d d      d	   }t        j$                  d|
j'                         dz  z        }||z  }t        j(                  |dd	      }t        j*                  |      t        j,                  |      fS c c}w )N>   float32float64zJInvalid input type. Expected `float32` or `float64`. Received: input type=zT`fft_length` must equal or larger than `sequence_length`. Received: sequence_length=z, fft_length=>   hannhammingz]If a string is passed to `window`, it must be one of `"hann"`, `"hamming"`. Received: window=)r   r   rO   r!   reflectr9   rU   r#   PThe shape of `window` must be equal to [sequence_length].Received: window shape=      ?F)fswindownpersegnoverlapnfftboundarypaddedrB   )r   rU   	TypeErrorr   rQ   strr   rangerS   rC   r$   padr   signal
get_windowonesr   stftsqrtr*   swapaxesrX   rY   )r   rI   rJ   rj   rw   center_	pad_widthl_padr_padwinresultscales                r   r   r      s    !)??$$%GG9.
 	
 O#))8(9 :$'
 	

 &#,,;;A(D  	!A%*3qww<%89V9	9#q*/:	"GGAyy1/)a/E(50Efc"#''@C $F!'':Csyy>Q#))B-?"B**-))6  ggcUEN+,hh%/%7HYY""	 5(50!E)E1OC # 	 		
F HHS3779>)*Ee^F\\&"b)F88FSXXf---K :s   	I)c                    t        |       } t        j                  |       j                  }t	        | j
                        dk  rt        d| j
                         ||| j
                  d   dz
  z  z   }||z
  dz  }	||z
  |	z
  }
|t        |t              r,t        t        j                  j                  ||      |      }nt        ||      }t	        |j
                        dk7  s|j
                  d   |k7  rt        d|j
                         t        j                  ||	|
gg      }nt        j                  ||	z   |
z   |      }t        j                  j                  j!                  | d|||	z   |
z   ||	z   |
z   |z
  |d	dd
	      d   } || |j#                         z  n| |z  } |d	u rdn|dz  }|||z   }n|du r|dz   }n|}| d||f   S )NrO   z;Input `x` must have at least 2 dimensions. Received shape: rB   r#   rs   r!   rt   ru   F)rv   rw   rx   ry   rz   r{   	time_axis	freq_axisr   T.)r[   r$   rX   rU   rS   rC   r   rQ   r~   r   r   r   r   r   r   r   istftr*   )r   rI   rJ   rj   lengthrw   r   rU   expected_output_lenr   r   r   startends                 r   r   r      s    	'q)AHHQKE
177|a wwi)
 	

 %!''"+/'JJ/)a/E(50Efc"#''@C $F%8Csyy>Q#))B-?"B**-))6  ggcUEN+,hh%/%7F			 5(50!E)E1OC 	 
	 	
	
A  +CGGI_1DA5AjAoEfn	4a !S%)^r   c                 @    t         j                  j                  |       S r   )r   r   rsqrtr   s    r   r   r     s    77==r   c                 @    t         j                  j                  |       S r   )r   r   erfr   s    r   r   r     s    77;;q>r   c                 @    t         j                  j                  |       S r   )r   r   erf_invr   s    r   erfinvr     s    77??1r   c                 n    t        |       } t        |      }t        j                  j                  | |      S r   )r   r$   r;   solve)abs     r   r   r     s-    !A!A::Aq!!r   c                    t        |       } t        | j                        dk(  rt        j                         }n$t        j                  | j                  t              }t        | |      } t        j                  j                  | |||      S )Nint64)ordr"   r3   )r   r   rU   r   floatxr   result_typefloatr   r$   r;   rh   )r   r   r"   r3   rU   s        r   rh   rh     sd    !A!W,""177E2QA::??1#D8?DDr   c                 $    ddl m}  ||       d   S )Nr   )slogdetr#   )keras.src.backend.jax.numpyr   )r   r   s     r   logdetr   $  s    3
 1:a=r   )NF)T)r7   r   )rp   T)Nrp   T)NNF)$rF   r   	jax.numpynumpyr$   keras.src.backendr   r   keras.src.backend.commonr   keras.src.backend.jax.corer   r   keras.src.utils.module_utilsr   r   r   r   r1   r5   r<   rM   r[   r]   ra   rc   ri   rl   r   r   r   r   r   r   rh   r    r   r   <module>r      s     
  $ / + + 8 .	#H'98>>>>
P LP<.H <~"Er   