U
    »mœd¥v  ã                   @   sT  d dl 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 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 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„ Z*dd„ Z+dd„ Z,dd „ Z-G d!d"„ d"ƒZ.G d#d$„ d$e.ƒZ/G d%d&„ d&e.ƒZ0G d'd(„ d(ƒZ1G d)d*„ d*ƒZ2G d+d,„ d,e2ƒZ3G d-d.„ d.e2ƒZ4G d/d0„ d0ƒZ5G d1d2„ d2e5ƒZ6G d3d4„ d4e5ƒZ7G d5d6„ d6ƒZ8G d7d8„ d8e8ƒZ9G d9d:„ d:e8ƒZ:G d;d<„ d<ƒZ;G d=d>„ d>ƒZ<G d?d@„ d@ƒZ=G dAdB„ dBƒZ>G dCdD„ dDƒZ?G dEdF„ dFƒZ@G dGdH„ dHƒZAejB CdIeeeg¡dJdK„ ƒZDdS )Lé    )Úassert_Úassert_equalÚassert_array_almost_equalÚassert_array_almost_equal_nulpÚassert_array_lessN)Úraises)ÚifftÚfftÚfftnÚifftnÚrfftÚirfftÚfft2)ÚarangeÚaddÚarrayÚasarrayÚzerosÚdotÚexpÚpiÚswapaxesÚdoubleÚcdouble©Úrandi    i`  i  é   é   é$   iÛ  é   c                 C   s4   d||f }t tj | | ¡|tj | ¡ |ƒ d S )Nzsize: %s  rdt: %s)r   ÚnpZlinalgZnorm)ÚxÚyÚrtolÚsizeÚrdtÚerr_msg© r'   úW/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/scipy/fftpack/tests/test_basic.pyÚ_assert_close_in_norm#   s    r)   c                 C   s   t | Ž S ©Nr   )r$   r'   r'   r(   Úrandom)   s    r+   c                 C   s   t | ƒ}t ||¡}|S r*   )r   r   Úouter)ÚnÚdatar'   r'   r(   Úget_mat-   s    r/   c                 C   sZ   t | ƒ} t| ƒ}t|td�}t|ƒ dt |  }t|ƒD ]}tt|| ƒ| ƒ||< q:|S ©N©Údtypeù               @©	r   Úlenr   r   r   r   Úranger   r   ©r!   r-   r"   ÚwÚir'   r'   r(   Ú
