
    h                         S SK rS SKJr  S SKJr  S SKJr  S SK	J
r
  S S.S jrS rSS	\4S
 jjrSS	\4S jjr " S S\5      rg)    N)OpRun)_concat_from_sequence)_cfft)_sliceaxisc                 *    [         R                  " XS9$ )Nr   )npconcatenate)r   argss     T/var/www/fran/franai/venv/lib/python3.13/site-packages/onnx/reference/ops/op_stft.py_concatr      s    >>$**    c                      [         R                  " XS9$ ! [         a]    [        U5      S:X  a#  [         R                  " U [	        U5      S   S9s $ [        U5       H  n[         R                  " XS9n M     U s $ f = f)Nr      r   )r
   expand_dims	TypeErrorlentuplereversed)ar   xs      r   
_unsqueezer      sj    ~~a++ t9>>>!%+a.99$Aq)A  s    :A=(A=<A=
fft_lengthc                    [        U R                  5      S-
  nS/nS/nUR                  S   n	/ n
[        U5       H  nX-  nX-   n[        U [        R
                  " U/5      [        R
                  " U/5      U5      nUR                  SS nXS   -
  4nUR                  SS U-   UR                  SS -   n[        R                  " UU R                  S9n[        UUSS9n[        UU5      nU
R                  U5        M     [        U
SSS	9nUR                  nUSS n[        S
 U 5       5      n/ UQU	PSP7n[        R                  " UU5      nUU-  n[        UXUSS9nU$ )z
Applies one dimensional FFT with window weights.
torch defines the number of frames as:
`n_frames = 1 + (len - n_fft) // hop_length`.
r   r   Ndtyper   r   new_axisc              3   &   #    U  H  nS v   M	     g7f)r   N ).0_s     r   	<genexpr>_stft.<locals>.<genexpr>A   s     7Aas   F)onesided	normalize)r   shaperanger   r
   arrayzerosr    r   r   appendr   r   reshape_dft)r   r   
hop_lengthn_frameswindowr)   	last_axisr   axis2window_sizeseqfsbeginendsliced_xnew_dimmissing	new_shapecstpad_sliced_xun_sliced_xnew_xshape_xshape_x_shortshape_x_short_onewindow_shapeweightsweighted_new_xresults                                r   _stftrK      s{    AGGq I4DDE,,q/K CHo!!RXXug.#F ..B'+-NN3B''1HNN234GG	hhy0x26 !u5

; " "#B;E kkGCRLM7777&77Q7Ljj.GW_N
EF Mr   c           
         S/nS/nS/nS/nU R                   S   n	XU	S-
  -  -   n
/ n/ n/ n[        U	5       GH*  nUnUS-   n[        R                  " [	        U [        R
                  " U/5      [        R
                  " U/5      U5      US   S9n[        UUSUSS9n[        UR                   5      nUS-
  n[	        U[        R
                  " U5      [        R
                  " U5      U/5      n[        R                  " UUS9n[        R                  " UR                   SU R                  S	9U-  nUR                   S
S nX-  nUR                   S   nU
UU-   -
  n/ UQUP7n/ UQUP7n[        R                  " UU R                  S9n[        R                  " UU R                  S9n[        UUUSS9n [        UUUSS9n![	        U[        R
                  " U5      [        R
                  " U5      U/5      n[        R                  " UUS9n"[        UU"USS9n#UR                  [        U SS95        UR                  [        U#SS95        UR                  [        U!SS95        GM-     [        USSS9n$[        USSS9n%[        USSS9n&U$R                  SSS9n'U%R                  SSS9n(U&R                  SSS9n)U'U)-  n*U(U)-  n+[        R                   " U*SS9n,[        R                   " U+SS9n-[        U,U-SS9n.U.R                   n/U.R#                  S5      n0[        R$                  " U0S5      n1U/SS
 n2[        U2USS9n3U1R#                  U35      n4U4$ )z
Reverses of `stft`.
r   r      r   r   r   T)r   r)   r*   )
fill_valuer    Nr   r!   )r   keepdims)rM   r   )r   r   )r+   r,   r
   squeezer   r-   r1   r   fullr    r.   r   r/   r   r   sumr   r0   	transpose)5r   r   r2   r4   r)   zeroonetwoaxisfr3   expected_signal_lenseqrseqiseqcr9   r:   r;   frame_xiftn_dimsn_dims_1slicedytmpctmpshape_beginn_leftsizen_right
left_shaperight_shaperightleftyycitmpyiredrrediredcresrresirescrrrirr0ri0concresult_shapereshaped_result
transposedother_dimensionsfinal_shapefinals5                                                        r   _istftr   M   s8    3D#C#CDEwwr{H$X\'BB DDDHo1f**1bhhw'3%%@uQx

 7JR(dSSYY A:RXXd^RXXc]XJGzz&x0wwtzzaqww?&Hjj"ozz"~%$7+{+F+
--W-AGG4xx
!''2D$B/T4R0 RXXc]BHHSMH:Fzz&x0T4R0 	Jqr*+Jr+,Jr+,M R !B;D B;D B;D 88a8(D88a8(D88a8(D	B	B ..!
$C
..!
$C3!$D ::Lll7+Oov6J#AB'*Ca8K{+ELr   c                       \ rS rSrSS jrSrg)STFT   Nc           	         Uc"  Uc  UR                   S   nOUR                   S   nUnUc   [        R                  " U4UR                  S9nSUR                   S   U-
  U-  -   n[	        XXgX5S9nUR                  UR                  5      4$ )Nr   r   r   r   )r)   )r+   r
   onesr    rK   astype)	selfr   
frame_stepr4   frame_lengthr)   r2   r3   ress	            r   _run	STFT._run   s    ~ wwr{%||A
>WWl_AGG<Fl2zAAAZ6U

177#%%r   r$   )NNN)__name__
__module____qualname____firstlineno__r   __static_attributes__r$   r   r   r   r      s    &r   r   )F)numpyr
   onnx.reference.op_runr   *onnx.reference.ops.op_concat_from_sequencer   onnx.reference.ops.op_dftr   r1   onnx.reference.ops.op_slicer   r   r   intrK   r   r   r$   r   r   <module>r      sM     ' L 3 .  +	, ,^O# Od&5 &r   