
    (phN                        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  SSKJrJrJrJr  SSKJr  \\R,                  R/                  S	5      /r\R,                  R2                  r/ S
QrS 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S9\" SSS9 " S S5      5       5       r!\" SSS9\" SSS9 " S S 5      5       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)array_api_compatible)xp_assert_closeget_xp_devices	xp_devicearray_namespace)fftskip_xp_backends)                  	   
      i  i  c                  H    [          H  n [        [        U 5      U 5        M     g )N)_5_smooth_numbersr   r   )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   T)np_onlyc                       \ 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)TestNextFastLen8   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'   selfr3   r   ms       r   r   "TestNextFastLen.test_next_fast_len;   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  )
r8   int16int32int64uint16uint32uint64r   r   intr<   ITYPESitypr"   testNs        r   test_np_integers TestNextFastLen.test_np_integersJ   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  p#[        [        US5      U5        M     g )Nr   r   r   r   r   r   r            i       @r   r   r   r   r   r      r      rP   rQ        rS   rT   Titemsr   r   r<   hamsr"   ys       r   testnext_fast_len_small'TestNextFastLen.testnext_fast_len_smallQ   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  p#[        [        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         	 )rx      2 f;ry      rz       `71Y!r{                X r|      !X TrZ   r\   s       r   testnext_fast_len_big%TestNextFastLen.testnext_fast_len_bigY   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 )Nr7   Treal   rV   Ftargetr   )r   r<   s    r   test_keyword_args!TestNextFastLen.test_keyword_args~   ,    Rd+r111AE2a777r   r2   N)__name__
__module____qualname____firstlineno__r   rM   r_   pytestmarkxfailsysmaxsize
ValueErrorr   r   __static_attributes__r2   r   r   r*   r*   8   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/   r1   r2   r   r   r3   0TestPrevFastLen.test_prev_fast_len.<locals>.nums   r5   r6   r7   FTr   )r8   r9   r:   r   r'   r;   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 )NrA   Tr   )
r8   rB   rC   rD   rE   rF   rG   r   r   rH   rI   s        r   rM    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  p#[        [        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  p#[        [        US5      U5        M     g ) Nr   r   r   r   r   r   r   r   rP   rQ   r0   rS   rT   rU   TrV   r   r   r7      rW   rX   rR            x   y   i  )rR      r   r   r   r   r   z   rY   rS   rT   Fr[   r   r   r\   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   ra   rb   Trc   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  p#[        [        US25      U5        M     g )3Nrg   rh   ihi  `ri   i=ui=urj   rk   i*2i@2rl   rm   l    l     W: rn   ro   l   >9l    8rp   rq   l   en l        n rr   rs   l   q. l       , rt   ru   l   ! l         rv   l   hRrw   l    @!Rrx   l   2 f;r}   l    ary   l         r~   l     +Krz   l    h\ar{   l     >9r|   )r   l   _71Y!r{   r   l   r|   r   r   Tr   r\   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 )Nr7   Tr   r   rV   Fr   )r   r   s    r   r   !TestPrevFastLen.test_keyword_args   r   r   r2   N)r   r   r   r   r   rM   r   r   r   r   r   r   r   r   r   r   r2   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   r2   asarrayr   	r<   xpr"   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      @r2   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   rV   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_defaults;  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_defaultsI  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_shapeV  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_axesc  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_axesp  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   )r<   r   r"   r   r   s        r   test_shape_axes_subset2Test_init_nd_shape_and_axes.test_shape_axes_subset}  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   )r<   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=r2   N)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r2   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)r<   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   r8   r9   r	   r   r   r   )r<   r   r   r"   s       r   test_inverseTestFFTShift.test_inverse  sF    $A

299++QD12ACMM#,,q/:A> %r   cupyzcupy/cupy#8393rd   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   )r<   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   )r<   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   r2   N)
r   r   r   r   r   r  r   r  r  r   r2   r   r   r   r     sD    -?
 f%56	7 7	7 f%56+> 7+>r   r   r  z+CuPy has not implemented the `device` paramr  z	jax.numpyz*JAX has not implemented the `device` paramc                        \ 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r<   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R                  S5      5      n[        U5      n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   )r   device)r'  )r   emptyr
   r   r   r   r<   r   xp_testdevicesr&   r^   r"   s          r   test_deviceTestFFTFreq.test_device  s`    !"((1+. $AA"/Aa*AQ<9Q</// r   r2   Nr   r   r   r   r   r,  r   r2   r   r   r  r        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R                  S5      5      n[        U5      n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   r3  r   r)  s          r   r,  TestRFFTFreq.test_device8  s`    !"((1+. $AQ20Aa*AQ<9Q</// r   r2   Nr.  r2   r   r   r1  r1     r/  r   r1  )#__doc__scipy.fft._helperr   r   r   numpy.testingr   r   r   r   numpyr8   r   scipy.conftestr   scipy._lib._array_apir	   r
   r   r   scipyr   r   usefixtures
pytestmarkr   r   r   r'   r*   r   r   r   r  r1  r2   r   r   <module>r@     sU   T S & *   
 /  "FKK$;$;<N$OP
;;//  *
:, $G8 G8  G8R $p8 p8  p8f 4 y< y< !y<xI> I>X &FH+EG0 0GH0: &FH+EG0 0GH0r   