direct_dft3   s    r:   c                 C   s\   t | ƒ} t| ƒ}t|td�}t|ƒdt |  }t|ƒD ]}tt|| ƒ| ƒ| ||< q8|S r0   r4   r7   r'   r'   r(   Údirect_idft=   s    r;   c                 C   s,   t | ƒ} tt| jƒƒD ]}t| |d�} q| S ©N)Úaxis)r   r6   r5   Úshaper	   ©r!   r=   r'   r'   r(   Údirect_dftnG   s    r@   c                 C   s,   t | ƒ} tt| jƒƒD ]}t| |d�} q| S r<   )r   r6   r5   r>   r   r?   r'   r'   r(   Údirect_idftnN   s    rA   c                 C   sš   t | ƒ} t| ƒ}t|ƒ dt |  }t|td�}t|d d ƒD ]R}tt|| ƒ| ƒ}|rŠ|j	|d| d < d| |k r”|j
|d| < qB|j	|d< qB|S )Nr3   r1   r   é   r   )r   r5   r   r   r   r   r6   r   r   ÚrealÚimag)r!   r-   r8   Úrr9   r"   r'   r'   r(   Údirect_rdftU   s    rF   c                 C   s¼   t | ƒ} t| ƒ}t|td�}t|d d ƒD ]„}|r¤d| |k rŽ| d| d  d| d|    ||< | d| d  d| d|    ||| < q°| d| d  ||< q,| d |d< q,t|ƒjS )Nr1   r   rB   ù              ð?r   )r   r5   r   r   r6   r;   rC   )r!   r-   Úx1r9   r'   r'   r(   Údirect_irdfte   s    $*rI   c                   @   s4   e Z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    r+   Úseed©Úselfr'   r'   r(   Úsetup_methodv   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 )	NrB   r   é   ù      @      ð?ù      @       @r1   ù      @        é   )r    r   rM   r	   r   r2   r:   r   ©rP   r!   r"   Úy1r'   r'   r(   Útest_definition{   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 ©	NrB   r   rR   é   r1   ©r-   ©r   r[   r   )
r    r   r%   r	   r   r2   rM   r>   r   r:   ©rP   rH   Ú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 )
NrB   r   rR   rS   r1   r[   r\   r]   r   )	r    r   rM   r	   r   r2   r>   r   r:   r^   r'   r'   r(   Ú_test_n_argument_complex�   s    z%_TestFFTBase._test_n_argument_complexc                 C   s*   t ttg ƒ t ttddgddggdƒ d S ©NrB   r   éûÿÿÿ)Úassert_raisesÚ
ValueErrorr	   rO   r'   r'   r(   Útest_invalid_sizes–   s    z_TestFFTBase.test_invalid_sizesN)Ú__name__Ú
__module__Ú__qualname__rQ   rY   r`   ra   rf   r'   r'   r'   r(   rJ   u   s
   			rJ   c                   @   s   e Zd Zdd„ ZdS )ÚTestDoubleFFTc                 C   s   t j| _t j| _d S r*   ©r    r   rM   r   r%   rO   r'   r'   r(   rQ   œ   s    zTestDoubleFFT.setup_methodN©rg   rh   ri   rQ   r'   r'   r'   r(   rj   ›   s   rj   c                   @   s,   e Zd Zdd„ Zejjddd�dd„ ƒZdS )	ÚTestSingleFFTc                 C   s   t j| _t j| _d S r*   ©r    Ú	complex64rM   Úfloat32r%   rO   r'   r'   r(   rQ   ¢   s    zTestSingleFFT.setup_methodFzusingle-precision FFT implementation is partially disabled, until accuracy issues with large prime powers are resolved)ÚrunÚreasonc                 C   s   d S r*   r'   rO   r'   r'   r(   Útest_notice¦   s    zTestSingleFFT.test_noticeN)rg   rh   ri   rQ   ÚpytestÚmarkZxfailrs   r'   r'   r'   r(   rm   ¡   s   rm   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 )NrB   r   rR   r[   r1   r\   )r[   ©r    r   Úfloat16r	   r   r2   ro   r>   r   r:   Úastyperp   )rP   rH   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 rZ   rw   r^   r'   r'   r(   r`   ´   s    z#TestFloat16FFT.test_n_argument_realN)rg   rh   ri   rz   r`   r'   r'   r'   r(   rv   «   s   rv   c                   @   sD   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S )Ú_TestIFFTBasec                 C   s   t j d¡ d S rK   ©r    r+   rN   rO   r'   r'   r(   rQ   ¿   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 )NrB   r   rR   rS   rT   rU   rV   )r    r   rM   r   r;   r   r2   r   rW   r'   r'   r(   rY   Â   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 ©NrB   r   rR   r[   rV   r1   )	r    r   r%   r   r   r2   rM   r;   r   rW   r'   r'   r(   Útest_definition_realÌ   s    
