o
    hnH                     @   s  d dl Zd dlmZ d dlmZ d dlmZmZ d dl	m
Z
 d dlmZ dZd=dd	Zd>d
dZedejejejgdd Zedejejejgdd Zedejejejgdd Zedejejejgdd Zdd Zdd Zdd Zdd Zedejejgdd Zdd  Zed!g d"edejejgd#d$ Zedejejgd%d& Zd'd( Z eed)d*d+d, Z!d-d. Z"d/d0 Z#d1d2 Z$d3d4 Z%d5d6 Z&d7d8 Z'd9d: Z(d;d< Z)dS )?    N)testing)expected_warnings)xfailarch32)random_walker)resizez
pyamg|\A\Zc                 C   sT  |d u r| }t jd t | |fdt j| |  }t| d }d|| d | | d | |d | |d | f< dt jd| d d| d  || d | d | d | d |d | d |d | d f< d|| d | |d |d  |d |d  f< t |}d|| d |d f< d|| d |d  |d |d  f< ||fS 	Ni  皙?         r         )nprandomseedzerosrandnint
zeros_like)lxlydatasmall_lseeds r   h/var/www/html/scripts/venv/lib/python3.10/site-packages/skimage/segmentation/tests/test_random_walker.pymake_2d_syntheticdata   s$      0
$r   c                 C   s  |d u r| }|d u r| }t jd t | ||fdt j| ||  }t| d }d|| d | | d | |d | |d | |d | |d | f< d|| d | d | d | d |d | d |d | d |d | d |d | d f< t d|d g}d|| d | |d | |d | |d | |d | f< t |}d|| d |d |d f< d|| d |d  |d |d  |d |d  f< ||fS r   )r   r   r   r   r   r   maxr   )r   r   lzr   r   	hole_sizer   r   r   r   make_3d_syntheticdata   s>   $ 
r!   dtypec                 C   s>  d}d}| t jkrdnd}t||\}}|j| dd}t|||dd}|dd	d
df dk s3J |j|jks;J t|||ddd}|ddd	d
df |ddd	d
df k s^J |j|jksfJ d|d< t|||ddd}|ddd	d
df |ddd	d
df k sJ t|dksJ |j|jksJ d S )NF   d   Z      Fcopybfbetamode-   (   <   r   Tr+   r,   return_full_probr   r      )7   P   )r   float64r   astyper   allshapelen)r"   r   r   r+   r   labels	labels_bffull_prob_bfr   r   r   
test_2d_bf9   s0    r=   c                 C   s  d}d}t ||\}}|j| dd}tdg t||ddd}W d    n1 s*w   Y  |d	d
ddf dk s?J |j|jksGJ tdg t||dddd}W d    n1 s`w   Y  |dd	d
ddf |dd	d
ddf k sJ |j|jksJ d S )Nr#   r$   Fr'   	"cg" moder%   cgr*   r&   r-   r.   r/   r   Tr0   r   r   )r   r6   r   r   r7   r8   r"   r   r   r   r:   	labels_cg	full_probr   r   r   
test_2d_cgS   s(    
rC   c                 C   s  d}d}t ||\}}|j| dd}dt g}t| t||ddd}W d    n1 s/w   Y  |d	d
ddf dk sDJ |j|jksLJ t| t||dddd}W d    n1 sdw   Y  |dd	d
ddf |dd	d
ddf k sJ |j|jksJ d S )Nr#   r$   Fr'   zscipy.sparse.sparsetools|r%   cg_mgr*   r&   r-   r.   r/   r   Tr0   r   r   )r   r6   PYAMG_MISSING_WARNINGr   r   r7   r8   )r"   r   r   r   r:   anticipated_warningslabels_cg_mgrB   r   r   r   test_2d_cg_mge   s*   
 

rH   c                 C   s   d}d}t ||\}}|j| dd}t||ddd}|dd	d
df dk s*J |j|jks2J t||dddd}|ddd	d
df |ddd	d
df k sUJ |j|jks]J d S )Nr#   r$   Fr'   r%   cg_jr*   r&   r-   r.   r/   r   Tr0   r   r   )r   r6   r   r7   r8   r@   r   r   r   test_2d_cg_jx   s    4rJ   c                  C   s   d} d}t | |\}}d||   | |   }|tj}ttg t||ddd}W d    n1 s9w   Y  |ddd	d
f dk	 sNJ |j
|j
ksVJ d S )Nr#   r$      r%   rD   r*   r&   r-   r.   r/   r   )r   minr   r6   r   uint8r   rE   r   r7   r8   )r   r   r   r:   rG   r   r   r   
test_types   s     rN   c                  C   sf   d} d}t | |\}}d||dk< t||ddd}|dd	d
df dk s)J |j|jks1J d S )Nr#   r$   r   r   r%   r)   r*   r&   r-   r.   r/   )r   r   r7   r8   )r   r   r   r:   r;   r   r   r   test_reorder_labels   s    rO   c                  C   s   d} d}t | |\}}d|ddddf< d|ddd	d
f< t||dd}|| |fddddf dk s;J |j|jksCJ d S )Nr#   r$   
      .   2   !   &   r%   r+   r&   r-   r.   r/   r   )r   r   reshaper7   r8   )r   r   r   r:   r   r   r   test_2d_inactive   s   *rZ   c                  C   st   t g dg dg dg} t g dg dg dg}t g dg dg dg}t| |d	d
}t j|| d S )N)i2  i1  i1  )iS2  iq4  i#/  )i.  i.  i0  )r   rP   r   )r   rP   r   )r   r   rP   )r   rP   r   )r   r   rP   rQ   rX   )r   asarrayr   r   assert_array_equal)r   markersexpected_labelsr:   r   r   r   test_2d_laplacian_size   s   


r_   c                 C   s   d}|||}}}t |||\}}|j| dd}tdg t||dd}W d    n1 s0w   Y  ||jddddddf d	k sLJ |j|jksTJ d S )
N   Fr'   r>   r?   r,         r   )r!   r6   r   r   rY   r8   r7   )r"   nr   r   r   r   r:   r   r   r   test_3d   s   .re   c                  C   s   d} | | | }}}t |||\}}d|ddddddf< tdg t||dd	}W d    n1 s6w   Y  ||jd
dd
dd
df dk sRJ |j|jksZJ d S )Nr`   rP   r
   r&         z"cg" mode|CObject typer?   ra   rb   rc   r   )r!   r   r   rY   r8   r7   )rd   r   r   r   r   r:   r   r   r   test_3d_inactive   s   .rh   channel_axis)r   r   rP   c                 C   s$  d\}}t ||\}}|j| dd}|dtjf jddd}t|d|}tdd	g t||d
