3
Od              
   @   sz  d dl mZmZmZmZmZm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mZmZmZmZmZmZ d dlmZmZmZmZmZmZmZm Z m!Z!m"Z" d dlZ#d dl$Zd dl%m&Z& d^dadfgZ'ddhdkgZ(dgZ)dgZ*dd Z+dd Z,dd Z-dd Z.dd Z/dd Z0dd Z1dd Z2dd Z3dd  Z4d!d" Z5G d#d$ d$e6Z7G d%d& d&e7Z8G d'd( d(e7Z9G d)d* d*e7Z:G d+d, d,e6Z;G d-d. d.e6Z<ej=j>e#j?e#j@kd/d0G d1d2 d2e<ZAG d3d4 d4e<ZBG d5d6 d6e<ZCG d7d8 d8e6ZDej=j>e#jEe#j@kd/d0G d9d: d:eDZFG d;d< d<eDZGG d=d> d>eDZHG d?d@ d@e6ZIej=j>e#jEe#j@kd/d0G dAdB dBeIZJG dCdD dDeIZKG dEdF dFeIZLG dGdH dHe6ZMG dIdJ dJe6ZNG dKdL dLe6ZOG dMdN dNe6ZPG dOdP dPe6ZQG dQdR dRe6ZRG dSdT dTe6ZSG dUdV dVe6ZTej=jUdWeeeeeeeegdXdY ZVej=jUdWeeeeeeeegdZd[ ZWej=jUdWeeeegd\d] ZXdS )l    )assert_assert_equalassert_array_almost_equalassert_array_almost_equal_nulpassert_array_lessassert_allcloseN)raises)ifftfftfftnifftnrfftirfftrfftnirfftnfft2hfftihffthfftnihfftn)
arangeaddarrayasarrayzerosdotexppiswapaxescdouble)rand            i     c             C   s4   d||f }t tjj| | |tjj|  | d S )Nzsize: %s  rdt: %s)r   npZlinalgnorm)xyrtolsizerdterr_msg r.   Y/var/www/html/virt/lib64/python3.6/site-packages/scipy/fft/_pocketfft/tests/test_basic.py_assert_close_in_norm&   s    r0   c             C   s   t |  S )N)r    )r+   r.   r.   r/   random,   s    r1   c             C   s   | j jd}| j|S )z-Returns the same array with swapped byteorderS)dtypeZnewbyteorderastype)Zarrr3   r.   r.   r/   swap_byteorder/   s    r5   c             C   s   t | }tj||}|S )N)r   r   outer)ndatar.   r.   r/   get_mat4   s    r9   c             C   s^   t | } t| }t|td}t| dt |  }x&t|D ]}tt|| | ||< q<W |S )N)r3   y               @)	r   lenr   r   r   r   ranger   r   )r(   r7   r)   wir.   r.   r/   
direct_dft:   s    r>   c             C   s`   t | } t| }t|td}t|dt |  }x*t|D ]}tt|| | | ||< q:W |S )N)r3   y               @)	r   r:   r   r   r   r   r;   r   r   )r(   r7   r)   r<   r=   r.   r.   r/   direct_idftD   s    r?   c             C   s0   t | } x"tt| jD ]}t| |d} qW | S )N)axis)r   r;   r:   shaper
   )r(   r@   r.   r.   r/   direct_dftnN   s    rB   c             C   s0   t | } x"tt| jD ]}t| |d} qW | S )N)r@   )r   r;   r:   rA   r	   )r(   r@   r.   r.   r/   direct_idftnU   s    rC   c             C   sn   t | } t| }t| dt |  }t|d d td}x.t|d d D ]}tt|| | ||< qLW |S )Ny               @r!      )r3   )	r   r:   r   r   r   r   r;   r   r   )r(   r7   r<   r)   r=   r.   r.   r/   direct_rdft\   s    rE   c             C   sn   t | } t|td}xNt|d d D ]:}| | ||< |dkr&d| |k r&tj| | ||| < q&W t|jS )N)r3   r!   rD   r   )r   r   r   r;   r&   Zconjr?   real)r(   r7   x1r=   r.   r.   r/   direct_irdftf   s    rH   c             C   s   t t| t| jd dS )NrD   )axes)r   r   r;   ndim)r(   r.   r.   r/   direct_rdftnp   s    rK   c               @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )_TestFFTBasec             C   s   d | _ d | _tjjd d S )Ni  )cdtr,   r&   r1   seed)selfr.   r.   r/   setup_methodu   s    z_TestFFTBase.setup_methodc          
   C   sx   t jdddd
ddddg| jd}t|}t|j| j t|}t|| t jddddd	g| jd}tt|t| d S )NrD   r!   r$      y              ?y               @)r3   y                r#   y      @      ?y      @       @y      @        )r&   r   rM   r
   r   r3   r>   r   )rO   r(   r)   y1r.   r.   r/   test_definitionz   s     
z_TestFFTBase.test_definitionc             C   s   t jddddg| jd}t jddddg| jd}t||gdd}t|j| j t|jd t|d t	| t|d t	| d S )	NrD   r!   r$   rQ   )r3   )r7   r   )r!   rQ   )
r&   r   r,   r
   r   r3   rM   rA   r   r>   )rO   rG   x2r)   r.   r.   r/   test_n_argument_real   s    z!_TestFFTBase.test_n_argument_realc             C   s   t jdddd	g| jd}t jdddd
g| jd}t||gdd}t|j| j t|jd t|d t| t|d t| d S )NrD   r!   r$   rQ   y              ?)r3   )r7   r   y      @      ?y      @      ?)r!   rQ   )	r&   r   rM   r
   r   r3   rA   r   r>   )rO   rG   rT   r)   r.   r.   r/   _test_n_argument_complex   s    z%_TestFFTBase._test_n_argument_complexc             C   s`   xZt ddD ]L}d| }tj|}t|jt}tjj|}t|| t|}t|| qW d S )Nr!      )r;   r&   r   r
   r4   complexnumpyr   )rO   r=   r7   r(   r)   y2r.   r.   r/   test_djbfft   s    

