a
    Lf]                     @   s  d dl Zd dlZd dlmZ d dlmZmZmZm	Z	 d dl
Z
d dlZdd ZG dd dZG dd	 d	Zejd
ejejejejgejdddgejdejjejjejjejjejjejjgdd Zejdddgejdg ddd Zejje	ddG dd dZdd Zdd Z ejdejjejjejj!ejj"gejde#g dej$d ej%d!ej$d"ej&d!gd#d$ Z'dS )%    N)random)assert_array_equalassert_raisesassert_allcloseIS_WASMc                 C   sN   t | }dtj t||  }t|dd| }tj| t| ddS )Ny                 axis)lennppiarangereshapesumexp)xLZphase r   W/var/www/ai-form-bot/venv/lib/python3.9/site-packages/numpy/fft/tests/test_pocketfft.pyfft1   s    r   c                   @   s   e Zd Zdd ZdS )TestFFTShiftc                 C   s   t ttjjg dd d S )N)r         r   )r   
ValueErrorr   fft)selfr   r   r   
test_fft_n   s    zTestFFTShift.test_fft_nN)__name__
__module____qualname__r   r   r   r   r   r      s   r   c                	   @   s  e Zd Zdd Zejdejej	ej
gdd Zejdejej	ej
gdd Zdd	 Zejd
dejdeefejdddd Zejd
ddgdd Zdd Zejdd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,d- Zd.d/ Zd0d1 Zd2d3 Z d4d5 Z!ejd6ej"j#ej"j$ej"j%ej"j&gd7d8 Z'ejd6ej"j#ej"j$ej"j(ej"j)gd9d: Z*ejd6ej"j#ej"j$ej"j%ej"j&gd;d< Z+ejd6ej"j(ej"j)gd=d> Z,ejd6ej"j#ej"j$ej"j%ej"j&ej"j(ej"j)gd?d@ Z-dAdB Z.ejdCg dDejdeefejdddEdF Z/ejdGej"j#ej"j$ej"j%gdHdI Z0ejdJdKdLgdMdN Z1dOS )P	TestFFT1Dc              	   C   s   d}t |dt |  }t |}td|D ]b}ttjtj|d| |d| dd ttjtj|d| ||d| dd q*d S )Ni                 ?r   r   g-q=atol)r   ranger   r   r   ifftirfftrfft)r   maxlenr   xrir   r   r   test_identity   s    &zTestFFT1D.test_identitydtypec                 C   s  d}dt t jd|d }t||dt||  }t |t |g}t||}t |t |g}td|d D ]}t jj	t jj||d|d}	|	j
j|ksJ t|	|d	| |d	d
 t jjt jj||d|d}
|
j|ksJ t|
|d	| |d	d
 qd S N            ?r-   r"   r   r   nr   r$   rtol)r   spacingarrayr   astypeconcatenate
zeros_liker%   r   r&   realr-   r   r'   r(   )r   r-   r)   r$   r   xxr*   Zxxrr+   Zcheck_cZcheck_rr   r   r   test_identity_long_short$   s     z"TestFFT1D.test_identity_long_shortc                 C   sB  d}dt t jd|d }t||dt||  }t |t |g}td|d D ]}t jjt jj	||d|d}|j
|j
ksJ t||d	| |d	d
 | }|d d }	d	|jd	< |d d	krd	|j|	d d < t |t |g}
t jjt jj||d|d}|j
|j
ks$J t||
d	|	 |d	d
 q^d S r.   )r   r7   r8   r   r9   r:   r;   r%   r   r&   r-   r   copyimagr(   r'   )r   r-   r)   r$   r   r=   r+   Zcheck_via_cyr4   yyZcheck_via_rr   r   r   !test_identity_long_short_reversed6   s"     
z+TestFFT1D.test_identity_long_short_reversedc                 C   s   t ddt d  }tt|tj|dd tt|tjj|dddd tt|td tjj|dddd tt|d tjj|d	ddd d S )
N   r"   ư>r#   backwardnormortho      >@forward)r   r   r   r   r   sqrtr   r   r   r   r   test_fftN   s    zTestFFT1D.test_fftr
   r   r   	transpose)TFc                    s    fdd}|t u r<tddtd  }tjjtjj }}ntd}tjjtjj }}|||d}||}	|||	|d}
