
    hh$                        d dl Z d dlmZ d dlmZ d dlZd dlZd dlm	Z	 d dl
mZ d dlmZ d dlmZ d dlmZmZmZmZmZmZmZ d d	lmZ d
dlmZ d
dlmZ ddlmZmZm Z m!Z!m"Z" ddl#m$Z$m%Z%m&Z& dZ' ejP                  d      d        Z)d Z*d Z+d Z,ejZ                  j]                  dddg      d        Z/d Z0d Z1d Z2d Z3d Z4d Z5d  Z6d! Z7d" Z8 G d# d$      Z9d% Z:d& Z;d' Z<d( Z=d) Z>d* Z?d+ Z@d, ZAd- ZBy).    N)BytesIO)NamedTemporaryFile)Image)testing)temporary_file)expected_warnings)assert_allcloseassert_array_almost_equalassert_array_equalassert_equalcolor_checkfetch
mono_check)structural_similarity   )img_as_float)rgb2lab   )imreadimsavereset_plugins
use_pluginplugin_order)_palette_is_grayscalendarray_to_pilpil_to_ndarrayz1use `imageio` or other I/O packages directly|\A\ZT)autousec               #   >   K   t        d       d t                yw)z-Ensure that PIL plugin is used in tests here.pilN)r   r        W/var/www/html/dev/engine/venv/lib/python3.12/site-packages/skimage/io/tests/test_pil.pyuse_pil_pluginr#      s      u	Os   c                  f    t               } | d   d   dk(  sJ | d   d   dk(  sJ | d   d   dk(  sJ y )Nr   r   r   r   imread_collection)r   )orders    r"   test_prefered_pluginr'   '   sP    NE?1&&&?1&&&$%a(E111r!   c                  R   t        d      5 } | j                  }d d d        t        j                  d      }t	        |       t        t        |            }t        j                  |       t        j                  t        j                  ||z
              dk  sJ y # 1 sw Y   xY w)N.pngsuffixr   gMbP?)r   namenpeyer   r   r   osremovesumabs)ffnameIIps       r"   test_png_round_tripr7   .   s    	6	* a 	q	A
5!	fUm	$BIIe66"&&a.!D((( s   BB&c                  8   t        t        d      d      } | j                  dk(  sJ | j                  t        j
                  k(  sJ t        t        d      d      } t	        j                  | j                        j                  t        j                  d   v sJ y )Ndata/color.pngT)as_grayr   zdata/camera.png
AllInteger)r   r   ndimdtyper-   float64char	typecodesimgs    r"   test_imread_as_grayrC   9   sv    
'($
7C88q==99

"""
()4
8C88CII##r||L'AAAAr!   explicit_kwargsFc                 @   t         j                  j                  ddd      }t        d      5 }|j                  }d d d        | rn	 t        |       t        |      }t        j                  |       |j                  dk(  sJ |j                         y # 1 sw Y   ZxY w)Nr         z.tifr*   )rF   rG   r   )
r-   randomrandr   r,   r   r   r/   r0   shape)rD   xr3   r4   rB   s        r"   test_imread_separate_channelsrL   B   s     			q"a A	6	* a 
5!
-CIIe99
"-CII-" s   BBc                  l    t        t        d            } | j                  dk(  sJ | j                         y )Nzdata/multipage_rgb.tif)r   
   rN   r   )r   r   rJ   rA   s    r"   test_imread_multipage_rgb_tifrO   X   s-    
/0
1C99&1		1&r!   c                      t        t        d            } | j                  dk(  sJ t        t        d            } | j                  dk(  sJ y )Ndata/palette_gray.pngr   data/palette_color.pngr   )r   r   r<   rA   s    r"   test_imread_paletterS   ]   sB    
./
0C88q==
/0
1C88q==r!   c            
          t        j                  g dg dg dg dg dgg dg dg dg dg dgg dg dg dg dg dggt         j                        } t        t	        d            }t        ||        y )N)   r      rV   )   rW   rV   r   )r   r   rV   r   )r      rV   rV   r=   zdata/foo3x5x4indexed.png)r-   arrayuint8r   r   r   )dfoorB   s     r"    test_imread_index_png_with_alphar]   d   s~     88 #"""" #" "!!!!	