z_TestFFTBase.test_djbfftc             C   s*   t ttg  t ttddgddggd d S )NrD   r!   r#   )assert_raises
ValueErrorr
   )rO   r.   r.   r/   test_invalid_sizes   s    z_TestFFTBase.test_invalid_sizesN)	__name__
__module____qualname__rP   rS   rU   rV   r[   r_   r.   r.   r.   r/   rL   t   s   			
rL   c               @   s   e Zd Zdd ZdS )TestLongDoubleFFTc             C   s   t j| _t j| _d S )N)r&   longcomplexrM   
longdoubler,   )rO   r.   r.   r/   rP      s    zTestLongDoubleFFT.setup_methodN)r`   ra   rb   rP   r.   r.   r.   r/   rc      s   rc   c               @   s   e Zd Zdd ZdS )TestDoubleFFTc             C   s   t j| _t j| _d S )N)r&   r   rM   doubler,   )rO   r.   r.   r/   rP      s    zTestDoubleFFT.setup_methodN)r`   ra   rb   rP   r.   r.   r.   r/   rf      s   rf   c               @   s   e Zd Zdd ZdS )TestSingleFFTc             C   s   t j| _t j| _d S )N)r&   	complex64rM   float32r,   )rO   r.   r.   r/   rP      s    zTestSingleFFT.setup_methodN)r`   ra   rb   rP   r.   r.   r.   r/   rh      s   rh   c               @   s   e Zd Zdd Zdd ZdS )TestFloat16FFTc             C   sX   t jddddgt jd}t|dd}t|jt j t|jd t|t	|j
t j d S )NrD   r!   r$   rQ   )r3   )r7   )rQ   )r&   r   float16r
   r   r3   ri   rA   r   r>   r4   rj   )rO   rG   r)   r.   r.   r/   test_1_argument_real   s
    z#TestFloat16FFT.test_1_argument_realc             C   s   t jddddgt jd}t jddddgt jd}t||gdd}t|jt j t|jd t|d t	|j
t j t|d t	|j
t j d S )	NrD   r!   r$   rQ   )r3   )r7   r   )r!   rQ   )r&   r   rl   r
   r   r3   ri   rA   r   r>   r4   rj   )rO   rG   rT   r)   r.   r.   r/   rU      s    z#TestFloat16FFT.test_n_argument_realN)r`   ra   rb   rm   rU   r.   r.   r.   r/   rk      s   rk   c               @   sL   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S )_TestIFFTBasec             C   s   t jjd d S )Ni  )r&   r1   rN   )rO   r.   r.   r/   rP      s    z_TestIFFTBase.setup_methodc          
   C   st   t jdddd	dddd
g| j}t|}t|}t|j| j t|| t jdddddg| j}tt|t| d S )NrD   r!   r$   rQ   y              ?y               @y                r#   y      @      ?y      @       @y      @        )r&   r   rM   r	   r?   r   r3   r   )rO   r(   r)   rR   r.   r.   r/   rS      s    
z_TestIFFTBase.test_definitionc          	   C   s   t jddddddddg| j}t|}t|j| j t|}t|| t jdddddg| jd}t|j| j tt|t| d S )NrD   r!   r$   rQ   r#   )r3   )	r&   r   r,   r	   r   r3   rM   r?   r   )rO   r(   r)   rR   r.   r.   r/   test_definition_real   s    
z"_TestIFFTBase.test_definition_realc             C   sv   xpt ddD ]b}d| }tj|}t|j| j}tjj|}t||| j	| j
d t|}t||| j	| j
d qW d S )Nr!   rW   )r*   atol)r;   r&   r   r	   r4   rM   rY   r
   r   r*   rp   )rO   r=   r7   r(   r)   rZ   r.   r.   r/   r[      s    
z_TestIFFTBase.test_djbfftc          	   C   s   xdD ]x}t |gj| j}t |gj| jd
|  }tt|}tt|}t|j| j t|j| j t|| t|| qW d S )NrD   3   o   d      @            y              ?)	rD   rq   rr   rs   rt   ru   rv   rw   rx   )r1   r4   rM   r	   r
   r   r3   r   )rO   r+   r(   rR   rZ   r.   r.   r/   test_random_complex   s    

z!_TestIFFTBase.test_random_complexc          	   C   sl   xfd
D ]^}t |gj| j}tt|}tt|}t|j| j t|j| j t|| t|| qW d S )NrD   rq   rr   rs   rt   ru   rv   rw      )	rD   rq   rr   rs   rt   ru   rv   rw   rz   )	r1   r4   r,   r	   r
   r   r3   rM   r   )rO   r+   r(   rR   rZ   r.   r.   r/   test_random_real   s    

z_TestIFFTBase.test_random_realc             C   s   xt t D ]}tjjd tjj|j| j}tt	|}t
||| j|| j t	t|}t
||| j|| j |dtjj|  j| j}tt	|}t
||| j|| j t	t|}t
||| j|| j q
W d S )Ni  y              ?)LARGE_COMPOSITE_SIZESLARGE_PRIME_SIZESr&   r1   rN   r    r4   r,   r	   r
   r0   r*   rM   )rO   r+   r(   r)   r.   r.   r/   test_size_accuracy  s    z _TestIFFTBase.test_size_accuracyc             C   s*   t ttg  t ttddgddggd d S )NrD   r!   r#   r\   )r]   r^   r	   )rO   r.   r.   r/   r_     s    z _TestIFFTBase.test_invalid_sizesN)r`   ra   rb   rP   rS   ro   r[   ry   r{   r~   r_   r.   r.   r.   r/   rn      s   


