o
    h3                     @   sr   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
 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run_in_parallel)graycomatrixgraycoprops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+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   ]/var/www/html/scripts/venv/lib/python3.10/site-packages/skimage/feature/tests/test_texture.pysetup_method   s   
zTestGLCM.setup_methodc                 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_1-   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_float7   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   uint64r4   r5   r6   r   r   r7   r   r8   r   r   r   test_error_raise_int_types>   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.   )	r4   r5   r6   r   r   r7   r   r:   r   r   r   r   r   test_error_raise_negativeE   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   )r4   r5   r6   r   r   r   r   r   r   r   r   #test_error_raise_levels_smaller_maxI   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   r7   r   r   r   r   r    r!   )r   r   imgr"   r,   r   r   r   test_image_data_typesM   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_distance]   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   rD   rE   r   r   )
r   r   r   r   r   r   zerosr   r    r!   )r   rF   r"   ze1e2r   r   r   test_output_comboi   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   rH   r   T)normed)r   r   r   r    r!   rI   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rO   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   TrR   r   contrastr   r   gQ?decimal)r   r   r   roundr   r    rU   )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   TrR   r   dissimilarityr\   gn?r]   r   r   r   r   r_   r   r    rU   r   r"   ra   r   r   r   test_dissimilarity   s   
zTestGLCM.test_dissimilarityc                 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   TrR   ra   r\   gHzG?r]   rb   rc   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   rf      )r
   r   r      )r   g      ?r
   g      ?)levelscorrelationrS   )	r   randomr7   r   r   r    assert_maxr   )r   rB   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   r4   r5   r6   r   rP   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   TrR   homogeneityr\   g?r   r   r   r   r    rU   )r   r"   rr   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   TrR   energyr\   g3YNp?rs   r   r"   rv   r   r   r   test_energy   ru   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   TrR   rj   r\   g
U i?)r
   r   gl	TZZ?rs   rw   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 )
NrH   r   )r
   r   rg   r   r   r   TrR   )r[   ra   rr   rv   rj   ASM)r   onesr   r   r   r   )r   rF   r"   propr   r   r   test_uniform_properties   s   z TestGLCM.test_uniform_propertiesN)__name__
__module____qualname__r   r   r'   r-   r9   r?   r@   rA   rC   rG   rM   rQ   rZ   r`   rd   re   ro   rq   rt   rx   ry   r}   r   r   r   r   r	   
   s.    

r	   c                   @   sd   e Zd Zdd Ze dd Zdd Zej	de
je
je
jgdd	 Zd
d Zdd Zdd ZdS )TestLBPc                 C   s:   t jg dg dg dg dg dg dgt jd| _d S )N)   r+   r   r      r   )0               ?   )rg   r      2   r      )   r   r   (      r   )r   r   r   "   r      )      r   r      ~   r   r   r   r   r   r   r      s   
zTestLBP.setup_methodc              	   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 )
Nrg   r
   default)r      r   r   `   r   )   r         @   8   )   r         r      )   g      P@>   r      r   )r   r   r      r      )r   rh   r   r   r   r   r   r   r   r   r    r!   r   lbprefr   r   r   test_default   s   
zTestLBP.test_defaultc              	   C   r   )
Nrg   r
   rorr      r   r   r   r      r   rh   3   r
      w   r   r   r   r   r   r   r
   r   r   r   r   r   r
   r   _   r   r   r   rh   r   r   r
   r   r   r   r   r   r   test_ror      
zTestLBP.test_rorr   c              	   C   s   | j |}d}t|g t|ddd}W d    n1 sw   Y  tg dg dg dg dg d	g d
g}tj|| d S )N8Applying `local_binary_pattern` to floating-point imagesrg   r
   r   r   r   r   r   r   r   )r   r7   r   r   r   r   r    r!   )r   r   r   msgr   r   r   r   r   test_float_warning   s   
zTestLBP.test_float_warningc              	   C   r   )
Nrg   r
   uniform)r   r   r   rg   r   rg   )rh   r   	   r   r
   r   )r   rg   r   r   r   r+   )r   r
   rh   r+   rh   r   )rg   r
   rg   r   r   r   )r   r   r   rg   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\}}d}t|g t|||d}W d    n1 s4w   Y  |ddddf }|d	 |d
  | }t j|	 |d d S )Ni i  g333333?)r   r
   r   varrh   r   r
   r   )
r   rk   seedrandstdr   r   r    rU   mean)r   r   
target_stdPRr   r   r,   r   r   r   test_var  s   zTestLBP.test_varc              	   C   r   )
Nrg   r
   nri_uniform)r   6   r   9   r   r   )r   r   :   r   r      )r   r      r   r   /   )rN   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   r4   markparametrizer   r1   r2   r3   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   rI   r   r   r    assert_equal)r   test_imgcorrect_answerint_imglbp_coder   r   r   test_single_mblbp,  s   zTestMBLBP.test_single_mblbpN)r~   r   r   r   r   r   r   r   r   *  s    r   )numpyr   r4   skimage._shared.testingr   r   skimage.featurer   r   r   r   skimage.transformr   r	   r   r   r   r   r   r   <module>   s     E\