o
    hZ_                     @   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Lphase r   r/var/www/html/construction_image-detection-poc/venv/lib/python3.10/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 ]1}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 ]E}t jj	t jj||d|d}	|	j
j|ksXJ t|	|d	| |d	d
 t jjt jj||d|d}
|
j|ksyJ t|
|d	| |d	d
 q@d 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+   xxrr,   check_ccheck_rr   r   r   test_identity_long_short$   s    z"TestFFT1D.test_identity_long_shortc                 C   s@  d}dt t jd|d }t||dt||  }t |t |g}td|d D ]n}t jjt jj	||d|d}|j
|j
ksGJ t||d	| |d	d
 | }|d d }	d	|jd	< |d d	krqd	|j|	d d < t |t |g}
t jjt jj||d|d}|j
|j
ksJ t||
d	|	 |d	d
 q/d S r/   )r   r8   r9   r   r:   r;   r<   r&   r   r'   r.   r   copyimagr)   r(   )r   r.   r*   r%   r   r>   r,   check_via_cyr5   yy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 sBJ t|
| |||d}|t u rS|	n||}||	||d}||u sdJ t|| d S )Nc                        r	t | jjS t | S Nr   r<   Tr   rV   r   r   r<   [      
z3TestFFT1D.test_fft_out_argument.<locals>.zeros_like)
      r#   r	   )outr
   )complexr   r   r   r'   r)   r(   r   )r   r.   rV   r
   r<   rF   r   r'   expectedr`   result	expected2out2result2r   r\   r   test_fft_out_argumentW       
zTestFFT1D.test_fft_out_argumentr   r   c                 C   s  t ddt d  }| }tjj||d}tjj|||d}||u s%J t|| | }|dkr8|d d n	|d d d df }tjj|d|d}tjj|d||d}	|	|u s[J t|	| |dkrrt|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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	  t|
d
d  |d
d   n*t|
d d d d	f |d d d d	f  t|
d d d
d f |d d d
d f  | }|dkr)|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 sbJ t|| |dkrzt|d
d  |d
d   nt|d d d
d f |d d d
d f  | }|j}tjj|||d}||u sJ t|| | }|dkr|d d d n
|d d d d df }tjj|||d}||u sJ t|| d S )N)r_   r_   r#   r	   )r
   r`   r   r^   )r5   r
   )r5   r
   r`   r1      r   )r   rC   r   r   r   rZ   )r   r
   rF   y1	expected1result1y2re   rd   rf   y3y3_selout3	expected3result3y4y4_selout4	expected4result4y5out5result5y6out6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w   Y  tjtdd t jj|t |ddd W d    n1 sEw   Y  tjtd	d t jj|t j|t	d
