a
    
d$                     @   s  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& ej'dddd Z(dd Z)dd Z*dd Z+ej,-dddgdd Z.dd Z/d d! Z0d"d# Z1d$d% Z2d&d' Z3d(d) Z4d*d+ Z5d,d- Z6d.d/ Z7G d0d1 d1Z8d2d3 Z9d4d5 Z:d6d7 Z;d8d9 Z<d:d; Z=d<d= Z>d>d? Z?d@dA Z@dBdC ZAdS )D    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_ndarrayT)Zautousec                   c   s   t d dV  t  dS )z-Ensure that PIL plugin is used in tests here.pilN)r   r    r   r   b/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/skimage/io/tests/test_pil.pyuse_pil_plugin   s    r   c                  C   sF   t  } | d d dksJ | d d dks.J | d d dksBJ d S )Nr   r   r   r   Zimread_collection)r   )orderr   r   r   test_prefered_plugin    s    r!   c                  C   sz   t dd} | j}W d    n1 s&0    Y  td}t|| tt|}t| t	t
|| dk svJ d S )N.pngsuffixr   gMbP?)r   namenpeyer   r   r   osremovesumabs)ffnameIZIpr   r   r   test_png_round_trip'   s    $


r/   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 sXJ d S )Ndata/color.pngT)Zas_grayr   zdata/camera.pngZ
AllInteger)r   r   ndimdtyper&   float64Zsctype2char	typecodesimgr   r   r   test_imread_as_gray2   s
    r7   explicit_kwargsFc                 C   sz   t jddd}tdd}|j}W d    n1 s60    Y  | rFn t|| t|}t| |j	dksvJ |j	d S )Nr         z.tifr#   )r9   r:   r   )
r&   randomrandr   r%   r   r   r(   r)   shape)r8   xr,   r-   r6   r   r   r   test_imread_separate_channels;   s    $

r?   c                  C   s$   t td} | jdks J | jd S )Nzdata/multipage_rgb.tif)r   
   r@   r   )r   r   r=   r5   r   r   r   test_imread_multipage_rgb_tifQ   s    rA   c                  C   s8   t td} | jdksJ t td} | jdks4J d S )Ndata/palette_gray.pngr   data/palette_color.pngr   )r   r   r1   r5   r   r   r   test_imread_paletteV   s    rD   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      rF   )   rG   rF   r   )r   r   rF   r   )r      rF   rF   r2   zdata/foo3x5x4indexed.png)r&   arrayuint8r   r   r
   )Zdfoor6   r   r   r    test_imread_index_png_with_alpha]   s.    
rL   c                  C   s8   t td} t| sJ t td}t|r4J d S )NrB   rC   )r   openr   r   )Zgraycolorr   r   r   test_palette_is_grays   s    rO   c                  C   s2   t d} d| d d d< ttd}t||  d S )Nr@   r@   rF   r   zdata/checker_bilevel.png)r&   zerosr   r   r
   expectedr6   r   r   r   test_bilevelz   s    