rn   z Long double is aliased to double)reasonc               @   s   e Zd Zdd ZdS )TestLongDoubleIFFTc             C   s    t j| _t j| _d| _d| _d S )Ng|=)r&   rd   rM   re   r,   r*   rp   )rO   r.   r.   r/   rP     s    zTestLongDoubleIFFT.setup_methodN)r`   ra   rb   rP   r.   r.   r.   r/   r     s   r   c               @   s   e Zd Zdd ZdS )TestDoubleIFFTc             C   s    t j| _t j| _d| _d| _d S )Ng|=)r&   r   rM   rg   r,   r*   rp   )rO   r.   r.   r/   rP   !  s    zTestDoubleIFFT.setup_methodN)r`   ra   rb   rP   r.   r.   r.   r/   r      s   r   c               @   s   e Zd Zdd ZdS )TestSingleIFFTc             C   s    t j| _t j| _d| _d| _d S )Ngh㈵>g-C6?)r&   ri   rM   rj   r,   r*   rp   )rO   r.   r.   r/   rP   )  s    zTestSingleIFFT.setup_methodN)r`   ra   rb   rP   r.   r.   r.   r/   r   (  s   r   c               @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZG dd deZ	dd Z
dS )_TestRFFTBasec             C   s   t jjd d S )Ni  )r&   r1   rN   )rO   r.   r.   r/   rP   1  s    z_TestRFFTBase.setup_methodc          
   C   sp   xjddddddddgdddddddddg	gD ]<}t j|| jd}t|}t|}t|| t|j| j q,W d S )NrD   r!   r$   rQ   r#   )r3   )	r&   r   r,   r   rE   r   r   r3   rM   )rO   tr(   r)   rR   r.   r.   r/   rS   4  s    0
z_TestRFFTBase.test_definitionc             C   sH   xBt ddD ]4}d| }tj|}tjj|}t|}t|| qW d S )Nr!   rW   )r;   r&   r   r
   r   r   )rO   r=   r7   r(   rR   r)   r.   r.   r/   r[   <  s    
z_TestRFFTBase.test_djbfftc             C   s*   t ttg  t ttddgddggd d S )NrD   r!   r#   r\   )r]   r^   r   )rO   r.   r.   r/   r_   D  s    z _TestRFFTBase.test_invalid_sizesc          	   C   s4   t jd| jd}ttdd t| W d Q R X d S )N
   )r3   zx must be a real sequence)match)r&   r   rM   r]   	TypeErrorr   )rO   r(   r.   r.   r/   test_complex_inputH  s    z _TestRFFTBase.test_complex_inputc               @   s   e Zd Zdd Zdd ZdS )z_TestRFFTBase.MockSeriesc             C   s   t j|| _d S )N)r&   r   r8   )rO   r8   r.   r.   r/   __init__O  s    z!_TestRFFTBase.MockSeries.__init__c             C   s6   yt | j|S  tk
r0   tdj|dY nX d S )Nz-'MockSeries' object has no attribute '{attr}')attr)getattrr8   AttributeErrorformat)rO   itemr.   r.   r/   __getattr__R  s
    z$_TestRFFTBase.MockSeries.__getattr__N)r`   ra   rb   r   r   r.   r.   r.   r/   
MockSeriesN  s   r   c             C   sN   t jdddddg}tj|}dddd	d
g}t| t|| t|j| d S )Ng      ?g       @g      @g      @g      @rD   r!   r$   rQ   r#   )r&   r   r   r   r   r   r8   )rO   r(   xsexpectedr.   r.   r/   test_non_ndarray_with_dtypeZ  s    

