o
    e!                     @   sP  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! 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 Z0dd Z1dd Z2dd Z3G dd  d Z4G d!d" d"e4Z5G d#d$ d$e4Z6G d%d& d&e4Z7G d'd( d(Z8G d)d* d*Z9ej:j;e"j<e"j=u d+d,G d-d. d.e9Z>G d/d0 d0e9Z?G d1d2 d2e9Z@G d3d4 d4ZAej:j;e"jBe"j=u d+d,G d5d6 d6eAZCG d7d8 d8eAZDG d9d: d:eAZEG d;d< d<ZFej:j;e"jBe"j=u d+d,G d=d> d>eFZGG d?d@ d@eFZHG dAdB dBeFZIG dCdD dDZJG dEdF dFZKG dGdH dHZLG dIdJ dJZMG dKdL dLZNG dMdN dNZOG dOdP dPZPG dQdR dRZQej:RdSeeeeeeeegdTdU ZSej:RdSeeeeeeeegdVdW ZTej:RdSeeeegdXdY ZUdS )Z    )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arrayasarrayzerosdotexppiswapaxes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.   T/var/www/myenv/lib/python3.10/site-packages/scipy/fft/_pocketfft/tests/test_basic.py_assert_close_in_norm&   s   (r0   c                 C   s   t |  S Nr   )r+   r.   r.   r/   random,   s   r2   c                 C   s   | j d}| |S )z-Returns the same array with swapped byteorderS)dtypenewbyteorderastype)arrr4   r.   r.   r/   swap_byteorder/   s   
r8   c                 C   sZ   t | } t| }t|td}t| dt |  }t|D ]}tt|| | ||< q|S Nr4                  @	r   lenr   r   r   r   ranger   r   r(   nr)   wir.   r.   r/   
direct_dft4   s   rC   c                 C   s\   t | } t| }t|td}t|dt |  }t|D ]}tt|| | | ||< q|S r9   r<   r?   r.   r.   r/   direct_idft>   s   rD   c                 C   (   t | } t| jD ]}t| |d} q	| S N)axis)r   r>   ndimr
   r(   rG   r.   r.   r/   direct_dftnH      rJ   c                 C   rE   rF   )r   r>   rH   r	   rI   r.   r.   r/   direct_idftnO   rK   rL   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   r=   r   r   r   r   r>   r   r   )r(   r@   rA   r)   rB   r.   r.   r/   direct_rdftV   s   rN   c                 C   sj   t | } t|td}t|d d D ]}| | ||< |dkr/d| |k r/t| | ||| < qt|jS )Nr:   r!   rM   r   )r   r   r   r>   r%   conjrD   real)r(   r@   x1rB   r.   r.   r/   direct_irdft`   s   
rR   c                 C   s   t t| t| jd dS )NrM   axes)r   r   r>   rH   r(   r.   r.   r/   direct_rdftnj   s   rV   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%   r2   seedselfr.   r.   r/   setup_methodo   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rM   r!            @      ?rM   r!   ra   y      @       @r:   rM   r!   ra   y      @           )r%   r   r[   r
   r   r4   rC   r   r^   r(   r)   y1r.   r.   r/   test_definitiont   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rM   r!   ra      r:   rj   r@   r!   rj   r   rM   )
r%   r   r,   r
   r   r4   r[   shaper   rC   r^   rQ   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)rM   r!   ra   rb   r:   rj   rk   rl   r   rM   )	r%   r   r[   r
   r   r4   rm   r   rC   rn   r.   r.   r/   _test_n_argument_complex   rq   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!      )r>   r%   r   r
   r6   complexnumpyr   r^   rB   r@   r(   r)   y2r.   r.   r/   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 NrM   r!   )assert_raises
ValueErrorr
   r]   r.   r.   r/   test_invalid_sizes      z_TestFFTBase.test_invalid_sizesN)	__name__
__module____qualname__r_   rg   rp   rr   ry   r   r.   r.   r.   r/   rX   n   s    			
rX   c                   @      e Zd Zdd ZdS )TestLongDoubleFFTc                 C      t j| _t j| _d S r1   )r%   longcomplexr[   
longdoubler,   r]   r.   r.   r/   r_         zTestLongDoubleFFT.setup_methodNr   r   r   r_   r.   r.   r.   r/   r          r   c                   @   r   )TestDoubleFFTc                 C   r   r1   r%   r   r[   doubler,   r]   r.   r.   r/   r_      r   zTestDoubleFFT.setup_methodNr   r.   r.   r.   r/   r      r   r   c                   @   r   )TestSingleFFTc                 C   r   r1   r%   	complex64r[   float32r,   r]   r.   r.   r/   r_      r   zTestSingleFFT.setup_methodNr   r.   r.   r.   r/   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 )Nri   r:   rj   rk   )rj   r%   r   float16r
   r   r4   r   rm   r   rC   r6   r   )r^   rQ   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 rh   r   rn   r.   r.   r/   rp      s   z#TestFloat16FFT.test_n_argument_realN)r   r   r   r   rp   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 )_TestIFFTBasec                 C      t jd d S rY   r%   r2   r\   r]   r.   r.   r/   r_         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 )Nr`   rc   )r%   r   r[   r	   rD   r   r4   r   re   r.   r.   r/   rg      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rM   r!   ra   rj   rM   r!   ra   rj   rM   r!   ra   rj   rd   r:   )	r%   r   r,   r	   r   r4   r[   rD   r   re   r.   r.   r/   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!   rt   )r*   atol)r>   r%   r   r	   r6   r[   rv   r
   r   r*   r   rw   r.   r.   r/   ry      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	rM   3   o   d      @         i                 ?)r2   r6   r[   r	   r
   r   r4   r   r^   r+   r(   rf   rx   r.   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   )	r2   r6   r,   r	   r
   r   r4   r[   r   r   r.   r.   r/   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 )NrZ   r   )LARGE_COMPOSITE_SIZESLARGE_PRIME_SIZESr%   r2   r\   r    r6   r,   r	   r
   r0   r*   r[   )r^   r+   r(   r)   r.   r.   r/   test_size_accuracy   s   z _TestIFFTBase.test_size_accuracyc                 C   rz   r{   )r}   r~   r	   r]   r.   r.   r/   r     r   z _TestIFFTBase.test_invalid_sizesN)r   r   r   r_   rg   r   ry   r   r   r   r   r.   r.   r.   r/   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   r]   r.   r.   r/   r_        
