U
    ?hX                     @   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   s`  || |f|}t || tjtjfD ]0}| |}|||f|}||}	t ||	 q$| tj}
|
d }
|tj}|d }|r|d }n|}tjtjfD ]N}|
|}|||f|}||}	d|	 d|  }|dk }|tk st	q| tj
}|d }|tj
}|d }tjtj
tjtjfD ]2}||}|||f|}||}t || q(d S )Ng     o@      ?   )r	   npuint32uint64astypefloat64float32sumepsAssertionErrorint16int8int32int64)imgparamexpectedfuncZparam_scalekeywordsout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"   X/var/www/html/venv/lib/python3.8/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ddddgddddgddddgddddgg|d}t jddddgddddgddddgddddggt jd}t jdd	ddd
dddddddddddgt jd}t jt jt jt jfD ]2}||}t|d
d\}}t	|| t	|| qt 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
      	      dtype                        r            Zconnectivityg       @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   sZ    





      






zTestMaxtree.test_max_treec                 C   s(  t jddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddggt jd}t jddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddggt jd}t jddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddg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)      (   d      r*   r0   r7   r-   parentZtree_traverserN)r   r9   r8   r$   r   r   r   r;   r   Z
expected_2Z
expected_4r<   r=   r"   r"   r#   test_area_closinga   sn    
 zTestMaxtree.test_area_closingc                 C   s$  t jddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddggt jd}t jddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddggt jd}t jddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddgddddddddddddg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)r6   7         r   r*   r0   r7   r-   rD   N)r   r9   r8   r$   r   r   rF   r"   r"   r#   test_area_opening   s(                                                   
 zTestMaxtree.test_area_openingc                 C   s(  t jddddddddddddgddddddddddddgdd	d	d	d	d
d
d
ddddgdddd
ddddddddgddddddddddddgddd
dddddddd
dgddd
dddddddd
dgddd
dddddddd
dgddddddddddddgddddddddddddgdddddd
d
d
ddddgddddddddddddggt jd}t jddddddddddddgddddddddddddgdd	d	d	d	d
d
d
ddddgdddd
ddddddddgddddddddddddgddd
dddddddd
dgddd
dddddddd
dgddd
dddddddd
dgddddddddddddgddddddddddddgdddddd
d
d
ddddgddddddddddddggt jd}t jddddddddddddgddddddddddddgdd	d	d	d	d
d
d
ddddgdddd
ddddddddgddddddddddddgddd
dddddddd
dgddd
dddddddd
dgddd
dddddddd
dgddddddddddddgddddddddddddgdddddd
d
d
ddddgddddddddddddg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   Y   X   ?   V   W   +   U   T   S   R      r.   r*   r0   r7   r-   rD   N)r   r9   r8   r$   r   r   r   r   r;   r   Zex2Zex4r<   r=   r"   r"   r#   test_diameter_closing   sh    
 z!TestMaxtree.test_diameter_closingc                 C   s  t ddddddddddddgddddddd	dddddgdd
d
d
d
dddddddgddd	dddddddddgddddddddddddgddddddddddddgdd	dddddddddd	gddddddddddddgddddddddddddgddddddddddddgdddddddddd	ddgddddddd	dddddgg}t ddddddddddddgddddddd	dddddgdd
d
d
d
dddddddgddd	dddddddddgddddddddddddgddddddddddddgdd	dddddddddd	gddddddddddddgddddddddddddgddddddddddddgdddddddddd	ddgddddddd	dddddgg}t ddddddddddddgddddddd	dddddgdd
d
d
d
dddddddgddd	dddddddddgddddddddddddgddddddddddddgdd	dddddddddd	gddddddddddddgddddddddddddgddddddddddddgdddddddddd	ddgddddddd	dddddgg}t|d|tdd t|d|tdd t|dd\}}t|d|t||d dS )rL   r/   r)   r(   r4   r2   r&   r3   r5   r6   rA      <               P   rB   r0   r7   r-   rD   N)r   r9   r$   r   r   r^   r"   r"   r#   test_diameter_opening   s\    
 z!TestMaxtree.test_diameter_openingc           	      C   s  t jddddddddddg
ddddddddddg
dddddddd	d	dg
ddddd
d
d
d	d	dg
dddd
d
d
d
d
ddg
dddd
d
dd
d
ddg
dddd
d
d
d
d
ddg
ddddd
d
d
dddg
ddddddddddg
ddddddddddg
g
t jd}t jddddddddddg
ddddddddddg
ddddddddddg
ddddddddddg
ddddddddddg
ddddddddddg
ddddddddddg
ddddddddddg
ddddddddddg
ddddddddddg
g
t jd}t jt jt jt jfD ]}||}t|dd}|dk}t|| |j	|j	ks*t
t |dks>t
t|\}}t|||d}t|| |j	|j	kstt
t |dkst
qdS )z#local maxima for various data typesr&   r4   r3   r5   r6   r`   rA   rc   ra   rd   re   rf   rB   r*   r   r,   r7   r/   rD   N)r   r9   r8   r   r   r   r   r   r	   r+   r   maxr   )	r;   dataexpected_resultr+   Z	test_datar   out_binr<   r=   r"   r"   r#   test_local_maximaQ  sR    




zTestMaxtree.test_local_maximac                 C   s  t jddddddddddg
ddddddddddg
dddddddd	d	dg
ddddd
d
d
d	d	dg
dddd
d
d
d
d
ddg
dddd
ddd
d
ddg
dddd
d
d
d
d
ddg
ddddd
d
d
dddg
ddddddddddg
ddddddddddg
g
t jd}t jddddddddddg
ddddddddddg
ddddddddddg
ddddddddddg
ddddddddddg
ddddddddddg
ddddddddddg
ddddddddddg
ddddddddddg
ddddddddddg
g
t jd}t|dd}|dk}t|| t |dks
tdS )zspecific tests for float typeg?g)\(?gp=
ף?gQ?g333333?g{Gz?g?g
ףp=
?g333333?gRQ?gK?g&1?g?g?g      @r   r*   r   r,   r7   r1   N)r   r9   r   r8   r   r	   rh   r   )r;   ri   rj   r   rk   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sZtdS )z$tests the detection of maxima in 3D.)r'   r'   r'   r*   rB   r,   r.   r@   )r0   r0   r0   r/   r'   r   )r,   r1   r1   r0   r)   2   r1   rC   )r)   r)   r)   N)r   Zzerosr8   r   r   r	   rh   r   )r;   r   Zlocal_maximar   rk   r"   r"   r#   test_3d  s*    "
zTestMaxtree.test_3dN)__name__
__module____qualname__r>   rG   rK   r_   rg   rl   rm   ro   r"   r"   r"   r#   r%   7   s   (;P41+*r%   )F)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   
+