+
    nDjL                        R t ^ RIHtHtHt ^ RIHt ^ RIHt	 ^ RIt^ RI
t^ RIt^ RIHtHtHt ^ RIHt ]P&                  P(                  t].t. ROtR tR t ! R	 R
4      t ! R R4      t]! RR7      ]P&                  P7                  RRR7       ! R R4      4       4       t]! ]P:                  ]P<                  4       ! R R4      4       t]! ]P@                  4       ! R R4      4       t!]! ]PD                  4       ! R R4      4       t#R# )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make_xp_test_case)fftc                  J    \          F  p \        \        V 4      V 4       K  	  R # )N)_5_smooth_numbersr   r   )ns    U/data/cameron/venvs/s3viz/lib/python3.14/site-packages/scipy/fft/tests/test_helper.pytest_next_fast_lenr      s    ]1%q)     c                     T pV^8  d   Q h \        V ^4      w  r4V^ 8w  d   MTp K  \        ^V^,           ^4       F  p \        W4      w  r4V^ 8w  d   K  Tp K  	  V ^8X  g   Q RV RV RV  24       hR# )   zx=z is not z-smooth, remainder=N)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                      a  ] tR t^6t o R tR tR t]P                  P                  ]
P                  R8  R]RR7      R 4       tR tR	tV tR
# )TestNextFastLenc                    \         P                  P                  R 4       R pV! 4        FE  p\        V4      p\	        V^4       V\        VR4      8X  g   Q h\        VR4      p\	        V^4       KG  	  R# )  c               3   B   "   \        ^R4       Rj  xL
  Rx  R#  L
5i     Niy r    r   r   nums0TestNextFastLen.test_next_fast_len.<locals>.nums;        Q~%%(( &   FTN)nprandomseedr   r   selfr%   r   ms   &   r   r   "TestNextFastLen.test_next_fast_len8   d    
		t	) Aa AQ#a////a&AQ" r   c           	     2   \         P                  \         P                  \         P                  \         P                  \         P
                  \         P                  .pV F4  pV! R 4      p\        V4      p\        V\        \        V4      4      4       K6  	  R# )90  N)
r)   int16int32int64uint16uint32uint64r   r   int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                    ^^^^^^^^^^^^^^^^^^^^^^^^RRRRRR/pVP                  4        F  w  r#\        \        VR4      V4       K  	  R# )r!     i       @TNitemsr   r   r-   hamsr   ys   &   r   testnext_fast_len_small'TestNextFastLen.testnext_fast_len_smallN   sl    q!Q1aAq!Q1aBBBD$dHh
 JJLDAq$/3 !r   $Hamming Numbers too large for 32-bitTreasonr   strictc                    / R R bRRbRRbRRbRRbRRbRRbRRbRRbR	R	bRR
