o
    :ήc                     @   s   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 Z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 )%    )assert_array_equalN)graph)segmentationdata)testingc                 C   sB   dt j i}| | ||d }| | ||d }dt||iS )Nweight)npinfgetmax)gsrcdstndefaultw1w2 r   J/tmp/pip-target-vg8gfxp4/lib/python/skimage/future/graph/tests/test_rag.pymax_edge   s   r   c                  C   s  t j } 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sbJ | jd d	 d d
ksoJ |jddt	d |jd d d dksJ |jd d	 d dksJ | dd | dd	 | jd	ddd}t
| j| d ttdksJ t|  g ksJ d S )N   labelsr      r   
               (   2      <   )weight_funcFin_place)r   ragRAGrangeadd_nodeadd_edgecopymerge_nodesadjr   sortednodeslistedges)r   igcr   r   r   r   test_rag_merge   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suJ t||d}| dksJ d S )Nd   r5   r   uint8dtype   r:   r:   r      r<   r<   r   r   r   r   r   r   r5   r5   r   r   r   r   r   Fr#   )r   zerosr   rag_mean_colorcut_thresholdr   )imgr   r%   
new_labelsr   r   r   test_threshold_cut1   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s~J t||}t|\}}}| dksJ d S )Nr4   r6   r7   r9   r   r;   r=   r>   r?   r   r   r   r   
similaritymodeFr#   r   r@   r   rA   cut_normalizedr   relabel_sequentialr   rC   r   r%   rD   _r   r   r   test_cut_normalizedI   s"   rN   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t t| |dd	 W d    d S 1 s;w   Y  d S )
N)r   r   r   r6   r7   )r   r   r   r   r   r   znon existent mode)r   r@   r   raises
ValueErrorr   rA   )rC   r   r   r   r   test_rag_errorc   s   "rQ   c                 C   s0   | j | d | j | d  }tj|}d|iS )N
mean colorr   )r.   r   linalgnorm)r   r   r   r   diffr   r   r   _weight_mean_colorm   s   rV   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 countrR   )r.   )r   r   r   r   r   r   _pre_merge_mean_colors   s
     rW   TFc              	   C   s   t | ||||ttS )N)r   merge_hierarchicalrW   rV   )r   r%   threshrag_copyin_place_merger   r   r   merge_hierarchical_mean_colorz   s   r\   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sxJ t |d d d	d f |d ksJ t|||dd}t |d d d d	f |d ksJ t |d d d	d f |d ksJ t|||}t ||d ksJ d S )N)   r]   r   r6   r7   )r]   r]      r   )r   r   r   r   r    r   )r   r   r   r   r   )r   r   )r_   T)r[   )r   r@   r   rA   r*   r\   allrB   )rC   r   r   g2rY   resultr   r   r   test_rag_hierarchical   s*   &&&&rc   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sBJ 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   rL   r   r   r   test_ncut_stable_subgraph   s   rd   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t|d D ]}t	|| ||d   q7dS )zgensure cut_normalized returns the same output for the same input,
    when specifying random_state
    r   i  r   )compactness
n_segmentsstart_labelrF   rG   Nr    FgMbP?i  )r$   rY   random_stater   )
r   coffeer   slicr   rA   r'   lenrJ   r   )rC   labels1r   resultsr1   r   r   r   test_reproducibility   s   

rn   c                  C   s   t jddgddggt jd} t| }|ddr%|ddr%|ddr'J tj| dd}|ddr@|ddr@|ddsBJ d S )Nr   r   r   r    r7   connectivity)r   arrayr6   r   r&   has_edge)r   r   hr   r   r   test_generic_rag_2d   s
   
(,rt   c                  C   s   t jdt jdd} t| }|ddr"|ddr"|ddr$J tj| dd}|ddr=|ddr=|dd	r?J tj| dd}|ddrX|ddrX|dd
sZJ d S )Nr]   r7   r=   r   r   r   r   ro      r   )r   aranger6   reshaper   r&   rr   )r   r   rs   kr   r   r   test_generic_rag_3d   s   
((,ry   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| h dksZJ t| h dksfJ |d d	 d dksrJ |d d
 d dks~J |d d	 d dksJ d S )N)   rz   r6   r7   g      ?r]   g      ?r   r   r   r    ro   >   r   r   r   r    >   r   r   r   r   r   r    r   r    r   g      ?g      ?countrz   )	r   r@   
zeros_likefloatr   rag_boundarysetr.   r0   )r   edge_mapr   r   r   r   test_rag_boundary   s   r   )TF)numpy.testingr   numpyr   skimage.futurer   skimager   r   skimage._sharedr   r   r3   rE   rN   rQ   rV   rW   r\   rc   rd   rn   rt   ry   r   r   r   r   r   <module>   s*    "


