
    a6d#                        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! ddl"m#Z#m$Z$m%Z% d Z&d Z'd Z(d Z)d Z*ej+        ,                    dddg          d             Z-d Z.d Z/d Z0d Z1d Z2d Z3d Z4d  Z5d! Z6 G d" d#          Z7d$ Z8d% Z9d& Z:d' Z;d( Z<d) Z=d* Z>d+ Z?d, Z@d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)_palette_is_grayscalendarray_to_pilpil_to_ndarrayc                  $    t          d           d S )Npil)r        9lib/python3.11/site-packages/skimage/io/tests/test_pil.pysetupr!      s    ur   c                  "    t                       d S N)r   r   r   r    teardownr$      s    OOOOOr   c                 H    	 t          d           dS # t          $ r Y dS w xY w)zThe effect of the `plugin.use` call may be overridden by later imports.
    Call `use_plugin` directly before the tests to ensure that PIL is used.
    r   N)r   ImportErrorselfs    r    setup_moduler)       s=    5   s    
!!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_tripr9   *   s    	6	*	*	* a               	q		A
5!	fUmm	$	$BIe6"&A,,$&&&&&&s   %))c                      t          t          d          d          } | j        dk    sJ | j        t          j        k    sJ t          t          d          d          } t	          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sctype2char	typecodesimgs    r    test_imread_as_grayrE   5   s    
'(($
7
7
7C8q====9
""""
())4
8
8
8C>#)$$\(BBBBBBBr   explicit_kwargsFTc                 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,   )rH   rI   r   )
r/   randomrandr   r.   r   r   r1   r2   shape)rF   xr5   r6   rD   s        r    test_imread_separate_channelsrN   >   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   
   rP   r   )r   r   rL   rC   s    r    test_imread_multipage_rgb_tifrQ   T   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>   rC   s    r    test_imread_paletterU   Y   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      rX   )   rY   rX   r   )r   r   rX   r   )r      rX   rX   r?   zdata/foo3x5x4indexed.png)r/   arrayuint8r   r   r   )dfoorD   s     r     test_imread_index_png_with_alphar_   `   s     8(((((((((((((((	*
 )((((($nn$nn$nn	&
 (''''''''''''''	)* 24; ; ;D 122
3
3CsD!!!!!r   c                      t          j        t          d                    } t          |           sJ t          j        t          d                    }t          |          rJ d S )NrS   rT   )r   openr   r   )graycolors     r    test_palette_is_grayrd   v   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rP   rP   rX   r   zdata/checker_bilevel.png)r/   zerosr   r   r   expectedrD   s     r    test_bilevelrj   }   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
   rh   s     r    test_imread_uint16rp      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_jpgrt      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 )Nrl   .jpgr,   _   )quality
data_rangeGz?)	r/   rm   r   r   r   r   r   maxmin)
chessboardjpgimsims       r    test_jpg_quality_argr      s    <==>>J	v	&	&	& #sJ++++C[[#!~~''*..*:*::< < < Tzzzzz                 s   A#B##B'*B'c                      t          j        t          d                    } t          t          d                    }|j        t           j        k    sJ t          ||            d S )Nrl   zdata/chessboard_GRAY_U16B.tif)r/   rm   r   r   r?   ro   r
   rh   s     r    test_imread_uint16_big_endianr      s[    wu:;;<<H
677
8
8C9	!!!!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   )r(   rM   r6   ys       r    roundtrip_filezTestSave.roundtrip_file   s    6*** 	e5!uA	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	s   !?AAc                 B    t          |          }t          |          }|S r#   )r   r   )r(   rM   	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?   rM   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)rf   )rP   rP   r   )rP   rP      r[   rX   )r/   r]   ro   float32r@   onesrJ   rK   rn   floatingr   r   )r(   roundtrip_functionrL   r?   rM   s        r    verify_imsave_roundtripz TestSave.verify_imsave_roundtrip   s      9 
	2 
	2E(BIrz2:F 	2 	2GE///").%2HH=44 20%--a00#7 7 7 7 7 S((//A0%--a002 2 2 2 2	2
	2 
	2r   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      sw            
E E E E2 2 2: : :? ? ? ? ?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   rr   
ValueErrorr   r   r/   rg   )r6   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/   rg   r   r   r   seekr   r   rL   r	   rL   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/   r0   boolr   r   r   r   r   r   rL   r	   r   r   s       r    test_imsave_boolean_inputr      s    EFE&&&E		A 
EF
H 
H  q%              
 FF1III
))CE"""CJJt$$e,,,,,s   AAAc                      d} t          j        |           }t          |          }t          |          }t	          |j        |            d S )Nr   )r/   rg   r   r   r   rL   )rL   r   r   r   s       r    test_imexport_imimportr      sF    EHUOOEu%%I

#
#CE"""""r   c                      t          dg          5  t          d           d d d            n# 1 swxY w Y   t          d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   r   r   r   r    test_all_colorr      s    	34	5	5  E              	34	5	5 " "E5!!!" " " " " " " " " " " " " " " " " "s   -11A&&A*-A*c                  v    t          d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    test_all_monor     s    	34	5	5  5                 s   .22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   rL   r	   )rD   img2s     r    test_multi_page_gifr   	  s    
788
9
9C9''''''%899  D:$$$$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 )Nr;   CMYKrv   r,   r   ry   r{   )r   r   r   ra   convertr   r.   savecloseAttributeErrorr   ranger/   ascontiguousarrayr   r|   r}   )refrD   r5   r6   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$/3xxzzDHHJJ/FH H H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>   rC   s    r    test_extreme_paletter   .  s0    
/00
1
1C1r   )Ar1   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   rc   r   r   r   r   r   _plugins.pil_pluginr   r   r   r!   r$   r)   r9   rE   markparametrizerN   rQ   rU   r_   rd   rj   rp   rt   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    <module>r      sN   				       ' ' ' ' ' '            # # # # # # 4 4 4 4 4 4 7 7 7 7 7 7E E E E E E E E E E E E E E E E E E 2 1 1 1 1 1             8 8 8 8 8 8 8 8 8 8 8 83 3 3 3 3 3 3 3 3 3      ' ' 'C C C *UDM::. . ;:.*2 2 2
  " " ",, , ,& & &- - -, , ,
  - - - ?  ?  ?  ?  ?  ?  ?  ?FI I I      - - -"# # #" " "  
" " "  8    r   