U
    ?hz                     @   s`  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dd	gZ'd
ddg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&Z6G d'd( d(e6Z7G d)d* d*e6Z8G d+d, d,e6Z9G d-d. d.Z:G d/d0 d0Z;ej<j=e#j>e#j?kd1d2G d3d4 d4e;Z@G d5d6 d6e;ZAG d7d8 d8e;ZBG d9d: d:ZCej<j=e#jDe#j?kd1d2G d;d< d<eCZEG d=d> d>eCZFG d?d@ d@eCZGG dAdB dBZHej<j=e#jDe#j?kd1d2G dCdD dDeHZIG dEdF dFeHZJG dGdH dHeHZKG dIdJ dJZLG dKdL dLZMG dMdN dNZNG dOdP dPZOG dQdR dRZPG dSdT dTZQG dUdV dVZRG dWdX dXZSej<TdYeeeeeeeegdZd[ ZUej<TdYeeeeeeeegd\d] ZVej<TdYeeeegd^d_ ZWdS )`    )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randi    i`  i        $   i     c                 C   s4   d||f }t tj| | |tj|  | d S )Nzsize: %s  rdt: %s)r   npZlinalgnorm)xyrtolsizerdterr_msg r.   W/var/www/html/venv/lib/python3.8/site-packages/scipy/fft/_pocketfft/tests/test_basic.py_assert_close_in_norm&   s    r0   c                 C   s   t |  S Nr    )r+   r.   r.   r/   random,   s    r2   c                 C   s   | j d}| |S )z-Returns the same array with swapped byteorderS)dtypeZnewbyteorderastype)Zarrr4   r.   r.   r/   swap_byteorder/   s    r6   c                 C   s   t | }t||}|S r1   )r   r   outer)ndatar.   r.   r/   get_mat4   s    r:   c                 C   sZ   t | } t| }t|td}t| dt |  }t|D ]}tt|| | ||< q:|S Nr4                  @	r   lenr   r   r   r   ranger   r   r(   r8   r)   wir.   r.   r/   
direct_dft:   s    rD   c                 C   s\   t | } t| }t|td}t|dt |  }t|D ]}tt|| | | ||< q8|S r;   r>   rA   r.   r.   r/   direct_idftD   s    rE   c                 C   s(   t | } t| jD ]}t| |d} q| S N)axis)r   r@   ndimr
   r(   rG   r.   r.   r/   direct_dftnN   s    rJ   c                 C   s(   t | } t| jD ]}t| |d} q| S rF   )r   r@   rH   r	   rI   r.   r.   r/   direct_idftnU   s    rK   c                 C   sj   t | } t| }t| dt |  }t|d d td}t|d d D ]}tt|| | ||< qJ|S )Nr=   r"      r<   )	r   r?   r   r   r   r   r@   r   r   )r(   r8   rB   r)   rC   r.   r.   r/   direct_rdft\   s    rM   c                 C   sj   t | } t|td}t|d d D ]:}| | ||< |dkr$d| |k r$t| | ||| < q$t|jS )Nr<   r"   rL   r   )r   r   r   r@   r&   ZconjrE   real)r(   r8   x1rC   r.   r.   r/   direct_irdftf   s    rP   c                 C   s   t t| t| jd dS )NrL   axes)r   r   r@   rH   r(   r.   r.   r/   direct_rdftnp   s    rT   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d d S N  )cdtr,   r&   r2   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 )	NrL   r"            @      ?      @       @r<         @           )r&   r   rX   r
   r   r4   rD   r   r[   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 	NrL   r"   r]      r<   r8   r"   rf   r   )
r&   r   r,   r
   r   r4   rX   shaper   rD   r[   rO   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 )
NrL   r"   r]   r^   r<   rf   rg   rh   r   )	r&   r   rX   r
   r   r4   ri   r   rD   rj   r.   r.   r/   _test_n_argument_complex   s    z%_TestFFTBase._test_n_argument_complexc                 C   s\   t ddD ]L}d| }t|}t|t}tj|}t|| t|}t|| q
d S Nr"      )r@   r&   r   r
   r5   complexnumpyr   r[   rC   r8   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 NrL   r"   )assert_raises
ValueErrorr
   rZ   r.   r.   r/   test_invalid_sizes   s    z_TestFFTBase.test_invalid_sizesN)	__name__
__module____qualname__r\   rd   rl   rm   rt   ry   r.   r.   r.   r/   rU   t   s   			
rU   c                   @   s   e Zd Zdd ZdS )TestLongDoubleFFTc                 C   s   t j| _t j| _d S r1   )r&   longcomplexrX   
longdoubler,   rZ   r.   r.   r/   r\      s    zTestLongDoubleFFT.setup_methodNrz   r{   r|   r\   r.   r.   r.   r/   r}      s   r}   c                   @   s   e Zd Zdd ZdS )TestDoubleFFTc                 C   s   t j| _t j| _d S r1   r&   r   rX   doubler,   rZ   r.   r.   r/   r\      s    zTestDoubleFFT.setup_methodNr   r.   r.   r.   r/   r      s   r   c                   @   s   e Zd Zdd ZdS )TestSingleFFTc                 C   s   t j| _t j| _d S r1   r&   	complex64rX   float32r,   rZ   r.   r.   r/   r\      s    zTestSingleFFT.setup_methodNr   r.   r.   r.   r/   r      s   r   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	|
t j d S )NrL   r"   r]   rf   r<   rg   )rf   r&   r   float16r
   r   r4   r   ri   r   rD   r5   r   )r[   rO   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	|
t j t|d t	|
t j d S re   r   rj   r.   r.   r/   rl      s    z#TestFloat16FFT.test_n_argument_realN)rz   r{   r|   r   rl   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dd Zdd Z	dd Z
dS )_TestIFFTBasec                 C   s   t jd d S rV   r&   r2   rY   rZ   r.   r.   r/   r\      s    z_TestIFFTBase.setup_methodc              
   C   st   t ddddddddg| j}t|}t|}t|j| j t|| t dddddg| j}tt|t| d S )NrL   r"   r]   r^   r_   r`   ra   )r&   r   rX   r	   rE   r   r4   r   rb   r.   r.   r/   rd      s    
