o
    :ήcX                     @   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   sn  || |fi |}t || tjtjfD ]}| |}|||fi |}||}	t ||	 q| tj}
|
d }
|tj}|d }|rJ|d }n|}tjtjfD ])}|
|}|||fi |}||}	d|	 d|  }|dk }|tk s{J qR| tj	}|d }|tj	}|d }tj
tj	tjtjfD ]}||}|||fi |}||}t || qd S )Ng     o@      ?   )r	   npuint32uint64astypefloat64float32sumepsint16int8int32int64)imgparamexpectedfuncparam_scalekeywordsoutdtimg_castexp_cast
data_floatexpected_float
param_cast	data_cast	error_imgerror
img_signed
exp_signedimg_sexp_s r-   M/tmp/pip-target-vg8gfxp4/lib/python/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   sZ  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 ]}||}t|dd\}}t	|| t	|| q>t j
t jt jt jfD ]}||}|d }t|dd\}}t	|| t	|| qb|t}|d d }t jt jfD ]}||}t|dd\}}t	|| t	|| qdS )zTest for max tree)
      r2   	   )   r4   r3   r3   )r2   r4   r1   r1   )r3   r3   r1   r1   dtype)      r7   r7   )r8   r8      r9   )r7   r8   r9   r1   )r9   r9   r1   r1   )r8      r3   r7      r2   r9      r4         r   r1            r;   connectivityr3   r2   g       @N)r   uint8arrayr   uint16r   r   r   r   r	   r   r   r   floatr   r   )	selfimg_typer   P_expS_expPSimg_shifted	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))   rQ   rQ   rQ   rQ   rQ   rQ   rQ   rQ   rQ   rQ   rQ   )rQ      rR   rQ   rR   rQ   rR   rR   rQ   rQ   rR   rQ   )rQ   rR   (   rQ   rQ   rQ   rQ   rQ   rQ   rQ   rS   rQ   )rQ   rQ   rQ   rQ   d   rQ   rT   rT   rQ   rQ   rR   rQ   )rR   rR   rR   rR   rR   rR   rR   rQ   rR   rR      rU   )rR   rU   rR   rR   rR   rU   rR   rQ   rU   rU   rU   rS   )rR   rR   rR   rT   rR   rR   rR   rQ   rU   rU   rU   rU   )rR   rR   rR   rT   rR   rR   rR   rQ   rR   rR   rU   rU   )rR   rR   rR   rR   rR   rS   rR   rQ   rQ   rT   rU   rU   )rR   rS   rU   rU   rU   rS   rR   rU   rR   rR   rU   rU   )rR   rR   rR   rR   rR   rR   rR   rU   rU   rU   rU   rU   r5   )rQ   rR   rR   rQ   rQ   rQ   rR   rR   rQ   rQ   rR   rQ   )rQ   rR   rR   rQ   rQ   rQ   rQ   rQ   rQ   rQ   rR   rQ   )rQ   rQ   rQ   rQ   rQ   rQ   rT   rT   rQ   rQ   rR   rQ   )rR   rU   rR   rR   rR   rU   rR   rQ   rU   rU   rU   rU   )rR   rR   rR   rR   rR   rS   rR   rQ   rQ   rR   rU   rU   )rR   rR   rU   rU   rU   rS   rR   rU   rR   rR   rU   rU   )rQ   rR   rR   rQ   rQ   rQ   rQ   rQ   rQ   rQ   rQ   rQ   )rR   rR   rR   rR   rR   rR   rR   rQ   rQ   rQ   rU   rU   )rR   rR   rR   rR   rR   rR   rR   rQ   rU   rU   rU   rU   )rR   rR   rR   rR   rR   rR   rR   rQ   rQ   rR   rU   rU   )rR   rR   rU   rU   rU   rR   rR   rU   rR   rR   rU   rU   r;   rB   r8   parenttree_traverserN)r   rE   rD   r/   r   r   r   rH   r   