z)_TestRFFTBase.test_non_ndarray_with_dtypeN)r`   ra   rb   rP   rS   r[   r_   r   objectr   r   r.   r.   r.   r/   r   0  s   r   c               @   s   e Zd Zdd ZdS )TestRFFTLongDoublec             C   s   t j| _t j| _d S )N)r&   rd   rM   	longfloatr,   )rO   r.   r.   r/   rP   h  s    zTestRFFTLongDouble.setup_methodN)r`   ra   rb   rP   r.   r.   r.   r/   r   e  s   r   c               @   s   e Zd Zdd ZdS )TestRFFTDoublec             C   s   t j| _t j| _d S )N)r&   r   rM   rg   r,   )rO   r.   r.   r/   rP   n  s    zTestRFFTDouble.setup_methodN)r`   ra   rb   rP   r.   r.   r.   r/   r   m  s   r   c               @   s   e Zd Zdd ZdS )TestRFFTSinglec             C   s   t j| _t j| _d S )N)r&   ri   rM   rj   r,   )rO   r.   r.   r/   rP   t  s    zTestRFFTSingle.setup_methodN)r`   ra   rb   rP   r.   r.   r.   r/   r   s  s   r   c               @   s<   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd ZdS )_TestIRFFTBasec             C   s   t jjd d S )Ni  )r&   r1   rN   )rO   r.   r.   r/   rP   z  s    z_TestIRFFTBase.setup_methodc          
      st   dddddg}ddddddddg}|d d	 }dddddddddg	}|d d	 } fdd}||| ||| d S )NrD   r!   y              @rQ   y              ?y               @r$   y              @r#   y              @c                s`   t tj|  jdt|d}t| t|}t|j j t	|| j
d t	|t| j
d d S )N)r3   )r7   )decimal)r   r&   r   rM   r:   rH   r   r3   r,   r   ndecr	   )r(   Zxrr)   rR   )rO   r.   r/   _test  s
    z-_TestIRFFTBase.test_definition.<locals>._testy       @      @y      @      ?y      ?       @y      @      @y       @      @y      @      ?y       @      @y       @      y      @      y       @      y       @      @y      @      ?y       @      @y      @      @y      @      y       @      y      @      y       @      r.   )rO   rG   Zx1_1Zx2_1rT   r   r.   )rO   r/   rS   }  s    
z_TestIRFFTBase.test_definitionc             C   s   xt ddD ]t}d| }tjd|ddtjd|d d  }d|d< |d dkrbtj|d |d< tjj|}t|}t|| qW d S )	Nr!   rW   rD   y              ?r   r   r   )r;   r&   r   rF   r
   r   r   )rO   r=   r7   r(   rR   r)   r.   r.   r/   r[     s    $z_TestIRFFTBase.test_djbfftc          	   C   s   xdD ]}t |gj| j}tt||d
}tt||d d d
}t|j| j t|j| j t||| j	d| d t||| j	d| d qW d S )NrD   rq   rr   rs   rt   ru   rv   rw      )r7   r!   zsize=%d)r   r-   )	rD   rq   rr   rs   rt   ru   rv   rw   r   )
r1   r4   r,   r   r   r   r3   rM   r   r   )rO   r+   r(   rR   rZ   r.   r.   r/   r{     s    


z_TestIRFFTBase.test_random_realc             C   s   | j tjkrd}n| j tjkr"d}xtt D ]t}tjjd tjj|j	| j }t
t|t|}t||||| j  tt
|dt| d }t||||| j  q,W d S )Ngh㈵>g|=i  r!   rD   )r,   r&   rj   float64r|   r}   r1   rN   r    r4   r   r   r:   r0   )rO   r*   r+   r(   r)   r.   r.   r/   r~     s    z!_TestIRFFTBase.test_size_accuracyc             C   s*   t ttg  t ttddgddggd d S )NrD   r!   r#   r\   )r]   r^   r   )rO   r.   r.   r/   r_     s    z!_TestIRFFTBase.test_invalid_sizesN)	r`   ra   rb   rP   rS   r[   r{   r~   r_   r.   r.   r.   r/   r   y  s   r   c               @   s   e Zd Zdd ZdS )TestIRFFTLongDoublec             C   s   t j| _t j| _d| _d S )NrW   )r&   r   rM   rg   r,   r   )rO   r.   r.   r/   rP     s    z TestIRFFTLongDouble.setup_methodN)r`   ra   rb   rP   r.   r.   r.   r/   r     s   r   c               @   s   e Zd Zdd ZdS )TestIRFFTDoublec             C   s   t j| _t j| _d| _d S )NrW   )r&   r   rM   rg   r,   r   )rO   r.   r.   r/   rP     s    zTestIRFFTDouble.setup_methodN)r`   ra   rb   rP   r.   r.   r.   r/   r     s   r   c               @   s   e Zd Zdd ZdS )TestIRFFTSinglec             C   s   t j| _t j| _d| _d S )Nr#   )r&   ri   rM   rj   r,   r   )rO   r.   r.   r/   rP     s    zTestIRFFTSingle.setup_methodN)r`   ra   rb   rP   r.   r.   r.   r/   r     s   r   c               @   s$   e Zd Zdd Zdd Zdd ZdS )Testfft2c             C   s   t jjd d S )Ni  )r&   r1   rN   )rO   r.   r.   r/   rP     s    zTestfft2.setup_methodc             C   s8   t jd}t|ddd}t jj|ddd}t|| dS )z-FFT returns wrong result with axes parameter.rQ   r!      r$   )srI   N)rQ   rQ   r!   )r   r   )r   r   )r   r   r   r   )r   r   )rY   Zonesr   r
   r   r   )rO   r(   r)   y_rr.   r.   r/   test_regression_244  s    