z_TestIFFTBase.test_definitionc              
   C   s   t 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 NrL   r"   r]   rf   ra   r<   )	r&   r   r,   r	   r   r4   rX   rE   r   rb   r.   r.   r/   test_definition_real   s    
z"_TestIFFTBase.test_definition_realc                 C   sr   t ddD ]b}d| }t|}t|| j}tj|}t||| j	| j
d t|}t||| j	| j
d q
d S )Nr"   ro   )r*   atol)r@   r&   r   r	   r5   rX   rq   r
   r   r*   r   rr   r.   r.   r/   rt      s    
z_TestIFFTBase.test_djbfftc                 C   s   dD ]x}t |g| j}t |g| jd|  }tt|}tt|}t|j| j t|j| j t|| t|| qd S )N	rL   3   o   d      @         i                 ?)r2   r5   rX   r	   r
   r   r4   r   r[   r+   r(   rc   rs   r.   r.   r/   test_random_complex   s    
z!_TestIFFTBase.test_random_complexc                 C   sh   dD ]^}t |g| j}tt|}tt|}t|j| j t|j| j t|| t|| qd S )Nr   )	r2   r5   r,   r	   r
   r   r4   rX   r   r   r.   r.   r/   test_random_real   s    
z_TestIFFTBase.test_random_realc                 C   s   t t D ]}tjd tj|| j}tt	|}t
||| j|| j t	t|}t
||| j|| j |dtj|  | j}tt	|}t
||| j|| j t	t|}t
||| j|| j qd S )NrW   r   )LARGE_COMPOSITE_SIZESLARGE_PRIME_SIZESr&   r2   rY   r!   r5   r,   r	   r
   r0   r*   rX   )r[   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 ru   )rw   rx   r	   rZ   r.   r.   r/   ry     s    z _TestIFFTBase.test_invalid_sizesN)rz   r{   r|   r\   rd   r   rt   r   r   r   ry   r.   r.   r.   r/   r      s   


r   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 N绽|=)r&   r~   rX   r   r,   r*   r   rZ   r.   r.   r/   r\     s    zTestLongDoubleIFFT.setup_methodNr   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 r   )r&   r   rX   r   r,   r*   r   rZ   r.   r.   r/   r\   !  s    zTestDoubleIFFT.setup_methodNr   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 )Nh㈵>g-C6?)r&   r   rX   r   r,   r*   r   rZ   r.   r.   r/   r\   )  s    zTestSingleIFFT.setup_methodNr   r.   r.   r.   r/   r   (  s   r   c                   @   sJ   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZG dd dZdd Z	dS )_TestRFFTBasec                 C   s   t jd d S rV   r   rZ   r.   r.   r/   r\   1  s    z_TestRFFTBase.setup_methodc              
   C   sl   ddddddddgdddddddddg	fD ]<}t j|| jd}t|}t|}t|| t|j| j q*d S r   )	r&   r   r,   r   rM   r   r   r4   rX   )r[   tr(   r)   rc   r.   r.   r/   rd   4  s    .
z_TestRFFTBase.test_definitionc                 C   sD   t ddD ]4}d| }t|}tj|}t|}t|| q
d S rn   )r@   r&   r   r
   r   r   r[   rC   r8   r(   rc   r)   r.   r.   r/   rt   <  s    
z_TestRFFTBase.test_djbfftc                 C   s*   t ttg  t ttddgddggd d S ru   )rw   rx   r   rZ   r.   r.   r/   ry   D  s    z _TestRFFTBase.test_invalid_sizesc              	   C   s4   t jd| jd}ttdd t| W 5 Q R X d S )N
   r<   x must be a real sequencematch)r&   r   rX   rw   	TypeErrorr   r[   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 || _d S r1   )r&   r   r9   r[   r9   r.   r.   r/   __init__O  s    z!_TestRFFTBase.MockSeries.__init__c              
   C   sH   zt | j|W S  tk
rB } ztdj|d|W 5 d }~X Y nX d S )Nz-'MockSeries' object has no attribute '{attr}')attr)getattrr9   AttributeErrorformat)r[   itemer.   r.   r/   __getattr__R  s    z$_TestRFFTBase.MockSeries.__getattr__N)rz   r{   r|   r   r   r.   r.   r.   r/   
MockSeriesN  s   r   c                 C   sN   t dddddg}t|}dddd	d
g}t| t|| t|j| d S )Ng      ?g       @g      @g      @g      @rL   r"   r]   rf   ra   )r&   r   r   r   r   r   r9   )r[   r(   Zxsexpectedr.   r.   r/   test_non_ndarray_with_dtypeZ  s    

