o
    :ήcI                     @   sN  d dl mZ d dlZd dlZd dlmZ d dlmZm	Z	m
Z
 d dlmZmZ d dlmZ e dd Zd	d
 Zdd Zdd Zdd Zd@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*d+ Z!d,d- Z"d.d/ Z#d0d1 Z$d2d3 Z%d4d5 Z&d6d7 Z'd8d9 Z(ej)*d:g d;d<d= Z+d>d? Z,dS )A    )productN)assert_equal)datafiltersimg_as_float)test_parallelexpected_warnings)slicc                  C   .  t jd} t d}d|d dd ddf< d|dd d ddf< d|dd dd df< |d| j|jd 7 }d||dk< d||dk < t|ddd	dd
}ttt 	|d t|j|jd d  t|d dd df d t|dd d df d t|d ddd f d t|dd dd f d d S )Nr               
      {Gz?size   F)
n_segmentssigmaenforce_connectivitystart_labelr   
nprandomdefault_rngzerosnormalshaper	   r   lenuniquerndimgseg r(   K/tmp/pip-target-vg8gfxp4/lib/python/skimage/segmentation/tests/test_slic.pytest_color_2d   s"   

r*   c                  C   sH   t d} tdg t| ddd W d    d S 1 sw   Y  d S )Nr   z#`max_iter` is a deprecated argumentr   r   )max_iterr   )r   r   r   r	   r&   r(   r(   r)   test_max_iter_kwarg_deprecation"   s   
"r-   c                  C   sL  t jd} t d}d|d dd dddf< d|d ddd ddf< d|dd d dddf< d|dd dd ddf< |d	| j|jd
 7 }t j|dd|d}t|dddd}tt	t 
|d t|j|jd d  t|d dd df d t|dd d df d t|d ddd f d t|dd dd f d d S )Nr   r   r      r   r   r   r      r/   r   r   outF)r   r   r   r   r   r   r   r   r   r    r!   clipr	   r   r"   r#   r$   r(   r(   r)   test_multichannel_2d(   s   
r5   c               	   C   s$  t jd} t d}d|d dd df< d|dd d df< d|dd dd f< |d| j|jd 7 }d	||d	k< d||dk < t|dd
d	d ddd}ttt 	|d
 t|j|j t|d dd df d t|dd d df d t|d ddd f d	 t|dd dd f d d S )Nr   r   r   Q?r   q=
ףp?      ?F%uk?r   r   r   Fr   r   compactnesschannel_axisconvert2labr   r   r   r   r$   r(   r(   r)   test_gray_2d<   s"   

r?   c                  C   s  t jd} t d}d|d dd df< d|dd d df< d|dd dd f< |d| j|jd 7 }d	||d	k< d||dk < td
g t|ddd	dddd}W d    n1 s[w   Y  tt	t 
|d t|j|j t|d dd df d t|dd d df d t|d ddd f d	 t|dd dd f d tdg t|dd	ddd dddd	}W d    d S 1 sw   Y  d S )Nr   r6   r7   r   r8   r9   r:   r   r   z'`multichannel` is a deprecated argumentr   F)r   r   r<   multichannelr>   r   r   r   z%Providing the `multichannel` argument)r>   r   )r   r   r   r   r    r!   r   r	   r   r"   r#   r$   r(   r(   r)   $test_gray_2d_deprecated_multichannelP   s0   

"rA   皙?c                 C   s(   | j }t| |k}|| |k sJ d S )N)r   r   sum)seg1seg2allowed_mismatch_ratior   ndiffr(   r(   r)   _check_segment_labelsi   s   rH   c            
      C   s   t  d dd df } d| tj }t| }||  }t| }t|}t|}t|}tj	|| tj	|| | }| }	t
||	 | dk sPJ d S )N      g      ?)r   catastyper   uint16r   maxr	   testingassert_array_equalabs)
	img_uint8
img_uint16img_float32img_float32_normrD   rE   seg3seg4n_seg1n_seg4r(   r(   r)   ,test_slic_consistency_across_image_magnitudeo   s   rZ   c            	      C   s
  t jd} t d}g }|jd d D ]}|d }|td |t|d f qtt| }ttddgfd  }t	||D ]\}}|||< q>|d| j
|jd 7 }d||dk< d||dk < t|dd	dd
}ttt |d	 t	|td	D ]\}}t|| | qwd S )Nr   r   r      r   r   r   r   r   r   r   r/   )r   r   r   )r   r   r   r   r!   appendslicelistr   zipr    r	   r   r"   r#   range)	r%   r&   slicesdim_sizemidpointcolorsscr'   r(   r(   r)   test_color_3d   s$   

rh   c            
   	   C   s   t jd} t d}g }|jD ]}|d }|td |t|d f qtt| }t 	ddd}t
