
    |h                         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 Zd Ze j                  j                  dd	d
g      d        Zd Zd Zd Zd Zd Z	 ddZd Zd Zd Zd Zd Zd Zy)    N)assert_array_equal)graph)segmentationdata)testingc                     dt         j                   i}| |   j                  ||      d   }| |   j                  ||      d   }dt        ||      iS )Nweight)npinfgetmax)gsrcdstndefaultw1w2s          [/var/www/html/test/engine/venv/lib/python3.12/site-packages/skimage/graph/tests/test_rag.pymax_edger   	   sU    "&&!G	
1#w		)B	
1#w		)Bc"bk""    c                     t        j                         } t        d      D ]  }| j                  |d|gi        | j	                  ddddi       | j	                  ddddi       | j	                  dd	dd
i       | j	                  d	dddi       | j	                  ddddi       | j	                  d	dddi       | j                         }| j                  dd       | j                  d   d   d   dk(  sJ | j                  d   d	   d   d
k(  sJ |j                  ddt               |j                  d   d   d   dk(  sJ |j                  d   d	   d   dk(  sJ | j                  dd       | j                  dd	       | j                  d	dd      }t        | j                  |   d         t        t        d            k(  sJ t        | j                               g k(  sJ y )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   s       r   test_rag_merger5      s   		A1X '	

1x!o&' JJq!h^$JJq!h^$JJq!h^$JJq!h^$JJq!h^$JJq!h^$	
B MM!Q558A;x B&&&558A;x B&&& NN1aXN.66!9Q<!R'''66!9Q<!R'''MM!QMM!Q	aU+A!''!*X&'4a>999	?b   r   r'   TFc                    t        j                         }|j                  ddd       |j                  ddd       |j                  ddd       |j                  ddd	       |j                  ddd
       |j                         D ]  }|g|j                  |   d<    |j	                         }| du rdnd}|j                  dd|        |j                  |   d   d   dk(  sJ |j                  |   d   d   dk(  sJ |j                  ddt        |        |j                  |   d   d   dk(  sJ |j                  |   d   d   d	k(  sJ y )Nr   r   r   )r	   r   r   r#   r    r!   r"   r   Tr   r&   r	   )r%   r'   )r   r(   r+   r0   r,   r-   r.   r   )r'   r   r   r4   	merged_ids        r   test_rag_merge_gh5360r8   2   sW    			AJJq!BJJJq!BJJJq!BJJJq!BJJJq!BJWWY # !s
8#	
B %1IMM!QM*55Ax(B...55Ax(B...NN1aXNA66)Q)R///66)Q)R///r   c                     t        j                  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f<   d|d ddd f<   d|dd d df<   d|dd dd f<   t        j                  | |      }t        j                  ||dd      }|j                         dk(  sJ t        j                  ||d      }|j                         dk(  sJ y )Nd   r;   r   uint8dtype   r@   r@   r"      rB   rB   r   r   r   r   r   r   r;   r;   r   r   r   r   r   Fr&   )r
   zerosr   rag_mean_colorcut_thresholdr   )imgr   rag
new_labelss       r   test_threshold_cutrL   O   s$   
((=
0C!CSbSM!CRSMCSbSMCRSMXXj0FF3B38F3B38F238F238


sF
+C$$VS"uEJ>>q   $$VS"5J>>q   r   c                  T   t        j                  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f<   d|d ddd f<   d|dd d df<   d|dd dd f<   t        j                  | |d      }t        j                  ||d      }t        j                  |      \  }}}|j                         dk(  sJ t        j                  ||      }t        j                  |      \  }}}|j                         dk(  sJ y )Nr:   r<   r=   r?   r"   rA   rC   rD   rE   r   r   r   r   
similaritymodeFr&   r
   rF   r   rG   cut_normalizedr   relabel_sequentialr   rI   r   rJ   rK   _s        r   test_cut_normalizedrV   f   sP   
((=
0C!CSbSM!CRSMCSbSMCRSMXXj0FF3B38F3B38F238F238


sF
>C%%fcEBJ#66zBJ1>>q   %%fc2J#66zBJ1>>q   r   c                     t        j                  dd      } t        j                  dd      }d|d dd d f<   d|dd d d f<   t        j                  t              5  t        j                  | |dd	       d d d        y # 1 sw Y   y xY w)
N)r   r   r   r<   r=   )r   r   r   r   r   r   znon existent mode)r
   rF   r   raises
ValueErrorr   rG   )rI   r   s     r   test_rag_errorrZ      s|    
((;g
.CXXhg.FF2A2q5MF12q5M	
	# BS&!-@AB B Bs   B  B	c                     | j                   |   d   | j                   |   d   z
  }t        j                  j                  |      }d|iS )N