|
|	u sJ t|
| |||d}|t u r|	n||}||	||d}||u sJ t|| d S )Nc                    s     rt | jjS t | S d S Nr   r;   Tr   rP   r   r   r;   [   s    z3TestFFT1D.test_fft_out_argument.<locals>.zeros_like)
      r"   r	   )outr
   )complexr   r   r   r&   r(   r'   r   )r   r-   rP   r
   r;   rA   r   r&   expectedrX   result	expected2out2result2r   rU   r   test_fft_out_argumentW   s     
zTestFFT1D.test_fft_out_argumentr   r   c                 C   s  t ddt d  }| }tjj||d}tjj|||d}||u sJJ t|| | }|dkrp|d d n|d d d df }tjj|d|d}tjj|d||d}	|	|u sJ t|	| |dkrt|dd  |dd   n*t|d d dd f |d d dd f  | }
|dkr,|
d	d  n|
d d d	d f }|dkrV|
d	d
 n|
d d d	d
f }tjj|d|d}tjj|d||d}||u sJ t|| |dkrt|
d d	 |d d	  t|
d
d  |d
d   nTt|
d d d d	f |d d d d	f  t|
d d d
d f |d d d
d f  | }|dkrZ|d d n|d d d df }|dkr|d d
 n|d d d d
f }tjj|d
|d}tjj|d
||d}||u sJ t|| |dkrt|d
d  |d
d   n*t|d d d
d f |d d d
d f  | }|j}tjj|||d}||u sTJ t|| | }|dkr~|d d d n|d d d d df }tjj|||d}||u sJ t|| d S )N)rW   rW   r"   r	   )r
   rX   r   rV   )r4   r
   )r4   r
   rX   r0      r   )r   r?   r   r   r   rS   )r   r
   rA   y1Z	expected1Zresult1y2r]   r\   r^   Zy3Zy3_selZout3Z	expected3Zresult3Zy4Zy4_selZout4Z	expected4Zresult4Zy5Zout5Zresult5Zy6Zout6Zresult6r   r   r   test_fft_inplace_outu   s^    
(
***

****

*
.zTestFFT1D.test_fft_inplace_outc                 C   s   t d}tjtdd  t jj|dd W d    n1 s>0    Y  tjtdd. t jj|t |ddd W d    n1 s0    Y  tjtd	d* t jj|t j|t	d
d W d    n1 s0    Y  d S )NrJ   zmust be of ArrayTypematch )rX   has wrong shaper0   r   zCannot castr2   )
r   r   pytestraises	TypeErrorr   r   r;   r   floatrM   r   r   r   test_fft_bad_out   s    
.<zTestFFT1D.test_fft_bad_outrH   NrF   rI   rK   c                 C   s|   t ddt d  }t|tjjtjj||d|ddd tjtdd  tjjg |d W d    n1 sn0    Y  d S )NrD   r"   rG   rE   r#   z!Invalid number of FFT data pointsrd   )r   r   r   r   r&   rh   ri   r   )r   rH   r   r   r   r   	test_ifft   s    zTestFFT1D.test_ifftc                 C   s   t ddt d  }ttjjtjj|ddddtj|dd ttj|tjj|dd	dd ttj|td
 tjj|dd	dd ttj|d tjj|dd	dd d S NrD   rW   r"   r   r	   r   rE   r#   rF   rG   X  rI        @rK   )r   r   r   r   fft2rL   rM   r   r   r   	test_fft2   s    zTestFFT1D.test_fft2c                 C   s   t ddt d  }ttjjtjj|ddddtj|dd ttj|tjj|dd	dd ttj|td
 tjj|dd	dd ttj|d tjj|dd	dd d S ro   )r   r   r   r   r&   ifft2rL   rM   r   r   r   