z"_TestIFFTBase.test_definition_realc                 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©	rB   é3   éo   éd   éÈ   é@   é€   é   i   rG   )r+   ry   rM   r   r	   r   r2   r   ©rP   r$   r!   rX   Úy2r'   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   )	r+   ry   r%   r   r	   r   r2   rM   r   r‡   r'   r'   r(   Útest_random_realâ   s    
z_TestIFFTBase.test_random_realc                 C   sè   | j tjkrd}n| j tjkr"d}tt D ]¸}tj d¡ tj |¡ 	| j ¡}t
t|ƒƒ}t||||| j ƒ tt
|ƒƒ}t||||| j ƒ |dtj |¡   	| j¡}t
t|ƒƒ}t||||| j ƒ tt
|ƒƒ}t||||| j ƒ q*d S )Nçñhãˆµøä>ç»½×Ùß|Û=rL   rG   )r%   r    rp   Úfloat64ÚLARGE_COMPOSITE_SIZESÚLARGE_PRIME_SIZESr+   rN   r   ry   r   r	   r)   rM   ©rP   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 rb   )rd   re   r   rO   r'   r'   r(   rf     s    z _TestIFFTBase.test_invalid_sizesN)
rg   rh   ri   rQ   rY   r~   r‰   rŠ   r‘   rf   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 S r*   rk   rO   r'   r'   r(   rQ     s    zTestDoubleIFFT.setup_methodNrl   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 S r*   rn   rO   r'   r'   r(   rQ     s    zTestSingleIFFT.setup_methodNrl   r'   r'   r'   r(   r“     s   r“   c                   @   sB   e Zd Zdd„ Zdd„ Zdd„ ZG dd„ dƒZd	d
„ Zdd„ ZdS )Ú_TestRFFTBasec                 C   s   t j d¡ d S rK   r|   rO   r'   r'   r(   rQ     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   rF   r   r   r2   )rP   Útr!   r"   rX   r'   r'   r(   rY     s    .
z_TestRFFTBase.test_definitionc                 C   s*   t ttg ƒ t ttddgddggdƒ d S rb   )rd   re   r   rO   r'   r'   r(   rf     s    z _TestRFFTBase.test_invalid_sizesc                   @   s   e Zd Zdd„ Zdd„ ZdS )z_TestRFFTBase.MockSeriesc                 C   s   t  |¡| _d S r*   )r    r   r.   ©rP   r.   r'   r'   r(   Ú__init__$  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)Úgetattrr.   ÚAttributeErrorÚformat)rP   ÚitemÚer'   r'   r(   Ú__getattr__'  s    þþz$_TestRFFTBase.MockSeries.__getattr__N)rg   rh   ri   r—   rž   r'   r'   r'   r(   Ú
MockSeries#  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      @rB   r   rR   r[   rV   )r    r   r”   rŸ   r   r   r.   )rP   r!   ZxsÚexpectedr'   r'   r(   Útest_non_ndarray_with_dtype/  s    

z)_TestRFFTBase.test_non_ndarray_with_dtypec                 C   s   t tttjdtjd�ƒ d S ©Nr[   r1   )rd   Ú	TypeErrorr   r    r   ro   rO   r'   r'   r(   Útest_complex_input:  s    z _TestRFFTBase.test_complex_inputN)	rg   rh   ri   rQ   rY   rf   rŸ   r¡   r¤   r'   r'   r'   r(   r”     s   r”   c                   @   s   e Zd Zdd„ ZdS )ÚTestRFFTDoublec                 C   s   t j| _t j| _d S r*   rk   rO   r'   r'   r(   rQ   ?  s    zTestRFFTDouble.setup_methodNrl   r'   r'   r'   r(   r¥   >  s   r¥   c                   @   s   e Zd Zdd„ ZdS )ÚTestRFFTSinglec                 C   s   t j| _t j| _d S r*   rn   rO   r'   r'   r(   rQ   E  s    zTestRFFTSingle.setup_methodNrl   r'   r'   r'   r(   r¦   D  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 rK   r|   rO   r'   r'   r(   rQ   K  s    z_TestIRFFTBase.setup_methodc              	      sx   ddddddddg}ddddddddg}ddddddddd	g	}ddddd
ddddg	}‡ fdd„}|||ƒ |||ƒ d S )NrB   r   rR   r[   y       @      @rS   y       @      Ày      @      ð¿rV   y      @      @y      @      Àc                    sR   t tj| ˆ jd�ƒ}t| ƒ}t|jˆ jƒ t||ˆ jd� t|t	|ƒˆ jd� d S )Nr1   )Údecimal)
r   r    r   r%   rI   r   r2   r   Úndecr   )r!   Zxrr"   rX   rO   r'   r(   Ú_testT  s
    z-_TestIRFFTBase.test_definition.<locals>._testr'   )rP   rH   Zx1_1r_   Zx2_1rª   r'   rO   r(   rY   N  s    
z_TestIRFFTBase.test_definitionc                 C   s€   dD ]v}t |gƒ | j¡}tt|ƒƒ}tt|ƒƒ}t|j| jƒ t|j| jƒ t||| jd| d� t||| jd| d� qd S )Nr   zsize=%d)r¨   r&   )	r+   ry   r%   r   r   r   r2   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j d¡ tj |¡ 	| j ¡}t
t|ƒƒ}t||||| j ƒ tt
|ƒƒ}t||||| j ƒ q*d S )Nr‹   rŒ   rL   )r%   r    rp   r�   rŽ   r�   r+   rN   r   ry   r   r   r)   r�   r'   r'   r(   r‘   j  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 rb   )rd   re   r   rO   r'   r'   r(   rf   y  s    z!_TestIRFFTBase.test_invalid_sizesc                 C   s   t tttjdtjd�ƒ d S r¢   )rd   r£   r   r    r   ro   rO   r'   r'   r(   r¤   }  s    z!_TestIRFFTBase.test_complex_inputN)	rg   rh   ri   rQ   rY   rŠ   r‘   rf   r¤   r'   r'   r'   r(   r§   J  s   r§   c                   @   s   e Zd Zdd„ ZdS )ÚTestIRFFTDoublec                 C   s   t j| _t j| _d| _d S )Né   )r    r   rM   r   r%   r©   rO   r'   r'   r(   rQ   …  s    zTestIRFFTDouble.setup_methodNrl   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 )NrV   )r    ro   rM   rp   r%   r©   rO   r'   r'   r(   rQ   Œ  s    zTestIRFFTSingle.setup_methodNrl   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 rK   r|   rO   r'   r'   r(   rQ   “  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.©r[   r[   r   ©é   r±   ©éýÿÿÿéþÿÿÿ©r>   Úaxes)Úsr¶   N)ÚnumpyZonesr   r	   r
   r   ©rP   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 )NrB   r   ©r[   r³   )rd   re   r   rO   r'   r'   r(   rf   Ÿ  s    zTestfft2.test_invalid_sizesN)rg   rh   ri   rQ   rº   rf   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 rK   r|   rO   r'   r'   r(   rQ   ¥  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 )NrB   r   rR   r[   rV   é   é   r±   é	   z-double precision output with single precision)Úmsg)r
   r    r   rp   r   r2   ro   r   r¹   r'   r'   r(   rY   ¨  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 )NrG   éÐ  ©r    r+   r   r
   rC   ry   rp   r�   ro   r   r2   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 )NrR   rG   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 )
