o
    iz                     @   s\  d dl mZ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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 Z0dd Z1dd Z2dd Z3dd Z4dd  Z5G d!d" d"Z6G d#d$ d$e6Z7G d%d& d&e6Z8G d'd( d(e6Z9G d)d* d*Z:G d+d, d,Z;ej<j=e#j>e#j?u d-d.G d/d0 d0e;Z@G d1d2 d2e;ZAG d3d4 d4e;ZBG d5d6 d6ZCej<j=e#jDe#j?u d-d.G d7d8 d8eCZEG d9d: d:eCZFG d;d< d<eCZGG d=d> d>ZHej<j=e#jDe#j?u d-d.G d?d@ d@eHZIG dAdB dBeHZJG dCdD dDeHZKG dEdF dFZLG dGdH dHZMG dIdJ dJZNG dKdL dLZOG dMdN dNZPG dOdP dPZQG dQdR dRZRG dSdT dTZSej<TdUeeeeeeeegdVdW ZUej<TdUeeeeeeeegdXdY ZVej<TdUeeeegdZd[ ZWdS )\    )assert_assert_equalassert_array_almost_equalassert_array_almost_equal_nulpassert_array_lessassert_allcloseN)raises)ifftfftfftnifftnrfftirfftrfftnirfftnfft2hfftihffthfftnihfftn)
arangeaddarrayasarrayzerosdotexppiswapaxes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/   `/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/scipy/fft/_pocketfft/tests/test_basic.py_assert_close_in_norm&   s   (r1   c                 C   s   t |  S Nr    )r,   r/   r/   r0   random,   s   r3   c                 C   s   | j d}| |S )z-Returns the same array with swapped byteorderS)dtypenewbyteorderastype)arrr5   r/   r/   r0   swap_byteorder/   s   
r9   c                 C   s   t | }t||}|S r2   )r   r   outer)ndatar/   r/   r0   get_mat4   s   r=   c                 C   sZ   t | } t| }t|td}t| dt |  }t|D ]}tt|| | ||< q|S Nr5                  @	r   lenr   r   r   r   ranger   r   r)   r;   r*   wir/   r/   r0   
direct_dft:   s   rG   c                 C   s\   t | } t| }t|td}t|dt |  }t|D ]}tt|| | | ||< q|S r>   rA   rD   r/   r/   r0   direct_idftD   s   rH   c                 C   (   t | } t| jD ]}t| |d} q	| S N)axis)r   rC   ndimr
   r)   rK   r/   r/   r0   direct_dftnN      rN   c                 C   rI   rJ   )r   rC   rL   r	   rM   r/   r/   r0   direct_idftnU   rO   rP   c                 C   sj   t | } t| }t| dt |  }t|d d td}t|d d D ]}tt|| | ||< q%|S )Nr@   r"      r?   )	r   rB   r   r   r   r   rC   r   r   )r)   r;   rE   r*   rF   r/   r/   r0   direct_rdft\   s   rR   c                 C   sj   t | } t|td}t|d d D ]}| | ||< |dkr/d| |k r/t| | ||| < qt|jS )Nr?   r"   rQ   r   )r   r   r   rC   r&   conjrH   real)r)   r;   x1rF   r/   r/   r0   direct_irdftf   s   
rV   c                 C   s   t t| t| jd dS )NrQ   axes)r   r   rC   rL   r)   r/   r/   r0   direct_rdftnp   s   rZ   c                   @   <   e Zd Zd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&   r3   seedselfr/   r/   r0   setup_methodu   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rQ   r"            @      ?rQ   r"   re   y      @       @r?   rQ   r"   re   y      @           )r&   r   r_   r
   r   r5   rG   r   rb   r)   r*   y1r/   r/   r0   test_definitionz   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rQ   r"   re      r?   rn   r;   r"   rn   r   rQ   )
r&   r   r-   r
   r   r5   r_   shaper   rG   rb   rU   x2r*   r/   r/   r0   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)rQ   r"   re   rf   r?   rn   ro   rp   r   rQ   )	r&   r   r_   r
   r   r5   rq   r   rG   rr   r/   r/   r0   _test_n_argument_complex   ru   z%_TestFFTBase._test_n_argument_complexc                 C   s\   t ddD ]&}d| }t|}t|t}tj|}t|| t|}t|| qd S Nr"      )rC   r&   r   r
   r7   complexnumpyr   rb   rF   r;   r)   r*   y2r/   r/   r0   test_djbfft   s   

z_TestFFTBase.test_djbfftc                 C   *   t ttg  t ttddgddggd d S NrQ   r"   )assert_raises
ValueErrorr
   ra   r/   r/   r0   test_invalid_sizes      z_TestFFTBase.test_invalid_sizesN)	__name__
__module____qualname__rc   rk   rt   rv   r}   r   r/   r/   r/   r0   r\   t   s    			
r\   c                   @      e Zd Zdd ZdS )TestLongDoubleFFTc                 C      t j| _t j| _d S r2   )r&   longcomplexr_   
longdoubler-   ra   r/   r/   r0   rc         zTestLongDoubleFFT.setup_methodNr   r   r   rc   r/   r/   r/   r0   r          r   c                   @   r   )TestDoubleFFTc                 C   r   r2   r&   r   r_   doubler-   ra   r/   r/   r0   rc      r   zTestDoubleFFT.setup_methodNr   r/   r/   r/   r0   r      r   r   c                   @   r   )TestSingleFFTc                 C   r   r2   r&   	complex64r_   float32r-   ra   r/   r/   r0   rc      r   zTestSingleFFT.setup_methodNr   r/   r/   r/   r0   r      r   r   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 )Nrm   r?   rn   ro   )rn   r&   r   float16r
   r   r5   r   rq   r   rG   r7   r   )rb   rU   r*   r/   r/   r0   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 rl   r   rr   r/   r/   r0   rt      s   z#TestFloat16FFT.test_n_argument_realN)r   r   r   r   rt   r/   r/   r/   r0   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 )_TestIFFTBasec                 C      t jd d S r]   r&   r3   r`   ra   r/   r/   r0   rc         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 )Nrd   rg   )r&   r   r_   r	   rH   r   r5   r   ri   r/   r/   r0   rk      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rQ   r"   re   rn   rQ   r"   re   rn   rQ   r"   re   rn   rh   r?   )	r&   r   r-   r	   r   r5   r_   rH   r   ri   r/   r/   r0   test_definition_real   s   