z)_TestRFFTBase.test_non_ndarray_with_dtypeN)
rz   r{   r|   r\   rd   rt   ry   r   r   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 r1   )r&   r~   rX   	longfloatr,   rZ   r.   r.   r/   r\   h  s    zTestRFFTLongDouble.setup_methodNr   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 r1   r   rZ   r.   r.   r/   r\   n  s    zTestRFFTDouble.setup_methodNr   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 r1   r   rZ   r.   r.   r/   r\   t  s    zTestRFFTSingle.setup_methodNr   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d d S rV   r   rZ   r.   r.   r/   r\   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 )NrL   y       @      @r^   y      ?       @y      @      @rf   y       @      y      @      ra   y      @      @y      @      c                    s`   t tj|  jdt|d}t| t|}t|j j t	|| j
d t	|t| j
d d S )Nr<   rg   )decimal)r   r&   r   rX   r?   rP   r   r4   r,   r   ndecr	   )r(   Zxrr)   rc   rZ   r.   r/   _test  s
    z-_TestIRFFTBase.test_definition.<locals>._testr.   )r[   rO   Zx1_1Zx2_1rk   r   r.   rZ   r/   rd   }  s    
z_TestIRFFTBase.test_definitionc                 C   s   t ddD ]t}d| }td|ddtd|d d  }d|d< |d dkr`t|d |d< tj|}t|}t|| q
d S )Nr"   ro   r   r   rL   )r@   r&   r   rN   r
   r   r   r   r.   r.   r/   rt     s    $z_TestIRFFTBase.test_djbfftc                 C   s   dD ]}t |g| j}tt||d}tt||d d d}t|j| j t|j| j t||| j	d| d t||| j	d| d qd S )Nr   rg   r"   rL   zsize=%d)r   r-   )
