o
    Ö­jÛN  ã                   @   sN  d Z ddlmZ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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d„ dƒƒZG dd„ dƒZ eddd�eddd�G dd „ d ƒƒƒZ!eddd�edd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Úprev_fast_lenÚ_init_nd_shape_and_axes)Úassert_equal)ÚraisesN)Úarray_api_compatible)Úxp_assert_closeÚget_xp_devicesÚ	xp_deviceÚarray_namespace)ÚfftÚskip_xp_backends)é   é   é   é   é   é   é	   é
   é   i˜  i  c                  C   s   t D ]	} tt| ƒ| ƒ qd S )N)Ú_5_smooth_numbersr   r   )Ún© r   úX/var/www/html/CropPilot/venv/lib/python3.10/site-packages/scipy/fft/tests/test_helper.pyÚtest_next_fast_len   s   ÿr   c                 C   sŒ   | }|dk rJ ‚	 t | dƒ\}}|dkrn|} q	td|d dƒD ]}	 t | |ƒ\}}|dkr/n|} q#q | dksDJ d|› d|› d	| › �ƒ‚d S )
Nr   FTr   r   é   zx=z is not z-smooth, remainder=)ÚdivmodÚrange)Úxr   Úx_origÚqÚrÚdr   r   r   Ú_assert_n_smooth"   s(   üü
ÿr$   T)Únp_onlyc                   @   óN   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   ó\   t j d¡ dd„ }|ƒ D ]}t|ƒ}t|dƒ |t|dƒks!J ‚t|dƒ}t|dƒ qd S )NéÒ  c                   s   ó   � t ddƒE d H  dV  d S ©Nr   éè  i€y ©r   r   r   r   r   Únums>   ó   €
z0TestNextFastLen.test_next_fast_len.<locals>.numsé   FTr   )ÚnpÚrandomÚseedr   r$   ©Úselfr.   r   Úmr   r   r   r   ;   ó   


ú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 )Né90  )
r1   Úint16Úint32Úint64Úuint16Úuint32Úuint64r   r   Úint©r5   ÚITYPESÚitypr   ÚtestNr   r   r   Útest_np_integersJ   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   é   rE   rF   é   éý  rH   rI   T©Úitemsr   r   ©r5   Úhamsr   Úyr   r   r   Útestnext_fast_len_smallQ   s   
þÿz'TestNextFastLen.testnext_fast_len_smallì        ú$Hamming Numbers too large for 32-bitT©Úreasonr   Ústrictc                 C   s¬   i 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“dd“dd“dddddddddddd œ¥}|  ¡ D ]\}}tt|d!ƒ|ƒ qGd S )"NéÀÇhéÁÇhi €„éÀ=ué+‰ë2é,‰ë2i  B3ì     €· ì    €· l   €sö'· ì    >å9ùì   ¡>å9ùl         ì      fØn ì     fØn l    >Uk±o ì     øq…. ì    øq…. l   ØxQ+t0 ì      ¢!Í ì     ¢!Í l    dopL?Í ì   í…hRì   ì…hRì   ‰2 f;Ùì          ì     `71Y!l   à …("ì           ì    ËóX l         	 )rk   ì   ˆ2 f;Ùrl   ì   ÿÿÿÿrm   ì    `71Y!rn   ì          ì   ËóX ro   ì   !ËóX TrO   rQ   r   r   r   Útestnext_fast_len_bigY   sd   ÿÿþýýüüûûúùø	÷
öõóòäÿz%TestNextFastLen.testnext_fast_len_bigc                 C   ó,   t ddd�dks
J ‚t ddd�dksJ ‚d S )Nr0   T©Úrealé   rK   F©Útargetry   )r   ©r5   r   r   r   Útest_keyword_args~   ó   z!TestNextFastLen.test_keyword_argsN)Ú__name__Ú
__module__Ú__qualname__r   rD   rT   ÚpytestÚmarkÚxfailÚsysÚmaxsizeÚ
ValueErrorrv   r~   r   r   r   r   r'   8   s    þ
"r'   c                   @   r&   )ÚTestPrevFastLenc                 C   r(   )Nr)   c                   s   r*   r+   r-   r   r   r   r   r.   ˆ   r/   z0TestPrevFastLen.test_prev_fast_len.<locals>.numsr0   FTr   )r1   r2   r3   r   r$   r4   r   r   r   Útest_prev_fast_len…   r7   z"TestPrevFastLen.test_prev_fast_lenc                 C   sn   t jt jt jt jt jt jg}|D ]$}|dƒ}t|ƒ}t|tt	|ƒƒƒ t|dd�}t|tt	|ƒdd�ƒ qd S )Nr8   Trx   )
r1   r9   r:   r;   r<   r=   r>   r   r   r?   r@   r   r   r   rD   ”   s   ÿúz TestPrevFastLen.test_np_integersc                 C   sò   dddddddddd	d
d
ddddœ}|  ¡ D ]\}}tt|dƒ|ƒ qi 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	“d
d
“dd
“ddddddddddddœ¥}|  ¡ D ]\}}tt|dƒ|ƒ qjd S ) Nr   r   r   r   r   r   r   rz   rE   rF   r,   rH   rI   rJ   TrK   r   r   r0   é   rL   rM   rG   é   é   é   éx   éy   ið  )rG   é   rŒ   r�   rŽ   r�   r�   éz   rN   rH   rI   F©rP   r   r   rQ   r   r   r   Útestprev_fast_len_smallŸ   s^   
þÿÿÿÿÿÿÿÿÿÿþþþþþþþüÿz'TestPrevFastLen.testprev_fast_len_smallrU   rV   TrW   c              
   C   s  i 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“dd“dd“i 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(“d*d+“d,d,“¥d,d-d.d.d/d0d0d.d1œ¥}|  ¡ D ]\}}tt|d2ƒ|ƒ qyd S )3NrZ   r[   i¿Çhi  `r\   iÁ=ui¿=ur]   r^   i*‰ë2i@¢®2r_   r`   l   ÿ· l     W:¶ ra   rb   l   Ÿ>å9ùl    8ÝÓrc   rd   l   ÿÿeØn l        n re   rf   l   ÿ÷q…. l       ˜, rg   rh   l   ÿÿ¢!Í l        Í ri   l   î…hRrj   l    @Õ�!Rrk   l   Š2 f;Ùrp   l   € �aØØrl   l         rq   l     ê+žKÿrm   l    h»\arn   l      >å9ùro   )rr   l   ÿ_71Y!rn   rs   l   ÿÿÿÿro   ru   rt   Tr“   rQ   r   r   r   Útestprev_fast_len_big°   s¢   þýüúùø
