U
    -ev                     @   sT  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  ddd	gZ!d
ddg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/d0 d0Z5G d1d2 d2e5Z6G d3d4 d4e5Z7G d5d6 d6Z8G d7d8 d8e8Z9G d9d: d:e8Z:G d;d< d<Z;G d=d> d>Z<G d?d@ d@Z=G dAdB dBZ>G dCdD dDZ?G dEdF dFZ@G dGdH dHZAejBCdIeeegdJdK ZDdS )L    )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randi    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'   _/var/www/html/Darija-Ai-Train/env/lib/python3.8/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    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    r:   c                 C   s\   t | } t| }t|td}t|dt |  }t|D ]}tt|| | | ||< q8|S r0   r4   r7   r'   r'   r(   direct_idft=   s    r;   c                 C   s,   t | } tt| jD ]}t| |d} q| S N)axis)r   r6   r5   shaper	   r!   r=   r'   r'   r(   direct_dftnG   s    r@   c                 C   s,   t | } tt| jD ]}t| |d} q| S r<   )r   r6   r5   r>   r   r?   r'   r'   r(   direct_idftnN   s    rA   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 )Nr3   r1   r      r   )r   r5   r   r   r   r   r6   r   r   realimag)r!   r-   r8   rr9   r"   r'   r'   r(   direct_rdftU   s    rF   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 )Nr1   r   rB                 ?r   )r   r5   r   r   r6   r;   rC   )r!   r-   x1r9   r'   r'   r(   direct_irdfte   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_methodv   s    z_TestFFTBase.setup_methodc              	   C   sx   t jddddddddg| jd}t|}t|j| j t|}t|| t jdddddg| jd}tt|t| d S )	NrB   r            @      ?      @       @r1         @           )r    r   rM   r	   r   r2   r:   r   rP   r!   r"   y1r'   r'   r(   test_definition{   s     
z_TestFFTBase.test_definitionc                 C   s   t jddddg| jd}t jddddg| jd}t||gdd}t|j| j t|jd t|d t	| t|d t	| d S 	NrB   r   rR      r1   r-   r   r[   r   )
r    r   r%   r	   r   r2   rM   r>   r   r:   rP   rH   x2r"   r'   r'   r(   test_n_argument_real   s    z!_TestFFTBase.test_n_argument_realc                 C   s   t jddddg| jd}t jddddg| jd}t||gdd}t|j| j t|jd t|d	 t| t|d t| d S )
NrB   r   rR   rS   r1   r[   r\   r]   r   )	r    r   rM   r	   r   r2   r>   r   r:   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 NrB   r   )assert_raises
ValueErrorr	   rO   r'   r'   r(   test_invalid_sizes   s    z_TestFFTBase.test_invalid_sizesN)__name__
__module____qualname__rQ   rY   r`   ra   rf   r'   r'   r'   r(   rJ   u   s
   			rJ   c                   @   s   e Zd Zdd ZdS )TestDoubleFFTc                 C   s   t j| _t j| _d S r*   r    r   rM   r   r%   rO   r'   r'   r(   rQ      s    zTestDoubleFFT.setup_methodNrg   rh   ri   rQ   r'   r'   r'   r(   rj      s   rj   c                   @   s,   e Zd Zdd Zejjddddd ZdS )	TestSingleFFTc                 C   s   t j| _t j| _d S r*   r    	complex64rM   float32r%   rO   r'   r'   r(   rQ      s    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'   rO   r'   r'   r(   test_notice   s    zTestSingleFFT.test_noticeN)rg   rh   ri   rQ   pytestmarkZxfailrs   r'   r'   r'   r(   rm      s   rm   c                   @   s   e Zd Zdd Zdd ZdS )TestFloat16FFTc                 C   sX   t jddddgt jd}t|dd}t|jt j t|jd t|t	|
t j d S )NrB   r   rR   r[   r1   r\   )r[   r    r   float16r	   r   r2   ro   r>   r   r:   astyperp   )rP   rH   r"   r'   r'   r(   test_1_argument_real   s
    z#TestFloat16FFT.test_1_argument_realc                 C   s   t jddddgt jd}t jddddg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   rw   r^   r'   r'   r(   r`      s    z#TestFloat16FFT.test_n_argument_realN)rg   rh   ri   rz   r`   r'   r'   r'   r(   rv      s   rv   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 rK   r    r+   rN   rO   r'   r'   r(   rQ      s    z_TestIFFTBase.setup_methodc              
   C   st   t ddddddddg| j}t|}t|}t|j| j t|| t dddddg| j}tt|t| d S )NrB   r   rR   rS   rT   rU   rV   )r    r   rM   r   r;   r   r2   r   rW   r'   r'   r(   rY      s    
z_TestIFFTBase.test_definitionc              
   C   s   t ddddddddg| j}t|}t|j| j t|}t|| t jdddddg| jd}t|j| j tt|t| d S NrB   r   rR   r[   rV   r1   )	r    r   r%   r   r   r2   rM   r;   r   rW   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	rB   3   o   d      @         i   rG   )r+   ry   rM   r   r	   r   r2   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+   ry   r%   r   r	   r   r2   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    rp   float64LARGE_COMPOSITE_SIZESLARGE_PRIME_SIZESr+   rN   r   ry   r   r	   r)   rM   rP   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 rb   )rd   re   r   rO   r'   r'   r(   rf     s    z _TestIFFTBase.test_invalid_sizesN)
