
    bIg                        d dl m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dZd	 Zddd
ZdddZ G d de      Zy)    )annotationsN)OpRun)_concat_from_sequence)_cfft)_sliceaxisc                0    t        j                  ||       S )Nr   )npconcatenate)r	   argss     W/var/www/html/answerous/venv/lib/python3.12/site-packages/onnx/reference/ops/op_stft.py_concatr      s    >>$T**    c                   	 t        j                  | |      S # t        $ r_ t        |      dk(  r%t        j                  | t	        |      d         cY S t        |      D ]  }t        j                  | |      }  | cY S w xY w)Nr      r   )r   expand_dims	TypeErrorlentuplereversed)ar	   xs      r   
_unsqueezer      ss    ~~ad++ t9>>>!%+a.99$ 	*Aqq)A	*s    :B)B Bc                   t        | j                        dz
  }dg}dg}|j                  d   }	g }
t        |      D ]  }||z  }||	z   }t        | t	        j
                  |g      t	        j
                  |g      |      }|j                  dd }|	|d   z
  f}|j                  dd |z   |j                  dd z   }t	        j                  || j                        }t        ||d      }t        ||      }|
j                  |        t        |
dd	      }|j                  }|dd }t        d
 |D              }g ||	d}t	        j                  ||      }||z  }t        ||||d      }|S )zApplies 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      K   | ]  }d   yw)r   N ).0_s     r   	<genexpr>z_stft.<locals>.<genexpr>A   s     7Aa7s   F)onesided	normalize)r   shaperanger   r   arrayzerosr    r   r   appendr   r   reshape_dft)r   
fft_length
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  Zk!!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
IEF Mr   c           
        dg}dg}dg}dg}| j                   d   }	|||	dz
  z  z   }
g }g }g }t        |	      D ]E  }|}|dz   }t        j                  t	        | t        j
                  |g      t        j
                  |g      |      |d         }t        ||d|d      }t        |j                         }|dz
  }t	        |t        j
                  |      t        j
                  |      |g      }t        j                  ||      }t        j                  |j                   d| j                  	      |z  }|j                   d
d }||z  }|j                   d   }|
||z   z
  }g ||}g ||}t        j                  || j                        }t        j                  || j                        }t        |||d      } t        |||d      }!t	        |t        j
                  |      t        j
                  |      |g      }t        j                  ||      }"t        ||"|d      }#|j                  t        | d             |j                  t        |#d             |j                  t        |!d             H t        |dd      }$t        |dd      }%t        |dd      }&|$j                  dd      }'|%j                  dd      }(|&j                  dd      })|'|)z  }*|(|)z  }+t        j                   |*d      },t        j                   |+d      }-t        |,|-d      }.|.j                   }/|.j#                  d      }0t        j$                  |0d      }1|/dd
 }2t        |2|d      }3|1j#                  |3      }4|4S )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,   r0   r   fullr    r-   r   r.   r   r   sumr   r/   	transpose)5r   r1   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   s@   3D#C#CDEwwr{H$zX\'BB DDDHo '-1f**1bhhw'3%%@q
 7JR(dSSYY A:RXXd^RXXc]XJGzz&x0wwtzzaqww?&Hjj"oj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+,O'-T !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                      e Zd ZddZy)STFTNc                   |!||j                   d   }n|j                   d   }|}|"t        j                  |f|j                        }d|j                   d   |z
  |z  z   }t	        ||||||      }|j                  |j                        fS )Nr   r   r   r   )r(   )r*   r   onesr    rK   astype)	selfr   
frame_stepr4   frame_lengthr(   r2   r3   ress	            r   _runz	STFT._run   s    ~ wwr{%||A
>WWl_AGG<Fl2zAAA|Z6HU

177#%%r   )NNN)__name__
__module____qualname__r   r$   r   r   r   r      s    &r   r   )F)r1   int)
__future__r   numpyr   onnx.reference.op_runr   *onnx.reference.ops.op_concat_from_sequencer   onnx.reference.ops.op_dftr   r0   onnx.reference.ops.op_slicer   r   r   rK   r   r   r$   r   r   <module>r      sA    #  ' L 3 .  +	,^Nb&5 &r   