||D ]\}}|||< q6|d| j|jd 7 }d||dk< d||dk < t|dd	dd d
dd}ttt |d	 t
|td	D ]\}}	t|| |	 qrd S )Nr   r   r   r\   r   gzo ?g$I$I?MbP?r   r   r/   Fr;   )r   r   r   r   r!   r]   r^   r_   r   aranger`   r    r	   r   r"   r#   ra   )
r%   r&   rb   rc   rd   shadesrf   shr'   rg   r(   r(   r)   test_gray_3d   s(   



rn   c                  C   s   t jd} t g dg dgt}|d| j|jd 7 }t g dg dgt}tdg t	|dg dd dd	}W d    n1 sDw   Y  t
|| d S )
Nr   r   r   r   r   r   r   r   r   r   r   r   r   rB   r   z5Input image is 2D: sigma number of elements must be 2r   )r   2   r   )r   r   r=   r   )r   r   r   arrayfloatr    r!   intr   r	   r   )r%   r&   result_sigma	seg_sigmar(   r(   r)   test_list_sigma   s$   

rw   c               	   C   s   t jd} t g dg dgt}t g dg dgt}t g dg dgt}|d| j|jd	 7 }t|d
dd ddd}t|d
dddgdd dd}t	|| t	|| d S )Nr   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   rB   r   r   r9   )r   r   r=   r<   r     r   )r   r   spacingr<   r=   r   )
r   r   r   rr   rs   rt   r    r!   r	   r   )r%   r&   result_non_spacedresult_spacedseg_non_spaced
seg_spacedr(   r(   r)   test_spacing   s2   




r   c                  C   s\   t g dg dgtd } tt t| dddd W d    d S 1 s'w   Y  d S )Nrx   ry   r   r   Tr   )r=   r>   r   )r   rr   rs   pytestraises
ValueErrorr	   r,   r(   r(   r)   test_invalid_lab_conversion   s   
"r   c               	   C   s   t g dg dg dgt} t| dddddd	}t| dddddd	}t| ddddd
dd}t g dg dg dgt}t g dg dg dgt}t|| t|| t|| d S )Nrp   r   r   r   r   r   r   r   r   r   r   r   r   r   -C6?TFr   )r<   r   r>   r   皙?)r<   r   r>   max_size_factorr   )r   rr   rs   r	   r   )r&   segments_connectedsegments_disconnectedsegments_connected_low_maxresult_connectedresult_disconnectedr(   r(   r)   test_enforce_connectivity   sF   




r   c                  C   r
   )Nr   r   r   r   r   r   r   r   T)r   r   	slic_zeror   r   r   r   r$   r(   r(   r)   test_slic_zero   s   
r   c               	   C   s   t jd} t d}d|d dd df< d|dd d df< d|dd dd f< |d| j|jd 7 }d	||d	k< d||dk < t|dd
d	d ddd}t | t 	|j
ksZJ d S )Nr   r6   r7   r   r8   r9   r:   r   r   rz   Fr;   )r   r   r   r   r    r!   r	   allravelrk   r   r$   r(   r(   r)   test_more_segments_than_pixels  s   

"r   c                  C   s  t jd} t d}d|ddddf< t d}d|d dd ddf< d|dd d ddf< d|dd dd df< |d| j|jd	 7 }t j|dd|d
 t|ddd|d}tt	t 
|d t|j|jd d  t|ddddf d t|ddddf d t|ddddf d t|ddddf d t|d dd d f d t|dd d d f d t|d d d df d t|d d dd f d d S )Nr   r6   r   r   r   r   r   r   r1   r   F)r   r   r   mask   r   r   r3   r%   mskr&   r'   r(   r(   r)   test_color_2d_mask  s,   


r   c                  C   s  t jd} t d}d|ddddf< t d}d|d dd dddf< d|d ddd ddf< d|dd d ddd	f< d|dd dd d	d
f< |d| j|jd 7 }t j|dd|d t|dd|d}tt	t 
|d t|j|jd d  t|ddddf d t|ddddf d t|ddddf d t|ddddf d t|d dd d f d t|dd d d f d t|d d d df d t|d d dd f d d S )Nr   )r   r   r   r   r   r.   r   r   r0   r/   r   r   r1   F)r   r   r   r   r   r   r3   r   r(   r(   r)   test_multichannel_2d_mask8  s.   

r   c               	   C   s  t jd} t d}d|ddddf< t d}d|d dd df< d|dd d df< d	|dd dd f< |d
| j|jd 7 }t j|dd|d t|dddd d|d}tt	t 
|d t|j|j t|ddddf d t|ddddf d t|ddddf d t|ddddf d t|d dd d f d t|dd d d f d t|d d d df d t|d d dd f d d S )Nr   r6   r   r   r   r7   r   r8   r9   r:   r   r1   r   Fr   r   r<   r=   r>   r   r   r   r3   r   r(   r(   r)   test_gray_2d_maskU  s,   


r   c                  C   s   t jd} t d}d|d d ddf< t g dg dgt}|d| j|jd 7 }t g d	g d	gt}t	|d
ddgd |d}t
|| d S )Nr   )r   r0   r   r   ro   rp   rB   r   r   r   r   r   r   r   r   rq   )r   r   r=   r   )r   r   r   r   rr   rs   r    r!   rt   r	   r   )r%   r   r&   ru   rv   r(   r(   r)   test_list_sigma_maskp  s$   


r   c               	   C   s   t jd} t d}d|d d ddf< t g dg dgt}t g dg dgt}t g d	g d
gt}|d| j|jd 7 }t	|ddd d|d}t	|ddddgdd |d}t
|| t
|| d S )Nr   )r   r   r   r   rx   ry   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   )r   r   r   r   r   rB   r   r   r9   )r   r   r=   r<   r   rq   )r   r   r{   r<   r=   r   )r   r   r   r   rr   rs   rt   r    r!   r	   r   )r%   r   r&   r|   r}   r~   r   r(   r(   r)   test_spacing_mask~  s6   





r   c               	   C   s   t d} d| d d ddf< t g dg dg dgt}t|ddd	d
| d}t|ddd
d
| d}t|ddd	d
d| d}t g dg dg dgt}t g dg dg dgt}t|| t|| t|| d S )N)r   r0   r   r   rp   r   r   r   r   TF)r<   r   r>   r   r   )r<   r   r>   r   r   r   )r   r   rr   rs   r	   r   )r   r&   r   r   r   r   r   r(   r(   r)   test_enforce_connectivity_mask  sH   





r   c                  C   s  t jd} t d}d|ddddf< t d}d|d dd ddf< d|dd d ddf< d|dd dd df< |d| j|jd	 7 }t j|dd|d
 t|ddd|d}tt	t 
|d t|j|jd d  t|ddddf d t|ddddf d t|ddddf d t|ddddf d t|d dd d f d t|dd d d f d t|d d d df d t|d d dd f d d S )Nr   r6   r   r   r   r   r   r   r   r1   r   T)r   r   r   r   r   r   r   r3   r   r(   r(   r)   test_slic_zero_mask  s,   


r   c               	   C   s   t jd} t d}d|ddddf< t d}d|d dd df< d|dd d df< d	|dd dd f< |d
| j|jd 7 }t j|dd|d t|dddd d|d}t |ddddf j	d }t 
|ddddf  |kszJ d S )Nr   r6   r   r   r   r7   r   r8   r9   r:   r   r1   rz   Fr   )r   r   r   r   r    r!   r4   r	   rk   r   r   r   )r%   r   r&   r'   expectedr(   r(   r)   #test_more_segments_than_pixels_mask  s   


 *r   c            
      C   s8  t d} d| ddddddf< t jd}t d}g }| jD ]}|d }|td |t|d f q"tt| }ttddgfd  }t	||D ]\}}|||< qL|d|j
|jd	 7 }t j|dd|d
 t|dd| d}	ttt |	d t	|tddD ]\}}t|	| ddddddf | qd S )Nri   r   r   r   r   r[   r   r   r   r1   r/   )r   r   r   	   )r   r   r   r   r!   r]   r^   r_   r   r`   r    r4   r	   r   r"   r#   ra   )
