U
    ;vf_2                     @   s   d dl Zd dlZd dlmZ d dlmZ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ejje	ddG dd dZdS )    N)random)assert_array_equalassert_raisesassert_allcloseIS_WASMc                 C   sN   t | }dtj t||  }t|dd| }tj| t| ddS )Ny                 axis)lennppiZarangeZreshapesumexp)xLphase r   B/tmp/pip-unpacked-wheel-sdaoq5e2/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dddgd d S )Nr         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 ]b}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   Z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_fftr/   Nr-   r0   r2   c              	   C   sh   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 5 Q R X d S )Nr+   r!   r.   r,   r"   z!Invalid number of FFT data points)match)r   r   r   r   r%   pytestZraisesr   )r   r/   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"   r-   r.   X  r0        @r2   )r   r   r   r   fft2r3   r4   r   r   r   	test_fft28   s"    
    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%   ifft2r3   r4   r   r   r   
test_ifft2C   s"    
    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"   r-   r.   p  r0        p@r2   )r   r   r   r   fftnr3   r4   r   r   r   	test_fftnN   s$    &
    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 rC   )r   r   r   r   r%   ifftnr3   r4   r   r   r   
test_ifftnZ   s$    &
    zTestFFT1D.test_ifftnc              	   C   s   t d}|jd|j fD ]}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   r6   nr/   r   r,   r"   )rM   r-   r0   r2   )r   sizer   r   r   r'   r3   )r   r   rM   r/   r   r   r   	test_rfftf   s.         zTestFFT1D.test_rfftc                 C   s   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"   r-   r.   r0   r2   )r   r   r   r   r&   r'   r4   r   r   r   
test_irfftw   s"    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"   r-   r.   r=   r0   r>   r2   )r   r   r   r   r?   rfft2r3   r4   r   r   r   
test_rfft2   s    .   zTestFFT1D.test_rfft2c                 C   s   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"   r-   r.   r0   r2   )r   r   r   r   Zirfft2rR   r4   r   r   r   test_irfft2   s"    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 )NrD      r,   r"   r-   r.   rF   r0   rG   r2   )r   r   r   r   rH   rfftnr3   r4   r   r   r   
test_rfftn   s    4   zTestFFT1D.test_rfftnc                 C   s   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 )NrD   r,   r"   r-   r.   r0   r2   )r   r   r   r   irfftnrV   r4   r   r   r   test_irfftn   s"    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"   r-   r.   r+   r0   r1   r2   )r   r   concatenateconjr   r   hfftr3   r   r   Z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 )NrZ   r!   r   r   r,   r"   r-   r.   r0   r2   )r   r   r[   r\   r   r   ihfftr]   r^   r   r   r   
test_ihfft   s2    zTestFFT1D.test_ihfftopc                 C   sX   t d}ddddddg}|D ]6}|t||}t|||d|}t||d	d
 qd S )NrD   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   axesr,   r"   )r   r   Z	transposer   )r   rb   r   rd   aZop_trZ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 ]Z\}}|jd|j fD ]@}dD ]6}||||d}||||d}t|tj|dd qpqhqPd S )Nr+   r   r6   rL   r,   r"   )r   r   Zlinalgr/   rN   r   r%   r'   r&   r`   r]   r   )	r   r   Zx_normrM   Z
func_pairsZforwbackr/   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   rj   r   r   r   r   test_dtypes   s    zTestFFT1D.test_dtypesN)"r   r   r   r*   r5   r8   markparametrizer9   r@   rB   rI   rK   rO   rP   rS   rT   rW   rY   r_   ra   r   r   rH   rJ   rV   rX   rf   ri   ZhalfZsingledoubleZ
longdoublerl   r   r   r   r   r       s4   
	






 
r    rj   orderFznon-contiguousr   c                 C   s6  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
rtdD ],}|||d}|||d}	t||	||d qnp|jdr,dddg}
|jdr|
dddd g |
D ],}|||d}|||d}	t||	||d qnt d S )N*            F)copyg       @rq   r   r   r   r	   )r#   Zrtol)r?   rH   )r   r   )r   r   )r   r   rH   )r   )r   )r   rc   )r   r   ZRandomStateZrandrk   r3   log2rN   Zfinforj   ZepsZasfortranarrayZascontiguousarrayr   endswithr$   r   extendr   )rj   rp   r   rngXZ_tolYr
   ZX_resZY_resrd   Zaxr   r   r   test_fft_with_order   s*    $
r}   zCannot start thread)reasonc                   @   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   s   g | ]}|  qS r   )startr   r   r   r   r   r     s     c                 S   s   g | ]}|  qS r   )joinr   r   r   r   r      s        )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   re   r   r   r   r5   &  s    zTestFFTThreadSafe.test_fftc                 C   s(   t | jd d }| t jj| d S r   )r   r   r   r   r   r%   r   r   r   r   r9   *  s    zTestFFTThreadSafe.test_ifftc                 C   s    t | j}| t jj| d S r   )r   r   r   r   r   r'   r   r   r   r   rO   .  s    zTestFFTThreadSafe.test_rfftc                 C   s(   t | jd d }| t jj| d S r   )r   r   r   r   r   r&   r   r   r   r   rP   2  s    zTestFFTThreadSafe.test_irfftN)
r   r   r   r   r   r   r5   r9   rO   rP   r   r   r   r   r     s   r   )Znumpyr   r8   Znumpy.randomr   Znumpy.testingr   r   r   r   r   r   r   r   r    rm   rn   Zfloat32Zfloat64Z	complex64Z
complex128r   r?   rH   r%   rA   rJ   r}   Zskipifr   r   r   r   r   <module>   s2    Q  