a
    =bX                     @   sv   d dl Zd dlmZmZmZ d dlmZmZ d dlmZ d dl	m
Z
 d dlmZmZ dZdd	d
ZG dd deZdS )    N)max_treearea_closingarea_opening)max_tree_local_maximadiameter_opening)diameter_closing)invert)assert_array_equalTestCaseg-q=Fc                 K   sp  || |fi |}t || tjtjfD ]4}| |}|||fi |}||}	t ||	 q(| tj}
|
d }
|tj}|d }|r|d }n|}tjtjfD ]R}|
|}|||fi |}||}	d|	 d|  }|dk }|tk sJ q| tj	}|d }|tj	}|d }tj
tj	tjtjfD ]6}||}|||fi |}||}t || q4d S )Ng     o@      ?   )r	   npuint32uint64astypefloat64float32sumepsint16int8int32int64)imgZparamZexpectedfuncZparam_scalekeywordsoutZdtZimg_castZexp_castZ
data_floatZexpected_floatZ
param_castZ	data_castZ	error_imgerrorZ
img_signedZ
exp_signedZimg_sZexp_s r   Elib/python3.9/site-packages/skimage/morphology/tests/test_max_tree.py_full_type_test   s<    







r    c                   @   sL   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dS )TestMaxtreec           	      C   s\  t j}t jg dg dg dg dg|d}t jg dg dg dg d	gt jd}t jg d
t jd}t jt jt jt jfD ]2}||}t|dd\}}t	|| t	|| q|t j
t jt jt jfD ]:}||}|d }t|dd\}}t	|| t	|| q|t}|d d }t jt jfD ]4}||}t|dd\}}t	|| t	|| q"dS )zTest for max tree)
      r#   	   )   r%   r$   r$   )r#   r%   r"   r"   )r$   r$   r"   r"   dtype)      r(   r(   )r)   r)      r*   )r(   r)   r*   r"   )r*   r*   r"   r"   )r)      r$   r(      r#   r*      r%         r   r"            r,   Zconnectivityr$   r#   g       @N)r   uint8arrayr   Zuint16r   r   r   r   r	   r   r   r   floatr   r   )	selfZimg_typer   ZP_expZS_expPSZimg_shiftedZ	img_floatr   r   r   test_max_tree9   sJ    









zTestMaxtree.test_max_treec                 C   sX  t jg dg dg dg d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 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 dg dg dg dgt jd}t|d|tdd t|d|tdd tt|dd\}}t|d|t||d dS )z/Test for Area Closing (2 thresholds, all types))   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;   d   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=   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;   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<   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,   r3   r)   parentZtree_traverserN)r   r5   r4   r    r   r   r   r7   r   Z
expected_2Z
expected_4r8   r9   r   r   r   test_area_closinga   sl    
zTestMaxtree.test_area_closingc                 C   sT  t jg dg dg dg d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 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 dg dg dg dgt jd}t|d|tdd t|d|tdd t|dd\}}t|d|t||d dS )z/Test for Area Opening (2 thresholds, all types))r2   r2   r2   r2   r2   r2   r2   r2   r2   r2   r2   r2   )r2   7   rD   r2   rD   r2   rD   rD   r2   r2   rD   r2   )r2   rD      r2   r2   r2   r2   r2   r2   r2   rE   r2   )r2   r2   r2   r2      r2   rF   rF   r2   r2   rD   r2   )rD   rD   rD   rD   rD   rD   rD   r2   rD   rD   r   r   )rD   r   rD   rD   rD   r   rD   r2   r   r   r   rE   )rD   rD   rD   rF   rD   rD   rD   r2   r   r   r   r   )rD   rD   rD   rF   rD   rD   rD   r2   rD   rD   r   r   )rD   rD   rD   rD   rD   rE   rD   r2   r2   rF   r   r   )rD   rE   r   r   r   rE   rD   r   rD   rD   r   r   )rD   rD   rD   rD   rD   rD   rD   r   r   r   r   r   r&   )r2   rD   rD   r2   r2   r2   rD   rD   r2   r2   rD   r2   )r2   rD   rD   r2   r2   r2   r2   r2   r2   r2   rD   r2   )r2   r2   r2   r2   r2   r2   rF   rF   r2   r2   rD   r2   )rD   r   rD   rD   rD   r   rD   r2   r   r   r   r   )rD   rD   rD   rD   rD   rE   rD   r2   r2   rD   r   r   )rD   rD   r   r   r   rE   rD   r   rD   rD   r   r   )r2   rD   rD   r2   r2   r2   r2   r2   r2   r2   r2   r2   )rD   rD   rD   rD   rD   rD   rD   r2   r2   r2   r   r   )rD   rD   rD   rD   rD   rD   rD   r2   r   r   r   r   )rD   rD   rD   rD   rD   rD   rD   r2   r2   rD   r   r   )rD   rD   r   r   r   rD   rD   r   rD   rD   r   r   r,   r3   r)   r@   N)r   r5   r4   r    r   r   rB   r   r   r   test_area_opening   sf    



