o
    ðËhp<  ã                   @   s†  d dl Zd dlZd dlmZ d dlmZmZm	Z	 d dl
mZmZmZ d dlmZ d dlmZ d dlmZmZ d dlmZmZ ejd	d
„ ƒZejdd„ ƒZG dd„ dƒZG dd„ dƒZejejejej ej!ej"gZ#ej$ %de#¡dd„ ƒZ&dd„ Z'ej ejgZ(ej$ %de(¡dd„ ƒZ)dd„ Z*dd„ Z+dd„ Z,e -g d¢g d¢g d ¢g d!¢g d"¢g¡Z.e -g d#¢g d$¢g d%¢g d&¢g d'¢g¡Z/e -g d(¢g d)¢g d*¢g d+¢g d,¢g¡Z0e -g d-¢g d.¢g d/¢g d0¢g d1¢g¡Z1e -g d2¢g d(¢g d3¢g d4¢g d5¢g¡Z2d6d7„ Z3d8d9„ Z4d:d;„ Z5d<d=„ Z6ej$ %dg d>¢¡ej$ %d?d@¡ej$ %dAdBdCg¡dDdE„ ƒƒƒZ7ej$ %dg d>¢¡ej$ %dFdG¡ej$ %dHdG¡ej$ %dAdBdCg¡dIdJ„ ƒƒƒƒZ8ej$ %dg d>¢¡ej$ %dKdL¡ej$ %dAdCg¡dMdN„ ƒƒƒZ9ej$ %dg d>¢¡ej$ %dOdP¡ej$ %dQdR¡ej$ %dAdCg¡dSdT„ ƒƒƒƒZ:ej$ %dg d>¢¡ej$ %d?dU¡ej$ %dAdBdCg¡dVdW„ ƒƒƒZ;ej$ %dg d>¢¡ej$ %dKdX¡ej$ %dAdCg¡dYdZ„ ƒƒƒZ<dS )[é    N)Úndimage)Úassert_allcloseÚassert_array_equalÚassert_equal)ÚcolorÚdataÚ	transform)Úexpected_warnings)Úfetch)ÚgrayÚ
footprints)Úimg_as_uintÚimg_as_ubytec                  C   s*   ddl m}  t |  ¡ dd…dd…f ¡S )Nr   ©r   é@   ép   é`   )Úskimager   ÚnpÚascontiguousarrayÚcamerar   © r   ú]/var/www/html/scripts/venv/lib/python3.10/site-packages/skimage/morphology/tests/test_gray.pyÚ	cam_image   s   r   c                  C   s2   ddl m}  t |  ¡ dd…ddd…dd…f ¡S )Nr   r   é   é0   é   é$   é    )r   r   r   r   Úcells3dr   r   r   r   Úcell3d_image   s   &r    c                   @   s   e Zd Zdd„ Zdd„ ZdS )ÚTestMorphologyc           	      C   s    t jt jt jt jt jt jf}tjtj	tj
tjf}tt t t ¡ ¡d¡ƒ}i }tddƒD ]!}|D ]}|D ]}|j› d|› d|j› }||||ƒƒ||< q4q0q,|S )N)r   r   é   é   Ú_)r   ÚerosionÚdilationÚopeningÚclosingÚwhite_tophatÚblack_tophatr   ÚsquareÚdiamondÚdiskÚstarr   r   Údownscale_local_meanr   Úrgb2grayr   ÚcoffeeÚrangeÚ__name__)	ÚselfÚfuncsÚfootprints_2DÚimageÚoutputÚnÚstrelÚfuncÚkeyr   r   r   Ú_build_expected_output#   s$   ÿÿÿþÿz%TestMorphology._build_expected_outputc                 C   s(   t t tdƒ¡ƒ}|  ¡ }t||ƒ d S )Nzdata/gray_morph_output.npz)Údictr   Úloadr
   r=   r   )r4   ÚexpectedÚ
calculatedr   r   r   Útest_gray_morphology5   s   z#TestMorphology.test_gray_morphologyN)r3   Ú
__module__Ú__qualname__r=   rB   r   r   r   r   r!      s    
r!   c                   @   s\   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d„ Zdd„ ZdS )Ú TestEccentricStructuringElementsc                 C   s\   dt jdt jd | _d| jd< d| j | _t d¡t dd¡t dd¡t dd¡g| _d S )Néÿ   ©r#   r#   ©Údtyper   )r"   r"   é   r"   )r   ÚonesÚuint8Úblack_pixelÚwhite_pixelr   r+   Ú	rectangle)r4   r   r   r   Úsetup_class<   s   



þz,TestEccentricStructuringElements.setup_classc                 C   sB   | j D ]}t | j|¡}t | j|¡}t |d| k¡sJ ‚qd S ©NrF   )r   r   r%   rM   r&   rN   r   Úall)r4   ÚsÚcÚdr   r   r   Útest_dilate_erode_symmetryD   s
   
ýz;TestEccentricStructuringElements.test_dilate_erode_symmetryc                 C   ó2   | j D ]}t | j|¡}t || jk¡sJ ‚qd S ©N)r   r   r'   rM   r   rR   )r4   rS   Ú	gray_openr   r   r   Útest_open_black_pixelJ   ó   
þz6TestEccentricStructuringElements.test_open_black_pixelc                 C   rW   rX   )r   r   r(   rN   r   rR   )r4   rS   Ú
gray_closer   r   r   Útest_close_white_pixelO   r[   z7TestEccentricStructuringElements.test_close_white_pixelc                 C   ó,   | j D ]}t t | j|¡dk¡sJ ‚qd S ©Nr   )r   r   rR   r   r'   rN   ©r4   rS   r   r   r   Útest_open_white_pixelT   ó   
ÿz6TestEccentricStructuringElements.test_open_white_pixelc                 C   r^   rQ   )r   r   rR   r   r(   rM   r`   r   r   r   Útest_close_black_pixelX   rb   z7TestEccentricStructuringElements.test_close_black_pixelc                 C   rW   rX   )r   r   r)   rN   r   rR   ©r4   rS   Útophatr   r   r   Útest_white_tophat_white_pixel\   r[   z>TestEccentricStructuringElements.test_white_tophat_white_pixelc                 C   s6   | j D ]}t | j|¡}t |d| j k¡sJ ‚qd S rQ   )r   r   r*   rM   r   rR   rd   r   r   r   Útest_black_tophat_black_pixela   s   
þz>TestEccentricStructuringElements.test_black_tophat_black_pixelc                 C   ó0   | j D ]}t | j|¡}t |dk¡sJ ‚qd S r_   )r   r   r)   rM   r   rR   rd   r   r   r   Útest_white_tophat_black_pixelf   ó   
þz>TestEccentricStructuringElements.test_white_tophat_black_pixelc                 C   rh   r_   )r   r   r*   rN   r   rR   rd   r   r   r   Útest_black_tophat_white_pixelk   rj   z>TestEccentricStructuringElements.test_black_tophat_white_pixelN)r3   rC   rD   rP   rV   rZ   r]   ra   rc   rf   rg   ri   rk   r   r   r   r   rE   ;   s    rE   Úfunctionc                 C   sˆ   t jdd}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 d¢gtj¡}| ||ƒ}| |ƒ}t||ƒ d S )Nr"   )Úradius)
r   r   r   r   r   r   r   r   r   r   )
r   r   r"   r"   r"   r"   r"   r"   r   r   )
r   r   r"   r"   r"   r   r   r"   r   r   )r   r,   r   ÚarrayrL   r   )rl   r:   r7   Úim_expectedÚim_testr   r   r   Útest_default_footprintv   s(   
ôô
rq   c                  C   sn   t  dt¡} d| dd…dd…dd…f< t | ¡}t jdtd}t dd¡|dd…dd…dd…f< t||ƒ d S )N©é   rs   rs   r"   rJ   éþÿÿÿrH   é   é   )r   ÚzerosÚboolr   r'   ÚndiÚgenerate_binary_structurer   )r7   ÚopenedÚimage_expectedr   r   r   Ú"test_3d_fallback_default_footprint‹   s   
"r}   c                 C   sN   t  dt¡}d|dd…dd…dd…f< t jdt jd}| ||ƒ}t||ƒ d S )Nrr   r"   rJ   rt   )ru   ru   ru   rH   )r   rw   rx   rK   rL   r   )rl   r7   ÚcubeÚ	new_imager   r   r   Útest_3d_fallback_cube_footprint›   s
   