bRRbRRbRRbRRbRRbR RbRRR!RRRR"RRRR#RRRR$RR%RRRR&R/CpVP                  4        F  w  r#\        \        VR4      V4       K  	  R# )'hi =u+2i  B3      l   s'    >9l               fn l    >Uko      q. l   xQ+t0       ! l    dopL?    hR   2 f;               `71Y!l    ("               X l         	 TNh,2        >9     fn     q.      !    hR   2 f;       `71Y!             X    !X rD   rF   s   &   r   testnext_fast_len_big%TestNextFastLen.testnext_fast_len_bigV   sA   
y
"/
y
 y
 #0
 ,	
 )9,	

 =

 +<]
 _
  
 _
  
 .
 !"2
 0
 "#4
  0!#40!#40!#4 2"$6"$6 2"$69
< JJLDAq$/3 !r   c                V    \        ^RR7      ^8X  g   Q h\        ^RR7      ^8X  g   Q hR#    TrealF)targetrr   N)r   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   r>   rI   pytestmarkxfailsysmaxsize
ValueErrorrl   ru   __static_attributes____classdictcell____classdict__s   @r   r   r   6   sZ     #74 [[s{{U*D(  7 47 4D8 8r   r   c                      a  ] tR t^t o R tR tR t]P                  P                  ]
P                  R8  R]RR7      R 4       tR tR	tV tR
# )TestPrevFastLenc                    \         P                  P                  R 4       R pV! 4        FE  p\        V4      p\	        V^4       V\        VR4      8X  g   Q h\        VR4      p\	        V^4       KG  	  R# )r   c               3   B   "   \        ^R4       Rj  xL
  Rx  R#  L
5ir    r#   r$   r   r   r%   0TestPrevFastLen.test_prev_fast_len.<locals>.nums   r'   r(   FTN)r)   r*   r+   r   r   r,   s   &   r   test_prev_fast_len"TestPrevFastLen.test_prev_fast_len   r0   r   c           	        \         P                  \         P                  \         P                  \         P                  \         P
                  \         P                  .pV Fa  pV! R 4      p\        V4      p\        V\        \        V4      4      4       \        VRR7      p\        V\        \        V4      RR7      4       Kc  	  R# )r2   Trq   N)
r)   r3   r4   r5   r6   r7   r8   r   r   r9   r:   s   &    r   r>    TestPrevFastLen.test_np_integers   s    ((BHHbhh		299IIDUA!!$Ec!f 56!!$/Ec!f4 @A r   c                   ^^^^^^^^^^^^^^^^^^^^^^^^RRRRRR/pVP                  4        F  w  r#\        \        VR4      V4       K  	  / ^^b^^b^^b^^b^^b^^b^^b^^b^	^	b^
^
b^^b^^b^^b^^b^^b^^b^^b^^^^^^^^^^^x^x^y^y^z^yRRRRRR/CpVP                  4        F  w  r#\        \        VR4      V4       K  	  R# )	r!   rA   r"   rB   rC   Ti  FNrE   r   r   rF   s   &   r   testprev_fast_len_small'TestPrevFastLen.testprev_fast_len_small   sv   q!Q1aAq!Q1aBBBD$dHh
 JJLDAq$/3 !
q
Q
1

$%q
*+Q
011
67
<=q
BDb



$&
,.
46
<>
DFBBBCc3S$dHh	
 JJLDAq%0!4 !r   rK   TrL   c                \   / R R bRR bRRbRR bRR bRR bRRbR RbR!RbRRbR"RbR#RbRRbR$RbR%RbR	R	bR&R	b/ R'R
bRRbR(RbR)RbRRbR*RbR+RbRRbR,RbR-RbRRbR.RbR/RbRRbR0RbR1RbRRbCR2RR3RRRR4RR5RRRR6RR7R/CpVP                  4        F  w  r#\        \        VR4      V4       K  	  R# )8rP   i  `rQ   rR   i@2rS   l     W: rT   l    8rU   l        n rV   l       , rW   l         rX   l    @!RrY   l    arZ   l     +Kr[   l    h\ar\   l     >9r]   TNr^   ihi=ui=ur_   i*2r`   l    ra   l   >9rb   l   en rc   l   q. rd   l   ! l   hRre   l   2 f;rf   l         rg   rh   l   _71Y!ri   l   rk   rj   r   rF   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
^ "#4!#4 2"$6"$6 2"$6"$6q9
t JJLDAq$/3 !r   c                V    \        ^RR7      ^
8X  g   Q h\        ^RR7      ^8X  g   Q hR# ro   )r   rt   s   &r   ru   !TestPrevFastLen.test_keyword_args   rw   r   r$   Nrx   )ry   rz   r{   r|   r   r>   r   r}   r~   r   r   r   r   r   ru   r   r   r   s   @r   r   r      s[     #	B5" [[s{{U*D(  7<47<4|8 8r   r   T)cpu_onlyFprivate)rM   c                   h   a  ] tR t^t o R tR tR tR tR tR t	R t
R tR	 tR
 tR tR tRtV tR# )Test_init_nd_shape_and_axesc                t    VP                  ^4      pRpRpRp. p\        W#V4      w  rxWu8X  g   Q hW8X  g   Q hR# )   Nr$   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                t    VP                  R 4      pRpRpRp. p\        W#V4      w  rxWu8X  g   Q hW8X  g   Q hR# )g      @Nr$   r   r   s	   &&       r   test_xp_0d_defaults/Test_init_nd_shape_and_axes.test_xp_0d_defaults  sJ    JJrN5aE	***(((r   c                z    VP                  . RO4      pRpRpRp^ .p\        W#V4      w  rxWu8X  g   Q hW8X  g   Q hR# )r!   N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                z    VP                  ^ ^R4      pRpRpRp^ .p\        W#V4      w  rxWu8X  g   Q hW8X  g   Q hR# )    皙?N)
   )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                    VP                  . RO. RO.4      pRpRpRp^ ^.p\        W#V4      w  rxWu8X  g   Q hW8X  g   Q hR# )r!   N)r!   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                    VP                  ^ ^R4      pVP                  VR4      pRpRpRp^ ^.p\        W#V4      w  rxWu8X  g   Q hW8X  g   Q hR# )r   r   N)r   r   )r   reshaper   r   s	   &&       r   test_xp_2d_defaults/Test_init_nd_shape_and_axes.test_xp_2d_defaults9  sc    IIaBJJq&!A5aE	***(((r   c                |    VP                  . RO4      pRpRpRp. ROp\        W#V4      w  rxWu8X  g   Q hW8X  g   Q hR# )r   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_defaultsG  sK    HH_%('5aE	***(((r   c                    VP                  . RO4      p. ROpRpRp. ROp\        W#V4      w  rxWu8X  g   Q hW8X  g   Q hR# )r   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_shapeT  sK    HH_%")'5aE	***(((r   c                    VP                  . RO4      pRp. ROpRp. ROp\        W#V4      w  rxWu8X  g   Q hW8X  g   Q hR# )r   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_axesa  sK    HH_%"!5aE	***(((r   c                    VP                  . RO4      p. ROp. ROpRp. ROp\        W#V4      w  rxWu8X  g   Q hW8X  g   Q hR# )r   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_axesn  sK    HH_%#!5aE	***(((r   c                p    VP                  R4      p\        VRRR7      w  r4VR8X  g   Q hV. RO8X  g   Q hR# )r   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           	        VP                  ^4      p\        \        RR7      ;_uu_ 4        \        VR^^.^^..R7       RRR4       \        \        RR7      ;_uu_ 4        \        VR. ROR7       RRR4       \        \        RR7      ;_uu_ 4        \        VR^.R7       RRR4       \        \        RR7      ;_uu_ 4        \        VRR.R7       RRR4       \        \        RR7      ;_uu_ 4        \        VR^ ^ .R7       RRR4       \        \        RR7      ;_uu_ 4        \        V^^.^^..RR7       RRR4       \        \        RR7      ;_uu_ 4        \        V. RORR7       RRR4       \        \        RR7      ;_uu_ 4        \        VP                  . RO4      . RO^.R7       RRR4       \        \        R	R7      ;_uu_ 4        \        V^ .RR7       RRR4       \        \        R
R7      ;_uu_ 4        \        VRRR7       RRR4       R#   + '       g   i     EL; i  + '       g   i     EL; i  + '       g   i     EL; i  + '       g   i     EL; i  + '       g   i     ELp; i  + '       g   i     ELN; i  + '       g   i     EL0; i  + '       g   i     EL ; i  + '       g   i     L; i  + '       g   i     R# ; i)r!   z-axes must be a scalar or iterable of integers)matchNr   z$axes exceeds dimensionality of inputzall axes must be uniquez.shape must be a scalar or iterable of integerszBwhen given, axes and shape arguments have to be of the same lengthz1invalid number of data points \(\[0\]\) specifiedz2invalid number of data points \(\[-2\]\) specified)g      ?g       @g      @g      @)r!   r!   r!   r!   r   )r   assert_raisesr   r   )r-   r   r   s   && r   test_errors'Test_init_nd_shape_and_axes.test_errors  st   HHQK: .2 3 3#AT!Q!Q8HI3 : .2 3 3#AT8HI3 :!GI I#AT<I :!GI I#AT=I :!:< <#ATA?< : .2 3 3#Aq!fq!f-=DI3 : .2 3 3#A-=DI3 :"<= = $BHH\$:*31#?= :"34 4 $AaSt<4
 :"45 5 $ARd;5 5O3 3 33 3 3I I II I I< < <3 3 33 3 3= = =4 4
5 5 5sw   H!H1II5I-'JJ#J)J=KH.	1I	I	I*	-I>	J	J&	)J:	=K	K!	r$   N)ry   rz   r{   r|   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   s   @r   r   r      sF     ))))))))))!,< ,<r   r   c                   8   a  ] tR tRt o R tR tR tR tRtV t	R# )TestFFTShifti  c                   VP                  . RO4      pVP                  . RO4      p\        \        P                  ! V4      V4       \        \        P                  ! V4      V4       VP                  . RO4      pVP                  . RO4      p\        \        P                  ! V4      V4       \        \        P                  ! V4      V4       R# )        N)	r   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   rH   s   &&  r   test_definitionTestFFTShift.test_definition  s    JJ78JJ78Q+a(!,JJ;<JJ;<Q+a(!,r   c                    R Ff  pVP                  \        P                  P                  V34      4      p\        \        P
                  ! \        P                  ! V4      4      V4       Kh  	  R# )r!   N)r!   r   	   d      )r   r)   r*   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   c                V   VP                  . RO. RO. RO.4      pVP                  . RO. RO. RO.4      p\        \        P                  ! VR	R7      V4       \        \        P                  ! V^ R7      \        P                  ! VR
R7      4       \        \        P                  ! VR	R7      V4       \        \        P                  ! V^ R7      \        P                  ! VR
R7      4       \        \        P                  ! V4      V4       \        \        P                  ! V4      V4       R# )r   r   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   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                   VP                  ^ ^.^^.^^..VP                  R7      pVP                  ^^.^ ^.^^..VP                  R7      p\        \        P                  ! V^ R7      V4       \        \        P
                  ! V^ R7      V4       \        \        P                  ! VRR7      V4       \        \        P
                  ! V^ .R7      V4       VP                  ^^ .^^.^^..VP                  R7      p\        \        P                  ! V^R7      V4       \        \        P
                  ! V^R7      V4       VP                  ^^.^^ .^^..VP                  R7      p\        \        P                  ! VRR7      V4       \        \        P
                  ! VRR7      V4       \        \        P                  ! V^ ^.R7      V4       \        \        P
                  ! V^ ^.R7      V4       \        \        P                  ! VRR7      V4       \        \        P
                  ! VRR7      V4       \        \        P                  ! V4      V4       \        \        P
                  ! V4      V4       R# )z0Test 2D input, which has uneven dimension sizes dtyper   Nr   r   )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   r$   N)
ry   rz   r{   r|   r   r   r   r  r   r   r   s   @r   r   r     s     -?
	7+> +>r   r   c                   ,   a  ] tR tRt o R tR tRtV tR# )TestFFTFreqi  c                T   VP                  . ROVP                  R7      pVP                  . R	OVP                  R7      p^	\        P                  ! ^	VR7      ,          p\	        WBRRR7       ^	VP
                  ,          \        P                  ! ^	VP
                  VR7      ,          p\	        WBRR7       ^
\        P                  ! ^
VR7      ,          p\	        WCRR7       ^
VP
                  ,          \        P                  ! ^
VP
                  VR7      ,          p\	        WCRR7       R# )
r   r   r   FTcheck_dtypecheck_namespacer  N)	r   r!   r   r   r   r   r   r   r   )
r   r!   r   r   r   r   r   r   r   r   )r   r   r
   fftfreqr   pir-   r   r   x2rH   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                    V FI  p\         P                  ! ^	WR7      pVP                  ^ VR7      p\        V4      \        V4      8X  d   KI  Q h	  R# r   )r   device)r  N)r
   r  emptyr   r-   r   devicesr   rH   r   s   &&&   r   test_deviceTestFFTFreq.test_device  sD    AA"/A1%AQ<9Q</// r   r$   Nry   rz   r{   r|   r   r  r   r   r   s   @r   r  r    s     2$0 0r   r  c                   ,   a  ] tR tRt o R tR tRtV tR# )TestRFFTFreqi  c                T   VP                  . ROVP                  R7      pVP                  . R	OVP                  R7      p^	\        P                  ! ^	VR7      ,          p\	        WBRRR7       ^	VP
                  ,          \        P                  ! ^	VP
                  VR7      ,          p\	        WBRR7       ^
\        P                  ! ^
VR7      ,          p\	        WCRR7       ^
VP
                  ,          \        P                  ! ^
VP
                  VR7      ,          p\	        WCRR7       R# )
r   r   r  FTr  r
  Nr   )r   r!   r   r   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                    V FI  p\         P                  ! ^	WR7      pVP                  ^ VR7      p\        V4      \        V4      8X  d   KI  Q h	  R# r  )r
   r  r  r   r  s   &&&   r   r  TestRFFTFreq.test_device,  sD    AQ20A1%AQ<9Q</// r   r$   Nr  r   s   @r   r  r    s     2$0 0r   r  )r   r   r   r   r   r   r   r      i  i  )$__doc__scipy.fft._helperr   r   r   numpy.testingr   r}   r   r   numpyr)   r   scipy._lib._array_apir   r   r	   scipyr
   r~   skip_xp_backendslazy_xp_modulesr   r   r   r   r   uses_xp_capabilitiesr   r   r   r   r  r  r  r  r$   r   r   <module>r*     s   T S & *   
 O O ;;// % *
:,G8 G8Tp8 p8f 4 !!%	!:y< y< ; !y<x 3<</G> G> 0G>T 3;;0 0  04 3<< 0 0 !0r   