o
    cicT                  	   @   s  d dl Zd dlZd dlmZ d dlmZ d dlmZm	Z	m
Z
 d dlmZ d dlmZ dBddZdCd	d
Zedejejejgejddd Zejdejdejdedejejejgdd Zejdejdejdedejejejgdd Zedejejejgejddd Zejdejddd Zejddd Zejddd Zejd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	oe
 d,d-d.d/ Z$d0d1 Z%ejdd2d3 Z&d4d5 Z'd6d7 Z(d8d9 Z)ejdd:d; Z*d<d= Z+ejdd>d? Z,ejdd@dA Z-dS )D    N)testing)expected_warnings)xfailarch32is_wasm)random_walker)resizec                 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   w/var/www/addictedbytheproject.nl/epg/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   sB   $	

2r"   dtypezhignore:Changing the sparsity structure of a csr_matrix is expensive:scipy.sparse.SparseEfficiencyWarningc                 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_bf>   s(    
4
4r>   z0ignore:"cg" mode may be slow:UserWarning:skimagezrignore:"cg_mg" not available, it requires pyamg to be installed. The "cg_j" mode will be used instead.:UserWarningc                 C      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&   cgr+   r'   r.   r/   r0   r   Tr1   r   r   r   r7   r   r8   r9   r#   r   r   r   r;   	labels_cg	full_probr   r   r   
test_2d_cg]   s   	 4rE   z-ignore:Implicit conversion of A to CSR::pyamgc                 C   r?   )Nr$   r%   Fr(   r&   cg_mgr+   r'   r.   r/   r0   r   Tr1   r   r   rA   )r#   r   r   r   r;   labels_cg_mgrD   r   r   r   test_2d_cg_mgt   s   	 
4rH   c                 C   r?   )Nr$   r%   Fr(   r&   cg_jr+   r'   r.   r/   r0   r   Tr1   r   r   rA   rB   r   r   r   test_2d_cg_j   s    4rJ   c                  C   s   d} d}t | |\}}d||   | |   }|tj}t||ddd}|ddd	d
f dk s9J |j|jksAJ d S )Nr$   r%      r&   rF   r+   r'   r.   r/   r0   r   )	r   minr   r7   r   uint8r   r8   r9   )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/   r0   )r   r   r8   r9   )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/   r0   r   )r   r   reshaper8   r9   )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(   @Changing the sparsity structure|"cg" mode|scipy.sparse.linalg.cgr@   r-         r   )r"   r7   r   r   rY   r9   r8   )r#   nr   r   r    r   r;   r   r   r   test_3d   s   .rf   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'         zMChanging the sparsity structure|"cg" mode|CObject type|scipy.sparse.linalg.cgr@   rb   rc   rd   r   )r"   r   r   rY   r9   r8   )re   r   r   r    r   r;   r   r   r   test_3d_inactive   s   .ri   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   axisra   z The probability range is outsider@   r-   rj   .r   rb   r'   r.   r/   r0   )r   r7   r   newaxisrepeatmoveaxisr   r   r9   rY   r8   )r#   rj   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   rk   ra   r@   rm   rn   rb   rc   rd   )
r"   r7   r   ro   rp   r   r   r9   rY   r8   )	r#   re   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   ra   r@   )      ?ry   g      ?r-   spacingrc   rd      	   )
r"   r   r   	enumerater   r   r   r   r   r8   )re   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   ra   r@   )ry          @ry   rz   rc   rd   rg   "   )r   ry   ry   )r"   r   r   r~   r   r   r   r   r   r8   ranger9   )re   r   r   r    r   r   r   r   r   r   r   labels_aniso2r   r   r   test_spacing_1G  sJ   

.&"
.,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 labelsr3   r   r   .r   rk   Tr2   F))   r|   r   r   r|   r|   )r|   r   ))r3   r   )r   r   )r   r   )r3   r   )r   r   )r   r3   r3   r3   r#   rP   r   z!All unlabeled pixels are isolated)r   onesr   r   r   r\   concatenatero   fullarrayvstackr   int8r8   )imgr;   pass_throughexpectedtestobject_Aobject_Bxyr]   output_labelsr   r   r   test_trivial_cases  s>   

$"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_spacing  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   )rj   r   )r3   r3   r3   r3   r3   r      r   r   r   r   r   )r   r   badrb   )r   r   aranger   raises
ValueErrorr   r   r   r   rY   r9   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   r3   r   r   r   r   r   WChanging the sparsity structure|The probability range is outside|scipy.sparse.linalg.cgTr   r   r   r   r   r   r   r   r   r   r   r9   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   r3   r   r   r   r   r   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   r3   r   r   r   r   Tr   rQ   )r2   r,   r   r   r
   )r2   prob_tolg&.>)r2   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_labelsJ  s   r   c                  C   sv   t ddd\} }| jtjdd} tjdtjd}t| ||dd	d
}|ddddf dk s1J | j|jks9J d S )Nr$   r%   )r   r   Fr(   r   r   r&   rI   )r{   r,   r-   r'   r.   r/   r0   )r   r7   r   float16r   r   r8   r9   )r   r;   r{   rC   r   r   r   test_float16_upcasting]  s    r   )N)NN).numpyr   pytestskimage._sharedr   skimage._shared._warningsr   skimage._shared.testingr   r   r   r   r   skimage.transformr   r   r"   parametrizer   float32r6   markfilterwarningsr>   rE   rH   rJ   rN   rO   rZ   r_   rf   ri   rs   ru   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   s    









 

	5'
!
#
