o
    i                     @   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 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 Z/dd Z0dd Z1dd Z2G dd  d Z3G d!d" d"e3Z4G d#d$ d$e3Z5G d%d& d&e3Z6G d'd( d(Z7G d)d* d*Z8ej9j:e!j;e!j<u d+d,G d-d. d.e8Z=G d/d0 d0e8Z>G d1d2 d2e8Z?G d3d4 d4Z@ej9j:e!j;e!j<u d+d,G d5d6 d6e@ZAG d7d8 d8e@ZBG d9d: d:e@ZCG d;d< d<ZDej9j:e!j;e!j<u d+d,G d=d> d>eDZEG d?d@ d@eDZFG dAdB dBeDZGG dCdD dDZHG dEdF dFZIG dGdH dHZJG dIdJ dJZKG dKdL dLZLG dMdN dNZMG dOdP dPZNej9OdQeeeeeeeegdRdS ZPej9OdQeeeeeeeegdTdU ZQej9OdQeeeegdVdW ZRdS )X    )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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   npZlinalgnorm)xyrtolsizerdterr_msg r,   _/home/kim/smarthome/.venv/lib/python3.10/site-packages/scipy/fft/_pocketfft/tests/test_basic.py_assert_close_in_norm&   s   (r.   c                 C   s   t |  S Nr   )r)   r,   r,   r-   random,   s   r0   c                 C   s   | j d}| |S )z-Returns the same array with swapped byteorderS)dtypeZnewbyteorderastype)Zarrr2   r,   r,   r-   swap_byteorder/   s   
r4   c                 C   sZ   t | } t| }t|td}t| dt |  }t|D ]}tt|| | ||< q|S Nr2                  @	r   lenr   r   r   r   ranger   r   r&   nr'   wir,   r,   r-   
direct_dft4   s   r?   c                 C   s\   t | } t| }t|td}t|dt |  }t|D ]}tt|| | | ||< q|S r5   r8   r;   r,   r,   r-   direct_idft>   s   r@   c                 C   (   t | } t| jD ]}t| |d} q	| S N)axis)r   r:   ndimr
   r&   rC   r,   r,   r-   direct_dftnH      rF   c                 C   rA   rB   )r   r:   rD   r	   rE   r,   r,   r-   direct_idftnO   rG   rH   c                 C   sj   t | } t| }t| dt |  }t|d d td}t|d d D ]}tt|| | ||< q%|S )Nr7   r       r6   )	r   r9   r   r   r   r   r:   r   r   )r&   r<   r=   r'   r>   r,   r,   r-   direct_rdftV   s   rJ   c                 C   sj   t | } t|td}t|d d D ]}| | ||< |dkr/d| |k r/t| | ||| < qt|jS )Nr6   r    rI   r   )r   r   r   r:   r$   Zconjr@   real)r&   r<   x1r>   r,   r,   r-   direct_irdft`   s   
rM   c                 C   s   t t| t| jd dS )NrI   axes)r   r   r:   rD   r&   r,   r,   r-   direct_rdftnj   s   rQ   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$   r0   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rI   r             @      ?rI   r    r\   y      @       @r6   rI   r    r\   y      @           )r$   r   rV   r
   r   r2   r?   r   rY   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rI   r    r\      r6   re   r<   r    re   r   rI   )
r$   r   r*   r
   r   r2   rV   shaper   r?   rY   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)rI   r    r\   r]   r6   re   rf   rg   r   rI   )	r$   r   rV   r
   r   r2   rh   r   r?   ri   r,   r,   r-   _test_n_argument_complex   rl   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
   r3   complexnumpyr   rY   r>   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 NrI   r    )assert_raises
ValueErrorr
   rX   r,   r,   r-   test_invalid_sizes      z_TestFFTBase.test_invalid_sizesN)	__name__
