U
    /d`8                     @   s0  d dl Z d dlZd dlZ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mZ d dlm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ejejgejdddgejdejejejejejejgdd Z G dd dZ!ejdejejej"ej#gdd Z$G dd dZ%dS )    N)random)assert_array_almost_equalassert_array_equalassert_allclose)raisesc                 C   sR   t | }dtj t|t|  }t|dd| }tj| t| ddS )Ny                 axis)lennppiZarangefloatZreshapesumexp)xLphase r   >/tmp/pip-unpacked-wheel-9gxwnfpp/scipy/fft/tests/test_numpy.pyfft1   s    r   c                   @   s   e Zd Zdd ZdS )TestFFTShiftc                 C   s   t ttjdddgd d S )Nr         r   )assert_raises
ValueError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                   @   sF  e Z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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ejejejejejgd(d) Z ejd'ej!ej"ej#ej$ej%ej&ejejejejejejgd*d+ Z'd,d- Z(ejd.e)j*e)j+e)j,e)j-gd/d0 Z.d1S )2	TestFFT1Dc              	   C   s   d}t |dt |  }t |}td|D ]Z}ttt|d| |d| dd ttt|d| ||d| dd q*d S )Ni                 ?r   r      )decimal)r   ranger   r   ifftirfftrfft)r   maxlenr   Zxrir   r   r   test_identity   s    "
 zTestFFT1D.test_identityc                 C   sz   t ddt d  }t|}t|t| t|tj|dd t|td tj|dd t|d tj|dd d S )N   r#   backwardnormorthoforward)r   r   r   r   r   sqrtr   r   expectr   r   r   test_fft&   s    zTestFFT1D.test_fftc                 C   sV   t ddt d  }t|tt| dD ]"}t|tjtj||d|d q.d S )Nr-   r#   r.   r1   r2   r/   )r   r   r   r'   r   r   r0   r   r   r   	test_ifft/   s     zTestFFT1D.test_ifftc                 C   s   t ddt d  }tjtj|dddd}t|t| t|tj|dd t|td tj|d	d t|d tj|d
d d S Nr-      r#   r   r	   r   r.   r/   X  r1   r2   )r   r   r   fft2r   r3   r4   r   r   r   	test_fft26   s    zTestFFT1D.test_fft2c                 C   s   t ddt d  }tjtj|dddd}t|t| t|tj|dd t|td tj|d	d t|d tj|d
d d S r:   )r   r   r'   r   ifft2r   r3   r4   r   r   r   
test_ifft2@   s    zTestFFT1D.test_ifft2c                 C   s   t ddt d  }tjtjtj|dddddd}t|t| t|tj|dd t|td	 tj|d
d t|d	 tj|dd d S Nr-   r<   
   r#   r   r	   r   r   r.   r/   p  r1   r2   )r   r   r   fftnr   r3   r4   r   r   r   	test_fftnJ   s    "zTestFFT1D.test_fftnc                 C   s   t ddt d  }tjtjtj|dddddd}t|t| t|tj|dd tt|td	 tj|d
d t|d	 tj|dd d S rB   )r   r   r'   r   ifftnr   r3   r4   r   r   r   
test_ifftnT   s    "zTestFFT1D.test_ifftnc              	   C   s   t d}|jd|j fD ]j}dD ]6}ttj|||dd |d d  tj|||d q ttj||dt| tj||dd qd S )N   r   )Nr.   r1   r2   nr0   r   )rL   r1   )r   sizer   r   r)   r   r3   )r   r   rL   r0   r   r   r   	test_rfft^   s    zTestFFT1D.test_rfftc                 C   sJ   t d}t|tt| dD ]"}t|tjtj||d|d q"d S )Nr-   r7   r/   )r   r   r   r(   r)   r8   r   r   r   
test_irffth   s     zTestFFT1D.test_irfftc                 C   s   t d}t|d d d df }t|t| t|tj|dd t|td tj|dd t|d tj|dd d S Nr;      r.   r/   r=   r1   r2   )r   r   r>   r   rfft2r   r3   r4   r   r   r   
test_rfft2o   s    zTestFFT1D.test_rfft2c                 C   sJ   t d}t|tt| dD ]"}t|tjtj||d|d q"d S Nr;   r7   r/   )r   r   r   irfft2rR   r8   r   r   r   test_irfft2y   s     zTestFFT1D.test_irfft2c                 C   s   t d}t|d d d d d df }t|t| t|tj|dd t|td tj|dd t|d tj|dd d S NrC      r.   r/   rE   r1   r2   )r   r   rF   r   rfftnr   r3   r4   r   r   r   
test_rfftn   s     zTestFFT1D.test_rfftnc                 C   sJ   t d}t|tt| dD ]"}t|tjtj||d|d q"d S NrC   r7   r/   )r   r   r   irfftnrY   r8   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|t| t|tj|dd t|td tj|dd t|d tj|d	d d S )
N   r#   r   r   r.   r/   r-   r1   r2   )r   r   concatenateconjr   r   hfftr3   )r   r   x_hermr5   r   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t| dD ]"}t|tjtj||d|d qbd S )Nr^   r#   r   r   r7   r/   )r   r   r_   r`   r   r   ihfftra   )r   r   rb   r0   r   r   r   
test_ihfft   s     zTestFFT1D.test_ihfftc                 C   sJ   t d}t|tt| dD ]"}t|tjtj||d|d q"d S rT   )r   r   r   hfft2ihfft2r8   r   r   r   
test_hfft2   s     zTestFFT1D.test_hfft2c                 C   s   t d}t|d d d df }t|t| t|tj|dd t|td tj|dd t|d tj|dd d S rP   )r   r   r@   r   rg   r   r3   r4   r   r   r   test_ihfft2   s    zTestFFT1D.test_ihfft2c                 C   sJ   t d}t|tt| dD ]"}t|tjtj||d|d q"d S r[   )r   r   r   hfftnihfftnr8   r   r   r   
test_hfftn   s     zTestFFT1D.test_hfftnc                 C   s   t d}t|d d d d d df }t|t| t|tj|dd t|td tj|dd t|d tj|dd d S rW   )r   r   rH   r   rk   r   r3   r4   r   r   r   test_ihfftn   s     zTestFFT1D.test_ihfftnopc                 C   sT   t d}ddddddg}|D ]2}|t||}t|||d|}t|| qd S )	NrC   r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   )r   r   r   axes)r   r   	transposer   )r   rn   r   rs   aop_trtr_opr   r   r   	test_axes   s    zTestFFT1D.test_axesc              	      s   t ddddg}|D ]p t fddtjD }|t |d d dd	}t||d d  d d d	 }t|| qd S )
N)         ro   rp   rq   c                    s4   g | ],}| d d kr&dj |  nj | qS )Nr   )shape).0axru   r   r   r   
<listcomp>   s   z9TestFFT1D.test_axes_subset_with_shape.<locals>.<listcomp>r   r   r   )srs   )r   tupler&   ndimr   rt   r   )r   rn   rs   r|   rv   rw   r   r   r   test_axes_subset_with_shape   s    
&z%TestFFT1D.test_axes_subset_with_shapec           	      C   s   t d}tj|}|jd }tjtjftjtjftj	tj
fg}|D ]V\}}|jd|j fD ]<}dD ]2}||||d}||||d}t|tj| qdq\qDd S )Nr-   r   r7   rK   )r   r   Zlinalgr0   rM   r   r'   r)   r(   rd   ra   r   )	r   r   Zx_normrL   Z
func_pairsZforwbackr0   tmpr   r   r   test_all_1d_norm_preserving   s    




