a
    ‡ù»jØT  ã                   @   sÞ  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
 d dlmZ d dlmZ d dlmZ d dlmZmZmZmZ eej d¡gZejjZdd	„ Zd
d„ ZG dd„ dƒZG dd„ dƒZedd�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dd�ej dejej'ej,ej-g¡dd„ ƒƒZ.eddgd �G d!d"„ d"ƒƒZ/eddgd �ej dejej'ej,ej-ej&ej)ej0ej1ej2ej3g
¡d#d$„ ƒƒZ4dS )%é    N)Úrandom)Úassert_array_almost_equalÚassert_allclose)Úraises)Úarray_api_compatible)Úarray_namespaceÚsizeÚxp_assert_closeÚxp_assert_equalÚskip_if_array_apic                 C   sz   | t j t jt jt jt jt jt jt jt jt j	t j
t jfv r@|j}n6| t jt jt jt jt jt jfv rh|j}ntd| › �ƒ‚|S )NzUnknown FFT function: )ÚfftÚfftnÚfft2ÚifftÚifftnÚifft2ÚhfftÚhfftnÚhfft2ÚirfftÚirfftnÚirfft2Ú
complex128ÚrfftÚrfftnÚrfft2ÚihfftÚihfftnÚihfft2Úfloat64Ú
ValueError)ÚfuncÚxpÚdtype© r$   ú@E:\soccer\ml_env\Lib\site-packages\scipy/fft/tests/test_basic.pyÚget_expected_input_dtype   s    ýÿr&   c                 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phaser$   r$   r%   Úfft1%   s    r3   c                   @   s   e Zd Zdd„ ZdS )ÚTestFFTShiftc                 C   sD   |j g d¢|jd�}|jdkr0tttj|dƒ ntttj|dƒ d S )N©r(   é   é   ©r#   Útorchr   )Úasarrayr   Ú__name__Úassert_raisesÚRuntimeErrorr   r    )Úselfr"   r1   r$   r$   r%   Ú
test_fft_n.   s    
zTestFFTShift.test_fft_nN)r;   Ú
__module__Ú__qualname__r?   r$   r$   r$   r%   r4   ,   s   r4   c                   @   s�  e Zd Zdd„ Zdd„ Zdd„ Zeddgd	�d
d„ ƒZeddgd	�dd„ ƒZeddgd	�dd„ ƒZ	eddgd	�dd„ ƒZ
dd„ Zdd„ Zeddgd	�dd„ ƒZeddgd	�dd„ ƒZeddgd	�dd„ ƒZeddgd	�dd„ ƒZdd„ Zd d!„ Zeddgd	�d"d#„ ƒZeddgd	�d$d%„ ƒZeddgd	�d&d'„ ƒZeddgd	�d(d)„ ƒZd*d+„ Zeddgd	�ej d,ejejejejg¡d-d.„ ƒƒZ eddgd	�ej d,ej!ej"g¡d/d0„ ƒƒZ#eddgd	�ej d,ejejejejg¡d1d2„ ƒƒZ$eddgd	�ej d,ej%ej&ej'ej(ej)ej*ej!ej"g¡d3d4„ ƒƒZ+d5d6„ Z,ed7d8�ej d9e-j.e-j/g¡d:d;„ ƒƒZ0ej d9d<d=g¡d>d?„ ƒZ1ej d9d@dAg¡dBdC„ ƒZ2dDS )EÚ	TestFFT1Dc              	   C   sš   d}|  t|ƒdt|ƒ  ¡}|  t|ƒ¡}td|ƒD ]^}tt t |d|… ¡¡|d|… ddd� tt t |d|… ¡|¡|d|… ddd� q6d S )Ni   ù              ð?r(   r   g•Ö&è.>©ÚrtolZatol)r:   r   Úranger	   r   r   r   r   )r>   r"   Úmaxlenr1   ZxrÚir$   r$   r%   Útest_identity8   s    ,zTestFFT1D.test_identityc              	   C   s–   t dƒdt dƒ  }| t|ƒ¡}| |¡}tt |¡|ƒ ttj|dd�|ƒ ttj|dd�|| |jd|jd�¡ ƒ ttj|dd�|d ƒ d S )Né   rC   Úbackward©ÚnormÚorthor8   Úforward)r   r:   r3   r	   r   Úsqrtr   ©r>   r"   r1   Úexpectr$   r$   r%   Útest_fft@   s    
ÿzTestFFT1D.test_fftc                 C   s\   |  tdƒdtdƒ  ¡}tt t |¡¡|ƒ dD ]"}ttjtj||d�|d�|ƒ q4d S )NrJ   rC   ©rK   rN   rO   rL   )r:   r   r	   r   r   ©r>   r"   r1   rM   r$   r$   r%   Ú	test_ifftJ   s    zTestFFT1D.test_ifftr9   ú1torch.fft not yet implemented by array-api-compat©Úreasonsc              	   C   sœ   |  tdƒdtdƒ  ¡}tjtj|dd�dd�}tt |¡|ƒ ttj|dd�|ƒ ttj|dd�|| |j d	|jd
�¡ ƒ ttj|dd�|d	 ƒ d S ©N©rJ   é   rC   r(   r)   r   rK   rL   rN   éX  r8   rO   )r:   r   r   r	   r   rP   r   rQ   r$   r$   r%   Ú	test_fft2P   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j|dd�|| |j d	|jd
�¡ ƒ ttj|dd�|d	 ƒ d S rZ   )r:   r   r   r   r	   r   rP   r   rQ   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j|d	d�|| |j d
|jd�¡ ƒ ttj|dd�|d
 ƒ d S ©N©rJ   r\   é
   rC   r6   r)   r(   r   rK   rL   rN   ép  r8   rO   )r:   r   r   r	   r   rP   r   rQ   r$   r$   r%   Ú	test_fftnf   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j|d	d�t |¡| |j d
