a
    ‡ù»jÌy  ã                   @   sD  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 d dlZd dlZd dlmZ g d¢Z g d¢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+G dd„ dƒZ,G dd„ de,ƒZ-G dd „ d e,ƒZ.G d!d"„ d"ƒZ/G d#d$„ d$ƒZ0G d%d&„ d&e0ƒZ1G d'd(„ d(e0ƒZ2G d)d*„ d*ƒZ3G d+d,„ d,e3ƒZ4G d-d.„ d.e3ƒZ5G d/d0„ d0ƒZ6G d1d2„ d2e6ƒZ7G d3d4„ d4e6ƒZ8G d5d6„ d6ƒZ9G d7d8„ d8ƒZ:G d9d:„ d:ƒZ;G d;d<„ d<ƒZ<G d=d>„ d>ƒZ=G d?d@„ d@ƒZ>G dAdB„ dBƒZ?ej@ AdCeeeg¡dDdE„ ƒZBdS )Fé    )Úassert_Úassert_equalÚassert_array_almost_equalÚassert_array_almost_equal_nulpÚassert_array_lessN)Úraises)ÚifftÚfftÚfftnÚifftnÚrfftÚirfftÚfft2)
ÚarangeÚarrayÚasarrayÚzerosÚdotÚexpÚpiÚswapaxesÚdoubleÚcdouble©Úrand)i    i`  i  )é   é   é$   iÛ  é   c                 C   s8   d|› d|› �}t tj | | ¡|tj | ¡ |ƒ d S )Nzsize: z  rdt: )r   ÚnpZlinalgZnorm)ÚxÚyÚrtolÚsizeÚrdtÚerr_msg© r&   úDE:\soccer\ml_env\Lib\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   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    Únr!   ÚwÚir&   r&   r'   Ú
direct_dft-   s    r6   c                 C   s\   t | ƒ} t| ƒ}t|td�}t|ƒdt |  }t|ƒD ]}tt|| ƒ| ƒ| ||< q8|S r+   r/   r2   r&   r&   r'   Údirect_idft7   s    r7   c                 C   s,   t | ƒ} tt| jƒƒD ]}t| |d�} q| S ©N)Úaxis)r   r1   r0   Úshaper	   ©r    r9   r&   r&   r'   Údirect_dftnA   s    r<   c                 C   s,   t | ƒ} tt| jƒƒD ]}t| |d�} q| S r8   )r   r1   r0   r:   r   r;   r&   r&   r'   Údirect_idftnH   s    r=   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 )Nr.   r,   r   é   r   )r   r0   r   r   r   r   r1   r   r   ÚrealÚimag)r    r3   r4   Úrr5   r!   r&   r&   r'   Údirect_rdftO   s    rB   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 )Nr,   r   r>   ù              ð?r   )r   r0   r   r   r1   r7   r?   )r    r3   Úx1r5   r&   r&   r'   Údirect_irdft_   s    $*rE   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_methodp   s    z_TestFFTBase.setup_methodc                 C   sf   t jg d¢| jd�}t|ƒ}t|j| jƒ t|ƒ}t||ƒ t jg d¢| jd�}tt|ƒt|ƒƒ d S )N©r>   r   é   ù      @      ð?r>   r   rO   y      @       @r,   ©r>   r   rO   y      @        é   )r   r   rI   r	   r   r-   r6   r   ©rL   r    r!   Úy1r&   r&   r'   Útest_definitionu   s    
z_TestFFTBase.test_definitionc                 C   sz   t jg d¢| jd�}t jg d¢| jd�}t||gdd�}t|j| jƒ t|jdƒ t|d t	|ƒƒ t|d t	|ƒƒ d S ©N©r>   r   rO   é   r,   rX   ©r3   ©r   rX   r   r>   )
r   r   r$   r	   r   r-   rI   r:   r   r6   ©rL   rD   Úx2r!   r&   r&   r'   Útest_n_argument_real~   s    z!_TestFFTBase.test_n_argument_realc                 C   sz   t jg d¢| jd�}t jg d¢| jd�}t||gdd�}t|j| jƒ t|jdƒ t|d t|ƒƒ t|d t|ƒƒ d S )N)r>   r   rO   rP   r,   rX   rY   rZ   r   r>   )	r   r   rI   r	   r   r-   r:   r   r6   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 ©Nr>   r   éûÿÿÿ)Úassert_raisesÚ
ValueErrorr	   rK   r&   r&   r'   Útest_invalid_sizes�   s    z_TestFFTBase.test_invalid_sizesN)Ú__name__Ú
__module__Ú__qualname__rM   rU   r]   r^   rc   r&   r&   r&   r'   rF   o   s
   			rF   c                   @   s   e Zd Zdd„ ZdS )ÚTestDoubleFFTc                 C   s   t j| _t j| _d S r)   ©r   Ú
complex128rI   Úfloat64r$   rK   r&   r&   r'   rM   –   s    zTestDoubleFFT.setup_methodN©rd   re   rf   rM   r&   r&   r&   r'   rg   •   s   rg   c                   @   s0   e Zd Zdd„ ZdZejjded�dd„ ƒZdS )	ÚTestSingleFFTc                 C   s   t j| _t j| _d S r)   ©r   Ú	complex64rI   Úfloat32r$   rK   r&   r&   r'   rM   œ   s    zTestSingleFFT.setup_methodzusingle-precision FFT implementation is partially disabled, until accuracy issues with large prime powers are resolvedF)ÚrunÚreasonc                 C   s   d S r)   r&   rK   r&   r&   r'   Útest_notice£   s    zTestSingleFFT.test_noticeN)	rd   re   rf   rM   rq   ÚpytestÚmarkZxfailrr   r&   r&   r&   r'   rl   ›   s   rl   c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestFloat16FFTc                 C   sT   t jg d¢t jd�}t|dd�}t|jt jƒ t|jdƒ t|t	| 
t j¡ƒƒ d S )NrW   r,   rX   rY   )rX   ©r   r   Úfloat16r	   r   r-   rn   r:   r   r6   Úastypero   )rL   rD   r!   r&   r&   r'   Útest_1_argument_realª   s
    z#TestFloat16FFT.test_1_argument_realc                 C   sŠ   t jg d¢t jd�}t jg d¢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 rV   rv   r[   r&   r&   r'   r]   ±   s    z#TestFloat16FFT.test_n_argument_realN)rd   re   rf   ry   r]   r&   r&   r&   r'   ru   ¨   s   ru   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 rG   ©r   r*   rJ   rK   r&   r&   r'   rM   ¼   s    z_TestIFFTBase.setup_methodc                 C   sb   t  g d¢| j¡}t|ƒ}t|ƒ}t|j| jƒ t||ƒ t  g d¢| j¡}tt|ƒt|ƒƒ d S )NrN   rQ   )r   r   rI   r   r7   r   r-   r   rS   r&   r&   r'   rU   ¿   s    
z_TestIFFTBase.test_definitionc                 C   sr   t  g d¢| j¡}t|ƒ}t|j| jƒ t|ƒ}t||ƒ t jg d¢| jd�}t|j| jƒ tt|ƒt|ƒƒ d S )N©r>   r   rO   rX   r>   r   rO   rX   ©r>   r   rO   rX   rR   r,   )	r   r   r$   r   r   r-   rI   r7   r   rS   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©	r>   é3   éo   éd   éÈ   é@   é€   é   i   rC   )r*   rx   rI   r   r	   r   r-   r   ©rL   r#   r    rT   Ú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*   rx   r$   r   r	   r   r-   rI   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ãˆµøä>ç»½×Ùß|Û=rH   rC   )r$   r   ro   rj   ÚLARGE_COMPOSITE_SIZESÚLARGE_PRIME_SIZESr*   rJ   r   rx   r   r	   r(   rI   ©rL   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 r_   )ra   rb   r   rK   r&   r&   r'   rc   þ   s    z _TestIFFTBase.test_invalid_sizesN)
rd   re   rf   rM   rU   r~   r‰   rŠ   r�   rc   r&   r&   r&   r'   rz   »   s   

rz   c                   @   s   e Zd Zdd„ ZdS )ÚTestDoubleIFFTc                 C   s   t j| _t j| _d S r)   rh   rK   r&   r&   r'   rM     s    zTestDoubleIFFT.setup_methodNrk   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)   rm   rK   r&   r&   r'   rM   
  s    zTestSingleIFFT.setup_methodNrk   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 rG   r{   rK   r&   r&   r'   rM     s    z_TestRFFTBase.setup_methodc                 C   sR   g d¢g d¢fD ]<}t j|| jd�}t|ƒ}t|ƒ}t||ƒ t|j| jƒ qd S )Nr|   ©	r>   r   rO   rX   r>   r   rO   rX   rR   r,   )r   r   r$   r   rB   r   r   r-   )rL   Útr    r!   rT   r&   r&   r'   rU     s    
z_TestRFFTBase.test_definitionc                 C   s*   t ttg ƒ t ttddgddggdƒ d S r_   )ra   rb   r   rK   r&   r&   r'   rc     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   Údata©rL   r–   r&   r&   r'   Ú__init__!  s    z!_TestRFFTBase.MockSeries.__init__c              
   C   sJ   zt | j|ƒW S  tyD } ztd|› d�ƒ|‚W Y d }~n
d }~0 0 d S )Nz&'MockSeries' object has no attribute 'ú')Úgetattrr–   ÚAttributeError)rL   ÚitemÚer&   r&   r'   Ú__getattr__$  s    ÿÿz$_TestRFFTBase.MockSeries.__getattr__N)rd   re   rf   r˜   rž   r&   r&   r&   r'   Ú
MockSeries   s   rŸ   c                 C   sB   t  g d¢¡}t |¡}g d¢}t|ƒ t||ƒ t|j|ƒ d S )N)g      ð?g       @g      @g      @g      @r}   )r   r   r“   rŸ   r   r   r–   )rL   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 ©NrX   r,   )ra   Ú	TypeErrorr   r   r   rn   rK   r&   r&   r'   Útest_complex_input6  s    z _TestRFFTBase.test_complex_inputN)	rd   re   rf   rM   rU   rc   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)   rh   rK   r&   r&   r'   rM   ;  s    zTestRFFTDouble.setup_methodNrk   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)   rm   rK   r&   r&   r'   rM   A  s    zTestRFFTSingle.setup_methodNrk   r&   r&   r&   r'   r¦   @  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 rG   r{   rK   r&   r&   r'   rM   G  s    z_TestIRFFTBase.setup_methodc                    sD   g d¢}g d¢}g d¢}g d¢}‡ fdd„}|||ƒ |||ƒ d S )Nr|   )r>   ù       @      @rP   r¨   rX   ù       @      Àù      @      ð¿r©   r”   )	r>   r¨   rP   r¨   y      @      @y      @      Àr©   rª   r©   c                    sR   t tj| ˆ jd�ƒ}t| ƒ}t|jˆ jƒ t||ˆ jd� t|t	|ƒˆ jd� d S )Nr,   )Údecimal)
r   r   r   r$   rE   r   r-   r   Úndecr   )r    Zxrr!   rT   rK   r&   r'   Ú_testP  s
    z-_TestIRFFTBase.test_definition.<locals>._testr&   )rL   rD   Zx1_1r\   Zx2_1r­   r&   rK   r'   rU   J  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*   rx   r$   r   r   r   r-   r   r¬   r‡   r&   r&   r'   rŠ   Z  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Œ   rH   )r$   r   ro   rj   r�   rŽ   r*   rJ   r   rx   r   r   r(   r�   r&   r&   r'   r�   f  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 r_   )ra   rb   r   rK   r&   r&   r'   rc   u  s    z!_TestIRFFTBase.test_invalid_sizesc                 C   s   t tttjdtjd�ƒ d S r¢   )ra   r£   r   r   r   rn   rK   r&   r&   r'   r¤   y  s    z!_TestIRFFTBase.test_complex_inputN)	rd   re   rf   rM   rU   rŠ   r�   rc   r¤   r&   r&   r&   r'   r§   F  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   ri   rI   rj   r$   r¬   rK   r&   r&   r'   rM   �  s    zTestIRFFTDouble.setup_methodNrk   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 )NrR   )r   rn   rI   ro   r$   r¬   rK   r&   r&   r'   rM   ˆ  s    zTestIRFFTSingle.setup_methodNrk   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 rG   r{   rK   r&   r&   r'   rM   �  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.©rX   rX   r   ©é   r´   ©éýÿÿÿéþÿÿÿ©r:   Úaxes)Úsr¹   N)ÚnumpyZonesr   r	   r
   r   ©rL   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 )Nr>   r   ©rX   r¶   )ra   rb   r   rK   r&   r&   r'   rc   ›  s    zTestfft2.test_invalid_sizesN)rd   re   rf   rM   r½   rc   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 rG   r{   rK   r&   r&   r'   rM   ¡  s    zTestFftnSingle.setup_methodc                 C   s\   g d¢g d¢g d¢g}t t |tj¡ƒ}t|jtjkdd� t t |ƒtj¡}t||ƒ d S )N©r>   r   rO   ©rX   rR   é   ©é   r´   é	   z-double precision output with single precision)Úmsg)r
   r   r   ro   r   r-   rn   r   r¼   r&   r&   r'   rU   ¤  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 )NrC   éÐ  ©r   r*   r   r
   r?   rx   ro   rj   rn   r   r-   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 )NrO   rC   rÇ   rÈ   r‡   r&   r&   r'   Útest_size_accuracy_large¸  s
     z'TestFftnSingle.test_size_accuracy_largec                 C   sV   g d¢g d¢g d¢g}t t |tj¡ƒ}t|jtjƒ t t |ƒtj¡}t||ƒ d S )NrÀ   rÁ   rÃ   )r
   r   r   rw   r   r-   rn   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 )NrC   g    €„A©r   r*   r   r
   r?   rx   rw   rj   rn   r   r-   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 )NrO   rC   g    €„>ArÌ   r‡   r&   r&   r'   Útest_float16_input_largeÓ  s
     z'TestFftnSingle.test_float16_input_largeN)rd   re   rf   rM   rU   rs   rt   Ú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 rG   r{   rK   r&   r&   r'   rM   Þ  s    zTestFftn.setup_methodc                 C   sd   g d¢g d¢g d¢g}t |ƒ}t|t|ƒƒ tdƒ}tt |ƒt|ƒƒ tdƒ}tt |ƒt|ƒƒ d S )NrÀ   rÁ   rÃ   ©é   é   ©rR   rX   rO   rÔ   )r
   r   r<   r*   ©rL   r    r!   r&   r&   r'   rU   á  s    þzTestFftn.test_definitionc              	   C   s  g d¢g d¢g d¢g}g d¢g d¢g d¢g}g d¢g d¢g d	¢g}g d¢g d¢g d¢g}g d¢g d¢g d¢g}g d¢g d¢g d	¢g}g d
¢g d¢g d¢g}g d¢g d¢g d¢g}g d¢g d¢g d¢g}	g d¢g d¢g d¢g}
g d¢g d¢g d¢g}g d¢g d¢g d¢g}g d¢g d¢g d¢g}g d¢g d¢g d¢g}g d¢g d¢g d¢g}g d
¢g d¢g d¢g}g d¢g d¢g d¢g}g d¢g d¢g d¢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|d0d�}tt|ƒt|d* d%d"ƒƒ tt|ƒt|d+ d%d"ƒƒ tt|ƒt|d, d%d"ƒƒ t|d1d�}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|d2d�}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|d3d�}td4ƒD ]@}td4ƒD ]0}tt|||d d …f ƒ|||d d …f ƒ �q�q
t|d5d�}td4ƒD ]@}td4ƒD ]0}tt||d d …|f ƒ||d d …|f ƒ �ql�q`t|d6d�}td4ƒD ]@}td4ƒD ]0}tt|d d …||f ƒ|d d …||f ƒ �qÂ�q¶t|d7d�}t||ƒ d S )8NrÀ   rÁ   rÃ   )é
   é   é   )é   r¯   é   )é   é   é   )é   rÔ   é   )é   é   é   )é   rÕ   é   )r>   rØ   rà   )rX   rÛ   râ   )rÄ   rÝ   rå   )r   rÙ   rÔ   )rR   r¯   rã   )r´   rÞ   rÕ   )rO   rÚ   rá   )rÂ   rÜ   rä   )rÅ   rß   ræ   )r>   rX   rÄ   )rØ   rÛ   rÝ   )rà   râ   rå   )r   rR   r´   )rÙ   r¯   rÞ   )rÔ   rã   rÕ   )rO   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¶   )r·   r¶   ©rç   rO   ©r·   ©r   r&   )r   r   r
   r   r1   r	   )rL   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!   r5   Újr&   r&   r'   Útest_axes_argumentî  s(   þþþþþþþþþÿÿÿþþþþþþ





