o
    ciXF                     @   s  d dl Zd dlZd dlZd dlmZmZmZm	Z	m
Z
 d dlmZ d dlmZmZ d dlmZ eg dg dg dgeZejejejejejejejgZd	d
 Zdd Zdd Zej !dee"ejgej !dee"ejgdd Z#dd Z$dd Z%dd Z&dd Z'dd Z(eg dg dg dg d g dg d!g d"g d!geZ)d#d$ Z*d%d& Z+d'd( Z,d)d* Z-d+d, Z.d-d. Z/d/d0 Z0d1d2 Z1d3d4 Z2G d5d6 d6Z3dS )7    N)remove_small_objectsremove_small_holesremove_objects_by_distancelocal_maximalabel)testing)assert_array_equalassert_equal)expected_warningsr   r   r      r   r   r   r   r   r   )r   r   r   r   r   c                  C   s8   t g dg dg dgt} ttdd}t||  d S )N)r   r   r   r   r   r      min_sizenparrayboolr   
test_imager   expectedobserved r   l/var/www/addictedbytheproject.nl/epg/venv/lib/python3.10/site-packages/skimage/morphology/tests/test_misc.pytest_one_connectivity    s   r   c                  C   s:   t g dg dg dgt} ttddd}t||  d S )Nr   r         )r   connectivityr   r   r   r   r   test_two_connectivity&   s   r   c                  C   *   t  } t| d| d}t|| u dd d S )Nr   r   outTz.remove_small_objects in_place argument failed.)r   copyr   r	   imager   r   r   r   test_in_place,   
   
r&   in_dtype	out_dtypec                 C   sv   t j| dd}tjt |d}|tkrdg}ng }t| t|d|d}W d    n1 s.w   Y  ||u s9J d S )NT)r#   dtypezOnly one label was providedr   r!   )r   astyper   
empty_liker   r
   r   )r(   r)   r%   expected_outexp_warnr"   r   r   r   test_out4   s   
r0   c                  C   sf   t jg dg dg dg dgtd} t jg dg dg dg dgtd}t| dd}t|| d S N)r   r   r   r   r   )r   r   r   r   r   )r   r      r2   r2   r*   )r   r   r   r   r   r2   r   )r   r   intr   r   labeled_imager   r   r   r   r   test_labeled_imageF   s   r6   c                  C   sj   t jg dg dg dg dgt jd} t jg dg dg dg dgt jd}t| dd}t|| d S r1   )r   r   uint8r   r   r4   r   r   r   test_uint_imageQ   s   r8   c                  C   sZ   t g dg dg dgt} tdg t| dd W d    d S 1 s&w   Y  d S )Nr   r   use a boolean array?r   r   )r   r   r3   r
   r   )r%   r   r   r   test_single_label_warning^   s   "r:   c                  C   F   t jdd} tt t|  W d    d S 1 sw   Y  d S N   )r   randomrandr   raises	TypeErrorr   
float_testr   r   r   test_float_inputd      
"rD   c                  C   sJ   t jjdddd} tt t|  W d    d S 1 sw   Y  d S )N)r=   r=   size)r   r>   randintr   r@   
ValueErrorr   )negative_intr   r   r   test_negative_inputj   s   
"rM   
r   r   r   r   r   r   r   r   r   r   
r   r   r   r   r   r   r   r   r   r   
r   r   r   r   r   r   r   r   r   r   
r   r   r   r   r   r   r   r   r   r   
r   r   r   r   r   r   r   r   r   r   )
r   r   r   r   r   r   r   r   r   r   c                  C   sV   t g dg dg dg dg dg dg dg dgt} ttdd}t||  d S )NrN   rO   rR   r2   area_thresholdr   r   r   r   test_holes_imager   r   r   r   r   test_one_connectivity_holes   s   
rW   c                  C   sX   t g dg dg dg dg dg dg dg dgt} ttddd}t||  d S )	NrN   rO   rP   rQ   rR   r2   r   )rT   r   rU   r   r   r   r   test_two_connectivity_holes   s   
rX   c                  C   r    )Nr2   rT   r"   Tz,remove_small_holes in_place argument failed.)rV   r#   r   r	   r$   r   r   r   test_in_place_holes   r'   rZ   c                  C   s0   t  } t| }t| d|d}||u sJ d S )Nr2   rY   )rV   r#   r   r-   r   )r%   r.   r"   r   r   r   test_out_remove_small_holes   s   
r[   c                  C   sT   t  } tj| td}tt t| d|d W d    d S 1 s#w   Y  d S )Nr*   r2   rY   )	rV   r#   r   r-   r3   r   r@   rA   r   )r%   r.   r   r   r   test_non_bool_out   s
   "r\   c               
   C   s   t jg dg dg dg dg dg dg dg dgtd} t jg dg dg dg dg dg dg dg dgtd}td	g t| d