zTestfft2.test_regression_244c             C   s,   t ttg g t ttddgddggd d S )NrD   r!   rQ   r$   r   )rQ   r   )r]   r^   r   )rO   r.   r.   r/   r_     s    zTestfft2.test_invalid_sizesN)r`   ra   rb   rP   r   r_   r.   r.   r.   r/   r     s   	r   c               @   s   e Zd Zdd Zdd Zejjdee	 dd Z
ejjdee dd	 Zd
d Zejjdee	 dd Zejjdee dd ZdS )TestFftnSinglec             C   s   t jjd d S )Ni  )r&   r1   rN   )rO   r.   r.   r/   rP     s    zTestFftnSingle.setup_methodc             C   sb   dddgdddgddd	gg}t tj|tj}t|jtjkd
d tjt |tj}t|| d S )NrD   r!   r$   rQ   r#         r   	   z-double precision output with single precision)msg)r   r&   r   rj   r   r3   ri   r   )rO   r(   r)   r   r.   r.   r/   rS     s    zTestFftnSingle.test_definitionr+   c             C   sj   t jj||dt jj||  }t|jjt j}t|jjt jjt j}t	|j
t j t||d d S )Ny              ?i  )r&   r1   r    r   rF   r4   rj   r   ri   r   r3   r   )rO   r+   r(   rR   rZ   r.   r.   r/   test_size_accuracy_small  s
     z'TestFftnSingle.test_size_accuracy_smallc             C   sj   t jj|ddt jj|d  }t|jjt j}t|jjt jjt j}t	|j
t j t||d d S )Nr$   y              ?i  )r&   r1   r    r   rF   r4   rj   r   ri   r   r3   r   )rO   r+   r(   rR   rZ   r.   r.   r/   test_size_accuracy_large  s
     z'TestFftnSingle.test_size_accuracy_largec             C   s\   dddgdddgddd	gg}t tj|tj}t|jtj tjt |tj}t|| d S )
NrD   r!   r$   rQ   r#   r   r   r   r   )r   r&   r   rl   r   r3   ri   r   )rO   r(   r)   r   r.   r.   r/   test_definition_float16  s    z&TestFftnSingle.test_definition_float16c             C   sj   t jj||dt jj||  }t|jjt j}t|jjt jjt j}t	|j
t j t||d d S )Ny              ?g    A)r&   r1   r    r   rF   r4   rl   r   ri   r   r3   r   )rO   r+   r(   rR   rZ   r.   r.   r/   test_float16_input_small  s
     z'TestFftnSingle.test_float16_input_smallc             C   sj   t jj|ddt jj|d  }t|jjt j}t|jjt jjt j}t	|j
t j t||d d S )Nr$   y              ?g    >A)r&   r1   r    r   rF   r4   rl   r   ri   r   r3   r   )rO   r+   r(   rR   rZ   r.   r.   r/   test_float16_input_large  s
     z'TestFftnSingle.test_float16_input_largeN)r`   ra   rb   rP   rS   pytestmarkparametrizeSMALL_COMPOSITE_SIZESSMALL_PRIME_SIZESr   r|   r}   r   r   r   r   r.   r.   r.   r/   r     s   				r   c               @   sT   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S )TestFftnc             C   s   t jjd d S )Ni  )r&   r1   rN   )rO   r.   r.   r/   rP   #  s    zTestFftn.setup_methodc             C   sj   dddgdddgddd	gg}t |}t|t| td}tt |t| td}tt |t| d S )NrD   r!   r$   rQ   r#   r   r   r   r         )r   r   )r#   rQ   r$   r   )r   r   rB   r1   )rO   r(   r)   r.   r.   r/   rS   &  s    zTestFftn.test_definitionc          	   C   s  dddgdddgddd	gg}d