d W d    d S 1 sjw   Y  d S )NrP   zmust be of ArrayTypematch )r`   has wrong shaper1   r   zCannot castr3   )
r   r   pytestraises	TypeErrorr   r   r<   r   floatrS   r   r   r   test_fft_bad_out   s   
 "zTestFFT1D.test_fft_bad_outrN   NrL   rO   rQ   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    d S 1 s8w   Y  d S )NrJ   r#   rM   rK   r$   z!Invalid number of FFT data pointsr   )r   r   r   r   r'   r   r   r   )r   rN   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rJ   r_   r#   r   r	   r   rK   r$   rL   rM   X  rO        @rQ   )r   r   r   r   fft2rR   rS   r   r   r   	test_fft2      
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 r   )r   r   r   r   r'   ifft2rR   rS   r   r   r   
test_ifft2   r   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rJ   r_   r^   r#   r   r	   r   r   rK   r$   rL   rM   p  rO        p@rQ   )r   r   r   r   fftnrR   rS   r   r   r   	test_fftn      &
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 r   )r   r   r   r   r'   ifftnrR   rS   r   r   r   
test_ifftn   r   zTestFFT1D.test_ifftnc              	   C   s   t d}|jd|j fD ]g}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 )NrJ   r   r   r5   rN   r   rK   r$   r4   rL   rO   rQ   )r   sizer   r   r   r)   rR   )r   r   r5   rN   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   +=r7   )r   r   r   r)   r   )r   r   r5   rF   r   r   r   test_rfft_even  s   
2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   r9   r   r)   r   )r   r   rF   r   r   r   test_rfft_odd
  s   "zTestFFT1D.test_rfft_oddc                 C      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 )NrJ   rK   r$   rL   rM   rO   rQ   )r   r   r   r   r(   r)   rS   r   r   r   
test_irfft  "   
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 )Nr      rK   r$   rL   rM   r   rO   r   rQ   )r   r   r   r   r   rfft2rR   rS   r   r   r   
test_rfft2  s   .
zTestFFT1D.test_rfft2c                 C   r   )Nr   rK   r$   rL   rM   rO   rQ   )r   r   r   r   irfft2r   rS   r   r   r   test_irfft2#  r   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 td}tjj|ddd}|jdksmJ tjjtjjtjj	|ddddddddd}|jdksJ t||dd d S )Nr      rK   r$   rL   rM   r   rO   r   rQ   )r   r   )r   r   r   )r^   r_   (   )axess)r^      r   r   )r
   r5   r   r_   r^   )
r   r   r   r   r   rfftnrR   onesshaper)   )r   r   rc   rb   r   r   r   
test_rfftn-  s*   4
zTestFFT1D.test_rfftnc                 C   r   )Nr   rK   r$   rL   rM   rO   rQ   )r   r   r   r   irfftnr   rS   r   r   r   test_irfftn?  r   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   rK   r$   rL   rM   rJ   rO   rP   rQ   )r   r   r;   conjr   r   hfftrR   r   r   x_hermr   r   r   	test_hfftI  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   rK   r$   rL   rM   rO   rQ   )r   r   r;   r   r   r   ihfftr   r   r   r   r   
test_ihfftU  s2   
zTestFFT1D.test_ihfftopc                 C   sP   t d}g d}|D ]}|t||}t|||d|}t||dd q
d S )Nr   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   r   rK   r$   )r   r   rV   r   )r   r   r   r   aop_trtr_opr   r   r   	test_axesa  s   zTestFFT1D.test_axesc                 C   s.   t ddd}||dddjdksJ d S )Nd   r^   r   r1   rU   r   r   )r^   r1   )r   r   r   r   r   r   r   r   r   r   test_s_negative_1k  s   zTestFFT1D.test_s_negative_1c                 C   sP   t ddd}tjdd ||dd W d    d S 1 s!w   Y  d S )Nr   r^   "`axes` should not be `None` if `s`r   r   )r   r   r   r   r   warnsr   r   r   r   test_s_axes_noner  s   "zTestFFT1D.test_s_axes_nonec                 C   sR   t ddd}tjdd ||dd d W d    d S 1 s"w   Y  d S )Nr   r^   r   r   r   r   r   r   r   r   r   test_s_axes_none_2Dy  s   "zTestFFT1D.test_s_axes_none_2Dc                 C   sH   t d}tjdd ||ddd W d    d S 1 sw   Y  d S )Nr   z%array containing `None` values to `s`r   )r^   Nr^   r   r   )r   r   r   r   r   r   r   test_s_contains_none  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 ]-\}}|jd|j fD ] }dD ]}||||d}||||d}t|tj|dd q8q4q(d S )NrJ   r   r   r   rK   r$   )r   r   linalgrN   r   r   r'   r)   r(   r   r   r   )	r   r   x_normr5   
func_pairsforwbackrN   tmpr   r   r   test_all_1d_norm_preserving  s$   
z%TestFFT1D.test_all_1d_norm_preservingr   )rU   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 sBJ t|
| |||d}|t u rS|	n||}||	||d}||u sdJ t|| d S )Nc                    rW   rX   rY   r[   r\   r   r   r<     r]   z4TestFFT1D.test_fftn_out_argument.<locals>.zeros_liker^   r1   r   r#   r   )r`   r   )	ra   r   r   r   r   r   r   r   r   )r   r.   rV   r   r<   r   r   r'   rb   r`   rc   rd   re   rf   r   r\   r   test_fftn_out_argument  rh   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 s2w   Y  d}|||dd	}t |}|||d|d
}||u sSJ t|| d S )Nr   r#   r   r   r   r   r   r   )r`   r   r   )r^   r1   r1   r   r   r   r`   )	r   r   r   r   r   r   r   r<   r   )r   r   r   r   rb   r`   rc   r   r   r   test_fftn_out_and_s_interaction  s   

