
    2Vh'                         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 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)standardize_dtype)dtypes)fft)fft2)convert_to_tensor)scipyc                    |t        j                  |      dz   }|dk\  }| |   }||   }t        |j                        }||d<   |t         j                  k(  r4t        j
                  ||j                        t         j                   z  }	n!t        j                  ||j                        }	|r|j                  |	||       |	S t        j                  |      }
||
   }||
   }|j                  |	||       |	S )N   r   dtype)npamaxlistshapemaximumonesr   infzerosatargsort)datasegment_idsreduction_methodnum_segmentssortedvalid_indices
valid_datavalid_segment_ids
data_shaperesultsort_indicessorted_segment_idssorted_datas                L/home/dcms/DCMS/lib/python3.12/site-packages/keras/src/backend/numpy/math.py_segment_reduction_fnr%      s     ww{+a/1$Mm$J#M2j&&'J qM 2::%:+;+;<wF*J,<,<=F$5zB M zz"34.|< .F$6DM    c                 <    t        | |t        j                  ||      S N)r%   r   addr   r   r   r   s       r$   segment_sumr+   +   s     k266< r&   c                 <    t        | |t        j                  ||      S r(   )r%   r   r   r*   s       r$   segment_maxr-   1   s     k2::|V r&   c                    |rMt        j                  | d      dd d df   }t        j                  | |d      }|dd |f   }|dd |f   }||fS t        j                  | | d      d| d f   }t        j                  | |d      }||fS )Naxis.)r   r   take_along_axisargpartition)xkr   sorted_indicessorted_valuestop_k_valuestop_k_indicess          r$   top_kr:   7   s    AB/TrT	:**1n2F$S"1"W-&sBQBw/ && A2B7aRSA))!]D&&r&   c                     | d d d f   } t        ||      d   }t        j                  || d      }||k\  }t        j                  |d      S )Nr   r/   r0   )r:   r   r2   any)targetspredictionsr5   topk_valuestargets_valuesmasks         r$   in_top_krB   F   sP    agGQ'*K''W2FN[(D66$R  r&   c                 F    t         j                  j                  | ||      S )N)r1   keepdims)r   special	logsumexp)r4   r1   rD   s      r$   rF   rF   N   s    ==""14("CCr&   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)
ValueErrorr   linalgqr)r4   rK   s     r$   rN   rN   R   s@    **"V%
 	

 99<<<%%r&   c                    | j                   ^ }}t        |      }| j                   d d | j                   d   ||z
  z
  |z  |fz   }| j                  d d || j                  d   z  | j                  d   fz   }t        j                  j
                  j                  | ||      } t        j                  | g || j                   dd        S )Nr/   )r   strides)r   r   rP   r   libstride_tricks
as_stridedreshape)r4   sequence_lengthsequence_stridebatch_shape_r   rP   s          r$   extract_sequencesrZ   \   s    ggO[!{#KGGCRL	
/9	:N E iin!))B-'			"  G 	'''HA::a6;6677r&   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      |d|z  z   }|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=.y              ?)

isinstancetupler   lenrL   r   r   
issubdtyper   floating)r4   realimagcomplex_inputs       r$   _get_complex_tensor_from_tuplerf   k   s    a%'3q6Q;#
 	
 JD$zzTZZ&&*jj\N
 	
 ==R[[1

BKK: #Q 
 	
 29$Mr&   c                 r    t        |       \  }}t        j                  |      t        j                  |      fS r(   )jax_fftr   arrayr4   rc   rd   s      r$   r   r      s*    JD$88D>288D>))r&   c                 r    t        |       \  }}t        j                  |      t        j                  |      fS r(   )jax_fft2r   ri   rj   s      r$   r   r      s*    !JD$88D>288D>))r&   c                     t        |       }t        j                  j                  |      }t        j                  |      t        j
                  |      fS r(   )rf   r   r   ifft2rc   rd   )r4   re   complex_outputs      r$   rn   rn      s;    215MVV\\-0N77>"BGGN$;;;r&   c                     t         j                  j                  | |dd      }t        j                  |      j	                  | j
                        t        j                  |      j	                  | j
                        fS )Nr/   backwardnr1   norm)r   r   rfftrc   astyper   rd   )r4   