rg   rh   ri   rQ   rY   r~   r   r   r   rf   r'   r'   r'   r(   r{      s   

r{   c                   @   s   e Zd Zdd ZdS )TestDoubleIFFTc                 C   s   t j| _t j| _d S r*   rk   rO   r'   r'   r(   rQ     s    zTestDoubleIFFT.setup_methodNrl   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*   rn   rO   r'   r'   r(   rQ     s    zTestSingleIFFT.setup_methodNrl   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 rK   r|   rO   r'   r'   r(   rQ     s    z_TestRFFTBase.setup_methodc              
   C   sl   ddddddddgdddddddddg	fD ]<}t j|| jd}t|}t|}t|| t|j| j q*d S r}   )r    r   r%   r   rF   r   r   r2   )rP   tr!   r"   rX   r'   r'   r(   rY     s    .
z_TestRFFTBase.test_definitionc                 C   s*   t ttg  t ttddgddggd d S rb   )rd   re   r   rO   r'   r'   r(   rf     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   r.   rP   r.   r'   r'   r(   __init__$  s    z!_TestRFFTBase.MockSeries.__init__c              
   C   sH   zt | j|W S  tk
rB } ztdj|d|W 5 d }~X Y nX d S )Nz-'MockSeries' object has no attribute '{attr}')attr)getattrr.   AttributeErrorformat)rP   itemer'   r'   r(   __getattr__'  s    z$_TestRFFTBase.MockSeries.__getattr__N)rg   rh   ri   r   r   r'   r'   r'   r(   
MockSeries#  s   r   c                 C   sN   t dddddg}t|}dddd	d
g}t| t|| t|j| d S )Ng      ?g       @g      @g      @g      @rB   r   rR   r[   rV   )r    r   r   r   r   r   r.   )rP   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 Nr[   r1   )rd   	TypeErrorr   r    r   ro   rO   r'   r'   r(   test_complex_input:  s    z _TestRFFTBase.test_complex_inputN)	rg   rh   ri   rQ   rY   rf   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*   rk   rO   r'   r'   r(   rQ   ?  s    zTestRFFTDouble.setup_methodNrl   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*   rn   rO   r'   r'   r(   rQ   E  s    zTestRFFTSingle.setup_methodNrl   r'   r'   r'   r(   r   D  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 rK   r|   rO   r'   r'   r(   rQ   K  s    z_TestIRFFTBase.setup_methodc              	      sx   ddddddddg}ddddddddg}ddddddddd	g	}ddddd
ddddg	} fdd}||| ||| d S )NrB   r   rR   r[   y       @      @rS   y       @      y      @      rV   y      @      @y      @      c                    sR   t tj|  jd}t| }t|j j t|| jd t|t	| jd d S )Nr1   )decimal)
r   r    r   r%   rI   r   r2   r   ndecr   )r!   Zxrr"   rX   rO   r'   r(   _testT  s
    z-_TestIRFFTBase.test_definition.<locals>._testr'   )rP   rH   Zx1_1r_   Zx2_1r   r'   rO   r(   rY   N  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+   ry   r%   r   r   r   r2   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 ]`}tjd tj|	| j }t
t|}t||||| j  tt
|}t||||| j  q*d S )Nr   r   rL   )r%   r    rp   r   r   r   r+   rN   r   ry   r   r   r)   r   r'   r'   r(   r   j  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 rb   )rd   re   r   rO   r'   r'   r(   rf   y  s    z!_TestIRFFTBase.test_invalid_sizesc                 C   s   t tttjdtjd d S r   )rd   r   r   r    r   ro   rO   r'   r'   r(   r   }  s    z!_TestIRFFTBase.test_complex_inputN)	rg   rh   ri   rQ   rY   r   r   rf   r   r'   r'   r'   r(   r   J  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    r   rM   r   r%   r   rO   r'   r'   r(   rQ     s    zTestIRFFTDouble.setup_methodNrl   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 )NrV   )r    ro   rM   rp   r%   r   rO   r'   r'   r(   rQ     s    zTestIRFFTSingle.setup_methodNrl   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 rK   r|   rO   r'   r'   r(   rQ     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.r[   r[   r      r   r>   axes)sr   N)numpyZonesr   r	   r
   r   rP   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 )NrB   r   r[   r   )rd   re   r   rO   r'   r'   r(   rf     s    zTestfft2.test_invalid_sizesN)rg   rh   ri   rQ   r   rf   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 rK   r|   rO   r'   r'   r(   rQ     s    zTestFftnSingle.setup_methodc                 C   sb   dddgdddgddd	gg}t t|tj}t|jtjkd
d tt |tj}t|| d S )NrB   r   rR   r[   rV         r   	   z-double precision output with single precision)msg)r
   r    r   rp   r   r2   ro   r   r   r'   r'   r(   rY     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 )NrG     r    r+   r   r
   rC   ry   rp   r   ro   r   r2   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 )NrR   rG   r   r   r   r'   r'   r(   test_size_accuracy_large  s
     z'TestFftnSingle.test_size_accuracy_largec                 C   s\   dddgdddgddd	gg}t t|tj}t|jtj tt |tj}t|| d S )
NrB   r   rR   r[   rV   r   r   r   r   )r
   r    r   rx   r   r2   ro   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 )NrG   g    Ar    r+   r   r
   rC   ry   rx   r   ro   r   r2   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 )NrR   rG   g    >Ar   r   r'   r'   r(   test_float16_input_large  s
     z'TestFftnSingle.test_float16_input_largeN)rg   rh   ri   rQ   rY   rt   ru   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 rK   r|   rO   r'   r'   r(   rQ     s    zTestFftn.setup_methodc                 C   sj   dddgdddgddd	gg}t |}t|t| td
}tt |t| td}tt |t| d S )NrB   r   rR   r[   rV   r   r   r   r         rV   r[   rR   r   )r
   r   r@   r+   rP   r!   r"   r'   r'   r(   rY     s    zTestFftn.test_definitionc              	   C   s~  dddgdddgddd	gg}d
ddgdddgdddgg}dddgdddgdddgg}dddgd
ddgdddgg}dddgdddgdddgg}ddd	gdddgdddgg}dd
dgdddgdddgg}dddgdddgdddgg}dddgdddgd	ddgg}	dddgd
ddgdddgg}
dddgdddgdddgg}ddd	gdddgdddgg}dddgdddgddd	gg}d
ddgdddgdddgg}dddgdddgdddgg}dd
dgdddgdddgg}dddgdddgdddgg}dddgdddgd	ddg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|d.d}tt|t|d* d%d" tt|t|d d%d" tt|t|d d%d" t|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t|t|d d dd d f d"d% t|d0d}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|d1d}tdD ]@}tdD ]0}tt|||d d f |||d d f  qqvt|d2d}tdD ]@}tdD ]0}tt||d d |f ||d d |f  qؐqt|d3d}tdD ]@}tdD ]0}tt|d d ||f |d d ||f  q.q"t|d4d}t|| d S )5NrB   r   rR   r[   rV   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   r   )r   r   r   r   )r   r   )r   r   r   r   r   r'   )r   r   r
   r   r6   r	   )rP   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"   r9   jr'   r'   r(   test_axes_argument  s.      





222222222zTestFftn.test_axes_argumentc                 C   s   dddgdddgg}ddddgddddgddddgddddgg}t |dd	}t|t | t |d
d	}t|t |d d  d S )NrB   r   rR   r[   rV   r   r   r[   r[   r>   )rR   r[   r   )r
   r   rP   Zsmall_xZlarge_x1r"   r'   r'   r(   test_shape_argumentx  s    



zTestFftn.test_shape_argumentc                 C   s   dddgdddgddd	gg}t dddd
gdddd
gddd	d
gd
d
d
d
gg}t|ddd}t|t| t|ddd}t|ttt|dddd d S )NrB   r   rR   r[   rV   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   rR   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   s0   t d}ttdd t|dd W 5 Q R X d S )Nr   zBwhen given, axes and shape arguments have to be of the same lengthmatch)r   r   r   rB   r   )r   rd   re   r
   )rP   r!   r'   r'   r(   test_shape_argument_more  s
    z!TestFftn.test_shape_argument_morec              	   C   sT   t tdd tg g W 5 Q R X t tdd tddgddggd W 5 Q R X d S Nz4invalid number of data points \(\[1, 0\]\) specifiedr   z5invalid number of data points \(\[4, -3\]\) specifiedrB   r   r   )rd   re   r
   rO   r'   r'   r(   rf     s    zTestFftn.test_invalid_sizesN)rg   rh   ri   rQ   rY   r   r   r   r   r   rf   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
ddddddgdd Zdd ZdS )	TestIfftnNc                 C   s   t jd d S rK   r|   rO   r'   r'   r(   rQ     s    zTestIfftn.setup_methodzdtype,cdtype,maxnlpr   i  c                 C   s   t jdddgdddgddd	gg|d
}t|}t|j| t|t|| td}tt|t|| td}tt|t|| d S )NrB   r   rR   r[   rV   r   r   r   r   r1   r   r   )r    r   r   r   r2   r   rA   r+   )rP   r2   cdtypemaxnlpr!   r"   r'   r'   r(   rY     s    zTestIfftn.test_definitionr   r$   rB   r   r       r   \   c                 C   sH   t ||gdt ||g  }ttt||| ttt||| d S )NrG   )r+   r   r   r
   )rP   r   r$   r!   r'   r'   r(   r     s    zTestIfftn.test_random_complexc              	   C   sT   t tdd tg g W 5 Q R X t tdd tddgddggd W 5 Q R X d S r   )rd   re   r   rO   r'   r'   r(   rf     s    zTestIfftn.test_invalid_sizes)rg   rh   ri   r2   r   rQ   rt   ru   r   r    r   
complex128rp   ro   rY   r   rf   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)rg   rh   ri   r   r'   r'   r'   r(   r     s   r   c                   @   s   e Zd Zdd Zdd ZdS )
FakeArray2c                 C   s
   || _ d S r*   r   r   r'   r'   r(   r     s    zFakeArray2.__init__c                 C   s   | j S r*   r   rO   r'   r'   r(   	__array__  s    zFakeArray2.__array__N)rg   rh   ri   r   r   r'   r'   r'   r(   r     s   r   c                   @   s2  e Zd ZdZejejfZeejej	f Z
dddgZdd Zdd Zejd	e
ejd
eejdddgejddddgdd Zejd	eejd
eejdddgejddddgdd Zdd Zejd	e
ejdddgejdddddddddd d!d"d#d$g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|||f }|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%%s(%s%r, %r, axis=%r, overwrite_x=%r)zspurious overwrite in %s)r&   )copyr   r   rg   r2   r>   r   )	rP   r!   routinefftsizer=   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 )NrL   rG   r  )r    r+   rN   
issubdtypecomplexfloatingrandnry   r
  )	rP   r  r2   r>   r=   overwritable_dtypesr  r  r.   r'   r'   r(   	_check_1d  s    
zTestOverwrite._check_1dr2   r  r  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    r   ro   r  r	   r   rP   r2   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 krh|}ntt ||} |D ]8}	| j	|||	||d |j
dkr| j	|j||	||d qd S )NrL   rG   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   rB   )r5   )Zshpr   restfftshape_iterr'   r(   r  2  s
    "z2TestOverwrite._check_nd_one.<locals>.fftshape_iterr  rB   )r    r+   rN   r  r  r  ry   tupleZtaker
  ndimT)
rP   r  r2   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  rB   )r   r   N)r   r   rB   )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   ro   r  r
   r   )rP   r2   r  r>   r   r  r'   r'   r(   test_fftn_ifftnF  s    zTestOverwrite.test_fftn_ifftnN)rg   rh   ri   __doc__r    rp   r   r  ro   r   ZdtypesZfftsizesr
  r  rt   ru   r   r  r  r  r#  r'   r'   r'   r(   r    sP   




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   )rV   rV   r   rV   r   r   r   )r[   r   )rB   r   r   r[   r   rB   r   )r    r+   r   r   r   )r%  aexpectactualr'   r'   r(   test_shape_axes_ndarray]  s    

"r)  )EZnumpy.testingr   r   r   r   r   rt   r   rd   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/   r:   r;   r@   rA   rF   rI   rJ   rj   rm   rv   r{   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  ru   r   r)  r'   r'   r'   r(   <module>   sf   $4

&
H,:= Y+k