
    YhBL                        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mZ ddlmZ ej        j        Zg dZ ed	
          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 G d d          Z 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)xp_assert_close	xp_device)fft)                  	   
      i  i  T)np_onlyc                 T    t           D ]}t          t          |          |            d S )N)_5_smooth_numbersr   r   )xpns     m/var/www/tools.fuzzalab.pt/emblema-extractor/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   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 )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%   selfr   r/   r   ms        r   r   z"TestNextFastLen.test_next_fast_len8       
	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  )
r2   int16int32int64uint16uint32uint64r   r   intr6   r   ITYPESitypr    testNs         r   test_np_integersz TestNextFastLen.test_np_integersG   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      rH   rI        rK   rL   Titemsr   r   r6   r   hamsr    ys        r   testnext_fast_len_smallz'TestNextFastLen.testnext_fast_len_smallN   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         	 )ro      2 f;rp      rq       `71Y!rr                X rs      !X TrR   rT   s        r   testnext_fast_len_bigz%TestNextFastLen.testnext_fast_len_bigV   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 )Nr1   Treal   rN   Ftargetr}   )r   r6   r   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   rF   rW   pytestmarkxfailsysmaxsize
ValueErrorrz   r   r.   r   r   r'   r'   5   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+   r-   r.   r   r   r/   z0TestPrevFastLen.test_prev_fast_len.<locals>.nums   r0   r   r1   FTr   )r2   r3   r4   r   r%   r5   s        r   test_prev_fast_lenz"TestPrevFastLen.test_prev_fast_len   r8   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|   )
r2   r;   r<   r=   r>   r?   r@   r   r   rA   rB   s         r   rF   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~   rH   rI   r,   rK   rL   rM   TrN   r   r   r1      rO   rP   rJ            x   y   i  )rJ      r   r   r   r   r   z   rQ   rK   rL   FrS   r   r   rT   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   rX   rY   TrZ   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 )3Nr^   r_   ihi  `r`   i=ui=ura   rb   i*2i@2rc   rd   l    l     W: re   rf   l   >9l    8rg   rh   l   en l        n ri   rj   l   q. l       , rk   rl   l   ! l         rm   l   hRrn   l    @!Rro   l   2 f;rt   l    arp   l         ru   l     +Krq   l    h\arr   l     >9rs   )rv   l   _71Y!rr   rw   l   rs   ry   rx   Tr   rT   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 )Nr1   Tr|   r   rN   Fr   )r   r   s     r   r   z!TestPrevFastLen.test_keyword_args   r   r   N)r   r   r   r   rF   r   r   r   r   r   r   r   r   r   r.   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   r.   asarrayr   	r6   r   r    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      @r.   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   rN   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_defaults8  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_defaultsF  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_shapeS  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_axes`  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_axesm  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   )r6   r   r    r   r   s        r   test_shape_axes_subsetz2Test_init_nd_shape_and_axes.test_shape_axes_subsetz  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   )r6   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   r.   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)r6   r   r    rV   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   r2   r3   r   r
   r   r   )r6   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   )r6   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   )r6   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   skip_xp_backendsr   r   r.   r   r   r   r     s        - - -? ? ?
 f%5666	7 	7 76	7 f%5666+> +> 76+> +> +>r   r   c                       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r6   r   r    x2rV   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                     |D ]R}t          j        d||          }|                    d|          }t          |          t          |          k    sJ Sd S Nr   )r   devicer   )r   )r
   r   emptyr	   r6   r   devicesr$   rV   r    s         r   test_devicezTestFFTFreq.test_device  sf     	0 	0AA"Q///A1%%AQ<<9Q<</////	0 	0r   Nr   r   r   r   r  r.   r   r   r   r     s2        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                     |D ]R}t          j        d||          }|                    d|          }t          |          t          |          k    sJ Sd S r   )r
   r	  r  r	   r  s         r   r  zTestRFFTFreq.test_device*  sf     	0 	0AQ2a000A1%%AQ<<9Q<</////	0 	0r   Nr  r.   r   r   r  r    s2        2 2 2$0 0 0 0 0r   r  )__doc__scipy.fft._helperr   r   r   numpy.testingr   r   r   r   numpyr2   r   scipy._lib._array_apir   r	   scipyr
   r   r   r   r   r%   r'   r   r   r   r   r  r.   r   r   <module>r     sa    T S S S S S S S S S & & & & & & * * * * * *      



 < < < < < < < <      ;/     $* *  *
: : :, $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0 0 0 0 0 0 0 040 0 0 0 0 0 0 0 0 0r   