
    0-Ph&                        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j                    ZdZ ej        ee ej        j        ej         z  z   d d	          Ze                    ej                  Zej                            d
           d Zd Zej                            dg d          ej                            dej        ej        ej        g          d                         Z ej                            dej!        ej"        ej        ej        ej        g          d             Z#ej                            dg d          d             Z$ej                            dej!        ej        ej        g          d             Z%d Z&d Z'ej                            dej!        ej"        ej        ej        ej        g          d             Z(d Z)ej                            dej        ej        ej        g          d             Z*ej                            dej        ej        ej        g          d             Z+d Z,dS )    N)assert_equalassert_almost_equal)data)expected_warnings)_supported_float_typestructural_similarity   g      4@   i  c                  z   d} t           j                            | |           dz                      t           j                  }t           j                            | |           dz                      t           j                  }t          |||           dk     sJ t          t          |||           d           d S )N3   r   win_size皙?   )nprandomrandastypeuint8r	   r   )NXYs      p/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/skimage/metrics/tests/test_structural_similarity.py&test_structural_similarity_patch_ranger      s    
A	1			#++BH55A	1			#++BH55A A222S8888&q!a888!<<<<<    c                     d} t           j                            | |           dz                      t           j                  }t           j                            | |           dz                      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           d S )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+      s1   A	1			#++BH55A	1			#++BH55A	q!a	0	0	0BQ	q!a	0	0	0B8888	q!b4	H	H	HB8888&q!$777JFB17###!!Q''E &q!,,c22222r   seed)r      r   r
         dtypec                    d}t           j                            |           }|                    ||f                              |d          dz  }|                    ||f                              |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 d S )N<   Fcopyr   
data_rangeT)r6   gradient皙?r   r   )r6   r7   r"   )r   r   default_rngr   r	   allr0   r   )r,   r0   r   rngr   r   fgr*   gradss              r   test_structural_similarity_gradr@   5   s_    	A )


%
%C

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

Aq6!!%e!44s:Aas333AasTBBBAt8888Q4$;;;;6!A$+*	1t$  NE4 7+E222222:.u5555556$+r   c                    d}t           j                            ||          }t           j                            ||          }t          j        |           j        dv rGd}|dz                      t           j                  }|dz                      t           j                  }n0d}|                    | d          }|                    | d          }t          |||          }|j        t           j        k    sJ |d	k     sJ d S )
N   iub     o@r   r#   Fr3   r5   r   )	r   r   r   r0   kindr   r   r	   float64)r0   r   r   r   r6   r&   s         r    test_structural_similarity_dtyperG   S   s     	A
	q!A
	q!A	xu$$
WRX&&WRX&&
HHUH''HHUH''	q!
	;	;	;B8rz!!!!888888r   channel_axis)r   r   r-   c                     d}t           j                            ||          dz                      t           j                  }t           j                            ||          dz                      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            d S # 1 swxY w Y   d S )Nr   r   r   r   .)r   r   r   c              3   D   K   | ]}t          j        |d           V  dS )rI   N)r   moveaxis).0_arrrH   s     r   	<genexpr>z:test_structural_similarity_multichannel.<locals>.<genexpr>v   s1      GGdbk$L11GGGGGGr   )rH   r   T)rH   r"   )rH   r7   )rH   r"   r7      )r   rH   )r   r   r   r   r   r	   tilenewaxisr   r   r$   pytestraises