test_ifft2   s    zTestFFT1D.test_ifft2c                 C   s   t ddt d  }ttjjtjjtjj|ddddddtj|dd ttj|tjj|d	d
dd ttj|td tjj|dd
dd ttj|d tjj|dd
dd d S NrD   rW   rV   r"   r   r	   r   r   rE   r#   rF   rG   p  rI        p@rK   )r   r   r   r   fftnrL   rM   r   r   r   	test_fftn   s    &zTestFFT1D.test_fftnc                 C   s   t ddt d  }ttjjtjjtjj|ddddddtj|dd ttj|tjj|d	d
dd ttj|td tjj|dd
dd ttj|d tjj|dd
dd d S rw   )r   r   r   r   r&   ifftnrL   rM   r   r   r   
test_ifftn   s    &zTestFFT1D.test_ifftnc              	   C   s   t d}|jd|j fD ]}dD ]>}ttjj|||dd |d d  tjj|||ddd q ttjj||dtjj||d	ddd ttjj||dt| tjj||d
ddd ttjj||d| tjj||dddd qd S )NrD   r   rm   r4   rH   r   rE   r#   r3   rF   rI   rK   )r   sizer   r   r   r(   rL   )r   r   r4   rH   r   r   r   	test_rfft   s&     zTestFFT1D.test_rfftc                 C   sN   t d}d}t j||}t|t j|d | d |d d  dd d S )N      r   r   +=r6   )r   r   r   r(   r   )r   r   r4   rA   r   r   r   test_rfft_even  s    
zTestFFT1D.test_rfft_evenc                 C   s<   t g d}t j|}t|t j|d d dd d S )N)r   r   r   r   r   r   r   )r   r8   r   r(   r   )r   r   rA   r   r   r   test_rfft_odd
  s    zTestFFT1D.test_rfft_oddc                 C   s   t d}t|tjtj|dd t|tjjtjj|dddddd t|tjjtjj|dddddd t|tjjtjj|dddddd d S )NrD   rE   r#   rF   rG   rI   rK   )r   r   r   r   r'   r(   rM   r   r   r   
