
    &Vf5"                         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"dZd"dZ	 d#dZ	 	 	 d$dZd Zd Zd Zd Z d%dZ!dS )&    N)config)standardize_dtype)dtypes)cast)convert_to_tensor)scipyFc                 j    |t          d          t          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       W/var/www/html/software/conda/lib/python3.11/site-packages/keras/src/backend/jax/math.pyr   r      I    *
 
 	
 7k<F        c                 j    |t          d          t          j                            | |||          S r
   )r   r   r   segment_maxr   s       r   r   r      r   r   Tc                 B    t           j                            | |          S N)r   laxtop_k)xkr   s      r   r   r   $   s     7==Ar   c                     | d         } t          ||          d         }t          j        || d          }||k    }t          j        |d          S )N).Nr   )axis   )r   jnptake_along_axisany)targetspredictionsr   topk_valuestargets_valuesmasks         r   in_top_kr,   *   sV    i GQ''*K(gBGGGN[(D74a    r   c                     t          j        | |d          }t          j        t          j        t          j        | |z
            |d                    |z   }|st          j        |          n|S )NT)r"   keepdims)r$   maxlogsumexpsqueeze)r   r"   r.   max_xresults        r   	logsumexpr6   2   sj    GAD4000EE	**EEEFFN  '/:3;vF:r   reducedc                 p    |dvrt          d|           t          j                            | |          S )N>   r7   completez]`mode` argument value not supported. Expected one of {'reduced', 'complete'}. Received: mode=mode)r   r$   linalgqr)r   r;   s     r   r=   r=   :   sL    ***%"% %
 
 	

 :===&&&r   c                 "   | j         ^ }}t          |          }t          j        | t	          j        |          |df          } t          j                            | |f|fdd          } t          j        | g || j         dd          R           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_sequencesrN   D   s    "#'[-{##KA	+..qABBA,,			/ 	- 	 	A ;q7K7!'"##,77888r   c                    t          | t          t          f          rt          |           dk    rt	          d|            | \  }}|j        |j        k    rt	          d|j         d|j                   t          j        |j        t          j	                  r$t          j        |j        t          j	                  st	          d|  d          t          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tuplerE   lenr   rD   r$   
issubdtypedtypefloatingr   r   complex)r   realimagcomplex_inputs       r   _get_complex_tensor_from_tupler\   R   s   a%'' 
3q66Q;; 
 
 	
 JD$zTZN&*jN NAEN N
 
 	
 >$*cl33 
3>
CL< < 
       
 
 	
 GOOD$//Mr   c                     t          |           }t          j                            |          }t          j        |          t          j        |          fS r   )r\   r$   fftrY   rZ   r   r[   complex_outputs      r   r^   r^   n   sA    2155MW[[//N8N##SXn%=%===r   c                     t          |           }t          j                            |          }t          j        |          t          j        |          fS r   )r\   r$   r^   fft2rY   rZ   r_   s      r   rb   rb   t   sA    2155MW\\-00N8N##SXn%=%===r   c                     t           j                            | |dd          }t          j        |          t          j        |          fS Nr!   backward)nr"   norm)r$   r^   rfftrY   rZ   )r   
