§
    µ³ÙgÛN  ã                   ó‚  — 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„ Zd„ Z ed¬¦  «         G d„ d¦  «        ¦   «         Z ed¬¦  «         G d„ d¦  «        ¦   «         Z ed¬¦  «         G d„ d¦  «        ¦   «         Z G d„ d¦  «        Z  edd¬¦  «         edd¬¦  «         G d„ d¦  «        ¦   «         ¦   «         Z! edd¬¦  «         edd¬¦  «         G 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                  óT   — t           D ]} t          t          | ¦  «        | ¦  «         Œ d S )N)Ú_5_smooth_numbersr   r   )Úns    úQ/granary/edev/quantum/lib/python3.11/site-packages/scipy/fft/tests/test_helper.pyÚtest_next_fast_lenr      s6   € Ýð *ð *ˆÝ•] 1Ñ%Ô% qÑ)Ô)Ð)Ð)ð*ð *ó    c                 óò   — | }|dk     rJ ‚	 t          | d¦  «        \  }}|dk    rn|} Œt          d|dz   d¦  «        D ] }	 t          | |¦  «        \  }}|dk    rn|} ŒŒ!| dk    sJ d|› d|› d	| › �¦   «         ‚d S )
Nr   FTr   r   é   zx=z is not z-smooth, remainder=)ÚdivmodÚrange)Úxr   Úx_origÚqÚrÚds         r   Ú_assert_n_smoothr'   "   sÈ   € Ø€FØˆ1‚u€uØˆðÝ�a˜‰|Œ|‰ˆˆ1Ø�Š6ˆ6ØØˆð	õ �1�a˜‘c˜1ÑÔð ð ˆð	Ý˜!˜Q‘<”<‰DˆAˆqØ�AŠvˆvØØˆAð		ð ð �Š6ˆ6ˆ6Ø9�Ð9Ð9 Ð9Ð9°aÐ9Ð9ñ Œ6ˆ6ˆ6ˆ6r   T)Únp_onlyc                   ó†   — e Zd Zd„ Zd„ Zd„ Zej                             e	j
        dk     ded¬¦  «        d„ ¦   «         Zd	„ Zd
