U
    ?hJ                     @   st  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dGd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"d.d/ Z#d0d1 Z$d2d3 Z%d4d5 Z&d6d7 Z'ej()d8d9d:d;d<d=gd>d? Z*d@dA Z+dBdC Z,ej()dDej- ej-gdEdF Z.dS )H    )productN)assert_equal)datafiltersimg_as_float)run_in_parallelexpected_warnings)slicc                  C   s.  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rngimgseg r'   V/var/www/html/venv/lib/python3.8/site-packages/skimage/segmentation/tests/test_slic.pytest_color_2d   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    
r1   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_2d6   s&    

  r;   c               	   C   sP   t d} d| d dd df< tjtdd t|  W 5 Q R X t| d d d S )Nr2   r3   r   z&channel_axis=-1 indicates multichannel)matchr9   )r   r   pytestraises
ValueErrorr	   r%   r'   r'   r(    test_gray2d_default_channel_axisJ   s    
 rB   皙?c                 C   s(   | j }t| |k}|| |k s$td S )N)r   r   sumAssertionError)seg1seg2Zallowed_mismatch_ratior   Zndiffr'   r'   r(   _check_segment_labelsT   s    rH   c                  C   s   t  d dd df } d| tj }t| }||  }|d }t| }t|}t|}t|}t|}	tj	|| tj	|| tj	||	 | }
| }t
|
| |
 dk std S )N      i  g      ?)r   catastyper   Zuint16r   maxr	   ZtestingZassert_array_equalabsrE   )Z	img_uint8Z
img_uint16Zimg_float32Zimg_float32_normZimg_float32_offsetrF   rG   Zseg3Zseg4Zseg5Zn_seg1Zn_seg4r'   r'   r(   ,test_slic_consistency_across_image_magnitudeZ   s     rO   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|| | qd 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_3dv   s"    

r]   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 ]\}}|||< ql|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|| |	 qd S )Nr   r   r   rQ   r   gzo ?g$I$I?MbP?r   r   r+   Fr7   )r   r   r   r   r    rR   rS   rT   r   arangerU   r   r	   r   r!   r"   rV   )
r$   r%   rW   rX   rY   shadesr[   shr&   r\   r'   r'   r(   test_gray_3d   s*    



  rc   c               	   C   s   t jd} t ddddddgddddddggt}|d| j|jd 7 }t ddddddgddddddggt}tdg t	|ddddgd dd}W 5 Q R X t
|| d S )	Nr   r   rC   r   z5Input image is 2D: sigma number of elements must be 2r   2   )r   r   r9   r   )r   r   r   arrayfloatr   r    intr   r	   r   )r$   r%   result_sigma	seg_sigmar'   r'   r(   test_list_sigma   s$     rj   c               	   C   s   t jd} t dddddgdddddggt}t dddddgdddddggt}t dddddgdddddg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   rC   r   r   r5   )r   r   r9   r8   r     )r   r   spacingr8   r9   r   )
r   r   r   re   rf   rg   r   r    r	   r   )r$   r%   result_non_spacedresult_spacedseg_non_spaced
seg_spacedr'   r'   r(   test_spacing   s8    
   
rq   c               	   C   sR   t dddddgdddddggtd } tt t| dddd W 5 Q R X d S )Nr   r   r   T)r9   r:   r   )r   re   rf   r>   r?   r@   r	   rA   r'   r'   r(   test_invalid_lab_conversion   s    rr   c               
   C   s  t ddddddgddddddgddddddggt} t| dddddd d}t| dddddd d}t| ddddddd d	}t ddddddgddddddgddddddggt}t ddddddgddddddgddddddggt}t|| t|| t|| d S )