zTestLongDoubleIFFT.setup_methodNr   r.   r.   r.   r/   r         r   c                   @   r   )TestDoubleIFFTc                 C   r   r   )r%   r   r[   r   r,   r*   r   r]   r.   r.   r/   r_     r   zTestDoubleIFFT.setup_methodNr   r.   r.   r.   r/   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   r]   r.   r.   r/   r_   #  r   zTestSingleIFFT.setup_methodNr   r.   r.   r.   r/   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   rY   r   r]   r.   r.   r/   r_   +  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   )	rM   r!   ra   rj   rM   r!   ra   rj   rd   r:   )	r%   r   r,   r   rN   r   r   r4   r[   )r^   tr(   r)   rf   r.   r.   r/   rg   .  s   
z_TestRFFTBase.test_definitionc                 C   sD   t ddD ]}d| }t|}tj|}t|}t|| qd S rs   )r>   r%   r   r
   r   r   r^   rB   r@   r(   rf   r)   r.   r.   r/   ry   6  s   
z_TestRFFTBase.test_djbfftc                 C   rz   r{   )r}   r~   r   r]   r.   r.   r/   r   >  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   r^   r(   r.   r.   r/   test_complex_inputB  s   
"z _TestRFFTBase.test_complex_inputc                   @   r   )z_TestRFFTBase.MockSeriesc                 C   s   t || _d S r1   )r%   r   datar^   r   r.   r.   r/   __init__I  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)r^   itemer.   r.   r/   __getattr__L  s   z$_TestRFFTBase.MockSeries.__getattr__N)r   r   r   r   r   r.   r.   r.   r/   
MockSeriesH      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   )r^   r(   xsexpectedr.   r.   r/   test_non_ndarray_with_dtypeT  s   

z)_TestRFFTBase.test_non_ndarray_with_dtypeN)
r   r   r   r_   rg   ry   r   r   r   r   r.   r.   r.   r/   r   *  s    r   c                   @   r   )TestRFFTLongDoublec                 C   r   r1   )r%   r   r[   	longfloatr,   r]   r.   r.   r/   r_   b  r   zTestRFFTLongDouble.setup_methodNr   r.   r.   r.   r/   r   _  r   r   c                   @   r   )TestRFFTDoublec                 C   r   r1   r   r]   r.   r.   r/   r_   h  r   zTestRFFTDouble.setup_methodNr   r.   r.   r.   r/   r   g  r   r   c                   @   r   )TestRFFTSinglec                 C   r   r1   r   r]   r.   r.   r/   r_   n  r   zTestRFFTSingle.setup_methodNr   r.   r.   r.   r/   r   m  r   r   c                   @   rW   )_TestIRFFTBasec                 C   r   rY   r   r]   r.   r.   r/   r_   t  r   z_TestIRFFTBase.setup_methodc                    sT   g d}g d}|d d }g d}|d d } fdd}||| ||| d S )N)rM          @      @rb   y      ?       @y      @      @)rM   r   rb   r   rj          @            @      r   rd   )	rM   r   rb   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:   rk   )decimal)r   r%   r   r[   r=   rR   r   r4   r,   r   ndecr	   )r(   xrr)   rf   r]   r.   r/   _test~  s
   z-_TestIRFFTBase.test_definition.<locals>._testr.   )r^   rQ   x1_1x2_1ro   r   r.   r]   r/   rg   w  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!   rt   r   r   rM   )r>   r%   r   rP   r
   r   r   r   r.   r.   r/   ry     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   rk   r!   rM   zsize=%d)r   r-   )