r2   r5   r,   r   r   r   r4   rX   r   r   r   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}tt D ]t}tjd tj|	| j }t
t|t|}t||||| j  tt
|dt| d }t||||| j  q*d S )Nr   r   rW   r"   rL   )r,   r&   r   float64r   r   r2   rY   r!   r5   r   r   r?   r0   )r[   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 ru   )rw   rx   r   rZ   r.   r.   r/   ry     s    z!_TestIRFFTBase.test_invalid_sizesN)	rz   r{   r|   r\   rd   rt   r   r   ry   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 Nro   r&   r   rX   r   r,   r   rZ   r.   r.   r/   r\     s    z TestIRFFTLongDouble.setup_methodNr   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 r   r   rZ   r.   r.   r/   r\     s    zTestIRFFTDouble.setup_methodNr   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 )Nra   )r&   r   rX   r   r,   r   rZ   r.   r.   r/   r\     s    zTestIRFFTSingle.setup_methodNr   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d d S rV   r   rZ   r.   r.   r/   r\     s    zTestfft2.setup_methodc                 C   s8   t d}t|ddd}t jj|ddd}t|| dS )z-FFT returns wrong result with axes parameter.rf   rf   r"      r   srR   N)rq   Zonesr   r
   r   r   r[   r(   r)   Z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 )NrL   r"   rf   r   )rw   rx   r   rZ   r.   r.   r/   ry     s    zTestfft2.test_invalid_sizesN)rz   r{   r|   r\   r   ry   r.   r.   r.   r/   r     s   	r   c                   @   s   e Zd Zdd Zdd Zejdee	 dd Z
ejdee dd	 Zd
d Zejdee	 dd Zejdee dd ZdS )TestFftnSinglec                 C   s   t jd d S rV   r   rZ   r.   r.   r/   r\     s    zTestFftnSingle.setup_methodc                 C   sb   dddgdddgddd	gg}t t|tj}t|jtjkd
d tt |tj}t|| d S )NrL   r"   r]   rf   ra         r   	   z-double precision output with single precision)msg)r   r&   r   r   r   r4   r   r   r   r.   r.   r/   rd     s    zTestFftnSingle.test_definitionr+   c                 C   sj   t j||dt j||  }t|jt j}t|jt jt j}t	|j
t j t||d d S )Nr     r&   r2   r!   r   rN   r5   r   r   r   r   r4   r   r   r.   r.   r/   test_size_accuracy_small  s
     z'TestFftnSingle.test_size_accuracy_smallc                 C   sj   t j|ddt j|d  }t|jt j}t|jt jt j}t	|j
t j t||d d S )Nr]   r   r   r   r   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|tj}t|jtj tt |tj}t|| d S )
NrL   r"   r]   rf   ra   r   r   r   r   )r   r&   r   r   r   r4   r   r   r   r.   r.   r/   test_definition_float16  s    z&TestFftnSingle.test_definition_float16c                 C   sj   t j||dt j||  }t|jt j}t|jt jt j}t	|j
t j t||d d S )Nr   g    Ar&   r2   r!   r   rN   r5   r   r   r   r   r4   r   r   r.   r.   r/   test_float16_input_small  s
     z'TestFftnSingle.test_float16_input_smallc                 C   sj   t j|ddt j|d  }t|jt j}t|jt jt j}t	|j
