o
    h`8                     @   s0  d dl Z d dlZd dlZd dlZd dlZd dlmZ d dlm	Z	m
Z
mZ d dlmZ d dlm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ejejgejdddgejdejejejejejejgdd Z G dd dZ!ejdejejej"ej#gdd Z$G dd dZ%dS )    N)random)assert_array_almost_equalassert_array_equalassert_allclose)raisesc                 C   sR   t | }dtj t|t|  }t|dd| }tj| t| ddS )Ny                 axis)lennppiarangefloatreshapesumexp)xLphase r   U/var/www/html/scripts/venv/lib/python3.10/site-packages/scipy/fft/tests/test_numpy.pyfft1   s   r   c                   @      e Zd Zdd ZdS )TestFFTShiftc                 C   s   t ttjg dd d S )N)r         r   )assert_raises
ValueErrorfft)selfr   r   r   
test_fft_n   s   zTestFFTShift.test_fft_nN)__name__
__module____qualname__r!   r   r   r   r   r          r   c                   @   sF  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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ejd'ejejejejejejgd(d) Z ejd'ej!ej"ej#ej$ej%ej&ejejejejejejgd*d+ Z'd,d- Z(ejd.e)j*e)j+e)j,e)j-gd/d0 Z.d1S )2	TestFFT1Dc              	   C   s   d}t |dt |  }t |}td|D ]-}ttt|d| |d| dd ttt|d| ||d| dd qd S )Ni                 ?r   r      )decimal)r   ranger   r   ifftirfftrfft)r    maxlenr   xrir   r   r   test_identity   s   "zTestFFT1D.test_identityc                 C   sz   t ddt d  }t|}t|t| t|tj|dd t|td tj|dd t|d tj|dd d S )N   r'   backwardnormorthoforward)r   r   r   r   r   sqrtr    r   expectr   r   r   test_fft&   s   zTestFFT1D.test_fftc                 C   sV   t ddt d  }t|tt| dD ]}t|tjtj||d|d qd S )Nr2   r'   r3   r6   r7   r4   )r   r   r   r+   r    r   r5   r   r   r   	test_ifft/   s   zTestFFT1D.test_ifftc                 C   s   t ddt d  }tjtj|dddd}t|t| t|tj|dd t|td tj|d	d t|d tj|d
d d S Nr2      r'   r   r	   r   r3   r4   X  r6   r7   )r   r   r   fft2r   r8   r9   r   r   r   	test_fft26      zTestFFT1D.test_fft2c                 C   s   t ddt d  }tjtj|dddd}t|t| t|tj|dd t|td tj|d	d t|d tj|d
d d S r?   )r   r   r+   r   ifft2r   r8   r9   r   r   r   
test_ifft2@   rE   zTestFFT1D.test_ifft2c                 C   s   t ddt d  }tjtjtj|dddddd}t|t| t|tj|dd t|td	 tj|d
d t|d	 tj|dd d S Nr2   rA   
   r'   r   r	   r   r   r3   r4   p  r6   r7   )r   r   r   fftnr   r8   r9   r   r   r   	test_fftnJ   s   "zTestFFT1D.test_fftnc                 C   s   t ddt d  }tjtjtj|dddddd}t|t| t|tj|dd tt|td	 tj|d
d t|d	 tj|dd d S rH   )r   r   r+   r   ifftnr   r8   r9   r   r   r   
test_ifftnT   s   "zTestFFT1D.test_ifftnc              	   C   s   t d}|jd|j fD ]5}dD ]}ttj|||dd |d d  tj|||d qttj||dt| tj||dd qd S )N   r   )Nr3   r6   r7   nr5   r   )rR   r6   )r   sizer   r   r-   r   r8   )r    r   rR   r5   r   r   r   	test_rfft^   s   zTestFFT1D.test_rfftc                 C   J   t d}t|tt| dD ]}t|tjtj||d|d qd S )Nr2   r<   r4   )r   r   r   r,   r-   r=   r   r   r   
test_irffth      zTestFFT1D.test_irfftc                 C   s   t d}t|d d d df }t|t| t|tj|dd t|td tj|dd t|d tj|dd d S Nr@      r3   r4   rB   r6   r7   )r   r   rC   r   rfft2r   r8   r9   r   r   r   
test_rfft2o      zTestFFT1D.test_rfft2c                 C   rU   Nr@   r<   r4   )r   r   r   irfft2rZ   r=   r   r   r   test_irfft2y   rW   zTestFFT1D.test_irfft2c                 C   s   t d}t|d d d d d df }t|t| t|tj|dd t|td tj|dd t|d tj|dd d S NrI      r3   r4   rK   r6   r7   )r   r   rL   r   rfftnr   r8   r9   r   r   r   
test_rfftn       zTestFFT1D.test_rfftnc                 C   rU   NrI   r<   r4   )r   r   r   irfftnrb   r=   r   r   r   test_irfftn   rW   zTestFFT1D.test_irfftnc                 C   s   t ddt d  }tt d|t df}t||d d d  f}t|}t|t| t|tj|dd t|td tj|dd t|d tj|d	d d S )
N   r'   r   r   r3   r4   r2   r6   r7   )r   r   concatenateconjr   r   hfftr8   )r    r   x_hermr:   r   r   r   	test_hfft   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t| dD ]}t|tjtj||d|d q1d S )Nrh   r'   r   r   r<   r4   )r   r   ri   rj   r   r   ihfftrk   )r    r   rl   r5   r   r   r   
test_ihfft   s   zTestFFT1D.test_ihfftc                 C   rU   r]   )r   r   r   hfft2ihfft2r=   r   r   r   
test_hfft2   rW   zTestFFT1D.test_hfft2c                 C   s   t d}t|d d d df }t|t| t|tj|dd t|td tj|dd t|d tj|dd d S rX   )r   r   rF   r   rq   r   r8   r9   r   r   r   test_ihfft2   r\   zTestFFT1D.test_ihfft2c                 C   rU   re   )r   r   r   hfftnihfftnr=   r   r   r   
test_hfftn   rW   zTestFFT1D.test_hfftnc                 C   s   t d}t|d d d d d df }t|t| t|tj|dd t|td tj|dd t|d tj|dd d S r`   )r   r   rN   r   ru   r   r8   r9   r   r   r   test_ihfftn   rd   zTestFFT1D.test_ihfftnopc                 C   sL   t d}g d}|D ]}|t||}t|||d|}t|| q
d S )NrI   )r   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   )r   r   r   axes)r   r   	transposer   )r    rx   r   r}   aop_trtr_opr   r   r   	test_axes   s   zTestFFT1D.test_axesc              	      s   t dg d}|D ]8 t fddtjD }|t |d d dd}t||d d  d d d }t|| q
d S )N)         )ry   rz   r{   c                    s4   g | ]}| d d v rdj |  nj | qS )Nr   )shape).0axr   r   r   r   
<listcomp>   s    ,z9TestFFT1D.test_axes_subset_with_shape.<locals>.<listcomp>r   r   r   )sr}   )r   tupler*   ndimr   r~   r   )r    rx   r}   r   r   r   r   r   r   test_axes_subset_with_shape   s   &z%TestFFT1D.test_axes_subset_with_shapec           	      C   s   t d}tj|}|jd }tjtjftjtjftj	tj
fg}|D ]+\}}|jd|j fD ]}dD ]}||||d}||||d}t|tj| q2q.q"d S )Nr2   r   r<   rQ   )r   r   linalgr5   rS   r   r+   r-   r,   rn   rk   r   )	r    r   x_normrR   
func_pairsforwbackr5   tmpr   r   r   test_all_1d_norm_preserving   s$   