Nr   r   r   -C6?TF)r8   r   r:   r   r9   皙?)r8   r   r:   max_size_factorr   r9   )r   re   rf   r	   r   )r%   segments_connectedsegments_disconnectedsegments_connected_low_maxresult_connectedresult_disconnectedr'   r'   r(   test_enforce_connectivity   sP      

r{   c                  C   s.  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   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std S )Nr   r2   r3   r   r4   r5   r6   r   r   rk   Fr7   )r   r   r   r   r   r    r	   allravelr`   r   rE   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   r2   r   r   r
   r   r   r   r-   r   F)r   r   r   mask   r   r   r/   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   r,   r+   r   r   r-   F)r   r   r   r   r   r   r/   r   r'   r'   r(   test_multichannel_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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   r2   r   r   r   r3   r   r4   r5   r6   r   r-   r   Fr   r   r8   r9   r:   r   r   r   r/   r   r'   r'   r(   test_gray_2d_maskG  s0    


  r   c               	   C   s   t jd} t d}d|d d ddf< t ddddddgddddddggt}|d| j|jd 7 }t ddddddgddddddggt}t	|dddgd |d	}t
|| d S )
Nr   )r   r,   r   r   rC   r   r   rd   )r   r   r9   r   )r   r   r   r   re   rf   r   r    rg   r	   r   )r$   r   r%   rh   ri   r'   r'   r(   test_list_sigma_maskb  s&    
 r   c               	   C   s   t jd} t d}d|d d ddf< t dddddgdddddggt}t dddddgdddddggt}t dddddgdddddg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   r   rC   r   r5   )r   r   r9   r8   r   rd   )r   r   rl   r8   r9   r   )r   r   r   r   re   rf   rg   r   r    r	   r   )r$   r   r%   rm   rn   ro   rp   r'   r'   r(   test_spacing_maskp  s<    

   
r   c               
   C   s&  t d} d| d d ddf< t ddddddgddddddgddddddg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 ddddddgddddddgddddddggt}t ddddddgddddddgddddddggt}t|| t|| t|| d S )N)r   r,   r   r   r   r   rs   TF)r8   r   r:   r   r9   rt   )r8   r   r:   ru   r   r9   )r   r   re   rf   r	   r   )r   r%   rv   rw   rx   ry   rz   r'   r'   r(   test_enforce_connectivity_mask  sT    
     

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   r2   r   r   r   r
   r   r   r   r-   r   T)r   r   r|   r   r   r   r   r/   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std S )Nr   r2   r   r   r   r3   r   r4   r5   r6   r   r-   rk   Fr   )r   r   r   r   r   r    r0   r	   r`   r   r~   r   rE   )r$   r   r%   r&   expectedr'   r'   r(   #test_more_segments_than_pixels_mask  s     


   r   c            
      C   s:  t d} d| ddddddf< t jd}t d}g }| jD ]&}|d }|td |t|d f qDtt| }ttddgfd  }t	||D ]\}}|||< q|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 | qd S )Nr^   r   r   r   r   rP   r   r   r   r-   r+   )r   r   r   	   )r   r   r   r   r    rR   rS   rT   r   rU   r   r0   r	   r   r!   r"   rV   )
r   r$   r%   rW   rX   rY   rZ   r[   r\   r&   r'   r'   r(   test_color_3d_mask  s$    



r   c                  C   s6  t d} d| ddddddf< t jd}t d}g }|jD ]&}|d }|td |t|d f qDtt| }t 	ddd}t
||D ]\}}|||< q|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 |
 qd S )Nr^   r   r   r   r   r+   r_   r   r-   F)r   r   r9   r:   r   r   )r   r   r   r   r    rR   rS   rT   r   ZlinspacerU   r   r0   r	   r   r!   r"   rV   )r   r$   r%   rW   rX   rY   ra   r[   rb   r&   r\   r'   r'   r(   test_gray_3d_mask  s*    




 r   dtypeZfloat16Zfloat32Zfloat64Zuint8rg   c                 C   s&   t jdd| }t|dd d d S )N   r   )r   r9   )r   r   Z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sRt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   Nr,   r   Tr   )r   r9   r   r8   r   Zmax_num_iter)	r   r   r   Zstandard_normalr   Zgaussianr	   minrE   )r$   r%   r   Zsuperpr'   r'   r(   test_start_label_fix  s    	  r   c               	   C   sX   t jdtd} t j| d< tt t| d d W 5 Q R X t |  }t| |d d d S N)r   r   )r   )r   r   r=   )r   r9   )	r   r   rf   NaNr>   r?   r@   r	   isnan)r%   r   r'   r'   r(   'test_raises_ValueError_if_input_has_NaN&  s    
r   infc              	   C   sT   t jdtd}| |d< tt t|d d W 5 Q R X t |}t||d d d S r   )r   r   rf   r>   r?   r@   r	   isfinite)r   r%   r   r'   r'   r(   'test_raises_ValueError_if_input_has_inf0  s    
r   )rC   )/	itertoolsr   numpyr   r>   Znumpy.testingr   Zskimager   r   r   Zskimage._shared.testingr   r   Zskimage.segmentationr	   r)   r1   r;   rB   rH   rO   r]   rc   rj   rq   rr   r{   r}   r   r   r   r   r   r   r   r   r   r   r   markZparametrizer   r   r   r   r   r'   r'   r'   r(   <module>   sP   


$# 

