U
    ?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   sD  dt j t | |   dt j   }tddgF tdt t | ||   tdt t | ||  |   W 5 Q R X t j	| r*t
t j	| t| j|j t
| j|jk t | }t |}tddgF tdt t |||   tdt t |||  |  W 5 Q R X t| | |f|| 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, relz#assert_phase_allclose, no mask, absz#assert_phase_allclose, no mask, relN)nppiroundZmeanr	   printmaxabsmaisMaskedArrayr   r   mask
fill_valueZasarrayr   )abargskwargsshiftauZbu r   W/var/www/html/venv/lib/python3.8/site-packages/skimage/restoration/tests/test_unwrap.pyassert_phase_almost_equal   s0    *

r   c                 C   sb   t t d|  }|d k	rHt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   sd   t ddt j d} t|  tt t| d W 5 Q R X tt t| ddd W 5 Q R X d S )Nr   
   d   Tr   )r   linspacer   r'   r   raises
ValueErrorr   )r$   r   r   r   test_unwrap_1d-   s    r-   check_with_mask)FTc                 C   sn   d }t jd dd df \}}dt j |d |d   }| r`t j|jtd}d|dd	ddf< t|| d S )
N      r
   皙?皙?ZdtypeT      r   Zogridr   zerosshapeboolr'   )r.   r   xyr$   r   r   r   test_unwrap_2d8   s    r<   c                 C   s   d }t jd dd dd df \}}}dt j |d |d  |d   }| rvt j|jtd}d	|d
dd
dddf< t|| d S )Nr/      r0   r
   r1   r2   g?r3   Tr4   r5         r6   )r.   r   r:   r;   zr$   r   r   r   test_unwrap_3dC   s    ""rA   c           
   	      s:  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 5 Q R X t
d|| ||  tt|| ||  t jk  fddt| D }tdg t	||dd
}	W 5 Q R X t
d|	| |	|  t|	| |	|  d S )Nr)   r   r=   c                    s   g | ]}| krnd qS r>   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 )rB   r   r   rD   rH   r   r   rJ   X   s     z#Image has a length 1 dimension|\A\Zr   zendpoints without wrap_around:c                    s   g | ]}| kqS r   r   rD   rK   r   r   rJ   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   )
ndimrH   Zrampr$   r%   Zindex_firstZ
index_lastZimage_unwrap_no_wrap_aroundwrap_aroundZimage_unwrap_wrap_aroundr   rG   r   check_wrap_aroundN   s@    

rQ   c                 C   s"   g | ]}t |D ]}||fqqS r   )rN   )rE   rO   rH   r   r   r   rJ   q   s     
  rJ   )r
   r?   r
   )r?   r4   z-Doesn't work with python 3.4. See issue #3079)reasonz
ndim, axisc                 C   s   t | | d S )N)rQ   )rO   rH   r   r   r   test_wrap_aroundt   s    rS   c               
   C   sr  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 5 Q R X t|
d d d d df ||df  qtd S )Nr)   r   r4   r/   r5   r3   FrB   r>   r   )r   r   r   zlength 1 dimensionrC   r   r   r   )r   r*   r   ZvstackZonesr9   rN   lenr7   r8   rL   r   r#   r!   r"   r   r   r   r   r	   )lengthZrampsr$   Zmask_1dir   r%   r&   r8   Zimage_wrapped_3dZimage_unwrapped_3dr   r   r   	test_mask{   s2    
 


rY   c                	   C   s   t t ttg  W 5 Q R X t t ttd W 5 Q R X t t ttdddg  W 5 Q R X t t ttdd W 5 Q R X d S )N)r>   r>   r>   r>   )r>   r>   r?   FFalse)r   r+   r,   r   r   r7   r   r   r   r   test_invalid_input   s     r[   c                  C   s8   t jdt jd} t| dddgd}tt |dk d S )N)      (   r3   FT)rP   r   )r   r7   Zfloat32r   r   allr$   unwrapr   r   r   !test_unwrap_3d_middle_wrap_around   s    rb   c                  C   s*   t jd} t| }tt |dk d S )Nr(   r(   r   )r   r   r7   r   r   r_   r`   r   r   r   test_unwrap_2d_compressed_mask   s    rd   c                  C   s   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 )Nrc   r   rT   c   
r   r   r7   Zmaskedr   r   r   r_   r   sumr`   r   r   r   test_unwrap_2d_all_masked   s    rh   c                  C   s   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 )N)r(   r(   r(   r   rU   i  rf   r`   r   r   r   test_unwrap_3d_all_masked   s    ri   )N)numpyr   Zskimage.restorationr   sysZskimage._sharedr   Zskimage._shared.testingr   r   r   r   r   Zskimage._shared._warningsr	   r   r'   r-   Zparametrizer<   rA   rQ   Zdim_axisversion_inforS   rY   r[   rb   rd   rh   ri   r   r   r   r   <module>   s2   







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