z%TestFFT1D.test_all_1d_norm_preservingdtypec                 C   sZ   t d|}ttt|| ttt|| ttt|t	|| d S )Nr2   )
r   astyper   r   r+   r,   r-   rk   rn   r   )r    r   r   r   r   r   test_dtypes   s    zTestFFT1D.test_dtypesN)/r"   r#   r$   r1   r;   r>   rD   rG   rM   rO   rT   rV   r[   r_   rc   rg   rm   ro   rr   rs   rv   rw   pytestmarkparametrizer   rL   rN   rb   rf   rt   ru   r   rC   rF   rZ   r^   rp   rq   r   r   r   halfsingledouble
longdoubler   r   r   r   r   r&      sL    
	






	



r&   r   orderFznon-contiguousr   c                 C   s   t jd}|dddj| dd}|dkrt |}n|d d d }t |d d d }|jd	rMt	d
D ]}|||d}|||d}t
|| q7d S |jdr|g d}	|jdrd|	g d |	D ]}
|||
d}|||
d}t
|| qfd S t)N*   r         F)copyr   r   r   r   r	   )rC   rL   )r   )r   r   )r   r   rL   ))r   )r   )r   Nr|   )r   r   RandomStaterandr   asfortranarrayascontiguousarrayr"   endswithr*   r   extendr   )r   r   r   rngXYr
   X_resY_resr}   r   r   r   r   test_fft_with_order  s,   r   c                   @   sL   e Zd Zd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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 N)put)argsq)funcr   r   worker-  s   z.TestFFTThreadSafe._test_mtsame.<locals>.workerc                    s   g | ]}t j fd qS ))targetr   )	threadingThread)r   r0   )r   r   r   r   r   r   4  s    z2TestFFTThreadSafe._test_mtsame.<locals>.<listcomp>c                 S      g | ]}|  qS r   )startr   r   r   r   r   r   6      c                 S   r   r   )joinr   r   r   r   r   8  r      )timeoutz6Function returned wrong value in multithreaded context)queueQueuer*   threadsr   get)r    r   r   expectedtr0   r   )r   r   r   r   r   _test_mtsame,  s   zTestFFTThreadSafe._test_mtsamec                 C   s$   t j| jt jd}| tj| d S )N)r   )r   onesinput_shape