ddgdddgdddgg}dddgdddgdddgg}dddgd
ddgdddgg}dddgdddgdddgg}ddd	gdddgdddgg}dd
dgdddgdddgg}dddgdddgdddgg}dddgdddgd	ddgg}	dddgd
ddgdddgg}
dddgdddgdddgg}ddd	gdddgdddgg}dddgdddgddd	gg}d
ddgdddgdddgg}dddgdddgdddgg}dd
dgdddgdddgg}dddgdddgdddgg}dddgdddgd	ddgg}|||	g}|
||g}|||g}|||g}|||g}t |||g}tt|t|d!d tt|t|d"d tt|d#dt|d%d t|d&d}tt|d'd(t| t|d)d}ttt|d*d+d,d-t| t|d.d}ttt|d/d0d1d2t| t|d3d}tt|d4d5t| t|d6d}tt|d7d8t| t|d;d}tt||d  tt||d  tt||d  t|d<d}tt||d  tt||d  tt||d  t|d?d}tt|d d d d df |d d d d df  tt|d d d d df |d d d d df  tt|d d d d df |d d d d df  t|dBd}tt|d d dd d f |d d dd d f  tt|d d dd d f |d d dd d f  tt|d d dd d f |d d dd d f  t|dEd}tt|t|d dFdG tt|t|d dHdI tt|t|d dJdK t|dNd}tt|t|d d dd d f dOdP tt|t|d d dd d f dQdR tt|t|d d dd d f dSdT t|dWd}tt|t|d d d d df dXdY tt|t|d d d d df dZd[ tt|	t|d d d d df d\d] t|d_d}xPtdD ]D}x<tdD ]0}tt|||d d f |||d d f  qW qxW t|dad}xPtdD ]D}x<tdD ]0}tt||d d |f ||d d |f  qW qW t|dbd}xPtdD ]D}x<tdD ]0}tt|d d ||f |d d ||f  qBW q4W t|f d}t|| d S )cNrD   r!   r$   rQ   r#   r   r   r   r   r         r"   rW                  r                  r      )rI   r   r   r   r   )r   r   r   )r   rD   r!   )r   r!   r   )r   r   )r!   rD   r   r   r   )r!   r   rD   r   r   r   r   )rD   r!   r   r   r   r   r   )rD   r   r!   r   r   )r   r!   rD   r   r   r   r   )r   r   )rD   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   r   r   r   r   )r   r   r   r   r   r   r   r   r   )r   r   )r   )r   )r   r   r   r   r;   r
   )rO   Zplane1Zplane2Zplane3Z	ki_plane1Z	ki_plane2Z	ki_plane3Z	jk_plane1Z	jk_plane2Z	jk_plane3Z	kj_plane1Z	kj_plane2Z	kj_plane3Z	ij_plane1Z	ij_plane2Z	ij_plane3Z	ik_plane1Z	ik_plane2Z	ik_plane3Z	ijk_spaceZ	ikj_spaceZ	jik_spaceZ	jki_spaceZ	kij_spacer(   r)   r=   jr.   r.   r/   test_axes_argument3  s    






222222      666zTestFftn.test_axes_argumentc             C   s   dddgdddgg}ddddgddddgddddgddddgg}t |d	d}t|t | t |d
d}t|t |d d  d S )NrD   r!   r$   rQ   r#   r   r   )r   )rQ   rQ   )r$   rQ   r   )r   r   )rO   small_xlarge_x1r)   r.   r.   r/   test_shape_argument  s    


zTestFftn.test_shape_argumentc             C   s   dddgdddgddd	gg}t dddd
gdddd
gddd	d
gd
d
d
d
gg}t|ddd}t|t| t|ddd}t|ttt|dddd d S )NrD   r!   r$   rQ   r#   r   r   r   r   r   )r   rI   )rQ   rQ   r   r   )r   r   )rQ   rQ   r   r   )r   r   r   r   r   r   )r   r   r   r   )rO   r   r   r)   r.   r.   r/   test_shape_axes_argument  s    

z!TestFftn.test_shape_axes_argumentc             C   s   t jjd}t|ddd}t|t|ddd t jjd}t|ddd}t|t|ddd t jjd}t|ddd}t|t jj|ddd d S )Nr   r#   r$   r   rD   r   )rI   r   )r@   r7   r!   rQ   )r   r#   r$   r   r   )r   )r   r   )r   r#   r$   r   r   )r   )r   r   )rQ   rQ   r!   r   r   )r   r   )r   r   r   r   )r   r   )r   r   )rY   r1   r   r   r
   )rO   r(   r)   r.   r.   r/   test_shape_axes_argument2  s    z"TestFftn.test_shape_axes_argument2c             C   s0   t d}ttdd t|d	d W d Q R X d S )
NrQ   r!   z)shape requires more axes than are present)r   r   rD   )r   )rQ   rQ   r!   )r   r   r!   rD   )r   r]   r^   r   )rO   r(   r.   r.   r/   test_shape_argument_more  s    
z!TestFftn.test_shape_argument_morec             C   sT   t tdd tg g W d Q R X t tdd tddgddggd	 W d Q R X d S )
Nz4invalid number of data points \(\[1, 0\]\) specified)r   z5invalid number of data points \(\[4, -3\]\) specifiedrD   r!   rQ   r$   r   )rQ   r   )r]   r^   r   )rO   r.   r.   r/   r_     s    

