
    tKgDN                        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,                  j/                  d	      gZej,                  j2                  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ddg       G d d             Z! eddddg       G d d              Z"y)!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devicearray_namespace)fftskip_xp_backends)                  	   
      i  i  c                  D    t         D ]  } t        t        |       |         y )N)_5_smooth_numbersr   r   )ns    _/home/alanp/www/video.onchill/myenv/lib/python3.12/site-packages/scipy/fft/tests/test_helper.pytest_next_fast_lenr      s    ]1%q)     c                     | }|dk  rJ 	 t        | d      \  }}|dk7  rn|} t        d|dz   d      D ]  }	 t        | |      \  }}|dk7  r|}  | dk(  sJ d| d| d|         y )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|16	  1ac1!Q<DAqAvA	   6 :xxs"5aS9:6r   T)np_onlyc                       e Zd Zd Zd Zd Zej                  j                  e	j                  dk  ded      d        Zd	 Zy
)TestNextFastLenc                     t         j                  j                  d       d } |       D ]B  }t        |      }t	        |d       |t        |d      k(  sJ t        |d      }t	        |d       D y )N  c               3   @   K   t        dd      E d {    d y 7 	wNr     iy r!    r   r   numsz0TestNextFastLen.test_next_fast_len.<locals>.nums>         Q~%%(( &   
   FTr   )nprandomseedr   r'   selfr2   r   ms       r   r   z"TestNextFastLen.test_next_fast_len;   d    
		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 ]3  } |d      }t        |      }t        |t        t        |                   5 y )N90  )
r6   int16int32int64uint16uint32uint64r   r   intr:   ITYPESitypr"   testNs        r   test_np_integersz TestNextFastLen.test_np_integersJ   s\    ((BHHbhh		299biiPDUA!!$Ec!f 56 r   c                     ddddddddddd	d
dddd}|j                         D ]  \  }}t        t        |d      |        y )Nr   r   r   r   r   r   r            i       @r   r   r   r   r   r      r      rL   rM        rO   rP   Titemsr   r   r:   hamsr"   ys       r   testnext_fast_len_smallz'TestNextFastLen.testnext_fast_len_smallQ   sP    Q1qQ1$dh
 JJLDAqq$/3 !r           $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 }|j                         D ]  \  }}t        t        |d!      |        y )"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         	 )rs      2 f;rt      ru       `71Y!rv                X rw      !X TrV   rX   s       r   testnext_fast_len_bigz%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
< JJLDAqq$/3 !r   c                 L    t        dd      dk(  sJ t        dd      dk(  sJ y )Nr5   Treal   rR   Ftargetr   )r   r:   s    r   test_keyword_argsz!TestNextFastLen.test_keyword_args~   ,    Rd+r111AE2a777r   N)__name__
__module____qualname__r   rJ   r[   pytestmarkxfailsysmaxsize
ValueErrorr~   r   r1   r   r   r*   r*   8   sR    #74 [[s{{U*D(  7 47 4D8r   r*   c                       e Zd Zd Zd Zd Zej                  j                  e	j                  dk  ded      d        Zd	 Zy
)TestPrevFastLenc                     t         j                  j                  d       d } |       D ]B  }t        |      }t	        |d       |t        |d      k(  sJ t        |d      }t	        |d       D y )Nr,   c               3   @   K   t        dd      E d {    d y 7 	wr.   r0   r1   r   r   r2   z0TestPrevFastLen.test_prev_fast_len.<locals>.nums   r3   r4   r5   FTr   )r6   r7   r8   r   r'   r9   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             b y )Nr>   Tr   )
r6   r?   r@   rA   rB   rC   rD   r   r   rE   rF   s        r   rJ   z TestPrevFastLen.test_np_integers   s    ((BHHbhh		299IIDUA!!$Ec!f 56!!$/Ec!f4 @A r   c                 f   dddddddddd	d
d
dddd}|j                         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}|j                         D ]  \  }}t        t        |d      |        y ) Nr   r   r   r   r   r   r   r   rL   rM   r/   rO   rP   rQ   TrR   r   r   r5      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_smallz'TestPrevFastLen.testprev_fast_len_small   sF   Q1qQ1$dh
 JJLDAqq$/3 !
