
    &Vf:                         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!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S )(    N)config)standardize_dtype)dtypes)cast)convert_to_tensor)
get_device)padc                 *   t          |           } t          |          }t          j        t          j        | j        dd          t                                                                          } |                    |          j        | j         	                    t          j
                  }|p t          t          j        |                    }t          j        |dk    ||          }t          j        ||k     ||          }|dz   ft          | j        dd                    z   }t          j        |dt                      i                    d||                                           }|d ddf         }|	                    | j                  S )N   devicer   r   .)r   torchprodtensorshaper   longrepeat_interleaveviewtypeint64lenuniquewheretuplezerosscatter_addfloatdtypedatasegment_idsnum_segmentskwargsnum_repeatsr   results          Y/var/www/html/software/conda/lib/python3.11/site-packages/keras/src/backend/torch/math.pysegment_sumr(      sh   T""D#K00K*TZ^JLL999 
dff 	%%k22	tz		ek		 
  A3u|K'@'@#A#AL +kQ.\JJK+l"K K
 A%
122"7"77E[%5
55AA	;

 F
 CRCHF;;tz"""    c                 ,   t          |           } t          |          }t          j        t          j        | j        dd          t                                                                          } |                    |          j        | j         	                    t          j
                  }|p t          t          j        |                    }t          j        |dk    ||          }t          j        ||k     ||          }|dz   ft          | j        dd                    z   }t          j        |dt                      i                    d||                                 d          }|d ddf         }|	                    | j                  S )Nr   r   r   r   amaxr   .)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   scatter_reducer   r   r    s          r'   segment_maxr-   4   sj   T""D#K00K*TZ^JLL999 
dff 	%%k22	tz		ek		 
  A3u|K'@'@#A#AL +kQ.\JJK+l"K K
 A%
122"7"77E[%5
55DD	;

f F
 CRCHF;;tz"""r)   Tc                 N    t          |           } t          j        | ||          S )N)sorted)r   r   topk)xkr/   s      r'   top_kr3   Z   s&    !A:a6****r)   c                     t          |                               t          j                  } | d d d f         } t          |          }t	          ||          j        }t          j        || d          }||k    }t          j        |d          S )Nr   dim)axis)r   r   r   r   r3   valuestake_along_dimany)targetspredictionsr2   topk_valuestargets_valuesmasks         r'   in_top_kr@   _   s    ((--ek::GaaagG#K00KQ''.K)+wBGGGN[(D9T####r)   Fc                    t          |           } |Rt          j        |           }t          j        t          j        t          j        | |z
                                |z   S t          j        | |d          }t          j        t          j        t          j        | |z
            |d                    |z   }|st          j        ||          n|S )NT)r6   keepdimr5   )r   r   maxlogsumexpr+   squeeze)r1   r7   keepdimsmax_xr&   s        r'   	logsumexprJ   i   s    !A|	!y59QY#7#78899EAAJqdD111E	%)EIa%i00dDIIIJJ
	  3;F5=T****Fr)   reducedc                     t          |           } |dvrt          d|           t          |           } t          j                            | |          S )N>   rK   completez]`mode` argument value not supported. Expected one of {'reduced', 'complete'}. Received: mode=)mode)r   
ValueErrorr   linalgqr)r1   rN   s     r'   rQ   rQ   w   sf    !A***%"% %
 
 	

 	!A<??14?(((r)   c                 P    t          |           } t          j        | d||          S )Nr   )	dimensionsizestep)r   r   unfold_copy)r1   sequence_lengthsequence_strides      r'   extract_sequencesrY      s2    !A	RoO   r)   c                    t          |           } | j        ^ }}}||k    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        	                    | d||z
  ddddf          } t          j        | ||||f          } t          j
        | d          } t
          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   r5   )r   )r   r   rO   mathr   r   reshapenn
functionalr	   permuterE   r   )
r1   rX   batch_shapenum_sequencesrW   flat_batchsizeoutput_sizenstep_per_segmentpadded_segment_lenshrinkeds
             r'   _overlap_sequencesri      sX   !A3470[-((-)8- -*- -
 
 	

 /M9::J)8J J +J J ;HJ J
 
 	
 Y{++Na.-IJJA!]Q%67/IK_q0_DD +_<	A!O3Q1a@	 	A 		NM+<oN	 	A 	a&&AAq!]Aq!Q#GHHAwqzA~Ha."-..A	!!!?!H,>?
?@A	N-x//IJ	 	A 		!AAA||O,A=E+..6777r)   c                    t          | t          t          f          rt          |           dk    rt	          d|            | \  }}t          |          }t          |          }|j        |j        k    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)r1   realimagcomplex_inputs       r'   _get_complex_tensor_from_tuplers      s!   a%'' 
3q66Q;; 
 
 	
 JD$T""DT""DzTZN&*jN NAEN N
 
 	
 "4(( 