z"_TestIFFTBase.test_definition_realc                 C   sr   t ddD ]1}d| }t|}t|| j}tj|}t||| j	| j
d t|}t||| j	| j
d qd S )Nr"   rx   )r+   atol)rC   r&   r   r	   r7   r_   rz   r
   r   r+   r   r{   r/   r/   r0   r}      s   
z_TestIFFTBase.test_djbfftc                 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	rQ   3   o   d      @         i                 ?)r3   r7   r_   r	   r
   r   r5   r   rb   r,   r)   rj   r|   r/   r/   r0   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   )	r3   r7   r-   r	   r
   r   r5   r_   r   r   r/   r/   r0   test_random_real   s   
z_TestIFFTBase.test_random_realc                 C   s   t t D ]`}tjd tj|| j}tt	|}t
||| j|| j t	t|}t
||| j|| j |dtj|  | j}tt	|}t
||| j|| j t	t|}t
||| j|| j qd S )Nr^   r   )LARGE_COMPOSITE_SIZESLARGE_PRIME_SIZESr&   r3   r`   r!   r7   r-   r	   r
   r1   r+   r_   )rb   r,   r)   r*   r/   r/   r0   test_size_accuracy  s   z _TestIFFTBase.test_size_accuracyc                 C   r~   r   )r   r   r	   ra   r/   r/   r0   r     r   z _TestIFFTBase.test_invalid_sizesN)r   r   r   rc   rk   r   r}   r   r   r   r   r/   r/   r/   r0   r      s    


