o
    Eb`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npZpiZarangefloatZreshapesumZexp)xLZphase r   </usr/lib/python3/dist-packages/scipy/fft/tests/test_numpy.pyfft1   s   r   c                   @      e Zd Zdd ZdS )TestFFTShiftc                 C   s   t ttjg dd d S )N)r         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          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 ]-}ttt|d| |d| dd ttt|d| ||d| dd qd S )Ni                 ?r   r      )Z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,   r/   r0   r-   )r   r   r   r%   r   r   r.   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  r/   r0   )r   r   r   fft2r   r1   r2   r   r   r   	test_fft26      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 r8   )r   r   r%   r   ifft2r   r1   r2   r   r   r   
test_ifft2@   r>   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  r/   r0   )r   r   r   fftnr   r1   r2   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 rA   )r   r   r%   r   ifftnr   r1   r2   r   r   r   
test_ifftnT   s   "zTestFFT1D.test_ifftnc              	   C   s   t d}|jd|j fD ]5}dD ]}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,   r/   r0   nr.   r   )rK   r/   )r   sizer   r   r'   r   r1   )r   r   rK   r.   r   r   r   	test_rfft^   s   zTestFFT1D.test_rfftc                 C   J   t d}t|tt| dD ]}t|tjtj||d|d qd S )Nr+   r5   r-   )r   r   r   r&   r'   r6   r   r   r   
test_irffth      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 Nr9      r,   r-   r;   r/   r0   )r   r   r<   r   rfft2r   r1   r2   r   r   r   
test_rfft2o      zTestFFT1D.test_rfft2c                 C   rN   Nr9   r5   r-   )r   r   r   irfft2rS   r6   r   r   r   test_irfft2y   rP   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 NrB      r,   r-   rD   r/   r0   )r   r   rE   r   rfftnr   r1   r2   r   r   r   
test_rfftn       zTestFFT1D.test_rfftnc                 C   rN   NrB   r5   r-   )r   r   r   irfftnr[   r6   r   r   r   test_irfftn   rP   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+   r/   r0   )r   r   concatenateconjr   r   hfftr1   )r   r   x_hermr3   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 q1d S )Nra   r"   r   r   r5   r-   )r   r   rb   rc   r   r   ihfftrd   )r   r   re   r.   r   r   r   
test_ihfft   s   zTestFFT1D.test_ihfftc                 C   rN   rV   )r   r   r   hfft2ihfft2r6   r   r   r   
test_hfft2   rP   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 rQ   )r   r   r?   r   rj   r   r1   r2   r   r   r   test_ihfft2   rU   zTestFFT1D.test_ihfft2c                 C   rN   r^   )r   r   r   hfftnihfftnr6   r   r   r   
test_hfftn   rP   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 rY   )r   r   rG   r   rn   r   r1   r2   r   r   r   test_ihfftn   r]   zTestFFT1D.test_ihfftnopc                 C   sL   t d}g d}|D ]}|t||}t|||d|}t|| q
d S )NrB   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   )r   r   r   axes)r   r   	transposer   )r   rq   r   rv   aop_trtr_opr   r   r   	test_axes   s   zTestFFT1D.test_axesc              	      s   t dg d}|D ]8 t fddtjD }|t |d d dd}t||d d  d d d }t|| q
d S )N)         )rr   rs   rt   c                    s4   g | ]}| d d v rdj |  nj | qS )Nr   )shape).0axrx   r   r   r   
<listcomp>   s    ,z9TestFFT1D.test_axes_subset_with_shape.<locals>.<listcomp>r   r   r   )srv   )r   tupler$   ndimr   rw   r   )r   rq   rv   r   ry   rz   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 ]+\}}|jd|j fD ]}dD ]}||||d}||||d}t|tj| q2q.q"d S )Nr+   r   r5   rJ   )r   r   Zlinalgr.   rL   r   r%   r'   r&   rg   rd   r   )	r   r   Zx_normrK   Z
func_pairsZforwZbackr.   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'   rd   rg   r   )r   r   r   r   r   r   test_dtypes   s    zTestFFT1D.test_dtypesN)/r   r   r   r*   r4   r7   r=   r@   rF   rH   rM   rO   rT   rX   r\   r`   rf   rh   rk   rl   ro   rp   pytestmarkparametrizer   rE   rG   r[   r_   rm   rn   r{   r<   r?   rS   rW   ri   rj   r   r   r   ZhalfZsingleZdoubleZ
longdoubler   r   r   r   r   r!      sL    
	






	



r!   r   orderFznon-contiguousr   c                 C   s   t jd}|dddj| dd}|dkrt |}n|d d d }t |d d d }|jd	rMt	d
D ]}|||d}|||d}t
|| q7d S |jdr|g d}	|jdrd|	g d |	D ]}
|||
d}|||
d}t
|| qfd S t)N*   r}         F)copyr   r   r   r   r	   )r<   rE   )r   )r   r   )r   r   rE   ))r   )r   )r   Nru   )r   r   ZRandomStateZrandr   ZasfortranarrayZascontiguousarrayr   endswithr$   r   extendr   )r   r   r   rngXYr
   ZX_resZY_resrv   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 )TestFFTThreadSafer|   )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)Zput)argsq)funcr   r   worker-  s   z.TestFFTThreadSafe._test_mtsame.<locals>.workerc                    s   g | ]}t j fd qS ))targetr   )	threadingZThread)r   r)   )r   r   r   r   r   r   4  s    z2TestFFTThreadSafe._test_mtsame.<locals>.<listcomp>c                 S      g | ]}|  qS r   )startr   r   r   r   r   r   6      c                 S   r   r   )joinr   r   r   r   r   8  r      )Ztimeoutz6Function returned wrong value in multithreaded context)queueZQueuer$   threadsr   get)r   r   r   Z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   rx   r   r   r   r4   >  s   zTestFFTThreadSafe.test_fftc                 C       t | jd}| tj| d S Ny      ?        )r   fullr   r   r   r%   r   r   r   r   r7   B     zTestFFTThreadSafe.test_ifftc                 C      t | j}| tj| d S r   )r   r   r   r   r   r'   r   r   r   r   rM   F     zTestFFTThreadSafe.test_rfftc                 C   r   r   )r   r   r   r   r   r&   r   r   r   r   rO   J  r   zTestFFTThreadSafe.test_irfftc                 C   s"   t | jt j}| tj| d S r   )r   r   r   	complex64r   r   rd   r   r   r   r   rf   N  s   zTestFFTThreadSafe.test_hfftc                 C   r   r   )r   r   r   r   r   rg   r   r   r   r   rh   R  r   zTestFFTThreadSafe.test_ihfftN)r   r   r   r   r   r   r4   r7   rM   rO   rf   rh   r   r   r   r   r   (  s    r   r   c                 C   sj   t d}|| dd tdD }W d    n1 sw   Y  | td}|D ]}t|| q+d 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resr3   r   r   r   r   test_multiprocessW  s   r   c                   @   r   )
TestIRFFTNc                 C   s2   t jd\}}|d|  }d}tj||d d S )N)r   r|   r}       r"   )ru   )r   r   r   r_   )r   arZairx   rv   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  r    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<   rE   r%   r?   rG   r   r   r'   r&   r   r   r   r   r   r   <module>   s>     i/
