o
    `^hZw                     @   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   nplinalgnorm)xyrtolsizerdterr_msg r(   \/home/air/shanriGPT/back/venv/lib/python3.10/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   r8   c                 C   s\   t | } t| }t|td}t|dt |  }t|D ]}tt|| | | ||< q|S r-   r1   r4   r(   r(   r)   direct_idft7   s   r9   c                 C   ,   t | } tt| jD ]}t| |d} q| S N)axis)r   r3   r2   shaper	   r"   r<   r(   r(   r)   direct_dftnA      r?   c                 C   r:   r;   )r   r3   r2   r=   r   r>   r(   r(   r)   direct_idftnH   r@   rA   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 )Nr0   r.   r      r   )r   r2   r   r   r   r   r3   r   r   realimag)r"   r5   r6   rr7   r#   r(   r(   r)   direct_rdftO   s   rF   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 )Nr.   r   rB                 ?r   )r   r2   r   r   r3   r9   rC   )r"   r5   x1r7   r(   r(   r)   direct_irdft_   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_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rB   r            @      ?rB   r   rS   y      @       @r.   rB   r   rS   y      @           )r   r   rM   r	   r   r/   r8   r   rP   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rB   r   rS      r.   r\   r5   r   r\   r   rB   )
r   r   r&   r	   r   r/   rM   r=   r   r8   rP   rH   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)rB   r   rS   rT   r.   r\   r]   r^   r   rB   )	r   r   rM   r	   r   r/   r=   r   r8   r_   r(   r(   r)   _test_n_argument_complex   rb   z%_TestFFTBase._test_n_argument_complexc                 C   *   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      z_TestFFTBase.test_invalid_sizesN)__name__
__module____qualname__rQ   rY   ra   rc   ri   r(   r(   r(   r)   rJ   o   s    			rJ   c                   @      e Zd Zdd ZdS )TestDoubleFFTc                 C      t j| _t j| _d S r+   r   
complex128rM   float64r&   rO   r(   r(   r)   rQ         zTestDoubleFFT.setup_methodNrk   rl   rm   rQ   r(   r(   r(   r)   ro          ro   c                   @   s0   e Zd Zdd ZdZejjdeddd ZdS )	TestSingleFFTc                 C   rp   r+   r   	complex64rM   float32r&   rO   r(   r(   r)   rQ      rt   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(   rO   r(   r(   r)   test_notice   s   zTestSingleFFT.test_noticeN)	rk   rl   rm   rQ   r|   pytestmarkxfailr}   r(   r(   r(   r)   rw      s
    rw   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[   r.   r\   r]   )r\   r   r   float16r	   r   r/   ry   r=   r   r8   astyperz   )rP   rH   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 rZ   r   r_   r(   r(   r)   ra      s   z#TestFloat16FFT.test_n_argument_realN)rk   rl   rm   r   ra   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 rK   r   r,   rN   rO   r(   r(   r)   rQ         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 )NrR   rU   )r   r   rM   r   r9   r   r/   r   rW   r(   r(   r)   rY      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rB   r   rS   r\   rB   r   rS   r\   rB   r   rS   r\   rV   r.   )	r   r   r&   r   r   r/   rM   r9   r   rW   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	rB   3   o   d      @         i   rG   )r,   r   rM   r   r	   r   r/   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,   r   r&   r   r	   r   r/   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 )Nh㈵>绽|=rL   rG   )r&   r   rz   rs   LARGE_COMPOSITE_SIZESLARGE_PRIME_SIZESr,   rN   r   r   r   r	   r*   rM   rP   r$   r%   r"   r#   r(   r(   r)   test_size_accuracy   s"   z _TestIFFTBase.test_size_accuracyc                 C   rd   re   )rg   rh   r   rO   r(   r(   r)   ri      rj   z _TestIFFTBase.test_invalid_sizesN)
rk   rl   rm   rQ   rY   r   r   r   r   ri   r(   r(   r(   r)   r      s    

r   c                   @   rn   )TestDoubleIFFTc                 C   rp   r+   rq   rO   r(   r(   r)   rQ     rt   zTestDoubleIFFT.setup_methodNru   r(   r(   r(   r)   r     rv   r   c                   @   rn   )TestSingleIFFTc                 C   rp   r+   rx   rO   r(   r(   r)   rQ   
  rt   zTestSingleIFFT.setup_methodNru   r(   r(   r(   r)   r   	  rv   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   rK   r   rO   r(   r(   r)   rQ     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   	rB   r   rS   r\   rB   r   rS   r\   rV   r.   )r   r   r&   r   rF   r   r   r/   )rP   tr"   r#   rX   r(   r(   r)   rY     s   
z_TestRFFTBase.test_definitionc                 C   rd   re   )rg   rh   r   rO   r(   r(   r)   ri     rj   z _TestRFFTBase.test_invalid_sizesc                   @   r   )z_TestRFFTBase.MockSeriesc                 C   s   t || _d S r+   )r   r   datarP   r   r(   r(   r)   __init__!  r   z!_TestRFFTBase.MockSeries.__init__c              
   C   s:   zt | j|W S  ty } z	td| d|d }~ww )Nz&'MockSeries' object has no attribute '')getattrr   AttributeError)rP   itemer(   r(   r)   __getattr__$  s   z$_TestRFFTBase.MockSeries.__getattr__N)rk   rl   rm   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   )rP   r"   xs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\   r.   )rg   	TypeErrorr   r   r   ry   rO   r(   r(   r)   test_complex_input6     z _TestRFFTBase.test_complex_inputN)	rk   rl   rm   rQ   rY   ri   r   r   r   r(   r(   r(   r)   r     s    r   c                   @   rn   )TestRFFTDoublec                 C   rp   r+   rq   rO   r(   r(   r)   rQ   ;  rt   zTestRFFTDouble.setup_methodNru   r(   r(   r(   r)   r   :  rv   r   c                   @   rn   )TestRFFTSinglec                 C   rp   r+   rx   rO   r(   r(   r)   rQ   A  rt   zTestRFFTSingle.setup_methodNru   r(   r(   r(   r)   r   @  rv   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   rK   r   rO   r(   r(   r)   rQ   G  r   z_TestIRFFTBase.setup_methodc                    sD   g d}g d}g d}g d} fdd}||| ||| d S )Nr   )rB          @      @rT   r   r\          @            @      r   r   )	rB   r   rT   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&   rI   r   r/   r   ndecr   )r"   xrr#   rX   rO   r(   r)   _testP  s
   z-_TestIRFFTBase.test_definition.<locals>._testr(   )rP   rH   x1_1r`   x2_1r   r(   rO   r)   rY   J  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   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 ]0}tjd tj|	| j }t