r   z Long double is aliased to double)reasonc                   @   r   )TestLongDoubleIFFTc                 C       t j| _t j| _d| _d| _d S N绽|=)r&   r   r_   r   r-   r+   r   ra   r/   r/   r0   rc        
zTestLongDoubleIFFT.setup_methodNr   r/   r/   r/   r0   r         r   c                   @   r   )TestDoubleIFFTc                 C   r   r   )r&   r   r_   r   r-   r+   r   ra   r/   r/   r0   rc   !  r   zTestDoubleIFFT.setup_methodNr   r/   r/   r/   r0   r      r   r   c                   @   r   )TestSingleIFFTc                 C   s    t j| _t j| _d| _d| _d S )Nh㈵>g-C6?)r&   r   r_   r   r-   r+   r   ra   r/   r/   r0   rc   )  r   zTestSingleIFFT.setup_methodNr   r/   r/   r/   r0   r   (  r   r   c                   @   sJ   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZG dd dZdd Z	dS )_TestRFFTBasec                 C   r   r]   r   ra   r/   r/   r0   rc   1  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   )	rQ   r"   re   rn   rQ   r"   re   rn   rh   r?   )	r&   r   r-   r   rR   r   r   r5   r_   )rb   tr)   r*   rj   r/   r/   r0   rk   4  s   
z_TestRFFTBase.test_definitionc                 C   sD   t ddD ]}d| }t|}tj|}t|}t|| qd S rw   )rC   r&   r   r
   r   r   rb   rF   r;   r)   rj   r*   r/   r/   r0   r}   <  s   
z_TestRFFTBase.test_djbfftc                 C   r~   r   )r   r   r   ra   r/   r/   r0   r   D  r   z _TestRFFTBase.test_invalid_sizesc                 C   sJ   t jd| jd}ttdd t| W d    d S 1 sw   Y  d S )N
   r?   x must be a real sequencematch)r&   r   r_   r   	TypeErrorr   rb   r)   r/   r/   r0   test_complex_inputH  s   
"z _TestRFFTBase.test_complex_inputc                   @   r   )z_TestRFFTBase.MockSeriesc                 C   s   t || _d S r2   )r&   r   r<   rb   r<   r/   r/   r0   __init__O  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)rb   itemer/   r/   r0   __getattr__R  s   z$_TestRFFTBase.MockSeries.__getattr__N)r   r   r   r   r   r/   r/   r/   r0   
MockSeriesN      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<   )rb   r)   xsexpectedr/   r/   r0   test_non_ndarray_with_dtypeZ  s   