|jd�¡ ƒ ttj|dd�|d
 ƒ d S r`   )r:   r   r   r   r	   r   rP   r   rQ   r$   r$   r%   Ú
test_ifftnq   s    "þzTestFFT1D.test_ifftnc              
   C   s°   |j tdƒ|jd�}t|ƒdt|ƒ fD ]‚}dD ]B}ttj|||d�tj|j ||jd�||d�d |d d … ƒ q0ttj||dd�tj||d�| |j ||jd�¡ ƒ q(d S )	Né   r8   r6   )NrK   rN   rO   ©ÚnrM   r(   rN   )rh   )	r:   r   r   r   r	   r   r   r   rP   )r>   r"   r1   rh   rM   r$   r$   r%   Ú	test_rfft~   s    ÿÿÿ"þzTestFFT1D.test_rfftc                 C   sP   |  tdƒ¡}tt t |¡¡|ƒ dD ]"}ttjtj||d�|d�|ƒ q(d S )NrJ   rT   rL   )r:   r   r	   r   r   r   rU   r$   r$   r%   Ú
test_irfftŠ   s    zTestFFT1D.test_irfftc              	   C   s¤   |j tdƒ|jd�}t |j ||jd�¡d d …d d…f }tt |¡|ƒ ttj|dd�|ƒ ttj|dd�|| |j d|jd�¡ ƒ ttj|dd�|d ƒ d S ©	Nr[   r8   é   rK   rL   rN   r]   rO   )	r:   r   r   r   r   r   r	   r   rP   rQ   r$   r$   r%   Ú
test_rfft2�   s    &ÿzTestFFT1D.test_rfft2c                 C   sP   |  tdƒ¡}tt t |¡¡|ƒ dD ]"}ttjtj||d�|d�|ƒ q(d S ©Nr[   rT   rL   )r:   r   r	   r   r   r   rU   r$   r$   r%   Útest_irfft2›   s    zTestFFT1D.test_irfft2c              	   C   sª   |j tdƒ|jd�}t |j ||jd�¡d d …d d …d d…f }tt |¡|ƒ ttj|dd�|ƒ ttj|dd�|| |j d|jd�¡ ƒ ttj|dd�|d ƒ d S ©	Nra   r8   é   rK   rL   rN   rc   rO   )	r:   r   r   r   r   r   r	   r   rP   rQ   r$   r$   r%   Ú
test_rfftn£   s    ,ÿzTestFFT1D.test_rfftnc                 C   sP   |  tdƒ¡}tt t |¡¡|ƒ dD ]"}ttjtj||d�|d�|ƒ q(d S ©Nra   rT   rL   )r:   r   r	   r   r   r   rU   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j|dd�|| 	|jd|j
d	�¡ ƒ ttj|d
d�|d ƒ d S )Né   rC   r(   r'   rK   rL   rN   rJ   r8   rO   )r   r,   ÚconcatenateÚconjr:   Úrealr   r	   r   rP   r   )r>   r"   r1   Úx_hermrR   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�|ƒ qvd S )Nru   rC   r(   r'   rT   rL   )	r   r,   rv   rw   r:   r	   r   r   r   )r>   r"   r1   ry   rM   r$   r$   r%   Ú
test_ihfftÃ   s    

zTestFFT1D.test_ihfftc                 C   sP   |  tdƒ¡}tt t |¡¡|ƒ dD ]"}ttjtj||d�|d�|ƒ q(d S rn   )r:   r   r	   r   r   r   rU   r$   r$   r%   Ú
test_hfft2Í   s    zTestFFT1D.test_hfft2c              	   C   s¤   |j tdƒ|jd�}t |j ||jd�¡d d …d d…f }tt |¡|ƒ ttj|dd�|ƒ ttj|dd�|| |j d|jd�¡ ƒ ttj|dd�|d ƒ d S rk   )	r:   r   r   r   r   r   r	   r   rP   rQ   r$   r$   r%   Útest_ihfft2Õ   s    &þzTestFFT1D.test_ihfft2c                 C   sP   |  tdƒ¡}tt t |¡¡|ƒ dD ]"}ttjtj||d�|d�|ƒ q(d S rs   )r:   r   r	   r   r   r   rU   r$   r$   r%   Ú
test_hfftnâ   s    zTestFFT1D.test_hfftnc              	   C   sª   |j tdƒ|jd�}t |j ||jd�¡d d …d d …d d…f }t|t |¡ƒ t|tj|dd�ƒ ttj|dd�|| |j d|jd�¡ ƒ ttj|dd�|d ƒ d S rp   )	r:   r   r   r   r   r   r	   r   rP   rQ   r$   r$   r%   Útest_ihfftnê   s    ,þzTestFFT1D.test_ihfftnc           
      C   sl   t ||ƒ}|jtdƒ|d�}g d¢}t|ƒ}|D ]6}||j||d�ƒ}|j|||d�|d�}	t||	ƒ q0d S )Nra   r8   )©r   r(   r6   ©r   r6   r(   )r(   r   r6   ©r(   r6   r   )r6   r   r(   )r6   r(   r   ©Úaxes)r&   r:   r   r   Úpermute_dimsr	   )
r>   Úopr"   r#   r1   r„   Úxp_testÚaÚop_trÚtr_opr$   r$   r%   Ú_check_axes÷   s    
zTestFFT1D._check_axesr†   c                 C   s   |   ||¡ d S ©N©r‹   ©r>   r†   r"   r$   r$   r%   Útest_axes_standard  s    zTestFFT1D.test_axes_standardc                 C   s   |   ||¡ d S rŒ   r�   rŽ   r$   r$   r%   Útest_axes_non_standard  s    z TestFFT1D.test_axes_non_standardc           	         sª   t ||ƒ}|jtdƒ|d�‰g d¢}tˆƒ}|D ]t‰ t‡ ‡fdd„tˆjƒD ƒƒ}||jˆˆ d�|d d… dd	�}|j|ˆ|d d… ˆ d d… d	�ˆ d�}t||ƒ q0d S )
N©é   é   é   r8   ©r€   r�   r‚   c                    s4   g | ],}|ˆ d d… v r&dˆj |  nˆj | ‘qS ©Nr6   ©Úshape©Ú.0Úax©rˆ   r1   r$   r%   Ú
<listcomp>  s   ÿzBTestFFT1D.test_axes_subset_with_shape_standard.<locals>.<listcomp>rƒ   r6   ©r   r(   ©Úsr„   ©	r&   r:   r   r   ÚtuplerF   Úndimr…   r	   ©	r>   r†   r"   r#   r„   r‡   r˜   r‰   rŠ   r$   rœ   r%   Ú$test_axes_subset_with_shape_standard  s    
ÿÿ ÿz.TestFFT1D.test_axes_subset_with_shape_standardc           	         sª   t ||ƒ}|jtdƒ|d�‰g d¢}tˆƒ}|D ]t‰ t‡ ‡fdd„tˆjƒD ƒƒ}||jˆˆ d�|d d… dd	�}|j|ˆ|d d… ˆ d d… d	�ˆ d�}t||ƒ q0d S )
Nr‘   r8   r•   c                    s4   g | ],}|ˆ d d… v r&dˆj |  nˆj | ‘qS r–   r—   r™   rœ   r$   r%   r�   .  s   ÿzFTestFFT1D.test_axes_subset_with_shape_non_standard.<locals>.<listcomp>rƒ   r6   rž   rŸ   r¡   r¤   r$   rœ   r%   Ú(test_axes_subset_with_shape_non_standard!  s    
ÿ (z2TestFFT1D.test_axes_subset_with_shape_non_standardc                 C   sà   |j tdƒ|jd�}t|ƒ}|j |¡}t|ƒd }tjtj	ftj
tjftjtjfg}|D ]€\}}|tjkrˆ|j ||jd�}|j |¡}t|ƒdt|ƒ fD ]<}dD ]2}	||||	d�}
||
||	d�}
t|j |
¡|ƒ q¤qœqZd S )NrJ   r8   r6   rT   rg   )r:   r   r   r   ZlinalgZvector_normr   r   r   r   r   r   r   r   r	   )r>   r"   r1   r‡   Zx_normrh   Z
func_pairsZforwÚbackrM   Útmpr$   r$   r%   Útest_all_1d_norm_preserving5  s"    


û
z%TestFFT1D.test_all_1d_norm_preservingT©Znp_onlyr#   c                 C   sÎ   t dƒ |¡}tjtjtjtji}| || ¡}t t |¡¡}t 	t 
|¡¡}t t |¡|jd ¡}t||ƒ t||ƒ t||ƒ |j|jks–J ‚|jt tj|j¡ks°J ‚|jt tj|j¡ksÊJ ‚d S )NrJ   r   )r   Úastyper,   Úfloat16Ú	complex64Ú
longdoubleÚclongdoubler   r   r   r   r   r   r˜   r   r#   Zresult_typeÚfloat32)r>   r#   r1   Z
out_dtypesZ	x_complexÚres_fftÚres_rfftÚres_hfftr$   r$   r%   Útest_dtypes_nonstandardL  s    


z!TestFFT1D.test_dtypes_nonstandardr°   r   c                 C   sr   |j tdƒt||ƒd�}t t |¡¡}t t |¡|jd ¡}dddœ| }t	|||dd� t	|||dd� d S )NrJ   r8   r   çiUMu?ç:Œ0âŽyE>)r°   r   rD   )
r:   r   Úgetattrr   r   r   r   r   r˜   r	   )r>   r#   r"   r1   r²   r³   rE   r$   r$   r%   Útest_dtypes_real^  s    zTestFFT1D.test_dtypes_realr­   r   c                 C   sJ   |j tdƒt||ƒd�}t t |¡¡}dddœ| }t|||dd� d S )NrJ   r8   rµ   r¶   )r­   r   r   rD   )r:   r   r·   r   r   r	   )r>   r#   r"   r1   r±   rE   r$   r$   r%   Útest_dtypes_complexi  s    zTestFFT1D.test_dtypes_complexN)3r;   r@   rA   rI   rS   rV   r   r^   r_   rd   re   ri   rj   rm   ro   rr   rt   rz   r{   r|   r}   r~   r   r‹   ÚpytestÚmarkÚparametrizer   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%   rB   6   s´   
ÿ
	ÿ
	ÿ
	ÿ
ÿ
	ÿ
ÿ
	ÿ

ÿ
ÿ
ÿ
ÿ

ÿÿÿÿÿý

rB   Trª   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
||ƒ qnn`|j d¡rôg d¢}	|j d¡rÆ|	 g d¢¡ |	D ]&}
|||
d�}|||
d�}t
||ƒ qÊnt‚d S )Né*   r“   é   é   F)Úcopyr¾   r'   r   r7   r)   )r   r   )rž   )r(   r6   )r   r6   r   ))r   )r(   )r6   Nrƒ   )r,   r   ZRandomStateZrandr«   ZasfortranarrayZascontiguousarrayr;   ÚendswithrF   r   Úextendr    )r#   r½   r   ÚrngÚXÚYr*   ZX_resZY_resr„   r›   r$   r$   r%   Útest_fft_with_orderr  s(    rÈ   c                   @   sR   e Zd ZdZdZddœ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   éÈ   N©r"   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	d
� q^d S )Nc                    s   |  ˆ | Ž ¡ d S rŒ   )Úput)ÚargsÚq)r!   r$   r%   Úworkerž  s    z.TestFFTThreadSafe._test_mtsame.<locals>.workerc                    s   g | ]}t jˆˆ ˆfd �‘qS ))ÚtargetrÍ   )Ú	threadingÚThread)rš   rH   )rÍ   rÎ   rÏ   r$   r%   r�   ¥  s   ÿz2TestFFTThreadSafe._test_mtsame.<locals>.<listcomp>c                 S   s   g | ]}|  ¡ ‘qS r$   )Ústart©rš   r1   r$   r$   r%   r�   §  ó    c                 S   s   g | ]}|  ¡ ‘qS r$   )ÚjoinrÔ   r$   r$   r%   r�   ©  rÕ   é   )Útimeoutz6Function returned wrong value in multithreaded context)Úerr_msg)ÚqueueÚQueuerF   Úthreadsr
   Úget)r>   r!   r"   rÍ   ÚexpectedÚtrH   r$   )rÍ   r!   rÎ   rÏ   r%   Ú_test_mtsame�  s    ÿþzTestFFTThreadSafe._test_mtsamec                 C   s(   |j | j|jd�}| jtj||d� d S ©Nr8   rË   )ÚonesÚinput_shaper   rà   r   ©r>   r"   rˆ   r$   r$   r%   rS   ²  s    zTestFFTThreadSafe.test_fftc                 C   s$   |  | jd¡}| jtj||d� d S ©Ny      ð?        rË   )Úfullrã   rà   r   r   rä   r$   r$   r%   rV   ¶  s    zTestFFTThreadSafe.test_ifftc                 C   s"   |  | j¡}| jtj||d� d S ©NrË   )râ   rã   rà   r   r   rä   r$   r$   r%   ri   º  s    zTestFFTThreadSafe.test_rfftc                 C   s$   |  | jd¡}| jtj||d� d S rå   )ræ   rã   rà   r   r   rä   r$   r$   r%   rj   ¾  s    zTestFFTThreadSafe.test_irfftc                 C   s(   |j | j|jd�}| jtj||d� d S rá   )râ   rã   r­   rà   r   r   rä   r$   r$   r%   rz   Â  s    zTestFFTThreadSafe.test_hfftc                 C   s"   |  | j¡}| jtj||d� d S rç   )râ   rã   rà   r   r   rä   r$   r$   r%   r{   Æ  s    zTestFFTThreadSafe.test_ihfft)r;   r@   rA   rÜ   rã   rà   rS   rV   ri   rj   rz   r{   r$   r$   r$   r%   rÉ   ™  s   rÉ   r!   c                 C   sj   t  d¡�*}| | dd„ tdƒD ƒ¡}W d   ƒ n1 s:0    Y  | t d¡ƒ}|D ]}t||ƒ qVd S )Nr6   c                 S   s   g | ]}t  d ¡‘qS )éd   )r,   râ   )rš   Ú_r$   r$   r%   r�   Ñ  rÕ   z%test_multiprocess.<locals>.<listcomp>r”   rè   )ÚmultiprocessingZPoolÚmaprF   r,   râ   r   )r!   ÚpÚresrR   r1   r$   r$   r%   Útest_multiprocessË  s
    8rî   r9   rW   rX   c                   @   s   e Zd Zdd„ ZdS )Ú
TestIRFFTNc                 C   s<   t j d¡\}}|d|  }| |¡}d}tj||d� d S )N)r6   r’   r“   é    rC   )éþÿÿÿrƒ   )r,   r   r:   r   r   )r>   r"   ÚarZairˆ   r„   r$   r$   r%   Útest_not_last_axis_successÜ  s
    
z%TestIRFFTN.test_not_last_axis_successN)r;   r@   rA   ró   r$   r$   r$   r%   rï   Ø  s   rï   c                 C   sZ   | t jt jt jfv r|j}n|j}|jdkrV|jg d¢|d�}| |ƒ tt	| |dd� d S )NÚnumpyr5   r8   r6   )Úworkers)
r   r   r   r   r   r   r;   r:   r<   r    )r!   r"   r#   r1   r$   r$   r%   Útest_non_standard_paramsç  s    
rö   )5rÚ   rÑ   rê   rô   r,   rº   Znumpy.randomr   Znumpy.testingr   r   r   r<   Z	scipy.fftr   Zscipy.conftestr   Zscipy._lib._array_apir   r   r	   r
   r»   ZusefixturesZ
pytestmarkr   r&   r3   r4   rB   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%   Ú<module>   sb   
  >ÿþÿþ2ÿÿþ