
    ij9                         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 Z	ddZ
ddZdd	Zdd
ZddZd ZddZ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 Z y)#    N)standardize_dtype)convert_to_tensor)
get_device)padc                    t        j                  t        j                  | j                  dd  t	                           j                         } |j                  |      j                  | j                   j                  t         j                        }|xs t        j                  |      dz   }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  }no|dk(  r*t        j                  |dt	               it        d      z  }n@|dk(  rt        j                  |dt	               i}nt        j                  |dt	               i}|j!                  d|| j                         |      }|d d	d
f   }|j                  | j"                        S )N   )devicer   amaxr	   Infaminprod.)torchr   tensorshaper   longrepeat_interleaveviewtypeint64maxwheretupleonesfloatzerosscatter_reducedtype)datasegment_idsreduction_methodnum_segmentsnum_repeatsr   results          q/var/www/html/emotional.easysim.app/public_html/venv/lib/python3.12/site-packages/keras/src/backend/torch/math.py_segment_reduction_fnr&      s   **TZZ^JL9
df 	%%k2	tzz		ekk	 
  =599[#9A#=L ++kQ.\JK++l"KK
 A%

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

&6F
 CRCHF;;tzz""    c                 J    t        |       } t        |      }t        | |d|      S )Nsumr   r&   r   r    r"   sorteds       r%   segment_sumr-   8   s'    T"D#K0K {E<HHr'   c                 J    t        |       } t        |      }t        | |d|      S )Nr
   r*   r+   s       r%   segment_maxr/   >   '    T"D#K0K {FLIIr'   c                 J    t        |       } t        |      }t        | |d|      S )Nr   r*   r+   s       r%   segment_minr2   D   r0   r'   c                 J    t        |       } t        |      }t        | |d|      S )Nr   r*   r+   s       r%   segment_prodr4   J   r0   r'   c                 H    t        |       } t        j                  | ||      S )N)r,   )r   r   topk)xkr,   s      r%   top_kr9   P   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   r9   valuestake_along_dimany)targetspredictionsr8   topk_valuestargets_valuesmasks         r%   in_top_krF   U   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)r7   r=   keepdimss      r%   rJ   rJ   _   s9    !A$(L5quuw dD??1$99r'   c                 t   t        |       } t        |      }| j                  dk  s|j                  dk  rt        d      | j                  d   |j                  d   k7  rt        d      | j	                  d      |j	                  d      z
  }t        j                  t        j                  ||z  d            S )N   z"`cdist` inputs must have rank >= 2r   z.Last dimension of inputs to `cdist` must matchr;   )r   ndim
ValueErrorr   	unsqueezer   sqrtr)   )r7   ydiffs      r%   cdistrV   e   s    !A!AvvzQVVaZ=>>wwr{aggbk!IJJ;;r?Q[[_,D::eiit455r'   c                 J    t        |       } t        j                  | d||      S )Nr   )	dimensionsizestep)r   r   unfold_copy)r7   sequence_lengthsequence_strides      r%   extract_sequencesr^   q   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   rM   r      rM   r   r;   )r   )r   r   rQ   mathr   r   reshapenn
functionalr   permuter)   r   )
r7   r]   batch_shapenum_sequencesr\   flat_batchsizeoutput_sizenstep_per_segmentpadded_segment_lenshrinkeds
             r%   _overlap_sequencesrm   x   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 )NrM   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   listlenrQ   r   r   r   is_floating_pointcomplex)r7   realimagcomplex_inputs       r%   _get_complex_tensor_from_tuplerx      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)rx   r   fftru   rv   r7   rw   complex_outputs      r%   r{   r{      s5    215MYY]]=1N 3 333r'   c                     t        |       }t        j                  j                  |      }|j                  |j
                  fS rz   )rx   r   r{   fft2ru   rv   r|   s      r%   r   r      s5    215MYY^^M2N 3 333r'   c                     t        |       }t        j                  j                  |      }|j                  |j
                  fS rz   )rx   r   r{   ifft2ru   rv   r|   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   r{   rfftru   rv   )r7   
fft_lengthr}   s      r%   r   r      s=    !AYY^^A*^MN 3 333r'   c                 ^    t        |       }t        j                  j                  ||dd      S r   )rx   r   r{   irfft)r7   r   rw   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	   FrM   )n_fft
hop_length
win_lengthwindowcenterreturn_complexrN   )r   r   	TypeErrorrQ   rp   strr   r   hann_windowr   hamming_windowrr   r   r   ra   r   rb   stftswapaxesru   rv   )r7   r\   r]   r   r   r   winneed_unpackrf   samplesrh   fft_unique_binsrg   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`   rN   )r   r   r   r   r   lengthr   rM   constantr   )rK   .)rx   ru   r   rp   r   r   r   r   r   r   rr   r   rQ   ra   r   rb   r   istftr   r   squarer)   tiledividemultiplyrm   )r7   r\   r]   r   r   r   r   rw   r   r   r   rf   rg   r   rh   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 rz   )r   r   rsqrtr7   s    r%   r   r     s    !A;;q>r'   c                 B    t        |       } t        j                  |       S rz   )r   r   erfr   s    r%   r   r     s    !A99Q<r'   c                 B    t        |       } t        j                  |       S rz   )r   r   erfcr   s    r%   r   r     s    !A::a=r'   c                 B    t        |       } t        j                  |       S rz   )r   r   erfinvr   s    r%   r   r         !A<<?r'   c                 B    t        |       } t        j                  |       S rz   )r   r   logdetr   s    r%   r   r     r   r'   )NF)Trz   )r   T)Nr   T)!ra   r   keras.src.backendr   keras.src.backend.torch.corer   r   keras.src.backend.torch.numpyr   r&   r-   r/   r2   r4   r9   rF   rJ   rV   r^   rm   rx   r{   r   r   r   r   r   r   r   r   r   r   r    r'   r%   <module>r      s      / : 3 -*#ZIJJJ+
$:	6/8d:4444Q LPEZ `F



r'   