o
    5BiL<                     @   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   [/var/www/html/Trade-python/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                   @   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s!J 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&   int16int32int64uint16uint32uint64r   r   int)r)   ITYPESitypr   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      r6   r7      i  r9   r:   Titemsr   r   r)   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   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 )"Nihihi i=ui+2i,2i  B3l      l     l   s' l   >9l   >9l         l      fn l     fn l    >Uko l     q. l    q. l   xQ+t0 l      ! l     ! l    dopL? l   hRl   hR   2 f;               `71Y!l    ("               X l         	 )rF   l   2 f;rG   l   rH   l    `71Y!rI   l          l   X rJ   l   !X Tr>   r@   r   r   r   testnext_fast_len_bigW   sd   	
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   r;   F)targetrL   )r   )r)   r   r   r   test_keyword_args|   s   z!TestNextFastLen.test_keyword_argsN)__name__
__module____qualname__r   r5   rC   pytestmarkxfailsysmaxsize
ValueErrorrK   rO   r   r   r   r   r#   6   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   	r)   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   rg   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   rk   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   r;   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   rl   )r   r   )rm   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_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s!J ||ks'J d S )Nrr   )r   rw   r   r   )r   r   r   r   r   rs   rt   r^   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s!J ||ks'J d S )Nrr   )r   r   r   )r   r   r   rt   r^   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s#J ||ks)J d S )Nrr   )r   rw   r   )r   r   r   )r   r   r   rt   r^   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sJ d S )N)r   r   r   r   )r   r   r   r`   ra   ri   rt   )r)   r_   r   r`   ra   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   ri   z1invalid number of data points \(\[0\]\) specifiedz2invalid number of data points \(\[-2\]\) specified)ru   assert_raisesrX   r   )r)   r_   r   r   r   r   test_errors  sZ   

$z'Test_init_nd_shape_and_axes.test_errorsN)rP   rQ   rR   rf   rh   rj   rn   ro   rq   rv   rx   ry   rz   r|   r   r   r   r   r   rZ      s    rZ   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   r~   rw   )	g      r   r~   rw   r   r   r   r   r   )
r   r   r   r   r   r   r   r~   rw   )
g      r   r   r~   rw   r   r   r   r   r   r]   r   r	   fftshift	ifftshift)r)   r_   r   rB   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      )r]   r&   r'   r   r	   r   r   )r)   r_   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)r   r   r   )r   r   r   )r   r~   rw   )g      r   r~   )r   r   r   )r   r   r   r   r   ra   r   r   r   )r)   r_   freqs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)r]   float64r   r	   r   r   )r)   r_   r   
shift_dim0
shift_dim1shift_dim_bothr   r   r   test_uneven_dims\  sT   zTestFFTShift.test_uneven_dimsN)rP   rQ   rR   r   r   r   r   r   r   r   r   r   >  s
    
r   array_api_strictcupyz+fft not yet implemented by array-api-strictz0cupy.fft not yet implemented by array-api-compatc                   @      e Zd Zdd ZdS )TestFFTFreqc                 C   (  t }z|jg d|j|d}|jg d|j|d}W n ty7   |jg d|jd}|jg d|jd}Y nw |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   r   r   r~   rw   r   device)
r   r   r   r   r   r   r   r   r~   rw   r   r   r_   r   )r   r]   r   	TypeErrorr	   fftfreqr   pir)   r_   r   r   x2rB   r   r   r   r     s,   





(

(zTestFFTFreq.test_definitionNrP   rQ   rR   r   r   r   r   r   r         r   c                   @   r   )TestRFFTFreqc                 C   r   )Nrs   r   )r   r   r   r   r   r   r   r   r   r   )r   r]   r   r   r	   rfftfreqr   r   r   r   r   r   r     s    
(

(zTestRFFTFreq.test_definitionNr   r   r   r   r   r     r   r   )__doc__scipy.fft._helperr   r   numpy.testingr   rS   r   r   numpyr&   rV   scipy.conftestr   scipy._lib._array_apir   r   scipyr	   rT   usefixtures
pytestmarkr
   r   r   r!   r#   rZ   r   r   r   r   r   r   r   <module>   sH    J =J