
    ijM&                         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ZddZddZddZdd	Zd
 ZddZ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 Z y)     N)standardize_dtype)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       o/var/www/html/emotional.easysim.app/public_html/venv/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        d      t        j                  j                  | |||      S r   )r	   r
   r   segment_minr   s       r   r   r   !   r   r   c                 b    |t        d      t        j                  j                  | |||      S r   )r	   r
   r   segment_prodr   s       r   r   r   ,   sA    *
 	
 77k<F    r   c                 B    t         j                  j                  | |      S N)r
   laxtop_k)xkr   s      r   r   r   7   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_kr3   =   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$   r5   s      r   r7   r7   I   s$    99&&qth&GGr   c                    t        j                  |       } t        j                  |      }| j                  dk  s|j                  dk  rt        d      | j                  d   |j                  d   k7  rt        d      t        j
                  | d      t        j
                  |d      z
  }t        j                  t        j                  ||z  d            S )N   z"`cdist` inputs must have rank >= 2r"   z.Last dimension of inputs to `cdist` must matchr#   )r&   asarrayndimr	   shaper(   sqrtr,   )r   ydiffs      r   cdistrB   M   s    AAAAvvzQVVaZ=>>wwr{aggbk!IJJ??1b!COOAr$::D88CGGD4Kb122r   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OITrE   )dimension_numbersr:   )	r>   listr&   reshapemathprodr
   r   conv_general_dilated_patches)r   sequence_lengthsequence_stridebatch_shapesignal_lengths        r   extract_sequencesrQ   X   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 )Nr9   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tuplerH   lenr	   r>   r&   
issubdtypedtypefloatingr
   r   complex)r   realimagcomplex_inputs       r   _get_complex_tensor_from_tupler^   f   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&   fftr[   r\   r   r]   complex_outputs      r   r`   r`      s;    215MWW[[/N88N#SXXn%===r   c                     t        |       }t        j                  j                  |      }t        j                  |      t        j
                  |      fS r   )r^   r&   r`   fft2r[   r\   ra   s      r   rd   rd      s;    215MWW\\-0N88N#SXXn%===r   c                     t        |       }t        j                  j                  |      }t        j                  |      t        j
                  |      fS r   )r^   r&   r`   ifft2r[   r\   ra   s      r   rf   rf      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`   rfftr[   r\   )r   
fft_lengthrb   s      r   rl   rl      s9    WW\\!z\LN88N#SXXn%===r   c                 ^    t        |       }t        j                  j                  ||dd      S rh   )r^   r&   r`   irfft)r   rm   r]   s      r   ro   ro      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   r9   r"   reflect)moderX   r%   PThe shape of `window` must be equal to [sequence_length].Received: window shape=      ?F)fswindownpersegnoverlapnfftboundarypaddedr:   )r   rX   	TypeErrorr	   rT   strr   rangerV   r>   r&   padr   signal
get_windowonesr
   stftr?   r,   swapaxesr[   r\   )r   rM   rN   rm   r{   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 )Nr9   z;Input `x` must have at least 2 dimensions. Received shape: r:   r%   rw   r"   rx   ry   F)rz   r{   r|   r}   r~   r   	time_axis	freq_axisr   T.)r^   r&   r[   rX   rV   r>   r	   rT   r   r   r   r   r   r   r   r
   istftr,   )r   rM   rN   rm   lengthr{   r   rX   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                 V    t        |       } t        j                  j                  |       S r   )r   r
   r   rsqrtr   s    r   r   r     s    !A77==r   c                 @    t         j                  j                  |       S r   )r
   r   erfr   s    r   r   r   !  s    77;;q>r   c                 j    t        |       } t        j                  j                  j	                  |       S r   )r   r
   r   r6   erfcr   s    r   r   r   %  s'    !A99!!!$$r   c                 j    t        |       } t        j                  j                  j	                  |       S r   )r   r
   r   r6   erfinvr   s    r   r   r   *  s'    !A99##A&&r   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)Tr   )rs   T)Nrs   T)!rJ   r
   	jax.numpynumpyr&   keras.src.backendr   keras.src.backend.jax.corer   keras.src.utils.module_utilsr   r   r   r   r   r   r3   r7   rB   rQ   r^   r`   rd   rf   rl   ro   r   r   r   r   r   r   r    r   r   <module>r      s     
  / 8 .	#H398>>>>
P LP<.H <~
%
'
r   