t j t||d d S )Nr]   r   g    >Ar   r   r.   r.   r/   test_float16_input_large  s
     z'TestFftnSingle.test_float16_input_largeN)rz   r{   r|   r\   rd   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d d S rV   r   rZ   r.   r.   r/   r\   #  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 )NrL   r"   r]   rf   ra   r   r   r   r         ra   rf   r]   r   )r   r   rJ   r2   r[   r(   r)   r.   r.   r/   rd   &  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"d#d#d%t| t|d'd}tt|d%d#t| t|d(d}tt|d%d"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|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|d.d}tt|t|d* d%d" tt|t|d d%d" tt|t|d d%d" t|d/d}tt|t|d d d*d d f d"d% tt|t|d d dd d f d"d% tt|t|d d dd d f d"d% t|d0d}tt|t|d d d d d*f d"d% tt|t|d d d d df d"d% tt|	t|d d d d df d"d% t|d1d}tdD ]@}tdD ]0}tt|||d d f |||d d f  qqvt|d2d}tdD ]@}tdD ]0}tt||d d |f ||d d |f  qؐqt|d3d}tdD ]@}tdD ]0}tt|d d ||f |d d ||f  q.q"t|d4d}t|| d S )5NrL   r"   r]   rf   ra   r   r   r   r   r            ro                  r                  r      )r   r   r   rQ   r   rL   r"   )r   r"   )r   r   )r"   rL   r   r   r   )r"   r   rL   r   )rL   r"   r   )rL   r   r"   )r   r"   rL   r   r   r   rL   r"   r   )r   r   r   r   )r   r   )r   r   r   r   r   r.   )r   r   r   r   r@   r
   )r[   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)   rC   jr.   r.   r/   test_axes_argument3  s.      





222222222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 )NrL   r"   r]   rf   ra   r   r   rf   rf   r   )r]   rf   r   )r   r   r[   Zsmall_xZ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 )NrL   r"   r]   rf   ra   r   r   r   r   r   r  r   r   r  r   r   )r   r   r   r   r	  r.   r.   r/   test_shape_axes_argument  s"    


  z!TestFftn.test_shape_axes_argumentc                 C   s   t jd}t|ddd}t|t|ddd t jd}t|ddd}t|t|d	dd t jd
}t|ddd}t|t jj|ddd d S )N)r   ra   r]   r   r  )r   )rR   r   r   r   )rG   r8   r  r   r   r   r   )rq   r2   r   r   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 5 Q R X d S )Nr   z)shape requires more axes than are presentr   )r   r   r"   rL   r  )r   rw   rx   r   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 5 Q R X t tdd tddgddggd W 5 Q R X d S Nz4invalid number of data points \(\[1, 0\]\) specifiedr   z5invalid number of data points \(\[4, -3\]\) specifiedrL   r"   r   )rw   rx   r   rZ   r.   r.   r/   ry     s    zTestFftn.test_invalid_sizesc                 C   s&   t jd}tt|g d|dd d S N)r"   r"   r"   rQ   gHz>r   )rq   r2   r   r   r   r.   r.   r/   test_no_axes  s    zTestFftn.test_no_axesN)rz   r{   r|   r\   rd   r  r
  r  r  r  ry   r  r.   r.   r.   r/   r   "  s    r   c                
   @   s   e Zd ZdZdZdd Zejde	j