__module____qualname__rZ   rb   rk   rm   rt   rz   r,   r,   r,   r-   rS   n   s    			
rS   c                   @      e Zd Zdd ZdS )TestLongDoubleFFTc                 C      t j| _t j| _d S r/   r$   clongdoublerV   
longdoubler*   rX   r,   r,   r-   rZ         zTestLongDoubleFFT.setup_methodNr|   r}   r~   rZ   r,   r,   r,   r-   r          r   c                   @   r   )TestDoubleFFTc                 C   r   r/   )r$   r   rV   float64r*   rX   r,   r,   r-   rZ      r   zTestDoubleFFT.setup_methodNr   r,   r,   r,   r-   r      r   r   c                   @   r   )TestSingleFFTc                 C   r   r/   r$   	complex64rV   float32r*   rX   r,   r,   r-   rZ      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 )Nrd   r6   re   rf   )re   r$   r   float16r
   r   r2   r   rh   r   r?   r3   r   )rY   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 rc   r   ri   r,   r,   r-   rk      s   z#TestFloat16FFT.test_n_argument_realN)r|   r}   r~   r   rk   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 rT   r$   r0   rW   rX   r,   r,   r-   rZ         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[   r^   )r$   r   rV   r	   r@   r   r2   r   r`   r,   r,   r-   rb      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rI   r    r\   re   rI   r    r\   re   rI   r    r\   re   r_   r6   )	r$   r   r*   r	   r   r2   rV   r@   r   r`   r,   r,   r-   test_definition_real   s   
z"_TestIFFTBase.test_definition_realc                 C   sz   t ddD ]5}d| }t|}t|| j}tj|| j}t||| j	| j
d t|}t||| j	| j
d qd S )Nr    ro   )r(   atol)r:   r$   r   r	   r3   rV   rq   r
   r   r(   r   rr   r,   r,   r-   rt      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	rI   3   o   d      @         i                 ?)r0   r3   rV   r	   r
   r   r2   r   rY   r)   r&   ra   rs   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   )	r0   r3   r*   r	   r
   r   r2   rV   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 NrU   r   )LARGE_COMPOSITE_SIZESLARGE_PRIME_SIZESr$   r0   rW   r   r3   r*   r	   r
   r.   r(   rV   )rY   r)   r&   r'   r,   r,   r-   test_size_accuracy   s   z _TestIFFTBase.test_size_accuracyc                 C   ru   rv   )rx   ry   r	   rX   r,   r,   r-   rz     r{   z _TestIFFTBase.test_invalid_sizesN)r|   r}   r~   rZ   rb   r   rt   r   r   r   rz   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   rV   r   r*   r(   r   rX   r,   r,   r-   rZ        
zTestLongDoubleIFFT.setup_methodNr   r,   r,   r,   r-   r         r   c                   @   r   )TestDoubleIFFTc                 C   r   r   )r$   
complex128rV   r   r*   r(   r   rX   r,   r,   r-   rZ     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   rV   r   r*   r(   r   rX   r,   r,   r-   rZ   #  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   rT   r   rX   r,   r,   r-   rZ   +  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   )	rI   r    r\   re   rI   r    r\   re   r_   r6   )	r$   r   r*   r   rJ   r   r   r2   rV   )rY   tr&   r'   ra   r,   r,   r-   rb   .  s   
z_TestRFFTBase.test_definitionc                 C   sD   t ddD ]}d| }t|}tj|}t|}t|| qd S rn   )r:   r$   r   r
   r   r   rY   r>   r<   r&   ra   r'   r,   r,   r-   rt   6  s   
z_TestRFFTBase.test_djbfftc                 C   ru   rv   )rx   ry   r   rX   r,   r,   r-   rz   >  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
   r6   x must be a real sequencematch)r$   r   rV   rx   	TypeErrorr   rY   r&   r,   r,   r-   test_complex_inputB  s   
"z _TestRFFTBase.test_complex_inputc                   @   r   )z_TestRFFTBase.MockSeriesc                 C   s   t || _d S r/   )r$   r   datarY   r   r,   r,   r-   __init__I  r   z!_TestRFFTBase.MockSeries.__init__c              
   C   s:   zt | j|W S  ty } z	td| d|d }~ww )Nz&'MockSeries' object has no attribute '')getattrr   AttributeError)rY   itemer,   r,   r-   __getattr__L  s   z$_TestRFFTBase.MockSeries.__getattr__N)r|   r}   r~   r   r   r,   r,   r,   r-   
MockSeriesH  s    r   c                 C   sB   t g d}t|}g d}t| t|| t|j| d S )N)g      ?g       @g      @g      @g      @r   )r$   r   r   r   r   r   r   )rY   r&   Zxsexpectedr,   r,   r-   test_non_ndarray_with_dtypeS  s   

