
    2Vh7                        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	 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 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)config)standardize_dtype)dtypes)cast)convert_to_tensor)
get_device)padc                 6   t        j                  t        j                  | j                  dd  t	                           j                         } |j                  |      j                  | j                   j                  t         j                        }|xs t        t        j                  |            }t        j                  |dk\  ||      }t        j                  ||k  ||      }|dz   ft        | j                  dd        z   }|dk(  r+t        j                  |dt	               it        d       z  }nt        j                   |dt	               i}|j#                  d|| j                         |      }|d ddf   }|j                  | j$                        S )	N   )devicer   amaxr   Inf.)torchprodtensorshaper   longrepeat_interleaveviewtypeint64lenuniquewheretupleonesfloatzerosscatter_reducedtype)datasegment_idsreduction_methodnum_segmentsnum_repeatsr   results          L/home/dcms/DCMS/lib/python3.12/site-packages/keras/src/backend/torch/math.py_segment_reduction_fnr)      s]   **TZZ^JL9
df 	%%k2	tzz		ekk	 
  A3u||K'@#AL ++kQ.\JK++l"KK
 A%

12"77E6!U8:<8E%L=He9JL9""	;

&6F
 CRCHF;;tzz""    c                 J    t        |       } t        |      }t        | |d|      S )Nsumr   r)   r"   r#   r%   kwargss       r(   segment_sumr0   7   s'    T"D#K0K {E<HHr*   c                 J    t        |       } t        |      }t        | |d|      S )Nr   r-   r.   s       r(   segment_maxr2   =   s'    T"D#K0K {FLIIr*   c                 H    t        |       } t        j                  | ||      S )N)sorted)r   r   topk)xkr4   s      r(   top_kr8   C   s    !A::a6**r*   c                    t        |       j                  t        j                        } | d d d f   } t        |      }t	        ||      j
                  }t        j                  || d      }||k\  }t        j                  |d      S )Nr   dim)axis)r   r   r   r   r8   valuestake_along_dimany)targetspredictionsr7   topk_valuestargets_valuesmasks         r(   in_top_krE   H   st    (--ekk:GagG#K0KQ'..K))+wBGN[(D99T##r*   c                     t        |       } |"t        t        | j                                     n|}t	        j
                  | ||      S )N)r;   keepdim)r   r   ranger;   r   	logsumexp)r6   r<   keepdimss      r(   rI   rI   R   s9    !A$(L5quuw dD??1$99r*   c                     t        |       } |dvrt        d|       t        |       } t        j                  j	                  | |      S )N>   reducedcompletez]`mode` argument value not supported. Expected one of {'reduced', 'complete'}. Received: mode=)mode)r   
ValueErrorr   linalgqr)r6   rN   s     r(   rQ   rQ   X   sT    !A**"V%
 	

 	!A<<??14?((r*   c                 J    t        |       } t        j                  | d||      S )Nr   )	dimensionsizestep)r   r   unfold_copy)r6   sequence_lengthsequence_strides      r(   extract_sequencesrY   d   s(    !A	RoO r*   c                    t        |       } | j                  ^ }}}||kD  rt        d| d|       |||z  k  rt        d| d| d|       t        j                  |      }t        j                  | |||f      } ||dz
  z  |z   }d|dz
  |z  z   }||z  }t
        j                  j                  j                  | d||z
  ddddf      } t        j                  | ||||f      } t        j                  | d      } t
        j                  j                  j                  | ddd|ddddf      } | j                  d   dz
  }	t        j                  | |d	f      } | d d d ||	z  |z  f   } t        j                  | |||	|z  f      } t        j                  | d
      d d d |f   } t        j                  | t        |      dz         S )NzQ`sequence_stride` must equal or less than x.shape[-1]. Received: sequence_stride=z, x.shape[-1]=zb`sequence_stride` must equal or greater than x.shape[-1] / x.shape[-2]. Received: sequence_stride=z, x.shape[-2]=r   r   )r      r      r[   r   r:   )r   )r   r   rO   mathr   r   reshapenn
