o
    `^hN                     @   sN  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d Zdd ZeddG dd dZeddG dd dZeddG dd dZG dd dZ edddedddG dd  d Z!edddedddG d!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                  C   s   t D ]	} tt| |  qd S )N)_5_smooth_numbersr   r   )n r   Y/home/air/shanriGPT/back/venv/lib/python3.10/site-packages/scipy/fft/tests/test_helper.pytest_next_fast_len   s   r   c                 C   s   | }|dk rJ 	 t | d\}}|dkrn|} q	td|d dD ]}	 t | |\}}|dkr/n|} q#q | dksDJ d| d| d	|  d S )
Nr   FTr   r      zx=z is not z-smooth, remainder=)divmodrange)xr   x_origqrdr   r   r   _assert_n_smooth"   s(   
r$   T)np_onlyc                   @   N   e Zd Zdd Zdd Zdd Zejje	j
dk ded	d
dd Zdd ZdS )TestNextFastLenc                 C   \   t jd dd }| D ]}t|}t|d |t|dks!J t|d}t|d qd S )N  c                   s       t ddE d H  dV  d S Nr     iy r   r   r   r   r   nums>      
z0TestNextFastLen.test_next_fast_len.<locals>.nums   FTr   )nprandomseedr   r$   selfr.   r   mr   r   r   r   ;      


z"TestNextFastLen.test_next_fast_lenc                 C   sL   t jt jt jt jt jt jg}|D ]}|d}t|}t|tt	| qd S )N90  )
r1   int16int32int64uint16uint32uint64r   r   intr5   ITYPESitypr   testNr   r   r   test_np_integersJ   s   z TestNextFastLen.test_np_integersc                 C   sJ   ddddddddddd	d
dddd}|  D ]\}}tt|d| qd S )Nr   r   r   r   r   r   r            i       @r   r   r   r   r   r      r      rE   rF        rH   rI   Titemsr   r   r5   hamsr   yr   r   r   testnext_fast_len_smallQ   s   
z'TestNextFastLen.testnext_fast_len_small        $Hamming Numbers too large for 32-bitTreasonr   strictc                 C   s   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!| qGd 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         	 )rk      2 f;rl      rm       `71Y!rn                X ro      !X TrO   rQ   r   r   r   testnext_fast_len_bigY   sd   	
z%TestNextFastLen.testnext_fast_len_bigc                 C   ,   t ddddks
J t ddddksJ d S )Nr0   Treal   rK   Ftargetry   )r   r5   r   r   r   test_keyword_args~      z!TestNextFastLen.test_keyword_argsN)__name__
__module____qualname__r   rD   rT   pytestmarkxfailsysmaxsize
ValueErrorrv   r~   r   r   r   r   r'   8   s    
"r'   c                   @   r&   )TestPrevFastLenc                 C   r(   )Nr)   c                   s   r*   r+   r-   r   r   r   r   r.      r/   z0TestPrevFastLen.test_prev_fast_len.<locals>.numsr0   FTr   )r1   r2   r3   r   r$   r4   r   r   r   test_prev_fast_len   r7   z"TestPrevFastLen.test_prev_fast_lenc                 C   sn   t jt jt jt jt jt jg}|D ]$}|d}t|}t|tt	| t|dd}t|tt	|dd qd S )Nr8   Trx   )
r1   r9   r:   r;   r<   r=   r>   r   r   r?   r@   r   r   r   rD      s   z TestPrevFastLen.test_np_integersc                 C   s   dddddddddd	d
d
dddd}|  D ]\}}tt|d| q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| qjd S ) Nr   r   r   r   r   r   r   rz   rE   rF   r,   rH   rI   rJ   TrK   r   r   r0      rL   rM   rG            x   y   i  )rG      r   r   r   r   r   z   rN   rH   rI   FrP   r   r   rQ   r   r   r   testprev_fast_len_small   s^   
z'TestPrevFastLen.testprev_fast_len_smallrU   rV   TrW   c              
   C   s  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| qyd S )3NrZ   r[   ihi  `r\   i=ui=ur]   r^   i*2i@2r_   r`   l    l     W: ra   rb   l   >9l    8rc   rd   l   en l        n re   rf   l   q. l       , rg   rh   l   ! l         ri   l   hRrj   l    @!Rrk   l   2 f;rp   l    arl   l         rq   l     +Krm   l    h\arn   l     >9ro   )rr   l   _71Y!rn   rs   l   ro   ru   rt   Tr   rQ   r   r   r   testprev_fast_len_big   s   
 "#$&'(*+,./:z%TestPrevFastLen.testprev_fast_len_bigc                 C   rw   )Nr0   Trx   r   rK   Fr{   )r   r}   r   r   r   r~      r   z!TestPrevFastLen.test_keyword_argsN)r   r   r   r   rD   r   r   r   r   r   r   r   r   r~   r   r   r   r   r      s    
