
    k h                        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mZmZmZ ej                  j!                  d        ej"                         ZdZ ej(                  ee ej                  j*                  ej,                   z  z   d d      Zej1                  ej2                        Zd	 Zej6                  j9                  d
ej:                  ej<                  ej>                  g      d        Z d Z!ej6                  j9                  d
ej:                  ej<                  ej>                  g      d        Z"d Z#d Z$d Z%d Z&ej6                  j9                  d
ej:                  ej<                  ej>                  g      d        Z'd Z(y)    N)assert_equalassert_almost_equal)data)expected_warnings)peak_signal_noise_rationormalized_root_msemean_squared_errornormalized_mutual_information   g      4@   c                  L    d} t        t        t              }t        || d       y)a9  Tests vs. imdiff result from the following IPOL article and code:
    https://www.ipol.im/pub/art/2011/g_lmii/.

    Notes
    -----
    To generate p_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 psnr <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ah6@   decimalN)r   cam	cam_noisyr   )p_IPOLps     /home/developers/rajanand/mypropertyqr-fmb-refixing-v2/venv/lib/python3.12/site-packages/skimage/metrics/tests/test_simple_metrics.pytest_PSNR_vs_IPOLr      s!    $  FY/A61-    dtypec                 "   t        t        t              }t        dz  j                  | d      }t        dz  j                  | d      }t        ||d      }|j                  t
        j                  k(  sJ | t
        j                  k(  rdnd}t        |||       t        t        dz  t        j                  t        dz        d      }t        |||       t        d	g      5  t        t        dz  t        j                  t        dz              }d d d        t        |||       t        d	g      5  t        t        dz  t        j                  t        dz              }d d d        t        |||       y # 1 sw Y   hxY w# 1 sw Y   $xY w)
Ng     o@F)copy   )
data_range   r   r   zInputs have mismatched dtype)r   r   r   astyper   npfloat64float16r   float32r   )r   p_uint8camf
camf_noisy	p_float64r   p_mixeds          r   test_PSNR_floatr(   -   sX   %c95G%KE2De#++E+>J'jQGI??bjj(((BJJ&aAGG< &eRZZ	E 12qG G< 
:;	< V)#+rzz)eBS7TUVG< 
:;	< V)#+rzz)eBS7TUVG<V V
V Vs   $.E94.F9FFc                      t        j                  t              5  t        t        t        d dd d f          d d d        y # 1 sw Y   y xY w)N)pytestraises
ValueErrorr   r    r   r   test_PSNR_errorsr/   I   s9    	z	" 2S"a[12 2 2s   AA
c                    t        j                  d|       }t        j                  g d|       }t        ||d      }|j                  t         j
                  k(  sJ t        |dt        j                  |t         j
                        z         t        t        ||d      dt        j                  d      z         t        t        ||d	      d|j                         |j                         z
  z         t        t        |t        j                  |      d	      d|j                         |j                         z
  z         y )
Nr   )r   )g               @r1   r1   meannormalizationr   	euclideanr   zmin-max)r   onesasarrayr   r   r    r   r2   sqrtmaxminr   r"   )r   xynrmses       r   
test_NRMSEr>   O   s    
A


'u5A1F;E;;"**$$$BGGARZZ889$QEq277ST:~VAq	:A1557AR<S
 Arzz!}IF	QUUWquuwr   c                  0   t         j                  t        j                        } t        j                  t        j                        }t        t        t         t              t        | |             t        t        t         t              t        | |             y )N)r   r   r   r"   r   r   r	   r   )r$   
cam_noisyfs     r   test_NRMSE_no_int_overflowrA   b   sb    ::bjj!D!!"**-J3	*,>tZ,P C+-@z-Rr   c                      t        j                  d      } t        j                  t              5  t        | d d |        d d d        t        j                  t              5  t        | | d       d d d        y # 1 sw Y   :xY w# 1 sw Y   y xY w)Nr   r*   foor3   )r   r6   r+   r,   r-   r   )r;   s    r   test_NRMSE_errorsrD   m   st    

A	z	" 'AcrFA&' 
z	" 7Aq67 7' '7 7s   A8 B8BBc                      t        t        t        t              d       t        t        t              t        t        t              k  sJ y )N   )r   r
   r   r   r.   r   r   test_nmirG   w   s:    5c3?C(Y%c3/0 0 0r   c                  Z    t        t        d d d df   t        d dd d f         dkD  sJ y )Ni  r   )r
   r   r.   r   r   test_nmi_different_sizesrI   ~   s/    (QWs4C47|DqHHHr   c                 6   t         j                  j                         }|j                  d      j                  |       }|j                  d      j                  |       }t	        ||d      }|j
                  t         j                  k(  sJ t        |dd       y )N)d   rK   
   binsr   rF   r   )r   randomdefault_rngr   r
   r   r    r   )r   rngrandom1random2nmis        r   test_nmi_randomrU      sv    
))


!Cjj$++E2Gjj$++E2G
'r
BC99

"""Q*r   c                  |    t         j                  j                  d      \  } }t        t        | |d      dd       y )N)rF   rL   rK   rK   rL   rM   r   rF   r   )r   rO   r   r
   )rR   rS   s     r   test_nmi_random_3drW      s6    yy''(9:GW%gwR@	r   ))numpyr   r+   numpy.testingr   r   skimager   skimage._shared._warningsr   skimage.metricsr   r   r	   r
   rO   seedcamerar   sigmacliprandnshaper   r   r   r   markparametrizer!   r"   r    r(   r/   r>   rA   rD   rG   rI   rU   rW   r.   r   r   <module>re      sV     ;  7  		q dkkmBGGC%/"))//399"===q#F	SYY'	.. 2::rzz2::"FG= H=62 2::rzz2::"FG H$70I 2::rzz2::"FG+ H+r   