o
    r::j                     @  sz   d dl mZ d dlZd dlmZ dd
dZdddZdddZdddZ		ddddZ
G dd deZG dd deZdS )     )annotationsN)OpRunx
np.ndarray
fft_lengthintaxisreturnc                 C  sL   t jj| ||d}t |}t |}t j|dt jf |dt jf fddS )zECompute the FFT return the real representation of the complex result.nr   .r   )npfftrealimagconcatenatenewaxis)r   r   r   transformedreal_frequenciesimaginary_frequencies r   `/home/nk/hobo-godmode/plappi-mvp/.venv/lib/python3.10/site-packages/onnx/reference/ops/op_dft.py_fft      

r   onesidedbool	normalizec                 C  s   | j d dkr
| }n0dd | j D }td| j d d|d< | t| }td| j d d|d< | t| }|d|  }t|d}	t|	||d}
|red	d |
j D }td|
j | d d ||< |
t| }
|rk|
| }
|
S )
Nr      c                 S     g | ]}t d |qS r   slice).0r   r   r   r   
<listcomp>"       z_cfft.<locals>.<listcomp>r                    ?r   c                 S  r   r    r!   )r#   ar   r   r   r$   -   r%   )shaper"   tupler   squeezer   )r   r   r   r   r   signalslicesr   r   complex_signalsresultr   r   r   _cfft   s"   r0   c                 C  sL   t jj| ||d}t |}t |}t j|dt jf |dt jf fddS )z/Standard IFFT: complex input -> complex output.r
   .r   r   )r   r   ifftr   r   r   r   )r   r   r   signalsreal_signalsimaginary_signalsr   r   r   _ifft5   r   r5   c                 C  s    t jj| ||d}|dt jf S )z3IRFFT: one-sided complex input -> full real output.r
   .)r   r   irfftr   )r   r   r   r2   r   r   r   _irfft@   s   r7   Fc                 C  s   | j d dkrt| d}n8dd | j D }td| j d d|d< | t| }td| j d d|d< | t| }t|ddt|d  }|rOt|||dS t|||dS )	z?Complex IFFT wrapper that handles both standard IFFT and IRFFT.r   r   c                 S  r   r    r!   )r#   dimr   r   r   r$   Q   r%   z_cifft.<locals>.<listcomp>r   r&   r'   r   )r)   r   r+   r"   r*   r7   r5   )r   r   r   r   frequenciesr-   r   r   r   r   r   _cifftG   s   r:   c                   @      e Zd Z				ddddZdS )DFT_17Nr   Fr   r   
dft_length
int | Noner   r   inverser   r   r	   tuple[np.ndarray]c                 C  r   |t |j }|d u r|r|rd|j| d  }n|j| }|r)t||||d}n	t||||dd}||jfS Nr&   r   )r   r   F)r   r   r   lenr)   r:   r0   astypedtypeselfr   r=   r   r?   r   r/   r   r   r   _run`      	
zDFT_17._run)Nr   FFr   r   r=   r>   r   r   r?   r   r   r   r	   r@   __name__
__module____qualname__rI   r   r   r   r   r<   _       r<   c                   @  r;   )DFT_20NFr   r   r=   r>   r   r   r?   r   r   r	   r@   c                 C  rA   rB   rC   rG   r   r   r   rI   {   rJ   zDFT_20._run)NrR   FFrK   rL   r   r   r   r   rQ   z   rP   rQ   )r   r   r   r   r   r   r	   r   )r   r   r   r   r   r   r   r   r   r   r	   r   )F)
r   r   r   r   r   r   r   r   r	   r   )
__future__r   numpyr   onnx.reference.op_runr   r   r0   r5   r7   r:   r<   rQ   r   r   r   r   <module>   s   



