
    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 d dl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j/                  ej0                        Zej                  j                  d
       d Zd Zej6                  j9                  dg d      ej6                  j9                  dej:                  ej<                  ej>                  g      d               Z ej6                  j9                  dejB                  ejD                  ej:                  ej<                  ej>                  g      d        Z#ej6                  j9                  dg d      d        Z$ej6                  j9                  dejB                  ej<                  ej>                  g      d        Z%d Z&d Z'ej6                  j9                  dejB                  ejD                  ej:                  ej<                  ej>                  g      d        Z(d Z)ej6                  j9                  dej:                  ej<                  ej>                  g      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)_supported_float_type)structural_similarity   g      4@   i  c                  ^   d} t         j                  j                  | |       dz  j                  t         j                        }t         j                  j                  | |       dz  j                  t         j                        }t        |||       dk  sJ t        t        |||       d       y )N3   r
   win_size皙?   )nprandomrandastypeuint8r   r   )NXYs      /home/developers/rajanand/mypropertyqr-fmb-refixing-v2/venv/lib/python3.12/site-packages/skimage/metrics/tests/test_structural_similarity.py&test_structural_similarity_patch_ranger      s    
A	1		#++BHH5A	1		#++BHH5A A2S888&q!a8!<    c                  P   d} t         j                  j                  | |       dz  j                  t         j                        }t         j                  j                  | |       dz  j                  t         j                        }t        ||d      }t        |d       t        ||d      }|dk  sJ t        ||dd	      }|dk  sJ t        ||d
      \  }}t        |j                  |j                         t        ||      }t        ||       t        t        ||      d       y )Nd   r
      r   r   g333333?   T)r   gaussian_weights)full      ?)r   r   r   r   r   r   r   shape)	r   r   r   S0S1S2mssim0S3mssims	            r    test_structural_similarity_imager*      s    A	1		#++BHH5A	1		#++BHH5A	q!a	0BQ	q!a	0B8O8	q!b4	HB8O8&q!$7JFB177#!!Q'E &q!,c2r   seed)r      r   r	         dtypec                 <   d}t         j                  j                  |       }|j                  ||f      j                  |d      dz  }|j                  ||f      j                  |d      dz  }t	        ||d      }t	        ||dd      }|dk  sJ |d	   dk  sJ t        j
                  |d
   dk        sJ t	        ||ddd      \  }}	}
|
j                  t        |      k(  sJ |	j                  t        |      k(  sJ t        j
                  |	dk        sJ y )N<   Fcopyr
   
data_rangeT)r5   gradient皙?r   r   )r5   r6   r!   )r   r   default_rngr   r   allr/   r   )r+   r/   r   rngr   r   fgr)   gradss              r   test_structural_similarity_gradr?   5   s#    	A ))


%C

Aq6!!%e!4s:A

Aq6!!%e!4s:Aas3AasTBAt8O8Q4$;;66!A$+*	1t$NE4 77+E2222::.u555566$+r   c                    d}t         j                  j                  ||      }t         j                  j                  ||      }t        j                  |       j                  dv rGd}|dz  j                  t         j                        }|dz  j                  t         j                        }n(d}|j                  | d      }|j                  | d      }t        |||      }|j                  t         j                  k(  sJ |d	k  sJ y )
N   iub     o@r
   r"   Fr2   r4   r   )	r   r   r   r/   kindr   r   r   float64)r/   r   r   r   r5   r%   s         r    test_structural_similarity_dtyperF   S   s     	A
		q!A
		q!A	xxu$
WRXX&WRXX&
HHUH'HHUH'	q!
	;B88rzz!!!8O8r   channel_axis)r   r   r,   c                 
    d}t         j                  j                  ||      dz  j                  t         j                        }t         j                  j                  ||      dz  j                  t         j                        }t        ||d      }t        j                  |dt         j                  f   d      }t        j                  |dt         j                  f   d      } fd||fD        \  }}t        || d      }t        ||       t        || d	
      \  }}	t        |	j                  |j                         t        || d	      \  }}
t        |
j                  |j                         t        || d	d	      \  }}
}	t        |
j                  |j                         t        |	j                  |j                         t        j                  t              5  t        ||dd        d d d        y # 1 sw Y   y xY w)Nr   r
   r   r   .)r   r   r   c              3   L   K   | ]  }t        j                  |d         yw)rH   N)r   moveaxis).0_arrrG   s     r   	<genexpr>z:test_structural_similarity_multichannel.<locals>.<genexpr>v   s     Gdbkk$L1Gs   !$)rG   r   T)rG   r!   )rG   r6   )rG   r!   r6      )r   rG   )r   r   r   r   r   r   tilenewaxisr   r   r#   pytestraises