ÿÿÿ222222ÿÿÿÿÿÿ222zTestFftn.test_axes_argumentc                 C   sl   g d¢g d¢g}g d¢g d¢g d¢g d¢g}t |dd�}t|t |ƒƒ t |dd�}t|t |d d	… ƒƒ d S )
NrÀ   rÁ   ©r>   r   rO   r   ©rX   rR   rÂ   r   ©r   r   r   r   ©rX   rX   ©r:   )rO   rX   rç   )r
   r   ©rL   Zsmall_xZlarge_x1r!   r&   r&   r'   Útest_shape_argumentt  s    ÿýzTestFftn.test_shape_argumentc                 C   s‚   g d¢g d¢g d¢g}t g d¢g d¢g d¢g d¢gƒ}t|dd	d
�}t|t|ƒƒ t|ddd
�}t|ttt|ddƒƒddƒƒ d S )NrÀ   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_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Ø   rR   rO   rÄ   rí   )r´   )r¹   r:   rç   r´   )r9   r3   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   sD   t dƒ}ttdd�� t|dd� W d   ƒ n1 s60    Y  d S )Nr²   zBwhen given, axes and shape arguments have to be of the same length©Úmatch)r´   r´   r   r>   rö   )r   ra   rb   r
   )rL   r    r&   r&   r'   Útest_shape_argument_more¢  s
    ÿz!TestFftn.test_shape_argument_morec                 C   s|   t tdd�� tg gƒ W d   ƒ n1 s,0    Y  t tdd��& tddgddggdƒ W d   ƒ n1 sn0    Y  d S ©Nz4invalid number of data points \(\[1, 0\]\) specifiedrû   z5invalid number of data points \(\[4, -3\]\) specifiedr>   r   r¾   )ra   rb   r
   rK   r&   r&   r'   rc   ©  s    ÿ(ÿzTestFftn.test_invalid_sizesN)rd   re   rf   rM   rU   rñ   rø   rù   rú   rý   rc   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