r   r%   r&   rb   rc   rd   re   rf   rg   r'   r(   r(   r)   test_color_3d_mask  s&   



&r   c                  C   s4  t d} d| ddddddf< t jd}t d}g }|jD ]}|d }|td |t|d f q"tt| }t 	ddd}t
||D ]\}}|||< qH|d|j|jd 7 }t j|dd|d	 t|ddd d
| d}	ttt |	d t
|tddD ]\}}
t|	| ddddddf |
 qd S )Nri   r   r   r   r   r/   rj   r   r1   F)r   r   r=   r>   r   r   )r   r   r   r   r!   r]   r^   r_   r   linspacer`   r    r4   r	   r   r"   r#   ra   )r   r%   r&   rb   rc   rd   rl   rf   rm   r'   rg   r(   r(   r)   test_gray_3d_mask  s*   




&r   dtype)float16float32float64uint8rt   c                 C   s$   t jdd| }t|dd d S )N   r   )r   )r   r   randrL   r	   )r   r&   r(   r(   r)   test_dtype_support  s   r   c               	   C   sV   t jd} | ddk}tj|dd}d}t||dddd	d
d}| |ks)J dS )a  Tests the fix for a bug producing a label < start_label (gh-6240).

    For the v0.19.1 release, the `img` and `slic` call as below result in two
    non-contiguous regions with value 0 despite `start_label=1`. We verify that
    the minimum label is now `start_label` as expected.
    r   )r/      r   r   )r   Nr0   r   Tr   )r   r=   r   r<   r   max_num_iter)r   r   r   standard_normalr   gaussianr	   min)rngr&   r   superpr(   r(   r)   test_start_label_fix  s   	r   )rB   )-	itertoolsr   numpyr   r   numpy.testingr   skimager   r   r   skimage._shared.testingr   r   skimage.segmentationr	   r*   r-   r5   r?   rA   rH   rZ   rh   rn   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   markparametrizer   r   r(   r(   r(   r)   <module>   sL    

!"