e	jdfe	je	jdfgdd Zejd	ddge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d d S rV   r   rZ   r.   r.   r/   r\     s    zTestIfftn.setup_methoddtype,cdtype,maxnlpr     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 NrL   r"   r]   rf   ra   r   r   r   r   r<   r   r   )r&   r   r   r   r4   r   rK   r2   r[   r4   cdtypemaxnlpr(   r)   r.   r.   r/   rd     s    zTestIfftn.test_definitionr  r+   rL   r"   r       r   \   c                 C   sH   t ||gdt ||g  }ttt||| ttt||| d S )Nr   )r2   r   r   r   )r[   r  r+   r(   r.   r.   r/   r     s    zTestIfftn.test_random_complexc              	   C   sT   t tdd tg g W 5 Q R X t tdd tddgddggd W 5 Q R X d S r  )rw   rx   r   rZ   r.   r.   r/   ry     s    zTestIfftn.test_invalid_sizesc                 C   s&   t jd}tt|g d|dd d S r  )rq   r2   r   r   r   r.   r.   r/   r  '  s    zTestIfftn.test_no_axes)rz   r{   r|   r4   r  r\   r   r   r   r&   r   
complex128r   r   rd   r   ry   r  r.   r.   r.   r/   r    s   
r  c                	   @   s   e Zd ZdZdZdd Zejde	j
e	jdfe	je	jdfgdd Zejd	d
dddddgdd Zejdeegdd Zejdeegdd Zdd ZdS )	TestRfftnNc                 C   s   t jd d S rV   r   rZ   r.   r.   r/   r\   /  s    zTestRfftn.setup_methodr  r   r  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 r  )r&   r   r   r   r4   r   rT   r2   r  r.   r.   r/   rd   2  s    zTestRfftn.test_definitionr+   rL   r"   r   r  r   r  c                 C   s*   t ||g}ttt||j|dd d S )Nr   r  )r2   r   r   r   ri   )r[   r+   r(   r.   r.   r/   test_randomC  s    zTestRfftn.test_randomfuncc              	   C   sT   t tdd |g g W 5 Q R X t tdd |ddgddggd W 5 Q R X d S r  rw   rx   r[   r  r.   r.   r/   ry   H  s    zTestRfftn.test_invalid_sizesc              	   C   s(   t tdd |g g d W 5 Q R X d S )Nz#at least 1 axis must be transformedr   rQ   r  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 5 Q R X d S )Nr   r   r   r<   )rw   r   r   r&   r   r   rZ   r.   r.   r/   r   Z  s    zTestRfftn.test_complex_input)rz   r{   r|   r4   r  r\   r   r   r   r&   r   r  r   r   rd   r  r   r   ry   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 r1   )_dataZ__array_interface__r   r.   r.   r/   r   `  s    zFakeArray.__init__N)rz   r{   r|   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 r1   r"  r   r.   r.   r/   r   f  s    zFakeArray2.__init__c                 C   s   | j S r1   r$  rZ   r.   r.   r/   	__array__i  s    zFakeArray2.__array__N)rz   r{   r|   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d	eejd
eejdddgejddddgdd Zejd	eejd
eejdddgejddddgdd Zdd Zejd	eejdddgejdddddddddd d!d"d#d$gd%d& Zd'S )(TestOverwritez4Check input overwrite behavior of the FFT functions.r   r   r  c           
      C   sd   |  }dd ttfD ]H}||||||d d|j|j|j|||f }	|st||d|	 d qd S )Nc                 S   s   | S r1   r.   rS   r.   r.   r/   <lambda>w      z&TestOverwrite._check.<locals>.<lambda>)overwrite_xz%%s(%s%r, %r, axis=%r, overwrite_x=%r)zspurious overwrite in %s)r-   )copyr!  r#  rz   r4   ri   r   )
r[   r(   routinefftsizerG   r)  should_overwriterk   Zfakesigr.   r.   r/   _checku  s         zTestOverwrite._checkc           
      C   s   t jd t |t jr8t jj| dt jj|   }nt jj| }||}|od||kod||| k}	| j||||||	d d S )NrW   r   r)  r-  )r&   r2   rY   
issubdtypecomplexfloatingrandnr5   r/  )
r[   r+  r4   ri   rG   overwritable_dtypesr,  r)  r9   r-  r.   r.   r/   	_check_1d  s    