t|}t||||| j  tt
|}t||||| j  qd S )Nr   r   rL   )r&   r   rz   rs   r   r   r,   rN   r   r   r   r   r*   r   r(   r(   r)   r   f  s   z!_TestIRFFTBase.test_size_accuracyc                 C   rd   re   )rg   rh   r   rO   r(   r(   r)   ri   u  rj   z!_TestIRFFTBase.test_invalid_sizesc                 C   r   r   )rg   r   r   r   r   ry   rO   r(   r(   r)   r   y  r   z!_TestIRFFTBase.test_complex_inputN)	rk   rl   rm   rQ   rY   r   r   ri   r   r(   r(   r(   r)   r   F  s    r   c                   @   rn   )TestIRFFTDoublec                 C      t j| _t j| _d| _d S )N   )r   rr   rM   rs   r&   r   rO   r(   r(   r)   rQ        
zTestIRFFTDouble.setup_methodNru   r(   r(   r(   r)   r     rv   r   c                   @   rn   )TestIRFFTSinglec                 C   r   )NrV   )r   ry   rM   rz   r&   r   rO   r(   r(   r)   rQ     r   zTestIRFFTSingle.setup_methodNru   r(   r(   r(   r)   r     rv   r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )Testfft2c                 C   r   rK   r   rO   r(   r(   r)   rQ     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)numpyonesr   r	   r
   r   rP   r"   r#   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   )rg   rh   r   rO   r(   r(   r)   ri     s   zTestfft2.test_invalid_sizesN)rk   rl   rm   rQ   r   ri   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   rK   r   rO   r(   r(   r)   rQ     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rB   r   rS   r\   rV         r   	   z-double precision output with single precision)msg)r
   r   r   rz   r   r/   ry   r   r   r(   r(   r)   rY     s   zTestFftnSingle.test_definitionr%   c                 C   v   t jd}|||fd|||f  }t|jt j}t|jt jt j}t	|j