expected_2
expected_4rL   rM   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))rA   rA   rA   rA   rA   rA   rA   rA   rA   rA   rA   rA   )rA   7   r]   rA   r]   rA   r]   r]   rA   rA   r]   rA   )rA   r]      rA   rA   rA   rA   rA   rA   rA   r^   rA   )rA   rA   rA   rA      rA   r_   r_   rA   rA   r]   rA   )r]   r]   r]   r]   r]   r]   r]   rA   r]   r]   r   r   )r]   r   r]   r]   r]   r   r]   rA   r   r   r   r^   )r]   r]   r]   r_   r]   r]   r]   rA   r   r   r   r   )r]   r]   r]   r_   r]   r]   r]   rA   r]   r]   r   r   )r]   r]   r]   r]   r]   r^   r]   rA   rA   r_   r   r   )r]   r^   r   r   r   r^   r]   r   r]   r]   r   r   )r]   r]   r]   r]   r]   r]   r]   r   r   r   r   r   r5   )rA   r]   r]   rA   rA   rA   r]   r]   rA   rA   r]   rA   )rA   r]   r]   rA   rA   rA   rA   rA   rA   rA   r]   rA   )rA   rA   rA   rA   rA   rA   r_   r_   rA   rA   r]   rA   )r]   r   r]   r]   r]   r   r]   rA   r   r   r   r   )r]   r]   r]   r]   r]   r^   r]   rA   rA   r]   r   r   )r]   r]   r   r   r   r^   r]   r   r]   r]   r   r   )rA   r]   r]   rA   rA   rA   rA   rA   rA   rA   rA   rA   )r]   r]   r]   r]   r]   r]   r]   rA   rA   rA   r   r   )r]   r]   r]   r]   r]   r]   r]   rA   r   r   r   r   )r]   r]   r]   r]   r]   r]   r]   rA   rA   r]   r   r   )r]   r]   r   r   r   r]   r]   r   r]   r]   r   r   r;   rB   r8   rV   N)r   rE   rD   r/   r   r   rY   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   rg   rg   rf   re   rd   rc   )rc   rd   rf   Y   X   ri   ri   ri   ri   rh   rf   rd   )rd   ?   rj   rj   rj   V   rk   rk   W   +   rm   rf   )re   rh   ri   rk   U   rn   T   rn   rn   rm   rm   rh   )rf   ri   rl   rn   ro   ro   S   ro   ro   rn   rl   ri   )rg   ri   rk   rn   ro   rp   rp   rp   ro   rn   rk   ri   )rg   ri   rk   ro   rp   rp   R   rp   rp   ro   rk   ri   )re   rh      rr   rn   rn   ro   rn   rn   r9   r9   rh   )rd   rf   rr   rr   rl   rk   rk   rk   rl   ri   r9   rf   r5   )rg   ri   rk   ro   rp   rp   rp   rp   rp   ro   rk   ri   )rd   rj   rj   rj   rj   rk   rk   rk   rl   ro   ro   rf   )re   rh   ri   rk   rn   rn   ro   rn   rn   ro   ro   rh   )re   rh   ro   ro   rn   rn   ro   rn   rn   ro   ro   rh   )rd   rf   ro   ro   rl   rk   rk   rk   rl   ri   ro   rf   r;   rB   r8   rV   N)r   rE   rD   r/   r   r   r   r   rH   r   ex2ex4rL   rM   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 )ra   )r:   r4   r3   r?   r=   r=   r=   r=   r=   r?   r3   r4   )r4   r1   r?   r>   r@   r@   rA   r@   r@   r>   r?   r1   )r3   rS   rS   rS   rS      rw   rw   rw   <   rx   r?   )r?   r>   rA   rw         rz   rz   ry   rx   rx   r>   )r=   r@   rw   ry   rz      r{   r{   rz   ry   rw   r@   )r=   r@   rw   rz   r{   r{   r{   r{   r{   rz   rw   r@   )r=   rA   rw   rz   r{   r{      r{   r{   rz   rw   rA   )r?   r>   P   r}   ry   rz   rz   rz   ry   rT   rT   r>   )r3   r?   r}   r}   rw   rw   rw   rw   rw   rA   rT   r?   )r=   rA   rw   rz   r{   r{   r{   r{   r{   rz   rw   rA   )r3   rS   rS   rS   rS   rw   rw   rw   rw   rz   rz   r?   )r?   r>   rA   rw   ry   rz   rz   rz   ry   rz   rz   r>   )r?   r>   rz   rz   ry   rz   rz   rz   ry   rz   rz   r>   )r3   r?   rz   rz   rw   rw   rw   rw   rw   rA   rz   r?   r;   rB   r8   rV   N)r   rE   r/   r   r   rs   r-   r-   r.   test_diameter_opening   sZ   




z!TestMaxtree.test_diameter_openingc           	      C   sF  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 ]J}||}t|dd}|dk}t|| |j	|j	kstJ t 
|dks}J t|\}}t|||d}t|| |j	|j	ksJ t 
|dksJ qVdS )z#local maxima for various data types)
r1   r?   r>   r@   r@   rA   r@   r@   r>   r?   )
r?   r>   rA   rw   rw   rw   rw   rw   rA   r>   )
r>   rA   rS   rS   rz   rz   rz   rx   rx   rA   )
r@   rw   rS   rS   r{   r{   r{   rx   rx   rw   )
r@   rw   rz   r{   r{   r{   r{   r{   rz   rw   )
rA   rw   rz   r{   r{   r|   r{   r{   rz   rw   )
r@   rw   r}   r}   r{   r{   r{   rT   rT   rw   )
r>   rA   r}   r}   rz   rz   rz   rT   rT   rA   r5   
r   r   r   r   r   r   r   r   r   r   
r   r   r7   r7   r   r   r   r7   r7   r   )
r   r   r   r   r   r7   r   r   r   r   r7   rB   r   r:   rV   N)r   rE   rD   r   r   r   r   r   r	   r6   maxr   )	rH   dataexpected_resultr6   	test_datar   out_binrL   rM   r-   r-   r.   test_local_maximaQ  sT   






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sdJ dS )zspecific tests for float type)
g?)\(?p=
ף?Q?r   333333?r   r   r   r   )
r   r   r   {Gz?r   r   r   r   r   r   )
r   r   皙?r   
ףp=
?r   r   333333?r   r   )
r   r   r   r   RQ?r   r   r   r   r   )
r   r   r   r   r   r   r   r   r   r   )
r   gK?r   r   g&1?g?r   r   r   r   )
r   r   皙?r   r   r   r   g      @r   r   )
r   r   r   r   r   r   r   r   r   r   r5   r   r   )
r   r7   r   r   r7   r   r   r   r   r   )
r   r   r7   r7   r   r   r   r7   r   r   )
r   r   r7   r7   r   r   r   r   r   r   r7   rB   r   r<   N)r   rE   r   rD   r   r	   r   )rH   r   r   r   r   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sJ dS )z$tests the detection of maxima in 3D.)r2   r2   r2   r5   rT   r7   r9   rR   )r;   r;   r;   r:   r2   r   )r7   r<   r<   r;   r4   2   r<   rU   )r4   r4   r4   N)r   zerosrD   r   r   r	   r   )rH   r   local_maximar   r   r-   r-   r.   test_3d  s*   "
zTestMaxtree.test_3dN)__name__
__module____qualname__rP   r\   r`   rv   r~   r   r   r   r-   r-   r-   r.   r0   7   s    (;P41+*r0   )F)numpyr   skimage.morphologyr   r   r   r   r   r   skimage.utilr   skimage._shared.testingr	   r
   r   r/   r0   r-   r-   r-   r.   <module>   s    
+