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 d dl	m
Z
 d dlmZ dd Zd	d
 Ze jdddgdd Z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S ))    N)assert_array_equal)graph)segmentationdata)testing)expected_warningsc                 C   sB   dt j i}| | ||d }| | ||d }dt||iS )Nweight)npinfgetmax)gsrcdstndefaultZw1Zw2 r   N/var/www/html/venv/lib/python3.8/site-packages/skimage/graph/tests/test_rag.pymax_edge
   s    r   c                  C   s  t  } tdD ]}| |d|gi q| ddddi | ddddi | dd	dd
i | d	dddi | ddddi | d	dddi |  }| dd | jd d d dkst| jd d	 d d
kst|jddt	d |jd d d dkst|jd d	 d dks$t| dd | dd	 | jd	ddd}t
| j| d ttdksptt|  g kstd S )N   labelsr      r   
               (   2      <   )weight_funcFin_place)r   RAGrangeadd_nodeadd_edgecopymerge_nodesadjAssertionErrorr   sortednodeslistedges)r   igcr   r   r   r   test_rag_merge   s*    $r2   r#   TFc                 C   s  t  }|jdddd |jdddd |jdddd |jddd	d |jddd
d | D ]}|g|j| d< q`| }| dkrdnd}|jdd| d |j| d d dkst|j| d d dkst|jddt| d |j| d d dkst|j| d d d	kstd S )Nr   r   r   )r   r   r   r   r   r   r   r   Tr   r"   r   )r!   r#   )	r   r$   r'   r-   r(   r)   r*   r+   r   )r#   r   r   r1   Z	merged_idr   r   r   test_rag_merge_gh53603   s     r3   c                  C   s  t jddd} d| d dd df< d| d ddd f< d| dd d df< d| dd dd f< t jd	dd}d
|d dd df< d|d ddd f< d|dd d df< d|dd dd f< t| |}tj||ddd}| dkstt||d}| dks
td S )Nd   r5   r   uint8Zdtype   r9   r9   r      r;   r;   r   r   r   r   r   r   r5   r5   r   r   r   r   r   Fr"   )r	   zerosr   rag_mean_colorcut_thresholdr   r+   )imgr   rag
new_labelsr   r   r   test_threshold_cutO   s    rE   c                  C   s.  t jddd} d| d dd df< d| d ddd f< d| dd d df< d| dd dd f< t jd	dd}d
|d dd df< d|d ddd f< d|dd d df< d|dd dd f< tj| |dd}tj||dd}t|\}}}| dkstt||}t|\}}}| dks*td S )Nr4   r6   r7   r8   r   r:   r<   r=   r>   r   r   r   r   
similaritymodeFr"   	r	   r?   r   r@   cut_normalizedr   Zrelabel_sequentialr   r+   rB   r   rC   rD   _r   r   r   test_cut_normalizedg   s"    rM   c               	   C   sn   t jddd} t jddd}d|d dd d f< d|dd d d f< tt t| |dd	 W 5 Q R X d S )
N)r   r   r   r6   r7   )r   r   r   r   r   r   znon existent mode)r	   r?   r   Zraises
ValueErrorr   r@   )rB   r   r   r   r   test_rag_error   s     rO   c                 C   s0   | j | d | j | d  }tj|}d|iS )N
mean colorr   )r-   r	   ZlinalgZnorm)r   r   r   r   diffr   r   r   _weight_mean_color   s    rR   c                 C   sj   | j | d  | j | d 7  < | j | d  | j | d 7  < | j | d | j | d  | j | d< d S )Nztotal colorzpixel countrP   )r-   )r   r   r   r   r   r   _pre_merge_mean_color   s
      rS   c              	   C   s   t | ||||ttS )N)r   Zmerge_hierarchicalrS   rR   )r   rC   threshZrag_copyin_place_merger   r   r   merge_hierarchical_mean_color   s
     rV   c                  C   s  t jddd} t jddd}d| d d d d d d f< d|d d d d f< d| dd	dd	d d f< d
|dd	dd	f< d| d	d dd	d d f< d|d	d dd	f< t| |}| }d}t|||}t |d d d d	f |d kstt |d d d	d f |d kstt|||dd}t |d d d d	f |d ksPtt |d d d	d f |d ksxtt|||}t ||d kstd S )N)   rW   r   r6   r7   )rW   rW      r   )r   r   r   r   r   r   )r   r   r   r   r   )r   r   )rY   T)rU   )	r	   r?   r   r@   r(   rV   allr+   rA   )rB   r   r   g2rT   resultr   r   r   test_rag_hierarchical   s*    &(((r]   c                  C   s   t jddd} t jddd}d|ddddf< d|ddddf< tj| |d	d
}tj||dd}t|\}}}| dkstdS )zB Test to catch an error thrown when subgraph has all equal edges. r4   r6   r7   r>   r   Nr   r   rF   rG   Fr"   r   rI   rK   r   r   r   test_ncut_stable_subgraph   s    r^   c               	   C   s   t  } tj| dddd}tj| |dd}dgd }tt|D ]}tj||d	d
dd||< q@t	dg tj||d	d
dd W 5 Q R X tt|d D ]}t
|| ||d   qdS )zfensure cut_normalized returns the same output for the same input,
    when specifying random seed
    r   i  r   )ZcompactnessZ
n_segmentsZstart_labelrF   rG   Nr   FgMbP?i  )r#   rT   rngz'`random_state` is a deprecated argument)r#   rT   Zrandom_stater   )r   coffeer   Zslicr   r@   r%   lenrJ   r   r   )rB   Zlabels1r   resultsr0   r   r   r   test_reproducibility   s6       
        rc   c                  C   s   t jddgddggt jd} t| }|ddrJ|ddrJ|ddrNttj| dd}|ddr|ddr|ddstd S )Nr   r   r   r   r7   Zconnectivity)r	   arrayr6   r   r$   has_edger+   )r   r   hr   r   r   test_generic_rag_2d   s
    
(rh   c                  C   s   t jdt jdd} t| }|ddrD|ddrD|ddrHttj| dd}|ddrz|ddrz|dd	r~ttj| dd}|ddr|ddr|dd
std S )NrW   r7   r<   r   r   r   r   rd      r   )r	   Zaranger6   Zreshaper   r$   rf   r+   )r   r   rg   kr   r   r   test_generic_rag_3d   s    
((rk   c                  C   s$  t jddd} t j| td}d|dd d f< d|d d df< d| d dd df< d| d ddd f< d	| dd d df< d
| dd dd f< tj| |dd}t| ddd	d
hkstt|	 ddddhkst|d d	 d dkst|d d
 d dkst|d d	 d dks td S )N)   rl   r6   r7   g      ?rW   g      ?r   r   r   r   rd   )r   r   )r   r   )r   r   )r   r   r   g      ?g      ?countrl   )
r	   r?   Z
zeros_likefloatr   Zrag_boundarysetr-   r+   r/   )r   Zedge_mapr   r   r   r   test_rag_boundary   s    rp   )TF)ZpytestZnumpy.testingr   numpyr	   Zskimager   r   r   Zskimage._sharedr   Zskimage._shared._warningsr   r   r2   markZparametrizer3   rE   rM   rO   rR   rS   rV   r]   r^   rc   rh   rk   rp   r   r   r   r   <module>   s6   " 

  