complex128r   r   r    r   r   r   r   r;   >  s   zTestFFTThreadSafe.test_fftc                 C       t | jd}| tj| d S Ny      ?        )r   fullr   r   r   r+   r   r   r   r   r>   B     zTestFFTThreadSafe.test_ifftc                 C      t | j}| tj| d S r   )r   r   r   r   r   r-   r   r   r   r   rT   F     zTestFFTThreadSafe.test_rfftc                 C   r   r   )r   r   r   r   r   r,   r   r   r   r   rV   J  r   zTestFFTThreadSafe.test_irfftc                 C   s"   t | jt j}| tj| d S r   )r   r   r   	complex64r   r   rk   r   r   r   r   rm   N  s   zTestFFTThreadSafe.test_hfftc                 C   r   r   )r   r   r   r   r   rn   r   r   r   r   ro   R  r   zTestFFTThreadSafe.test_ihfftN)r"   r#   r$   r   r   r   r;   r>   rT   rV   rm   ro   r   r   r   r   r   (  s    r   r   c                 C   sj   t d}|| dd tdD }W d    n1 sw   Y  | td}|D ]}t|| q+d S )Nr   c                 S   s   g | ]}t d qS )d   )r   r   )r   _r   r   r   r   \  s    z%test_multiprocess.<locals>.<listcomp>r   r   )multiprocessingPoolmapr*   r   r   r   )r   presr:   r   r   r   r   test_multiprocessW  s   r   c                   @   r   )
TestIRFFTNc                 C   s2   t jd\}}|d|  }d}tj||d d S )N)r   r   r       r'   )r|   )r   r   r   rf   )r    arair   r}   r   r   r   test_not_last_axis_successe  s   z%TestIRFFTN.test_not_last_axis_successN)r"   r#   r$   r   r   r   r   r   r   c  r%   r   )&r   r   r   numpyr   r   numpy.randomr   numpy.testingr   r   r   r   r   	scipy.fftr   r   r   r&   r   r   float32float64	longfloatr   r   longcomplexrC   rL   r+   rF   rN   r   r   r-   r,   r   r   r   r   r   r   <module>   s>     i/