zTestFftn.test_invalid_sizesc             C   s&   t jjd}tt|g d|dd d S )Nr!   )rI   gHz>)rp   )r!   r!   r!   )rY   r1   r   r   )rO   r(   r.   r.   r/   test_no_axes  s    zTestFftn.test_no_axesN)r`   ra   rb   rP   rS   r   r   r   r   r   r_   r   r.   r.   r.   r/   r   "  s    r   c            	   @   s   e Zd ZdZdZdd Zejjde	j
e	jdfe	je	jdfgdd Zejjd	ddgejjd
ddddddgdd Zdd Zdd ZdS )	TestIfftnNc             C   s   t jjd d S )Ni  )r&   r1   rN   )rO   r.   r.   r/   rP     s    zTestIfftn.setup_methodzdtype,cdtype,maxnlpi  i  c             C   s   t jdddgdddgddd	gg|d
}t|}t|j| t|t|| td}tt|t|| td}tt|t|| d S )NrD   r!   r$   rQ   r#   r   r   r   r   )r3   r   r   )r   r   )r#   rQ   r$   r   )r&   r   r   r   r3   r   rC   r1   )rO   r3   cdtypemaxnlpr(   r)   r.   r.   r/   rS     s    zTestIfftn.test_definitionr   r+   rD   r!   rq       ru   \   c             C   sH   t ||gdt ||g  }ttt||| ttt||| d S )Ny              ?)r1   r   r   r   )rO   r   r+   r(   r.   r.   r/   ry     s    zTestIfftn.test_random_complexc             C   sT   t tdd tg g W d Q R X t tdd tddgddggd	 W d Q R X d S )
Nz4invalid number of data points \(\[1, 0\]\) specified)r   z5invalid number of data points \(\[4, -3\]\) specifiedrD   r!   rQ   r$   r   )rQ   r   )r]   r^   r   )rO   r.   r.   r/   r_     s    

zTestIfftn.test_invalid_sizesc             C   s&   t jjd}tt|g d|dd d S )Nr!   )rI   gHz>)rp   )r!   r!   r!   )rY   r1   r   r   )rO   r(   r.   r.   r/   r   '  s    zTestIfftn.test_no_axes)r`   ra   rb   r3   r   rP   r   r   r   r&   r   
complex128rj   ri   rS   ry   r_   r   r.   r.   r.   r/   r     s   $r   c               @   s   e Zd ZdZdZdd Zejjde	j
e	jdfe	je	jdfgdd Zejjd	d
dddddgdd Zejjdeegdd Zejjdeegdd Zdd ZdS )	TestRfftnNc             C   s   t jjd d S )Ni  )r&   r1   rN   )rO   r.   r.   r/   rP   /  s    zTestRfftn.setup_methodzdtype,cdtype,maxnlpi  i  c             C   s   t jdddgdddgddd	gg|d
}t|}t|j| t|t|| td}tt|t|| td}tt|t|| d S )NrD   r!   r$   rQ   r#   r   r   r   r   )r3   r   r   )r   r   )r#   rQ   r$   r   )r&   r   r   r   r3   r   rK   r1   )rO   r3   r   r   r(   r)   r.   r.   r/   rS   2  s    zTestRfftn.test_definitionr+   rD   r!   rq   r   ru   r   c             C   s*   t ||g}ttt||j|dd d S )Ng|=)rp   )r1   r   r   r   rA   )rO   r+   r(   r.   r.   r/   test_randomC  s    zTestRfftn.test_randomfuncc             C   sT   t tdd |g g W d Q R X t tdd |ddgddggd	 W d Q R X d S )
Nz4invalid number of data points \(\[1, 0\]\) specified)r   z5invalid number of data points \(\[4, -3\]\) specifiedrD   r!   rQ   r$   r   )rQ   r   )r]   r^   )rO   r   r.   r.   r/   r_   H  s    

zTestRfftn.test_invalid_sizesc             C   s(   t tdd |g g d W d Q R X d S )Nz#at least 1 axis must be transformed)r   )rI   )r]   r^   )rO   r   r.   r.   r/   r   T  s    
zTestRfftn.test_no_axesc             C   s0   t tdd ttjdtjd W d Q R X d S )Nzx must be a real sequence)r   r   )r3   )r]   r   r   r&   r   ri   )rO   r.   r.   r/   r   Z  s    zTestRfftn.test_complex_input)r`   ra   rb   r3   r   rP   r   r   r   r&   r   r   rj   ri   rS   r   r   r   r_   r   r   r.   r.   r.   r/   r   +  s   "r   c               @   s   e Zd Zdd ZdS )	FakeArrayc             C   s   || _ |j| _d S )N)_dataZ__array_interface__)rO   r8   r.   r.   r/   r   `  s    zFakeArray.__init__N)r`   ra   rb   r   r.   r.   r.   r/   r   _  s   r   c               @   s   e Zd Zdd Zdd ZdS )
FakeArray2c             C   s
   || _ d S )N)r   )rO   r8   r.   r.   r/   r   f  s    zFakeArray2.__init__c             C   s   | j S )N)r   )rO   r.   r.   r/   	__array__i  s    zFakeArray2.__array__N)r`   ra   rb   r   r   r.   r.   r.   r/   r   e  s   r   c               @   s:  e Zd ZdZejejejgZeej	ej