z)_TestRFFTBase.test_non_ndarray_with_dtypeN)
r|   r}   r~   rZ   rb   rt   rz   r   r   r   r,   r,   r,   r-   r   *  s    r   c                   @   r   )TestRFFTLongDoublec                 C   r   r/   r   rX   r,   r,   r-   rZ   a  r   zTestRFFTLongDouble.setup_methodNr   r,   r,   r,   r-   r   ^  r   r   c                   @   r   )TestRFFTDoublec                 C   r   r/   )r$   r   rV   r   r*   rX   r,   r,   r-   rZ   g  r   zTestRFFTDouble.setup_methodNr   r,   r,   r,   r-   r   f  r   r   c                   @   r   )TestRFFTSinglec                 C   r   r/   r   rX   r,   r,   r-   rZ   m  r   zTestRFFTSingle.setup_methodNr   r,   r,   r,   r-   r   l  r   r   c                   @   rR   )_TestIRFFTBasec                 C   r   rT   r   rX   r,   r,   r-   rZ   s  r   z_TestIRFFTBase.setup_methodc                    sT   g d}g d}|d d }g d}|d d } fdd}||| ||| d S )N)rI          @      @r]   y      ?       @y      @      @)rI   r   r]   r   re          @            @      r   r_   )	rI   r   r]   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 )Nr6   rf   )decimal)r   r$   r   rV   r9   rM   r   r2   r*   r   ndecr	   )r&   Zxrr'   ra   rX   r,   r-   _test}  s
   z-_TestIRFFTBase.test_definition.<locals>._testr,   )rY   rL   Zx1_1Zx2_1rj   r   r,   rX   r-   rb   v  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    ro   r   r   rI   )r:   r$   r   rK   r
   r   r   r   r,   r,   r-   rt     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   rf   r    rI   zsize=%d)r   r+   )
r0   r3   r*   r   r   r   r2   rV   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   rU   r    rI   )r*   r$   r   r   r   r   r0   rW   r   r3   r   r   r9   r.   )rY   r(   r)   r&   r'   r,   r,   r-   r     s   z!_TestIRFFTBase.test_size_accuracyc                 C   ru   rv   )rx   ry   r   rX   r,   r,   r-   rz     r{   z!_TestIRFFTBase.test_invalid_sizesN)	r|   r}   r~   rZ   rb   rt   r   r   rz   r,   r,   r,   r-   r   r  s    r   c                   @   r   )TestIRFFTLongDoublec                 C      t j| _t j| _d| _d S Nro   r$   r   rV   r   r*   r   rX   r,   r,   r-   rZ        
z TestIRFFTLongDouble.setup_methodNr   r,   r,   r,   r-   r     r   r   c                   @   r   )TestIRFFTDoublec                 C   r   r   r   rX   r,   r,   r-   rZ     r   zTestIRFFTDouble.setup_methodNr   r,   r,   r,   r-   r     r   r   c                   @   r   )TestIRFFTSinglec                 C   r   )Nr_   )r$   r   rV   r   r*   r   rX   r,   r,   r-   rZ     r   zTestIRFFTSingle.setup_methodNr   r,   r,   r,   r-   r     r   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   rT   r   rX   r,   r,   r-   rZ     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rI   r    r\   re   r_            	   z-double precision output with single precision)msg)r   r$   r   r   r   r2   r   r   rY   r&   r'   Zy_rr,   r,   r-   rb     s   zTestFftnSingle.test_definitionr)   c                 C   v   t jd}|||fd|||f  }t|jt j}t|jt jt j}t	|j
t j t||d d S )NrU   r     r$   r0   default_rngr   rK   r3   r   r   r   r   r2   r   rY   r)   rngr&   ra   rs   r,   r,   r-   test_size_accuracy_small      z'TestFftnSingle.test_size_accuracy_smallc                 C   v   t jd}||dfd||df  }t|jt j}t|jt jt j}t	|j
t j t||d d S )NrU   r\   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   r2   r   r   r   r,   r,   r-   test_definition_float16  s   z&TestFftnSingle.test_definition_float16c                 C   r   )NrU   r   g    Ar$   r0   r   r   rK   r3   r   r   r   r   r2   r   r   r,   r,   r-   test_float16_input_small  r   z'TestFftnSingle.test_float16_input_smallc                 C   r   )NrU   r\   r   g    >Ar   r   r,   r,   r-   test_float16_input_large  r   z'TestFftnSingle.test_float16_input_largeN)r|   r}   r~   rZ   rb   pytestmarkparametrizeSMALL_COMPOSITE_SIZESSMALL_PRIME_SIZESr   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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   rT   r   rX   r,   r,   r-   rZ     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         r_   re   r\   r   )r   r   rF   r0   rY   r&   r'   r,   r,   r-   rb     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         )   ro      )         )   r      )         )   r      )rI   r   r  )re   r  r
  )r   r  r  )r    r  r   )r_   ro   r  )r   r  r   )r\   r  r	  )r   r  r  )r   r  r  )rI   re   r   )r   r  r  )r  r
  r  )r    r_   r   )r  ro   r  )r   r  r   )r\   r   r   )r  r  r  )r	  r  r  )r   rN   r   rI   r    )r   r    )r   r   )r    rI   r   r   r  )r    r   rI   r  )rI   r    r   )rI   r   r    )r   r    rI   r  r   r   rI   r    rI   r    r  r  )r  r   r   r  )r   r  )r  r  r   r\   r  r   r,   )r   r   r   r   r:   r
   )rY   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'   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   rI   r    r\   r   re   r_   r   r   r   r   r   r   re   re   s)r\   re   r   )r   r   rY   Zsmall_xZ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   r  r  )r   r   r   r   r  r  r  r   rO   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   r_   r\   r   r  )r   )rO   r   r   r   )rC   r<   r  r  re   re   r    r  r   r   )rq   r0   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    rI   r  )r   rx   ry   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\]\) specifiedrI   r    )re   r  )rx   ry   r   rX   r,   r,   r-   rz        "zTestFftn.test_invalid_sizesc                 C   &   t jd}tt|g d|dd d S N)r    r    r    rN   gHz>r   )rq   r0   r   r   r   r,   r,   r-   test_no_axes     zTestFftn.test_no_axesc                 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#  N)rq   Zonesr   r
   r   r   r,   r,   r-   test_regression_244  s   
