o
    j&                     @   s  d dl Zd dlZd dlmZmZ d dlmZ d dlm	Z	 d dl
mZ d dlmZ ejd e ZdZeeeejjej   d d	ZeejZejd
 dd Zdd Zejdg dejdejejejgdd Z ejdej!ej"ejejejgdd Z#ejdg ddd Z$ejdej!ejejgdd Z%dd Z&dd Z'ejdej!ej"ejejejgd d! Z(d"d# Z)ejdejejejgd$d% Z*ejdejejejgd&d' Z+d(d) Z,dS )*    N)assert_equalassert_almost_equal)data)expected_warnings)_supported_float_typestructural_similarity   g      4@   i  c                  C   sf   d} t j| | d t j}t j| | d t j}t||| ddk s'J tt||| dd d S )N3   r
   win_size皙?   )nprandomrandastypeuint8r   r   )NXY r   q/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/skimage/metrics/tests/test_structural_similarity.py&test_structural_similarity_patch_range   s
   r   c            	      C   s   d} t j| | d t j}t j| | d t j}t||dd}t|d t||dd}|dk s5J t||ddd	}|dk sCJ t||dd
\}}t|j|j t||}t|| tt||d d S )Nd   r
      r   r   g333333?   T)r   gaussian_weights)full      ?)r   r   r   r   r   r   r   shape)	r   r   r   ZS0S1S2Zmssim0S3mssimr   r   r    test_structural_similarity_image   s   


r&   seed)r      r   r	         dtypec                 C   s   d}t j| }|||fj|ddd }|||fj|ddd }t||dd}t||ddd}|dk s9J |d	 dk sAJ t |d
 dk sLJ t||dddd\}}	}
|
jt|ksaJ |	jt|ksjJ t |	dk ssJ d S )N<   Fcopyr
   
data_rangeT)r0   gradient皙?r   r   )r0   r1   r   )r   r   Zdefault_rngr   r   allr+   r   )r'   r+   r   rngr   r   fgr%   gradsr   r   r   test_structural_similarity_grad5   s   
r9   c                 C   s   d}t j||}t j||}t | jdv r+d}|d t j}|d t j}nd}|j| dd}|j| dd}t|||d}|jt jksJJ |d	k sPJ d S )
N   Ziub     o@r
   r    Fr-   r/   r   )	r   r   r   r+   kindr   r   r   float64)r+   r   r   r   r0   r"   r   r   r    test_structural_similarity_dtypeS   s   r>   channel_axis)r   r   r(   c                    s^  d}t j||d t j}t j||d t j}t||dd}t |dt jf d}t |dt jf d} fdd||fD \}}t|| dd	}t|| t|| d
d\}}	t	|	j
|j
 t|| d
d\}}
t	|
j
|j
 t|| d
d
d\}}
}	t	|
j
|j
 t	|	j
|j
 tt t||dd d W d    d S 1 sw   Y  d S )Nr   r
   r   r   .)r   r   r   c                 3   s    | ]
}t |d  V  qdS )r@   N)r   Zmoveaxis).0Z_arrr?   r   r   	<genexpr>v   s    z:test_structural_similarity_multichannel.<locals>.<genexpr>)r?   r   T)r?   r   )r?   r1   )r?   r   r1      )r   r?   )r   r   r   r   r   r   ZtileZnewaxisr   r   r!   pytestraises
ValueError)r?   r   r   r   r"   XcYcr#   mr$   r7   r   rB   r   'test_structural_similarity_multichanneli   s*   

"rK   c                 C   sz   d}t ddD ]3}|gd }tjj| d | }tjj| d | }t||ddd}|jtjks4J |dk s:J qd S )	N
   r   r	   r
   r   r;   r   r0   r2   )ranger   r   r   r   r   r+   r=   )r+   r   ndimZxsizer   r   r%   r   r   r   test_structural_similarity_nD   s   rP   c                     s   t   d} t | tjj j   dd jt	 dd} fddt
 jd D }t|t| tt	  ddd d S )	Ng      .@r   r
   r@   rB   c                    s&   g | ]}t d |f  d |f qS ).r   )rA   crH   rI   r   r   