. hh1D4 12
3CsD!r!   c                      t        j                  t        d            } t        |       sJ t        j                  t        d            }t        |      rJ y )NrQ   rR   )r   openr   r   )graycolors     r"   test_palette_is_grayrb      sI    ::e345D &&&JJu567E$U++++r!   c                  ~    t        j                  d      } d| d d d<   t        t        d            }t	        ||        y )NrN   rN   rV   r   zdata/checker_bilevel.png)r-   zerosr   r   r   expectedrB   s     r"   test_bilevelrh      s7    xx!HHSqSM
12
3CsH%r!   c                      t        j                  t        d            } t        t        d            }t        j                  |j
                  t         j                        sJ t        ||        y )Ndata/chessboard_GRAY_U8.npyzdata/chessboard_GRAY_U16.tif)r-   loadr   r   
issubdtyper=   uint16r
   rf   s     r"   test_imread_uint16rn      sL    wwu:;<H
56
7C==BII...c8,r!   c                      t        j                  t              5  t        t	        d             d d d        y # 1 sw Y   y xY w)Nzdata/truncated.jpg)r   raisesIOErrorr   r   r    r!   r"   test_imread_truncated_jpgrr      s1    		  ,u)*+, , ,s	   8Ac                     t        j                  t        d            } t        d      5 }t	        || d       t        |      }t        | || j                         | j                         z
        }|dkD  sJ 	 d d d        y # 1 sw Y   y xY w)Nrj   .jpgr*   _   )quality
data_rangeGz?)	r-   rk   r   r   r   r   r   maxmin)
chessboardjpgimsims       r"   test_jpg_quality_argr      s|    <=>J	v	& #sJ+C[#z~~'7*..:J'J
 Tzz  s   ABBc                      t        j                  t        d            } t        t        d      d      }|j                  j
                  t         j                  k(  sJ t        ||        y )Nrj   zdata/chessboard_GRAY_U16B.tifr   )plugin)r-   rk   r   r   r=   typerm   r
   rf   s     r"   test_imread_uint16_big_endianr      sL    wwu:;<H
67
FC99>>RYY&&&c8,r!   c                   2    e Zd Zd Zd ZddZd Zd Zd Zy)	TestSavec                 x    t        d      5 }t        ||       t        |      }|cd d d        S # 1 sw Y   y xY w)Nr)   r*   )r   r   r   )selfrK   r4   ys       r"   roundtrip_filezTestSave.roundtrip_file   s7    6* 	e5!uA	 	 	s   09c                 2    t        |      }t        |      }|S N)r   r   )r   rK   	pil_imager   s       r"   roundtrip_pil_imagezTestSave.roundtrip_pil_image   s    "1%	9%r!   c                 \    t        ||z  j                  t        j                        |       y r   )r
   astyper-   int32)r   r=   rK   r   scalings        r"   verify_roundtripzTestSave.verify_roundtrip   s    !1w;"6"6rxx"@!Dr!   c              #     K   dD ]  }t         j                  t         j                  t         j                  t         j                  fD ]  }t        j
                  ||      t        j                  j                  | z  }t        j                  |t         j                        r| j                  || ||      df u|dz  j                  |      }| j                  || ||      f   y w)N)rd   )rN   rN   r   )rN   rN      rY   rV   )r-   r[   rm   float32r>   onesrH   rI   rl   floatingr   r   )r   roundtrip_functionrJ   r=   rK   s        r"   verify_imsave_roundtripz TestSave.verify_imsave_roundtrip   s     9 	SE((BIIrzz2::F SGGE/"))..%2HH==400%<Nq<QSVWWS((/A00%<Nq<QRRS	Ss   C*C,c                 :    | j                  | j                         y r   )r   r   r   s    r"   test_imsave_roundtrip_filez#TestSave.test_imsave_roundtrip_file   s    $$T%8%89r!   c                 :    | j                  | j                         y r   )r   r   r   s    r"   test_imsave_roundtrip_pil_imagez(TestSave.test_imsave_roundtrip_pil_image   s    $$T%=%=>r!   N)   )	__name__
