o
    tBhv                     @   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   nplinalgnorm)xyrtolsizerdterr_msg r)   u/var/www/html/riverr-enterprise-integrations-main/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   s   t | }t||}|S r,   )r   r   outer)ndatar)   r)   r*   get_mat-   s   r1   c                 C   sZ   t | } t| }t|td}t| dt |  }t|D ]}tt|| | ||< q|S Ndtype               @	r   lenr   r   r   r   ranger   r   r#   r/   r$   wir)   r)   r*   
direct_dft3   s   r<   c                 C   s\   t | } t| }t|td}t|dt |  }t|D ]}tt|| | | ||< q|S r2   r6   r9   r)   r)   r*   direct_idft=   s   r=   c                 C   ,   t | } tt| jD ]}t| |d} q| S N)axis)r   r8   r7   shaper	   r#   r@   r)   r)   r*   direct_dftnG      rC   c                 C   r>   r?   )r   r8   r7   rA   r   rB   r)   r)   r*   direct_idftnN   rD   rE   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 )Nr5   r3   r      r   )r   r7   r   r   r   r   r8   r   r   realimag)r#   r/   r:   rr;   r$   r)   r)   r*   direct_rdftU   s   rJ   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 )Nr3   r   rF                 ?r   )r   r7   r   r   r8   r=   rG   )r#   r/   x1r;   r)   r)   r*   direct_irdfte   s   $*
rM   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rF   r            @      ?rF   r   rW   y      @       @r3   rF   r   rW   y      @           )r    r   rQ   r	   r   r4   r<   r   rT   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rF   r   rW      r3   r`   r/   r   r`   r   rF   )
r    r   r'   r	   r   r4   rQ   rA   r   r<   rT   rL   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)rF   r   rW   rX   r3   r`   ra   rb   r   rF   )	r    r   rQ   r	   r   r4   rA   r   r<   rc   r)   r)   r*   _test_n_argument_complex   rf   z%_TestFFTBase._test_n_argument_complexc                 C   *   t ttg  t ttddgddggd d S NrF   r   )assert_raises
ValueErrorr	   rS   r)   r)   r*   test_invalid_sizes      z_TestFFTBase.test_invalid_sizesN)__name__
__module____qualname__rU   r]   re   rg   rm   r)   r)   r)   r*   rN   u   s    			rN   c                   @      e Zd Zdd ZdS )TestDoubleFFTc                 C      t j| _t j| _d S r,   r    r   rQ   r   r'   rS   r)   r)   r*   rU         zTestDoubleFFT.setup_methodNro   rp   rq   rU   r)   r)   r)   r*   rs          rs   c                   @   s,   e Zd Zdd Zejjddddd ZdS )	TestSingleFFTc                 C   rt   r,   r    	complex64rQ   float32r'   rS   r)   r)   r*   rU      rv   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)   rS   r)   r)   r*   test_notice   s   zTestSingleFFT.test_noticeN)ro   rp   rq   rU   pytestmarkxfailr   r)   r)   r)   r*   ry      s    ry   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_   r3   r`   ra   )r`   r    r   float16r	   r   r4   r{   rA   r   r<   astyper|   )rT   rL   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   rc   r)   r)   r*   re      s   z#TestFloat16FFT.test_n_argument_realN)ro   rp   rq   r   re   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 rO   r    r-   rR   rS   r)   r)   r*   rU         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 )NrV   rY   )r    r   rQ   r   r=   r   r4   r   r[   r)   r)   r*   r]      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rF   r   rW   r`   rF   r   rW   r`   rF   r   rW   r`   rZ   r3   )	r    r   r'   r   r   r4   rQ   r=   r   r[   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	rF   3   o   d      @         i   rK   )r-   r   rQ   r   r	   r   r4   r   rT   r&   r#   r\   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   r4   rQ   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㈵>绽|=rP   rK   )r'   r    r|   float64LARGE_COMPOSITE_SIZESLARGE_PRIME_SIZESr-   rR   r   r   r   r	   r+   rQ   rT   r%   r&   r#   r$   r)   r)   r*   test_size_accuracy   s"   z _TestIFFTBase.test_size_accuracyc                 C   rh   ri   )rk   rl   r   rS   r)   r)   r*   rm     rn   z _TestIFFTBase.test_invalid_sizesN)
ro   rp   rq   rU   r]   r   r   r   r   rm   r)   r)   r)   r*   r      s    