fft_lengthro   s      r$   ru   ru      s^    VV[[jr
[KN 	&&qww/
&&qww/ r&   c                     t        |       }t        j                  j                  ||dd      j	                  | d   j
                        S )Nr/   rq   rr   r   )rf   r   r   irfftrv   r   )r4   rw   re   s      r$   ry   ry      sA    215M66<<":  fQqTZZr&   c           
         t        | j                        dvrt        d| j                         ||k  rt        d| d|       t	        |t
              r|dvrt        d|       t        |       } | j                  }|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!                  | d|||	z   |
z   ||	z   |
z   |z
  |d d      d	   } | t        j"                  d|j%                         dz  z        z  } t        j&                  | dd	      } t        j(                  |       j+                  |      t        j,                  |       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   r\   r/   reflectrJ   r   r
   PThe shape of `window` must be equal to [sequence_length].Received: window shape=      ?F)fswindownpersegnoverlapnfftboundarypaddedrQ   )r   r   	TypeErrorrL   r^   strr   ranger`   r   r   padr   signal
get_windowr   stftsqrtsumswapaxesrc   rv   rd   )r4   rV   rW   rw   r   center	ori_dtyperY   	pad_widthl_padr_padwins               r$   r   r      s    !)??$$%GG9.
 	
 O#))8(9 :$'
 	

 &#,,;;A(D  	!AI%*3qww<%89V9	9#q*/:	"FF1ii0/)a/E(50Efc"#''@C $F!'':Csyy>Q#))B-?"B**-))6  ffSE5>*+gg.6qwwG	 5(50!E)E1OC 	 		 			
A 	
BGGC#'')q.())A
Ar2A771:Y'):):9)EEEK :s   !	Jc                 (   t        |       } t        j                  |       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                  | 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 )NrQ   r
   r\   r   r/   r   r   F)r   r   r   r   r   r   	time_axis	freq_axisr   T.)rf   r   rc   r   r   r^   r   r   r   r   r   r`   rL   r   r   istftr   )r4   rV   rW   rw   lengthr   r   r   expected_output_lenr   r   r   startends                 r$   r   r      s    	'q)AGGAJE$!''"+/'JJ/)a/E(50Efc"#''@C $F%8Csyy>Q#))B-?"B**-))6  ffSE5>*+gg.6uE	 5(50!E)E1OC 	 
	 	
	
A  +CGGI_1DA5AjAoEfn	4a !S%)^r&   c                 2    dt        j                  |       z  S )Nr   )r   r   r4   s    r$   rsqrtr   !  s    r&   c                 f    t        j                  t        j                  j	                  |             S r(   )r   ri   r   rE   erfr   s    r$   r   r   %  s     88EMM%%a())r&   c                 f    t        j                  t        j                  j	                  |             S r(   )r   ri   r   rE   erfinvr   s    r$   r   r   )  s     88EMM((+,,r&   c                 n    t        |       } t        |      }t        j                  j                  | |      S r(   )r   r   rM   solve)abs     r$   r   r   -  s+    !A!A99??1a  r&   c                     t        |       } t        | j                        }d|v s|dk(  r t        j                  | j                  d      }t
        j                  j                  | |||      j                  |      S )Nintboolr{   )ordr1   rD   )	r   r   r   r   result_typer   rM   rt   rv   )r4   r   r1   rD   r   s        r$   rt   rt   3  sh    !Aagg&E~&""177I699>>!4(>CJJ r&   c                 $    ddl m}  ||       d   S )Nr   )slogdetr
   )keras.src.backend.numpy.numpyr   )r4   r   s     r$   logdetr   =  s    5 1:a=r&   )NF)F)rH   r(   )r}   T)Nr}   T)NNF)#numpyr   keras.src.backendr   keras.src.backend.commonr   keras.src.backend.jax.mathr   rh   r   rl   keras.src.backend.numpy.corer   keras.src.utils.module_utilsr   r%   r+   r-   r:   rB   rF   rN   rZ   rf   rn   ru   ry   r   r   r   r   r   r   rt   r    r&   r$   <module>r      s     / + 5 7 : .@'!D&88*
*
< LP=FJ 6r*-!r&   