o
    ?HhV                     @   s   d dl Z d dlZd dlmZmZmZmZ d dlZd dl	m
Z
 d dlmZ ejjZeejdedddgd	gZedd
dG dd dZdS )    N)xp_assert_equalassert_array_almost_equalassert_almost_equalis_cupy)ndimage)array_api_compatibleskip_xp_backendsTcupyz	jax.numpy)cpu_only
exceptionszjax-ml/jax#23827)reasonc                   @   s  e Zd Zejdg dejdddgdd Zejddd	gejdd
dgdd Zejdg dejdddgdd Zejddd	gejdd
dgdd Z	ejddd	gejdddgdd Z
ejddd	gejdddgdd Zejdg dejdddgdd Zejddd	gejdddgdd Zd d! Zd"d# Zejdg d$ejd%g d&ejd'ejejejgd(d) Zd*S )+TestNdimageFouriershape)             )   
   z
dtype, dec)float32   )float64   c                 C   s   t |d}tj||d}d|d< ||}|j||d dd}|j||d dd}t|dd	g|d d}|j||d dd}|j	||d dd}t
t||d|d
d d S Nfftdtype      ?r   r   r   naxisr         @      @Fdecimalcheck_0d)getattrnpzerosasarrayrfftr   r   fourier_gaussianifftirfftr   sumselfr   r   decxpr   a r7   `/home/air/sanwanet/gpt-api/venv/lib/python3.10/site-packages/scipy/ndimage/tests/test_fourier.pytest_fourier_gaussian_real01      


z/TestNdimageFourier.test_fourier_gaussian_real01r   r   )	complex64r   )
complex128r   c                 C      t |d}tj||d}d|d< ||}|j||d dd}|j||d dd}t|dd	gd
d}|j||d dd}|j||d dd}tt	|
||d|dd d S Nr   r   r   r    r   r!   r   r$   r%   Fr&   )r)   r*   r+   r,   r   r   r.   r/   r   r1   realr2   r7   r7   r8   test_fourier_gaussian_complex01)      


z2TestNdimageFourier.test_fourier_gaussian_complex01c                 C      t |d}tj||d}d|d< ||}|j||d dd}|j||d dd}t|dd	g|d d}|j||d dd}|j	||d dd}t
t||d|d
d d S r   )r)   r*   r+   r,   r-   r   r   fourier_uniformr/   r0   r   r1   r2   r7   r7   r8   test_fourier_uniform_real01:   r:   z.TestNdimageFourier.test_fourier_uniform_real01c                 C   r=   r>   )r)   r*   r+   r,   r   r   rD   r/   r   r1   r@   r2   r7   r7   r8   test_fourier_uniform_complex01K   rB   z1TestNdimageFourier.test_fourier_uniform_complex01)r      )r      c                 C   s   t |d}tj|d |d  |d|}||}|j||d dd}|j||d dd}t|ddg|d d}|j	||d dd}|j
||d dd}t|dd dd f |d dd df |d d S Nr   r   r   r   r!   r?   r'   )r)   r*   arangereshaper,   r-   r   r   fourier_shiftr/   r0   r   r3   r   r   r4   r5   r   expectedr6   r7   r7   r8   test_fourier_shift_real01\   s   
 
2z,TestNdimageFourier.test_fourier_shift_real01)r;   rG   )r<   rH   c                 C   s   t |d}tj|d |d  |d|}||}|j||d dd}|j||d dd}t|ddgdd}|j||d dd}|j||d dd}t	|
|dd dd f |d dd df |d t	|||||d d S rI   )r)   r*   rK   rL   r,   r   r   rM   r/   r   r@   imagr+   rN   r7   r7   r8   test_fourier_shift_complex01k   s   
 
4z/TestNdimageFourier.test_fourier_shift_complex01)r      c                 C   rC   r   )r)   r*   r+   r,   r-   r   r   fourier_ellipsoidr/   r0   r   r1   r2   r7   r7   r8   test_fourier_ellipsoid_real01{   r:   z0TestNdimageFourier.test_fourier_ellipsoid_real01)r;   rS   c                 C   r=   r>   )r)   r*   r+   r,   r   r   rT   r/   r   r1   r@   r2   r7   r7   r8    test_fourier_ellipsoid_complex01   rB   z3TestNdimageFourier.test_fourier_ellipsoid_complex01c                 C   sL   |j d|jd}tt t|d W d    d S 1 sw   Y  d S )N)rG   r      r   r      )onesr<   pytestraisesNotImplementedErrorr   rT   )r3   r5   xr7   r7   r8   )test_fourier_ellipsoid_unimplemented_ndim   s   "z<TestNdimageFourier.test_fourier_ellipsoid_unimplemented_ndimc                 C   sj   dD ]0}t |j|jgddgD ]"\}}|j||d}t|ddd}t|ddd}t|||d qqd S )N))r   )r   rS   r   r   r?   r   rJ   )zipr;   r<   rY   r   rT   rD   r   )r3   r5   r   type_r4   r]   r6   br7   r7   r8   !test_fourier_ellipsoid_1d_complex   s   z4TestNdimageFourier.test_fourier_ellipsoid_1d_complex))r   )r   r   )r   r   r   )r   r   r;   r<   	test_funcc                 C   sZ   t |r|jdkrt|dkrtd t||}|j||d}||d}t|| d S )NrT   r   z7CuPy's fourier_ellipsoid does not accept size==0 arraysr   rX   )	r   __name__mathprodrZ   xfailr)   rY   r   )r3   r   r   rc   r5   r6   ra   r7   r7   r8   test_fourier_zero_length_dims   s   


z0TestNdimageFourier.test_fourier_zero_length_dimsN)rd   
__module____qualname__rZ   markparametrizer9   rA   rE   rF   rP   rR   rU   rV   r^   rb   r   rT   r.   rD   rh   r7   r7   r7   r8   r      sH    	r   )re   numpyr*   scipy._lib._array_apir   r   r   r   rZ   scipyr   scipy.conftestr   rk   r   usefixtures
pytestmarkr   r7   r7   r7   r8   <module>   s    