öõôòñðîíìêéèæåäâá à"Þ#Ý$Ü&Ú'Ù(Ø*Ö+Õ,Ô.Ò/È:ÿz%TestPrevFastLen.testprev_fast_len_bigc                 C   rw   )Nr0   Trx   r   rK   Fr{   )r   r}   r   r   r   r~   ñ   r   z!TestPrevFastLen.test_keyword_argsN)r€   r�   r‚   rŠ   rD   r”   rƒ   r„   r…   r†   r‡   rˆ   r•   r~   r   r   r   r   r‰   ‚   s    þ
>r‰   )Ú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   óF   |  d¡}d }d }d}g }t|||ƒ\}}||ksJ ‚||ks!J ‚d S )Nr   r   ©Úasarrayr   ©	r5   Úxpr   ÚshapeÚaxesÚshape_expectedÚaxes_expectedÚ	shape_resÚaxes_resr   r   r   Útest_py_0d_defaultsù   ó   
z/Test_init_nd_shape_and_axes.test_py_0d_defaultsc           	      C   r˜   )Ng      @r   r™   r›   r   r   r   Útest_xp_0d_defaults  r¤   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s$J ‚d S )N©r   r   r   )r   r   r™   r›   r   r   r   Útest_py_1d_defaults  ó   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s$J ‚d S )Nr   r   çš™™™™™¹?)r   )Úaranger   r›   r   r   r   Útest_xp_1d_defaults   r¨   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s#J ‚||ks)J ‚d S )N)r   r   r   r   )r   r   rK   r   )r   r   r   r   r™   r›   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s%J ‚||ks+J ‚d S )Nr   r   r©   )r   r   )rª   Úreshaper   r›   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s%J ‚d S )N©r   r   r   r   r   ©r   r   r   r   r   ©Úzerosr   r›   r   r   r   Útest_xp_5d_defaultsI  s   z/Test_init_nd_shape_and_axes.test_xp_5d_defaultsc           	      C   sR   |  g d¢¡}g d¢}d }d}g d¢}t|||ƒ\}}||ks!J ‚||ks'J ‚d S )Nr¯   )r   éÿÿÿÿr´   r   r   )r   r   r   r   r   r°   r±   r›   r   r   r   Útest_xp_5d_set_shapeV  s   z0Test_init_nd_shape_and_axes.test_xp_5d_set_shapec           	      C   sR   |  g d¢¡}d }g d¢}d}g d¢}t|||ƒ\}}||ks!J ‚||ks'J ‚d S )Nr¯   )r   r   r   )r   r   r   r±   r›   r   r   r   Útest_xp_5d_set_axesc  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s#J ‚||ks)J ‚d S )Nr¯   )r   r´   r   )r   r   r   )r   r   r   r±   r›   r   r   r   Útest_xp_5d_set_shape_axesp  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sJ ‚d S )N)r   r   r   r   )r   r   r   ©r�   rž   r¦   r±   )r5   rœ   r   r�   rž   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 s#w   Y  ttdd�� t|d g d¢d� W d   ƒ n1 sBw   Y  ttd	d�� t|d dgd� W d   ƒ n1 s`w   Y  ttd	d�� t|d d
gd� W d   ƒ n1 s~w   Y  ttdd�� t|d ddgd� W d   ƒ n1 s�w   Y  ttdd�� t|ddgddggd d� W d   ƒ n1 sÀw   Y  ttdd�� t|g d¢d d� W d   ƒ n1 sßw   Y  ttdd�� t|  g d¢¡g d¢dgd� W d   ƒ n	1 �sw   Y  ttdd�� t|dgd d� W d   ƒ n	1 �s$w   Y  ttdd�� t|d
d d� W d   ƒ d S 1 �sCw   Y  d S )Nr   z-axes must be a scalar or iterable of integers)Úmatchr   r   r   r¸   )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)r²   Úassert_raisesrˆ   r   )r5   rœ   r   r   r   r   Útest_errors„  sZ   
þþÿþÿþÿþþþÿ
ÿýÿýÿ$ýz'Test_init_nd_shape_and_axes.test_errorsN)r€   r�   r‚   r£   r¥   r§   r«   r¬   r®   r³   rµ   r¶   r·   r¹   r½   r   r   r   r   r—   ö   s    r—   c                   @   sD   e Zd Zdd„ Zdd„ Zeddd�dd	„ ƒZeddd�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   éüÿÿÿéýÿÿÿr»   r´   )	g      ÀrÁ   r»   r´   r   r   r   r   r   )
r¿   r   r   r   r   éûÿÿÿrÀ   rÁ   r»   r´   )
g      ÀrÀ   rÁ   r»   r´   r   r   r   r   r   ©rš   r   r   ÚfftshiftÚ	ifftshift)r5   rœ   r   rS   r   r   r   Útest_definitionµ  s   zTestFFTShift.test_definitionc                 C   s8   dD ]}|  tj |f¡¡}tt t |¡¡|ƒ qd S )N)r   r   r   éd   éÓ   )rš   r1   r2   r   r   rÅ   rÄ   )r5   rœ   r   r   r   r   r   Útest_inverse¿  s   þzTestFFTShift.test_inverseÚcupyzcupy/cupy#8393©rX   c                 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)r¿   r   r   )r   r   rÀ   )rÁ   r»   r´   )g      ð¿rÁ   r»   )r   r   r   )rÀ   r   r   ©r   r   ©rž   r   ©r   rÃ   )r5   rœ   ÚfreqsÚshiftedr   r   r   Útest_axes_keywordÄ  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)rš   Úfloat64r   r   rÄ   rÅ   )r5   rœ   rÏ   Ú
shift_dim0Ú
shift_dim1Úshift_dim_bothr   r   r   Útest_uneven_dimsÐ  sT   ýüýüýüýüzTestFFTShift.test_uneven_dimsN)r€   r�   r‚   rÆ   rÉ   r   rÑ   rØ   r   r   r   r   r¾   ³  s    