g d¢¡dd„ ƒƒZdd„ ZdS )Ú	TestIfftnNc                 C   s   t j d¡ d S rG   r{   rK   r&   r&   r'   rM   ¹  s    zTestIfftn.setup_methodzdtype,cdtype,maxnlprÇ   i¬  c                 C   s€   t jg d¢g d¢g d¢g|d�}t|ƒ}t|j|ƒ t|t|ƒ|ƒ tdƒ}tt|ƒt|ƒ|ƒ tdƒ}tt|ƒt|ƒ|ƒ d S )NrÀ   rÁ   rÃ   r,   rÓ   rÖ   )r   r   r   r   r-   r   r=   r*   )rL   r-   ÚcdtypeÚmaxnlpr    r!   r&   r&   r'   rU   ¼  s    
þþzTestIfftn.test_definitionr  r#   )r>   r   r€   é    r„   é\   c                 C   sH   t ||gƒdt ||gƒ  }ttt|ƒƒ||ƒ ttt|ƒƒ||ƒ d S )NrC   )r*   r   r   r
   )rL   r  r#   r    r&   r&   r'   r‰   Í  s    zTestIfftn.test_random_complexc                 C   s|   t tdd�� tg gƒ W d   ƒ n1 s,0    Y  t tdd��& tddgddggdƒ W d   ƒ n1 sn0    Y  d S rþ   )ra   rb   r   rK   r&   r&   r'   rc   Ô  s    ÿ(ÿzTestIfftn.test_invalid_sizes)rd   re   rf   r-   r   rM   rs   rt   rÏ   r   rj   ri   ro   rn   rU   r‰   rc   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)rd   re   rf   r˜   r&   r&   r&   r'   r  à  s   r  c                   @   s   e Zd Zdd„ Zddd„ZdS )Ú