functionalr	   permuter,   r   )
r6   rX   batch_shapenum_sequencesrW   flat_batchsizeoutput_sizenstep_per_segmentpadded_segment_lenshrinkeds
             r(   _overlap_sequencesri   k   s   !A34770[-())8(9 :*+-
 	

 /M9:))8(9 :*+>-J
 	
 YY{+Na.-IJA!]Q%67/IK_q0_DD +_<	A!O3Q1a@	A 		NM+<oN	A 	a&AAq!]Aq!Q#GHAwwqzA~Ha."-.A	!?!H,>?
?@A	N-x//IJ	A 			!A||O,A==E+.677r*   c                    t        | t        t        f      rt        |       dk7  rt	        d|        | \  }}t        |      }t        |      }|j                  |j                  k7  r%t	        d|j                   d|j                         t        j                  |      rt        j                  |      st	        d|  d      t        j                  ||      }|S )Nr[   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=.)

isinstancer   listr   rO   r   r   r   is_floating_pointcomplex)r6   realimagcomplex_inputs       r(   _get_complex_tensor_from_tuplers      s    a%'3q6Q;#
 	
 JD$T"DT"DzzTZZ&&*jj\N
 	
 ""4(0G0G0M#Q 
 	

 MM$-Mr*   c                     t        |       }t        j                  j                  |      }|j                  |j                  fS N)rs   r   fftrp   rq   r6   rr   complex_outputs      r(   rv   rv      s5    215MYY]]=1N 3 333r*   c                     t        |       }t        j                  j                  |      }|j                  |j
                  fS ru   )rs   r   rv   fft2rp   rq   rw   s      r(   rz   rz      s5    215MYY^^M2N 3 333r*   c                     t        |       }t        j                  j                  |      }|j                  |j
                  fS ru   )rs   r   rv   ifft2rp   rq   rw   s      r(   r|   r|      s5    215MYY__]3N 3 333r*   c                     t        |       } t        j                  j                  | |dd      }|j                  |j
                  fS Nr   backward)nr;   norm)r   r   rv   rfftrp   rq   )r6   
fft_lengthrx   s      r(   r   r      s=    !AYY^^A*^MN 3 333r*   c                 ^    t        |       }t        j                  j                  ||dd      S r~   )rs   r   rv   irfft)r6   r   rr   s      r(   r   r      s'    215M99??=JBZ?PPr*   c           	      t   t        | j                        dvrt        d| j                         ||k  rt        d| d|       t	        |t
              r|dvrt        d|       t        |       } |t	        |t
              r]|dk(  r,t        j                  |d| j                  t               	      }nCt        j                  |d| j                  t               	      }nt        || j                  
      }t        |j                        dk7  s|j                  d   |k7  rCt        d|j                         t        j                  |f| j                  t                     }d}| j                  ^ }}	t        | j                        dkD  r/d}t        j                  |      }