z)_TestRFFTBase.test_non_ndarray_with_dtypeN)
r   r   r   rc   rk   r}   r   r   r   r   r/   r/   r/   r0   r   0  s    r   c                   @   r   )TestRFFTLongDoublec                 C   r   r2   )r&   r   r_   	longfloatr-   ra   r/   r/   r0   rc   h  r   zTestRFFTLongDouble.setup_methodNr   r/   r/   r/   r0   r   e  r   r   c                   @   r   )TestRFFTDoublec                 C   r   r2   r   ra   r/   r/   r0   rc   n  r   zTestRFFTDouble.setup_methodNr   r/   r/   r/   r0   r   m  r   r   c                   @   r   )TestRFFTSinglec                 C   r   r2   r   ra   r/   r/   r0   rc   t  r   zTestRFFTSingle.setup_methodNr   r/   r/   r/   r0   r   s  r   r   c                   @   r[   )_TestIRFFTBasec                 C   r   r]   r   ra   r/   r/   r0   rc   z  r   z_TestIRFFTBase.setup_methodc                    sT   g d}g d}|d d }g d}|d d } fdd}||| ||| d S )N)rQ          @      @rf   y      ?       @y      @      @)rQ   r   rf   r   rn          @            @      r   rh   )	rQ   r   rf   r   y      @      @y      @      r   r   r   c                    s`   t tj|  jdt|d}t| t|}t|j j t	|| j
d t	|t| j
d d S )Nr?   ro   )decimal)r   r&   r   r_   rB   rV   r   r5   r-   r   ndecr	   )r)   xrr*   rj   ra   r/   r0   _test  s
   z-_TestIRFFTBase.test_definition.<locals>._testr/   )rb   rU   x1_1x2_1rs   r   r/   ra   r0   rk   }  s   
z_TestIRFFTBase.test_definitionc                 C   s   t ddD ]:}d| }td|ddtd|d d  }d|d< |d dkr0t|d |d< tj|}t|}t|| qd S )Nr"   rx   r   r   rQ   )rC   r&   r   rT   r
   r   r   r   r/   r/   r0   r}     s   $z_TestIRFFTBase.test_djbfftc                 C   s   dD ]C}t |g| j}tt||d}tt||d d d}t|j| j t|j| j t||| j	d| d t||| j	d| d qd S )Nr   ro   r"   rQ   zsize=%d)r   r.   )
r3   r7   r-   r   r   r   r5   r_   r   r   r   r/   r/   r0   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|}t||||| j  tt
|dt| d }t||||| j  qd S )Nr   r   r^   r"   rQ   )r-   r&   r   float64r   r   r3   r`   r!   r7   r   r   rB   r1   )rb   r+   r,   r)   r*   r/   r/   r0   r     s   z!_TestIRFFTBase.test_size_accuracyc                 C   r~   r   )r   r   r   ra   r/   r/   r0   r     r   z!_TestIRFFTBase.test_invalid_sizesN)	r   r   r   rc   rk   r}   r   r   r   r/   r/   r/   r0   r   y  s    r   c                   @   r   )TestIRFFTLongDoublec                 C      t j| _t j| _d| _d S Nrx   r&   r   r_   r   r-   r   ra   r/   r/   r0   rc        
z TestIRFFTLongDouble.setup_methodNr   r/   r/   r/   r0   r     r   r   c                   @   r   )TestIRFFTDoublec                 C   r   r   r   ra   r/   r/   r0   rc     r   zTestIRFFTDouble.setup_methodNr   r/   r/   r/   r0   r     r   r   c                   @   r   )TestIRFFTSinglec                 C   r   )Nrh   )r&   r   r_   r   r-   r   ra   r/   r/   r0   rc     r   zTestIRFFTSingle.setup_methodNr   r/   r/   r/   r0   r     r   r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )Testfft2c                 C   r   r]   r   ra   r/   r/   r0   rc     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.rn   rn   r"      r   srX   N)rz   onesr   r
   r   r   rb   r)   r*   y_rr/   r/   r0   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 )NrQ   r"   rn   r   )r   r   r   ra   r/   r/   r0   r     s   zTestfft2.test_invalid_sizesN)r   r   r   rc   r   r   r/   r/   r/   r0   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   r]   r   ra   r/   r/   r0   rc     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rQ   r"   re   rn   rh         r   	   z-double precision output with single precision)msg)r   r&   r   r   r   r5   r   r   r   r/   r/   r0   rk     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 )Nr     r&   r3   r!   r   rT   r7   r   r   r   r   r5   r   r   r/   r/   r0   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 )Nre   r   r  r  r   r/   r/   r0   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   r5   r   r   r   r/   r/   r0   test_definition_float16  s   z&TestFftnSingle.test_definition_float16c                 C   r  )Nr   g    Ar&   r3   r!   r   rT   r7   r   r   r   r   r5   r   r   r/   r/   r0   test_float16_input_small  r  z'TestFftnSingle.test_float16_input_smallc                 C   r  )Nre   r   g    >Ar
  r   r/   r/   r0   test_float16_input_large  r  z'TestFftnSingle.test_float16_input_largeN)r   r   r   rc   rk   pytestmarkparametrizeSMALL_COMPOSITE_SIZESSMALL_PRIME_SIZESr  r   r   r  r	  r  r  r/   r/   r/   r0   r     s    

	
r   c                   @   sT   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d ZdS )TestFftnc                 C   r   r]   r   ra   r/   r/   r0   rc   #  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         rh   rn   re   r  )r   r   rN   r3   rb   r)   r*   r/   r/   r0   rk   &  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         )   rx      )         )   r     )         )   r     )rQ   r   r  )rn   r  r!  )r   r  r$  )r"   r  r  )rh   rx   r"  )r   r  r  )re   r  r   )r   r  r#  )r   r  r%  )rQ   rn   r   )r   r  r  )r  r!  r$  )r"   rh   r   )r  rx   r  )r  r"  r  )re   r   r   )r  r  r  )r   r#  r%  )r   r   r   rW   r   rQ   r"   )r   r"   )r   r   )r"   rQ   r   r   r   )r"   r   rQ   r   )rQ   r"   r   )rQ   r   r"   )r   r"   rQ   r   r   r   rQ   r"   rQ   r"   r   )r   r   r   r   )r   r   )r   r   r   re   r   r   r/   )r   r   r   r   rC   r
   )rb   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*   rF   jr/   r/   r0   test_axes_argument3  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   rQ   r"   re   r   rn   rh   r   r   r   r   r   r   rn   rn   r   )re   rn   r   )r   r   rb   small_xlarge_x1r*   r/   r/   r0   test_shape_argument  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   rF  rG  )r   r   r   r   rH  rI  r'  r   r)  r   r   )r   r   r   r   rK  r/   r/   r0   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   rh   re   r   r*  )r   )rX   r   r   r   )rK   r;   r+  r   r   r   r   )rz   r3   r   r   r
   r  r/   r/   r0   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   z)shape requires more axes than are presentr   )r   r   r"   rQ   rJ  )r   r   r   r   r   r/   r/   r0   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\]\) specifiedrQ   r"   r   )r   r   r   ra   r/   r/   r0   r        "zTestFftn.test_invalid_sizesc                 C   &   t jd}tt|g d|dd d S N)r"   r"   r"   rW   gHz>r   )rz   r3   r   r   r   r/   r/   r0   test_no_axes     zTestFftn.test_no_axesN)r   r   r   rc   rk   rE  rN  rO  rP  rQ  r   rX  r/   r/   r/   r0   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d ZdS )	TestIfftnNc                 C   r   r]   r   ra   r/   r/   r0   rc     r   zTestIfftn.setup_methoddtype,cdtype,maxnlpr    c                 C      t jg dg dg dg|d}t|}t|j| t|t|| td}tt|t|| td}tt|t|| d S Nr   r   r   r?   r  r  )r&   r   r   r   r5   r   rP   r3   rb   r5   cdtypemaxnlpr)   r*   r/   r/   r0   rk        