ejg ZdddgZdd Zdd Zejjd	eejjd
eejjdddgejjdddd!gdd Zejjd	eejjd
eejjdddgejjdd$d&d(gdd Zdd Zejjd	eejjdddgejjdd*d-d0d3d5d8d;d>dAdDdGdIdLgdd ZdS )MTestOverwritez4Check input overwrite behavior of the FFT functions.r   r   r   c       
      C   sh   |j  }xZdd ttgD ]H}||||||d d|j|j|j|||f }	|st||d|	 d qW d S )Nc             S   s   | S )Nr.   )r(   r.   r.   r/   <lambda>w  s    z&TestOverwrite._check.<locals>.<lambda>)overwrite_xz%%s(%s%r, %r, axis=%r, overwrite_x=%r)zspurious overwrite in %s)r-   )copyr   r   r`   r3   rA   r   )
rO   r(   routinefftsizer@   r   should_overwriterT   Zfakesigr.   r.   r/   _checku  s    zTestOverwrite._checkc       
      C   s   t jjd t j|t jr8t jj| dt jj|   }nt jj| }|j|}|od||kod||| k}	| j||||||	d d S )Ni  y              ?)r   r   )r&   r1   rN   
issubdtypecomplexfloatingrandnr4   r   )
rO   r   r3   rA   r@   overwritable_dtypesr   r   r8   r   r.   r.   r/   	_check_1d  s    
zTestOverwrite._check_1dr3   r   r   TFz
shape,axesrD   r!   r   c             C   s@   t jt jt jf}| jt|||||| | jt|||||| d S )N)r&   rd   r   ri   r   r
   r	   )rO   r3   r   r   rA   rI   overwritabler.   r.   r/   test_fft_ifft  s
    zTestOverwrite.test_fft_ifftc             C   s6   | j }| jt|||||| | jt|||||| d S )N)real_dtypesr   r   r   )rO   r3   r   r   rA   rI   r   r.   r.   r/   test_rfft_irfft  s
    zTestOverwrite.test_rfft_irfftc       
         s   t jjd t j t jr8t jj| dt jj|   }nt jj| }|j }fdddd  fdd}x`||D ]N}	| j|||	||||	|d	 |jd
kr| j|j	||	|||j	|	|d	 qW d S )Ni  y              ?c             3   sf   t | dkrf V  nNxL| d d | d | d d fD ]*}x$ | dd  D ]}|f| V  qJW q4W d S )Nr   r!   rD   )r:   )Zshpr   rest)fftshape_iterr.   r/   r     s
    $z2TestOverwrite._check_nd_one.<locals>.fftshape_iterc             S   s    |d kr| S t tj| |S d S )N)tupler&   Ztake)rA   rI   r.   r.   r/   
part_shape  s    z/TestOverwrite._check_nd_one.<locals>.part_shapec                s,   | j |}o*tj|tj|ko* kS )N)rA   r&   prod)r8   rA   rI   r   )r3   r   r   r   r.   r/   r     s    z5TestOverwrite._check_nd_one.<locals>.should_overwrite)r   r   rD   )
r&   r1   rN   r   r   r   r4   r   rJ   T)
rO   r   r3   rA   rI   r   r   r8   r   Zfftshaper.   )r3   r   r   r   r   r/   _check_nd_one  s"    

zTestOverwrite._check_nd_oneNc             C   s<   t jt jt jf}| jt||||| | jt||||| d S )N)r&   rd   r   ri   r   r   r   )rO   r3   r   rA   rI   r   r.   r.   r/   test_fftn_ifftn  s
    zTestOverwrite.test_fftn_ifftnr   r   )r   r   r   r!   )r   r   r!   r   )r   rD   r   r   )r   r   r   r!   )r   r   r!   r   )r   rD   r   )r   Nr   r   )r   r  r   r!   r   )r  r  r!   r   rD   )r  r  r   r   )r  Nr   r   r   rD   )r  r  r   r   r!   r   rD   )r	  r
  r   r   r!   rD   r!   )r  r  r   r   r!   r   )r  r  r   r   r!   rD   )r  r  r   r   r!   r!   )r  r  r   r   r!   )r  Nr   r   r!   r   rD   r!   )r  r  )r`   ra   rb   __doc__r&   rj   r   r   r   ri   r   rd   ZdtypesZfftsizesr   r   r   r   r   r   r   r   r   r.   r.   r.   r/   r   n  sD   



(
r   r   c             C   s6   t jdtd}ttdd | |dd W d Q R X d S )Nr   )r3   z/Invalid norm value o, should be None or "ortho")r   o)r'   )r&   r   floatr]   r^   )r   r(   r.   r.   r/   test_invalid_norm  s    
r  c             C   s>   t jjd}|jdd|jd  }t| t|| | d S )Ni  r   y              ?)r&   r1   RandomStater    r   r5   )r   rngr(   r.   r.   r/   test_swapped_byte_order_complex  s    r  c             C   s0   t jjd}|jd}t| t|| | d S )Ni  r   )r&   r1   r  r    r   r5   )r   r  r(   r.   r.   r/   test_swapped_byte_order_real  s    
r  i    r      i`  r   r      r   i  r      rQ   r   $   )YZnumpy.testingr   r   r   r   r   r   r   r   r]   Zscipy.fft._pocketfftr	   r
   r   r   r   r   r   r   r   r   r   r   r   rY   r   r   r   r   r   r   r   r   r   r   r&   Z	numpy.fftZnumpy.randomr    r|   r   r}   r   r0   r1   r5   r9   r>   r?   rB   rC   rE   rH   rK   r   rL   rc   rf   rh   rk   rn   r   Zskipifre   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.   r.   r/   <module>   s~    <0



0M5C= \.4	z