mean colorr	   )r0   r
   linalgnorm)r   r   r   r   diffs        r   _weight_mean_colorr`      sD    ;;sL)EKKN<,HHD99>>$Ddr   c                    | j                   |   dxx   | j                   |   d   z  cc<   | j                   |   dxx   | j                   |   d   z  cc<   | j                   |   d   | j                   |   d   z  | j                   |   d<   y )Nztotal colorzpixel countr\   )r0   )r   r   r   s      r   _pre_merge_mean_colorrb      s    	KK]#u{{3'7'FF#	KK]#u{{3'7'FF#C'%++c*:=*II 
KK\"r   c           	      H    t        j                  | ||||t        t              S )N)r   merge_hierarchicalrb   r`   )r   rJ   threshrag_copyin_place_merges        r   merge_hierarchical_mean_colorrh      s,     ## r   c                     t        j                  dd      } t        j                  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        j                  | |      }|j	                         }d}t        |||      }t        j                  |d d d d	f   |d   k(        sJ t        j                  |d d d	d f   |d   k(        sJ t        |||d      }t        j                  |d d d d	f   |d   k(        sJ t        j                  |d d d	d f   |d   k(        sJ t        j                  |||      }t        j                  ||d   k(        sJ y )N)   rj   r   r<   r=   )rj   rj      r   )r   r   r   r   r#   r   )r   r   r   r   r   )r   r   )rl   T)rg   )r
   rF   r   rG   r,   rh   allrH   )rI   r   r   g2re   results         r   test_rag_hierarchicalrp      s   
((9G
,CXXfG,FC1aLF1a4L!C!QqS!F1Q3!8 CAaC
OF12qs7OS&)A	
BF*61f=F66&BQB-6$</00066&AB-6&>1222*62vdSF66&BQB-6$</00066&AB-6&>1222  F3F66&F4L()))r   c                  H   t        j                  dd      } t        j                  dd      }d|ddddf<   d|ddddf<   t        j                  | |d	
      }t        j                  ||d      }t        j                  |      \  }}}|j                         dk(  sJ y)z@Test to catch an error thrown when subgraph has all equal edges.r:   r<   r=   rE   r   Nr"   r   rN   rO   Fr&   r   rQ   rT   s        r   test_ncut_stable_subgraphrr      s     ((=
0CXXj0FF3B38F3B38


sF
>C%%fcEBJ#66zBJ1>>q   r   c                     t        j                         } t        j                  | ddd      }t	        j
                  | |d      }dgdz  }t        t        |            D ]  }t	        j                  ||d	d
d      ||<   ! t	        j                  ||d	d
d       t        t        |      dz
        D ]  }t        ||   ||dz              y)zfensure cut_normalized returns the same output for the same input,
    when specifying random seed
    r    i  r   )compactness
n_segmentsstart_labelrN   rO   Nr#   FgMbP?i  )r'   re   rngr   )
r   coffeer   slicr   rG   r)   lenrR   r   )rI   labels1r   resultsr3   s        r   test_reproducibilityr}      s     ++-CQRSGS'=AfqjG3w<  
))Qt


 
!eDdK3w<!#$ 771:wq1u~67r   c                     t        j                  ddgddggt         j                        } t        j                  |       }|j                  dd      r$|j                  dd      r|j                  dd      rJ t        j                  | d      }|j                  dd      r$|j                  dd      r|j                  dd      sJ y )Nr   r   r   r#   r=   connectivity)r
   arrayr<   r   r(   has_edge)r   r   hs      r   test_generic_rag_2dr      s    XX1v1v&bhh7F		&A::a

1a 0Aq9III		&q)A::a

1a 0QZZ15EEE5Er   c                  B   t        j                  dt         j                        j                  d      } t	        j
                  |       }|j                  dd      r$|j                  dd      r|j                  dd      rJ t	        j
                  | d      }|j                  dd      r$|j                  dd      r|j                  dd	      rJ t	        j
                  | d      }|j                  dd      r$|j                  dd      r|j                  dd
      sJ y )Nrj   r=   rC   r   r   r   r   r      r   )r
   aranger<   reshaper   r(   r   )r   r   r   ks       r   test_generic_rag_3dr      s    YYq)11)<F		&A::a

1a 0Aq9III		&q)A::a

1a 0Aq9III		&q)A::a

1a 0QZZ15EEE5Er   c                     t        j                  dd      } t        j                  | t              }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      }t        |j                               h dk(  sJ t        |j                               h dk(  sJ |d   d	   d   dk(  sJ |d   d
   d   dk(  sJ |d   d	   d   dk(  sJ y )N)   r   r<   r=   g      ?rj   g      ?r   r   r   r#   r   >   r   r   r   r#   >   r   r   r   r   r   r#   r   r#   r	   g      ?g      ?countr   )	r
   rF   
zeros_likefloatr   rag_boundarysetr0   r2   )r   edge_mapr   s      r   test_rag_boundaryr      s   XXhg.F}}V51HHQTNHQTNF2A2rr6NF2A2qr6NF12rr6NF12qr6N68!<Aqwwy>\)))qwwy>====Q478$$$Q478'''Q477r!!!r   )TF)pytestnumpy.testingr   numpyr
   skimager   r   r   skimage._sharedr   r   r5   markparametrizer8   rL   rV   rZ   r`   rb   rh   rp   rr   r}   r   r   r    r   r   <module>r      s     ,   & ##!D 	5M0	02!.!2B 8=*:! 7$FF"r   