t        j                   | |
|	f      } t        j"                  | |||||d      } |r/| j                  dd  \  }}t        j                   | g |||      } t        j$                  | dd      } | j&                  | 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=>   hannhammingz]If a string is passed to `window`, it must be one of `"hann"`, `"hamming"`. Received: window=r   Tperiodicr!   r   r!   r   r   PThe shape of `window` must be equal to [sequence_length].Received: window shape=)r!   r   Fr[   )n_fft
hop_length
win_lengthwindowcenterreturn_complex)r   r!   	TypeErrorrO   rl   strr   r   hann_windowr   hamming_windowr   r   r   r]   r   r^   stftswapaxesrp   rq   )r6   rW   rX   r   r   r   winneed_unpackrb   samplesrd   fft_unique_binsrc   s                r(   r   r      s<    !)??$$%GG9.
 	
 O#))8(9 :$'
 	

 &#,,;;A(D  	!Afc"''#!''%<	 **#!''%<	 $F!'':Csyy>Q#))B-?"B**-))6 
 jj/+177:<PKGG['
177|a;/MM!ng67

	""	A )*&MM!K{KOK]KLq"b!A66166>r*   c           
         t        |       }|j                  j                  }d }	|t        |t              rI|dk(  r"t        j                  |d|t                     }	n/t        j                  |d|t                     }	nt        ||      }	t        |	j                        dk7  s|	j                  d   |k7  rt        d|	j                         ||k(  r|du r|	d}
|j                  ^ }}}t        |j                        d	kD  r0d}
t        j                  |      }t        j                  ||||f      }t        j                   |d
d      }t        j"                  |||||	||d      } |
r*| j                  d   }t        j                  | g ||      } | S t%        | |      } ||| j                  d
   dz
  z  z   }|	||z
  dz  }||z
  |z
  }t'        |	||ggd      }	||z   |z   }t        j(                  |	      }| |z   }t'        |d||z  |z
  fg      }t        j                  |||g      }t        j*                  |dd      }t        j,                  ||dg      }t        j                  |||z  g      }t        j.                  |	|d |       }	t        j0                  | |	      } t3        | |      } |du rdn|dz  }|||z   }n|du r|dz   }n|}| d||f   S )Nr   Tr   r   r   r   r   Fr\   r   )r   r   r   r   r   lengthr   r[   constantr   )rJ   .)rs   rp   r!   rl   r   r   r   r   r   r   r   r   rO   r]   r   r^   r   istftr   r	   squarer,   tiledividemultiplyri   )r6   rW   rX   r   r   r   r   rr   r!   r   r   rb   rc   r   rd   r   expected_output_lenl_padr_pad_sequence_lengthdenomoverlapsstartends                           r(   r   r     s"    315M$$E
Cfc"''#!%<	 **#!%<	 $F%8Csyy>Q#))B-?"B**-))6 
 *$4CO7D7J7J4m_}""#a'K!YY{3N!MMOM }b"=KK&& 	
 ggbkGa!8;!8!89A 	aA$!''"+/'JJ
o-!3_,u4#'4 +U2U:S!&&/9:EQ? :=M MNOPeh%@A		%T2

58Q-0eh&@%ABll3&7'7 89NN1c"1o.A5AjAoEfn	4a !S%)^r*   c                 B    t        |       } t        j                  |       S ru   )r   r   rsqrtr6   s    r(   r   r     s    !A;;q>r*   c                 B    t        |       } t        j                  |       S ru   )r   r   erfr   s    r(   r   r     s    !A99Q<r*   c                 B    t        |       } t        j                  |       S ru   )r   r   erfinvr   s    r(   r   r         !A<<?r*   c                 n    t        |       } t        |      }t        j                  j                  | |      S ru   )r   r   rP   solve)abs     r(   r   r     s-    !A!A<<a##r*   c                    t        |       } t        | j                        dk(  rt        j                         }n$t        j                  | j                  t              }t        | |      } t        j                  j                  | |||      S )Nr   )ordr;   rG   )r   r   r!   r   floatxr   result_typer   r   r   rP   r   )r6   r   r<   rJ   r!   s        r(   r   r     sg    !A!W,""177E2QA<<QCT8DDr*   c                 B    t        |       } t        j                  |       S ru   )r   r   logdetr   s    r(   r   r     r   r*   ru   )T)NF)rL   )r   T)Nr   T)NNF)$r]   r   keras.src.backendr   r   keras.src.backend.commonr   keras.src.backend.torch.corer   r   r   keras.src.backend.torch.numpyr	   r)   r0   r2   r8   rE   rI   rQ   rY   ri   rs   rv   rz   r|   r   r   r   r   r   r   r   r   r   r    r*   r(   <module>r      s      $ / + - : 3 -&#RIJ+
$:	)/8d:4444Q LPEZ `F


$Er*   