FakeArray2c                 C   s
   || _ d S r)   ©r  r—   r&   r&   r'   r˜   ç  s    zFakeArray2.__init__Nc                 C   s   | j S r)   r  )rL   r-   Úcopyr&   r&   r'   Ú	__array__ê  s    zFakeArray2.__array__)NN)rd   re   rf   r˜   r	  r&   r&   r&   r'   r  æ  s   r  c                   @   s  e Zd ZdZejejfZeejej	f Z
g d¢Zdd„ Zdd„ Zej de
¡ej de¡ej d	d
dg¡ej dg d¢¡dd„ ƒƒƒƒZej de¡ej de¡ej d	d
dg¡ej dg d¢¡dd„ ƒƒƒƒZdd„ Zej de
¡ej d	d
dg¡ej dg d¢¡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|||¡}|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-{}({}{!r}, {!r}, axis={!r}, overwrite_x={!r})zspurious overwrite in %s)r%   )r  r  r  Úformatrd   r-   r:   r   )	rL   r    ÚroutineÚfftsizer9   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 )NrH   rC   r  )r   r*   rJ   Ú
issubdtypeÚcomplexfloatingÚrandnrx   r  )	rL   r  r-   r:   r9   Úoverwritable_dtypesr  r  r–   r&   r&   r'   Ú	_check_1dÿ  s    
ÿzTestOverwrite._check_1dr-   r  r  TFz
shape,axes))©rÝ   rç   )©rÝ   r   r   )©r   rÝ   r>   c              	   C   s<   t jt jf}|  t||||||¡ |  t||||||¡ d S r)   )r   ri   rn   r  r	   r   ©rL   r-   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 u rh|}ntt  ||¡ƒ}ˆ |ƒD ]8}	| j	|||	||d� |j
dkr€| j	|j||	||d� q€d S )NrH   rC   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   r>   )r0   )Zshprð   Úrest©Úfftshape_iterr&   r'   r#  .  s
    "z2TestOverwrite._check_nd_one.<locals>.fftshape_iterr  r>   )r   r*   rJ   r  r  r  rx   ÚtupleZtaker  ÚndimÚT)
