o
    :ήcH4                     @   sz   d dl Zd dlZd dlmZmZ d dlmZmZm	Z	m
Z
mZmZ d dlmZ G dd dZG dd dZG d	d
 d
ZdS )    N)expected_warningstest_parallel)graycomatrixgraycopropsgreycomatrixgreycopropslocal_binary_patternmultiblock_lbp)integral_imagec                   @   s   e Zd Zdd Ze 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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 ).TestGLCMc                 C   s.   t jg dg dg dg dgt jd| _d S )N)r   r      r   )r      r   r   )r   r      r   dtype)nparrayuint8imageself r   I/tmp/pip-target-vg8gfxp4/lib/python/skimage/feature/tests/test_texture.pysetup   s   
zTestGLCM.setupc                 C   sj  t | jdgdtjd tjd dtj d gd}|jdksJ tjg dg dg d	g d
gtjd}tj|d d d d ddf | tjg dg dg dg dgtjd}tj|d d d d ddf | tjg dg dg dg dgtjd}tj|d d d d ddf | tjg dg dg dg dgtjd}tj|d d d d ddf | d S )Nr   r      r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   r   r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   	r   r   r   pishaper   uint32testingassert_array_equal)r   result	expected1	expected2	expected3	expected4r   r   r   test_output_angles   sH   *
"
"
"
&zTestGLCM.test_output_anglesc                 C   sz   t | jdgtjd gddd}|jdksJ tjg dg dg d	g d
gtjd}tj|d d d d ddf | d S Nr   r   r   T	symmetric)r   r   r   r   )   r   r   r   )r   r   r   r   )r   r   r   r   )r   r   r   r   r   r   r   )r   r#   expectedr   r   r   test_output_symmetric_11   s   
&z TestGLCM.test_output_symmetric_1c              	   C   sf   t tjtjtjtjfD ]%}tt t	| j
|dgtjgd W d    n1 s+w   Y  qd S Nr   r   )floatr   doublefloat16float32float64pytestraises
ValueErrorr   r   astyper   r   r   r   r   r   test_error_raise_float;   s   zTestGLCM.test_error_raise_floatc              	   C   sj   t jt jt jt jt jt jfD ]$}tt	 t
| j|dgt jg W d    n1 s-w   Y  qd S )Nr   )r   int16int32int64uint16r    uint64r5   r6   r7   r   r   r8   r   r9   r   r   r   test_error_raise_int_typesB   s   z#TestGLCM.test_error_raise_int_typesc                 C   sR   t t t| jtjd dgtjgd W d    d S 1 s"w   Y  d S r/   )	r5   r6   r7   r   r   r8   r   r;   r   r   r   r   r   test_error_raise_negativeI   s   $"z"TestGLCM.test_error_raise_negativec                 C   sJ   t t t| jd dgtjgd W d    d S 1 sw   Y  d S )Nr   r   )r5   r6   r7   r   r   r   r   r   r   r   r   #test_error_raise_levels_smaller_maxM   s   "z,TestGLCM.test_error_raise_levels_smaller_maxc                 C   s   t jt jt jt jt jt jfD ]B}| j|}t	|dgt j
d gddd}|jdks+J t jg dg dg d	g d
gt jd}t j|d d d d ddf | qd S r)   )r   r>   r    r?   r;   r<   r=   r   r8   r   r   r   r   r!   r"   )r   r   imgr#   r-   r   r   r   test_image_data_typesQ   s    
$zTestGLCM.test_image_data_typesc                 C   s   t jg dg dg dg dgt jd}t|dgdgdd	d
}t jg dg dg dg dgt jd}t j|d d d d ddf | d S )Nr   )r   r   r   r   )r   r   r   r   )r   r   r   r   r   r   r   r   Fr*   )r   r   r   r   r   r   r   r   r   r   r   r   r   )r   r   r   r   r    r!   r"   )r   imr#   r-   r   r   r   test_output_distancea   s    