<listcomp>   s    zCtest_structural_similarity_multichannel_chelsea.<locals>.<listcomp>r    )r   Zchelsear   clipr   randnr!   r   r+   r   rN   r   meanr   )sigmar%   Z	mssim_sepr   rR   r   /test_structural_similarity_multichannel_chelsea   s    rX   c                  C   sF   d} t jtjks
J tjtjksJ tt tddd}t|| dd dS )a>  Tests vs. imdiff result from the following IPOL article and code:
    https://www.ipol.im/pub/art/2011/g_lmii/.

    Notes
    -----
    To generate mssim_IPOL, we need a local copy of cam_noisy::

      from skimage import io
      io.imsave('/tmp/cam_noisy.png', cam_noisy)

    Then, we use the following command:
    $ ./imdiff -m mssim <path to camera.png>/camera.png /tmp/cam_noisy.png

    Values for current data.camera() calculated by Gregory Lee on Sep, 2020.
    Available at:
    https://github.com/scikit-image/scikit-image/pull/4913#issuecomment-700653165
    g  @?TF)r   Zuse_sample_covariancer   )decimalN)camr+   r   r   	cam_noisyr   r   )Z
mssim_IPOLr%   r   r   r   +test_gaussian_structural_similarity_vs_IPOL   s   r\   c                 C   sL   d}t jtjks
J tjtjksJ tt | t| dd}t|| d S )Ng;V,T?r
   r/   )rZ   r+   r   r   r[   r   r   r   )r+   Zmssim_skimage_0pt17r%   r   r   r   test_mssim_vs_legacy   s   r]   c                  C   s   t tt} tdg t ttjttj}|dksJ W d    n1 s(w   Y  tddg t tttj}W d    n1 sGw   Y  t tttjdd}t	| | d S )Nz%Setting data_range based on im1.dtypegGz?zInputs have mismatched dtypesr
   r/   )
r   rZ   r[   r   r   r   Zuint16int32float32r   )r%   Zmssim_uint16Zmssim_mixedr   r   r    test_ssim_warns_about_data_range   s    
	r`   c                 C   st   t jd| d}tt||dddd tt||dddd tt t|| W d    d S 1 s3w   Y  d S )N)r	   r	   r+   r   r    rM   r	   )r   zerosr   r   rE   rF   rG   r+   r   r   r   r   &test_structural_similarity_small_image   s   "rd   c                 C   sH   t jd| d}tt t|| W d    d S 1 sw   Y  d S )N)@   re   ra   )r   rb   rE   rF   rG   r   rc   r   r   r   =test_structural_similarity_errors_on_float_without_data_range   s   "rf   c                  C   sD  t jdt jd} t jdt jd}tt t| | W d    n1 s%w   Y  tt t| | | jd d d W d    n1 sFw   Y  tt t| | dd W d    n1 sbw   Y  tt t| | dd	 W d    n1 s~w   Y  tt t| | d
d W d    d S 1 sw   Y  d S )N)	   rg   ra   )r)   r)   r   r   r   g)ZK1)ZK2g      )rW   )r   rb   r=   rE   rF   rG   r   r!   )r   r   r   r   r   test_invalid_input  s"   "rh   )-numpyr   rE   Znumpy.testingr   r   Zskimager   Zskimage._shared._warningsr   Zskimage._shared.utilsr   Zskimage.metricsr   r   r'   camerarZ   rW   rT   rU   r!   r[   r   r+   r   r&   markZparametrizeZfloat16r_   r=   r9   r   r^   r>   rK   rP   rX   r\   r]   r`   rd   rf   rh   r   r   r   r   <module>   sL     	

%



