o
    Ebv                     @   sP  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  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,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+d, d,Z5G d-d. d.e5Z6G d/d0 d0e5Z7G d1d2 d2Z8G d3d4 d4e8Z9G d5d6 d6e8Z:G 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@G dCdD dDZAejBCdEeeegdFdG ZDdS )H    )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rand)i    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'   @/usr/lib/python3/dist-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   Z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   r9   c                 C   s\   t | } t| }t|td}t|dt |  }t|D ]}tt|| | | ||< q|S r/   r3   r6   r'   r'   r(   direct_idft=   s   r:   c                 C   ,   t | } tt| jD ]}t| |d} q| S N)axis)r   r5   r4   shaper	   r!   r=   r'   r'   r(   direct_dftnG      r@   c                 C   r;   r<   )r   r5   r4   r>   r   r?   r'   r'   r(   direct_idftnN   rA   rB   c                 C   s   t | } t| }t| dt |  }t|td}t|d d D ])}tt|| | }|rE|j	|d| d < d| |k rD|j
|d| < q!|j	|d< q!|S )Nr2   r0   r      r   )r   r4   r   r   r   r   r5   r   r   realimag)r!   r,   r7   rr8   r"   r'   r'   r(   direct_rdftU   s   rG   c                 C   s   t | } t| }t|td}t|d d D ]B}|rRd| |k rG| d| d  d| d|    ||< | d| d  d| d|    ||| < q| d| d  ||< q| d |d< qt|jS )Nr0   r   rC                 ?r   )r   r4   r   r   r5   r:   rD   )r!   r,   x1r8   r'   r'   r(   direct_irdfte   s   $*
rJ   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   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rC   r            @      ?rC   r   rT   y      @       @r0   rC   r   rT   y      @           )r    r   rN   r	   r   r1   r9   r   rQ   r!   r"   y1r'   r'   r(   test_definition{   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rC   r   rT      r0   r]   r,   r   r]   r   rC   )
r    r   r%   r	   r   r1   rN   r>   r   r9   rQ   rI   x2r"   r'   r'   r(   test_n_argument_real      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)rC   r   rT   rU   r0   r]   r^   r_   r   rC   )	r    r   rN   r	   r   r1   r>   r   r9   r`   r'   r'   r(   _test_n_argument_complex   rc   z%_TestFFTBase._test_n_argument_complexc                 C   *   t ttg  t ttddgddggd d S NrC   r   )assert_raises
ValueErrorr	   rP   r'   r'   r(   test_invalid_sizes      z_TestFFTBase.test_invalid_sizesN)__name__
__module____qualname__rR   rZ   rb   rd   rj   r'   r'   r'   r(   rK   u   s    			rK   c                   @      e Zd Zdd ZdS )TestDoubleFFTc                 C      t j| _t j| _d S r*   r    r   rN   r   r%   rP   r'   r'   r(   rR         zTestDoubleFFT.setup_methodNrl   rm   rn   rR   r'   r'   r'   r(   rp          rp   c                   @   s,   e Zd Zdd Zejjddddd ZdS )	TestSingleFFTc                 C   rq   r*   r    	complex64rN   float32r%   rP   r'   r'   r(   rR      rs   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'   rP   r'   r'   r(   test_notice   s   zTestSingleFFT.test_noticeN)rl   rm   rn   rR   pytestmarkZxfailr|   r'   r'   r'   r(   rv      s    rv   c                   @      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 )Nr\   r0   r]   r^   )r]   r    r   float16r	   r   r1   rx   r>   r   r9   astypery   )rQ   rI   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 r[   r   r`   r'   r'   r(   rb      s   z#TestFloat16FFT.test_n_argument_realN)rl   rm   rn   r   rb   r'   r'   r'   r(   r      s    r   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      t jd d S rL   r    r+   rO   rP   r'   r'   r(   rR         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 )NrS   rV   )r    r   rN   r   r:   r   r1   r   rX   r'   r'   r(   rZ      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rC   r   rT   r]   rC   r   rT   r]   rC   r   rT   r]   rW   r0   )	r    r   r%   r   r   r1   rN   r:   r   rX   r'   r'   r(   test_definition_real   s   
z"_TestIFFTBase.test_definition_realc                 C   s   dD ]<}t |g| j}t |g| jd|  }tt|}tt|}t|j| j t|j| j t|| t|| qd S )N	rC   3   o   d      @         i   rH   )r+   r   rN   r   r	   r   r1   r   rQ   r$   r!   rY   Z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+   r   r%   r   r	   r   r1   rN   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㈵>绽|=rM   rH   )r%   r    ry   float64LARGE_COMPOSITE_SIZESLARGE_PRIME_SIZESr+   rO   r   r   r   r	   r)   rN   rQ   r#   r$   r!   r"   r'   r'   r(   test_size_accuracy   s"   z _TestIFFTBase.test_size_accuracyc                 C   re   rf   )rh   ri   r   rP   r'   r'   r(   rj     rk   z _TestIFFTBase.test_invalid_sizesN)
rl   rm   rn   rR   rZ   r   r   r   r   rj   r'   r'   r'   r(   r      s    

r   c                   @   ro   )TestDoubleIFFTc                 C   rq   r*   rr   rP   r'   r'   r(   rR     rs   zTestDoubleIFFT.setup_methodNrt   r'   r'   r'   r(   r     ru   r   c                   @   ro   )TestSingleIFFTc                 C   rq   r*   rw   rP   r'   r'   r(   rR     rs   zTestSingleIFFT.setup_methodNrt   r'   r'   r'   r(   r     ru   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   r   rL   r   rP   r'   r'   r(   rR     r   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   	rC   r   rT   r]   rC   r   rT   r]   rW   r0   )r    r   r%   r   rG   r   r   r1   )rQ   tr!   r"   rY   r'   r'   r(   rZ     s   
z_TestRFFTBase.test_definitionc                 C   re   rf   )rh   ri   r   rP   r'   r'   r(   rj     rk   z _TestRFFTBase.test_invalid_sizesc                   @   r   )z_TestRFFTBase.MockSeriesc                 C   s   t || _d S r*   )r    r   r-   rQ   r-   r'   r'   r(   __init__$  r   z!_TestRFFTBase.MockSeries.__init__c              
   C   s:   zt | j|W S  ty } z	tdj|d|d }~ww )Nz-'MockSeries' object has no attribute '{attr}')attr)getattrr-   AttributeErrorformat)rQ   itemer'   r'   r(   __getattr__'  s   z$_TestRFFTBase.MockSeries.__getattr__N)rl   rm   rn   r   r   r'   r'   r'   r(   
MockSeries#      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-   )rQ   r!   ZxsZexpectedr'   r'   r(   test_non_ndarray_with_dtype/  s   

z)_TestRFFTBase.test_non_ndarray_with_dtypec                 C      t tttjdtjd d S Nr]   r0   )rh   	TypeErrorr   r    r   rx   rP   r'   r'   r(   test_complex_input:     z _TestRFFTBase.test_complex_inputN)	rl   rm   rn   rR   rZ   rj   r   r   r   r'   r'   r'   r(   r     s    r   c                   @   ro   )TestRFFTDoublec                 C   rq   r*   rr   rP   r'   r'   r(   rR   ?  rs   zTestRFFTDouble.setup_methodNrt   r'   r'   r'   r(   r   >  ru   r   c                   @   ro   )TestRFFTSinglec                 C   rq   r*   rw   rP   r'   r'   r(   rR   E  rs   zTestRFFTSingle.setup_methodNrt   r'   r'   r'   r(   r   D  ru   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   r   rL   r   rP   r'   r'   r(   rR   K  r   z_TestIRFFTBase.setup_methodc                    sD   g d}g d}g d}g d} fdd}||| ||| d S )Nr   )rC          @      @rU   r   r]          @            @      r   r   )	rC   r   rU   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 )Nr0   )decimal)
r   r    r   r%   rJ   r   r1   r   ndecr   )r!   Zxrr"   rY   rP   r'   r(   _testT  s
   z-_TestIRFFTBase.test_definition.<locals>._testr'   )rQ   rI   Zx1_1ra   Zx2_1r   r'   rP   r(   rZ   N  s   
z_TestIRFFTBase.test_definitionc                 C   s   dD ];}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+   r   r%   r   r   r   r1   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 ]0}tjd tj|	| j }t
t|}t||||| j  tt
|}t||||| j  qd S )Nr   r   rM   )r%   r    ry   r   r   r   r+   rO   r   r   r   r   r)   r   r'   r'   r(   r   j  s   z!_TestIRFFTBase.test_size_accuracyc                 C   re   rf   )rh   ri   r   rP   r'   r'   r(   rj   y  rk   z!_TestIRFFTBase.test_invalid_sizesc                 C   r   r   )rh   r   r   r    r   rx   rP   r'   r'   r(   r   }  r   z!_TestIRFFTBase.test_complex_inputN)	rl   rm   rn   rR   rZ   r   r   rj   r   r'   r'   r'   r(   r   J  s    r   c                   @   ro   )TestIRFFTDoublec                 C      t j| _t j| _d| _d S )N   )r    r   rN   r   r%   r   rP   r'   r'   r(   rR        
zTestIRFFTDouble.setup_methodNrt   r'   r'   r'   r(   r     ru   r   c                   @   ro   )TestIRFFTSinglec                 C   r   )NrW   )r    rx   rN   ry   r%   r   rP   r'   r'   r(   rR     r   zTestIRFFTSingle.setup_methodNrt   r'   r'   r'   r(   r     ru   r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )Testfft2c                 C   r   rL   r   rP   r'   r'   r(   rR     r   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   rQ   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 )NrC   r   r]   r   )rh   ri   r   rP   r'   r'   r(   rj     s   zTestfft2.test_invalid_sizesN)rl   rm   rn   rR   r   rj   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   r   rL   r   rP   r'   r'   r(   rR     r   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rC   r   rT   r]   rW         r   	   z-double precision output with single precision)msg)r
   r    r   ry   r   r1   rx   r   r   r'   r'   r(   rZ     s   zTestFftnSingle.test_definitionr$   c                 C   j   t j||dt j||  }t|jt j}t|jt jt j}t	|j
t j t||d d S )NrH     r    r+   r   r
   rD   r   ry   r   rx   r   r1   r   r   r'   r'   r(   test_size_accuracy_small  
    z'TestFftnSingle.test_size_accuracy_smallc                 C   j   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 )NrT   rH   r   r   r   r'   r'   r(   test_size_accuracy_large  r   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   r   r   r1   rx   r   r   r'   r'   r(   test_definition_float16  s   z&TestFftnSingle.test_definition_float16c                 C   r   )NrH   g    Ar    r+   r   r
   rD   r   r   r   rx   r   r1   r   r   r'   r'   r(   test_float16_input_small  r   z'TestFftnSingle.test_float16_input_smallc                 C   r   )NrT   rH   g    >Ar   r   r'   r'   r(   test_float16_input_large  r   z'TestFftnSingle.test_float16_input_largeN)rl   rm   rn   rR   rZ   r}   r~   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   r   rL   r   rP   r'   r'   r(   rR     r   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         rW   r]   rT   r   )r
   r   r@   r+   rQ   r!   r"   r'   r'   r(   rZ     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 ]}tt|||d d f |||d d f  qqt|d5d}td4D ] }td4D ]}tt||d d |f ||d d |f  q6q0t|d6d}td4D ] }td4D ]}tt|d d ||f |d d ||f  qaq[t|d7d}t|| d S )8Nr   r   r   )
         )   r      )         )   r      )         )   r      )rC   r   r   )r]   r   r   )r   r   r   )r   r   r   )rW   r   r   )r   r   r   )rT   r   r   )r   r   r   )r   r   r   )rC   r]   r   )r   r   r   )r   r   r   )r   rW   r   )r   r   r   )r   r   r   )rT   r   r   )r   r   r   )r   r   r   )r   r   r   r   rC   r   )r   r   )r   r   )r   rC   r   r   r   )r   r   rC   r   )rC   r   r   )rC   r   r   )r   r   rC   r   r   r   rC   r   rC   r   r   )r   r   r   r   )r   r   )r   r   r   rT   r   r   r'   )r   r   r
   r   r5   r	   )rQ   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"   r8   jr'   r'   r(   test_axes_argument  s.  





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   rC   r   rT   r   r]   rW   r   r   r   r   r   r   r]   r]   r>   )rT   r]   r   )r
   r   rQ   Zsmall_xZlarge_x1r"   r'   r'   r(   test_shape_argumentx  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   rW   rT   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   sF   t d}ttdd t|dd W d    d S 1 sw   Y  d S )Nr   zBwhen given, axes and shape arguments have to be of the same lengthmatch)r   r   r   rC   r
  )r   rh   ri   r
   )rQ   r!   r'   r'   r(   test_shape_argument_more  s   "z!TestFftn.test_shape_argument_morec                 C   ~   t tdd tg g W d    n1 sw   Y  t tdd tddgddggd W d    d S 1 s8w   Y  d S Nz4invalid number of data points \(\[1, 0\]\) specifiedr  z5invalid number of data points \(\[4, -3\]\) specifiedrC   r   r   )rh   ri   r
   rP   r'   r'   r(   rj        "zTestFftn.test_invalid_sizesN)rl   rm   rn   rR   rZ   r  r  r  r  r  rj   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   r   rL   r   rP   r'   r'   r(   rR     r   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   r0   r   r   )r    r   r   r   r1   r   rB   r+   )rQ   r1   cdtypemaxnlpr!   r"   r'   r'   r(   rZ     s   
zTestIfftn.test_definitionr  r$   )rC   r   r       r   \   c                 C   sH   t ||gdt ||g  }ttt||| ttt||| d S )NrH   )r+   r   r   r
   )rQ   r  r$   r!   r'   r'   r(   r     s   zTestIfftn.test_random_complexc                 C   r  r  )rh   ri   r   rP   r'   r'   r(   rj     r  zTestIfftn.test_invalid_sizes)rl   rm   rn   r1   r  rR   r}   r~   r   r    r   
complex128ry   rx   rZ   r   rj   r'   r'   r'   r(   r    s    
r  c                   @   ro   )	FakeArrayc                 C   s   || _ |j| _d S r*   )_dataZ__array_interface__r   r'   r'   r(   r     s   zFakeArray.__init__N)rl   rm   rn   r   r'   r'   r'   r(   r    ru   r  c                   @   r   )
FakeArray2c                 C   s
   || _ d S r*   r  r   r'   r'   r(   r     s   
zFakeArray2.__init__c                 C   s   | j S r*   r  rP   r'   r'   r(   	__array__  s   zFakeArray2.__array__N)rl   rm   rn   r   r  r'   r'   r'   r(   r    r   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 ]$}||||||d d|j|j|j|||f }|s/t||d| d qd S )Nc                 S   s   | S r*   r'   )r!   r'   r'   r(   <lambda>  s    z&TestOverwrite._check.<locals>.<lambda>overwrite_xz%%s(%s%r, %r, axis=%r, overwrite_x=%r)zspurious overwrite in %s)r&   )copyr  r  rl   r1   r>   r   )	rQ   r!   routinefftsizer=   r#  ra   ZfakeZsigr'   r'   r(   _check  s   zTestOverwrite._checkc           	      C   sf   t jd t |t jrt jj| dt jj|   }nt jj| }||}| j|||||d d S )NrM   rH   r"  )r    r+   rO   
issubdtypecomplexfloatingrandnr   r'  )	rQ   r%  r1   r>   r=   overwritable_dtypesr&  r#  r-   r'   r'   r(   	_check_1d  s   

zTestOverwrite._check_1dr1   r&  r#  TFz
shape,axes))r   r   )r   r   r   )r   r   rC   c              	   C   s<   t jt jf}| t|||||| | t|||||| d S r*   )r    r  rx   r,  r	   r   rQ   r1   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   r0  r'   r'   r(   test_rfft_irfft  s   zTestOverwrite.test_rfft_irfftc           
         s   t jd t |t jrt jj| dt jj|   }nt jj| }||} fdd |d u r4|}ntt ||} |D ]}	| j	|||	||d |j
dkr\| j	|j||	||d q@d S )NrM   rH   c                 3   sb    t | dkrdV  d S | d d | d | d d fD ]} | dd  D ]}|f| V  q%qd S )Nr   r'   r   rC   )r4   )Zshpr  restfftshape_iterr'   r(   r7  2  s   
"z2TestOverwrite._check_nd_one.<locals>.fftshape_iterr"  rC   )r    r+   rO   r(  r)  r*  r   tupleZtaker'  ndimT)
rQ   r%  r1   r>   r   r+  r#  r-   Z
part_shapeZfftshaper'   r6  r(   _check_nd_one)  s&   

zTestOverwrite._check_nd_one))r-  N)r-  r  )r.  r  )r/  rC   )r   r   N)r=  r   rC   )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  rx   r;  r
   r   )rQ   r1   r#  r>   r   r1  r'   r'   r(   test_fftn_ifftnF  s   zTestOverwrite.test_fftn_ifftnN)rl   rm   rn   __doc__r    ry   r   r3  rx   r  ZdtypesZfftsizesr'  r,  r}   r~   r   r2  r4  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   )rW   rW   r
  rW   r  r   r   )r]   r   )rC   r   r   r]   r   rC   r   )r    r+   r   r   r   )rB  aZexpectZactualr'   r'   r(   test_shape_axes_ndarray]  s   

"rD  )EZnumpy.testingr   r   r   r   r   r}   r   rh   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.   r9   r:   r@   rB   rG   rJ   rK   rp   rv   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r   r~   r   rD  r'   r'   r'   r(   <module>   s\   $4

&
H,:= Y+k