zTestFftn.test_regression_244N)r|   r}   r~   rZ   rb   r  r"  r$  r'  r(  rz   r/  r1  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   rT   r   rX   r,   r,   r-   rZ     r   zTestIfftn.setup_methoddtype,cdtype,maxnlpr     c                 C      t jd}t jg dg dg dg|d}t|}t|j| t|t|| |d}tt|t|| |d}tt|t|| d S NrU   r   r   r   r6   r   r   )	r$   r0   r   r   r   r   r2   r   rH   rY   r2   cdtypemaxnlpr   r&   r'   r,   r,   r-   rb        


zTestIfftn.test_definitionr9  r)   rI   r    r       r   \   c                 C   sX   t jd}|||gd|||g  }ttt||| ttt||| d S r   )r$   r0   r   r   r   r   )rY   r9  r)   r   r&   r,   r,   r-   r   	  s    zTestIfftn.test_random_complexc                 C   r)  r*  )rx   ry   r   rX   r,   r,   r-   rz     r+  zTestIfftn.test_invalid_sizesc                 C   r,  r-  )rq   r0   r   r   r   r,   r,   r-   r/    r0  zTestIfftn.test_no_axes)r|   r}   r~   r2   r8  rZ   r   r   r   r$   r   r   r   r   rb   r   rz   r/  r,   r,   r,   r-   r2    s    
r2  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   rT   r   rX   r,   r,   r-   rZ   $  r   zTestRfftn.setup_methodr3  r   r4  c                 C   r5  r6  )	r$   r0   r   r   r   r   r2   r   rQ   r7  r,   r,   r-   rb   '  r:  zTestRfftn.test_definitionr)   r;  c                 C   s8   t jd}|||g}ttt||j|dd d S )NrU   r   r.  )r$   r0   r   r   r   r   rh   )rY   r)   r   r&   r,   r,   r-   test_random9  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 r*  rx   ry   rY   r@  r,   r,   r-   rz   ?  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   rN   rA  rB  r,   r,   r-   r/  K  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   r6   )rx   r   r   r$   r   r   rX   r,   r,   r-   r   Q  s   "zTestRfftn.test_complex_input)r|   r}   r~   r2   r8  rZ   r   r   r   r$   r   r   r   r   rb   r?  r   r   rz   r/  r   r,   r,   r,   r-   r>     s"    



r>  c                   @   r   )	FakeArrayc                 C   s   || _ |j| _d S r/   )_dataZ__array_interface__r   r,   r,   r-   r   W  s   zFakeArray.__init__N)r|   r}   r~   r   r,   r,   r,   r-   rC  V  r   rC  c                   @   s   e Zd Zdd ZdddZdS )
FakeArray2c                 C   s
   || _ d S r/   rD  r   r,   r,   r-   r   ]  s   
