
    BpjL                     
   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Jr  SSKJr  \R&                  R(                  r\/r/ SQrS	 rS
 r " S S5      r " S S5      r\" SS9\R&                  R7                  SSS9 " S S5      5       5       r\" \R:                  \R<                  5       " S S5      5       r\" \R@                  5       " S S5      5       r!\" \RD                  5       " S S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)xp_assert_close	xp_devicemake_xp_test_case)fft)                  	   
      i  i  c                  H    [          H  n [        [        U 5      U 5        M     g )N)_5_smooth_numbersr   r   )ns    W/var/www/html/pdf-tiff/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)TestNextFastLen6   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/   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  )
r4   int16int32int64uint16uint32uint64r   r   intr8   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  p#[        [        US5      U5        M     g )Nr   r   r   r   r   r   r            i       @r   r   r   r   r   r      r      rL   rM        rO   rP   Titemsr   r   r8   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  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         	 )rt      2 f;ru      rv       `71Y!rw                X rx      !X TrV   rX   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 )Nr3   Treal   rR   Ftargetr   )r   r8   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   rI   r[   pytestmarkxfailsysmaxsize
ValueErrorr   r   __static_attributes__r.   r   r   r&   r&   6   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   r/   0TestPrevFastLen.test_prev_fast_len.<locals>.nums   r1   r2   r3   FTr   )r4   r5   r6   r   r$   r7   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   )
r4   r>   r?   r@   rA   rB   rC   r   r   rD   rE   s        r   rI    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   rL   rM   r,   rO   rP   rQ   TrR   r   r   r3      rS   rT   rN            x   y   i  )rN      r   r   r   r   r   z   rU   rO   rP   FrW   r   r   rX   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  p#[        [        US25      U5        M     g )3Nrc   rd   ihi  `re   i=ui=urf   rg   i*2i@2rh   ri   l    l     W: rj   rk   l   >9l    8rl   rm   l   en l        n rn   ro   l   q. l       , rp   rq   l   ! l         rr   l   hRrs   l    @!Rrt   l   2 f;ry   l    aru   l         rz   l     +Krv   l    h\arw   l     >9rx   )r{   l   _71Y!rw   r|   l   rx   r~   r}   Tr   rX   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 )Nr3   Tr   r   rR   Fr   )r   r   s    r   r   !TestPrevFastLen.test_keyword_args   r   r   r.   N)r   r   r   r   r   rI   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   T)cpu_onlyFprivate)r`   c                   \    \ 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   	r8   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      @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   rR   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_defaults9  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_defaultsG  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_shapeT  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_axesa  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_axesn  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   )r8   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   )r8   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                   ,    \ rS rSrS rS rS rS 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)r8   r   r   rZ   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   r4   r5   r   r   r   r   )r8   r   r   r   s       r   test_inverseTestFFTShift.test_inverse  sF    $A

299++QD12ACMM#,,q/:A> %r   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   )r8   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   )r8   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   r  r  r   r.   r   r   r   r     s    -?
	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r8   r   r   x2rZ   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	   r8   r   devicesr#   rZ   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   numpyr4   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>r9     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   