U
    »mœd`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ÚpiZarangeÚfloatZreshapeÚsumÚexp)ÚxÚLZphase© r   úS/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/scipy/fft/tests/test_numpy.pyÚfft1   s    r   c                   @   s   e Zd Zdd„ ZdS )ÚTestFFTShiftc                 C   s   t ttjdddgdƒ d S )Nr   é   é   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      s   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 ]Z}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   Z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 )Nr,   r"   ©r-   r0   r1   r.   )r   r   r   r&   ©r   r   r/   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©r,   é   r"   r   r	   r   r-   r.   éX  r0   r1   )r   r   r   Úfft2r   r2   r3   r   r   r   Ú	test_fft26   s    ÿÿ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 r9   )r   r   r&   r   Úifft2r   r2   r3   r   r   r   Ú
test_ifft2@   s    ÿÿ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©r,   r;   é
   r"   r   r	   r   r   r-   r.   ép  r0   r1   )r   r   r   Úfftnr   r2   r3   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 rA   )r   r   r&   r   Úifftnr   r2   r3   r   r   r   Ú
test_ifftnT   s    "ÿÿzTestFFT1D.test_ifftnc              	   C   sˆ   t dƒ}|jd|j fD ]j}dD ]6}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   )Nr-   r0   r1   ©Únr/   r   )rK   r0   )r   Úsizer   r   r(   r   r2   )r   r   rK   r/   r   r   r   Ú	test_rfft^   s    þÿzTestFFT1D.test_rfftc                 C   sJ   t dƒ}t|t t |¡¡ƒ dD ]"}t|tjtj||d�|d�ƒ q"d S )Nr,   r6   r.   )r   r   r   r'   r(   r7   r   r   r   Ú
test_irffth   s     ÿ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:   é   r-   r.   r<   r0   r1   )r   r   r=   r   Úrfft2r   r2   r3   r   r   r   Ú
test_rfft2o   s    ÿÿzTestFFT1D.test_rfft2c                 C   sJ   t dƒ}t|t t |¡¡ƒ dD ]"}t|tjtj||d�|d�ƒ q"d S ©Nr:   r6   r.   )r   r   r   Úirfft2rQ   r7   r   r   r   Útest_irfft2y   s     ÿ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 ©NrB   é   r-   r.   rD   r0   r1   )r   r   rE   r   Úrfftnr   r2   r3   r   r   r   Ú
test_rfftn€   s     ÿÿzTestFFT1D.test_rfftnc                 C   sJ   t dƒ}t|t t |¡¡ƒ dD ]"}t|tjtj||d�|d�ƒ q"d S ©NrB   r6   r.   )r   r   r   ÚirfftnrX   r7   r   r   r   Útest_irfftnŠ   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|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   r-   r.   r,   r0   r1   )r   r   ÚconcatenateÚconjr   r   Úhfftr2   )r   r   Úx_hermr4   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�ƒ qbd S )Nr]   r"   r   r   r6   r.   )r   r   r^   r_   r   r   Úihfftr`   )r   r   ra   r/   r   r   r   Ú
test_ihfft�   s     ÿzTestFFT1D.test_ihfftc                 C   sJ   t dƒ}t|t t |¡¡ƒ dD ]"}t|tjtj||d�|d�ƒ q"d S rS   )r   r   r   Úhfft2Úihfft2r7   r   r   r   Ú
test_hfft2¦   s     ÿ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 rO   )r   r   r?   r   rf   r   r2   r3   r   r   r   Útest_ihfft2­   s    ÿÿzTestFFT1D.test_ihfft2c                 C   sJ   t dƒ}t|t t |¡¡ƒ dD ]"}t|tjtj||d�|d�ƒ q"d S rZ   )r   r   r   ÚhfftnÚihfftnr7   r   r   r   Ú
test_hfftn·   s     ÿ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 rV   )r   r   rG   r   rj   r   r2   r3   r   r   r   Útest_ihfftn¾   s     ÿÿzTestFFT1D.test_ihfftnÚopc                 C   sT   t dƒ}ddddddg}|D ]2}|t ||¡ƒ}t |||d�|¡}t||ƒ qd S )	NrB   ©r   r   r   ©r   r   r   )r   r   r   ©r   r   r   )r   r   r   )r   r   r   ©Úaxes)r   r   Ú	transposer   )r   rm   r   rr   ÚaÚop_trÚtr_opr   r   r   Ú	test_axesÈ   s    zTestFFT1D.test_axesc              	      sŒ   t dƒ‰dddg}|D ]p‰ t‡ ‡fdd„tˆjƒD ƒƒ}|t ˆˆ ¡|d d… dd	�}t |ˆ|d d… ˆ d d… d	�ˆ ¡}t||ƒ qd S )
N)é   é   é   rn   ro   rp   c                    s4   g | ],}|ˆ d d… kr&dˆj |  nˆj | ‘qS )Nr   )Úshape)Ú.0Úax©rt   r   r   r   Ú
<listcomp>Þ   s   ÿz9TestFFT1D.test_axes_subset_with_shape.<locals>.<listcomp>r   ©r   r   )Úsrr   )r   Útupler%   Úndimr   rs   r   )r   rm   rr   r{   ru   rv   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 ]V\}}|jd|j fD ]<}dD ]2}||||d�}||||d�}t|tj |¡ƒ qdq\qDd S )Nr,   r   r6   rJ   )r   r   Zlinalgr/   rL   r   r&   r(   r'   rc   r`   r   )	r   r   Zx_normrK   Z
func_pairsZforwÚbackr/   Ú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 )Nr,   )
r   Úastyper   r   r&   r'   r(   r`   rc   r   )r   rˆ   r   r   r   r   Útest_dtypesø   s    zTestFFT1D.test_dtypesN)/r   r   r    r+   r5   r8   r>   r@   rF   rH   rM   rN   rR   rU   rY   r\   rb   rd   rg   rh   rk   rl   ÚpytestÚmarkÚparametrizer   rE   rG   rX   r[   ri   rj   rw   r=   r?   rQ   rT   re   rf   r„   r‡   r   ZhalfZsingleÚdoubleZ
longdoublerŠ   r   r   r   r   r!      sX   
	






	

  þ
     û