zFakeArray2.__init__Nc                 C   s   | j S r/   rF  )rY   r2   copyr,   r,   r-   	__array__`  s   zFakeArray2.__array__)NN)r|   r}   r~   r   rH  r,   r,   r,   r-   rE  \  s    rE  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  r<  c           
      C   sx   |  }dd ttfD ].}||||||d |j d|j |jd|d|d|d}	|s9t||d	|	 d
 qd S )Nc                 S   s   | S r/   r,   rP   r,   r,   r-   <lambda>n  s    z&TestOverwrite._check.<locals>.<lambda>)overwrite_x(z, z, axis=z, overwrite_x=)zspurious overwrite in )r+   )rG  rC  rE  r|   r2   rh   r   )
rY   r&   routinefftsizerC   rK  should_overwriterj   Zfakesigr,   r,   r-   _checkl  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 )NrU   r   rK  rP  )r$   r0   rW   
issubdtypecomplexfloatingrandnr3   rR  )
rY   rN  r2   rh   rC   overwritable_dtypesrO  rK  r   rP  r,   r,   r-   	_check_1dv  s   


zTestOverwrite._check_1dr2   rO  rK  TFz
shape,axes))r  r   )r  r    r   )r    r  rI   c              	   C   s@   t jt jt jf}| t|||||| | t|||||| d S r/   )r$   r   r   r   rX  r
   r	   rY   r2   rO  rK  rh   rO   overwritabler,   r,   r-   test_fft_ifft  s   zTestOverwrite.test_fft_ifftc              	   C   s6   | j }| t|||||| | t|||||| d S r/   )real_dtypesrX  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 )NrU   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    rI   )r9   )Zshpr  rest)fftshape_iterr,   r-   rb    s   
"z2TestOverwrite._check_nd_one.<locals>.fftshape_iterc                 S   s   |d u r| S t t| |S r/   )tupler$   Ztake)rh   rO   r,   r,   r-   
part_shape  s   z/TestOverwrite._check_nd_one.<locals>.part_shapec                    s,   | j |}ot|t|ko v S r/   )rh   r$   prod)r   rh   rO   r   )r2   rW  rK  rd  r,   r-   rP    s   z5TestOverwrite._check_nd_one.<locals>.should_overwriterS  rI   )
r$   r0   rW   rT  rU  rV  r3   rR  rD   T)
rY   rN  r2   rh   rO   rW  rK  r   rP  Zfftshaper,   )r2   rb  rW  rK  rd  r-   _check_nd_one  s,   


zTestOverwrite._check_nd_one))rY  N)rY  r  )rZ  r  )r[  rI   )r   r  N)ri  r   rI   )r   r  r    rj  )rk  r  )rk  r  )rk  rh  )rk  )r    )rk  N)rk  r  c                 C   s<   t jt jt jf}| t||||| | t||||| d S r/   )r$   r   r   r   rg  r   r   )rY   r2   rK  rh   rO   r]  r,   r,   r-   test_fftn_ifftn  s   zTestOverwrite.test_fftn_ifftnN)r|   r}   r~   __doc__r$   r   r   r   r_  r   r   r   ZdtypesZfftsizesrR  rX  r   r   r   r^  r`  rg  rl  r,   r,   r,   r-   rI  e  s,    
(rI  r@  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   r6   zBInvalid norm value 'o', should be "backward", "ortho" or "forward"r   o)r%   )r$   r   floatrx   ry   )r@  r&   r,   r,   r-   test_invalid_norm  s   "rp  c                 C   s>   t jd}|dd|d  }t| t|| | d S )NrU   r   r   r$   r0   ZRandomStater   r   r4   r@  r   r&   r,   r,   r-   test_swapped_byte_order_complex  s   rs  c                 C   s0   t jd}|d}t| t|| | d S )NrU   r   rq  rr  r,   r,   r-   test_swapped_byte_order_real  s   
rt  )SZnumpy.testingr   r   r   r   r   r   r   r   rx   Zscipy.fft._pocketfftr	   r
   r   r   r   r   r   r   r   r   r   r   rq   r   r   r   r   r   r   r   r   r   r$   Z	numpy.fftZnumpy.randomr   r   r   r   r   r.   r0   r4   r?   r@   rF   rH   rJ   rM   rQ   rS   r   r   r   r   r   r   Zskipifr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r2  r>  rC  rE  rI  r   rp  rs  rt  r,   r,   r,   r-   <module>   s    8,



0M4CA d06	z