zTestMaxtree.test_area_openingc                 C   sX  t jg dg dg dg d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 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 dg dg dg dgt jd
}t|d|tdd t|d|tdd tt|dd\}}t|d|t||d dS )3Test for Diameter Opening (2 thresholds, all types))a   _   ]   \   [   Z   rN   rN   rM   rL   rK   rJ   )rJ   rK   rM   Y   X   rP   rP   rP   rP   rO   rM   rK   )rK   ?   rQ   rQ   rQ   V   rR   rR   W   +   rT   rM   )rL   rO   rP   rR   U   rU   T   rU   rU   rT   rT   rO   )rM   rP   rS   rU   rV   rV   S   rV   rV   rU   rS   rP   )rN   rP   rR   rU   rV   rW   rW   rW   rV   rU   rR   rP   )rN   rP   rR   rV   rW   rW   R   rW   rW   rV   rR   rP   )rL   rO      rY   rU   rU   rV   rU   rU   r*   r*   rO   )rK   rM   rY   rY   rS   rR   rR   rR   rS   rP   r*   rM   r&   )rN   rP   rR   rV   rW   rW   rW   rW   rW   rV   rR   rP   )rK   rQ   rQ   rQ   rQ   rR   rR   rR   rS   rV   rV   rM   )rL   rO   rP   rR   rU   rU   rV   rU   rU   rV   rV   rO   )rL   rO   rV   rV   rU   rU   rV   rU   rU   rV   rV   rO   )rK   rM   rV   rV   rS   rR   rR   rR   rS   rP   rV   rM   r,   r3   r)   r@   N)r   r5   r4   r    r   r   r   r   r7   r   Zex2Zex4r8   r9   r   r   r   test_diameter_closing   sf    



z!TestMaxtree.test_diameter_closingc                 C   sB  t g dg dg dg dg dg dg dg dg dg dg d	g dg}t g dg dg dg dg dg dg d
g dg dg dg d	g dg}t g dg dg dg dg dg dg d
g dg dg dg dg dg}t|d|tdd t|d|tdd t|dd\}}t|d|t||d dS )rH   )r+   r%   r$   r0   r.   r.   r.   r.   r.   r0   r$   r%   )r%   r"   r0   r/   r1   r1   r2   r1   r1   r/   r0   r"   )r$   r=   r=   r=   r=      r\   r\   r\   <   r]   r0   )r0   r/   r2   r\         r_   r_   r^   r]   r]   r/   )r.   r1   r\   r^   r_      r`   r`   r_   r^   r\   r1   )r.   r1   r\   r_   r`   r`   r`   r`   r`   r_   r\   r1   )r.   r2   r\   r_   r`   r`      r`   r`   r_   r\   r2   )r0   r/   P   rb   r^   r_   r_   r_   r^   r>   r>   r/   )r$   r0   rb   rb   r\   r\   r\   r\   r\   r2   r>   r0   )r.   r2   r\   r_   r`   r`   r`   r`   r`   r_   r\   r2   )r$   r=   r=   r=   r=   r\   r\   r\   r\   r_   r_   r0   )r0   r/   r2   r\   r^   r_   r_   r_   r^   r_   r_   r/   )r0   r/   r_   r_   r^   r_   r_   r_   r^   r_   r_   r/   )r$   r0   r_   r_   r\   r\   r\   r\   r\   r2   r_   r0   r,   r3   r)   r@   N)r   r5   r    r   r   rZ   r   r   r   test_diameter_opening   sZ    