rT   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   
issubdtyper2   uint16r	   rR   r   r   r   test_imread_uint16   s    rY   c                   C   s:   t t ttd W d    n1 s,0    Y  d S )Nzdata/truncated.jpg)r   raisesIOErrorr   r   r   r   r   r   test_imread_truncated_jpg   s    r\   c                  C   sx   t td} tddL}t|| dd t|}t| ||  |   d}|dksVJ W d    n1 sj0    Y  d S )NrU   .jpgr#   _   )ZqualityZ
data_rangeGz?)	r&   rV   r   r   r   r   r   maxmin)Z
chessboardZjpgZimsimr   r   r   test_jpg_quality_arg   s    rd   c                  C   s8   t td} ttd}|jt jks*J t||  d S )NrU   zdata/chessboard_GRAY_U16B.tif)r&   rV   r   r   r2   rX   r	   rR   r   r   r   test_imread_uint16_big_endian   s    re   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 s60    Y  d S )Nr"   r#   )r   r   r   )selfr>   r-   yr   r   r   roundtrip_file   s    
zTestSave.roundtrip_filec                 C   s   t |}t|}|S N)r   r   )rg   r>   	pil_imagerh   r   r   r   roundtrip_pil_image   s    zTestSave.roundtrip_pil_image   c                 C   s   t || tj| d S rj   )r	   astyper&   int32)rg   r2   r>   rh   Zscalingr   r   r   verify_roundtrip   s    zTestSave.verify_roundtripc                 c   s   dD ]}t jt jt jt jfD ]f}t j||dt jj|  }t |t j	r`| j
||||dfV  q|d |}| j
||||fV  qqd S )N)rP   )r@   r@   r   )r@   r@      rI   rF   )r&   rK   rX   float32r3   Zonesr;   r<   rW   Zfloatingrp   rn   )rg   Zroundtrip_functionr=   r2   r>   r   r   r   verify_imsave_roundtrip   s    z TestSave.verify_imsave_roundtripc                 C   s   |  | j d S rj   )rs   ri   rg   r   r   r   test_imsave_roundtrip_file   s    z#TestSave.test_imsave_roundtrip_filec                 C   s   |  | j d S rj   )rs   rl   rt   r   r   r   test_imsave_roundtrip_pil_image   s    z(TestSave.test_imsave_roundtrip_pil_imageN)rm   )	__name__
__module____qualname__ri   rl   rp   rs   ru   rv   r   r   r   r   rf      s   
rf   c               
   C   sl  t ddJ} ttN t| d g  t| td W d    n1 sN0    Y  W d    n1 sl0    Y  ttN t| d g  t| td W d    n1 s0    Y  W d    n1 s0    Y  ttN tg $ t| tddd W d    n1 s0    Y  W d    n1 s>0    Y  W d    n1 s^0    Y  d S )Nr"   r#   z is a low contrast image)r   r   r   rm   )r   r   r   F)Zcheck_contrast)r   r   rZ   
ValueErrorr   r   r&   rQ   )r-   r   r   r   test_imsave_incorrect_dimension   s    LL
r{   c                  C   st   d} t | }t }tdg t|| W d    n1 s>0    Y  |d t|}t|j|  t	|| d S )Nr   r   zis a low contrast imager   )
r&   rQ   r   r   r   seekr   r   r=   r   r=   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 sD0    Y  |d t|}t|j	|  t
|t| d S )Nr|   r2   z6is a boolean image: setting True to 255 and False to 0r   )r&   r'   boolr   r   r   r}   r   r   r=   r   rn   r~   r   r   r   test_imsave_boolean_input   s    (
r   c                  C   s.   d} t | }t|}t|}t|j|  d S )Nr|   )r&   rQ   r   r   r   r=   )r=   r   rk   r   r   r   r   test_imexport_imimport   s
    
r   c                   C   sj   t dg td W d    n1 s(0    Y  t dg tdd W d    n1 s\0    Y  d S )N.* is a boolean imager   Zbmp)r   r   r   r   r   r   test_all_color   s    &r   c                   C   s6   t dg td W d    n1 s(0    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      )Zimg_num)r   r   r   )r   r   r=   r   )r6   Zimg2r   r   r   test_multi_page_gif  s    r   c                  C   s  t td} ttd}|d}tdd}|j}W d    n1 sJ0    Y  || z|  W n t	y|   Y n0 t |}t
| }t
|}tdD ]b}t|d d d d |f }t|d d d d |f }	t|	||	 |	  d}
|
dksJ qd S )Nr0   ZCMYKr]   r#   r   r_   r`   )r   r   r   rM   convertr   r%   savecloseAttributeErrorr   ranger&   Zascontiguousarrayr   ra   rb   )refr6   r,   r-   newZref_labZnew_labiZnewiZrefirc   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   r1   r5   r   r   r   test_extreme_palette+  s    r   )Br(   ior   tempfiler   numpyr&   ZpytestZPILr   Zskimage._sharedr   Zskimage._shared._tempfiler   Zskimage._shared._warningsr   Zskimage._shared.testingr   r	   r
   r   r   r   r   Zskimage.metricsr    r   rN   r   r   r   r   r   r   Z_plugins.pil_pluginr   r   r   Zfixturer   r!   r/   r7   markZparametrizer?   rA   rD   rL   rO   rT   rY   r\   rd   re   rf   r{   r   r   r   r   r   r   r   r   r   r   r   r   <module>   sP   $

	
#	