&zTestGLCM.test_output_distancec                 C   s6  t jdgdgdgdggt jd}t|ddgdt jd gd}|jdks%J t jdt jd}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 j	|d d d d ddf | t j	|d d d d ddf | t j	|d d d d ddf | t j	|d d d d ddf | d S )Nr   r   r   r   r   r   )r   r   r   r   r   r   rE   rF   r   r   )
r   r   r   r   r   r   zerosr    r!   r"   )r   rG   r#   ze1e2r   r   r   test_output_combom   s8   

"""&zTestGLCM.test_output_comboc                 C   s   t | jdgdgd}tj|d d d d ddf tjdtjd t | jdgdgddd}tj|d d d d ddf tjdtjd d S )N
   r   r   rI   r   T)normed)r   r   r   r!   r"   rJ   r    r   r#   r   r   r   test_output_empty   s   zTestGLCM.test_output_emptyc              
   C   s   t | jg ddtjd tjgdddd}t|jd D ]<}t|jd D ]2}tj|d d d d ||f  d tj	|d d d d ||f |d d d d ||f 
  q$qd S )	N)r   r   r   r   r   r   TrP   r+   r         ?)r   r   r   r   ranger   r!   assert_almost_equalsumr"   	transpose)r   r#   dar   r   r   test_normed_symmetric   s    zTestGLCM.test_normed_symmetricc                 C   sL   t | jddgdgdddd}t|d}t|d}tjj|d	 d
dd d S )Nr   r   r   r   TrS   r   contrastr   r   gQ?decimal)r   r   r   roundr   r!   rV   )r   r#   r\   r   r   r   test_contrast   s   
zTestGLCM.test_contrastc                 C   sR   t | jdgdtjd gdddd}t|d}t|d}tjj|d	 d
dd d S )Nr   r   r   r   TrS   r   dissimilarityr]   gn?r^   r   r   r   r   r`   r   r!   rV   r   r#   rb   r   r   r   test_dissimilarity   s   
zTestGLCM.test_dissimilarityc              	   C   s   t | jdgdtjd gdddd}tdg t| jdgdtjd gdddd}W d    n1 s2w   Y  tj|| t|d}t	|d	}td
g t
|d	}W d    n1 s^w   Y  tj|| d S )Nr   r   r   r   TrS   zFunction ``greycomatrix``r   rb   zFunction ``greycoprops``)r   r   r   r   r   r   r!   r"   r`   r   r   )r   r-   r#   dissimilarity_expecteddissimilarity_resultr   r   r   .test_greycomatrix_and_greycoprops_deprecations   s"   
z7TestGLCM.test_greycomatrix_and_greycoprops_deprecationsc                 C   sR   t | jddgtjd gdddd}t|d}t|dd }tjj|d	dd
 d S )Nr   r   r   r   TrS   rb   r]   gHzG?r^   rc   rd   r   r   r   test_dissimilarity_2   s   zTestGLCM.test_dissimilarity_2c                 C   sP   t jdd t j}t|g dg ddd}t jt t|ddk  d S )N)d   rj      )r   r   r      )r   g      ?r   g      ?)levelscorrelationrT   )	r   randomr8   r   r   r!   assert_maxr   )r   rC   pr   r   r   test_non_normalized_glcm   s    z!TestGLCM.test_non_normalized_glcmc                 C   sN   t | jdgdgd}tt t|d W d    d S 1 s w   Y  d S )Nr   r   r   ABC)r   r   r5   r6   r7   r   rQ   r   r   r   test_invalid_property   s   "zTestGLCM.test_invalid_propertyc                 C   s<   t | jdgddgdddd}t|dd }tj|d	 d S )
Nr   r   r,   r   TrS   homogeneityr]   g?r   r   r   r   r!   rV   )r   r#   rv   r   r   r   test_homogeneity   
   zTestGLCM.test_homogeneityc                 C   s<   t | jdgddgdddd}t|dd }tj|d d S )	Nr   r   r   TrS   energyr]   g3YNp?rw   r   r#   rz   r   r   r   test_energy   ry   zTestGLCM.test_energyc                 C   sN   t | jddgdgdddd}t|d}tj|d d	 tj|d
 d d S )Nr   r   r   r   TrS   rn   r]   g
U i?)r   r   gl	TZZ?rw   r{   r   r   r   test_correlation   s   
zTestGLCM.test_correlationc                 C   sJ   t jdt jd}t|g ddt jd gdddd}d	D ]}t|| qd S )
NrI   r   )r   r   rk   r   r   r   TrS   )r\   rb   rv   rz   rn   ASM)r   onesr   r   r   r   )r   rG   r#   propr   r   r   test_uniform_properties   s   z TestGLCM.test_uniform_propertiesN)__name__
__module____qualname__r   r   r(   r.   r:   r@   rA   rB   rD   rH   rN   rR   r[   ra   re   rh   ri   rs   ru   rx   r|   r}   r   r   r   r   r   r      s0    

r   c                   @   sB   e Zd Zdd Ze dd Zdd Zdd Zd	d
 Zdd Z	dS )TestLBPc                 C   s8   t jg dg dg dg dg dg dgdd| _d S )	N)   r,   r   r      r   )0               ?   )rk   r      2   r      )   r   r   (      r   )r   r   r   "   r      )      r   r      ~   r1   r   )r   r   r   r   r   r   r   r      s   
zTestLBP.setupc              	   C   P   t | jddd}tg dg dg dg dg dg d	g}tj|| d S )
Nrk   r   default)r      r   r   `   r   )   r         @   8   )   r         r      )   g      P@>   r      r   )r   r   r      r      )r   rl   r   r   r   r   r   r   r   r   r!   r"   r   lbprefr   r   r   test_default   s   
zTestLBP.test_defaultc              	   C   r   )
Nrk   r   ror)r      r   r   r   r   )   r   rl   3   r      )w   r   r   r   r   r   )r   r   r   r   r   r   )r   r   r   _   r   r   )r   rl   r   r   r   r   r   r   r   r   r   test_ror      
zTestLBP.test_rorc              	   C   r   )
Nrk   r   uniform)r   r   r   rk   r   rk   )rl   r   	   r   r   r   )r   rk   r   r   r   r,   )r   r   rl   r,   rl   r   )rk   r   rk   r   r   r   )r   r   r   rk   r   r   r   r   r   r   r   test_uniform  r   zTestLBP.test_uniformc                 C   s   t jd t jdd}d}||  | }d\}}t|||d}|ddddf }|d |d	  | }t j| |d
 d S )Ni i  g333333?)r   r   varrl   r   r   r   )	r   ro   seedrandstdr   r!   rV   mean)r   r   
target_stdPRr   r-   r   r   r   test_var  s   zTestLBP.test_varc              	   C   r   )
Nrk   r   nri_uniform)r   6   r   9   r   r   )r   r   :   r   r      )r   r      r   r   /   )rO   r   r   *   #   r   )r   r   r   r   r   r   )r   r   r   r   r      )r   r   r   r   r!   assert_array_almost_equalr   r   r   r   test_nri_uniform#  r   zTestLBP.test_nri_uniformN)
r   r   r   r   r   r   r   r   r   r   r   r   r   r   r      s    	



r   c                   @   s   e Zd Zdd ZdS )	TestMBLBPc                 C   sx   t jddd}d|ddddf< d|d dd df< d|dd dd f< d}t|}t|d	d	dd}t j|| d S )
N)r   r   r   r   r   r   r,   r      r   )r   rJ   r
   r	   r!   assert_equal)r   test_imgcorrect_answerint_imglbp_coder   r   r   test_single_mblbp0  s   zTestMBLBP.test_single_mblbpN)r   r   r   r   r   r   r   r   r   .  s    r   )numpyr   r5   skimage._shared.testingr   r   skimage.featurer   r   r   r   r   r	   skimage.transformr
   r   r   r   r   r   r   r   <module>   s      UL