ÿr!   rˆ   ÚorderÚFznon-contiguousr   c                 C   s  t j d¡}| ddd¡j| dd�}|dkr8t  |¡}n"|d d d… }t  |d d d… ¡}|j d	¡r˜t	d
ƒD ]&}|||d�}|||d�}t
||ƒ qnnf|j d¡rúdddg}	|j d¡rÌ|	 dddd g¡ |	D ]&}
|||
d�}|||
d�}t
||ƒ qÐnt‚d S )Né*   ry   é   é   F)Úcopyr�   r   r   r   r	   )r=   rE   r€   )r   r   )r   r   rE   )r   )r   )r   rq   )r   r   ZRandomStateZrandr‰   ZasfortranarrayZascontiguousarrayr   Úendswithr%   r   Úextendr   )rˆ   r�   r   ÚrngÚXÚYr
   ZX_resZY_resrr   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 )ÚTestFFTThreadSaferx   )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|   r*   )rŸ   r    r¢   r   r   r   4  s   ÿz2TestFFTThreadSafe._test_mtsame.<locals>.<listcomp>c                 S   s   g | ]}|  ¡ ‘qS r   )Ústart©r|   r   r   r   r   r   6  s     c                 S   s   g | ]}|  ¡ ‘qS r   )Újoinr§   r   r   r   r   8  s     é   )Útimeoutz6Function returned wrong value in multithreaded context)ÚqueueÚQueuer%   Úthreadsr   Úget)r   r¡   rŸ   ÚexpectedÚtr*   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   rt   r   r   r   r5   >  s    zTestFFTThreadSafe.test_fftc                 C   s    t  | jd¡}|  tj|¡ d S ©Ny      ð?        )r   Úfullr³   r±   r   r&   rµ   r   r   r   r8   B  s    zTestFFTThreadSafe.test_ifftc                 C   s   t  | j¡}|  tj|¡ d S r�   )r   r²   r³   r±   r   r(   rµ   r   r   r   rM   F  s    zTestFFTThreadSafe.test_rfftc                 C   s    t  | jd¡}|  tj|¡ d S r¶   )r   r·   r³   r±   r   r'   rµ   r   r   r   rN   J  s    zTestFFTThreadSafe.test_irfftc                 C   s"   t  | jt j¡}|  tj|¡ d S r�   )r   r²   r³   Ú	complex64r±   r   r`   rµ   r   r   r   rb   N  s    zTestFFTThreadSafe.test_hfftc                 C   s   t  | j¡}|  tj|¡ d S r�   )r   r²   r³   r±   r   rc   rµ   r   r   r   rd   R  s    zTestFFTThreadSafe.test_ihfftN)r   r   r    r­   r³   r±   r5   r8   rM   rN   rb   rd   r   r   r   r   r›   (  s   r›   r¡   c              	   C   sV   t  d¡� }| | dd„ tdƒD ƒ¡}W 5 Q R X | t d¡ƒ}|D ]}t||ƒ qBd S )Nr   c                 S   s   g | ]}t  d ¡‘qS )éd   )r   r²   )r|   Ú_r   r   r   r   \  s     z%test_multiprocess.<locals>.<listcomp>rz   r¹   )ÚmultiprocessingZPoolÚmapr%   r   r²   r   )r¡   ÚpÚresr4   r   r   r   r   Útest_multiprocessW  s
    $r¿   c                   @   s   e Zd Zdd„ ZdS )Ú
TestIRFFTNc                 C   s2   t j d¡\}}|d|  }d}tj||d� d S )N)r   rx   ry   é    r"   )éþÿÿÿrq   )r   r   r   r[   )r   ÚarZairt   rr   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  s   rÀ   )&r«   r¤   r»   Únumpyr   r‹   Znumpy.randomr   Znumpy.testingr   r   r   r   r   Z	scipy.fftr   r   r   r!   rŒ   r�   Zfloat32Zfloat64Z	longfloatr¸   r´   Zlongcomplexr=   rE   r&   r?   rG   rš   r›   r(   r'   r¿   rÀ   r   r   r   r   Ú<module>   sD    i  ÿþ  ÿþ/
