o
    2h$                     @   s,  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 d6d	d
Zd6ddZd7ddZdd Zd6ddZd8ddZdd Zdd Zdd Zdd Zdd  Zd9d!d"Zd9d#d$Z	d:d&d'Z		%	d;d(d)Zd*d+ Zd,d- Zd.d/ Z d0d1 Z!d<d2d3Z"d4d5 Z#dS )=    N)config)standardize_dtype)dtypes)cast)convert_to_tensor)scipyFc                 C   $   |d u rt dtjj| |||d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sorted r   U/var/www/html/chatgem/venv/lib/python3.10/site-packages/keras/src/backend/jax/math.pyr         r   c                 C   r   r	   )r   r   r   segment_maxr   r   r   r   r      r   r   Tc                 C   s   t j| |S N)r   laxtop_k)xkr   r   r   r   r   $   s   r   c                 C   sX   t j|t j| dddd}t t |t j |}dt jt ||dd }t ||S )N)axis   )	jnptake_along_axisexpand_dimswhereisnaninfsumgreater
less_equal)targetspredictionsr   preds_at_labelrankr   r   r   in_top_k*   s   r-   c                 C   s   t jjj| ||dS )N)r   keepdims)r   r   special	logsumexp)r   r   r.   r   r   r   r0   6   s   r0   reducedc                 C   s&   |dvrt d| tjj| |dS )N>   r1   completez]`mode` argument value not supported. Expected one of {'reduced', 'complete'}. Received: mode=mode)r   r    linalgqr)r   r4   r   r   r   r6   :   s   r6   c                 C   sf   | j ^ }}t|}t| t||df} tjj| |f|fddd} t| g || j dd  R S )Nr   VALID)NTCOITr8   )dimension_numbers)	shapelistr    reshapemathprodr   r   conv_general_dilated_patches)r   sequence_lengthsequence_stridebatch_shapesignal_lengthr   r   r   extract_sequencesD   s    rF   c                 C   s   t | ttfrt| dkrtd|  | \}}|j|jkr*td|j d|j t|jtj	r:t|jtj	sBt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tupler=   lenr   r<   r    
issubdtypedtypefloatingr   r   complex)r   realimagcomplex_inputr   r   r   _get_complex_tensor_from_tupleR   s2   rS   c                 C   s(   t | }tj|}t|t|fS r   )rS   r    fftrP   rQ   r   rR   complex_outputr   r   r   rT   n      rT   c                 C   (   t | }tj|}t|t|fS r   )rS   r    rT   fft2rP   rQ   rU   r   r   r   rY   t   rW   rY   c                 C   rX   r   )rS   r    rT   ifft2rP   rQ   rU   r   r   r   rZ   z   rW   rZ   c                 C   s(   t jj| |ddd}t |t |fS Nr   backward)nr   norm)r    rT   rfftrP   rQ   )r   
fft_lengthrV   r   r   r   r_      s   r_   c                 C   s   t | }tjj||dddS r[   )rS   r    rT   irfft)r   r`   rR   r   r   r   ra      s   ra   hannc              
   C   s  t | jdvrtd| j ||k rtd| d| t|tr-|dvr-td| t| } |rQdd tt| j	D }|d	 |d	 f|d
< t
j| |dd} || d	 }|| | }|d urt|trsttj||| jd}	nt|| jd}	t|	j	dks|	j	d
 |krtd|	j	 t
|	||gg}	nt
j|| | | jd}	tjjj| d|	|| | || | | |d ddd
 }
t
d|	 d	  }|
| }
t
|
dd
}
t
|
t
|
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=>   rb   hammingz]If a string is passed to `window`, it must be one of `"hann"`, `"hamming"`. Received: window=c                 S   s   g | ]}d qS ))r   r   r   ).0_r   r   r   
<listcomp>   s    zstft.<locals>.<listcomp>rG   r   reflectr3   rM   r   PThe shape of `window` must be equal to [sequence_length].Received: window shape=      ?F)fswindownpersegnoverlapnfftboundarypaddedr;   )r   rM   	TypeErrorr   rI   strr   rangerK   r<   r    padr   signal
get_windowonesr   stftsqrtr&   swapaxesrP   rQ   )r   rB   rC   r`   rn   center	pad_widthl_padr_padwinresultscaler   r   r   r{      st   


	r{   c                 C   s  t | } t| j}t| jdk rtd| j ||| jd d   }|| d }	|| |	 }
|d urkt|trEt	t
j|||d}nt	||d}t|jdksY|jd |kratd|j t||	|
gg}ntj||	 |
 |d}tj
jj| d|||	 |
 ||	 |
 | |d	ddd
	d } |d ur| |  n| | } |d	u rdn|d }|d ur|| }n|du r|d  }n|}| d||f S )NrG   z;Input `x` must have at least 2 dimensions. Received shape: r;   r   rj   r   rk   rl   F)rm   rn   ro   rp   rq   rr   	time_axis	freq_axisr   T.)rS   r    rP   rM   rK   r<   r   rI   ru   r   r   rx   ry   rw   rz   r   istftr&   )r   rB   rC   r`   lengthrn   r~   rM   expected_output_lenr   r   r   startendr   r   r   r      s\   	



r   c                 C      t j| S r   )r   r   rsqrtr   r   r   r   r        r   c                 C   r   r   )r   r   erfr   r   r   r   r     r   r   c                 C   r   r   )r   r   erf_invr   r   r   r   erfinv  r   r   c                 C   s   t | } t |}tj| |S r   )r   r    r5   solve)abr   r   r   r     s   r   c                 C   sL   t | } t| jdkrt }nt| jt}t| |} t	j
j| |||dS )Nint64)ordr   r.   )r   r   rM   r   floatxr   result_typefloatr   r    r5   r^   )r   r   r   r.   rM   r   r   r   r^     s   

r^   c                 C   s   ddl m} || d S )Nr   )slogdetr   )keras.src.backend.jax.numpyr   )r   r   r   r   r   logdet$  s   r   )NF)T)r1   r   )rb   T)Nrb   T)NNF)$r?   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-   r0   r6   rF   rS   rT   rY   rZ   r_   ra   r{   r   r   r   r   r   r^   r   r   r   r   r   <module>   sD    








D
?

