a
    ‡ù»j	>  ã                   @   s,  d Z ddlmZmZ ddlmZ ddlm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 eej d	¡gZejjZg 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�G dd„ dƒƒZeddddgd�G dd „ d ƒƒZeddddgd�G d!d"„ d"ƒƒZdS )#zŒIncludes test functions for fftpack.helper module

Copied from fftpack.helper by Pearu Peterson, October 2005
Modified for Array API, 2023

é    )Únext_fast_lenÚ_init_nd_shape_and_axes)Úassert_equal)ÚraisesN)Úarray_api_compatible)Úxp_assert_closeÚSCIPY_DEVICE)ÚfftÚskip_if_array_api)é   é   é   é   é   é   é	   é
   é   i˜  i  c                  C   s   t D ]} tt| ƒ| ƒ qd S )N)Ú_5_smooth_numbersr   r   )Ún© r   úAE:\soccer\ml_env\Lib\site-packages\scipy/fft/tests/test_helper.pyÚtest_next_fast_len   s    r   c                 C   sŒ   | }|dk rdsJ ‚t | dƒ\}}|dkr,q2|} qtd|d dƒD ]"}t | |ƒ\}}|dkr^qB|} qFqB| dksˆJ d|› d|› d| › �ƒ‚d S )	Nr   Fr   r   é   zx=z is not z-smooth, remainder=)ÚdivmodÚrange)Úxr   Zx_origÚqÚrÚdr   r   r   Ú_assert_n_smooth    s    
ÿr    T)Znp_onlyc                   @   sN   e Zd Zdd„ Zdd„ Zdd„ Zejje	j
dk ded	d
�dd„ ƒZdd„ ZdS )ÚTestNextFastLenc                 C   s\   t j d¡ dd„ }|ƒ D ]<}t|ƒ}t|dƒ |t|dƒksBJ ‚t|dƒ}t|dƒ qd S )NiÒ  c                   s   s   t ddƒE d H  dV  d S )Nr   iè  i€y )r   r   r   r   r   Únums<   s    z0TestNextFastLen.test_next_fast_len.<locals>.numsé   FTr   )ÚnpÚrandomÚseedr   r    )Úselfr"   r   Úmr   r   r   r   9   s    


z"TestNextFastLen.test_next_fast_lenc                 C   sL   t jt jt jt jt jt jg}|D ]&}|dƒ}t|ƒ}t|tt	|ƒƒƒ q d S )Ni90  )
r$   Zint16Zint32Zint64Zuint16Zuint32Zuint64r   r   Úint)r'   ZITYPESZitypr   ZtestNr   r   r   Útest_np_integersH   s
    z TestNextFastLen.test_np_integersc                 C   sJ   ddddddddddd	d
ddddœ}|  ¡ D ]\}}tt|dƒ|ƒ q,d S )Nr   r   r   r   r   r   r   é   é   é   i   é   é @)r   r   r   r   r   r   é   r   é   r+   r,   é   iý  r.   r/   T©Úitemsr   r   ©r'   Zhamsr   Úyr   r   r   Útestnext_fast_len_smallO   s
    
