a
    BCCfL<                     @   s,  d Z ddl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 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G dd dZeddddgdG dd  d Zeddddg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_init_nd_shape_and_axes)assert_equal)raisesN)array_api_compatible)xp_assert_closeSCIPY_DEVICE)fftskip_if_array_api)                  	   
      i  i  c                  C   s   t D ]} tt| |  qd S )N)_5_smooth_numbersr   r   )n r   W/var/www/html/django/DPS/env/lib/python3.9/site-packages/scipy/fft/tests/test_helper.pytest_next_fast_len   s    r   c                 C   s   | }|dk rdsJ t | d\}}|dkr,q2|} qtd|d dD ]"}t | |\}}|dkr^qB|} qFqB| dksJ d| d| d|  d S )	Nr   Fr   r      zx=z is not z-smooth, remainder=)divmodrange)xr   Zx_origqrdr   r   r   _assert_n_smooth    s    
r    T)Znp_onlyc                   @   sN   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   s\   t jd dd }| D ]<}t|}t|d |t|dksBJ t|d}t|d qd S )Ni  c                   s   s   t ddE d H  dV  d S )Nr   i  iy )r   r   r   r   r   nums<   s    z0TestNextFastLen.test_next_fast_len.<locals>.nums   FTr   )nprandomseedr   r    )selfr"   r   mr   r   r   r   9   s    


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 )Ni90  )
r$   Zint16Zint32Zint64Zuint16Zuint32Zuint64r   r   int)r'   ZITYPESZitypr   ZtestNr   r   r   test_np_integersH   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      r+   r,      i  r.   r/   Titemsr   r   r'   Zhamsr   yr   r   r   testnext_fast_len_smallO   s
    