__module____qualname__r   r   r   r   r   r   r    r!   r"   r   r      s"    
E	S:?r!   r   c            	         t        d      5 } t        j                  t              5  t	        | dz   g      5  t        | t        j                  d             d d d        d d d        t        j                  t              5  t	        | dz   g      5  t        | t        j                  d             d d d        d d d        t        j                  t              5  t	        g       5  t        | t        j                  d      d       d d d        d d 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   JxY w# 1 sw Y   NxY w# 1 sw Y   y xY w)Nr)   r*   z is a low contrast image)r   r   r   r   )r   r   r   F)check_contrast)r   r   rp   
ValueErrorr   r   r-   re   )r4   s    r"   test_imsave_incorrect_dimensionr      s>   	v	& 
I%^^J' 	6"E,F$F#GH 6ubhh|456	6 ^^J' 	3"E,F$F#GH 3ubhhy123	3 ^^J' 	I"2& Iubhhy1%HI	I
I 
I6 6	6 	63 3	3 	3
I I	I 	I
I 
Is   E(D, D D,!E( E D80E8!E(E%"EEE( D)%D,,D5	1E(8E=EE		E(EEE%	!E((E1c                     d} t        j                  |       }t               }t        dg      5  t	        ||       d d d        |j                  d       t        |      }t        |j                  |        t        ||       y # 1 sw Y   HxY w)Nr   r   zis a low contrast imager   )
r-   re   r   r   r   seekr   r   rJ   r	   rJ   imagesouts       r"   test_imsave_fileliker      sv    EHHUOE	A 
56	7 q% FF1I
)CE"C s   BBc                  J   d} t        j                  | dt        i}t               }t	        dg      5  t        ||       d d d        |j                  d       t        |      }t        |j                  |        t        |j                  t              |       y # 1 sw Y   [xY w)Nr   r=   z6is a boolean image: setting True to 255 and False to 0r   )r-   r.   boolr   r   r   r   r   r   rJ   r	   r   r   s       r"   test_imsave_boolean_inputr      s    EFFE&&E	A 
TU	V q% FF1I
)CE"CJJt$e, s   BB"c                      d} t        j                  |       }t        |      }t        |      }t	        |j
                  |        y )Nr   )r-   re   r   r   r   rJ   )rJ   r   r   r   s       r"   test_imexport_imimportr     s6    EHHUOEu%I

#CE"r!   c                      t        dt        g      5  t        d       d d d        t        dt        g      5  t        dd       d d d        y # 1 sw Y   0xY w# 1 sw Y   y xY w)N.* is a boolean imager   bmp)r   plugin_deprecation_warningr   r    r!   r"   test_all_colorr   	  sa    	35OP	Q E	35OP	Q "E5!" " " "s   AAAA"c                  f    t        dt        g      5  t        d       d d d        y # 1 sw Y   y xY w)Nr   r   )r   r   r   r    r!   r"   test_all_monor     s.    	35OP	Q 5  s   '0c                      t        t        d            } | j                  dk(  sJ | j                         t        t        d      d      }|j                  dk(  sJ t        | d   |       y )Nzdata/no_time_for_that_tiny.gif)         r      )img_num)r   r   r   )r   r   rJ   r	   )rB   img2s     r"   test_multi_page_gifr     s_    
78
9C99'22'%891ED::$$$CFD!r!   c                     t        t        d            } t        j                  t        d            }|j	                  d      }t        d      5 }|j                  }d d d        |j                         	 |j                          t        |      }t        |       }t        |      }t        d      D ]t  }t        j                  |d d d d |f         }t        j                  |d d d d |f         }	t        |	||	j                         |	j!                         z
        }
|
dkD  rtJ  y # 1 sw Y   xY w# t        $ r Y w xY w)Nr9   CMYKrt   r*   r   rw   ry   )r   r   r   r_   convertr   r,   savecloseAttributeErrorr   ranger-   ascontiguousarrayr   rz   r{   )refrB   r3   r4   newref_labnew_labinewirefir   s              r"   	test_cmykr     s   
'(
)C
**U+,
-C
++f
C	6	* a HHUO		 -CclGclG1X ##GAq!G$45##GAq!G$45#D$488:
;RSTzz	   s   D+7D7 +D47	EEc                  X    t        t        d            } t        | j                  d       y )Nzdata/green_palette.pngr   )r   r   r   r<   rA   s    r"   test_extreme_paletter   8  s     
/0
1C1r!   )Cr/   ior   tempfiler   numpyr-   pytestPILr   skimage._sharedr   skimage._shared._tempfiler   skimage._shared._warningsr   skimage._shared.testingr	   r
   r   r   r   r   r   skimage.metricsr    r   ra   r   r   r   r   r   r   _plugins.pil_pluginr   r   r   r   fixturer#   r'   r7   rC   markparametrizerL   rO   rS   r]   rb   rh   rn   rr   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   <module>r      s   	  '    # 4 7   2   F F W W R   2)B *UDM:. ;.*2
"B,&-,
-? ?BI  - #"
"6r!   