r2   r6   r,   r   r   r   r4   r[   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|}t||||| j  tt
|dt| d }t||||| j  qd S )Nr   r   rZ   r!   rM   )r,   r%   r   float64r   r   r2   r\   r    r6   r   r   r=   r0   )r^   r*   r+   r(   r)   r.   r.   r/   r     s   z!_TestIRFFTBase.test_size_accuracyc                 C   rz   r{   )r}   r~   r   r]   r.   r.   r/   r     r   z!_TestIRFFTBase.test_invalid_sizesN)	r   r   r   r_   rg   ry   r   r   r   r.   r.   r.   r/   r   s  s    r   c                   @   r   )TestIRFFTLongDoublec                 C      t j| _t j| _d| _d S Nrt   r%   r   r[   r   r,   r   r]   r.   r.   r/   r_        
z TestIRFFTLongDouble.setup_methodNr   r.   r.   r.   r/   r     r   r   c                   @   r   )TestIRFFTDoublec                 C   r   r   r   r]   r.   r.   r/   r_     r   zTestIRFFTDouble.setup_methodNr   r.   r.   r.   r/   r     r   r   c                   @   r   )TestIRFFTSinglec                 C   r   )Nrd   )r%   r   r[   r   r,   r   r]   r.   r.   r/   r_     r   zTestIRFFTSingle.setup_methodNr   r.   r.   r.   r/   r     r   r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )Testfft2c                 C   r   rY   r   r]   r.   r.   r/   r_     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.rj   rj   r!      r   srT   N)rv   onesr   r
   r   r   r^   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 )NrM   r!   rj   r   )r}   r~   r   r]   r.   r.   r/   r     s   zTestfft2.test_invalid_sizesN)r   r   r   r_   r   r   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   rY   r   r]   r.   r.   r/   r_     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rM   r!   ra   rj   rd         r   	   z-double precision output with single precision)msg)r   r%   r   r   r   r4   r   r   r   r.   r.   r/   rg     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%   r2   r    r   rP   r6   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 )Nra   r   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   )Nr   g    Ar%   r2   r    r   rP   r6   r   r   r   r   r4   r   r   r.   r.   r/   test_float16_input_small	  r  z'TestFftnSingle.test_float16_input_smallc                 C   r  )Nra   r   g    >Ar  r   r.   r.   r/   test_float16_input_large  r  z'TestFftnSingle.test_float16_input_largeN)r   r   r   r_   rg   pytestmarkparametrizeSMALL_COMPOSITE_SIZESSMALL_PRIME_SIZESr  r   r   r  r  r  r	  r.   r.   r.   r/   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   rY   r   r]   r.   r.   r/   r_     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         rd   rj   ra   r  )r   r   rJ   r2   r^   r(   r)   r.   r.   r/   rg      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         )   rt      )         )   r     )         )   r     )rM   r   r  )rj   r  r  )r   r  r!  )r!   r  r  )rd   rt   r  )r   r  r  )ra   r  r  )r   r  r   )r   r  r"  )rM   rj   r   )r   r  r  )r  r  r!  )r!   rd   r   )r  rt   r  )r  r  r  )ra   r   r   )r  r  r  )r  r   r"  )r   r   r   rS   r   rM   r!   )r   r!   )r   r   )r!   rM   r   r   r   )r!   r   rM   r   )rM   r!   r   )rM   r   r!   )r   r!   rM   r   r   r   rM   r!   rM   r!   r   )r   r   r   r   )r   r   )r   r   r   ra   r   r   r.   )r   r   r   r   r>   r
   )r^   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)   rB   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   rM   r!   ra   r   rj   rd   r   r   r   r   r   r   rj   rj   r   )ra   rj   r   )r   r   r^   small_xlarge_x1r)   r.   r.   r/   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   rC  rD  )r   r   r   r   rE  rF  r$  r   r&  r   r   )r   r   r   r   rH  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   rd   ra   r   r'  )r   )rT   r   r   r   )rG   r@   r(  r   r   r   r   )rv   r2   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   z)shape requires more axes than are presentr   )r   r   r!   rM   rG  )r   r}   r~   r   r   r.   r.   r/   test_shape_argument_more  s   "z!TestFftn.test_shape_argument_morec                 C   ~   t tdd tg g W d    n1 sw   Y  t tdd tddgddggd W d    d S 1 s8w   Y  d S Nz4invalid number of data points \(\[1, 0\]\) specifiedr   z5invalid number of data points \(\[4, -3\]\) specifiedrM   r!   r   )r}   r~   r   r]   r.   r.   r/   r        "zTestFftn.test_invalid_sizesc                 C   &   t jd}tt|g d|dd d S N)r!   r!   r!   rS   gHz>r   )rv   r2   r   r   r   r.   r.   r/   test_no_axes     zTestFftn.test_no_axesN)r   r   r   r_   rg   rB  rK  rL  rM  rN  r   rU  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d ZdS )	TestIfftnNc                 C   r   rY   r   r]   r.   r.   r/   r_     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   r4   r   rL   r2   r^   r4   cdtypemaxnlpr(   r)   r.   r.   r/   rg        