z)TestFFT1D.test_fftn_out_and_s_interactionr   )	   r1   r1   r   c                 C   s^   t ddt d  }tjj||dd}t|}tjj||d|d}||u s(J t|| d S )N)r   r1   r   r   r#   r   r   r   )r   r   r   r   r<   r   )r   r   r   rb   r`   rc   r   r   r   !test_irfftn_out_and_s_interaction  s   
z+TestFFT1D.test_irfftn_out_and_s_interactionN)2r   r    r!   r-   r   markparametrizer   singledouble
longdoublerB   rI   rT   ra   r   rg   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r"      st    


	
;	











r"   r.   orderFznon-contiguousr   c                 C   s,  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
rbtdD ]}|||d}|||d}	t||	||d qId S |jdrg d}
|jdry|
g d |
D ]}|||d}|||d}	t||	||d q{d S t)N*   r         F)rC   g       @r   r   r   r   r	   r6   )r   r   )rU   )r   r   r   r   ))r   )r   )r   Nr   )r   r   RandomStaterandr:   rR   log2r   finfor.   epsasfortranarrayascontiguousarrayr   endswithr&   r   extendr   )r.   r   r   rngX_tolYr
   X_resY_resr   axr   r   r   test_fft_with_order  s.   $r   Cr5   )Nr      c                 C   sd   t jd}|d}t j|t j| d}t jj||d}|jj|jjks&J |jj	|jj	ks0J d S )Nr   r^   )r.   r   r4   )
r   r   r   r   asarray	complex64r   flagsc_contiguousf_contiguous)r   r5   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 )TestFFTThreadSafer0   )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 rX   )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      g | ]}|  qS r   )startr  r   r   r   r   r        c                 S   r  r   )joinr  r   r   r   r    r  r1   )timeoutz6Function returned wrong value in multithreaded context)queueQueuer&   threadsr   get)r   r  r
  rb   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   r   input_shaper  r   r   r   r   r   r   rT        zTestFFTThreadSafe.test_fftc                 C   (   t | jd d }| t jj| d S r  )r   r   r   r  r   r'   r!  r   r   r   r   !  r"  zTestFFTThreadSafe.test_ifftc                 C   s    t | j}| t jj| d S rX   )r   r   r   r  r   r)   r!  r   r   r   r   %  s   zTestFFTThreadSafe.test_rfftc                 C   r#  r  )r   r   r   r  r   r(   r!  r   r   r   r   )  r"  zTestFFTThreadSafe.test_irfftN)
r   r    r!   r  r   r  rT   r   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 )Nr^   r   r4   r   )r   r   r   r(   r   r9   ra   r[   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 )Nr1   y      ?      ?r^   r4   )
g      4@gk "#@g'g$ pn]k@grg      @gG& gdƍĿgt=M?g@L>M4)r   r   r   r   r9   r   )r   rc   rb   r   r   r   "test_irfft_with_n_large_regression6  s   r%  data)FTFr^   r3   r1   c                 C   s0   || }|  t| d}||}t|| d S )Nr2   )r:   r   result_typer   )r&  r   rc   
float_datarb   r   r   r   #test_fft_with_integer_or_bool_input@  s   
r)  )(numpyr   r   numpy.randomr   numpy.testingr   r   r   r   r  r  r   r   r"   r   r   float32float64r   
complex128r   r   r   r'   r   r   r   r  skipifr  r$  r%  r)   r(   r9   r   uint8int16r)  r   r   r   r   <module>   sP       @'
