
    1-Ph$                        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j(        d          d             Z)d Z*d Z+d Z,e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- ZBdS ).    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               #   L   K   t          d           dV  t                       dS )z-Ensure that PIL plugin is used in tests here.pilN)r   r        Y/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/skimage/io/tests/test_pil.pyuse_pil_pluginr#      s,       u	EEEOOOOOr!   c                      t                      } | d         d         dk    sJ | d         d         dk    sJ | d         d         dk    sJ d S )Nr   r   r   r   imread_collection)r   )orders    r"   test_prefered_pluginr'   '   sa    NNE?1&&&&?1&&&&$%a(E111111r!   c                  j   t          d          5 } | j        }d d d            n# 1 swxY w Y   t          j        d          }t	          ||           t          t          |                    }t          j        |           t          j	        t          j
        ||z
                      dk     sJ d S )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!	fUmm	$	$BIe6"&a..!!D((((((s   %))c                  *   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 d S )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   s    
'(($
7
7
7C8q====9
""""
())4
8
8
8C8CI#r|L'AAAAAAAr!   explicit_kwargsFc                 H   t           j                            ddd          }t          d          5 }|j        }d d d            n# 1 swxY w Y   | rn	 t          ||           t          |          }t          j        |           |j	        dk    sJ |j	                    d S )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Ie9
"""CI"""""s   AA
A
c                  r    t          t          d                    } | j        dk    sJ | j                    d S )Nzdata/multipage_rgb.tif)r   
   rN   r   )r   r   rJ   rA   s    r"   test_imread_multipage_rgb_tifrO   X   s;    
/00
1
1C9&&&	&&&&&r!   c                      t          t          d                    } | j        dk    sJ t          t          d                    } | j        dk    sJ d S )Ndata/palette_gray.pngr   data/palette_color.pngr   )r   r   r<   rA   s    r"   test_imread_paletterS   ]   sP    
.//
0
0C8q====
/00
1
1C8q======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          ||            d S )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     8 #"""""""""""""" #""""" "!!!!!!!!!!!!!!	
. h1  D4 122
3
3CsD!!!!!r!   c                      t          j        t          d                    } t          |           sJ t          j        t          d                    }t          |          rJ d S )NrQ   rR   )r   openr   r   )graycolors     r"   test_palette_is_grayrb      s`    :e34455D &&&&&Ju56677E$U+++++++r!   c                      t          j        d          } d| d d d<   t          t          d                    }t	          ||            d S )NrN   rN   rV   r   zdata/checker_bilevel.png)r-   zerosr   r   r   expectedrB   s     r"   test_bilevelrh      sL    x!!HHSSqSM
122
3
3CsH%%%%%r!   c                      t          j        t          d                    } t          t          d                    }t          j        |j        t           j                  sJ t          ||            d S )Ndata/chessboard_GRAY_U8.npyzdata/chessboard_GRAY_U16.tif)r-   loadr   r   
issubdtyper=   uint16r
   rf   s     r"   test_imread_uint16rn      sb    wu:;;<<H
566
7
7C=BI.....c8,,,,,r!   c                      t          j        t                    5  t          t	          d                     d d d            d S # 1 swxY w Y   d S )Nzdata/truncated.jpg)r   raisesIOErrorr   r   r    r!   r"   test_imread_truncated_jpgrr      s    		 	  , ,u)**+++, , , , , , , , , , , , , , , , , ,s   AAAc                  `   t          j        t          d                    } t          d          5 }t	          || d           t          |          }t          | ||                                 |                                 z
            }|dk    sJ 	 d d d            d S # 1 swxY w Y   d S )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'7*..:J:J'J
 
 
 Tzzzzz                 s   A#B##B'*B'c                      t          j        t          d                    } t          t          d          d          }|j        j        t           j        k    sJ t          ||            d S )Nrj   zdata/chessboard_GRAY_U16B.tifr   )plugin)r-   rk   r   r   r=   typerm   r
   rf   s     r"   test_imread_uint16_big_endianr      sb    wu:;;<<H