zTestIfftn.test_definitionr^  r+   rM   r!   r       r   \   c                 C   sH   t ||gdt ||g  }ttt||| ttt||| d S )Nr   )r2   r   r   r   )r^   r^  r+   r(   r.   r.   r/   r     s   zTestIfftn.test_random_complexc                 C   rO  rP  )r}   r~   r   r]   r.   r.   r/   r     rQ  zTestIfftn.test_invalid_sizesc                 C   rR  rS  )rv   r2   r   r   r   r.   r.   r/   rU  !  rV  zTestIfftn.test_no_axes)r   r   r   r4   r]  r_   r
  r  r  r%   r   
complex128r   r   rg   r   r   rU  r.   r.   r.   r/   rW    s    
rW  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   rY   r   r]   r.   r.   r/   r_   )  r   zTestRfftn.setup_methodrX  r   rY  c                 C   rZ  r[  )r%   r   r   r   r4   r   rV   r2   r\  r.   r.   r/   rg   ,  r_  zTestRfftn.test_definitionr+   r`  c                 C   s*   t ||g}ttt||j|dd d S )Nr   rT  )r2   r   r   r   rm   )r^   r+   r(   r.   r.   r/   test_random=  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 rP  r}   r~   r^   rf  r.   r.   r/   r   B  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   rS   rg  rh  r.   r.   r/   rU  N  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   r]   r.   r.   r/   r   T  s   "zTestRfftn.test_complex_input)r   r   r   r4   r]  r_   r
  r  r  r%   r   rc  r   r   rg   re  r   r   r   rU  r   r.   r.   r.   r/   rd  %  s"    



rd  c                   @   r   )	FakeArrayc                 C   s   || _ |j| _d S r1   )_data__array_interface__r   r.   r.   r/   r   Z  s   zFakeArray.__init__N)r   r   r   r   r.   r.   r.   r/   ri  Y  r   ri  c                   @   r   )
FakeArray2c                 C   s
   || _ d S r1   rj  r   r.   r.   r/   r   `  s   