r¾   rÊ   z+CuPy has not implemented the `device` paramrË   z	jax.numpyz*JAX has not implemented the `device` paramc                   @   ó   e Zd Zdd„ Zdd„ ZdS )ÚTestFFTFreqc                 C   óÂ   |j g d¢|jd�}|j g d¢|jd�}dtjd|d� }t||ddd� d|j tjd|j|d� }t||dd	� d
tjd
|d� }t||dd	� d
|j tjd
|j|d� }t||dd	� d S )N)	r   r   r   r   r   rÀ   rÁ   r»   r´   rÒ   )
r   r   r   r   r   rÂ   rÀ   rÁ   r»   r´   r   ©rœ   FT©Úcheck_dtypeÚcheck_namespace©rÞ   r   )rš   rÔ   r   Úfftfreqr   Úpi©r5   rœ   r   Úx2rS   r   r   r   rÆ     ó   zTestFFTFreq.test_definitionc                 C   óV   t | d¡ƒ}t|ƒ}|D ]}tjd||d�}|jd|d�}t|ƒt|ƒks(J ‚qd S ©Nr   r   )rœ   Údevice)rè   )r   Úemptyr	   r   rá   r
   ©r5   rœ   Úxp_testÚdevicesr#   rS   r   r   r   r   Útest_device  ó   ýzTestFFTFreq.test_deviceN©r€   r�   r‚   rÆ   rí   r   r   r   r   rÚ   ÿ  ó    rÚ   c                   @   rÙ   )ÚTestRFFTFreqc                 C   rÛ   )Nr°   rÒ   )r   r   r   r   r   r   r   rÜ   FTrÝ   rà   r   )rš   rÔ   r   Úrfftfreqr   râ   rã   r   r   r   rÆ   &  rå   zTestRFFTFreq.test_definitionc                 C   ræ   rç   )r   ré   r	   r   rò   r
   rê   r   r   r   rí   8  rî   zTestRFFTFreq.test_deviceNrï   r   r   r   r   rñ      rð   rñ   )#Ú__doc__Úscipy.fft._helperr   r   r   Únumpy.testingr   rƒ   r   r¼   Únumpyr1   r†   Úscipy.conftestr   Úscipy._lib._array_apir   r	   r
   r   Úscipyr   r„   ÚusefixturesÚ
pytestmarkr   r   r   r$   r'   r‰   r—   r¾   rÚ   rñ   r   r   r   r   Ú<module>   sJ    Is =Lÿÿÿÿ