r   c                   @   rr   )TestDoubleIFFTc                 C   rt   r,   ru   rS   r)   r)   r*   rU     rv   zTestDoubleIFFT.setup_methodNrw   r)   r)   r)   r*   r     rx   r   c                   @   rr   )TestSingleIFFTc                 C   rt   r,   rz   rS   r)   r)   r*   rU     rv   zTestSingleIFFT.setup_methodNrw   r)   r)   r)   r*   r     rx   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   rO   r   rS   r)   r)   r*   rU     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   	rF   r   rW   r`   rF   r   rW   r`   rZ   r3   )r    r   r'   r   rJ   r   r   r4   )rT   tr#   r$   r\   r)   r)   r*   r]     s   
z_TestRFFTBase.test_definitionc                 C   rh   ri   )rk   rl   r   rS   r)   r)   r*   rm     rn   z _TestRFFTBase.test_invalid_sizesc                   @   r   )z_TestRFFTBase.MockSeriesc                 C   s   t || _d S r,   )r    r   r0   rT   r0   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)getattrr0   AttributeErrorformat)rT   itemer)   r)   r*   __getattr__'  s   z$_TestRFFTBase.MockSeries.__getattr__N)ro   rp   rq   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   r0   )rT   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`   r3   )rk   	TypeErrorr   r    r   r{   rS   r)   r)   r*   test_complex_input:     z _TestRFFTBase.test_complex_inputN)	ro   rp   rq   rU   r]   rm   r   r   r   r)   r)   r)   r*   r     s    r   c                   @   rr   )TestRFFTDoublec                 C   rt   r,   ru   rS   r)   r)   r*   rU   ?  rv   zTestRFFTDouble.setup_methodNrw   r)   r)   r)   r*   r   >  rx   r   c                   @   rr   )TestRFFTSinglec                 C   rt   r,   rz   rS   r)   r)   r*   rU   E  rv   zTestRFFTSingle.setup_methodNrw   r)   r)   r)   r*   r   D  rx   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   rO   r   rS   r)   r)   r*   rU   K  r   z_TestIRFFTBase.setup_methodc                    sD   g d}g d}g d}g d} fdd}||| ||| d S )Nr   )rF          @      @rX   r   r`          @            @      r   r   )	rF   r   rX   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 )Nr3   )decimal)
r   r    r   r'   rM   r   r4   r   ndecr   )r#   xrr$   r\   rS   r)   r*   _testT  s
   z-_TestIRFFTBase.test_definition.<locals>._testr)   )rT   rL   x1_1rd   x2_1r   r)   rS   r*   r]   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   r4   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   rP   )r'   r    r|   r   r   r   r-   rR   r   r   r   r   r+   r   r)   r)   r*   r   j  s   z!_TestIRFFTBase.test_size_accuracyc                 C   rh   ri   )rk   rl   r   rS   r)   r)   r*   rm   y  rn   z!_TestIRFFTBase.test_invalid_sizesc                 C   r   r   )rk   r   r   r    r   r{   rS   r)   r)   r*   r   }  r   z!_TestIRFFTBase.test_complex_inputN)	ro   rp   rq   rU   r]   r   r   rm   r   r)   r)   r)   r*   r   J  s    r   c                   @   rr   )TestIRFFTDoublec                 C      t j| _t j| _d| _d S )N   )r    r   rQ   r   r'   r   rS   r)   r)   r*   rU        
