
    _MhN                        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                            d	          gZej        j        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           edd           G d d                                  Z! edd           edd           G d d                                   Z"dS )!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                  T    t           D ]} t          t          |           |             d S )N)_5_smooth_numbersr   r   )ns    [/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/scipy/fft/tests/test_helper.pytest_next_fast_lenr      s6     * *]1%%q))))* *    c                     | }|dk     rJ 	 t          | d          \  }}|dk    rn|} t          d|dz   d          D ] }	 t          | |          \  }}|dk    rn|} !| dk    sJ d| d| d	|              d S )
Nr   FTr   r      zx=z is not z-smooth, remainder=)divmodrange)xr   x_origqrds         r   _assert_n_smoothr'   "   s    F1uua||166	 1ac1  	!Q<<DAqAvvA		  66699999a99 6666r   T)np_onlyc                       e Zd Zd Zd Zd Zej                            e	j
        dk     ded          d             Zd	 Zd
S )TestNextFastLenc                    t           j                            d           d } |            D ]W}t          |          }t	          |d           |t          |d          k    sJ t          |d          }t	          |d           Xd S )N  c               3   >   K   t          dd          E d {V  dV  d S Nr     iy r!    r   r   numsz0TestNextFastLen.test_next_fast_len.<locals>.nums>   8      Q~~%%%%%%%((((((r      FTr   )nprandomseedr   r'   selfr2   r   ms       r   r   z"TestNextFastLen.test_next_fast_len;       
	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 ]F} |d          }t          |          }t          |t          t          |                               Gd S )N90  )
r5   int16int32int64uint16uint32uint64r   r   intr9   ITYPESitypr"   testNs        r   test_np_integersz TestNextFastLen.test_np_integersJ   st    (BHbh	29biP 	7 	7DUA!!$$Ec!ff 5 56666	7 	7r   c                     ddddddddddd	d
dddd}|                                 D ]#\  }}t          t          |d          |           $d S )Nr   r   r   r   r   r   r            i       @r   r   r   r   r   r      r      rK   rL        rN   rO   Titemsr   r   r9   hamsr"   ys       r   testnext_fast_len_smallz'TestNextFastLen.testnext_fast_len_smallQ   sr    Q1qQ1$dh
 
 JJLL 	4 	4DAqq$//3333	4 	4r           $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 }|                                 D ]#\  }}t          t          |d!          |           $d S )"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         	 )rr      2 f;rs      rt       `71Y!ru                X rv      !X TrU   rW   s       r   testnext_fast_len_bigz%TestNextFastLen.testnext_fast_len_bigY   sI   
y
"/
y
 y
 #0
 ,	
 )9,	

 =

 +<]
 _
  
 _
  
 .
 !"2
 0
 "#4
   1#40#40#4 2$6$6 2$69
 
 
< JJLL 	4 	4DAqq$//3333	4 	4r   c                 b    t          dd          dk    sJ t          dd          dk    sJ d S )Nr4   Treal   rQ   Ftargetr   )r   r9   s    r   test_keyword_argsz!TestNextFastLen.test_keyword_args~   D    Rd+++r1111AE222a777777r   N)__name__
__module____qualname__r   rI   rZ   pytestmarkxfailsysmaxsize
ValueErrorr}   r   r1   r   r   r*   r*   8   s        # # #7 7 74 4 4 [s{U*D(  7 7 4  47 7 4D8 8 8 8 8r   r*   c                       e Zd Zd Zd Zd Zej                            e	j
        dk     ded          d             Zd	 Zd
S )TestPrevFastLenc                    t           j                            d           d } |            D ]W}t          |          }t	          |d           |t          |d          k    sJ t          |d          }t	          |d           Xd S )Nr,   c               3   >   K   t          dd          E d {V  dV  d S r.   r0   r1   r   r   r2   z0TestPrevFastLen.test_prev_fast_len.<locals>.nums   r3   r   r4   FTr   )r5   r6   r7   r   r'   r8   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                     d S )Nr=   Tr   )
r5   r>   r?   r@   rA   rB   rC   r   r   rD   rE   s        r   rI   z TestPrevFastLen.test_np_integers   s    (BHbh	29I 	B 	BDUA!!$$Ec!ff 5 5666!!$///Ec!ff4 @ @ @AAAA	B 	Br   c                    dddddddddd	d
d
dddd}|                                 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}|                                 D ]#\  }}t          t          |d          |           $d S ) Nr   r   r   r   r   r   r   r   rK   rL   r/   rN   rO   rP   TrQ   r   r   r4      rR   rS   rM            x   y   i  )rM      r   r   r   r   r   z   rT   rN   rO   FrV   r   r   rW   s       r   testprev_fast_len_smallz'TestPrevFastLen.testprev_fast_len_small   s   Q1qQ1$dh
 
 JJLL 	4 	4DAqq$//3333
q
Q
1

$%q
*+Q
011
67
<=q
BDb