zTestIfftn.test_definitionra  r,   rQ   r"   r       r   \   c                 C   sH   t ||gdt ||g  }ttt||| ttt||| d S )Nr   )r3   r   r   r   )rb   ra  r,   r)   r/   r/   r0   r     s   zTestIfftn.test_random_complexc                 C   rR  rS  )r   r   r   ra   r/   r/   r0   r     rT  zTestIfftn.test_invalid_sizesc                 C   rU  rV  )rz   r3   r   r   r   r/   r/   r0   rX  '  rY  zTestIfftn.test_no_axes)r   r   r   r5   r`  rc   r  r  r  r&   r   
complex128r   r   rk   r   r   rX  r/   r/   r/   r0   rZ    s    
rZ  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	g d
dd Zejdeegdd Zejdeegdd Zdd ZdS )	TestRfftnNc                 C   r   r]   r   ra   r/   r/   r0   rc   /  r   zTestRfftn.setup_methodr[  r  r\  c                 C   r]  r^  )r&   r   r   r   r5   r   rZ   r3   r_  r/   r/   r0   rk   2  rb  zTestRfftn.test_definitionr,   rc  c                 C   s*   t ||g}ttt||j|dd d S )Nr   rW  )r3   r   r   r   rq   )rb   r,   r)   r/   r/   r0   test_randomC  s   zTestRfftn.test_randomfuncc                 C   s~   t tdd |g g W d    n1 sw   Y  t tdd |ddgddggd W d    d S 1 s8w   Y  d S rS  r   r   rb   ri  r/   r/   r0   r   H  s   "zTestRfftn.test_invalid_sizesc                 C   s>   t tdd |g g d W d    d S 1 sw   Y  d S )Nz#at least 1 axis must be transformedr   rW   rj  rk  r/   r/   r0   rX  T  s
   "zTestRfftn.test_no_axesc                 C   sF   t tdd ttjdtjd W d    d S 1 sw   Y  d S )Nr   r   r   r?   )r   r   r   r&   r   r   ra   r/   r/   r0   r   Z  s   "zTestRfftn.test_complex_input)r   r   r   r5   r`  rc   r  r  r  r&   r   rf  r   r   rk   rh  r   r   r   rX  r   r/   r/   r/   r0   rg  +  s"    



rg  c                   @   r   )	FakeArrayc                 C   s   || _ |j| _d S r2   )_data__array_interface__r   r/   r/   r0   r   `  s   zFakeArray.__init__N)r   r   r   r   r/   r/   r/   r0   rl  _  r   rl  c                   @   r   )
FakeArray2c                 C   s
   || _ d S r2   rm  r   r/   r/   r0   r   f  s   