NrB   r   rR   r[   rV   r½   r¾   r±   r¿   )r
   r    r   rx   r   r2   ro   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 )NrG   g    €„A©r    r+   r   r
   rC   ry   rx   r�   ro   r   r2   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 )NrR   rG   g    €„>ArÆ   r‡   r'   r'   r(   Útest_float16_input_large×  s
     z'TestFftnSingle.test_float16_input_largeN)rg   rh   ri   rQ   rY   rt   ru   ÚparametrizeÚSMALL_COMPOSITE_SIZESÚSMALL_PRIME_SIZESrÃ   rŽ   r�   rÄ   rÅ   rÇ   rÈ   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 )ÚTestFftnc                 C   s   t j d¡ d S rK   r|   rO   r'   r'   r(   rQ   â  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 )NrB   r   rR   r[   rV   r½   r¾   r±   r¿   ©é   é   ©rV   r[   rR   rÎ   )r
   r   r@   r+   ©rP   r!   r"   r'   r'   r(   rY   å  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Ø�qÌt|d3d�}tdƒD ]@}tdƒD ]0}tt|d d …||f ƒ|d d …||f ƒ �q.�q"t|d4d�}t||ƒ d S )5NrB   r   rR   r[   rV   r½   r¾   r±   r¿   é
   é   é   é   r¬   é   é   é   é   é   rÎ   é   é   é   é   é   rÏ   é   )r³   r´   éÿÿÿÿ©r¶   ©r   rB   r   )r   r   )r   rá   )r   rB   r   rá   r³   )r   r   rB   r´   )rB   r   r   )rB   r   r   )r   r   rB   ©r´   rá   r   ©rB   r   r²   )r³   rá   ©rá   r´   )rá   r³   )r´   r³   ©rá   ©r´   ©r   r'   )r   r   r
   r   r6   r	   )rP   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"   r9   Újr'   r'   r(   Útest_axes_argumentò  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 )NrB   r   rR   r[   rV   r½   r   ©r[   r[   ©r>   )rR   r[   rá   )r
   r   ©rP   Zsmall_xZlarge_x1r"   r'   r'   r(   Útest_shape_argumentx  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 )NrB   r   rR   r[   rV   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Ò   rV   rR   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(   Ú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¯   zBwhen given, axes and shape arguments have to be of the same length©Úmatch)r±   r±   r   rB   rí   )r   rd   re   r
   )rP   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\]\) specifiedrB   r   r»   )rd   re   r
   rO   r'   r'   r(   rf   ­  s    ÿÿzTestFftn.test_invalid_sizesN)rg   rh   ri   rQ   rY   rë   rï   rð   rñ   rô   rf   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S )Ú	TestIfftnNc                 C   s   t j d¡ d S rK   r|   rO   r'   r'   r(   rQ   ½  s    zTestIfftn.setup_methodzdtype,cdtype,maxnlprÁ   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 )NrB   r   rR   r[   rV   r½   r¾   r±   r¿   r1   rÍ   rÐ   )r    r   r   r   r2   r   rA   r+   )rP   r2   ÚcdtypeÚmaxnlpr!   r"   r'   r'   r(   rY   À  s    þþzTestIfftn.test_definitionrø   r$   rB   r   r€   é    r„   é\   c                 C   sH   t ||gƒdt ||gƒ  }ttt|ƒƒ||ƒ ttt|ƒƒ||ƒ d S )NrG   )r+   r   r   r
   )rP   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õ   )rd   re   r   rO   r'   r'   r(   rf   Ø  s    ÿÿzTestIfftn.test_invalid_sizes)rg   rh   ri   r2   r÷   rQ   rt   ru   rÉ   r    r�   Ú