|d}W d    n1 s>w   Y  t||d}|d j|jksTJ tdg t|d |d
d W d    n1 smw   Y  |	|jddddf dk
 sJ |d j|jksJ d S )N)r#   r$   Fr'   .r   rP   axisr>    The probability range is outsider?   r,   ri   .r   ra   r&   r-   r.   r/   )r   r6   r   newaxisrepeatmoveaxisr   r   r8   rY   r7   )r"   ri   r   r   r   r:   multi_labelsr   r   r   test_multispectral_2d   s&   (rs   c           	      C   sH  d}|||}}}t |||\}}|j| dd}|dtjf jddd}tdg t||d	dd
}W d    n1 s=w   Y  |d j|jksLJ tdg t|d |d	d}W d    n1 sew   Y  ||jddddddf dk	 sJ ||jddddddf dk	 sJ |d j|jksJ d S )Nr`   Fr'   .r   rP   rj   r>   r?   rm   rn   ra   rb   rc   )
r!   r6   r   ro   rp   r   r   r8   rY   r7   )	r"   rd   r   r   r   r   r:   rr   single_labelsr   r   r   test_multispectral_3d   s   ..ru   c                  C   s:  d} | | | }}}t |||\}}t| | | d f}t|D ]\}}t|| | d fddd||d d d d f< q t|d }	t|}
d|
|d |d |d f< d|
|d |	d  |d |	d  |d |	d	  f< td
g t||
ddd}
W d    n1 sw   Y  |
ddddddf dk	 sJ d S )Nr`   r   constantFr,   anti_aliasingr
   r   r   r   r>   r?   )      ?ry   g      ?r,   spacingrb   rc      	   )