zFakeArray2.__init__c                 C   s   | j S r2   rp  ra   r/   r/   r0   	__array__i  s   zFakeArray2.__array__N)r   r   r   r   rq  r/   r/   r/   r0   ro  e  r   ro  c                   @   s  e Zd ZdZejejejgZeej	ej
ejg 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  rd  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 r2   r/   rY   r/   r/   r0   <lambda>w  s    z&TestOverwrite._check.<locals>.<lambda>)overwrite_xz%%s(%s%r, %r, axis=%r, overwrite_x=%r)zspurious overwrite in %s)r.   )copyrl  ro  r   r5   rq   r   )
rb   r)   routinefftsizerK   rt  should_overwriters   fakesigr/   r/   r0   _checku  s   zTestOverwrite._checkc           
      C   s   t jd t |t jrt jj| dt jj|   }nt jj| }||}|o2||v o2||| k}	| j||||||	d d S )Nr^   r   rt  rx  )r&   r3   r`   
issubdtypecomplexfloatingrandnr7   r{  )
rb   rv  r5   rq   rK   overwritable_dtypesrw  rt  r<   rx  r/   r/   r0   	_check_1d  s   


zTestOverwrite._check_1dr5   rw  rt  TFz
shape,axes))r  r   )r  r"   r   )r"   r  rQ   c              	   C   s@   t jt jt jf}| t|||||| | t|||||| d S r2   )r&   r   rf  r   r  r
   r	   rb   r5   rw  rt  rq   rX   overwritabler/   r/   r0   test_fft_ifft  s   zTestOverwrite.test_fft_ifftc              	   C   s6   | j }| t|||||| | t|||||| d S r2   )real_dtypesr  r   r   r  r/   r/   r0   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d  fdd}||D ]'}	| j|||	||||	|d	 |jd
krh| j|j	||	|||j	|	|d	 qAd S )Nr^   r   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"   rQ   )rB   )shprD  rest)fftshape_iterr/   r0   r    s   
"z2TestOverwrite._check_nd_one.<locals>.fftshape_iterc                 S   s   |d u r| S t t| |S r2   )tupler&   take)rq   rX   r/   r/   r0   
part_shape  s   z/TestOverwrite._check_nd_one.<locals>.part_shapec                    s,   | j |}ot|t|ko v S r2   )rq   r&   prod)r<   rq   rX   r   )r5   r  rt  r  r/   r0   rx    s   z5TestOverwrite._check_nd_one.<locals>.should_overwriter|  rQ   )
r&   r3   r`   r}  r~  r  r7   r{  rL   T)
rb   rv  r5   rq   rX   r  rt  r<   rx  fftshaper/   )r5   r  r  rt  r  r0   _check_nd_one  s,   


zTestOverwrite._check_nd_one))r  N)r  r,  )r  r,  )r  rQ   )r   r  N)r  r   rQ   )r   r  r"   r  )r  r(  )r  r,  )r  r  )r  )r"   )r  N)r  r&  c                 C   s<   t jt jt jf}| t||||| | t||||| d S r2   )r&   r   rf  r   r  r   r   )rb   r5   rt  rq   rX   r  r/   r/   r0   test_fftn_ifftn  s   zTestOverwrite.test_fftn_ifftnN)r   r   r   __doc__r&   r   r   r   r  r   rf  r   dtypesfftsizesr{  r  r  r  r  r  r  r  r  r/   r/   r/   r0   rr  n  s,    
(rr  ri  c                 C   sL   t jdtd}ttdd | |dd W d    d S 1 sw   Y  d S )Nr   r?   zBInvalid norm value 'o', should be "backward", "ortho" or "forward"r   o)r(   )r&   r   floatr   r   )ri  r)   r/   r/   r0   test_invalid_norm  s   "r  c                 C   s>   t jd}|dd|d  }t| t|| | d S )Nr^   r   r   r&   r3   RandomStater!   r   r9   ri  rngr)   r/   r/   r0   test_swapped_byte_order_complex  s   r  c                 C   s0   t jd}|d}t| t|| | d S )Nr^   r   r  r  r/   r/   r0   test_swapped_byte_order_real  s   
r  )Xnumpy.testingr   r   r   r   r   r   r  r   r   scipy.fft._pocketfftr	   r
   r   r   r   r   r   r   r   r   r   r   r   rz   r   r   r   r   r   r   r   r   r   r   r&   	numpy.fftnumpy.randomr!   r   r  r   r  r1   r3   r9   r=   rG   rH   rN   rP   rR   rV   rZ   r\   r   r   r   r   r   r  skipifr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  rZ  rg  rl  ro  rr  r  r  r  r  r/   r/   r/   r0   <module>   s    <0



0M5C= \.4	z