t j t||d d S )NrL   rG     r   r,   default_rngr
   rC   r   rz   rs   ry   r   r/   r   rP   r%   rngr"   rX   r   r(   r(   r)   test_size_accuracy_small      z'TestFftnSingle.test_size_accuracy_smallc                 C   v   t jd}||dfd||df  }t|jt j}t|jt jt j}t	|j
t j t||d d S )NrL   rS   rG   r   r   )rP   r%   r   r"   rX   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   r/   ry   r   r   r(   r(   r)   test_definition_float16  s   z&TestFftnSingle.test_definition_float16c                 C   r   )NrL   rG   g    Ar   r,   r   r
   rC   r   r   rs   ry   r   r/   r   r   r(   r(   r)   test_float16_input_small  r   z'TestFftnSingle.test_float16_input_smallc                 C   r   )NrL   rS   rG   g    >Ar   r   r(   r(   r)   test_float16_input_large  r   z'TestFftnSingle.test_float16_input_largeN)rk   rl   rm   rQ   rY   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   rK   r   rO   r(   r(   r)   rQ     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         rV   r\   rS   r   )r
   r   r?   r,   rP   r"   r#   r(   r(   r)   rY     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      )rB   r   r   )r\   r   r  )r   r   r  )r   r   r   )rV   r   r  )r   r   r   )rS   r   r   )r   r   r  )r   r   r  )rB   r\   r   )r   r   r   )r   r  r  )r   rV   r   )r   r   r   )r   r  r   )rS   r   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   rB   r   r   )r   r  r  r   )r  r   )r   r   r  rS   r   r   r(   )r   r   r
   r   r3   r	   )rP   plane1plane2plane3	ki_plane1	ki_plane2	ki_plane3	jk_plane1	jk_plane2	jk_plane3	kj_plane1	kj_plane2	kj_plane3	ij_plane1	ij_plane2	ij_plane3	ik_plane1	ik_plane2	ik_plane3	ijk_space	ikj_space	jik_space	jki_space	kij_spacer"   r#   r7   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   rB   r   rS   r   r\   rV   r   r   r   r   r   r   r\   r\   r=   )rS   r\   r  )r
   r   rP   small_x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   rV   rS   r   r  )r   )r   r=   r  r   )r<   r5   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   rB   r,  )r   rg   rh   r
   )rP   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\]\) specifiedr3  z5invalid number of data points \(\[4, -3\]\) specifiedrB   r   r   )rg   rh   r
   rO   r(   r(   r)   ri        "zTestFftn.test_invalid_sizesN)rk   rl   rm   rQ   rY   r'  r0  r1  r2  r5  ri   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   rK   r   rO   r(   r(   r)   rQ     r   zTestIfftn.setup_methodzdtype,cdtype,maxnlpr   i  c                 C   s   t jd}t jg dg dg dg|d}t|}t|j| t|t|| |d}tt|t|| |d}tt|t|| d S )NrL   r   r   r   r.   r   r   )	r   r,   r   r   r   r   r/   r   rA   )rP   r/   cdtypemaxnlpr   r"   r#   r(   r(   r)   rY     s   


zTestIfftn.test_definitionr;  r%   )rB   r   r       r   \   c                 C   sX   t jd}|||gd|||g  }ttt||| ttt||| d S )NrL   rG   )r   r,   r   r   r   r
   )rP   r;  r%   r   r"   r(   r(   r)   r     s    zTestIfftn.test_random_complexc                 C   r6  r7  )rg   rh   r   rO   r(   r(   r)   ri     r8  zTestIfftn.test_invalid_sizes)rk   rl   rm   r/   r:  rQ   r~   r   r   r   rs   rr   rz   ry   rY   r   ri   r(   r(   r(   r)   r9    s    
