
    -iBL                     h   S r SSKJrJrJr  SSKJr  SSKJr	  SSKrSSK
rSSKrSSKJrJr  SSKJr  \R$                  R&                  r/ SQr\" S	S
9S 5       rS r\" S	S
9 " S S5      5       r\" S	S
9 " S S5      5       r\" S	S9 " S S5      5       r " S S5      r " S S5      r " S S5      rg)zIncludes 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)xp_assert_close	xp_device)fft)                  	   
      i  i  T)np_onlyc                 H    [          H  n[        [        U5      U5        M     g )N)_5_smooth_numbersr   r   )xpns     N/var/www/html/venv/lib/python3.13/site-packages/scipy/fft/tests/test_helper.pytest_next_fast_lenr      s    ]1%q)     c                     U nUS:  a   e [        U S5      u  p4US:w  a  OUn M  [        SUS-   S5       H  n [        X5      u  p4US:w  a  M  Un M     U S:X  d   SU SU SU  35       eg )Nr   r   r      zx=z is not z-smooth, remainder=)divmodrange)xr   x_origqrds         r   _assert_n_smoothr%      s    F1uu
a|6	  1ac1!<DAAvA	   6 :xxs"5aS9:6r   c                       \ rS rSrS rS rS r\R                  R                  \
R                  S:  S\SS9S	 5       rS
 rSrg)TestNextFastLen5   c                     [         R                  R                  S5        S nU" 5        HD  n[        U5      n[	        US5        U[        US5      :X  d   e[        US5      n[	        US5        MF     g )N  c               3   @   #    [        SS5       S h  vN   Sv   g  N	7fNr     iy r    r   r   nums0TestNextFastLen.test_next_fast_len.<locals>.nums;        Q~%%(( &   
   FTr   )nprandomseedr   r%   selfr   r0   r   ms        r   r   "TestNextFastLen.test_next_fast_len8   d    
		t	) Aa AQ#a////a&AQ" r   c           	      0   [         R                  [         R                  [         R                  [         R                  [         R
                  [         R                  /nU H4  nU" S5      n[        U5      n[        U[        [        U5      5      5        M6     g )N90  )
r5   int16int32int64uint16uint32uint64r   r   intr9   r   ITYPESitypr    testNs         r   test_np_integers TestNextFastLen.test_np_integersG   s\    ((BHHbhh		299biiPDUA!!$Ec!f 56 r   c                     SSSSSSSSSSS	S
SSSS.nUR                  5        H  u  p4[        [        US5      U5        M     g )Nr   r   r   r   r   r   r            i       @r   r   r   r   r   r      r      rM   rN        rP   rQ   Titemsr   r   r9   r   hamsr    ys        r   testnext_fast_len_small'TestNextFastLen.testnext_fast_len_smallN   sN    Q1qQ1$dh
 JJLDAq$/3 !r           $Hamming Numbers too large for 32-bitTreasonr   strictc                     0 SS_SS_SS_SS_SS_SS_S	S
_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SSSSSSSSSSSS .EnUR                  5        H  u  p4[        [        US!5      U5        M     g )"Nhhi =u+2,2i  B3           l   s'    >9   >9l               fn      fn l    >Uko      q.     q. l   xQ+t0       !      ! l    dopL?    hR   hR   2 f;               `71Y!l    ("               X l         	 )ru      2 f;rv      rw       `71Y!rx                X ry      !X TrW   rY   s        r   testnext_fast_len_big%TestNextFastLen.testnext_fast_len_bigV   s    
y
"/
y
 y
 #0
 ,	
 )9,	

 =

 +<]
 _
  
 _
  
 .
 !"2
 0
 "#4
   1#40#40#4 2$6$6 2$69
< JJLDAq$/3 !r   c                 D    [        SSS9S:X  d   e[        SSS9S:X  d   eg )Nr4   Treal   rS   Ftargetr   )r   r9   r   s     r   test_keyword_args!TestNextFastLen.test_keyword_args{   ,    Rd+r111AE2a777r   r/   N)__name__
__module____qualname____firstlineno__r   rJ   r\   pytestmarkxfailsysmaxsize
ValueErrorr   r   __static_attributes__r/   r   r   r'   r'   5   sR    #74 [[s{{U*D(  7 47 4D8r   r'   c                       \ rS rSrS rS rS r\R                  R                  \
R                  S:  S\SS9S	 5       rS
 rSrg)TestPrevFastLen   c                     [         R                  R                  S5        S nU" 5        HD  n[        U5      n[	        US5        U[        US5      :X  d   e[        US5      n[	        US5        MF     g )Nr*   c               3   @   #    [        SS5       S h  vN   Sv   g  N	7fr,   r.   r/   r   r   r0   0TestPrevFastLen.test_prev_fast_len.<locals>.nums   r2   r3   r4   FTr   )r5   r6   r7   r   r%   r8   s        r   test_prev_fast_len"TestPrevFastLen.test_prev_fast_len   r<   r   c           	      ~   [         R                  [         R                  [         R                  [         R                  [         R
                  [         R                  /nU H[  nU" S5      n[        U5      n[        U[        [        U5      5      5        [        USS9n[        U[        [        U5      SS95        M]     g )Nr>   Tr   )
r5   r?   r@   rA   rB   rC   rD   r   r   rE   rF   s         r   rJ    TestPrevFastLen.test_np_integers   s    ((BHHbhh		299IIDUA!!$Ec!f 56!!$/Ec!f4 @A r   c                 j   SSSSSSSSSS	S
S
SSSS.nUR                  5        H  u  p4[        [        US5      U5        M     0 SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_SS_S	S	_S
S
_SS
_SSSSSSSSSSSS.EnUR                  5        H  u  p4[        [        US5      U5        M     g ) Nr   r   r   r   r   r   r   r   rM   rN   r-   rP   rQ   rR   TrS   r   r   r4      rT   rU   rO            x   y   i  )rO      r   r   r   r   r   z   rV   rP   rQ   FrX   r   r   rY   s        r   testprev_fast_len_small'TestPrevFastLen.testprev_fast_len_small   sB   Q1qQ1$dh
 JJLDAq$/3 !
q
Q
1

$%q
*+Q
011
67
<=q
BDb



$&
,.
46
<>
HJ3Sdh	
 JJLDAq%0!4 !r   r^   r_   Tr`   c           
      L   0 SS_SS_SS_SS_SS_SS_SS_S	S_S
S_SS_SS_SS_SS_SS_SS_SS_SS_0 SS_SS_SS_SS_SS_SS_SS_S S _S!S _S"S#_S$S$_S%S$_S&S'_S(S(_S)S(_S*S+_S,S,_ES,S-S.S.S/S0S0S.S1.EnUR                  5        H  u  p4[        [        US25      U5        M     g )3Nrd   re   ihi  `rf   i=ui=urg   rh   i*2i@2ri   rj   l    l     W: rk   rl   l   >9l    8rm   rn   l   en l        n ro   rp   l   q. l       , rq   rr   l   ! l         rs   l   hRrt   l    @!Rru   l   2 f;rz   l    arv   l         r{   l     +Krw   l    h\arx   l     >9ry   )r|   l   _71Y!rx   r}   l   ry   r   r~   Tr   rY   s        r   testprev_fast_len_big%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
0  19
4 _59
6  79
8  99
< .=9
> !"2?9
@ !"2A9
D 0E9
F "#4G9
H "#4I9
L 0M9
N "#4O9
P "#4Q9
T 0U9
V "#4W9
X "#4Y9
\ 0]9
^ $5#4 2$6$6 2$6$6q9
t JJLDAq$/3 !r   c                 D    [        SSS9S:X  d   e[        SSS9S:X  d   eg )Nr4   Tr   r   rS   Fr   )r   r   s     r   r   !TestPrevFastLen.test_keyword_args   r   r   r/   N)r   r   r   r   r   rJ   r   r   r   r   r   r   r   r   r   r   r/   r   r   r   r      sS    #	B5" [[s{{U*D(  7<47<4|8r   r   )cpu_onlyc                   \    \ rS rSrS rS rS rS rS rS r	S r
S	 rS
 rS rS rS rSrg)Test_init_nd_shape_and_axes   c                 n    UR                  S5      nS nS nSn/ n[        X#U5      u  pxXu:X  d   eX:X  d   eg )Nr   r/   asarrayr   	r9   r   r    shapeaxesshape_expectedaxes_expected	shape_resaxes_ress	            r   test_py_0d_defaults/Test_init_nd_shape_and_axes.test_py_0d_defaults   sJ    JJqM5aE	***(((r   c                 n    UR                  S5      nS nS nSn/ n[        X#U5      u  pxXu:X  d   eX:X  d   eg )Ng      @r/   r   r   s	            r   test_xp_0d_defaults/Test_init_nd_shape_and_axes.test_xp_0d_defaults  sJ    JJrN5aE	***(((r   c                 t    UR                  / SQ5      nS nS nSnS/n[        X#U5      u  pxXu:X  d   eX:X  d   eg )Nr   r   r   )r   r   r   r   s	            r   test_py_1d_defaults/Test_init_nd_shape_and_axes.test_py_1d_defaults  sM    JJy!5aE	***(((r   c                 t    UR                  SSS5      nS nS nSnS/n[        X#U5      u  pxXu:X  d   eX:X  d   eg )Nr   r   皙?)r   )aranger   r   s	            r   test_xp_1d_defaults/Test_init_nd_shape_and_axes.test_xp_1d_defaults  sQ    IIaB5aE	***(((r   c                 ~    UR                  / SQ/ SQ/5      nS nS nSnSS/n[        X#U5      u  pxXu:X  d   eX:X  d   eg )N)r   r   r   r   )r   r   rS   r   )r   r   r   r   r   r   s	            r   test_py_2d_defaults/Test_init_nd_shape_and_axes.test_py_2d_defaults*  sY    JJ$& 'A5aE	***(((r   c                     UR                  SSS5      nUR                  US5      nS nS nSnSS/n[        X#U5      u  pxXu:X  d   eX:X  d   eg )Nr   r   r   )r   r   )r   reshaper   r   s	            r   test_xp_2d_defaults/Test_init_nd_shape_and_axes.test_xp_2d_defaults8  sc    IIaBJJq&!A5aE	***(((r   c                 v    UR                  / SQ5      nS nS nSn/ SQn[        X#U5      u  pxXu:X  d   eX:X  d   eg )Nr   r   r   r   r   r   r   r   r   r   zerosr   r   s	            r   test_xp_5d_defaults/Test_init_nd_shape_and_axes.test_xp_5d_defaultsF  sK    HH_%('5aE	***(((r   c                 z    UR                  / SQ5      n/ SQnS nSn/ SQn[        X#U5      u  pxXu:X  d   eX:X  d   eg )Nr   )r   r   r   r   )r   r   r   r   r   r   r   r   s	            r   test_xp_5d_set_shape0Test_init_nd_shape_and_axes.test_xp_5d_set_shapeS  sK    HH_%")'5aE	***(((r   c                 z    UR                  / SQ5      nS n/ SQnSn/ SQn[        X#U5      u  pxXu:X  d   eX:X  d   eg )Nr   )r   r   r   )r   r   r   r   r   s	            r   test_xp_5d_set_axes/Test_init_nd_shape_and_axes.test_xp_5d_set_axes`  sK    HH_%"!5aE	***(((r   c                 ~    UR                  / SQ5      n/ SQn/ SQnSn/ SQn[        X#U5      u  pxXu:X  d   eX:X  d   eg )Nr   )r   r   r   )r   r   r   )r   r   r   r   r   s	            r   test_xp_5d_set_shape_axes5Test_init_nd_shape_and_axes.test_xp_5d_set_shape_axesm  sK    HH_%#!5aE	***(((r   c                 d    UR                  S5      n[        USS S9u  p4US:X  d   eU/ SQ:X  d   eg )N)r   r   r   r   )r   r   r   r   r   r   r   )r9   r   r    r   r   s        r   test_shape_axes_subset2Test_init_nd_shape_and_axes.test_shape_axes_subsetz  s<    HH\"-aytL	!!!y   r   c                    UR                  S5      n[        [        SS9   [        US SS/SS//S9  S S S 5        [        [        SS9   [        US / SQS9  S S S 5        [        [        S	S9   [        US S/S9  S S S 5        [        [        S	S9   [        US S
/S9  S S S 5        [        [        SS9   [        US SS/S9  S S S 5        [        [        SS9   [        USS/SS//S S9  S S S 5        [        [        SS9   [        U/ SQS S9  S S S 5        [        [        SS9   [        UR                  / SQ5      / SQS/S9  S S S 5        [        [        SS9   [        US/S S9  S S S 5        [        [        SS9   [        US
S S9  S S S 5        g ! , (       d  f       GNe= f! , (       d  f       GNS= f! , (       d  f       GNB= f! , (       d  f       GN1= f! , (       d  f       GN= f! , (       d  f       GN	= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g = f)Nr   z-axes must be a scalar or iterable of integers)matchr   r   r   r   )g      ?g       @g      @g      @z$axes exceeds dimensionality of inputz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_errors'Test_init_nd_shape_and_axes.test_errors  s   HHQK: .2 3#AT!Q!Q8HI3 : .2 3#AT8HI3 :!GI#AT<I :!GI#AT=I :!:<#ATA?< : .2 3#Aq!fq!f-=DI3 : .2 3#A-=DI3 :"<= $BHH\$:*31#?= :"34 $AaSt<4
 :"45 $ARd;5 5O3 33 3I II I< <3 33 3= =4 4
5 5sw   FF",F4G2GG*>G<" HH;H/
F"
F14
G
G
G'*
G9<
H

H
H,/
H=r/   N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r/   r   r   r   r      s>    ))))))))))!,<r   r   c                   T    \ rS rSrS rS r\" SSS9S 5       r\" SSS9S 5       rS	r	g
)TestFFTShifti  c                    UR                  / SQ5      nUR                  / SQ5      n[        [        R                  " U5      U5        [        [        R                  " U5      U5        UR                  / SQ5      nUR                  / SQ5      n[        [        R                  " U5      U5        [        [        R                  " U5      U5        g )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    r[   s       r   test_definitionTestFFTShift.test_definition  s    JJ78JJ78Q+a(!,JJ;<JJ;<Q+a(!,r   c                     S Hf  nUR                  [        R                  R                  U45      5      n[        [        R
                  " [        R                  " U5      5      U5        Mh     g )N)r   r   r   d      )r   r5   r6   r   r
   r   r   )r9   r   r   r    s       r   test_inverseTestFFTShift.test_inverse  sF    $A

299++QD12ACMM#,,q/:A> %r   cupyzcupy/cupy#8393)ra   c                 0   UR                  / SQ/ SQ/ SQ/5      nUR                  / SQ/ SQ/ SQ/5      n[        [        R                  " USS9U5        [        [        R                  " US	S9[        R                  " US
S95        [        [        R                  " USS9U5        [        [        R                  " US	S9[        R                  " US
S95        [        [        R                  " U5      U5        [        [        R                  " U5      U5        g )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_keywordTestFFTShift.test_axes_keyword  s    

J
LAB**mY
CDU8'BU3S\\%d5STgF;UCgA6gD9	;U+W5g.6r   c                    UR                  SS/SS/SS//UR                  S9nUR                  SS/SS/SS//UR                  S9n[        [        R                  " USS9U5        [        [        R
                  " USS9U5        [        [        R                  " US	S9U5        [        [        R
                  " US/S9U5        UR                  SS/SS/SS//UR                  S9n[        [        R                  " USS9U5        [        [        R
                  " USS9U5        UR                  SS/SS/SS//UR                  S9n[        [        R                  " US
S9U5        [        [        R
                  " US
S9U5        [        [        R                  " USS/S9U5        [        [        R
                  " USS/S9U5        [        [        R                  " USS9U5        [        [        R
                  " USS9U5        [        [        R                  " U5      U5        [        [        R
                  " U5      U5        g)z0Test 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_dimsTestFFTShift.test_uneven_dims  s    

FFF
 	   ZZFFF!
 	   

 	U3Z@jq95AU6
Cjs;UC ZZFFF!
 	   

 	U3Z@jq95A FFF%
 	 $ 
 	U8.In6BEJU!Q8.InAq6BEJ 	U6Gn4@%HU+^<n5u=r   r/   N)
r   r   r   r   r   r   skip_xp_backendsr  r  r   r/   r   r   r   r     sD    -?
 f%56	7 7	7 f%56+> 7+>r   r   c                        \ rS rSrS rS rSrg)TestFFTFreqi  c                    UR                  / SQUR                  S9nUR                  / SQUR                  S9nS[        R                  " SUS9-  n[	        XBSSS9  SUR
                  -  [        R                  " SUR
                  US9-  n[	        XBSS	9  S
[        R                  " S
US9-  n[	        XCSS	9  S
UR
                  -  [        R                  " S
UR
                  US9-  n[	        XCSS	9  g )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    x2r[   s        r   r   TestFFTFreq.test_definition  s    JJ6bjjJIZZ;2::ZN A"%%%FIAruu44%0RB''51JR26651r   c                     U HB  n[         R                  " SXS9nUR                  SUS9n[        U5      [        U5      :X  a  MB   e   g Nr   )r   devicer   )r#  )r
   r  emptyr	   r9   r   devicesr$   r[   r    s         r   test_deviceTestFFTFreq.test_device  sD    AA"/A1%AQ<9Q</// r   r/   Nr   r   r   r   r   r'  r   r/   r   r   r  r    s    2$0r   r  c                        \ rS rSrS rS rSrg)TestRFFTFreqi  c                    UR                  / SQUR                  S9nUR                  / SQUR                  S9nS[        R                  " SUS9-  n[	        XBSSS9  SUR
                  -  [        R                  " SUR
                  US9-  n[	        XBSS	9  S
[        R                  " S
US9-  n[	        XCSS	9  S
UR
                  -  [        R                  " S
UR
                  US9-  n[	        XCSS	9  g )Nr   r  )r   r   r   r   r   r   r   r  FTr  r  r   )r   r  r
   rfftfreqr   r  r  s        r   r   TestRFFTFreq.test_definition  s    JJbjjJ9ZZ*"**Z= Q2&&%FIQ"55%0bR((51Jb"%%B7751r   c                     U HB  n[         R                  " SXS9nUR                  SUS9n[        U5      [        U5      :X  a  MB   e   g r"  )r
   r-  r$  r	   r%  s         r   r'  TestRFFTFreq.test_device*  sD    AQ20A1%AQ<9Q</// r   r/   Nr)  r/   r   r   r+  r+    s    2$0r   r+  )__doc__scipy.fft._helperr   r   r   numpy.testingr   r   r   r   numpyr5   r   scipy._lib._array_apir   r	   scipyr
   r   r  r   r   r%   r'   r   r   r   r  r+  r/   r   r   <module>r7     s    T S & *   
 < ;;//   $*  *
:, $G8 G8  G8R $p8 p8  p8f 4 y< y< !y<xI> I>X0 040 0r   