fft_lengthr`   s      r   rh   rh   z   s<    W\\!z\LLN8N##SXn%=%===r   c                 f    t          |           }t          j                            ||dd          S rd   )r\   r$   r^   irfft)r   ri   r[   s      r   rk   rk      s+    2155M7==*2J=OOOr   hannc           
         t          | j                  dvrt          d| j                   ||k     rt          d| d|           t	          |t
                    r|dvrt          d|           t          |           } |rOd t          t          | j	                            D             }|dz  |dz  f|d	<   t          j        | |d
          } ||z
  dz  }||z
  |z
  }|t	          |t
                    r5t          t          j                            ||          | j                  }	nt          || j                  }	t          |	j	                  dk    s|	j	        d	         |k    rt          d|	j	                   t          j        |	||gg          }	n!t          j        ||z   |z   | j                  }	t           j        j                            | d|	||z   |z   ||z   |z   |z
  |d d          d	         }
t          j        d|	                                dz  z            }|
|z  }
t          j        |
dd	          }
t          j        |
          t          j        |
          fS )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=>   rl   hammingz]If a string is passed to `window`, it must be one of `"hann"`, `"hamming"`. Received: window=c                     g | ]}d S ))r   r    ).0_s     r   
<listcomp>zstft.<locals>.<listcomp>   s    999V999r   rP   r!   reflectr:   rV   r#   PThe shape of `window` must be equal to [sequence_length].Received: window shape=      ?F)fswindownpersegnoverlapnfftboundarypaddedrC   )r   rV   	TypeErrorr   rR   strr   rangerT   rD   r$   padr   signal
get_windowonesr   stftsqrtr1   swapaxesrY   rZ   )r   rJ   rK   ri   r{   center	pad_widthl_padr_padwinr5   scales               r   r   r      s    !!)???.$%G. .
 
 	
 O##')8' '$' '
 
 	

 &# ,,,D;AD D   	!A 299U3qw<<%8%8999	#q*/:	"GAyy111/)a/E(50Efc"" 	;#''@@  CC $F!':::Csy>>Q#)B-?"B"B6*-)6 6   gcUEN+,,h%/%7HHHY""	 5(50!E)E1OC # 	 	 		
F HS37799>)**Ee^F\&"b))F8FSXf----r   c                 P   t          |           } t          j        |           j        }||| j        d         dz
  z  z   }||z
  dz  }	||z
  |	z
  }
|t          |t                    r0t          t          j	        
                    ||          |          }nt          ||          }t          |j                  dk    s|j        d         |k    rt          d|j                   t          j        ||	|
gg          }nt          j        ||	z   |
z   |          }t          j        j	                            | d|||	z   |
z   ||	z   |
z   |z
  |ddd		  	        d         } || |                                z  n| |z  } |du rd
n|dz  }|||z   }n|du r|dz   }n|}| d||f         S )NrC   r#   rP   rw   r!   rx   ry   F)rz   r{   r|   r}   r~   r   	time_axis	freq_axisr   T.)r\   r$   rY   rV   rD   rR   r   r   r   r   r   rT   r   r   r   r   istftr1   )r   rJ   rK   ri   lengthr{   r   rV   expected_output_lenr   r   r   startends                 r   r   r      s    	'q))AHQKKE$!'"+/'JJ/)a/E(50Efc"" 	9#''@@  CC $F%888Csy>>Q#)B-?"B"B6*-)6 6   gcUEN+,,h%/%7FFF		 5(50!E)E1OC 	 
	 
	 	
	
A  +CGGII_1DA5AAjAoEfn	4a !S%)^r   c                 @    t           j                            |           S r   )r   r   rsqrtr   s    r   r   r      s    7==r   c                 @    t           j                            |           S r   )r   r   erfr   s    r   r   r      s    7;;q>>r   c                 @    t           j                            |           S r   )r   r   erf_invr   s    r   erfinvr     s    7??1r   c                 ~    t          |           } t          |          }t          j                            | |          S r   )r   r$   r<   solve)abs     r   r   r     s4    !A!A:Aq!!!r   c                    t          |           } t          | j                  dk    rt          j                    }nt          j        | j        t                    }t          | |          } t          j
                            | |||          S )Nint64)ordr"   r.   )r   r   rV   r   floatxr   result_typefloatr   r$   r<   rg   )r   r   r"   r.   rV   s        r   rg   rg     sn    !A!!W,,"17E22QA:??1#D8?DDDr   )NF)T)r7   r   )rl   T)Nrl   T)NNF)"rG   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   r,   r6   r=   rN   r\   r^   rb   rh   rk   r   r   r   r   r   r   rg   rr   r   r   <module>r      s    



       $ $ $ $ $ $ / / / / / / + + + + + + + + + + + + 8 8 8 8 8 8 . . . . . .         ! ! !; ; ; ;' ' ' '9 9 9  8> > >> > >> > > >
P P P P LP<. <. <. <.H 6 6 6 6r      " " "E E E E E Er   