test_irfft  s"    zTestFFT1D.test_irfftc                 C   s   t d}ttj|d d d df tj|dd ttj|tjj|dddd ttj|td tjj|dddd ttj|d	 tjj|d
ddd d S )Nrp      rE   r#   rF   rG   rq   rI   rr   rK   )r   r   r   r   rs   rfft2rL   rM   r   r   r   
test_rfft2  s    .zTestFFT1D.test_rfft2c                 C   s   t d}t|tjtj|dd t|tjjtjj|dddddd t|tjjtjj|dddddd t|tjjtjj|dddddd d S )Nrp   rE   r#   rF   rG   rI   rK   )r   r   r   r   Zirfft2r   rM   r   r   r   test_irfft2#  s"    zTestFFT1D.test_irfft2c                 C   s   t d}ttj|d d d d d df tj|dd ttj|tjj|dddd ttj|td tjj|dddd ttj|d	 tjj|d
ddd d S )Nrx      rE   r#   rF   rG   ry   rI   rz   rK   )r   r   r   r   r{   rfftnrL   rM   r   r   r   
test_rfftn-  s    4zTestFFT1D.test_rfftnc                 C   s   t d}t|tjtj|dd t|tjjtjj|dddddd t|tjjtjj|dddddd t|tjjtjj|dddddd d S )Nrx   rE   r#   rF   rG   rI   rK   )r   r   r   r   irfftnr   rM   r   r   r   test_irfftn7  s"    zTestFFT1D.test_irfftnc                 C   s   t ddt d  }tt d|t df}t||d d d  f}ttj|tj|dd ttj|tjj|dddd ttj|td	 tjj|d
ddd ttj|d tjj|dddd d S )N   r"   r   r   rE   r#   rF   rG   rD   rI   rJ   rK   )r   r   r:   conjr   r   hfftrL   r   r   Zx_hermr   r   r   	test_hfftA  s    zTestFFT1D.test_hfftc                 C   s   t ddt d  }tt d|t df}t||d d d  f}t|tjtj|dd t|tjjtjj|dddddd t|tjjtjj|d	dd	ddd t|tjjtjj|d
dd
ddd d S )Nr   r"   r   r   rE   r#   rF   rG   rI   rK   )r   r   r:   r   r   r   ihfftr   r   r   r   r   
test_ihfftM  s2    zTestFFT1D.test_ihfftopc                 C   sP   t d}g d}|D ]6}|t||}t|||d|}t||dd qd S )Nrx   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   axesrE   r#   )r   r   rP   r   )r   r   r   r   aZop_trZtr_opr   r   r   	test_axesY  s    zTestFFT1D.test_axesc                 C   s.   t ddd}||dddjdks*J d S )Nd   rV   r   r0   rO   sr   )rV   r0   )r   r   r   shaper   r   r   r   r   r   test_s_negative_1c  s    zTestFFT1D.test_s_negative_1c                 C   sN   t ddd}tjdd ||dd W d    n1 s@0    Y  d S )Nr   rV   "`axes` should not be `None` if `s`rd   r   )r   r   r   r   rh   warnsr   r   r   r   test_s_axes_nonej  s    zTestFFT1D.test_s_axes_nonec                 C   sP   t ddd}tjdd ||dd d W d    n1 sB0    Y  d S )Nr   rV   r   rd   r   r   r   r   r   r   r   test_s_axes_none_2Dq  s    zTestFFT1D.test_s_axes_none_2Dc                 C   sF   t d}tjdd ||ddd W d    n1 s80    Y  d S )Nrx   z%array containing `None` values to `s`rd   )rV   NrV   r   r   )r   rh   r   r   r   r   r   test_s_contains_nonew  s    zTestFFT1D.test_s_contains_nonec           	      C   s   t d}tj|}|jd }tjjtjjftjjtjjftjj	tjj
fg}|D ]Z\}}|jd|j fD ]@}dD ]6}||||d}||||d}t|tj|dd qpqhqPd S )NrD   r   rm   r   rE   r#   )r   r   ZlinalgrH   r   r   r&   r(   r'   r   r   r   )	r   r   Zx_normr4   Z
func_pairsZforwbackrH   tmpr   r   r   test_all_1d_norm_preserving  s    
z%TestFFT1D.test_all_1d_norm_preservingr   )rO   r   r   Nc                    s    fdd}|t u r<tddtd  }tjjtjj }}ntd}tjjtjj }}|||d}||}	|||	|d}
|
|	u sJ t|
| |||d}|t u r|	n||}||	||d}||u sJ t|| d S )Nc                    s     rt | jjS t | S d S rQ   rR   rT   rU   r   r   r;     s    z4TestFFT1D.test_fftn_out_argument.<locals>.zeros_likerV   r0   r   r"   r   )rX   r   )	rY   r   r   r   r{   r}   r   r   r   )r   r-   rP   r   r;   r   r   r&   rZ   rX   r[   r\   r]   r^   r   rU   r   test_fftn_out_argument  s     
z TestFFT1D.test_fftn_out_argumentr   c                 C   s   |t jju rtd}ntddtd  }tjtdd& ||t |ddd W d    n1 sd0    Y  d}|||dd	}t |}|||d|d
}||u sJ t|| d S )Nr   r"   rg   rd   r   r   r   r   )rX   r   r   )rV   r0   r0   r   r   r   rX   )	r   r   r   r   rh   ri   r   r;   r   )r   r   r   r   rZ   rX   r[   r   r   r   test_fftn_out_and_s_interaction  s    
4
z)TestFFT1D.test_fftn_out_and_s_interactionr   )	   r0   r0   r   c                 C   s^   t ddt d  }tjj||dd}t|}tjj||d|d}||u sPJ t|| d S )N)r   r0   r   r   r"   r   r   r   )r   r   r   r   r;   r   )r   r   r   rZ   rX   r[   r   r   r   !test_irfftn_out_and_s_interaction  s    
z+TestFFT1D.test_irfftn_out_and_s_interactionN)2r   r   r    r,   rh   markparametrizer   singledoubleZ
longdoubler>   rC   rN   rY   rk   r_   rc   rl   rn   rt   rv   r|   r~   r   r   r   r   r   r   r   r   r   r   r   r{   r}   r   r   r   rs   ru   r   r   r   r   r   r   r   r   r   r   r   r   r!      sr   


	
;	












r!   r-   orderFznon-contiguousr   c                 C   s0  t jd}|dddj| dd}dt t |j t |j	j
 }|dkr\t |}n"|d d d	 }t |d d d	 }|jd