r€   c                  C   sà   t jdtd} d| ddd…dd…f< d| ddd…dd…f< d| ddd…dd…f< tdgƒ t | ¡}W d   ƒ n1 s=w   Y  t dd¡}tdgƒ tj| jt j	d|d	}W d   ƒ n1 sdw   Y  t
||ƒ d S )
Nrr   rH   r"   rJ   r#   ru   rv   úoperator.*deprecated|\A\Z©Ú	footprint)r   rw   rx   r	   r   r)   ry   rz   ÚviewrL   r   ©r7   r   rƒ   r|   r   r   r   Útest_3d_fallback_white_tophat§   ó   ÿÿÿr†   c                  C   sà   t jdtd} d| ddd…dd…f< d| ddd…dd…f< d| ddd…dd…f< tdgƒ t | ¡}W d   ƒ n1 s=w   Y  t dd	¡}tdgƒ tj| jt j	d|d
}W d   ƒ n1 sdw   Y  t
||ƒ d S )Nrr   rH   r   rJ   r#   ru   rv   r   r"   r‚   )r   rK   rx   r	   r   r*   ry   rz   r„   rL   r   r…   r   r   r   Útest_3d_fallback_black_tophat¶   r‡   rˆ   c                  C   s’   t  dt j¡} d| dd…dd…f< d| dd…dd…f< d| d	< t | ¡}t | ¡}t dd
¡}tj| |d}tj	| |d}t
||ƒ t
||ƒ d S )N)é	   r‰   é€   rJ   rt   éÄ   ru   éýÿÿÿrF   rG   r"   r‚   )r   rw   rL   r   r'   r(   ry   rz   Úgrey_openingÚgrey_closingr   )r7   r{   Úclosedrƒ   Úndimage_openedÚndimage_closedr   r   r   Útest_2d_ndimage_equivalenceÅ   s   


