a
    BCCfcv                     @   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&   Z/var/www/html/django/DPS/env/lib/python3.9/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 ]}|rd| |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 )Nh㈵>绽|=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qt|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 qd 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