o
    e                      @   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   LD:\Projects\ConvertPro\env\Lib\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saJ | jd d	 d d
ksnJ |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rangeadd_nodeadd_edgecopymerge_nodesadjr   sortednodeslistedges)r   igcr   r   r   r   test_rag_merge   s*   "r1   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< q0| }| du rEdnd}|jdd| d |j| d d dks\J |j| d d dksiJ |jddt| d |j| d d dksJ |j| d d d	ksJ 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   r0   Z	merged_idr   r   r   test_rag_merge_gh53603   s    r2   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   r4   r   uint8Zdtype   r8   r8   r      r:   r:   r   r   r   r   r   r   r4   r4   r   r   r   r   r   Fr"   )r	   zerosr   rag_mean_colorcut_thresholdr   )imgr   rag
new_labelsr   r   r   test_threshold_cutO   s   rD   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 )Nr3   r5   r6   r7   r   r9   r;   r<   r=   r   r   r   r   
similaritymodeFr"   r	   r>   r   r?   cut_normalizedr   Zrelabel_sequentialr   rA   r   rB   rC   _r   r   r   test_cut_normalizedg   s"   rL   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   r5   r6   )r   r   r   r   r   r   znon existent mode)r	   r>   r   Zraises
ValueErrorr   r?   )rA   r   r   r   r   test_rag_error   s   "rN   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   rQ   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 countrO   )r,   )r   r   r   r   r   r   _pre_merge_mean_color   s
     rR   c              	   C   s   t | ||||ttS )N)r   Zmerge_hierarchicalrR   rQ   )r   rB   threshZrag_copyin_place_merger   r   r   merge_hierarchical_mean_color   s   rU   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)   rV   r   r5   r6   )rV   rV      r   )r   r   r   r   r   r   )r   r   r   r   r   )r   r   )rX   T)rT   )r	   r>   r   r?   r(   rU   allr@   )rA   r   r   g2rS   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sBJ dS )zB Test to catch an error thrown when subgraph has all equal edges. r3   r5   r6   r=   r   Nr   r   rE   rF   Fr"   r   rH   rJ   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 d   n1 sIw   Y  tt|d D ]}t
|| ||d   qVdS )zfensure cut_normalized returns the same output for the same input,
    when specifying random seed
    r   i  r   )ZcompactnessZ
n_segmentsZstart_labelrE   rF   Nr   FgMbP?i  )r#   rS   rngz'`random_state` is a deprecated argument)r#   rS   Zrandom_stater   )r   coffeer   Zslicr   r?   r%   lenrI   r   r   )rA   Zlabels1r   resultsr/   r   r   r   test_reproducibility   s$   


rb   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   r6   Zconnectivity)r	   arrayr5   r   r$   has_edge)r   r   hr   r   r   test_generic_rag_2d   s
   
(,rg   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 )NrV   r6   r;   r   r   r   r   rc      r   )r	   Zaranger5   Zreshaper   r$   re   )r   r   rf   kr   r   r   test_generic_rag_3d   s   
((,rj   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)   rk   r5   r6   g      ?rV   g      ?r   r   r   r   rc   >   r   r   r   r   >   )r   r   )r   r   )r   r   )r   r   r   g      ?g      ?countrk   )	r	   r>   Z
zeros_likefloatr   Zrag_boundarysetr,   r.   )r   Zedge_mapr   r   r   r   test_rag_boundary   s   ro   )TF)ZpytestZnumpy.testingr   numpyr	   Zskimager   r   r   Zskimage._sharedr   Zskimage._shared._warningsr   r   r1   markZparametrizer2   rD   rL   rN   rQ   rR   rU   r\   r]   rb   rg   rj   ro   r   r   r   r   <module>   s6    "



