o
    6a2                     @   s   d dl Zd dlZd dlmZ d dlmZmZmZ d dl	Z	d dl
Z
dd ZG dd dZG dd	 d	Zejd
ejejejejgejdddgejdejjejjejjejjejjejjgdd ZG dd dZdS )    N)random)assert_array_equalassert_raisesassert_allclosec                 C   sR   t | }dtj t|t|  }t|dd| }tj| t| ddS )Ny                 axis)lennppiarangefloatreshapesumexp)xLphase r   @/usr/lib/python3/dist-packages/numpy/fft/tests/test_pocketfft.pyfft1   s   r   c                   @   s   e Zd Zdd ZdS )TestFFTShiftc                 C   s   t ttjjg dd d S )N)r         r   )r   
ValueErrorr   fft)selfr   r   r   
test_fft_n   s   zTestFFTShift.test_fft_nN)__name__
__module____qualname__r   r   r   r   r   r      s    r   c                   @   s   e Zd Zdd Zdd Zejdddd Zd	d
 Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zejd!ejjejjejjejjgd"d# Zd$d% Zejd&ejejejej gd'd( Z!d)S )*	TestFFT1Dc              	   C   s   d}t |dt |  }t |}td|D ]1}ttjtj|d| |d| dd ttjtj|d| ||d| dd qd S )Ni                 ?r   r   g-q=atol)r   ranger   r   r   ifftirfftrfft)r   maxlenr   xrir   r   r   test_identity   s   &zTestFFT1D.test_identityc                 C   s   t ddt d  }tt|tj|dd tt|tjj|dddd tt|td tjj|dddd tt|d tjj|d	ddd d S )
N   r#   ư>r$   backwardnormortho      >@forward)r   r   r   r   r   sqrtr   r   r   r   r   test_fft$   s   
zTestFFT1D.test_fftr2   Nr0   r3   r5   c                 C   s~   t ddt d  }t|tjjtjj||d|ddd tjtdd tjjg |d W d    d S 1 s8w   Y  d S )Nr.   r#   r1   r/   r$   z!Invalid number of FFT data points)match)r   r   r   r   r'   pytestraisesr   )r   r2   r   r   r   r   	test_ifft-   s   "zTestFFT1D.test_ifftc                 C   s   t ddt d  }ttjjtjj|ddddtj|dd ttj|tjj|dd	dd ttj|td
 tjj|dd	dd ttj|d tjj|dd	dd d S Nr.      r#   r   r   r   r/   r$   r0   r1   X  r3        @r5   )r   r   r   r   fft2r6   r7   r   r   r   	test_fft28      
zTestFFT1D.test_fft2c                 C   s   t ddt d  }ttjjtjj|ddddtj|dd ttj|tjj|dd	dd ttj|td
 tjj|dd	dd ttj|d tjj|dd	dd d S r>   )r   r   r   r   r'   ifft2r6   r7   r   r   r   
test_ifft2C   rE   zTestFFT1D.test_ifft2c                 C   s   t ddt d  }ttjjtjjtjj|ddddddtj|dd ttj|tjj|d	d
dd ttj|td tjj|dd
dd ttj|d tjj|dd
dd d S Nr.   r@   
   r#   r   r   r   r   r/   r$   r0   r1   p  r3        p@r5   )r   r   r   r   fftnr6   r7   r   r   r   	test_fftnN      &