d}W d    n1 sTw   Y  t|| d S NrN   rO   rP   rQ   
r   r   r   r   r   r   r   r   r   r   
r   r   r   r   r   r   r   r   r   r   r*   rR   zreturned as a boolean arrayr2   rS   )r   r   r3   r   r
   r   r   labeled_holes_imager   r   r   r   r   test_labeled_image_holes   s8   

rb   c               
   C   s   t jg dg dg dg dg dg dg dg dgt jd} t jg dg dg dg dg dg dg dg dgtd}td	g t| d
d}W d    n1 sUw   Y  t|| d S r]   )r   r   r7   r   r
   r   r   r`   r   r   r   test_uint_image_holes   s8   

rc   c               
   C   s   t jg dg dg dg dg dg dg dg dgtd} tdg t| d	d
 W d    n1 s5w   Y  t| td	d
 d S )NrN   rO   rP   rQ   r^   r_   r*   r9   r2   rS   )r   r   r3   r
   r   r,   r   )ra   r   r   r   test_label_warning_holes   s    
rd   c                  C   r;   r<   )r   r>   r?   r   r@   rA   r   rB   r   r   r   test_float_input_holes  rE   re   c                   @   sp  e Zd Zejdg dejdedd Zejdeejdddgd	d
 Zejdg ddd Z	ejdg dejddde
jgdd Zejdddgejdedd Zdd Zdd Zejdddgdd Zejdd d!gd"d# Zd$d% Zejd&d'gd(d) Zd*d+ Zd,d- Zd.d/ Zejd0d1d2d3ddggdgd4d5 Zd6S )7Test_remove_near_objectsmin_distance)g @r=   g=
ףp>@1   r+   c                 C   s   t t|}tj|d d |d}d|d|d| d| d g< tjj||d\}}| }d||< t||}|j	|j	ks?J t
|| d S )Nr2   r   r*   r   r   )output)r3   r   floorzerosspndimager   r#   r   r+   r   )selfrg   r+   dlabels_desiredresultr   r   r   test_min_distance_1d  s   
z-Test_remove_near_objects.test_min_distance_1dorderCFc              
   C   s   t jg dg dg dg dg dg dg dg dg||d	}t d
}t jg dg dg dg dg dg dg dg dg|d}t|d|d}|jd sRJ t|| d S )N)   r   r   r   r   r   r   r   r   	   ry   )rx   rx   rx   r   r   r   r   r   r   ry   ry   )r   r   r   r   r   r   r   r   ry   r   r   )r   r   r   r   r   r   r   r   r   r   r   )r   r   r2   r   r   r   r=   r   r   r   r   )r   r   r   r   r   r=   r   r   r   r   r   )r   r   r   r   r   r=   r   r   r   r   r   )r   r   r   r   r   r   r   r   r   r   r   )r+   ru   
   )r   r   r   r   r   r   r   r   r   r   r   r*   r2   priorityC_CONTIGUOUS)r   r   aranger   flagsr   )rn   r+   ru   r   r|   rr   rs   r   r   r   test_handcrafted_2d#  s:   


z,Test_remove_near_objects.test_handcrafted_2dndim)r   r   r2      r=   c                 C   s`   d| }t j|t jd}d|d< tj|\}}| }d|dd df< t|d}t|| d S )N)r=   r*   r   ).r   .r   )	r   onesr7   rl   rm   r   r#   r   r   )rn   r   shapearp   rq   rr   rs   r   r   r   test_large_objects_ndF  s   
z.Test_remove_near_objects.test_large_objects_nddistance)r=   2   d   p_normr   r   c           
      C   s   t jd}|jdd}t|}t|}t|||d}tjt j	t 
|t jd }|j|||d}	|	 dks<J |j||d |d}	|	 dksNJ d S )	Ni3$f)  r   rH   r   r*   )max_distancepr   r   )r   r>   default_rngr   r   r   rl   spatialcKDTreer   nonzerofloat64	transposesparse_distance_matrixcount_nonzero)
rn   r   r   rngr%   maximaobjectsspaced_objectskdtree	distancesr   r   r   test_randomR  s    
z$Test_remove_near_objects.test_randomvaluer   c                 C   s0   t jd|d}|| t|d}t|| d S )N)rz   rz   r*   r2   )r   emptyfillr   r   )rn   r   r+   rp   rs   r   r   r   test_constantl  s   

