o
    iV                     @   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_backendsTZcupyz	jax.numpy)Z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   nZaxisr         @      @FdecimalZcheck_0d)getattrnpzerosasarrayrfftr   r   fourier_gaussianifftirfftr   sumselfr   r   decxpr   a r3   Z/home/kim/smarthome/.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   r-   realr.   r3   r3   r4   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+   r,   r   r-   r.   r3   r3   r4   test_fourier_uniform_real01:   r6   z.TestNdimageFourier.test_fourier_uniform_real01c                 C   r9   r:   )r%   r&   r'   r(   r   r   r@   r+   r   r-   r<   r.   r3   r3   r4   test_fourier_uniform_complex01K   r>   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+   r,   r   r/   r   r   r0   r1   r   expectedr2   r3   r3   r4   test_fourier_shift_real01\   s   
 
2z,TestNdimageFourier.test_fourier_shift_real01)r7   rC   )r8   rD   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 rE   )r%   r&   rG   rH   r(   r   r   rI   r+   r   r<   imagr'   rJ   r3   r3   r4   test_fourier_shift_complex01k   s   
 
4z/TestNdimageFourier.test_fourier_shift_complex01)r      c                 C   r?   r   )r%   r&   r'   r(   r)   r   r   fourier_ellipsoidr+   r,   r   r-   r.   r3   r3   r4   test_fourier_ellipsoid_real01{   r6   z0TestNdimageFourier.test_fourier_ellipsoid_real01)r7   rO   c                 C   r9   r:   )r%   r&   r'   r(   r   r   rP   r+   r   r-   r<   r.   r3   r3   r4    test_fourier_ellipsoid_complex01   r>   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)rC   r      r   r      )onesr8   pytestZraisesNotImplementedErrorr   rP   )r/   r1   xr3   r3   r4   )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   rO   r   r   r;   r   rF   )zipr7   r8   rU   r   rP   r@   r   )r/   r1   r   type_r0   rX   r2   br3   r3   r4   !test_fourier_ellipsoid_1d_complex   s   z4TestNdimageFourier.test_fourier_ellipsoid_1d_complex))r   )r   r   )r   r   r   )r   r   r7   r8   	test_funcc                 C   sZ   t |r|jdkrt|dkrtd t||}|j||d}||d}t|| d S )NrP   r   z7CuPy's fourier_ellipsoid does not accept size==0 arraysr   rT   )	r   __name__mathprodrV   Zxfailr%   rU   r   )r/   r   r   r^   r1   r2   r\   r3   r3   r4   test_fourier_zero_length_dims   s   


z0TestNdimageFourier.test_fourier_zero_length_dimsN)r_   
__module____qualname__rV   markZparametrizer5   r=   rA   rB   rL   rN   rQ   rR   rY   r]   r   rP   r*   r@   rb   r3   r3   r3   r4   r      sH    	r   )r`   numpyr&   Zscipy._lib._array_apir   r   r   r   rV   Zscipyr   Zscipy.conftestr   re   r   ZusefixturesZ
pytestmarkr   r3   r3   r3   r4   <module>   s    