complex128rp   ro   rY   r‰   rf   r'   r'   r'   r(   rö   ¹  s   ÿÿ
rö   c                   @   s   e Zd Zdd„ ZdS )Ú	FakeArrayc                 C   s   || _ |j| _d S r*   )Ú_dataZ__array_interface__r–   r'   r'   r(   r—   å  s    zFakeArray.__init__N)rg   rh   ri   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 r*   ©rý   r–   r'   r'   r(   r—   ë  s    zFakeArray2.__init__c                 C   s   | j S r*   rÿ   rO   r'   r'   r(   Ú	__array__î  s    zFakeArray2.__array__N)rg   rh   ri   r—   r   r'   r'   r'   r(   rþ   ê  s   rþ   c                   @   s2  e Zd ZdZejejfZeejej	f 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 r*   r'   )r!   r'   r'   r(   Ú<lambda>û  ó    z&TestOverwrite._check.<locals>.<lambda>©Úoverwrite_xz%%s(%s%r, %r, axis=%r, overwrite_x=%r)zspurious overwrite in %s)r&   )Úcopyrü   rþ   rg   r2   r>   r   )	rP   r!   ÚroutineÚfftsizer=   r  r_   ZfakeÚsigr'   r'   r(   Ú_checkù  s         ÿzTestOverwrite._checkc           	      C   sf   t j d¡ t  |t j¡r8t jj|Ž dt jj|Ž   }nt jj|Ž }| |¡}| j|||||d� d S )NrL   rG   r  )r    r+   rN   Ú
issubdtypeÚcomplexfloatingÚrandnry   r
  )	rP   r  r2   r>   r=   Úoverwritable_dtypesr  r  r.   r'   r'   r(   Ú	_check_1d  s    
ÿzTestOverwrite._check_1dr2   r  r  TFz
shape,axes)©r×   rá   )©r×   r   r   )©r   r×   rB   c              	   C   s<   t jt jf}|  t||||||¡ |  t||||||¡ d S r*   )r    rû   ro   r  r	   r   ©rP   r2   r  r  r>   r¶   Úoverwritabler'   r'   r(   Útest_fft_ifft  s     ÿ ÿzTestOverwrite.test_fft_ifftc              	   C   s6   | j }|  t||||||¡ |  t||||||¡ d S r*   )Úreal_dtypesr  r   r   r  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 krh|}ntt  ||¡ƒ}ˆ |ƒD ]8}	| j	|||	||d� |j
dkr€| j	|j||	||d� q€d S )NrL   rG   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   rB   )r5   )Zshprê   Úrest©Úfftshape_iterr'   r(   r  2  s
    "z2TestOverwrite._check_nd_one.<locals>.fftshape_iterr  rB   )r    r+   rN   r  r  r  ry   ÚtupleZtaker
  ÚndimÚT)