z'TestNextFastLen.testnext_fast_len_smalll        z$Hamming Numbers too large for 32-bitT)reasonr   strictc                 C   sd   dddddd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| qFd S )Nhi +2i  B3      l   s'    >9l               fn l    >Uko      q. l   xQ+t0       ! l    dopL?    hR   2 f;               `71Y!l    ("               X l         	 )r:   ihi=ur;   i,2r<   l     r=   l   >9r>   l     fn r?   l    q. r@   l     ! rA   l   hRrB   l   2 f;rC   l   rD   l    `71Y!rE   l          l   X rF   l   !X Tr3   r5   r   r   r   testnext_fast_len_bigW   s6    z%TestNextFastLen.testnext_fast_len_bigc                 C   s,   t ddddksJ t ddddks(J d S )Nr#   T)real   r0   F)targetrH   )r   )r'   r   r   r   test_keyword_args|   s    z!TestNextFastLen.test_keyword_argsN)__name__
__module____qualname__r   r*   r7   pytestmarkZxfailsysmaxsize
ValueErrorrG   rK   r   r   r   r   r!   6   s   
"r!   )Z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   sF   | d}d }d }d}g }t|||\}}||ks6J ||ksBJ d S )Nr   r   asarrayr   	r'   xpr   shapeaxesZshape_expectedZaxes_expectedZ	shape_resZaxes_resr   r   r   test_py_0d_defaults   s    
z/Test_init_nd_shape_and_axes.test_py_0d_defaultsc           	      C   sF   | d}d }d }d}g }t|||\}}||ks6J ||ksBJ d S )Ng      @r   rU   rW   r   r   r   test_xp_0d_defaults   s    
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sHJ d S )Nr   r   r   )r   r   rU   rW   r   r   r   test_py_1d_defaults   s    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sHJ d S )Nr   r   皙?)r   )aranger   rW   r   r   r   test_xp_1d_defaults   s    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sFJ ||ksRJ d S )N)r   r   r   r   )r   r   r0   r   )r   r   r   r   rU   rW   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sJJ ||ksVJ d S )Nr   r   r_   )r   r   )r`   Zreshaper   rW   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sJJ d S )Nr   r   r   r   r   r   r   r   r   r   zerosr   rW   r   r   r   test_xp_5d_defaults   s    z/Test_init_nd_shape_and_axes.test_xp_5d_defaultsc           	      C   sR   | g d}g d}d }d}g d}t|||\}}||ksBJ ||ksNJ d S )Nrd   )r   ri   r   r   )r   r   r   r   r   re   rf   rW   r   r   r   test_xp_5d_set_shape   s    z0Test_init_nd_shape_and_axes.test_xp_5d_set_shapec           	      C   sR   | g d}d }g d}d}g d}t|||\}}||ksBJ ||ksNJ d S )Nrd   )r   r   r   )r   r   r   rf   rW   r   r   r   test_xp_5d_set_axes   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sFJ ||ksRJ d S )Nrd   )r   ri   r   )r   r   r   )r   r   r   rf   rW   r   r   r   test_xp_5d_set_shape_axes   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s8J d S )N)r   r   r   r   )r   r   r   rY   rZ   r]   rf   )r'   rX   r   rY   rZ   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 sF0    Y  ttdd" t|d g dd W d    n1 s0    Y  ttd	d  t|d dgd W d    n1 s0    Y  ttd	d  t|d d
gd W d    n1 s0    Y  ttdd" t|d ddgd W d    n1 s<0    Y  ttdd* t|ddgddggd d W d    n1 s0    Y  ttdd" t|g dd d W d    n1 s0    Y  ttdd. t| g dg ddgd W d    n1 s0    Y  ttdd  t|dgd d W d    n1 sN0    Y  ttdd t|d
d d W d    n1 s0    Y  d S )Nr   z-axes must be a scalar or iterable of integers)matchr   r   r   rm   )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)rg   assert_raisesrS   r   )r'   rX   r   r   r   r   test_errors  sF    
80..2:2
&0z'Test_init_nd_shape_and_axes.test_errorsN)rL   rM   rN   r[   r\   r^   ra   rb   rc   rh   rj   rk   rl   rn   rr   r   r   r   r   rT      s   rT   Ztorchz1torch.fft not yet implemented by array-api-compat)reasonsc                   @   s,   e Zd Zdd Zdd Zdd Z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   rp   ri   )	g      rw   rp   ri   r   r   r   r   r   )
ru   r   r   r   r   rv   rw   rp   ri   )
g      rv   rw   rp   ri   r   r   r   r   r   rV   r   r	   fftshift	ifftshift)r'   rX   r   r6   r   r   r   test_definitionB  s    zTestFFTShift.test_definitionc                 C   s8   dD ].}| tj|f}ttt|| qd S )N)r   r   r   d      )rV   r$   r%   r   r	   r{   rz   )r'   rX   r   r   r   r   r   test_inverseL  s    zTestFFTShift.test_inversec                 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)ru   r   r   )r   r   rv   )rw   rp   ri   )g      rw   rp   )r   r   r   )rv   r   r   r   r   rZ   r   r   ry   )r'   rX   freqsZshiftedr   r   r   test_axes_keywordQ  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)rV   float64r   r	   rz   r{   )r'   rX   r   Z
shift_dim0Z
shift_dim1Zshift_dim_bothr   r   r   test_uneven_dims\  sT    zTestFFTShift.test_uneven_dimsN)rL   rM   rN   r|   r   r   r   r   r   r   r   rt   >  s   
rt   Zarray_api_strictZcupyz+fft not yet implemented by array-api-strictz0cupy.fft not yet implemented by array-api-compatc                   @   s   e Zd Zdd ZdS )TestFFTFreqc                 C   s(  t }z0|jg d|j|d}|jg d|j|d}W n: tyn   |jg d|jd}|jg d|jd}Y n0 |jdtjd|d |jd}t|| |jd|j tjd|j|d |jd}t|| |jdtjd|d |jd}t|| |jd|j tjd|j|d |jd}t|| d S )N)	r   r   r   r   r   rv   rw   rp   ri   r   device)
r   r   r   r   r   rx   rv   rw   rp   ri   r   r   rX   r   )r   rV   r   	TypeErrorr	   Zfftfreqr   pir'   rX   r   r   Zx2r6   r   r   r   r|     s*    




(

(zTestFFTFreq.test_definitionNrL   rM   rN   r|   r   r   r   r   r     s   r   c                   @   s   e Zd Zdd ZdS )TestRFFTFreqc                 C   s(  t }z0|jg d|j|d}|jg d|j|d}W n: tyn   |jg d|jd}|jg d|jd}Y n0 |jdtjd|d |jd}t|| |jd|j tjd|j|d |jd}t|| |jdtjd|d |jd}t|| |jd|j tjd|j|d |jd}t|| d S )Nre   r   )r   r   r   r   r   r   r   r   r   r   )r   rV   r   r   r	   Zrfftfreqr   r   r   r   r   r   r|     s    
(

(zTestRFFTFreq.test_definitionNr   r   r   r   r   r     s   r   )__doc__Zscipy.fft._helperr   r   Znumpy.testingr   rO   r   rq   numpyr$   rQ   Zscipy.conftestr   Zscipy._lib._array_apir   r   Zscipyr	   rP   ZusefixturesZ
pytestmarkr
   r   r   r    r!   rT   rt   r   r   r   r   r   r   <module>   sF   J =J