z!TestMaxtree.test_diameter_openingc           	      C   sH  t jg dg d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 dg d
g
t jd	}t jt jt jt jfD ]}||}t|dd}|dk}t|| |j	|j	ksJ t 
|dksJ t|\}}t|||d}t|| |j	|j	ks0J t 
|dksJ qdS )z#local maxima for various data types)
r"   r0   r/   r1   r1   r2   r1   r1   r/   r0   )
r0   r/   r2   r\   r\   r\   r\   r\   r2   r/   )
r/   r2   r=   r=   r_   r_   r_   r]   r]   r2   )
r1   r\   r=   r=   r`   r`   r`   r]   r]   r\   )
r1   r\   r_   r`   r`   r`   r`   r`   r_   r\   )
r2   r\   r_   r`   r`   ra   r`   r`   r_   r\   )
r1   r\   rb   rb   r`   r`   r`   r>   r>   r\   )
r/   r2   rb   rb   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(   r3   r   r+   r@   N)r   r5   r4   r   r   r   r   r   r	   r'   maxr   )	r7   dataexpected_resultr'   Z	test_datar   out_binr8   r9   r   r   r   test_local_maximaQ  sR    






zTestMaxtree.test_local_maximac                 C   s   t jg dg d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 dg d
g
t jd	}t|dd}|dk}t|| t |dksJ dS )zspecific tests for float type)
g?)\(?p=
ף?Q?rm   333333?rm   rm   rl   rk   )
rk   rl   rn   {Gz?ro   ro   ro   ro   rn   rl   )
rl   rn   皙?rp   
ףp=
?rq   rq   333333?rr   rn   )
rm   ro   rp   rp   RQ?rs   rs   rr   rr   ro   )
rm   ro   rq   rs   rs   rs   rs   rs   rq   ro   )
rn   gK?rq   rs   g&1?g?rs   rs   rq   ro   )
rm   ro   皙?rt   rs   rs   rs   g      @r   ro   )
rl   rn   rt   rt   rq   rq   rq   r   r   rn   r&   rd   re   )
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(   r3   r   r-   N)r   r5   r   r4   r   r	   rf   )r7   rg   rh   r   ri   r   r   r   test_extrema_float|  s<    



zTestMaxtree.test_extrema_floatc                 C   s^  t jdt jd}t jdt jd}d|dddddf< d|d< d|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	f< d|d< d|dddddf< |d
ddd	dd	f  d7  < d|d
dd	dd	f< d|dddddf< d|dd	dd	dd	f< d|d< d|d< t|}|d
k}t|| t |dksZJ dS )z$tests the detection of maxima in 3D.)r#   r#   r#   r&   r>   r(   r*   r<   )r,   r,   r,   r+   r#   r   )r(   r-   r-   r,   r%   2   r-   r?   )r%   r%   r%   N)r   Zzerosr4   r   r   r	   rf   )r7   r   Zlocal_maximar   ri   r   r   r   test_3d  s*    "
zTestMaxtree.test_3dN)__name__
__module____qualname__r:   rC   rG   r[   rc   rj   ru   rw   r   r   r   r   r!   7   s   (;P41+*r!   )F)Znumpyr   Zskimage.morphologyr   r   r   r   r   r   Zskimage.utilr   Zskimage._shared.testingr	   r
   r   r    r!   r   r   r   r   <module>   s   
+