zTestOverwrite._check_1dr4   r,  r)  TFz
shape,axes)r   r   )r   r"   r   )r"   r   rL   c              	   C   s@   t jt jt jf}| t|||||| | t|||||| d S r1   )r&   r~   r  r   r5  r
   r	   r[   r4   r,  r)  ri   rR   overwritabler.   r.   r/   test_fft_ifft  s      zTestOverwrite.test_fft_ifftc              	   C   s6   | j }| t|||||| | t|||||| d S r1   )real_dtypesr5  r   r   r9  r.   r.   r/   test_rfft_irfft  s      zTestOverwrite.test_rfft_irfftc           
         s   t jd t  t jr8t jj| dt jj|   }nt jj| }| }fdddd  fdd}||D ]N}	| j|||	||||	|d	 |jd
kr| j|j	||	|||j	|	|d	 qd S )NrW   r   c                 3   s^   t | dkrdV  nF| d d | d | d d fD ]&} | dd  D ]}|f| V  qFq2d S )Nr   r.   r"   rL   )r?   )Zshpr  rest)fftshape_iterr.   r/   r?    s
    "z2TestOverwrite._check_nd_one.<locals>.fftshape_iterc                 S   s    |d kr| S t t| |S d S r1   )tupler&   Ztake)ri   rR   r.   r.   r/   
part_shape  s    z/TestOverwrite._check_nd_one.<locals>.part_shapec                    s,   | j |}o*t|t|ko* kS r1   )ri   r&   prod)r9   ri   rR   r   )r4   r4  r)  rA  r.   r/   r-    s    z5TestOverwrite._check_nd_one.<locals>.should_overwriter0  rL   )
r&   r2   rY   r1  r2  r3  r5   r/  rH   T)
r[   r+  r4   ri   rR   r4  r)  r9   r-  Zfftshaper.   )r4   r?  r4  r)  rA  r/   _check_nd_one  s,    


  zTestOverwrite._check_nd_one)r6  N)r6  r  )r7  r  )r8  rL   )r   r   N)rF  r   rL   )r   r   r"   rG  )rH  r   )rH  r  )rH  rE  )rH  )r"   )rH  N)rH  r   c                 C   s<   t jt jt jf}| t||||| | t||||| d S r1   )r&   r~   r  r   rD  r   r   )r[   r4   r)  ri   rR   r:  r.   r.   r/   test_fftn_ifftn  s    zTestOverwrite.test_fftn_ifftnN)rz   r{   r|   __doc__r&   r   r   r   r<  r   r  r~   ZdtypesZfftsizesr/  r5  r   r   r   r;  r=  rD  rI  r.   r.   r.   r/   r&  n  sP   



(
r&  r  c              	   C   s6   t jdtd}ttdd | |dd W 5 Q R X d S )Nr   r<   zBInvalid norm value 'o', should be "backward", "ortho" or "forward"r   o)r'   )r&   r   floatrw   rx   )r  r(   r.   r.   r/   test_invalid_norm  s
    rM  c                 C   s>   t jd}|dd|d  }t| t|| | d S )NrW   r   r   r&   r2   ZRandomStater!   r   r6   r  rngr(   r.   r.   r/   test_swapped_byte_order_complex  s    rQ  c                 C   s0   t jd}|d}t| t|| | d S )NrW   r   rN  rO  r.   r.   r/   test_swapped_byte_order_real  s    
rR  )XZnumpy.testingr   r   r   r   r   r   r   r   rw   Zscipy.fft._pocketfftr	   r
   r   r   r   r   r   r   r   r   r   r   r   rq   r   r   r   r   r   r   r   r   r   r   r&   Z	numpy.fftZnumpy.randomr!   r   r   r   r   r0   r2   r6   r:   rD   rE   rJ   rK   rM   rP   rT   rU   r}   r   r   r   r   r   Zskipifr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r!  r#  r&  r   rM  rQ  rR  r.   r.   r.   r/   <module>   s    <0



0M5C= \.4	z   
   