ValueError)rG   r   r   r   r%   XcYcr&   mr(   r=   s   `          r   'test_structural_similarity_multichannelrX   i   s   A	1		#++BHH5A	1		#++BHH5A	q!a	0B 
3

?#Y	/B	3

?#Y	/B Hr2hGFB	r2L1	MBB ""b|$OEAr288$ $BPTUGAtRXX& (
B\tKAtR RXX&288$ 
z	" Eb"qtDE E Es    G99Hc                 X   d}t        dd      D ]  }|gdz  }t        j                  j                  | dz  j	                  |       }t        j                  j                  | dz  j	                  |       }t        ||dd      }|j                  t        j                  k(  sJ |dk  rJ  y )	N
   r   r	   r
   r   rC   r   r5   r7   )ranger   r   r   r   r   r/   rE   )r/   r   ndimxsizer   r   r)   s          r   test_structural_similarity_nDr_      s     	Aa 	
 YY^^U#c)11%8YY^^U#c)11%8%aQ5I{{bjj(((t||	r   c            	         t        j                         } d}t        j                  | |t        j                  j
                  | j                   z  z   dd      }|j                  | j                        }t        | |d      }t        | j                  d         D cg c]  }t        |d|f   | d|f          }}t        |t        j                  |             t        t        | | d      d       y c c}w )Ng      .@r   r
   rH   )rG   .r"   )r   chelsear   clipr   randnr#   r   r/   r   r\   r   meanr   )rU   sigmarV   r)   c	mssim_seps         r   /test_structural_similarity_multichannel_chelsearh      s    	BE	ebiioorxx888!S	AB	288	B ""br:E?DRXXb\?R:;baj"S!V*5I  rwwy12 &r2B?Es   C2c                      d} t         j                  t        j                  k(  sJ t        j                  t        j                  k(  sJ t        t         t        dd      }t        || d       y)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    use_sample_covariancer   )decimalN)camr/   r   r   	cam_noisyr   r   )
mssim_IPOLr)   s     r   +test_gaussian_structural_similarity_vs_IPOLro      sV    $ #J99   ??bhh&&&!YUE z15r   c                    d}t         j                  t        j                  k(  sJ t        j                  t        j                  k(  sJ t        t         j                  |       t        j                  |       d      }t        ||       y )Ng;V,T?r
   r4   )rl   r/   r   r   rm   r   r   r   )r/   mssim_skimage_0pt17r)   s      r   test_mssim_vs_legacyrr      sh    
 -99   ??bhh&&&!

59++E2sE 23r   c                  >   t        t        t              } t        dg      5  t        t        j	                  t
        j                        t        j	                  t
        j                              }|dkD  sJ 	 d d d        t        ddg      5  t        t        t        j	                  t
        j                              }d d d        t        t        t        j	                  t
        j                        d      }t        | |       y # 1 sw Y   xY w# 1 sw Y   UxY w)Nz%Setting data_range based on im1.dtypegGz?zInputs have mismatched dtypesr
   r4   )
r   rl   rm   r   r   r   uint16int32float32r   )r)   mssim_uint16mssim_mixeds      r    test_ssim_warns_about_data_rangery      s    !#y1E	CD	E #,JJryy!9#3#3BII#>
 d"""# 
	02QR
 M ,C1A1A"((1KLM (Ybjj)cK {+'# #M Ms   AD2DDDc                 
   t        j                  d|       }t        t        ||dd      d       t        t        ||dd      d       t	        j
                  t              5  t        ||       d d d        y # 1 sw Y   y xY w)N)r	   r	   r/   r   r"   r[   r	   )r   zerosr   r   rR   rS   rT   r/   r   s     r   &test_structural_similarity_small_imager~      sm    
u%A &q!aCH#N&q!aCH#N 
z	" $a#$ $ $s   #A99Bc                     t        j                  d|       }t        j                  t              5  t        ||       d d d        y # 1 sw Y   y xY w)N)@   r   r{   )r   r|   rR   rS   rT   r   r}   s     r   =test_structural_similarity_errors_on_float_without_data_ranger      s=    
'A	z	" $a#$ $ $s   AAc                     t        j                  dt         j                        } t        j                  dt         j                        }t        j                  t
              5  t        | |       d d d        t        j                  t
              5  t        | | | j                  d   dz          d d d        t        j                  t
              5  t        | | d       d d d        t        j                  t
              5  t        | | 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   xY w# 1 sw Y   xY w# 1 sw Y   ^xY w# 1 sw Y   y xY w)N)	   r   r{   )r-   r-   r   r   r   g)K1)K2g      )re   )r   r|   rE   rR   rS   rT   r   r#   )r   r   s     r   test_invalid_inputr     s   
rzz*A
rzz*A	z	" $a#$ 
z	" =aQWWQZ!^<= 
z	" -at,-	z	" -at,-	z	" 0a$/0 0$ $= =- -- -0 0s<   $E
EE"E.2E:
EE"E+.E7:F)-numpyr   rR   numpy.testingr   r   skimager   skimage._shared._warningsr   skimage._shared.utilsr   skimage.metricsr   r   r+   camerarl   re   rb   rc   r#   rm   r   r/   r   r*   markparametrizefloat16rv   rE   r?   r   ru   rF   rX   r_   rh   ro   rr   ry   r~   r   r    r   r   <module>r      sd     ;  7 7 1 		q dkkmBGGC%/"))//399"===q#F	SYY'	 		t =32 !452::rzz2::"FG H 68 bhh"**bjj"**E& 7"E 8"EJ 288RZZ"DE FF$66 bhh"**bjj"**E44,0 2::rzz2::"FG	$ H	$ 2::rzz2::"FG$ H$0r   