o
    h!                     @   s
  d dl Zd dlmZ d dlZd dlmZ d dlmZm	Z	m
Z
mZmZ d dlmZ dd Zd*dd	Zd
d Zedddd Zedddd Zdd Zdd dD Zeejdd dkddededd Zdd Zd d! Zd"d# Zd$d% Zd&d' Zd(d) ZdS )+    N)unwrap_phase)testing)assert_array_almost_equal_nulpassert_almost_equalassert_array_equalassert_skipif)expected_warningsc              
   O   sp  dt j t | |   dt j   }tddg( tdt t | ||   tdt t | ||  |   W d   n1 sFw   Y  t j	| rt
t j	| t| j|j t
| j|jk t | }t |}tddg( tdt t |||   tdt t |||  |  W d   n1 sw   Y  t| | |g|R i | dS )	z=An assert_almost_equal insensitive to phase shifts of n*2*pi.   zinvalid value encountered|\A\Zzdivide by zero encountered|\A\Zzassert_phase_allclose, abszassert_phase_allclose, relNz#assert_phase_allclose, no mask, absz#assert_phase_allclose, no mask, rel)nppiroundmeanr	   printmaxabsmaisMaskedArrayr   r   mask
fill_valueasarrayr   )abargskwargsshiftaubu r   `/var/www/html/scripts/venv/lib/python3.10/site-packages/skimage/restoration/tests/test_unwrap.pyassert_phase_almost_equal   s4   *

 r    c                 C   sb   t t d|  }|d ur$td t jj| |dd} t jj||dd}t|dd}t||  d S )N              ?zTesting a masked imageg      ?)r   r   r   rng)r   angleexpr   r   arrayr   r    )imager   image_wrappedimage_unwrappedr   r   r   check_unwrap#   s   r*   c                  C   s   t ddt j d} t|  tt t| d W d    n1 s#w   Y  tt t| ddd W d    d S 1 s@w   Y  d S )Nr   
   d   Tr"   )r   linspacer   r*   r   raises
ValueErrorr   )r'   r   r   r   test_unwrap_1d-   s   "r0   check_with_mask)FTc                 C   sn   d }t jd dd df \}}dt j |d |d   }| r0t j|jtd}d|dd	ddf< t|| d S )
N      r
   皙?皙?dtypeT      r   ogridr   zerosshapeboolr*   )r1   r   xyr'   r   r   r   test_unwrap_2d8   s   rA   c                 C   s   d }t jd dd dd df \}}}dt j |d |d  |d   }| r;t j|jtd}d	|d
dd
dddf< t|| d S )Nr2      r3   r
   r4   r5   g?r6   Tr8   r9         r:   )r1   r   r?   r@   zr'   r   r   r   test_unwrap_3dC   s   ""rF   c           
         sb  dt ddt j }|d |d< |t fddt| D }t t d| }tdg|  }t fddt| D }td	g t	|dd
}W d    n1 sWw   Y  t
d|| ||  tt|| ||  t jk  fddt| D }tdg t	||dd
}	W d    n1 sw   Y  t
d|	| |	|  t|	| |	|  d S )Nr,   r   rB   c                    s   g | ]
}| kr
nd qS rC   r   .0naxiselementsr   r   
<listcomp>S   s    z%check_wrap_around.<locals>.<listcomp>r!   c                    s   g | ]
}| kr
d ndqS )rG   r   r   rI   rM   r   r   rO   X   s    z#Image has a length 1 dimension|\A\Zr"   zendpoints without wrap_around:c                    s   g | ]}| kqS r   r   rI   rP   r   r   rO   d   s    z$Image has a length 1 dimension.|\A\Zzendpoints with wrap_around:)r   r-   r   reshapetupleranger$   r%   r	   r   r   r   r   r   )
ndimrM   rampr'   r(   index_first
index_lastimage_unwrap_no_wrap_aroundwrap_aroundimage_unwrap_wrap_aroundr   rL   r   check_wrap_aroundN   sD   

r[   c                 C   s"   g | ]}t |D ]}||fqqS r   )rS   )rJ   rT   rM   r   r   r   rO   q   s   " rO   )r
   rD   r
   )rD   r8   z-Doesn't work with python 3.4. See issue #3079)reasonz
ndim, axisc                 C   s   t | | d S N)r[   )rT   rM   r   r   r   test_wrap_aroundt   s   r^   c               	   C   s  d} t ddt j | t ddt j | t ddt j | g}t |}t j| ftd}d |d< |d< tt|D ]}t j|j	td}||
d	dO }d||d d f< t jjt t d
| |d}t|}||d 8 }t|d d df ||df  tt j| tdg d|j	 }|
|}	t|	}
|
|
d 8 }
W d    n1 sw   Y  t|
d d d d df ||df  q:d S )Nr,   r   r8   r2   r9   r6   FrG   rC   r!   )r   r   r   zlength 1 dimensionrH   r   r   r   )r   r-   r   vstackonesr>   rS   lenr<   r=   rQ   r   r&   r$   r%   r   r   r   r   r	   )lengthrampsr'   mask_1dir   r(   r)   r=   image_wrapped_3dimage_unwrapped_3dr   r   r   	test_mask{   s6   
 


rj   c                   C   s   t t ttg  W d    n1 sw   Y  t t ttd W d    n1 s3w   Y  t t ttdddg  W d    n1 sSw   Y  t t ttdd W d    d S 1 sqw   Y  d S )N)rC   rC   rC   rC   )rC   rC   rD   FFalse)r   r.   r/   r   r   r<   r   r   r   r   test_invalid_input   s   "rl   c                  C   s6   t jdt jd} t| g dd}tt |dk d S )N)      (   r6   )FTF)rY   r   )r   r<   float32r   r   allr'   unwrapr   r   r   !test_unwrap_3d_middle_wrap_around   s   rt   c                  C   s*   t jd} t| }tt |dk d S )Nr+   r+   r   )r   r   r<   r   r   rq   rr   r   r   r   test_unwrap_2d_compressed_mask   s   rv   c                  C      t jd} t jj| d d < t| }tt j| tt |j t jd} t jj| d d < d| d< t| }tt j| tt 	|jdk t|d dk d S )Nru   r   r_   c   
r   r   r<   maskedr   r   r   rq   r   sumrr   r   r   r   test_unwrap_2d_all_masked   s   r|   c                  C   rw   )N)r+   r+   r+   r   r`   i  ry   rr   r   r   r   test_unwrap_3d_all_masked   s   r}   r]   )numpyr   skimage.restorationr   sysskimage._sharedr   skimage._shared.testingr   r   r   r   r   skimage._shared._warningsr	   r    r*   r0   parametrizerA   rF   r[   dim_axisversion_infor^   rj   rl   rt   rv   r|   r}   r   r   r   r   <module>   s4    







#
 