o
    :ήco"                     @   s  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	m
Z
mZmZ d dlmZ dd	lmZmZ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 Z%dd Z&dd Z'dd Z(dd Z)dd Z*dd Z+dd Z,d d! Z-d"d# Z.d$d% Z/d&d' Z0d(d) Z1d*d+ Z2d,d- Z3G d.d/ d/Z4d0d1 Z5d2d3 Z6d4d5 Z7d6d7 Z8d8d9 Z9d:d; Z:d<d= Z;d>d? Z<d@dA Z=dS )B    N)BytesIO)NamedTemporaryFile   )img_as_float   )imreadimsave
use_pluginreset_plugins)Image)pil_to_ndarrayndarray_to_pil_palette_is_grayscale)rgb2lab)testing)
mono_checkcolor_checkassert_equalassert_array_equalassert_array_almost_equalassert_allclosefetch)expected_warnings)temporary_file)structural_similarityc                   C   s   t d d S )Npil)r	    r   r   @/tmp/pip-target-vg8gfxp4/lib/python/skimage/io/tests/test_pil.pysetup   s   r   c                   C   s
   t   d S N)r
   r   r   r   r   teardown   s   
r    c                 C   s$   zt d W dS  ty   Y dS 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selfr   r   r   setup_module!   s
   r$   c                  C   sb   t dd} | j}|   td}t|| tt|}t	| t
t|| dk s/J d S )N.pngsuffixr   gMbP?)r   nameclosenpeyer   r   r   osremovesumabs)ffnameIIpr   r   r   test_png_round_trip+   s   



 r4   c                  C   s\   t tddd} | jdksJ | jtjksJ t tddd} t| 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imgr   r   r   test_imread_as_gray6   s
   r?   c                  C   s\   t jddd} tdd}|j}|  t||  t|}t	| |j
dks,J |j
d S )Nr         z.tifr&   )r@   rA   r   )r*   randomrandr   r(   r)   r   r   r,   r-   shape)xr0   r1   r>   r   r   r   test_imread_separate_channels?   s   


rF   c                  C   s$   t td} | jdksJ | jd S )Nzdata/multipage_rgb.tif)r   
   rG   r   )r   r   rD   r=   r   r   r   test_imread_multipage_rgb_tifL   s   rH   c                  C   s8   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   r8   r=   r   r   r   test_imread_paletteQ   s   rK   c               	   C   s   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d} ttd}t||  d S )N)   r      rM   )   rN   rM   r   )r   r   rM   r   )r      rM   rM   r9   zdata/foo3x5x4indexed.png)r*   arrayuint8r   r   r   )dfoor>   r   r   r    test_imread_index_png_with_alphaX   s.   
rT   c                  C   s8   t td} t| sJ t td}t|rJ d S )NrI   rJ   )r   openr   r   )graycolorr   r   r   test_palette_is_grayn   s   rX   c                  C   s2   t d} d| d d d< ttd}t||  d S )NrG   rG   rM   r   zdata/checker_bilevel.png)r*   zerosr   r   r   expectedr>   r   r   r   test_bilevelu   s   
r]   c                  C   s<   t td} ttd}t |jt jsJ t||  d S )Ndata/chessboard_GRAY_U8.npyzdata/chessboard_GRAY_U16.tif)r*   loadr   r   
issubdtyper9   uint16r   r[   r   r   r   test_imread_uint16}   s   rb   c                   C   s<   t t ttd W d    d S 1 sw   Y  d S )Nzdata/truncated.jpg)r   raisesIOErrorr   r   r   r   r   r   test_imread_truncated_jpg   s   "re   c                  C   sz   t td} tdd'}t|| dd t|}t| ||  |   d}|dks+J W d    d S 1 s6w   Y  d S )Nr^   .jpgr&   _   )quality
data_rangeGz?)	r*   r_   r   r   r   r   r   maxmin)
chessboardjpgimsimr   r   r   test_jpg_quality_arg   s   "rr   c                  C   s8   t td} ttd}|jt jksJ t||  d S )Nr^   zdata/chessboard_GRAY_U16B.tif)r*   r_   r   r   r9   ra   r   r[   r   r   r   test_imread_uint16_big_endian   s   rs   c                   @   s>   e Zd Zdd Zdd ZdddZdd	 Zd
d Zdd ZdS )TestSavec                 C   sD   t dd}t|| t|}|W  d    S 1 sw   Y  d S )Nr%   r&   )r   r   r   )r#   rE   r1   yr   r   r   roundtrip_file   s
   