ValueError)rH   r   r   r   r&   XcYcr'   mr)   r>   s   `          r   'test_structural_similarity_multichannelrY   i   sG   A	1			#++BH55A	1			#++BH55A	q!a	0	0	0B 
3
?#Y	/	/B	3
?#Y	/	/B HGGGr2hGGGFB	r2L1	M	M	MBB ""b|$OOOEAr28$$$ $BPTUUUGAtRX&&& (
B\t  KAtR RX&&&28$$$ 
z	"	" E Eb"qtDDDDE E E E E E E E E E E E E E E E E Es   H  HHc                 D   d}t          dd          D ]}|gdz  }t          j        j        | dz                      |           }t          j        j        | dz                      |           }t          ||dd          }|j        t          j        k    sJ |dk     sJ d S )	N
   r   r
   r   r   rD   r   r6   r8   )ranger   r   r   r   r	   r0   rF   )r0   r   ndimxsizer   r   r*   s          r   test_structural_similarity_nDr`      s     	Aa 	 	
 Y^U#c)11%88Y^U#c)11%88%aQ5III{bj((((t|||||	 	r   c                     t          j                    d} t          j        | t          j        j        j         z  z   dd                              j                  t          d          }fdt          j        d                   D             }t          |t          j        |                     t          t          d          d           d S )Ng      .@r   r   rI   )rH   c                 P    g | ]"}t          d |f         d |f                   #S ).r   )rM   crV   rW   s     r   
<listcomp>zCtest_structural_similarity_multichannel_chelsea.<locals>.<listcomp>   sA       :;baj"S!V*55  r   r#   )r   chelsear   clipr   randnr$   r   r0   r	   r]   r   meanr   )sigmar*   	mssim_seprV   rW   s      @@r   /test_structural_similarity_multichannel_chelseark      s    	BE	ebiorx888!S	A	AB	28		B ""br:::E    ?DRXb\?R?R  I rwy11222 &r2B???EEEEEr   c                      d} t           j        t          j        k    sJ t          j        t          j        k    sJ t          t           t          dd          }t          || 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!   use_sample_covariancer   )decimalN)camr0   r   r   	cam_noisyr	   r   )
mssim_IPOLr*   s     r   +test_gaussian_structural_similarity_vs_IPOLrr      sm    $ #J9    ?bh&&&&!YU  E z1555555r   c                    d}t           j        t          j        k    sJ t          j        t          j        k    sJ t          t                               |           t                              |           d          }t          ||           d S )Ng;V,T?r   r5   )ro   r0   r   r   rp   r	   r   r   )r0   mssim_skimage_0pt17r*   s      r   test_mssim_vs_legacyru      s    
 -9    ?bh&&&&!

59++E22s  E 233333r   c                     t          t          t                    } t          dg          5  t          t                              t
          j                  t                              t
          j                            }|dk    sJ 	 d d d            n# 1 swxY w Y   t          ddg          5  t          t          t                              t
          j                            }d d d            n# 1 swxY w Y   t          t          t                              t
          j                  d          }t          | |           d S )Nz%Setting data_range based on im1.dtypegGz?zInputs have mismatched dtypesr   r5   )
r	   ro   rp   r   r   r   uint16int32float32r   )r*   mssim_uint16mssim_mixeds      r    test_ssim_warns_about_data_ranger|      s   !#y11E	CD	E	E # #,JJry!!9#3#3BI#>#>
 
 d"""""# # # # # # # # # # # # # # # 
	02QR
 
 M M ,C1A1A"(1K1KLLM M M M M M M M M M M M M M M (Ybj))c  K {+++++s$   ABBB18C55C9<C9c                 :   t          j        d|           }t          t          ||dd          d           t          t          ||dd          d           t	          j        t                    5  t          ||           d d d            d S # 1 swxY w Y   d S )N)r
   r
   r0   r   r#   r\   r
   )r   zerosr   r	   rS   rT   rU   r0   r   s     r   &test_structural_similarity_small_imager      s    
u%%%A &q!aCHHH#NNN&q!aCHHH#NNN 
z	"	" $ $a###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $s   2BBBc                     t          j        d|           }t          j        t                    5  t          ||           d d d            d S # 1 swxY w Y   d S )N)@   r   r~   )r   r   rS   rT   rU   r	   r   s     r   =test_structural_similarity_errors_on_float_without_data_ranger      s    
'''A	z	"	" $ $a###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $s   AAAc                  >   t          j        dt           j                  } t          j        dt           j                  }t          j        t
                    5  t          | |           d d d            n# 1 swxY w Y   t          j        t
                    5  t          | | | j        d         dz              d d d            n# 1 swxY w Y   t          j        t
                    5  t          | | d           d d d            n# 1 swxY w Y   t          j        t
                    5  t          | | d	           d d d            n# 1 swxY w Y   t          j        t
                    5  t          | | d
           d d d            d S # 1 swxY w Y   d S )N)	   r   r~   )r.   r.   r   r   r   g)K1)K2g      )ri   )r   r   rF   rS   rT   rU   r	   r$   )r   r   s     r   test_invalid_inputr     s   
rz***A
rz***A	z	"	" $ $a###$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 
z	"	" = =aQWQZ!^<<<<= = = = = = = = = = = = = = = 
z	"	" - -at,,,,- - - - - - - - - - - - - - -	z	"	" - -at,,,,- - - - - - - - - - - - - - -	z	"	" 0 0a$////0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0sZ   A77A;>A;!CCC,DDD/EEE2FFF)-numpyr   rS   numpy.testingr   r   skimager   skimage._shared._warningsr   skimage._shared.utilsr   skimage.metricsr	   r   r,   cameraro   ri   rf   rg   r$   rp   r   r0   r   r+   markparametrizefloat16ry   rF   r@   r   rx   rG   rY   r`   rk   rr   ru   r|   r   r   r    r   r   <module>r      s:        ; ; ; ; ; ; ; ;       7 7 7 7 7 7 7 7 7 7 7 7 1 1 1 1 1 1 	q   dkmmBGC%/")/39"===q#FF	SY''	 	t   = = =3 3 32 !4!4!4552:rz2:"FGG  HG 658 bh"*bj"*E   & 77"E "E 87"EJ 28RZ"DEE  FEF F F$6 6 66 bh"*bj"*E 4 4 4, , ,0 2:rz2:"FGG	$ 	$ HG	$ 2:rz2:"FGG$ $ HG$0 0 0 0 0r   