677
F
F
FC9>RY&&&&c8,,,,,r!   c                   4    e Zd Zd Zd Zd	dZd Zd Zd ZdS )
TestSavec                     t          d          5 }t          ||           t          |          }|cd d d            S # 1 swxY w Y   d S )Nr)   r*   )r   r   r   )selfrK   r4   ys       r"   roundtrip_filezTestSave.roundtrip_file   s    6*** 	e5!uA	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   !?AAc                 B    t          |          }t          |          }|S N)r   r   )r   rK   	pil_imager   s       r"   roundtrip_pil_imagezTestSave.roundtrip_pil_image   s!    "1%%	9%%r!      c                 f    t          ||z                      t          j                  |           d S r   )r
   astyper-   int32)r   r=   rK   r   scalings        r"   verify_roundtripzTestSave.verify_roundtrip   s,    !1w;"6"6rx"@"@!DDDD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V  c|dz                      |          }| j
        || ||          fV  d S )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 	SE(BIrz2:F S SGE///").%2HH=44 S0%<N<Nq<Q<QSVWWWWWS((//A0%<N<Nq<Q<QRRRRRS	S 	Sr!   c                 :    |                      | j                   d S r   )r   r   r   s    r"   test_imsave_roundtrip_filez#TestSave.test_imsave_roundtrip_file   s    $$T%899999r!   c                 :    |                      | j                   d S r   )r   r   r   s    r"   test_imsave_roundtrip_pil_imagez(TestSave.test_imsave_roundtrip_pil_image   s    $$T%=>>>>>r!   N)r   )	__name__
__module____qualname__r   r   r   r   r   r   r    r!   r"   r   r      sz            
E E E E	S 	S 	S: : :? ? ? ? ?r!   r   c            	      H   t          d          5 } t          j        t                    5  t	          | dz   g          5  t          | t          j        d                     d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          j        t                    5  t	          | dz   g          5  t          | t          j        d                     d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   t          j        t                    5  t	          g           5  t          | t          j        d          d           d d d            n# 1 swxY w Y   d d d            n# 1 swxY w Y   d d d            d S # 1 swxY w Y   d S )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      sj   	v	&	&	& 
I%^J'' 	6 	6"E,F$F#GHH 6 6ubh|445556 6 6 6 6 6 6 6 6 6 6 6 6 6 6	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 	6 ^J'' 	3 	3"E,F$F#GHH 3 3ubhy112223 3 3 3 3 3 3 3 3 3 3 3 3 3 3	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 	3 ^J'' 	I 	I"2&& I Iubhy11%HHHHI I I I I I I I I I I I I I I	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I 	I
I 
I 
I 
I 
I 
I 
I 
I 
I 
I 
I 
I 
I 
I 
I 
I 
I 
Is   FB#A."B.A22B5A26B9FB			FB		F)D=#C, D,C00D3C04D7FD	F
D	F'E?7%E(E?(E,,E?/E,0E?3F?F	FF	FFFc                  P   d} t          j        |           }t                      }t          dg          5  t	          ||           d d d            n# 1 swxY w Y   |                    d           t          |          }t          |j        |            t          ||           d S )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      s    EHUOOE		A 
56	7	7  q%               FF1III
))CE"""Cs   AAAc                     d} t          j        | dt          i}t                      }t	          dg          5  t          ||           d d d            n# 1 swxY w Y   |                    d           t          |          }t          |j	        |            t          |                    t                    |           d S )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FE&&&E		A 
TU	V	V  q%               FF1III
))CE"""CJJt$$e,,,,,s   AAAc                      d} t          j        |           }t          |          }t          |          }t	          |j        |            d S )Nr   )r-   re   r   r   r   rJ   )rJ   r   r   r   s       r"   test_imexport_imimportr     sF    EHUOOEu%%I

#
#CE"""""r!   c                      t          dt          g          5  t          d           d d d            n# 1 swxY w Y   t          dt          g          5  t          dd           d d d            d S # 1 swxY w Y   d S )N.* is a boolean imager   bmp)r   plugin_deprecation_warningr   r    r!   r"   test_all_colorr   	  s   	35OP	Q	Q  E              	35OP	Q	Q " "E5!!!" " " " " " " " " " " " " " " " " "s   377A22A69A6c                      t          dt          g          5  t          d           d d d            d S # 1 swxY w Y   d S )Nr   r   )r   r   r   r    r!   r"   test_all_monor     s    	35OP	Q	Q  5                 s   488c                      t          t          d                    } | j        dk    sJ | j                    t          t          d          d          }|j        dk    sJ t          | d         |           d S )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8
9
9C9''''''%8991EEED:$$$$CFD!!!!!r!   c                     t          t          d                    } t          j        t          d                    }|                    d          }t          d          5 }|j        }d d d            n# 1 swxY w Y   |                    |           	 |                                 n# t          $ r Y nw xY wt          |          }t          |           }t          |          }t          d          D ]}t          j        |d d d d |f                   }t          j        |d d d d |f                   }	t          |	||	                                |	                                z
            }
|
dk    sJ d S )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               HHUOOO		    --CcllGcllG1XX  #GAAAqqq!G$455#GAAAqqq!G$455#D$488::

;RSSSTzzzzz	 s$   #A77A;>A;B- -
B:9B:c                  h    t          t          d                    } t          | j        d           d S )Nzdata/green_palette.pngr   )r   r   r   r<   rA   s    r"   test_extreme_paletter   8  s0    
/00
1
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      sE   				       ' ' ' ' ' '            # # # # # # 4 4 4 4 4 4 7 7 7 7 7 7                  2 1 1 1 1 1             F F F F F F F F F F F F F F W W W W W W W W W W R    2 2 2) ) )B B B *UDM::. . ;:.*2 2 2
  " " "B, , ,& & &- - -, , ,
  - - -? ? ? ? ? ? ? ?BI I I      - - - # # #" " "  
" " "  6    r!   