z%TestFFT1D.test_all_1d_norm_preservingdtypec                 C   sZ   t d|}ttt|| ttt|| ttt|t	|| d S )Nr-   )
r   astyper   r   r'   r(   r)   ra   rd   r   )r   r   r   r   r   r   test_dtypes   s    zTestFFT1D.test_dtypesN)/r   r    r!   r,   r6   r9   r?   rA   rG   rI   rN   rO   rS   rV   rZ   r]   rc   re   rh   ri   rl   rm   pytestmarkparametrizer   rF   rH   rY   r\   rj   rk   rx   r>   r@   rR   rU   rf   rg   r   r   r   ZhalfZsingledoubleZ
longdoubler   r   r   r   r   r"      sX   
	






	

  
     
r"   r   orderFznon-contiguousr   c                 C   s  t jd}|dddj| dd}|dkr8t |}n"|d d d }t |d d d }|jd	rt	d
D ]&}|||d}|||d}t
|| qnnf|jdrdddg}	|jdr|	dddd g |	D ]&}
|||
d}|||
d}t
|| qntd S )N*   rz         F)copyr   r   r   r   r	   )r>   rF   r   )r   r   )r   r   rF   )r   )r   )r   rr   )r   r   ZRandomStateZrandr   ZasfortranarrayZascontiguousarrayr   endswithr&   r   extendr   )r   r   r   rngXYr
   ZX_resZY_resrs   r~   r   r   r   test_fft_with_order  s(    
r   c                   @   sL   e Zd ZdZdZdd Zdd Zdd Zd	d
 Zdd Z	dd Z
dd ZdS )TestFFTThreadSafery   )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)r}   r+   )r   r   r   r   r   r   4  s   z2TestFFTThreadSafe._test_mtsame.<locals>.<listcomp>c                 S   s   g | ]}|  qS r   )startr}   r   r   r   r   r   6  s     c                 S   s   g | ]}|  qS r   )joinr   r   r   r   r   8  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| jt jd}| tj| d S )N)r   )r   onesinput_shape
complex128r   r   r   ru   r   r   r   r6   >  s    zTestFFTThreadSafe.test_fftc                 C   s    t | jd}| tj| d S Ny      ?        )r   fullr   r   r   r'   r   r   r   r   r9   B  s    zTestFFTThreadSafe.test_ifftc                 C   s   t | j}| tj| d S r   )r   r   r   r   r   r)   r   r   r   r   rN   F  s    zTestFFTThreadSafe.test_rfftc                 C   s    t | jd}| tj| d S r   )r   r   r   r   r   r(   r   r   r   r   rO   J  s    zTestFFTThreadSafe.test_irfftc                 C   s"   t | jt j}| tj| d S r   )r   r   r   	complex64r   r   ra   r   r   r   r   rc   N  s    zTestFFTThreadSafe.test_hfftc                 C   s   t | j}| tj| d S r   )r   r   r   r   r   rd   r   r   r   r   re   R  s    zTestFFTThreadSafe.test_ihfftN)r   r    r!   r   r   r   r6   r9   rN   rO   rc   re   r   r   r   r   r   (  s   r   r   c              	   C   sV   t d }|| dd tdD }W 5 Q R X | td}|D ]}t|| qBd S )Nr   c                 S   s   g | ]}t d qS )d   )r   r   )r}   _r   r   r   r   \  s     z%test_multiprocess.<locals>.<listcomp>r{   r   )multiprocessingZPoolmapr&   r   r   r   )r   presr5   r   r   r   r   test_multiprocessW  s
    $r   c                   @   s   e Zd Zdd ZdS )
TestIRFFTNc                 C   s2   t jd\}}|d|  }d}tj||d d S )N)r   ry   rz       r#   )rr   )r   r   r   r\   )r   arZairu   rs   r   r   r   test_not_last_axis_successe  s    z%TestIRFFTN.test_not_last_axis_successN)r   r    r!   r   r   r   r   r   r   c  s   r   )&r   r   r   Znumpyr   r   Znumpy.randomr   Znumpy.testingr   r   r   r   r   Z	scipy.fftr   r   r   r"   r   r   Zfloat32Zfloat64Z	longfloatr   r   Zlongcomplexr>   rF   r'   r@   rH   r   r   r)   r(   r   r   r   r   r   r   <module>   sD    i    /