rL   r  r-   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  ©r>   )©r´   rÝ   N)r)  ©r   r>   )©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   ri   rn   r'  r
   r   )rL   r-   r  r:   r¹   r  r&   r&   r'   Útest_fftn_ifftnB  s    ÿÿzTestOverwrite.test_fftn_ifftnN)rd   re   rf   Ú__doc__r   ro   rj   r  rn   ri   ZdtypesZfftsizesr  r  rs   rt   rÏ   r  r   r'  r,  r&   r&   r&   r'   r
  î  s*   
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Ø   )rR   rR   rö   rR   rí   rè   rç   )rX   rÄ   )r>   r   r¸   rX   rÄ   r>   r   )r   r*   r   r   r   )r.  ÚaÚexpectÚactualr&   r&   r'   Útest_shape_axes_ndarrayY  s    

"r2  )CZnumpy.testingr   r   r   r   r   rs   r   ra   Zscipy.fftpackr   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*   r6   r7   r<   r=   rB   rE   rF   rg   rl   ru   rz   r‘   r’   r“   r¥   r¦   r§   r®   r°   r±   r¿   rÒ   rÿ   r  r  r
  rt   rÏ   r2  r&   r&   r&   r'   Ú<module>   sX   $0ÿÿ

&H+:= Y+k