rtdD ],}|||d}|||d}	t||	||d qnj|jdr&g d}
|jdr|
g d |
D ],}|||d}|||d}	t||	||d qnt d S )N*   r         F)r?   g       @r   r   r   r   r	   r5   )rs   r{   )rO   )r   r   r   r{   ))r   )r   )r   Nr   )r   r   RandomStaterandr9   rL   log2r   Zfinfor-   epsZasfortranarrayZascontiguousarrayr   endswithr%   r   extendr   )r-   r   r   rngXZ_tolYr
   ZX_resZY_resr   axr   r   r   test_fft_with_order  s*    $r   Cr4   )Nr      c                 C   sd   t jd}|d}t j|t j| d}t jj||d}|jj|jjksLJ |jj	|jj	ks`J d S )Nr   rV   )r-   r   r3   )
r   r   r   r   Zasarray	complex64r   flagsc_contiguousf_contiguous)r   r4   r   r   resr   r   r   test_fft_output_order  s    
r   zCannot start thread)reasonc                   @   s<   e Zd ZdZdZdd Zdd Zdd Zd	d
 Zdd Z	dS )TestFFTThreadSafer/   )i      c                    s|   fddt    } fddt| jD }dd |D  dd |D  t| jD ]}tjdd|d	 q^d S )
Nc                    s   |  |   d S rQ   )put)argsq)funcr   r   worker  s    z.TestFFTThreadSafe._test_mtsame.<locals>.workerc                    s   g | ]}t j fd qS ))targetr   )	threadingThread).0r+   )r   r   r   r   r   
<listcomp>  s   z2TestFFTThreadSafe._test_mtsame.<locals>.<listcomp>c                 S   s   g | ]}|  qS r   )startr   r   r   r   r   r         c                 S   s   g | ]}|  qS r   )joinr   r   r   r   r     r   r0   )timeoutz6Function returned wrong value in multithreaded context)queueQueuer%   threadsr   get)r   r   r   rZ   tr+   r   )r   r   r   r   r   _test_mtsame  s    zTestFFTThreadSafe._test_mtsamec                 C   s(   t | jd d }| t jj| d S Nr   y                )r   onesinput_shaper   r   r   r   r   r   r   rN     s    zTestFFTThreadSafe.test_fftc                 C   s(   t | jd d }| t jj| d S r   )r   r   r   r   r   r&   r   r   r   r   rn     s    zTestFFTThreadSafe.test_ifftc                 C   s    t | j}| t jj| d S rQ   )r   r   r   r   r   r(   r   r   r   r   r     s    zTestFFTThreadSafe.test_rfftc                 C   s(   t | jd d }| t jj| d S r   )r   r   r   r   r   r'   r   r   r   r   r   !  s    zTestFFTThreadSafe.test_irfftN)
r   r   r    r   r   r   rN   rn   r   r   r   r   r   r   r     s   r   c                  C   sH   t d} t jj| dd t jj| dd t jjt dgtdd d S )NrV   r   r3   r   )r   r   r   r'   r   r8   rY   rT   r   r   r   test_irfft_with_n_1_regression&  s    
r   c                  C   s:   t dd } t jj| dd}t g d}t|| d S )Nr0   y      ?      ?rV   r3   )
g      4@gk "#@g'g$ pn]k@grg      @gG& gdƍĿgt=M?g@L>M4)r   r   r   r   r8   r   )r   r[   rZ   r   r   r   "test_irfft_with_n_large_regression.  s    r   data)FTFrV   r2   r0   c                 C   s0   || }|  t| d}||}t|| d S )Nr1   )r9   r   Zresult_typer   )r   r   r[   Z
float_datarZ   r   r   r   #test_fft_with_integer_or_bool_input8  s    
r   )(numpyr   rh   Znumpy.randomr   Znumpy.testingr   r   r   r   r   r   r   r   r!   r   r   Zfloat32Zfloat64r   Z
complex128r   rs   r{   r&   ru   r}   r   r   Zskipifr   r   r   r(   r'   r8   r   Zuint8Zint16r   r   r   r   r   <module>   sN      8'