z&Test_remove_near_objects.test_constantc                 C   s&   t jdtd}t|d}t|| d S )N)r2   r2   r   r*   r2   )r   r   r3   r   r	   )rn   rp   rs   r   r   r   
test_emptyu  s   
z#Test_remove_near_objects.test_emptyc                 C   s   t g d}t|d}t g d}t|| t g d}t|d|d}t g d}t|| t g d}t|d|d}t g d}t|| d S )N)r   r   r   r   r2   )r   r   r   r   )r   r   r   r   r   r{   )r   r   r   r   )r   r   r   r   rG   )r   r   r   r   )rn   rp   rs   rr   r|   r   r   r   test_priorityz  s   


z&Test_remove_near_objects.test_priorityc                 C   s   t jg dg dg|d}t jg dg dg|d}|j|d}t|d t|| t|d|d |j| d s;J t|| d S )Nr   r   r   )ru   )r   r   r   r   )r"   _CONTIGUOUS)r   r   r#   r   r   r   )rn   ru   labels_originalrr   rp   r   r   r   r0     s   

z!Test_remove_near_objects.test_outigc                 C   sL   t g d}tjtdd t|| W d    d S 1 sw   Y  d S )Nr   zmust be >= 0match)r   r   pytestr@   rK   r   )rn   rg   rp   r   r   r   test_negative_min_distance  s   "z3Test_remove_near_objects.test_negative_min_distancec                 C   s   t ddgddgg}t ddgddgg}t|d}t|| t|t d}t|| t|ddd}t|| t|ddd}t|| t|dt jd}t|| t|dt jd}t|| d S )	Nr   r   r   gffffff?gffffff?)rg   r   r   g?)r   r   r   r   sqrtinf)rn   rp   removedrs   r   r   r   test_p_norm  s$   





z$Test_remove_near_objects.test_p_normr   r   c                 C   s*  t tg ddtdd t tg ddtdd d}tjt|d t tg ddtdd W d    n1 sAw   Y  tjt|d t tg ddtdd W d    n1 sgw   Y  tjt|d t tg ddtdd W d    d S 1 sw   Y  d S )	N)r   r   r   r2   r   r{   r   z=shape of `priority` must be \(np\.amax\(label_image\) \+ 1,\)r   )r   r   r   )r   r   r   r   r   r@   rK   )rn   r   	error_msgr   r   r   test_priority_shape  s      "z,Test_remove_near_objects.test_priority_shapec                 C   sj   t g dg dg dg dg}tjtdd t|dt dd	 W d    d S 1 s.w   Y  d S )
N)r   r   rG   r   r   r   )r   r   r2   r   r   r   r   r   r   r   r   r   r2   r2   r2   r2   r2   r2   z.*object with negative IDr   r   r   r{   )r   r   r   r@   rK   r   r   )rn   rp   r   r   r   test_negative_label_ids  s   "z0Test_remove_near_objects.test_negative_label_idsc                 C   sf   t g dg dg dg dg}t g dg dg dg dg}t|dt dd}t|| d S )Nr   r   )r   r   r   r   r   r   r   r   r{   )r   r   r   r~   r   )rn   rp   rr   rs   r   r   r   test_objects_with_inside  s    z1Test_remove_near_objects.test_objects_with_insidec                 C   s   t jg dg dg dg dgtd}t|ddd}t jg dg dg dg dgtd}t j|| t|dd	d}t jg d
g dg dg dgtd}t j|| d S )Nr   r   r   r   r   r   r   r   r2   r   r   r   r*   r2   )r   r2   spacingr   )r   gUUUUUU?)r   r   r   r   )r   r   r   r   )r   r   r3   r   r   r   )rn   rp   rs   r   r   r   r   test_spacing  s   z%Test_remove_near_objects.test_spacingr   )rG   rG   r   )r   r   r   c                 C   sl   t jg dg dg dg dgtd}d}tjt|d t|d|d W d    d S 1 s/w   Y  d S )	Nr   r   r   r*   z=.*must contain exactly one positive factor for each dimensionr   r2   r   )r   r   r3   r   r@   rK   r   )rn   r   rp   regexr   r   r   test_spacing_raises  s   "z,Test_remove_near_objects.test_spacing_raisesN)__name__
__module____qualname__r   markparametrizesupported_dtypesrt   r   r   r   r   r   r   r   r   r0   r   r   r   r   r   r   r   r   r   r   r   rf     sB    !



rf   )4numpyr   r   scipyrl   skimage.morphologyr   r   r   r   r   skimage._sharedr   skimage._shared.testingr   r	   skimage._shared._warningsr
   r   r   r   r7   uint16uint32int8int16int32int64r   r   r   r&   r   r   r3   r0   r6   r8   r:   rD   rM   rV   rW   rX   rZ   r[   r\   rb   rc   rd   re   rf   r   r   r   r   <module>   sb    
  