r’   )çš™™™™™á?ç
×£p=
ç?g333333ã?çHáz®Gá?çáz®GáÚ?)gÍÌÌÌÌÌä?ç)\Âõ(Ü?ç{®Gázì?ç¸…ëQ¸î?çR¸…ëQØ?)çHáz®Gé?çö(\Âõà?g=
×£p=â?çÃõ(\Âí?çìQ¸…ë±?)ç
×£p=
·?ç{®Gáz”?çÂõ(\ê?çö(\Âõè?ç×£p=
×ë?)ç\Âõ(\ï?gš™™™™™é?çq=
×£pÝ?r¢   ç¸…ëQ¸¾?)r“   r—   r•   r–   rš   )r—   r—   r—   rš   rž   )rŸ   r    rœ   rž   rž   )r    r    r    r¢   rž   )rŸ   r    r¥   r¦   r¦   )r”   r”   r˜   r™   r•   )r›   r˜   r™   r™   r™   )r›   r›   r   r™   r   )r¤   r¡   r¡   r   r£   )r¤   r¤   r¡   r¢   r£   )r“   r“   r•   r•   r–   )r“   r—   r•   r—   rš   )r—   rœ   rœ   r¢   rž   )rŸ   r    r¢   r¢   r¢   )rŸ   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   sD   t t t¡tƒ t t t¡tƒ t t t¡tƒ t t 	t¡t
ƒ d S rX   )r   r   r%   ÚimÚerodedr&   Údilatedr'   r{   r(   r   r   r   r   r   Ú
test_floatö   s   rª   c                  C   sb   t ttttttgƒ\} }}}}tt 	| ¡|ƒ tt 
| ¡|ƒ tt | ¡|ƒ tt | ¡|ƒ d S rX   )Úmapr   r§   r¨   r©   r{   r   r   r   r%   r&   r'   r(   )Úim16Úeroded16Ú	dilated16Úopened16Úclosed16r   r   r   Útest_uint16ý   s   ÿr±   c                  C   sÒ   t  g d¢g d¢g d¢gt j¡} t  dt j¡}|d d d…d d d…f }t  g d¢g d¢g d¢g d¢g d	¢gt j¡}t  g d
¢g d¢g d¢g d¢g d¢gt j¡}tj| |d t||ƒ tj| |d t||ƒ d S )N)rv   é   rJ   )rs   rJ   rJ   )ru   rv   r"   )rv   rv   rJ   )rs   r   r²   r   r²   )r   r   r   r   r   )rs   r   rs   r   rJ   )rs   r   rv   r   rv   )rv   r   rJ   r   rJ   )rJ   r   rJ   r   r"   )ru   r   r"   r   r"   )Úout)r   rn   rL   rw   r   r&   r   r%   )r7   Úout_array_bigÚ	out_arrayÚexpected_dilationÚexpected_erosionr   r   r   Útest_discontiguous_out_array  s8   
þþ
üü
üü
r¸   c                  C   s4   t  g d¢¡} t  g d¢¡}t | ¡}t||ƒ d S )N)r"   rJ   ru   rJ   r"   )r"   r"   rJ   r"   r"   )r   rn   r   r%   r   )r7   r@   r¨   r   r   r   Útest_1d_erosion  s   
r¹   )r%   r&   r(   r'   r)   r*   Úsize)rs   ÚdecompositionÚ	separableÚsequencec           	      C   óL   t j|dd}t j||d}tt|ƒ}|| |d}|| |d}t||ƒ dS ©útValidate footprint decomposition for various shapes.

    comparison is made to the case without decomposition.
    N©r»   r‚   )r   r+   Úgetattrr   r   )	r   rl   rº   r»   Úfootprint_ndarrayrƒ   r;   r@   r³   r   r   r   Útest_square_decomposition#  ó   