$&
,.
46
<>
HJ3Sdh	
 
 
 JJLL 	5 	5DAqq%00!4444	5 	5r   r[   r\   Tr]   c           
      `   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}|                                 D ]#\  }}t          t          |d2          |           $d S )3Nra   rb   ihi  `rc   i=ui=urd   re   i*2i@2rf   rg   l    l     W: rh   ri   l   >9l    8rj   rk   l   en l        n rl   rm   l   q. l       , rn   ro   l   ! l         rp   l   hRrq   l    @!Rrr   l   2 f;rw   l    ars   l         rx   l     +Krt   l    h\aru   l     >9rv   )ry   l   _71Y!ru   rz   l   rv   r|   r{   Tr   rW   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
 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
 9
^ $5#4 2$6$6 2$6$6q9
 9
 9
t JJLL 	4 	4DAqq$//3333	4 	4r   c                 b    t          dd          dk    sJ t          dd          dk    sJ d S )Nr4   Tr   r   rQ   Fr   )r   r   s    r   r   z!TestPrevFastLen.test_keyword_args   r   r   N)r   r   r   r   rI   r   r   r   r   r   r   r   r   r   r1   r   r   r   r      s        # # #	B 	B 	B5 5 5" [s{U*D(  7 7<4 <47 7<4|8 8 8 8 8r   r   )cpu_onlyc                   V    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dS )Test_init_nd_shape_and_axesc                     |                     d          }d }d }d}g }t          |||          \  }}||k    sJ ||k    sJ d S )Nr   r1   asarrayr   	r9   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   sc    JJqMM5aEE	8N****=((((((r   c                     |                     d          }d }d }d}g }t          |||          \  }}||k    sJ ||k    sJ d S )Ng      @r1   r   r   s	            r   test_xp_0d_defaultsz/Test_init_nd_shape_and_axes.test_xp_0d_defaults  sc    JJrNN5aEE	8N****=((((((r   c                     |                     g d          }d }d }d}dg}t          |||          \  }}||k    sJ ||k    sJ d S )Nr   r   r   )r   r   r   r   s	            r   test_py_1d_defaultsz/Test_init_nd_shape_and_axes.test_py_1d_defaults  sk    JJyyy!!5aEE	8N****=((((((r   c                     |                     ddd          }d }d }d}dg}t          |||          \  }}||k    sJ ||k    sJ d S )Nr   r   皙?)r   )aranger   r   s	            r   test_xp_1d_defaultsz/Test_init_nd_shape_and_axes.test_xp_1d_defaults   sk    IIaB5aEE	8N****=((((((r   c                     |                     g dg dg          }d }d }d}ddg}t          |||          \  }}||k    sJ ||k    sJ d S )N)r   r   r   r   )r   r   rQ   r   )r   r   r   r   r   r   s	            r   test_py_2d_defaultsz/Test_init_nd_shape_and_axes.test_py_2d_defaults-  s}    JJ$& ' 'A5aEE	8N****=((((((r   c                     |                     ddd          }|                    |d          }d }d }d}ddg}t          |||          \  }}||k    sJ ||k    sJ d S )Nr   r   r   )r   r   )r   reshaper   r   s	            r   test_xp_2d_defaultsz/Test_init_nd_shape_and_axes.test_xp_2d_defaults;  s    IIaBJJq&!!A5aEE	8N****=((((((r   c                     |                     g d          }d }d }d}g d}t          |||          \  }}||k    sJ ||k    sJ d S )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  sm    HH___%%('5aEE	8N****=((((((r   c                     |                     g d          }g d}d }d}g d}t          |||          \  }}||k    sJ ||k    sJ d S )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E	8N****=((((((r   c                     |                     g d          }d }g d}d}g d}t          |||          \  }}||k    sJ ||k    sJ d S )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  sq    HH___%%yy"!		5aEE	8N****=((((((r   c                     |                     g d          }g d}g d}d}g d}t          |||          \  }}||k    sJ ||k    sJ d S )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  su    HH___%%yy#!		5aEE	8N****=((((((r   c                 ~    |                     d          }t          |dd           \  }}|dk    sJ |g dk    sJ d S )N)r   r   r   r   )r   r   r   r   r   r   r   )r9   r   r"   r   r   s        r   test_shape_axes_subsetz2Test_init_nd_shape_and_axes.test_shape_axes_subset}  sW    HH\""-aytLLLt	!!!!yyy      r   c                    |                     d          }t          t          d          5  t          |d ddgddgg           d d d            n# 1 swxY w Y   t          t          d          5  t          |d g d           d d d            n# 1 swxY w Y   t          t          d	          5  t          |d dg           d d d            n# 1 swxY w Y   t          t          d	          5  t          |d d
g           d d d            n# 1 swxY w Y   t          t          d          5  t          |d ddg           d d d            n# 1 swxY w Y   t          t          d          5  t          |ddgddggd            d d d            n# 1 swxY w Y   t          t          d          5  t          |g dd            d d d            n# 1 swxY w Y   t          t          d          5  t          |                     g d          g ddg           d d d            n# 1 swxY w Y   t          t          d          5  t          |dgd            d d d            n# 1 swxY w Y   t          t          d          5  t          |d
d            d d d            d S # 1 swxY w Y   d S )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_errorsz'Test_init_nd_shape_and_axes.test_errors  s   HHQKK: .2 3 3 3 	J 	J#AT!Q!Q8HIIII	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J : .2 3 3 3 	J 	J#AT8H8H8HIIII	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J :!GI I I 	= 	=#AT<<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= :!GI I I 	> 	>#AT====	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> 	> :!:< < < 	@ 	@#ATA????	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ 	@ : .2 3 3 3 	J 	J#Aq!fq!f-=DIIII	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J : .2 3 3 3 	J 	J#A-=-=-=DIIII	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J 	J :"<= = = 	? 	? $BHH\\\$:$:*3))1#? ? ? ?	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? 	? :"34 4 4 	= 	= $AaSt<<<<	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	= 	=
 :"45 5 5 	< 	< $ARd;;;;	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	< 	<s   AAA2BBB4CCC5DDD6EEE8FF!$F!>GG#&G# +H77H;>H;I88I<?I<J99J= J=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                   r    e Zd Zd Zd Z edd          d             Z edd          d             ZdS )	TestFFTShiftc                    |                     g d          }|                     g d          }t          t          j        |          |           t          t          j        |          |           |                     g d          }|                     g d          }t          t          j        |          |           t          t          j        |          |           d S )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"   rY   s       r   test_definitionzTestFFTShift.test_definition  s    JJ77788JJ77788Q+++a((!,,,JJ;;;<<JJ;;;<<Q+++a((!,,,,,r   c                     dD ]i}|                     t          j                            |f                    }t          t	          j        t	          j        |                    |           jd S )N)r   r   r   d      )r   r5   r6   r	   r   r   r   )r9   r   r   r"   s       r   test_inversezTestFFTShift.test_inverse  sc    $ 	? 	?A