zTestIRFFTDouble.setup_methodNrw   r)   r)   r)   r*   r     rx   r   c                   @   rr   )TestIRFFTSinglec                 C   r   )NrZ   )r    r{   rQ   r|   r'   r   rS   r)   r)   r*   rU     r   zTestIRFFTSingle.setup_methodNrw   r)   r)   r)   r*   r     rx   r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )Testfft2c                 C   r   rO   r   rS   r)   r)   r*   rU     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   rA   axes)sr   N)numpyonesr   r	   r
   r   rT   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 )NrF   r   r`   r   )rk   rl   r   rS   r)   r)   r*   rm     s   zTestfft2.test_invalid_sizesN)ro   rp   rq   rU   r   rm   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   rO   r   rS   r)   r)   r*   rU     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rF   r   rW   r`   rZ         r   	   z-double precision output with single precision)msg)r
   r    r   r|   r   r4   r{   r   r   r)   r)   r*   r]     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 )NrK     r    r-   r   r
   rG   r   r|   r   r{   r   r4   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 )NrW   rK   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   r4   r{   r   r   r)   r)   r*   test_definition_float16  s   z&TestFftnSingle.test_definition_float16c                 C   r   )NrK   g    Ar    r-   r   r
   rG   r   r   r   r{   r   r4   r   r   r)   r)   r*   test_float16_input_small  r   z'TestFftnSingle.test_float16_input_smallc                 C   r   )NrW   rK   g    >Ar   r   r)   r)   r*   test_float16_input_large  r   z'TestFftnSingle.test_float16_input_largeN)ro   rp   rq   rU   r]   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   rO   r   rS   r)   r)   r*   rU     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         rZ   r`   rW   r   )r
   r   rC   r-   rT   r#   r$   r)   r)   r*   r]     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      )rF   r   r   )r`   r   r  )r   r   r  )r   r   r   )rZ   r   r  )r   r   r   )rW   r   r  )r   r   r  )r   r   r  )rF   r`   r   )r   r   r   )r   r  r  )r   rZ   r   )r   r   r   )r   r  r   )rW   r   r   )r   r   r   )r  r  r  )r   r   r   r   rF   r   )r   r   )r   r  )r   rF   r   r  r   )r   r   rF   r   )rF   r   r   )rF   r   r   )r   r   rF   r   r  r   rF   r   rF   r   r   )r   r  r  r   )r  r   )r   r   r  rW   r   r   r)   )r   r   r
   r   r8   r	   )rT   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$   r;   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   rF   r   rW   r   r`   rZ   r   r   r   r   r   r   r`   r`   rA   )rW   r`   r  )r
   r   rT   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   rZ   rW   r   r  )r   )r   rA   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   rF   r-  )r   rk   rl   r
   )rT   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\]\) specifiedr4  z5invalid number of data points \(\[4, -3\]\) specifiedrF   r   r   )rk   rl   r
   rS   r)   r)   r*   rm        "zTestFftn.test_invalid_sizesN)ro   rp   rq   rU   r]   r(  r1  r2  r3  r6  rm   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   rO   r   rS   r)   r)   r*   rU     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   r3   r   r   )r    r   r   r   r4   r   rE   r-   )rT   r4   cdtypemaxnlpr#   r$   r)   r)   r*   r]     s   
zTestIfftn.test_definitionr<  r&   )rF   r   r       r   \   c                 C   sH   t ||gdt ||g  }ttt||| ttt||| d S )NrK   )r-   r   r   r
   )rT   r<  r&   r#   r)   r)   r*   r     s   zTestIfftn.test_random_complexc                 C   r7  r8  )rk   rl   r   rS   r)   r)   r*   rm     r9  zTestIfftn.test_invalid_sizes)ro   rp   rq   r4   r;  rU   r   r   r   r    r   
complex128r|   r{   r]   r   rm   r)   r)   r)   r*   r:    s    
r:  c                   @   rr   )	FakeArrayc                 C   s   || _ |j| _d S r,   )_data__array_interface__r   r)   r)   r*   r     s   zFakeArray.__init__N)ro   rp   rq   r   r)   r)   r)   r*   r@    rx   r@  c                   @   r   )
FakeArray2c                 C   s
   || _ d S r,   rA  r   r)   r)   r*   r     s   
zFakeArray2.__init__c                 C   s   | j S r,   rD  rS   r)   r)   r*   	__array__  s   zFakeArray2.__array__N)ro   rp   rq   r   rE  r)   r)   r)   r*   rC    r   rC  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@  rC  ro   r4   rA   r   )	rT   r#   routinefftsizer@   rI  rd   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 )NrP   rK   rH  )r    r-   rR   
issubdtypecomplexfloatingrandnr   rO  )	rT   rK  r4   rA   r@   overwritable_dtypesrL  rI  r0   r)   r)   r*   	_check_1d  s   

zTestOverwrite._check_1dr4   rL  rI  TFz
shape,axes))r   r  )r   r   r   )r   r   rF   c              	   C   s<   t jt jf}| t|||||| | t|||||| d S r,   )r    r?  r{   rT  r	   r   rT   r4   rL  rI  rA   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 )NrP   rK   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   rF   )r7   )shpr'  restfftshape_iterr)   r*   r`  2  s   
"z2TestOverwrite._check_nd_one.<locals>.fftshape_iterrH  rF   )r    r-   rR   rP  rQ  rR  r   tupletakerO  ndimT)
rT   rK  r4   rA   r   rS  rI  r0   
part_shapefftshaper)   r_  r*   _check_nd_one)  s&   

zTestOverwrite._check_nd_one))rU  N)rU  r  )rV  r  )rW  rF   )r   r   N)ri  r   rF   )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    r?  r{   rg  r
   r   )rT   r4   rI  rA   r   rY  r)   r)   r*   test_fftn_ifftnF  s   zTestOverwrite.test_fftn_ifftnN)ro   rp   rq   __doc__r    r|   r   r[  r{   r?  dtypesfftsizesrO  rT  r   r   r   rZ  r\  rg  rl  r)   r)   r)   r*   rF    s,    
rF  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   )rZ   rZ   r-  rZ   r  r  r  )r`   r   )rF   r   r   r`   r   rF   r   )r    r-   r   r   r   )rp  aexpectactualr)   r)   r*   test_shape_axes_ndarray]  s   

"rt  )Enumpy.testingr   r   r   r   r   r   r   rk   scipy.fftpackr   r	   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-   r1   r<   r=   rC   rE   rJ   rM   rN   rs   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r:  r@  rC  rF  r   r   rt  r)   r)   r)   r*   <module>   s\   $4

&
H,:= Y+k