rÄ   Únrows)ru   é   Úncolsc           
      C   sP   t j||dd}t j|||d}tt|ƒ}|| |d}|| |d}	t||	ƒ dS r¿   )r   rO   rÂ   r   r   )
r   rl   rÆ   rÈ   r»   rÃ   rƒ   r;   r@   r³   r   r   r   Útest_rectangle_decomposition6  s   
rÉ   rm   )rJ   ru   c           	      C   r¾   r¿   )r   r,   rÂ   r   r   )	r   rl   rm   r»   rÃ   rƒ   r;   r@   r³   r   r   r   Útest_diamond_decompositionK  rÅ   rÊ   Úm)r   r"   ru   rv   r9   )r   r"   rJ   ru   c           
      C   s    |dkr(|dkr(t  t¡ tj|||d W d  ƒ dS 1 s!w   Y  dS tj||dd}tj|||d}tt|ƒ}|| |d}|| |d}	t||	ƒ dS )rÀ   r   rÁ   Nr‚   )ÚpytestÚraisesÚ
ValueErrorr   ÚoctagonrÂ   r   r   )
r   rl   rË   r9   r»   rÃ   rƒ   r;   r@   r³   r   r   r   Útest_octagon_decomposition^  s   "ÿ
rÐ   )rv   c           	      C   r¾   r¿   )r   r~   rÂ   r   r   )	r    rl   rº   r»   rÃ   rƒ   r;   r@   r³   r   r   r   Útest_cube_decompositionv  rÅ   rÑ   )ru   c           	      C   r¾   r¿   )r   Ú
octahedronrÂ   r   r   )	r    rl   rm   r»   rÃ   rƒ   r;   r@   r³   r   r   r   Útest_octahedron_decomposition‰  s   
rÓ   )=Únumpyr   rÌ   Úscipyr   ry   Únumpy.testingr   r   r   r   r   r   r   Úskimage._shared._warningsr	   Úskimage._shared.testingr
   Úskimage.morphologyr   r   Úskimage.utilr   r   Úfixturer   r    r!   rE   r%   r&   r'   r(   r)   r*   Úgray_functionsÚmarkÚparametrizerq   r}   Úgray_3d_fallback_functionsr€   r†   rˆ   r’   rn   r§   r¨   r©   r{   r   rª   r±   r¸   r¹   rÄ   rÉ   rÊ   rÐ   rÑ   rÓ   r   r   r   r   Ú<module>   sÈ    

"6þ


ü
ü
ü
ü
ü	ÿÿÿÿÿÿ