o
    ?Hh                     @   s  d Z ddlZddlZddlmZ ddlmZm	Z	m
Z
mZmZmZmZ 		d+ddd	d
ZeedZde_eedZde_		d+ddddZeedZde_eedZde_		d+ddddZeedZde_eedZde_d,ddddZd,ddddZ		d-ddddZeedZde_eedZde_		d-dddd ZeedZ d!e _eedZ!d"e!_		d-ddd#d$Z"ee"dZ#d%e#_ee"dZ$d&e$_d.d'd(Z%ee%dZ&d)e&_ee%dZ'd*e'_dS )/z(
Discrete Fourier Transforms - basic.py
    N   )pypocketfft)	_asfarray_init_nd_shape_and_axes_datacopied
_fix_shape_fix_shape_1d_normalization_workersF)planc                C   s   |durt dt|}|pt||}t|| }t|}|dur-t|||\}}	|p+|	}n|j| dk rAd|j|  d}
t|
|rK|jj	dkrK|nd}t
||f| |||S )z@ Return discrete Fourier transform of real or complex sequence. NFPassing a precomputed plan is not yet supported by scipy.fft functionsr   invalid number of data points () specifiedc)NotImplementedErrorr   r   r	   r
   r   shape
ValueErrordtypekindpfftc2c)forwardxnaxisnormoverwrite_xworkersr   tmpcopiedmessageout r#   Z/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/scipy/fft/_pocketfft/basic.pyr      s   

r   Tfftifftc          
      C   s   |durt dt|}t|| }t|}t|std|dur+t|||\}}	n|j| dk r=t	d|j|  dt
||f| |d|S )z8
    Discrete Fourier transform of a real sequence.
    Nr   x must be a real sequencer   r   r   )r   r   r	   r
   np	isrealobj	TypeErrorr   r   r   r   r2c
r   r   r   r   r   r   r   r   r   _r#   r#   r$   r+   (   s   

r+   rfftihfftc          
   	   C   s   |durt dt|}t|| }t|}t|r|d }|du r8|j| d d }|dk r7td| dnt||d d |\}}	t	
||f|| |d|S )zG
    Return inverse discrete Fourier transform of real sequence x.
    Nr                   r      zInvalid number of data points (r   )r   r   r	   r
   r(   r)   r   r   r   r   c2rr,   r#   r#   r$   r2   F   s   

r2   hfftirfftr   c                C   "   |durt dt| |||||S )z@
    2-D discrete Fourier transform of a Hermitian sequence
    Nr   )r   hfftnr   saxesr   r   r   r   r#   r#   r$   hfft2h      r<   c                C   r7   )zH
    2-D discrete inverse Fourier transform of a Hermitian sequence
    Nr   )r   ihfftnr9   r#   r#   r$   ihfft2s   r=   r?   c                C   s   |durt dt|}t|||\}	}|pt||}t|}t|dkr'|S t||	|\}}
|p2|
}t|| }|rB|jj	dkrB|nd}t
||| |||S )z=
    Return multidimensional discrete Fourier transform.
    Nr   r   r   )r   r   r   r   r
   lenr   r	   r   r   r   r   )r   r   r:   r;   r   r   r   r   r   r   r    r"   r#   r#   r$   c2cn~   s   
rA   fftnifftnc                C   s   |durt dt|}t|stdt|||\}	}t||	|\}}
t|| }t|}t	|dkr8t
dt||| |d|S )z@Return multidimensional discrete Fourier transform of real inputNr   r'   r   #at least 1 axis must be transformed)r   r   r(   r)   r*   r   r   r	   r
   r@   r   r   r+   )r   r   r:   r;   r   r   r   r   r   r   r-   r#   r#   r$   r2cn   s   

rE   rfftnr>   c             	   C   s   |durt dt|}t|r|d }|du }	t|||\}
}t|dkr+tdt|
}
|	r>|j|d  d d |
d< t	|| }t
|}|
d }|
d d d |
d< tt||
|\}}t|||| |d|S )	zDMultidimensional inverse discrete fourier transform with real outputNr   r0   r   rD   r   r   r1   )r   r   r(   r)   r   r@   r   listr   r	   r
   tupler   r   r2   )r   r   r:   r;   r   r   r   r   r   noshaper   lastsizer-   r#   r#   r$   c2rn   s$   

rK   r8   irfftnc           
   	   C   s   t |}|p
t||}t|| }td}|jjdkrtd|dur/t|||\}}|p-|}n|j| dk rAt	d|j|  d|rE|nd}	t
||f| | ||	|S )z=FFT of a real sequence, returning fftpack half complex formatNr   r'   r   r   r   )r   r   r	   r
   r   r   r*   r   r   r   r   r2r_fftpack)
r   r   r   r   r   r   r   r   r    r"   r#   r#   r$   rM      s   

rM   rfft_fftpackirfft_fftpack)Nr   NFN)Nr5   NFN)NNNFN)Nr   NF)(__doc__numpyr(   	functools r   r   helperr   r   r   r   r   r	   r
   r   partialr%   __name__r&   r+   r.   r/   r2   r3   r4   r<   r?   rA   rB   rC   rE   rF   r>   rK   r8   rL   rM   rN   rO   r#   r#   r#   r$   <module>   s    $#