rP   r  r2   r>   r¶   r  r  r.   Z
part_shapeZfftshaper'   r  r(   Ú_check_nd_one)  s"    
ÿ
ÿzTestOverwrite._check_nd_one)r  N)r  ré   )r  ré   )r  ©rB   )©r±   r×   N)r   ©r   rB   )©r±   r×   r   r!  )r"  rå   )r"  ré   )r"  r  )r"  )r   )r"  N)r"  rã   c                 C   s8   t jt jf}|  t|||||¡ |  t|||||¡ d S r*   )r    rû   ro   r  r
   r   )rP   r2   r  r>   r¶   r  r'   r'   r(   Útest_fftn_ifftnF  s    ÿÿzTestOverwrite.test_fftn_ifftnN)rg   rh   ri   Ú__doc__r    rp   r�   r  ro   rû   ZdtypesZfftsizesr
  r  rt   ru   rÉ   r  r  r  r#  r'   r'   r'   r(   r  ò  sP   


þ
þ
ôr  Úfuncc                 C   s¢   t j dd¡}| |dd�}| |t  ddg¡d�}t||ƒ | |dd�}| |t  dg¡d�}t||ƒ | |dd	d
�}| |t  ddg¡t  ddg¡d
�}t||ƒ d S )NrÒ   )rV   rV   rí   rV   rç   râ   rá   )r[   r¾   )rB   r   rµ   r[   r¾   rB   r   )r    r+   r   r   r   )r%  ÚaÚexpectÚactualr'   r'   r(   Útest_shape_axes_ndarray]  s    

"r)  )EZnumpy.testingr   r   r   r   r   rt   r   rd   Zscipy.fftpackr   r	   r
   r   r   r   r   r¸   r   r   r   r   r   r   r   r   r   r   r   r    Z	numpy.fftZnumpy.randomr   rŽ   rÊ   r�   rË   r)   r+   r/   r:   r;   r@   rA   rF   rI   rJ   rj   rm   rv   r{   r’   r“   r”   r¥   r¦   r§   r«   r­   r®   r¼   rÌ   rö   rü   rþ   r  ru   rÉ   r)  r'   r'   r'   r(   Ú<module>   sf   $4ýýÿÿ

&
H,:= Y+k