q
Q
1

$%q
*+Q
011
67
<=q
BDb



$&
,.
46
<>
HJ3Sdh	
 JJLDAqq%0!4 !r   r\   r]   Tr^   c           
      J   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}|j                         D ]  \  }}t        t        |d2      |        y )3Nrb   rc   ihi  `rd   i=ui=ure   rf   i*2i@2rg   rh   l    l     W: ri   rj   l   >9l    8rk   rl   l   en l        n rm   rn   l   q. l       , ro   rp   l   ! l         rq   l   hRrr   l    @!Rrs   l   2 f;rx   l    art   l         ry   l     +Kru   l    h\arv   l     >9rw   )rz   l   _71Y!rv   r{   l   rw   r}   r|   Tr   rX   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
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 JJLDAqq$/3 !r   c                 L    t        dd      dk(  sJ t        dd      dk(  sJ y )Nr5   Tr   r   rR   Fr   )r   r   s    r   r   z!TestPrevFastLen.test_keyword_args   r   r   N)r   r   r   r   rJ   r   r   r   r   r   r   r   r   r   r1   r   r   r   r      sS    #	B5" [[s{{U*D(  7<47<4|8r   r   )cpu_onlyc                   T    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y)Test_init_nd_shape_and_axesc                 r    |j                  d      }d }d }d}g }t        |||      \  }}||k(  sJ ||k(  sJ y )Nr   r1   asarrayr   	r:   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   sR    JJqM5aE	8N***=(((r   c                 r    |j                  d      }d }d }d}g }t        |||      \  }}||k(  sJ ||k(  sJ y )Ng      @r1   r   r   s	            r   test_xp_0d_defaultsz/Test_init_nd_shape_and_axes.test_xp_0d_defaults  sR    JJrN5aE	8N***=(((r   c                 x    |j                  g d      }d }d }d}dg}t        |||      \  }}||k(  sJ ||k(  sJ y )Nr   r   r   )r   r   r   r   s	            r   test_py_1d_defaultsz/Test_init_nd_shape_and_axes.test_py_1d_defaults  sU    JJy!5aE	8N***=(((r   c                 x    |j                  ddd      }d }d }d}dg}t        |||      \  }}||k(  sJ ||k(  sJ y )Nr   r   皙?)r   )aranger   r   s	            r   test_xp_1d_defaultsz/Test_init_nd_shape_and_axes.test_xp_1d_defaults   sY    IIaB5aE	8N***=(((r   c                     |j                  g dg dg      }d }d }d}ddg}t        |||      \  }}||k(  sJ ||k(  sJ y )N)r   r   r   r   )r   r   rR   r   )r   r   r   r   r   r   s	            r   test_py_2d_defaultsz/Test_init_nd_shape_and_axes.test_py_2d_defaults-  sa    JJ$& 'A5aE	8N***=(((r   c                     |j                  ddd      }|j                  |d      }d }d }d}ddg}t        |||      \  }}||k(  sJ ||k(  sJ y )Nr   r   r   )r   r   )r   reshaper   r   s	            r   test_xp_2d_defaultsz/Test_init_nd_shape_and_axes.test_xp_2d_defaults;  sk    IIaBJJq&!A5aE	8N***=(((r   c                 z    |j                  g d      }d }d }d}g d}t        |||      \  }}||k(  sJ ||k(  sJ y )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  sS    HH_%('5aE	8N***=(((r   c                 ~    |j                  g d      }g d}d }d}g d}t        |||      \  }}||k(  sJ ||k(  sJ y )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    HH_%")'5aE	8N***=(((r   c                 ~    |j                  g d      }d }g d}d}g d}t        |||      \  }}||k(  sJ ||k(  sJ y )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  sS    HH_%"!5aE	8N***=(((r   c                     |j                  g d      }g d}g d}d}g d}t        |||      \  }}||k(  sJ ||k(  sJ y )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  sS    HH_%#!5aE	8N***=(((r   c                 h    |j                  d      }t        |dd       \  }}|dk(  sJ |g dk(  sJ y )N)r   r   r   r   )r   r   r   r   r   r   r   )r:   r   r"   r   r   s        r   test_shape_axes_subsetz2Test_init_nd_shape_and_axes.test_shape_axes_subset}  s>    HH\"-aytLt	!!!y   r   c                    |j                  d      }t        t        d      5  t        |d ddgddgg       d d d        t        t        d      5  t        |d g d       d d d        t        t        d	      5  t        |d dg       d d d        t        t        d	      5  t        |d d
g       d d d        t        t        d      5  t        |d ddg       d d d        t        t        d      5  t        |ddgddggd        d d d        t        t        d      5  t        |g dd        d d d        t        t        d      5  t        |j                  g d      g ddg       d d d        t        t        d      5  t        |dgd        d d d        t        t        d      5  t        |d
d        d d d        y # 1 sw Y   xY w# 1 sw Y   yxY w# 1 sw Y   ]xY w# 1 sw Y   AxY w# 1 sw Y   $xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   xY w# 1 sw Y   y xY w)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_errorsz'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   GG;G&$G3H 7H%H#H&H24H>GG#&G03G= H
HH#&H/2H;>I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                   $    e Zd Zd Zd Zd Zd Zy)TestFFTShiftc                    |j                  g d      }|j                  g d      }t        t        j                  |      |       t        t        j                  |      |       |j                  g d      }|j                  g d      }t        t        j                  |      |       t        t        j                  |      |       y )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"   rZ   s       r   test_definitionzTestFFTShift.test_definition  s    JJ78JJ78Q+a(!,JJ;<JJ;<Q+a(!,r   c                     dD ]c  }|j                  t        j                  j                  |f            }t        t	        j
                  t	        j                  |            |       e y )N)r   r   r   d      )r   r6   r7   r	   r   r   r   )r:   r   r   r"   s       r   test_inversezTestFFTShift.test_inverse  sF    $A

299++QD12ACMM#,,q/:A> %r   c                 D   |j                  g dg dg dg      }|j                  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                  |      |       y )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_keywordz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                    |j                  ddgddgddgg|j                        }|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      |       |j                  ddgddgddgg|j                        }t        t        j                  |d      |       t        t        j
                  |d      |       |j                  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
                  |      |       y)z1 Test 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_dimsz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   N)r   r   r   r   r   r   r   r1   r   r   r   r     s    -?
	7+>r   r   cupyz	jax.numpyz+CuPy has not implemented the `device` paramz*JAX has not implemented the `device` param)reasonsc                       e Zd Zd Zd Zy)TestFFTFreqc                 "   |j                  g d|j                        }|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	       y )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"   x2rZ   s        r   r   zTestFFTFreq.test_definition  s    JJ6bjjJIZZ;2::ZN A"%%1%FIAruu441%0RB''251JR266251r   c                     t        |j                  d            }t        |      }|D ]F  }t        j                  d||      }|j                  d|      }t        |      t        |      k(  rFJ  y Nr   r   )r   r   )r   )r   emptyr
   r   r   r   r:   r   xp_testdevicesr&   rZ   r"   s          r   test_devicezTestFFTFreq.test_device  sb    !"((1+. $AA"Q/Aa*A!9q	))) r   Nr   r   r   r   r	  r1   r   r   r   r         
2$*r   r   c                       e Zd Zd Zd Zy)TestRFFTFreqc                 "   |j                  g d|j                        }|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	       y )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    JJbjjJ9ZZ*"**Z= Q2&&1%FIQ"551%0bR((251Jb"%%B77251r   c                     t        |j                  d            }t        |      }|D ]F  }t        j                  d||      }|j                  d|      }t        |      t        |      k(  rFJ  y r  )r   r  r
   r   r  r   r  s          r   r	  zTestRFFTFreq.test_device4  sb    !"((1+. $AQ2a0Aa*A!9q	))) r   Nr
  r1   r   r   r  r    r  r   r  )#__doc__scipy.fft._helperr   r   r   numpy.testingr   r   r   r   numpyr6   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     sC   T S & *   
 /  "FKK$;$;<N$OP
;;//  *
:, $G8 G8  G8R $p8 p8  p8f 4 y< y< !y<xG> G>T &+HGIJ* *J*: &+HGIJ* *J*r   