$zTestSave.roundtrip_filec                 C   s   t |}t|}|S r   )r   r   )r#   rE   	pil_imageru   r   r   r   roundtrip_pil_image   s   zTestSave.roundtrip_pil_image   c                 C   s   t || tj| d S r   )r   astyper*   int32)r#   r9   rE   ru   scalingr   r   r   verify_roundtrip   s   zTestSave.verify_roundtripc                 c   s    dD ]@}t jt jt jt jfD ]3}t j||dt jj|  }t |t j	r1| j
||||dfV  q|d |}| j
||||fV  qqd S )N)rY   )rG   rG   r   )rG   rG      rP   rM   )r*   rR   ra   float32r:   onesrB   rC   r`   floatingr}   rz   )r#   roundtrip_functionrD   r9   rE   r   r   r   verify_imsave_roundtrip   s   z TestSave.verify_imsave_roundtripc                 C      |  | j d S r   )r   rv   r"   r   r   r   test_imsave_roundtrip_file      z#TestSave.test_imsave_roundtrip_filec                 C   r   r   )r   rx   r"   r   r   r   test_imsave_roundtrip_pil_image   r   z(TestSave.test_imsave_roundtrip_pil_imageN)ry   )	__name__
__module____qualname__rv   rx   r}   r   r   r   r   r   r   r   rt      s    
rt   c               
   C   sv  t dd} tt' t| d g t| td W d    n1 s&w   Y  W d    n1 s5w   Y  tt' t| d g t| td W d    n1 sZw   Y  W d    n1 siw   Y  tt& tg  t| tddd W d    n1 sw   Y  W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S )Nr%   r&   z is a low contrast image)r   r   r   ry   )r   r   r   F)check_contrast)r   r   rc   
ValueErrorr   r   r*   rZ   )r1   r   r   r   test_imsave_incorrect_dimension   s,   
"r   c                  C   st   d} t | }t }tdg t|| W d    n1 sw   Y  |d t|}t|j|  t	|| d S )Nr   r   zis a low contrast imager   )
r*   rZ   r   r   r   seekr   r   rD   r   rD   imagesoutr   r   r   test_imsave_filelike   s   

r   c                  C   s   d} t j| dti}t }tdg t|| W d    n1 s"w   Y  |d t|}t|j	|  t
|t| d S )Nr   r9   z6is a boolean image: setting True to 255 and False to 0r   )r*   r+   boolr   r   r   r   r   r   rD   r   rz   r   r   r   r   test_imsave_boolean_input   s   
r   c                  C   s.   d} t | }t|}t|}t|j|  d S )Nr   )r*   rZ   r   r   r   rD   )rD   r   rw   r   r   r   r   test_imexport_imimport   s
   
r   c                   C   sl   t dg td W d    n1 sw   Y  t dg tdd W d    d S 1 s/w   Y  d S )N.* is a boolean imager   bmp)r   r   r   r   r   r   test_all_color   s   
"r   c                   C   s8   t dg td W d    d S 1 sw   Y  d S )Nr   r   )r   r   r   r   r   r   test_all_mono   s   
"r   c                  C   sP   t td} | jdksJ | jt td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   rD   r   )r>   img2r   r   r   test_multi_page_gif  s   r   c                  C   s   t td} ttd}|d}tdd}|j}|  || z|  W n	 t	y2   Y nw t |}t
| }t
|}tdD ]1}t|d d d d |f }t|d d d d |f }	t|	||	 |	  d}
|
dkstJ qCd S )Nr5   CMYKrf   r&   r   ri   rk   )r   r   r   rU   convertr   r(   r)   saveAttributeErrorr   ranger*   ascontiguousarrayr   rl   rm   )refr>   r0   r1   newref_labnew_labinewirefirq   r   r   r   	test_cmyk
  s.   


r   c                  C   s   t td} t| jd d S )Nzdata/green_palette.pngr   )r   r   r   r8   r=   r   r   r   test_extreme_palette&  s   r   )>r,   numpyr*   ior   tempfiler    r   r   r   r	   r
   PILr   _plugins.pil_pluginr   r   r   rW   r   skimage._sharedr   skimage._shared.testingr   r   r   r   r   r   r   skimage._shared._warningsr   skimage._shared._tempfiler   skimage.metricsr   r   r    r$   r4   r?   rF   rH   rK   rT   rX   r]   rb   re   rr   rs   rt   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sN    $
	#	