r9  c                   @   rn   )	FakeArrayc                 C   s   || _ |j| _d S r+   )_data__array_interface__r   r(   r(   r)   r     s   zFakeArray.__init__N)rk   rl   rm   r   r(   r(   r(   r)   r>    rv   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+   rB  )rP   r/   copyr(   r(   r)   	__array__  s   zFakeArray2.__array__)NN)rk   rl   rm   r   rD  r(   r(   r(   r)   rA    s    rA  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   sx   |  }dd ttfD ].}||||||d |j d|j |jd|d|d|d}|s9t||d	| d
 qd S )Nc                 S   s   | S r+   r(   )r"   r(   r(   r)   <lambda>  s    z&TestOverwrite._check.<locals>.<lambda>overwrite_x(z, z, axis=z, overwrite_x=)zspurious overwrite in )r'   )rC  r>  rA  rk   r/   r=   r   )	rP   r"   routinefftsizer<   rH  r`   fake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 )NrL   rG   rG  )r   r,   rN   
issubdtypecomplexfloatingrandnr   rO  )	rP   rK  r/   r=   r<   overwritable_dtypesrL  rH  r   r(   r(   r)   	_check_1d  s   

zTestOverwrite._check_1dr/   rL  rH  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   rr   ry   rT  r	   r   rP   r/   rL  rH  r=   r   overwritabler(   r(   r)   test_fft_ifft  s   zTestOverwrite.test_fft_ifftc              	   C   s6   | j }| t|||||| | t|||||| d S r+   )real_dtypesrT  r   r   rX  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 )NrL   rG   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   rB   )r2   )shpr&  restfftshape_iterr(   r)   r`  4  s   
"z2TestOverwrite._check_nd_one.<locals>.fftshape_iterrG  rB   )r   r,   rN   rP  rQ  rR  r   tupletakerO  ndimT)
rP   rK  r/   r=   r   rS  rH  r   
part_shapefftshaper(   r_  r)   _check_nd_one+  s&   

zTestOverwrite._check_nd_one))rU  N)rU  r  )rV  r  )rW  rB   )r   r   N)ri  r   rB   )r   r   r   rj  )rk  r
  )rk  r  )rk  rh  )rk  )r   )rk  N)rk  r  c                 C   s8   t jt jf}| t||||| | t||||| d S r+   )r   rr   ry   rg  r
   r   )rP   r/   rH  r=   r   rY  r(   r(   r)   test_fftn_ifftnH  s   zTestOverwrite.test_fftn_ifftnN)rk   rl   rm   __doc__r   rz   rs   r[  ry   rr   dtypesfftsizesrO  rT  r~   r   r   rZ  r\  rg  rl  r(   r(   r(   r)   rE    s,    
rE  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   )rp  aexpectactualr(   r(   r)   test_shape_axes_ndarray_  s   

"rt  )Cnumpy.testingr   r   r   r   r   r~   r   rg   scipy.fftpackr   r	   r
   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   	numpy.fftnumpy.randomr   r   r   r   r   r*   r,   r8   r9   r?   rA   rF   rI   rJ   ro   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r9  r>  rA  rE  r   r   rt  r(   r(   r(   r)   <module>   sZ   $0

&H+:A Y-k