þz'TestNextFastLen.testnext_fast_len_smalll        z$Hamming Numbers too large for 32-bitT)Úreasonr   Ústrictc                 C   sd   dddddddddd	d
ddddddddddddddddddœ}|  ¡ D ]\}}tt|dƒ|ƒ qFd S )NéÀÇhi €„é+‰ë2i  B3ì     €· l   €sö'· ì    >å9ùl         ì      fØn l    >Uk±o ì     øq…. l   ØxQ+t0 ì      ¢!Í l    dopL?Í ì   í…hRì   ‰2 f;Ùì          ì     `71Y!l   à …("ì           ì    ËóX l         	 )r:   iÁÇhiÀ=ur;   i,‰ë2r<   l    €· r=   l   ¡>å9ùr>   l     fØn r?   l    øq…. r@   l     ¢!Í rA   l   ì…hRrB   l   ˆ2 f;ÙrC   l   ÿÿÿÿrD   l    `71Y!rE   l          l   ËóX rF   l   !ËóX Tr3   r5   r   r   r   Útestnext_fast_len_bigW   s6    äz%TestNextFastLen.testnext_fast_len_bigc                 C   s,   t ddd�dksJ ‚t ddd�dks(J ‚d S )Nr#   T)Úrealé   r0   F)ÚtargetrH   )r   )r'   r   r   r   Útest_keyword_args|   s    z!TestNextFastLen.test_keyword_argsN)Ú__name__Ú
__module__Ú__qualname__r   r*   r7   ÚpytestÚmarkZxfailÚsysÚmaxsizeÚ
ValueErrorrG   rK   r   r   r   r   r!   6   s   þ
"r!   )Zcpu_onlyc                   @   sl   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S )ÚTest_init_nd_shape_and_axesc           	      C   sF   |  d¡}d }d }d}g }t|||ƒ\}}||ks6J ‚||ksBJ ‚d S )Nr   r   ©Úasarrayr   ©	r'   Úxpr   ÚshapeÚaxesZshape_expectedZaxes_expectedZ	shape_resZaxes_resr   r   r   Útest_py_0d_defaults„   s    
z/Test_init_nd_shape_and_axes.test_py_0d_defaultsc           	      C   sF   |  d¡}d }d }d}g }t|||ƒ\}}||ks6J ‚||ksBJ ‚d S )Ng      @r   rU   rW   r   r   r   Útest_xp_0d_defaults‘   s    
z/Test_init_nd_shape_and_axes.test_xp_0d_defaultsc           	      C   sL   |  g d¢¡}d }d }d}dg}t|||ƒ\}}||ks<J ‚||ksHJ ‚d S )N©r   r   r   )r   r   rU   rW   r   r   r   Útest_py_1d_defaultsž   s    z/Test_init_nd_shape_and_axes.test_py_1d_defaultsc           	      C   sL   |  ddd¡}d }d }d}dg}t|||ƒ\}}||ks<J ‚||ksHJ ‚d S )Nr   r   çš™™™™™¹?)r   )Úaranger   rW   r   r   r   Útest_xp_1d_defaults«   s    z/Test_init_nd_shape_and_axes.test_xp_1d_defaultsc           	      C   sV   |  g d¢g d¢g¡}d }d }d}ddg}t|||ƒ\}}||ksFJ ‚||ksRJ ‚d S )N)r   r   r   r   )r   r   r0   r   )r   r   r   r   rU   rW   r   r   r   Útest_py_2d_defaults¸   s    
ÿz/Test_init_nd_shape_and_axes.test_py_2d_defaultsc           	      C   sZ   |  ddd¡}| |d¡}d }d }d}ddg}t|||ƒ\}}||ksJJ ‚||ksVJ ‚d S )Nr   r   r_   )r   r   )r`   Zreshaper   rW   r   r   r   Útest_xp_2d_defaultsÆ   s    z/Test_init_nd_shape_and_axes.test_xp_2d_defaultsc           	      C   sN   |  g d¢¡}d }d }d}g d¢}t|||ƒ\}}||ks>J ‚||ksJJ ‚d S )N©r   r   r   r   r   ©r   r   r   r   r   ©Úzerosr   rW   r   r   r   Útest_xp_5d_defaultsÔ   s    z/Test_init_nd_shape_and_axes.test_xp_5d_defaultsc           	      C   sR   |  g d¢¡}g d¢}d }d}g d¢}t|||ƒ\}}||ksBJ ‚||ksNJ ‚d S )Nrd   )r   éÿÿÿÿri   r   r   )r   r   r   r   r   re   rf   rW   r   r   r   Útest_xp_5d_set_shapeá   s    z0Test_init_nd_shape_and_axes.test_xp_5d_set_shapec           	      C   sR   |  g d¢¡}d }g d¢}d}g d¢}t|||ƒ\}}||ksBJ ‚||ksNJ ‚d S )Nrd   )r   r   r   )r   r   r   rf   rW   r   r   r   Útest_xp_5d_set_axesî   s    z/Test_init_nd_shape_and_axes.test_xp_5d_set_axesc           	      C   sV   |  g d¢¡}g d¢}g d¢}d}g d¢}t|||ƒ\}}||ksFJ ‚||ksRJ ‚d S )Nrd   )r   ri   r   )r   r   r   )r   r   r   rf   rW   r   r   r   Útest_xp_5d_set_shape_axesû   s    z5Test_init_nd_shape_and_axes.test_xp_5d_set_shape_axesc                 C   s<   |  d¡}t|dd d�\}}|dks(J ‚|g d¢ks8J ‚d S )N)r   r   r   r   )r   r   r   ©rY   rZ   r]   rf   )r'   rX   r   rY   rZ   r   r   r   Útest_shape_axes_subset  s    
z2Test_init_nd_shape_and_axes.test_shape_axes_subsetc                 C   s˜  |  d¡}ttdd��* t|d ddgddggd� W d   ƒ n1 sF0    Y  ttdd��" t|d g d¢d� W d   ƒ n1 s„0    Y  ttd	d��  t|d dgd� W d   ƒ n1 sÀ0    Y  ttd	d��  t|d d
gd� W d   ƒ n1 sü0    Y  ttdd��" t|d ddgd� W d   ƒ n1 �s<0    Y  ttdd��* t|ddgddggd d� W d   ƒ n1 �s„0    Y  ttdd��" t|g d¢d d� W d   ƒ n1 �sÄ0    Y  ttdd��. t|  g d¢¡g d¢dgd� W d   ƒ n1 �s0    Y  ttdd��  t|dgd d� W d   ƒ n1 �sN0    Y  ttdd�� t|d
d d� W d   ƒ n1 �sŠ0    Y  d S )Nr   z-axes must be a scalar or iterable of integers)Úmatchr   r   r   rm   )g      ð?g       @g      @g      @z$axes exceeds dimensionality of inputéþÿÿÿzall axes must be uniquer   z.shape must be a scalar or iterable of integerszBwhen given, axes and shape arguments have to be of the same length)r   r   r   r   r]   z1invalid number of data points \(\[0\]\) specifiedz2invalid number of data points \(\[-2\]\) specified)rg   Úassert_raisesrS   r   )r'   rX   r   r   r   r   Útest_errors  sF    
80ÿ.ÿ.ÿ2:2ÿ
ÿ&ÿ0ÿz'Test_init_nd_shape_and_axes.test_errorsN)rL   rM   rN   r[   r\   r^   ra   rb   rc   rh   rj   rk   rl   rn   rr   r   r   r   r   rT   �   s   rT   Ztorchz1torch.fft not yet implemented by array-api-compat)Úreasonsc                   @   s,   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	S )
ÚTestFFTShiftc                 C   s|   |  g d¢¡}|  g d¢¡}tt |¡|ƒ tt |¡|ƒ |  g d¢¡}|  g d¢¡}tt |¡|ƒ tt |¡|ƒ d S )N)	ç        r   r   r   r   éüÿÿÿéýÿÿÿrp   ri   )	g      Àrw   rp   ri   r   r   r   r   r   )
ru   r   r   r   r   éûÿÿÿrv   rw   rp   ri   )
g      Àrv   rw   rp   ri   r   r   r   r   r   ©rV   r   r	   ÚfftshiftÚ	ifftshift)r'   rX   r   r6   r   r   r   Útest_definitionB  s    zTestFFTShift.test_definitionc                 C   s8   dD ].}|  tj |f¡¡}tt t |¡¡|ƒ qd S )N)r   r   r   éd   éÓ   )rV   r$   r%   r   r	   r{   rz   )r'   rX   r   r   r   r   r   Útest_inverseL  s    zTestFFTShift.test_inversec                 C   sÀ   |  g d¢g d¢g d¢g¡}|  g d¢g d¢g d¢g¡}ttj|dd�|ƒ ttj|d	d�tj|d
d�ƒ ttj|dd�|ƒ ttj|d	d�tj|d
d�ƒ tt |¡|ƒ tt |¡|ƒ d S )N)ru   r   r   )r   r   rv   )rw   rp   ri   )g      ð¿rw   rp   )r   r   r   )rv   r   r   ©r   r   ©rZ   r   ©r   ry   )r'   rX   ÚfreqsZshiftedr   r   r   Útest_axes_keywordQ  s    ÿzTestFFTShift.test_axes_keywordc                 C   s¦  |j ddgddgddgg|jd�}|j ddgddgddgg|jd�}ttj|dd�|ƒ ttj|dd�|ƒ ttj|d	d�|ƒ ttj|dgd�|ƒ |j ddgddgddgg|jd�}ttj|dd�|ƒ ttj|dd�|ƒ |j ddgddgddgg|jd�}ttj|d
d�|ƒ ttj|d
d�|ƒ ttj|ddgd�|ƒ ttj|ddgd�|ƒ ttj|dd�|ƒ ttj|dd�|ƒ tt |¡|ƒ tt |¡|ƒ dS )z1 Test 2D input, which has uneven dimension sizes r   r   r   r   r   r   ©Údtyper�   r‚   r€   N)rV   Úfloat64r   r	   rz   r{   )r'   rX   rƒ   Z
shift_dim0Z
shift_dim1Zshift_dim_bothr   r   r   Útest_uneven_dims\  sT    ýüýüýüýüzTestFFTShift.test_uneven_dimsN)rL   rM   rN   r|   r   r„   rˆ   r   r   r   r   rt   >  s   
rt   Zarray_api_strictZcupyz+fft not yet implemented by array-api-strictz0cupy.fft not yet implemented by array-api-compatc                   @   s   e Zd Zdd„ ZdS )ÚTestFFTFreqc                 C   s(  t }z0|jg d¢|j|d�}|jg d¢|j|d�}W n: tyn   |jg d¢|jd�}|jg d¢|jd�}Y n0 |jdtjd|d� |jd�}t||ƒ |jd|j tjd|j|d� |jd�}t||ƒ |jdtjd|d� |jd�}t||ƒ |jd|j tjd|j|d� |jd�}t||ƒ d S )N)	r   r   r   r   r   rv   rw   rp   ri   ©r†   Údevice)
r   r   r   r   r   rx   rv   rw   rp   ri   r…   r   ©rX   r   )r   rV   r‡   Ú	TypeErrorr	   Zfftfreqr   Úpi©r'   rX   r‹   r   Zx2r6   r   r   r   r|   �  s*    
ÿ
ÿ

ÿ
(

(zTestFFTFreq.test_definitionN©rL   rM   rN   r|   r   r   r   r   r‰   Š  s   r‰   c                   @   s   e Zd Zdd„ ZdS )ÚTestRFFTFreqc                 C   s(  t }z0|jg d¢|j|d�}|jg d¢|j|d�}W n: tyn   |jg d¢|jd�}|jg d¢|jd�}Y n0 |jdtjd|d� |jd�}t||ƒ |jd|j tjd|j|d� |jd�}t||ƒ |jdtjd|d� |jd�}t||ƒ |jd|j tjd|j|d� |jd�}t||ƒ d S )Nre   rŠ   )r   r   r   r   r   r   r…   r   rŒ   r   )r   rV   r‡   r�   r	   Zrfftfreqr   rŽ   r�   r   r   r   r|   «  s    
(

(zTestRFFTFreq.test_definitionNr�   r   r   r   r   r‘   ¦  s   r‘   )Ú__doc__Zscipy.fft._helperr   r   Znumpy.testingr   rO   r   rq   Únumpyr$   rQ   Zscipy.conftestr   Zscipy._lib._array_apir   r   Zscipyr	   rP   ZusefixturesZ
pytestmarkr
   r   r   r    r!   rT   rt   r‰   r‘   r   r   r   r   Ú<module>   sF   J =ÿJÿÿÿÿ