zTestFFT1D.test_fftnc                 C   s   t ddt d  }ttjjtjjtjj|ddddddtj|dd ttj|tjj|d	d
dd ttj|td tjj|dd
dd ttj|d tjj|dd
dd d S rH   )r   r   r   r   r'   ifftnr6   r7   r   r   r   
test_ifftnZ   rO   zTestFFT1D.test_ifftnc              	   C   s   t d}|jd|j fD ]g}dD ]}ttjj|||dd |d d  tjj|||ddd qttjj||dtjj||d	ddd ttjj||dt| tjj||d
ddd ttjj||d| tjj||dddd qd S )Nr.   r   r9   nr2   r   r/   r$   )rS   r0   r3   r5   )r   sizer   r   r   r)   r6   )r   r   rS   r2   r   r   r   	test_rfftf   s(    zTestFFT1D.test_rfftc                 C      t d}t|tjtj|dd t|tjjtjj|dddddd t|tjjtjj|dddddd t|tjjtjj|dddddd d S )Nr.   r/   r$   r0   r1   r3   r5   )r   r   r   r   r(   r)   r7   r   r   r   
test_irfftw   "   
zTestFFT1D.test_irfftc                 C   s   t d}ttj|d d d df tj|dd ttj|tjj|dddd ttj|td tjj|dddd ttj|d	 tjj|d
ddd d S )Nr?      r/   r$   r0   r1   rA   r3   rB   r5   )r   r   r   r   rC   rfft2r6   r7   r   r   r   
test_rfft2   s   .
zTestFFT1D.test_rfft2c                 C   rV   )Nr?   r/   r$   r0   r1   r3   r5   )r   r   r   r   irfft2rZ   r7   r   r   r   test_irfft2   rX   zTestFFT1D.test_irfft2c                 C   s   t d}ttj|d d d d d df tj|dd ttj|tjj|dddd ttj|td tjj|dddd ttj|d	 tjj|d
ddd d S )NrI      r/   r$   r0   r1   rK   r3   rL   r5   )r   r   r   r   rM   rfftnr6   r7   r   r   r   
test_rfftn   s   4
zTestFFT1D.test_rfftnc                 C   rV   )NrI   r/   r$   r0   r1   r3   r5   )r   r   r   r   irfftnr_   r7   r   r   r   test_irfftn   rX   zTestFFT1D.test_irfftnc                 C   s   t ddt d  }tt d|t df}t||d d d  f}ttj|tj|dd ttj|tjj|dddd ttj|td	 tjj|d
ddd ttj|d tjj|dddd d S )N   r#   r   r   r/   r$   r0   r1   r.   r3   r4   r5   )r   r   concatenateconjr   r   hfftr6   r   r   x_hermr   r   r   	test_hfft   s   
zTestFFT1D.test_hfftc                 C   s   t ddt d  }tt d|t df}t||d d d  f}t|tjtj|dd t|tjjtjj|dddddd t|tjjtjj|d	dd	ddd t|tjjtjj|d
dd
ddd d S )Nrc   r#   r   r   r/   r$   r0   r1   r3   r5   )r   r   rd   re   r   r   ihfftrf   rg   r   r   r   
test_ihfft   s2   
zTestFFT1D.test_ihfftopc                 C   sP   t d}g d}|D ]}|t||}t|||d|}t||dd q
d S )NrI   ))r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   axesr/   r$   )r   r   	transposer   )r   rl   r   rn   aop_trtr_opr   r   r   	test_axes   s   zTestFFT1D.test_axesc           	      C   s   t d}tj|}|jd }tjjtjjftjjtjjftjj	tjj
fg}|D ]-\}}|jd|j fD ] }dD ]}||||d}||||d}t|tj|dd q8q4q(d S )Nr.   r   r9   rR   r/   r$   )r   r   linalgr2   rT   r   r'   r)   r(   rj   rf   r   )	r   r   x_normrS   
func_pairsforwbackr2   tmpr   r   r   test_all_1d_norm_preserving   s$   
z%TestFFT1D.test_all_1d_norm_preservingdtypec                 C   sN   t d|}ttjtj||dd ttjtj||dd d S )Nr.   r/   r$   )r   astyper   r   r   r'   r(   r)   )r   r{   r   r   r   r   test_dtypes   s   "zTestFFT1D.test_dtypesN)"r   r    r!   r-   r8   r;   markparametrizer=   rD   rG   rN   rQ   rU   rW   r[   r]   r`   rb   ri   rk   r   r   rM   rP   r_   ra   rs   rz   halfsingledouble
longdoubler}   r   r   r   r   r"      s4    
	







r"   r{   orderFznon-contiguousr   c                 C   s.  t jd}|dddj| dd}dt t |j t |j	j
 }|dkr.t |}n|d d d	 }t |d d d	 }|jd
rbtdD ]}|||d}|||d}	t||	||d qId S |jdrg d}
|jdry|
g d |
D ]}|||d}|||d}	t||	||d q{d S t )N*            F)copyg       @r   r   r   r   r   )r%   rtol)rC   rM   ))r   r   )r   r   )r   r   rM   ))r   )r   )r   Nrm   )r   r   RandomStaterandr|   r6   log2rT   finfor{   epsasfortranarrayascontiguousarrayr   endswithr&   r   extendr   )r{   r   r   rngX_tolYr	   X_resY_resrn   axr   r   r   test_fft_with_order   s.   $r   c                   @   s<   e Zd ZdZdZdd Zdd Zdd Zd	d
 Zdd Z	dS )TestFFTThreadSafe   )i      c                    s|   fddt    } fddt| jD }dd |D  dd |D  t| jD ]}tjdd|d	 q/d S )
Nc                    s   |  |   d S N)put)argsq)funcr   r   worker  s   z.TestFFTThreadSafe._test_mtsame.<locals>.workerc                    s   g | ]}t j fd qS ))targetr   )	threadingThread).0r,   )r   r   r   r   r   
<listcomp>  s    z2TestFFTThreadSafe._test_mtsame.<locals>.<listcomp>c                 S      g | ]}|  qS r   )startr   r   r   r   r   r         c                 S   r   r   )joinr   r   r   r   r     r      )timeoutz6Function returned wrong value in multithreaded context)queueQueuer&   threadsr   get)r   r   r   expectedtr,   r   )r   r   r   r   r   _test_mtsame  s   zTestFFTThreadSafe._test_mtsamec                 C   s(   t | jd d }| t jj| d S Nr   y                )r   onesinput_shaper   r   r   rp   r   r   r   r8   %     zTestFFTThreadSafe.test_fftc                 C   (   t | jd d }| t jj| d S r   )r   r   r   r   r   r'   r   r   r   r   r=   )  r   zTestFFTThreadSafe.test_ifftc                 C   s    t | j}| t jj| d S r   )r   r   r   r   r   r)   r   r   r   r   rU   -  s   zTestFFTThreadSafe.test_rfftc                 C   r   r   )r   r   r   r   r   r(   r   r   r   r   rW   1  r   zTestFFTThreadSafe.test_irfftN)
r   r    r!   r   r   r   r8   r=   rU   rW   r   r   r   r   r     s    r   )numpyr   r;   numpy.randomr   numpy.testingr   r   r   r   r   r   r   r"   r~   r   float32float64	complex64
complex128r   rC   rM   r'   rF   rP   r   r   r   r   r   r   <module>   s.     Q