r!   r   r   	enumerater   r   r   r   r   r7   )rd   r   r   r   r   _
data_anisoiyzr   labels_anisor   r   r   test_spacing_0   s.   
*r   zKnown test failure on 32-bit platforms. See links for details: https://github.com/scikit-image/scikit-image/issues/3091 https://github.com/scikit-image/scikit-image/issues/3092)	conditionreasonc                  C   s\  d} | | | }}}t |||\}}t| | d | f}t|D ]\}}t|| d | fddd||d d d d f< q t|d }	t|}
d|
|d |d |d f< d|
|d |	d  ||	d  |d |	d  f< td	g t||
d
dd}
W d    n1 sw   Y  |
ddddddf dk	 sJ t| | d | f}t
|jd D ] }t|d d dd d f | d | fddd||d d d d f< qt|d }	t|}d||d |d |d f< d|||	d  |d |	d  |d |	d  f< td	g t||d
dd}W d    n	1 sw   Y  |ddddddf dk	 s,J d S )Nr`   r   rv   Frw   r
   r   r   r>   r?   )ry          @ry   rz   rb   rc   rf   "   )r   ry   ry   )r!   r   r   r~   r   r   r   r   r   r7   ranger8   )rd   r   r   r   r   r   r   r   r   r   r   labels_aniso2r   r   r   test_spacing_1  sX   

& 
,r   c                  C   s  t d} t d}tdg t| |}W d    n1 sw   Y  t j|| d|d d d df< t j|dkdt jf |dkdt jf fdd}tdg t| |d	d
}W d    n1 scw   Y  t j|| t dd} t 	g d}t 	g d}t 
||fD ]
\}}d	| | |< qt jdt jd}	|D ]
\}}d|	| |< qd|	| dk< tdg t| |	}
W d    n1 sw   Y  t |
|	dk dksJ t |
|	dk dksJ tdg t| |	d	d
}W d    d S 1 sw   Y  d S )NrQ   rQ   zReturning provided labelsr2   r
   r   .r   rj   Tr1   F))   r|   r   r   r|   r|   )r|   r   ))r2   r   )r   r   )r   r   )r2   r   )r   r   )r   r2   r2   r2   r"   rP   r   z!All unlabeled pixels are isolated)r   onesr   r   r   r\   concatenatero   fullarrayvstackr   int8r7   )imgr:   pass_throughexpectedtestobject_Aobject_Bxyr]   output_labelsr   r   r   test_trivial_casesK  sB   

"r   c                  C   sZ   t jd t ddt jjdd  } t jdt jd}d|d< d|d	< t| |d
d d S )N*   r   g?sizer   r   r   r   r   r   )ry   r   r{   )r   r   r   r   normalr   rM   r   r   r:   r   r   r   test_length2_spacingq  s   r   c                  C   s  t d} t d}tt t| | W d    n1 sw   Y  tt t| |dd W d    n1 s;w   Y  t jd t jj	dd} t d
| j}tt t| | W d    n1 skw   Y  tt t| |dd W d    n1 sw   Y  t jj	dd} t d}d	|d
< d|d< tt t| |dd W d    n1 sw   Y  t jj	dd} t d}tt t| |dd W d    d S 1 sw   Y  d S )NrQ   rP   )ri   r   )r2   r2   r2   r2   r2   r      r   r   r   r
   r   )r   r   badra   )r   r   aranger   raises
ValueErrorr   r   r   r   rY   r8   r   r   r   r   r   test_bad_inputs|  s:   



"r   c                  C   s   t jd t jd} t | j }d|d< d|dd dd f< d|d< d|d< td	g t| |}W d    n1 s>w   Y  |d dksKJ td	g t| |d
d}W d    n1 sbw   Y  |d dksoJ |d dkswJ d S )Nr   r   r   r   r   r2   r   r   r   r   r   rl   Tr   r   r   r   r   r   r   r   r   r   r   r8   r   r   amaskresr   r   r   test_isolated_seeds      r   c                  C   s   t jd t jd} t | j }d|d< d|dd dd f< d|d< d|d< td	g t| |}W d    n1 s>w   Y  |d dksKJ td	g t| |d
d}W d    n1 sbw   Y  |d dksoJ |d dkswJ d S )Nr   r   r   r2   r   r   r   r   rl   Tr   r   r   r   r   r   r   r   test_isolated_area  r   r   c                  C   s  t jd t jd} t | j }d|d< d|dd dd f< d|d< d|d< td	g t| |d
d}W d    n1 s@w   Y  t| |d
dd}|d dksUJ |d dks]J t| |d
dd}|d dksmJ |d dksuJ t| |d
dd}|d dksJ |d dksJ d S )Nr   r   r   r   r2   r   r   r   rl   Tr   rQ   )r1   r+   r   r   r	   )r1   prob_tolg&.>)r1   tolr   r   r   r   r   test_prob_tol  s&   r   c                  C   sN   ddl m}  | j}zdd l}|d usJ W d S  ty&   |d u s#J Y d S w )Nr   )random_walker_segmentation)skimage.segmentationr   UmfpackContextscikits.umfpackImportError)r   r   scikitsr   r   r   test_umfpack_import  s   r   c                  C   s   t jd} t jdtd}tjtdd t| | W d    n1 s$w   Y  d|d< tjtdd t| | W d    n1 sDw   Y  d|d< t| | d S )	N)r
   r
   r   zNo seeds provided)matchrP   r   r   r   )r   r   r   r   r   r   r   r   )imager:   r   r   r   test_empty_labels  s   r   )N)NN)*numpyr   skimage._sharedr   skimage._shared._warningsr   skimage._shared.testingr   r   r   r   skimage.transformr   rE   r   r!   parametrizefloat16float32r5   r=   rC   rH   rJ   rN   rO   rZ   r_   re   rh   rs   ru   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sT    









4&!