>r   )cpu_onlyc                   @   sl   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd ZdS )Test_init_nd_shape_and_axesc           	      C   F   | d}d }d }d}g }t|||\}}||ksJ ||ks!J d S )Nr   r   asarrayr   	r5   xpr   shapeaxesshape_expectedaxes_expected	shape_resaxes_resr   r   r   test_py_0d_defaults      
z/Test_init_nd_shape_and_axes.test_py_0d_defaultsc           	      C   r   )Ng      @r   r   r   r   r   r   test_xp_0d_defaults  r   z/Test_init_nd_shape_and_axes.test_xp_0d_defaultsc           	      C   sL   | g d}d }d }d}dg}t|||\}}||ksJ ||ks$J d S )Nr   r   r   )r   r   r   r   r   r   r   test_py_1d_defaults     z/Test_init_nd_shape_and_axes.test_py_1d_defaultsc           	      C   sL   | ddd}d }d }d}dg}t|||\}}||ksJ ||ks$J d S )Nr   r   皙?)r   )aranger   r   r   r   r   test_xp_1d_defaults   r   z/Test_init_nd_shape_and_axes.test_xp_1d_defaultsc           	      C   sV   | 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   rK   r   )r   r   r   r   r   r   r   r   r   test_py_2d_defaults-  s   
z/Test_init_nd_shape_and_axes.test_py_2d_defaultsc           	      C   sZ   | 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   r   r   r   test_xp_2d_defaults;  s   z/Test_init_nd_shape_and_axes.test_xp_2d_defaultsc           	      C   sN   | 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   r   r   r   test_xp_5d_defaultsI  s   z/Test_init_nd_shape_and_axes.test_xp_5d_defaultsc           	      C   sR   | 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   r   r   r   test_xp_5d_set_shapeV  s   z0Test_init_nd_shape_and_axes.test_xp_5d_set_shapec           	      C   sR   | 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   r   r   r   test_xp_5d_set_axesc  s   z/Test_init_nd_shape_and_axes.test_xp_5d_set_axesc           	      C   sV   | 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   r   r   r   test_xp_5d_set_shape_axesp  s   z5Test_init_nd_shape_and_axes.test_xp_5d_set_shape_axesc                 C   s<   | d}t|d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   )r5   r   r   r   r   r   r   r   test_shape_axes_subset}  s   
z2Test_init_nd_shape_and_axes.test_shape_axes_subsetc                 C   s  | d}ttdd t|d ddgddggd W d    n1 s#w   Y  ttdd t|d g dd W d    n1 sBw   Y  ttd	d t|d dgd W d    n1 s`w   Y  ttd	d t|d d
gd W d    n1 s~w   Y  ttdd t|d ddgd W d    n1 sw   Y  ttdd t|ddgddggd d W d    n1 sw   Y  ttdd t|g dd d W d    n1 sw   Y  ttdd t| g dg ddgd W d    n	1 sw   Y  ttdd t|dgd d W d    n	1 s$w   Y  ttdd t|d
d d W d    d S 1 sCw   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   )r5   r   r   r   r   r   test_errors  sZ   

$z'Test_init_nd_shape_and_axes.test_errorsN)r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s    r   c                   @   sD   e Zd Zdd Zdd Zeddddd	 Zedddd
d ZdS )TestFFTShiftc                 C   s|   | g d}| g d}tt|| tt|| | g d}| g d}tt|| tt|| 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)r5   r   r   rS   r   r   r   test_definition  s   zTestFFTShift.test_definitionc                 C   s8   dD ]}| tj|f}ttt|| qd S )N)r   r   r   d      )r   r1   r2   r   r   r   r   )r5   r   r   r   r   r   r   test_inverse  s   zTestFFTShift.test_inversecupyzcupy/cupy#8393rX   c                 C   s   | g dg dg dg}| g dg dg dg}ttj|dd| ttj|d	dtj|d
d ttj|dd| ttj|d	dtj|d
d tt|| tt|| 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   )r5   r   freqsshiftedr   r   r   test_axes_keyword  s   zTestFFTShift.test_axes_keywordc                 C   s  |j ddgddgddgg|jd}|j ddgddgddgg|jd}ttj|dd| ttj|dd| ttj|d	d| ttj|dgd| |j ddgddgddgg|jd}ttj|dd| ttj|dd| |j ddgddgddgg|jd}ttj|d
d| ttj|d
d| ttj|ddgd| ttj|ddgd| ttj|dd| ttj|dd| tt|| tt|| 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   )r5   r   r   
shift_dim0
shift_dim1shift_dim_bothr   r   r   test_uneven_dims  sT   zTestFFTShift.test_uneven_dimsN)r   r   r   r   r   r   r   r   r   r   r   r   r     s    



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d Zdd ZdS )TestFFTFreqc                 C      |j g d|jd}|j g d|jd}dtjd|d }t||ddd d|j tjd|j|d }t||dd	 d
tjd
|d }t||dd	 d
|j tjd
|j|d }t||d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r5   r   r   x2rS   r   r   r   r        zTestFFTFreq.test_definitionc                 C   V   t |d}t|}|D ]}tjd||d}|jd|d}t|t|ks(J qd S Nr   r   )r   device)r   )r   emptyr	   r   r   r
   r5   r   xp_testdevicesr#   rS   r   r   r   r   test_device     zTestFFTFreq.test_deviceNr   r   r   r   r   r   r   r   r   r         r   c                   @   r   )TestRFFTFreqc                 C   r   )Nr   r   )r   r   r   r   r   r   r   r   FTr   r   r   )r   r   r   rfftfreqr   r   r   r   r   r   r   &  r   zTestRFFTFreq.test_definitionc                 C   r   r   )r   r   r	   r   r   r
   r   r   r   r   r   8  r   zTestRFFTFreq.test_deviceNr   r   r   r   r   r      r   r   )#__doc__scipy.fft._helperr   r   r   numpy.testingr   r   r   r   numpyr1   r   scipy.conftestr   scipy._lib._array_apir   r	   r
   r   scipyr   r   usefixtures
pytestmarkr   r   r   r$   r'   r   r   r   r   r   r   r   r   r   <module>   sJ    Is =L