0G0M0M 
      
 
 	

 M$--Mr)   c                 z    t          |           }t          j                            |          }|j        |j        fS N)rs   r   fftrp   rq   r1   rr   complex_outputs      r'   rv   rv      s3    2155MY]]=11N 333r)   c                 z    t          |           }t          j                            |          }|j        |j        fS ru   )rs   r   rv   fft2rp   rq   rw   s      r'   rz   rz      s3    2155MY^^M22N 333r)   c                     t          |           } t          j                            | |dd          }|j        |j        fS Nr   backward)nr6   norm)r   r   rv   rfftrp   rq   )r1   
fft_lengthrx   s      r'   r   r      s;    !AY^^A*^MMN 333r)   c                 f    t          |           }t          j                            ||dd          S r|   )rs   r   rv   irfft)r1   r   rr   s      r'   r   r      s+    2155M9??=JBZ?PPPr)   hannc           	      h   t          | j                  dvrt          d| j                   ||k     rt          d| d|           t	          |t
                    r|dvrt          d|           t          |           } |t	          |t
                    rZ|dk    r*t          j        |d| j        t                      	          }n@t          j
        |d| j        t                      	          }nt          || j        
          }t          |j                  dk    s|j        d         |k    rt          d|j                   n)t          j        |f| j        t                                }d}| j        ^ }}	t          | j                  dk    r-d}t          j        |          }
t          j        | |
|	f          } t          j        | |||||d          } |r.| j        dd          \  }}t          j        | g |||R           } 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=>   r   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   onesr]   r   r^   stftswapaxesrp   rq   )r1   rW   rX   r   r   r   winneed_unpackrb   samplesrd   fft_unique_binsrc   s                r'   r   r      s    !!)???.$%G. .
 
 	
 O##')8' '$' '
 
 	

 &# ,,,D;AD D   	!Afc"" 	;'#!'%<<	   *#!'%<<	   $F!':::Csy>>Q#)B-?"B"B6*-)6 6   #C j/+17:<<PPPKG['
17||a;//M!ng677
	""	 	 	A  M)*&M!K{KOK]KKLLq"b!!A616>r)   c           
         t          |           }|j        j        }d }	|t          |t                    rP|dk    r%t          j        |d|t                                }	n6t          j        |d|t                                }	nt          ||          }	t          |	j                  dk    s|	j        d         |k    rt          d|	j                   ||k    r|du r|	d}
|j        ^ }}}t          |j                  d	k    r.d}
t          j        |          }t          j        ||||f          }t          j        |d
d          }t          j        |||||	||d          } |
r'| j        d         }t          j        | g ||R           } | 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          j        | |	          } 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   )rH   .)rs   rp   r   rl   r   r   r   r   r   r   r   r   rO   r]   r   r^   r   istftr   r	   squarerE   tiledividemultiplyri   )r1   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   8  s    3155M$E
Cfc"" 	9'#!%<<	   *#!%<<	   $F%888Csy>>Q#)B-?"B"B6*-)6 6  
 *$$4CO7D7J4m_}"##a''K!Y{33N!MO M }b"==K&& 	
 	
 	
  	:gbkGa!8;!8!8!899A 	aA$!'"+/'JJ
o-!3_,u4#'44 +U2U:S!!&&/9:EQ? :=M MNOPPeh%@AA	%T222
58Q-00eh&@%ABBl3&7'7&7 899N1c""1o..A5AAjAoEfn	4a !S%)^r)   c                 H    t          |           } t          j        |           S ru   )r   r   rsqrtr1   s    r'   r   r     s    !A;q>>r)   c                 H    t          |           } t          j        |           S ru   )r   r   erfr   s    r'   r   r     s    !A9Q<<r)   c                 H    t          |           } t          j        |           S ru   )r   r   erfinvr   s    r'   r   r     s    !A<??r)   c                 ~    t          |           } t          |          }t          j                            | |          S ru   )r   r   rP   solve)abs     r'   r   r     s4    !A!A<a###r)   c                    t          |           } t          | j                  dk    rt          j                    }nt          j        | j        t                    }t          | |          } t          j
                            | |||          S )Nr   )ordr6   rB   )r   r   r   r   floatxr   result_typer   r   r   rP   r   )r1   r   r7   rH   r   s        r'   r   r     sq    !A!!W,,"17E22QA<QCT8DDDr)   ru   )T)NF)rK   )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(   r-   r3   r@   rJ   rQ   rY   ri   rs   rv   rz   r   r   r   r   r   r   r   r   r    r)   r'   <module>r      s*     $ $ $ $ $ $ / / / / / / + + + + + + - - - - - - : : : : : : 3 3 3 3 3 3 - - - - - -## ## ## ##L## ## ## ##L+ + + +
$ $ $G G G G	) 	) 	) 	)  /8 /8 /8d  :4 4 44 4 44 4 4 4Q Q Q Q LPE E E EZ ` ` ` `F  
  
  
$ $ $E E E E E Er)   