zFakeArray2.__init__c                 C   s   | j S r1   rm  r]   r.   r.   r/   	__array__c  s   zFakeArray2.__array__N)r   r   r   r   rn  r.   r.   r.   r/   rl  _  r   rl  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  ra  c           
   	   C   sd   |  }dd ttfD ]$}||||||d d|j|j|j|||}	|s/t||d|	 d qd S )Nc                 S   s   | S r1   r.   rU   r.   r.   r/   <lambda>q  s    z&TestOverwrite._check.<locals>.<lambda>)overwrite_xz-{}({}{!r}, {!r}, axis={!r}, overwrite_x={!r})zspurious overwrite in %s)r-   )copyri  rl  r   r   r4   rm   r   )
r^   r(   routinefftsizerG   rq  should_overwritero   fakesigr.   r.   r/   _checko  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 )NrZ   r   rq  ru  )r%   r2   r\   
issubdtypecomplexfloatingrandnr6   rx  )
r^   rs  r4   rm   rG   overwritable_dtypesrt  rq  r   ru  r.   r.   r/   	_check_1dy  s   


zTestOverwrite._check_1dr4   rt  rq  TFz
shape,axes))r  r   )r  r!   r   )r!   r  rM   c              	   C   s@   t jt jt jf}| t|||||| | t|||||| d S r1   )r%   r   rc  r   r~  r
   r	   r^   r4   rt  rq  rm   rT   overwritabler.   r.   r/   test_fft_ifft  s   zTestOverwrite.test_fft_ifftc              	   C   s6   | j }| t|||||| | t|||||| d S r1   )real_dtypesr~  r   r   r  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d  fdd}||D ]'}	| j|||	||||	|d	 |jd
krh| j|j	||	|||j	|	|d	 qAd S )NrZ   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!   rM   )r=   )shprA  rest)fftshape_iterr.   r/   r    s   
"z2TestOverwrite._check_nd_one.<locals>.fftshape_iterc                 S   s   |d u r| S t t| |S r1   )tupler%   take)rm   rT   r.   r.   r/   
part_shape  s   z/TestOverwrite._check_nd_one.<locals>.part_shapec                    s,   | j |}ot|t|ko v S r1   )rm   r%   prod)r   rm   rT   r   )r4   r}  rq  r  r.   r/   ru    s   z5TestOverwrite._check_nd_one.<locals>.should_overwritery  rM   )
r%   r2   r\   rz  r{  r|  r6   rx  rH   T)
r^   rs  r4   rm   rT   r}  rq  r   ru  fftshaper.   )r4   r  r}  rq  r  r/   _check_nd_one  s,   


zTestOverwrite._check_nd_one))r  N)r  r)  )r  r)  )r  rM   )r   r  N)r  r   rM   )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 r1   )r%   r   rc  r   r  r   r   )r^   r4   rq  rm   rT   r  r.   r.   r/   test_fftn_ifftn  s   zTestOverwrite.test_fftn_ifftnN)r   r   r   __doc__r%   r   r   r   r  r   rc  r   dtypesfftsizesrx  r~  r
  r  r  r  r  r  r  r.   r.   r.   r/   ro  h  s,    
(ro  rf  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~   )rf  r(   r.   r.   r/   test_invalid_norm  s   "r  c                 C   s>   t jd}|dd|d  }t| t|| | d S )NrZ   r   r   r%   r2   RandomStater    r   r8   rf  rngr(   r.   r.   r/   test_swapped_byte_order_complex  s   r  c                 C   s0   t jd}|d}t| t|| | d S )NrZ   r   r  r  r.   r.   r/   test_swapped_byte_order_real  s   
r  )V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   rv   r   r   r   r   r   r   r   r   r   r%   	numpy.fftnumpy.randomr    r   r  r   r  r0   r2   r8   rC   rD   rJ   rL   rN   rR   rV   rX   r   r   r   r   r   r  skipifr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  rW  rd  ri  rl  ro  r  r  r  r  r.   r.   r.   r/   <module>   s    <,



0M5C= \.4	z

