o
    2hR0                     @   s  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	 d5dd	Z
d5d
dZd6ddZdd Zd5ddZd7ddZdd Zdd Zdd Zdd Zdd Zd8d d!Zd8d"d#Z	d9d%d&Z		$	d:d'd(Zd)d* Zd+d, Zd-d. Zd/d0 Zd;d1d2Zd3d4 ZdS )<    N)config)standardize_dtype)dtypes)cast)convert_to_tensorFc                 C   d   |r|d urt d| d| dtj| |S |d u r*t|\}}t|d }tj| ||S NzsArgument `num_segments` cannot be set when sorted is True when using the tensorflow backend.Received: num_segments=z	, sorted=.r   )
ValueErrortfmathsegment_sumuniqueshapeunsorted_segment_sumdatasegment_idsnum_segmentssortedunique_segment_ids_ r   \/var/www/html/chatgem/venv/lib/python3.10/site-packages/keras/src/backend/tensorflow/math.pyr   
      r   c                 C   r   r   )r
   r   r   segment_maxr   r   unsorted_segment_maxr   r   r   r   r      r   r   Tc                 C      t jj| ||dS )N)r   )r   r   top_k)xkr   r   r   r   r   *      r   c                 C   s   t j| ||S N)r   r   in_top_k)targetspredictionsr    r   r   r   r#   .   s   r#   c                 C   r   )Naxiskeepdims)r   r   reduce_logsumexp)r   r'   r(   r   r   r   	logsumexp2   r!   r*   reducedc                 C   s:   |dvrt d| |dkrtj| S tjj| ddS )N>   r+   completez]`mode` argument value not supported. Expected one of {'reduced', 'complete'}. Received: mode=r+   T)full_matrices)r
   r   linalgqr)r   moder   r   r   r/   6   s   r/   c                 C   s   t jj| ||dddS )NF)frame_length
frame_stepr'   pad_end)r   signalframe)r   sequence_lengthsequence_strider   r   r   extract_sequencesB   s   r9   c                 C   s   t | ttfrt| dkrtd|  | \}}t|}t|}|j|jkr2td|j d|j |jjr:|j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=r	   )
isinstancetuplelistlenr
   r   r   dtypeis_floatingr   r   complex)r   realimagcomplex_inputr   r   r   _get_complex_tensor_from_tupleL   s2   rE   c                 C   ,   t | }tj|}tj|tj|fS r"   )rE   r   r5   fftr   rB   rC   r   rD   complex_outputr   r   r   rG   h      rG   c                 C   rF   r"   )rE   r   r5   fft2dr   rB   rC   rH   r   r   r   fft2n   rJ   rL   c           	      C   sj   | \}}t t|d |j}t t|d |j}|| }}t||f\}}|||  | ||  fS )Nr1   )r   r   r   r?   rL   )	r   rB   rC   hw	real_conj	imag_conjfft_realfft_imagr   r   r   ifft2t   s   rT   c                 C   s6   |d ur|g}t jj| |d}t j|t j|fS )N)
fft_length)r   r5   rfftr   rB   rC   )r   rU   rI   r   r   r   rV   }   s   rV   c                 C   s$   t | }|d ur|g}tj||S r"   )rE   r   r5   irfft)r   rU   rD   r   r   r   rW      s   rW   hannc                    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r|dkrut
jj|d| jd nt
jj|d| jd nt|| jd t j	dks j	d
 |krtd j	 t
 ||gg  fdd}	nd }	t
jj| || | |||	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=>   rX   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   ).0r   r   r   r   
<listcomp>   s    zstft.<locals>.<listcomp>r:   r1   reflect)r0   rX   Tperiodicr?   r?      PThe shape of `window` must be equal to [sequence_length].Received: window shape=c                        S r"   r   r3   r?   	win_arrayr   r   win   s   zstft.<locals>.winr2   r3   rU   	window_fn)r   r?   	TypeErrorr
   r;   strr   ranger>   r   r   padr5   hann_windowhamming_windowstftr   rB   rC   )r   r7   r8   rU   windowcenter	pad_widthl_padr_padrh   resultr   rf   r   rq      sn   


rq   c                    s\  t | }tj|j}||t|d d   }	|| d }
|| |
 }|d urvt|trE|dkr;tjj	|d|d ntjj
|d|d nt||d t jdksY jd |kratd	 j t |
|gg tj| fd
d}nd }tjj|||
 | |||d} |du rdn|d }|d ur|| }n|du r|d  }n|	}| d||f S )NrM   rb   r:   rX   Tr_   ra   r1   rc   c                    rd   r"   r   re   rf   r   r   <lambda>   s    zistft.<locals>.<lambda>ri   Fr   .)rE   r   r   rB   r?   r   r;   rl   r5   ro   rp   r   r>   r
   rn   inverse_stft_window_fninverse_stft)r   r7   r8   rU   lengthrr   rs   rD   r?   expected_output_lenru   rv   rh   startendr   rf   r   istft   sT   	


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   erfinvr   r   r   r   r     r   r   c                 C   s   t | } t |}tj| |S r"   )r   r   r.   solve)abr   r   r   r     s   r   c                 C   sr  ddl m} t| } | j}|j}|d u rtt|}nt|tr#|f}t	|dkr-|d n|}t|tr6dnt	|}|dkrE|d u rEd}n
|dkrO|d u rOd}t
| jdkr[t }nt| jt}t| |} |dkru|dddtdfv s|dkr|ddddtdfv rtjj| |||d	S |dkr|d
vr|tdkrtjjtj| ||dS |dkrtjjtjt| d| jd||dS t|| jd}tjjttj| |||d}	t|	d| S |dkr|dtdddfv r|d |d }
}|
dk r|
| n|
}
|dk r|| n|}|tdkr7|s"|
|kr"|
d8 }
tjjtjtj| ||d|
|d} | S |dkr]|sH||
krH|d8 }tjjtjtj| |
|d||d} | S || |d} |dkrwtjjtjj| dddd} ntjjtjj| dddd} |rt| |d } t| |d } | S |dkrtd| |dkrtd| td| )Nr   )moveaxisrb   	euclideanr:   froint64inf)ordr'   r(   )r   nucz-infr&   ra   g      ?r   rM   r1   )rM   r1   F)
compute_uv)r'   z6Invalid `ord` argument for vector norm. Received: ord=z6Invalid `ord` argument for matrix norm. Received: ord=z$Invalid axis values. Received: axis=)"keras.src.backend.tensorflow.numpyr   r   r   rankr<   rm   r;   intr>   r   r?   r   floatxr   result_typefloatr   r   r.   normr   
reduce_minabs
reduce_sum	not_equalpowsvdexpand_dimsr
   )r   r   r'   r(   r   x_shapendimnum_axesr?   outrow_axiscol_axisr   r   r   r     s   


 



r   c                 C   s   t | } tj| S r"   )r   r   r.   logdetr   r   r   r   r   {  s   r   )NF)T)r+   r"   )rX   T)NrX   T)NNF)
tensorflowr   keras.src.backendr   r   keras.src.backend.commonr   !keras.src.backend.tensorflow.corer   r   r   r   r   r#   r*   r/   r9   rE   rG   rL   rT   rV   rW   rq   r   r   r   r   r   r   r   r   r   r   r   <module>   s>    






	

F
<
a