29++QD1122ACM#,q//::A>>>>	? 	?r   cupyzcupy/cupy#8393r^   c                 v   |                     g dg dg dg          }|                     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        |          |           d S )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_keywordzTestFFTShift.test_axes_keyword  s%   

JJJ


LLLABB**mmmYYY


CDDU888'BBBU333S\%d5S5S5STTTgF;;;UCCCgA666gD999	; 	; 	;U++W555g..66666r   c                     |                     ddgddgddgg|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          |           |                     ddgddgddgg|j                  }t          t          j        |d          |           t          t          j        |d          |           |                     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        |          |           dS )z1 Test 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_dimszTestFFTShift.test_uneven_dims  s    

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

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

 	U333Z@@@jq9995AAA FFF%
 	 $  
 	U888.IIIn6BBBEJJJU!Q888.IIInAq6BBBEJJJ 	U666GGGn4@@@%HHHU++^<<<n55u=====r   N)r   r   r   r   r   r   r   r   r1   r   r   r   r     s        - - -? ? ?
 f%5666	7 	7 76	7 f%5666+> +> 76+> +> +>r   r   r   z+CuPy has not implemented the `device` paramr   z	jax.numpyz*JAX has not implemented the `device` paramc                       e Zd Zd Zd ZdS )TestFFTFreqc                    |                     g d|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	           d S )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"   x2rY   s        r   r   zTestFFTFreq.test_definition  s   JJ666bjJIIZZ;;;2:ZNN A"%%%%1%FFFFIAru44441%0000RB''''251111JR2666625111111r   c                    t          |                    d                    }t          |          }|D ]R}t          j        d||          }|                    d|          }t          |          t          |          k    sJ Sd S Nr   r   )r   device)r  )r   emptyr
   r   r   r   r9   r   xp_testdevicesr&   rY   r"   s          r   test_devicezTestFFTFreq.test_device  s    !"((1++.. $$ 	0 	0AA"Q///Aa**AQ<<9Q<</////	0 	0r   Nr   r   r   r   r	  r1   r   r   r   r     2        2 2 2$0 0 0 0 0r   r   c                       e Zd Zd Zd ZdS )TestRFFTFreqc                    |                     g d|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	           d S )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bjJ99ZZ***"*Z== Q2&&&&1%FFFFIQ"55551%0000bR((((251111Jb"%B777725111111r   c                    t          |                    d                    }t          |          }|D ]R}t          j        d||          }|                    d|          }t          |          t          |          k    sJ Sd S r  )r   r  r
   r   r  r   r  s          r   r	  zTestRFFTFreq.test_device8  s    !"((1++.. $$ 	0 	0AQ2a000Aa**AQ<<9Q<</////	0 	0r   Nr
  r1   r   r   r  r     r  r   r  )#__doc__scipy.fft._helperr   r   r   numpy.testingr   r   r   r   numpyr5   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     sA    T S S S S S S S S S & & & & & & * * * * * *      



 / / / / / /                 "FK$;$;<N$O$OP
;/    * * *
: : :, $G8 G8 G8 G8 G8 G8 G8  G8R $p8 p8 p8 p8 p8 p8 p8  p8f 4   y< y< y< y< y< y< y< ! y<xI> I> I> I> I> I> I> I>X &FH H H+EG G G0 0 0 0 0 0 0G GH H0: &FH H H+EG G G0 0 0 0 0 0 0G GH H0 0 0r   