S )ÚTestNextFastLenc                 ó  — t           j                             d¦  «         d„ } |¦   «         D ]W}t          |¦  «        }t	          |d¦  «         |t          |d¦  «        k    sJ ‚t          |d¦  «        }t	          |d¦  «         ŒXd S )NéÒ  c               3   ó>   K  — t          dd¦  «        E d {V —† dV — d S ©Nr   éè  i€y ©r!   © r   r   Únumsz0TestNextFastLen.test_next_fast_len.<locals>.nums>   ó8   è è € Ý˜Q ‘~”~Ð%Ð%Ð%Ð%Ð%Ð%Ð%Ø(Ð(Ð(Ð(Ð(Ð(r   é   FTr   )ÚnpÚrandomÚseedr   r'   ©Úselfr2   r   Úms       r   r   z"TestNextFastLen.test_next_fast_len;   ó    € Ý
Œ	�Š�tÑÔÐð	)ð 	)ð 	)ð �‘”ð 	#ð 	#ˆAÝ˜aÑ Ô ˆAÝ˜Q Ñ#Ô#Ð#Ø� a¨Ñ/Ô/Ò/Ð/Ð/Ð/å˜a Ñ&Ô&ˆAÝ˜Q Ñ"Ô"Ð"Ð"ð	#ð 	#r   c           	      ó   — t           j        t           j        t           j        t           j        t           j        t           j        g}|D ]F} |d¦  «        }t          |¦  «        }t          |t          t          |¦  «        ¦  «        ¦  «         ŒGd S )Né90  )
r5   Úint16Úint32Úint64Úuint16Úuint32Úuint64r   r   Úint©r9   ÚITYPESÚitypr"   ÚtestNs        r   Útest_np_integersz TestNextFastLen.test_np_integersJ   st   € Ý”(�BœH¥b¤hµ´	½2¼9ÅbÄiÐPˆØð 	7ð 	7ˆDØ��U‘”ˆAÝ! !Ñ$Ô$ˆEÝ˜¥­c°!©f¬fÑ 5Ô 5Ñ6Ô6Ð6Ð6ð	7ð 	7r   c                 óš   — ddddddddddd	d
ddddœ}|                      ¦   «         D ]#\  }}t          t          |d¦  «        |¦  «         Œ$d S )Nr   r   r   r   r   r   r   é   é   é   i   é   é @©r   r   r   r   r   r   é   r   é   rK   rL   é   éý  rN   rO   T©Úitemsr   r   ©r9   Úhamsr"   Úys       r   Útestnext_fast_len_smallz'TestNextFastLen.testnext_fast_len_smallQ   sr   € à�Q˜1  q¨Q°1¸ÀÈØ˜ $¨d¸hð
ð 
ˆð —J’J‘L”Lð 	4ð 	4‰DˆAˆqÝ� q¨$Ñ/Ô/°Ñ3Ô3Ð3Ð3ð	4ð 	4r   ì        ú$Hamming Numbers too large for 32-bitT©Úreasonr   Ústrictc                 óü   — 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!¦  «        |¦  «         Œ$d 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         	 )rr   ì   ˆ2 f;Ùrs   ì   ÿÿÿÿrt   ì    `71Y!ru   ì          ì   ËóX rv   ì   !ËóX TrU   rW   s       r   Útestnext_fast_len_bigz%TestNextFastLen.testnext_fast_len_bigY   sI  € ð
Ø�yð
Ø"/°ð
à�yð
ð �yð
ð #0°ð
ð ˜,ð	
ð )9¸,ð	
ð
 ˜=ð
ð
 +<¸]ð
ð ˜_ð
ð   ð
ð ˜_ð
ð   ð
ð Ð.ð
ð !Ð"2ð
ð Ð0ð
ð "Ð#4ð
ð   1Ø#4à0Ø#4à0Ø#4Ø 2Ø$6Ø$6Ø 2Ø$6ð9
ð 
ð 
ˆð< —J’J‘L”Lð 	4ð 	4‰DˆAˆqÝ� q¨$Ñ/Ô/°Ñ3Ô3Ð3Ð3ð	4ð 	4r   c                 ób   — t          dd¬¦  «        dk    sJ ‚t          dd¬¦  «        dk    sJ ‚d S )Nr4   T©Úrealé   rQ   F©Útargetr€   )r   ©r9   s    r   Útest_keyword_argsz!TestNextFastLen.test_keyword_args~   óD   € Ý˜R dÐ+Ñ+Ô+¨rÒ1Ð1Ð1Ð1Ý A¨EÐ2Ñ2Ô2°aÒ7Ð7Ð7Ð7Ð7Ð7r   N)Ú__name__Ú
__module__Ú__qualname__r   rI   rZ   ÚpytestÚmarkÚxfailÚsysÚmaxsizeÚ
ValueErrorr}   r…   r1   r   r   r*   r*   8   s—   € € € € € ð#ð #ð #ð7ð 7ð 7ð4ð 4ð 4ð „[×Ò�s”{ UÒ*ØDØ(°ð ñ 7ô 7ð 4ð  4ñ7ô 7ð 4ðD8ð 8ð 8ð 8ð 8r   r*   c                   ó†   — e Zd Zd„ Zd„ Zd„ Zej                             e	j
        dk     ded¬¦  «        d„ ¦   «         Zd	„ Zd
S )ÚTestPrevFastLenc                 ó  — t           j                             d¦  «         d„ } |¦   «         D ]W}t          |¦  «        }t	          |d¦  «         |t          |d¦  «        k    sJ ‚t          |d¦  «        }t	          |d¦  «         ŒXd S )Nr,   c               3   ó>   K  — t          dd¦  «        E d {V —† dV — d S r.   r0   r1   r   r   r2   z0TestPrevFastLen.test_prev_fast_len.<locals>.numsˆ   r3   r   r4   FTr   )r5   r6   r7   r   r'   r8   s       r   Útest_prev_fast_lenz"TestPrevFastLen.test_prev_fast_len…   r;   r   c           	      óš  — t           j        t           j        t           j        t           j        t           j        t           j        g}|D ]ƒ} |d¦  «        }t          |¦  «        }t          |t          t          |¦  «        ¦  «        ¦  «         t          |d¬¦  «        }t          |t          t          |¦  «        d¬¦  «        ¦  «         Œ„d S )Nr=   Tr   )
r5   r>   r?   r@   rA   rB   rC   r   r   rD   rE   s        r   rI   z TestPrevFastLen.test_np_integers”   s°   € Ý”(�BœH¥b¤hµ´	½2¼9Ý”Iðˆàð 	Bð 	BˆDØ��U‘”ˆAÝ! !Ñ$Ô$ˆEÝ˜¥­c°!©f¬fÑ 5Ô 5Ñ6Ô6Ð6å! !¨$Ð/Ñ/Ô/ˆEÝ˜¥­c°!©f¬f¸4Ð @Ñ @Ô @ÑAÔAÐAÐAð	Bð 	Br   c                 ó�  — dddddddddd	d
d
ddddœ}|                      ¦   «         D ]#\  }}t          t          |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dddddddœ¥}|                      ¦   «         D ]#\  }}t          t          |d¦  «        |¦  «         Œ$d S ) Nr   r   r   r   r   r   r   r�   rK   rL   r/   rN   rO   rP   TrQ   r   r   r4   é   rR   rS   rM   é   é   é   éx   éy   ið  )rM   é   r˜   r™   rš   r›   rœ   éz   rT   rN   rO   F©rV   r   r   rW   s       r   Útestprev_fast_len_smallz'TestPrevFastLen.testprev_fast_len_smallŸ   s…  € à�Q˜1  q¨Q°1¸ÀÈØ˜ $¨d¸hð
ð 
ˆð —J’J‘L”Lð 	4ð 	4‰DˆAˆqÝ� q¨$Ñ/Ô/°Ñ3Ô3Ð3Ð3ð
Øˆqð
Ø�Qð
Ø˜1ð
Ø ð
Ø$% qð
Ø*+¨Qð
Ø01°1ð
Ø67¸ð
Ø<=¸qð
ØBDÀbð
à�ð
à˜ð
à ð
à$&¨ð
à,.°ð
à46¸ð
à<>Àð
àHJØ˜ ¨°¸3ÀSØ˜d¨hð	
ð 
ð 
ˆð —J’J‘L”Lð 	5ð 	5‰DˆAˆqÝ� q¨%Ñ0Ô0°!Ñ4Ô4Ð4Ð4ð	5ð 	5r   r[   r\   Tr]   c           
      ó`  — 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¦  «        |¦  «         Œ$d S )3Nra   rb   i¿Çhi  `rc   iÁ=ui¿=urd   re   i*‰ë2i@¢®2rf   rg   l   ÿ· l     W:¶ rh   ri   l   Ÿ>å9ùl    8ÝÓrj   rk   l   ÿÿeØn l        n rl   rm   l   ÿ÷q…. l       ˜, rn   ro   l   ÿÿ¢!Í l        Í rp   l   î…hRrq   l    @Õ�!Rrr   l   Š2 f;Ùrw   l   € �aØØrs   l         rx   l     ê+žKÿrt   l    h»\aru   l      >å9ùrv   )ry   l   ÿ_71Y!ru   rz   l   ÿÿÿÿrv   r|   r{   TrŸ   rW   s       r   Útestprev_fast_len_bigz%TestPrevFastLen.testprev_fast_len_big°   s<  € ð9
à�yð9
ð ˜9ð9
ð ˜9ð	9
ð �yð9
ð ˜9ð9
ð ˜9ð9
ð �yð9
ð ˜9ð9
ð ˜9ð9
ð ˜,ð9
ð ˜lð9
ð  ˜lð!9
ð$ ˜=ð%9
ð& ˜}ð'9
ð( ˜}ð)9
ð, ˜_ð-9
ð.   ð/9
ð 9
ð0   ð19
ð4 ˜_ð59
ð6   ð79
ð8   ð99
ð< Ð.ð=9
ð> !Ð"2ð?9
ð@ !Ð"2ðA9
ðD Ð0ðE9
ðF "Ð#4ðG9
ðH "Ð#4ðI9
ðL Ð0ðM9
ðN "Ð#4ðO9
ðP "Ð#4ðQ9
ðT Ð0ðU9
ðV "Ð#4ðW9
ðX "Ð#4ðY9
ð\ Ð0ð]9
ð 9
ð^ $5Ø#4à 2Ø$6Ø$6à 2Ø$6Ø$6ðq9
ð 9
ð 9
ˆðt —J’J‘L”Lð 	4ð 	4‰DˆAˆqÝ� q¨$Ñ/Ô/°Ñ3Ô3Ð3Ð3ð	4ð 	4r   c                 ób   — t          dd¬¦  «        dk    sJ ‚t          dd¬¦  «        dk    sJ ‚d S )Nr4   Tr   r   rQ   Fr‚   )r   r„   s    r   r…   z!TestPrevFastLen.test_keyword_argsñ   r†   r   N)r‡   rˆ   r‰   r”   rI   r    rŠ   r‹   rŒ   r�   rŽ   r�   r¢   r…   r1   r   r   r‘   r‘   ‚   sš   € € € € € ð#ð #ð #ð	Bð 	Bð 	Bð5ð 5ð 5ð" „[×Ò�s”{ UÒ*ØDØ(°ð ñ 7ô 7ð<4ð <4ñ7ô 7ð<4ð|8ð 8ð 8ð 8ð 8r   r‘   )Úcpu_onlyc                   óV   — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d„ Z
d	„ Zd
„ Zd„ Zd„ ZdS )ÚTest_init_nd_shape_and_axesc                 óˆ   — |                      d¦  «        }d }d }d}g }t          |||¦  «        \  }}||k    sJ ‚||k    sJ ‚d S )Nr   r1   ©Úasarrayr   ©	r9   Úxpr"   ÚshapeÚaxesÚshape_expectedÚaxes_expectedÚ	shape_resÚaxes_ress	            r   Útest_py_0d_defaultsz/Test_init_nd_shape_and_axes.test_py_0d_defaultsù   sc   € Ø�JŠJ�q‰MŒMˆØˆØˆàˆØˆå5°a¸ÀÑEÔEÑˆ	�8à˜NÒ*Ð*Ð*Ð*Ø˜=Ò(Ð(Ð(Ð(Ð(Ð(r   c                 óˆ   — |                      d¦  «        }d }d }d}g }t          |||¦  «        \  }}||k    sJ ‚||k    sJ ‚d S )Ng      @r1   r¨   rª   s	            r   Útest_xp_0d_defaultsz/Test_init_nd_shape_and_axes.test_xp_0d_defaults  sc   € Ø�JŠJ�r‰NŒNˆØˆØˆàˆØˆå5°a¸ÀÑEÔEÑˆ	�8à˜NÒ*Ð*Ð*Ð*Ø˜=Ò(Ð(Ð(Ð(Ð(Ð(r   c                 óŽ   — |                      g d¢¦  «        }d }d }d}dg}t          |||¦  «        \  }}||k    sJ ‚||k    sJ ‚d S )N©r   r   r   )r   r   r¨   rª   s	            r   Útest_py_1d_defaultsz/Test_init_nd_shape_and_axes.test_py_1d_defaults  sk   € Ø�JŠJ�y�y�yÑ!Ô!ˆØˆØˆàˆØ˜ˆå5°a¸ÀÑEÔEÑˆ	�8à˜NÒ*Ð*Ð*Ð*Ø˜=Ò(Ð(Ð(Ð(Ð(Ð(r   c                 óŽ   — |                      ddd¦  «        }d }d }d}dg}t          |||¦  «        \  }}||k    sJ ‚||k    sJ ‚d S )Nr   r   çš™™™™™¹?)r   )Úaranger   rª   s	            r   Útest_xp_1d_defaultsz/Test_init_nd_shape_and_axes.test_xp_1d_defaults   sk   € Ø�IŠI�a˜˜BÑÔˆØˆØˆàˆØ˜ˆå5°a¸ÀÑEÔEÑˆ	�8à˜NÒ*Ð*Ð*Ð*Ø˜=Ò(Ð(Ð(Ð(Ð(Ð(r   c                 ó˜   — |                      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   rQ   r   )r   r   r   r   r¨   rª   s	            r   Útest_py_2d_defaultsz/Test_init_nd_shape_and_axes.test_py_2d_defaults-  s}   € Ø�JŠJ˜˜˜Ø$˜˜ð&ñ 'ô 'ˆàˆØˆàˆØ˜A˜ˆå5°a¸ÀÑEÔEÑˆ	�8à˜NÒ*Ð*Ð*Ð*Ø˜=Ò(Ð(Ð(Ð(Ð(Ð(r   c                 ó¼   — |                      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ª   s	            r   Útest_xp_2d_defaultsz/Test_init_nd_shape_and_axes.test_xp_2d_defaults;  s€   € Ø�IŠI�a˜˜BÑÔˆØ�JŠJ�q˜&Ñ!Ô!ˆØˆØˆàˆØ˜A˜ˆå5°a¸ÀÑEÔEÑˆ	�8à˜NÒ*Ð*Ð*Ð*Ø˜=Ò(Ð(Ð(Ð(Ð(Ð(r   c                 ó�   — |                      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ª   s	            r   Útest_xp_5d_defaultsz/Test_init_nd_shape_and_axes.test_xp_5d_defaultsI  sm   € Ø�HŠH�_�_�_Ñ%Ô%ˆØˆØˆà(ˆØ'˜˜ˆå5°a¸ÀÑEÔEÑˆ	�8à˜NÒ*Ð*Ð*Ð*Ø˜=Ò(Ð(Ð(Ð(Ð(Ð(r   c                 ó”   — |                      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ª   s	            r   Útest_xp_5d_set_shapez0Test_init_nd_shape_and_axes.test_xp_5d_set_shapeV  ss   € Ø�HŠH�_�_�_Ñ%Ô%ˆØ"Ð"Ð"ˆØˆà)ˆØ'˜˜ˆå5°a¸ÀÑEÔEÑˆ	�8à˜NÒ*Ð*Ð*Ð*Ø˜=Ò(Ð(Ð(Ð(Ð(Ð(r   c                 ó”   — |                      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ª   s	            r   Útest_xp_5d_set_axesz/Test_init_nd_shape_and_axes.test_xp_5d_set_axesc  sq   € Ø�HŠH�_�_�_Ñ%Ô%ˆØˆØˆyˆyˆà"ˆØ!˜	˜	ˆå5°a¸ÀÑEÔEÑˆ	�8à˜NÒ*Ð*Ð*Ð*Ø˜=Ò(Ð(Ð(Ð(Ð(Ð(r   c                 ó˜   — |                      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ª   s	            r   Útest_xp_5d_set_shape_axesz5Test_init_nd_shape_and_axes.test_xp_5d_set_shape_axesp  su   € Ø�HŠH�_�_�_Ñ%Ô%ˆØ��ˆØˆyˆyˆà#ˆØ!˜	˜	ˆå5°a¸ÀÑEÔEÑˆ	�8à˜NÒ*Ð*Ð*Ð*Ø˜=Ò(Ð(Ð(Ð(Ð(Ð(r   c                 ó~   — |                      d¦  «        }t          |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Ä   )r9   r«   r"   r¬   r­   s        r   Útest_shape_axes_subsetz2Test_init_nd_shape_and_axes.test_shape_axes_subset}  sW   € Ø�HŠH�\Ñ"Ô"ˆÝ-¨a°yÀtÐLÑLÔL‰ˆˆtà˜	Ò!Ð!Ð!Ð!Ø�y�y�yÒ Ð Ð Ð Ð Ð r   c                 óŒ  — |                      d¦  «        }t          t          d¬¦  «        5  t          |d ddgddgg¬¦  «         d d d ¦  «         n# 1 swxY w Y   t          t          d¬¦  «        5  t          |d g d¢¬¦  «         d d d ¦  «         n# 1 swxY w Y   t          t          d	¬¦  «        5  t          |d dg¬¦  «         d d d ¦  «         n# 1 swxY w Y   t          t          d	¬¦  «        5  t          |d d
g¬¦  «         d d d ¦  «         n# 1 swxY w Y   t          t          d¬¦  «        5  t          |d ddg¬¦  «         d d d ¦  «         n# 1 swxY w Y   t          t          d¬¦  «        5  t          |ddgddggd ¬¦  «         d d d ¦  «         n# 1 swxY w Y   t          t          d¬¦  «        5  t          |g d¢d ¬¦  «         d d d ¦  «         n# 1 swxY w Y   t          t          d¬¦  «        5  t          |                      g d¢¦  «        g d¢dg¬¦  «         d d d ¦  «         n# 1 swxY w Y   t          t          d¬¦  «        5  t          |dgd ¬¦  «         d d d ¦  «         n# 1 swxY w Y   t          t          d¬¦  «        5  t          |d
d ¬¦  «         d d d ¦  «         d S # 1 swxY w 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   )r9   r«   r"   s      r   Útest_errorsz'Test_init_nd_shape_and_axes.test_errors„  s  € Ø�HŠH�Q‰KŒKˆÝ�:ð .2ð 3ñ 3ô 3ð 	Jð 	Jå# A¨T¸!¸Q¸À!ÀQÀÐ8HÐIÑIÔIÐIð	Jð 	Jð 	Jñ 	Jô 	Jð 	Jð 	Jð 	Jð 	Jð 	Jð 	Jøøøð 	Jð 	Jð 	Jð 	Jõ �:ð .2ð 3ñ 3ô 3ð 	Jð 	Jå# A¨TÐ8HÐ8HÐ8HÐIÑIÔIÐIð	Jð 	Jð 	Jñ 	Jô 	Jð 	Jð 	Jð 	Jð 	Jð 	Jð 	Jøøøð 	Jð 	Jð 	Jð 	Jõ �:Ø!GðIñ Iô Ið 	=ð 	=å# A¨T¸¸Ð<Ñ<Ô<Ð<ð	=ð 	=ð 	=ñ 	=ô 	=ð 	=ð 	=ð 	=ð 	=ð 	=ð 	=øøøð 	=ð 	=ð 	=ð 	=õ �:Ø!GðIñ Iô Ið 	>ð 	>å# A¨T¸¸Ð=Ñ=Ô=Ð=ð	>ð 	>ð 	>ñ 	>ô 	>ð 	>ð 	>ð 	>ð 	>ð 	>ð 	>øøøð 	>ð 	>ð 	>ð 	>õ �:Ø!:ð<ñ <ô <ð 	@ð 	@å# A¨T¸¸A¸Ð?Ñ?Ô?Ð?ð	@ð 	@ð 	@ñ 	@ô 	@ð 	@ð 	@ð 	@ð 	@ð 	@ð 	@øøøð 	@ð 	@ð 	@ð 	@õ �:ð .2ð 3ñ 3ô 3ð 	Jð 	Jå# A¨q°!¨f°q¸!°fÐ-=ÀDÐIÑIÔIÐIð	Jð 	Jð 	Jñ 	Jô 	Jð 	Jð 	Jð 	Jð 	Jð 	Jð 	Jøøøð 	Jð 	Jð 	Jð 	Jõ �:ð .2ð 3ñ 3ô 3ð 	Jð 	Jå# AÐ-=Ð-=Ð-=ÀDÐIÑIÔIÐIð	Jð 	Jð 	Jñ 	Jô 	Jð 	Jð 	Jð 	Jð 	Jð 	Jð 	Jøøøð 	Jð 	Jð 	Jð 	Jõ �:ð"<ð=ñ =ô =ð 	?ð 	?õ $ B§H¢H¨\¨\¨\Ñ$:Ô$:Ø*3¨)¨)¸1¸#ð?ñ ?ô ?ð ?ð	?ð 	?ð 	?ñ 	?ô 	?ð 	?ð 	?ð 	?ð 	?ð 	?ð 	?øøøð 	?ð 	?ð 	?ð 	?õ �:ð"3ð4ñ 4ô 4ð 	=ð 	=õ $ A¨a¨S°tÐ<Ñ<Ô<Ð<ð	=ð 	=ð 	=ñ 	=ô 	=ð 	=ð 	=ð 	=ð 	=ð 	=ð 	=øøøð 	=ð 	=ð 	=ð 	=õ
 �:ð"4ð5ñ 5ô 5ð 	<ð 	<õ $ A¨R°dÐ;Ñ;Ô;Ð;ð	<ð 	<ð 	<ñ 	<ô 	<ð 	<ð 	<ð 	<ð 	<ð 	<ð 	<ð 	<øøøð 	<ð 	<ð 	<ð 	<ð 	<ð 	<s³   ¬AÁAÁAÁ2BÂBÂBÂ4CÃCÃCÃ5DÄDÄDÄ6EÅEÅEÅ8FÆF!Æ$F!Æ>GÇG#Ç&G#È +H7È7H;È>H;ÉI8É8I<É?I<ÊJ9Ê9J=Ë J=N)r‡   rˆ   r‰   r²   r´   r·   r»   r½   rÀ   rÆ   rÉ   rË   rÍ   rÐ   rÕ   r1   r   r   r¦   r¦   ö   sÈ   € € € € € ð)ð )ð )ð)ð )ð )ð)ð )ð )ð)ð )ð )ð)ð )ð )ð)ð )ð )ð)ð )ð )ð)ð )ð )ð)ð )ð )ð)ð )ð )ð!ð !ð !ð,<ð ,<ð ,<ð ,<ð ,<r   r¦   c                   ór   — e Zd Zd„ Zd„ Z edd¬¦  «        d„ ¦   «         Z edd¬¦  «        d„ ¦   «         ZdS )	ÚTestFFTShiftc                 óÎ  — |                      g d¢¦  «        }|                      g d¢¦  «        }t          t          j        |¦  «        |¦  «         t          t          j        |¦  «        |¦  «         |                      g d¢¦  «        }|                      g d¢¦  «        }t          t          j        |¦  «        |¦  «         t          t          j        |¦  «        |¦  «         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)r9   r«   r"   rY   s       r   Útest_definitionzTestFFTShift.test_definitionµ  sÌ   € Ø�JŠJÐ7Ð7Ð7Ñ8Ô8ˆØ�JŠJÐ7Ð7Ð7Ñ8Ô8ˆÝ�œ Q™œ¨Ñ+Ô+Ð+Ý�œ aÑ(Ô(¨!Ñ,Ô,Ð,Ø�JŠJÐ;Ð;Ð;Ñ<Ô<ˆØ�JŠJÐ;Ð;Ð;Ñ<Ô<ˆÝ�œ Q™œ¨Ñ+Ô+Ð+Ý�œ aÑ(Ô(¨!Ñ,Ô,Ð,Ð,Ð,r   c                 óÞ   — dD ]i}|                      t          j                             |f¦  «        ¦  «        }t          t	          j        t	          j        |¦  «        ¦  «        |¦  «         Œjd S )N)r   r   r   éd   éÓ   )r©   r5   r6   r	   r   rß   rÞ   )r9   r«   r   r"   s       r   Útest_inversezTestFFTShift.test_inverse¿  sc   € Ø$ð 	?ð 	?ˆAØ—
’
�2œ9×+Ò+¨Q¨DÑ1Ô1Ñ2Ô2ˆAÝ�CœM­#¬,°q©/¬/Ñ:Ô:¸AÑ>Ô>Ð>Ð>ð	?ð 	?r   Úcupyzcupy/cupy#8393©r^   c                 óv  — |                      g d¢g d¢g d¢g¦  «        }|                      g d¢g d¢g d¢g¦  «        }t          t          j        |d¬¦  «        |¦  «         t          t          j        |d	¬¦  «        t          j        |d
¬¦  «        ¦  «         t          t          j        |d¬¦  «        |¦  «         t          t          j        |d	¬¦  «        t          j        |d
¬¦  «        ¦  «         t          t          j        |¦  «        |¦  «         t          t          j        |¦  «        |¦  «         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Ý   )r9   r«   ÚfreqsÚshifteds       r   Útest_axes_keywordzTestFFTShift.test_axes_keywordÄ  s%  € à—
’
˜J˜J˜J¨
¨
¨
°L°L°LÐAÑBÔBˆØ—*’*˜m˜m˜m¨Y¨Y¨Y¸
¸
¸
ÐCÑDÔDˆÝ�œ U°Ð8Ñ8Ô8¸'ÑBÔBÐBÝ�œ U°Ð3Ñ3Ô3µS´\À%ÈdÐ5SÑ5SÔ5SÑTÔTÐTÝ�œ g°FÐ;Ñ;Ô;¸UÑCÔCÐCÝ�œ g°AÐ6Ñ6Ô6Ýœ g°DÐ9Ñ9Ô9ñ	;ô 	;ð 	;å�œ UÑ+Ô+¨WÑ5Ô5Ð5Ý�œ gÑ.Ô.°Ñ6Ô6Ð6Ð6Ð6r   c                 ó   — |                      ddgddgddgg|j        ¬¦  «        }|                      ddgddgddgg|j        ¬¦  «        }t          t          j        |d¬¦  «        |¦  «         t          t          j        |d¬¦  «        |¦  «         t          t          j        |d	¬¦  «        |¦  «         t          t          j        |dg¬¦  «        |¦  «         |                      ddgddgddgg|j        ¬¦  «        }t          t          j        |d¬¦  «        |¦  «         t          t          j        |d¬¦  «        |¦  «         |                      ddgddgddgg|j        ¬¦  «        }t          t          j        |d
¬¦  «        |¦  «         t          t          j        |d
¬¦  «        |¦  «         t          t          j        |ddg¬¦  «        |¦  «         t          t          j        |ddg¬¦  «        |¦  «         t          t          j        |d¬¦  «        |¦  «         t          t          j        |d¬¦  «        |¦  «         t          t          j        |¦  «        |¦  «         t          t          j        |¦  «        |¦  «         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ß   )r9   r«   rë   Ú
shift_dim0Ú
shift_dim1Úshift_dim_boths         r   Útest_uneven_dimszTestFFTShift.test_uneven_dimsÐ  s®  € ð —
’
Ø�ˆFØ�ˆFØ�ˆFð
ð ”ð	 ñ ô ˆð —Z’ZØ�ˆFØ�ˆFØ�ˆFð!
ð ”ð	  ñ ô ˆ
õ
 	�œ U°Ð3Ñ3Ô3°ZÑ@Ô@Ð@Ý�œ j°qÐ9Ñ9Ô9¸5ÑAÔAÐAÝ�œ U°Ð6Ñ6Ô6¸
ÑCÔCÐCÝ�œ j¸°sÐ;Ñ;Ô;¸UÑCÔCÐCð —Z’ZØ�ˆFØ�ˆFØ�ˆFð!
ð ”ð	  ñ ô ˆ
õ
 	�œ U°Ð3Ñ3Ô3°ZÑ@Ô@Ð@Ý�œ j°qÐ9Ñ9Ô9¸5ÑAÔAÐAð ŸšØ�ˆFØ�ˆFØ�ˆFð%
ð ”ð	 $ñ ô ˆõ
 	�œ U°Ð8Ñ8Ô8¸.ÑIÔIÐIÝ�œ n¸6ÐBÑBÔBÀEÑJÔJÐJÝ�œ U°!°Q°Ð8Ñ8Ô8¸.ÑIÔIÐIÝ�œ n¸A¸q¸6ÐBÑBÔBÀEÑJÔJÐJõ 	�œ U°Ð6Ñ6Ô6¸ÑGÔGÐGÝ�œ n¸4Ð@Ñ@Ô@À%ÑHÔHÐHÝ�œ UÑ+Ô+¨^Ñ<Ô<Ð<Ý�œ nÑ5Ô5°uÑ=Ô=Ð=Ð=Ð=r   N)r‡   rˆ   r‰   rà   rä   r   rí   rõ   r1   r   r   r×   r×   ³  sŒ   € € € € € ð-ð -ð -ð?ð ?ð ?ð
 Ð�fÐ%5Ð6Ñ6Ô6ð	7ð 	7ñ 7Ô6ð	7ð Ð�fÐ%5Ð6Ñ6Ô6ð+>ð +>ñ 7Ô6ð+>ð +>ð +>r   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„ Zd„ ZdS )ÚTestFFTFreqc                 ó  — |                      g d¢|j        ¬¦  «        }|                      g d¢|j        ¬¦  «        }dt          j        d|¬¦  «        z  }t	          ||dd¬¦  «         d|j        z  t          j        d|j        |¬¦  «        z  }t	          ||d¬	¦  «         d
t          j        d
|¬¦  «        z  }t	          ||d¬	¦  «         d
|j        z  t          j        d
|j        |¬¦  «        z  }t	          ||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©r9   r«   r"   Úx2rY   s        r   rà   zTestFFTFreq.test_definition  s  € Ø�JŠJÐ6Ð6Ð6¸b¼jˆJÑIÔIˆØ�ZŠZÐ;Ð;Ð;À2Ä:ˆZÑNÔNˆð •”˜A "Ð%Ñ%Ô%Ñ%ˆÝ˜˜1¨%ÀÐFÑFÔFÐFà�”‰I�œ A r¤u°Ð4Ñ4Ô4Ñ4ˆÝ˜˜1¨%Ð0Ñ0Ô0Ð0à•”˜R BÐ'Ñ'Ô'Ñ'ˆÝ˜˜2¨5Ð1Ñ1Ô1Ð1à�”‰J�œ R¨¬°2Ð6Ñ6Ô6Ñ6ˆÝ˜˜2¨5Ð1Ñ1Ô1Ð1Ð1Ð1r   c                 ó  — t          |                     d¦  «        ¦  «        }t          |¦  «        }|D ]R}t          j        d||¬¦  «        }|                     d|¬¦  «        }t          |¦  «        t          |¦  «        k    sJ ‚ŒSd S ©Nr   r   )r«   Údevice)r  )r   Úemptyr
   r   rþ   r   ©r9   r«   Úxp_testÚdevicesr&   rY   r"   s          r   Útest_devicezTestFFTFreq.test_device  sŠ   € Ý! "§(¢(¨1¡+¤+Ñ.Ô.ˆÝ  Ñ$Ô$ˆØð 	0ð 	0ˆAÝ”˜A "¨QÐ/Ñ/Ô/ˆAØ—’˜a¨�Ñ*Ô*ˆAÝ˜Q‘<”<¥9¨Q¡<¤<Ò/Ð/Ð/Ð/Ð/ð	0ð 	0r   N©r‡   rˆ   r‰   rà   r	  r1   r   r   r÷   r÷   ÿ  ó2   € € € € € ð2ð 2ð 2ð$0ð 0ð 0ð 0ð 0r   r÷   c                   ó   — e Zd Zd„ Zd„ ZdS )ÚTestRFFTFreqc                 ó  — |                      g d¢|j        ¬¦  «        }|                      g d¢|j        ¬¦  «        }dt          j        d|¬¦  «        z  }t	          ||dd¬¦  «         d|j        z  t          j        d|j        |¬¦  «        z  }t	          ||d¬	¦  «         d
t          j        d
|¬¦  «        z  }t	          ||d¬	¦  «         d
|j        z  t          j        d
|j        |¬¦  «        z  }t	          ||d¬	¦  «         d S )NrÃ   rï   )r   r   r   r   r   r   r   rù   FTrú   rý   r   )r©   rñ   r   Úrfftfreqr	   rÿ   r   s        r   rà   zTestRFFTFreq.test_definition&  s  € Ø�JŠJ���¨b¬jˆJÑ9Ô9ˆØ�ZŠZÐ*Ð*Ð*°"´*ˆZÑ=Ô=ˆð •”˜Q 2Ð&Ñ&Ô&Ñ&ˆÝ˜˜1¨%ÀÐFÑFÔFÐFà�”‰I�œ Q¨¬°"Ð5Ñ5Ô5Ñ5ˆÝ˜˜1¨%Ð0Ñ0Ô0Ð0à•”˜b RÐ(Ñ(Ô(Ñ(ˆÝ˜˜2¨5Ð1Ñ1Ô1Ð1à�”‰J�œ b¨"¬%°BÐ7Ñ7Ô7Ñ7ˆÝ˜˜2¨5Ð1Ñ1Ô1Ð1Ð1Ð1r   c                 ó  — t          |                     d¦  «        ¦  «        }t          |¦  «        }|D ]R}t          j        d||¬¦  «        }|                     d|¬¦  «        }t          |¦  «        t          |¦  «        k    sJ ‚ŒSd S r  )r   r  r
   r   r  r   r  s          r   r	  zTestRFFTFreq.test_device8  sŠ   € Ý! "§(¢(¨1¡+¤+Ñ.Ô.ˆÝ  Ñ$Ô$ˆØð 	0ð 	0ˆAÝ”˜Q 2¨aÐ0Ñ0Ô0ˆAØ—’˜a¨�Ñ*Ô*ˆAÝ˜Q‘<”<¥9¨Q¡<¤<Ò/Ð/Ð/Ð/Ð/ð	0ð 	0r   Nr
  r1   r   r   r  r     r  r   r  )#Ú__doc__Úscipy.fft._helperr   r   r   Únumpy.testingr   rŠ   r   rÔ   Únumpyr5   r�   Úscipy.conftestr   Úscipy._lib._array_apir	   r
   r   r   Úscipyr   r‹   ÚusefixturesÚ
pytestmarkr   r   r   r'   r*   r‘   r¦   r×   r÷   r  r1   r   r   ú<module>r     sA  ððð ð TÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SÐ SØ &Ð &Ð &Ð &Ð &Ð &Ø *Ð *Ð *Ð *Ð *Ð *Ø €€€Ø Ð Ð Ð Ø 
€
€
€
Ø /Ð /Ð /Ð /Ð /Ð /ðð ð ð ð ð ð ð ð ð ð ð ð Ð Ð Ð Ð Ð à" F¤K×$;Ò$;Ð<NÑ$OÔ$OÐP€
Ø”;Ô/Ð ðð ð Ð ð*ð *ð *ð
:ð :ð :ð, Ð˜$ÐÑÔðG8ð G8ð G8ð G8ð G8ñ G8ô G8ñ  ÔðG8ðR Ð˜$ÐÑÔðp8ð p8ð p8ð p8ð p8ñ p8ô p8ñ  Ôðp8ðf Ð˜4Ð Ñ Ô ðy<ð y<ð y<ð y<ð y<ñ y<ô y<ñ !Ô ðy<ðxI>ð I>ð I>ð I>ð I>ñ I>ô I>ð I>ðX Ð�&ØFðHñ Hô HàÐ�+ØEðGñ Gô Gð0ð 0ð 0ð 0ð 0ñ 0ô 0ñGô GñHô Hð0ð: Ð�&ØFðHñ Hô HàÐ�+ØEðGñ Gô Gð0ð 0ð 0ð 0ð 0ñ 0ô 0ñGô GñHô Hð0ð 0ð 0r   