ó
 ‰\c           @   s  d  d l  Z  d  d l Z d  d l m Z d  d l m Z d d l m Z 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 d  d l m Z m Z m Z m Z m  Z  m! Z! d  d l" m# Z# d  d l$ m% Z% d „  Z& d „  Z' d „  Z( d „  Z) d „  Z* d „  Z+ d „  Z, d „  Z- d „  Z. d „  Z/ d „  Z0 d „  Z1 d „  Z2 d „  Z3 d „  Z4 d „  Z5 d  d+ d! „  ƒ  YZ6 d" „  Z7 d# „  Z8 d$ „  Z9 d% „  Z: d& „  Z; d' „  Z< d( „  Z= d) „  Z> d* „  Z? d S(,   iÿÿÿÿN(   t   BytesIO(   t   NamedTemporaryFilei   (   t   data_dirt   img_as_floati   (   t   imreadt   imsavet
   use_plugint   reset_plugins(   t   Image(   t   pil_to_ndarrayt   ndarray_to_pilt   _palette_is_grayscale(   t   compare_ssim(   t   rgb2lab(   t   testing(   t
   mono_checkt   color_checkt   assert_equalt   assert_array_equalt   assert_array_almost_equalt   assert_allclose(   t   expected_warnings(   t   temporary_filec           C   s   t  d ƒ d  S(   Nt   pil(   R   (    (    (    s8   lib/python2.7/site-packages/skimage/io/tests/test_pil.pyt   setup   s    c           C   s   t  ƒ  d  S(   N(   R   (    (    (    s8   lib/python2.7/site-packages/skimage/io/tests/test_pil.pyt   teardown   s    c         C   s&   y t  d ƒ Wn t k
 r! n Xd S(   s™   The 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   t   ImportError(   t   self(    (    s8   lib/python2.7/site-packages/skimage/io/tests/test_pil.pyt   setup_module    s    c          C   sŸ   t  d d ƒ }  |  j } |  j ƒ  t j d ƒ } t d g ƒ  t | | ƒ Wd  QXt t | ƒ ƒ } t	 j
 | ƒ t j t j | | ƒ ƒ d k  s› t ‚ d  S(   Nt   suffixs   .pngi   s   Possible precision lossgü©ñÒMbP?(   R   t   namet   closet   npt   eyeR   R   R   R   t   ost   removet   sumt   abst   AssertionError(   t   ft   fnamet   It   Ip(    (    s8   lib/python2.7/site-packages/skimage/io/tests/test_pil.pyt   test_png_round_trip+   s    	
c          C   si   t  t j j t d ƒ d t ƒ}  t d g ƒ & t  t j j t d ƒ d t ƒ} Wd  QXt |  | ƒ d  S(   Ns	   color.pngt   as_grayt
   deprecatedt   flatten(   R   R"   t   patht   joinR   t   TrueR   R   (   t   imgt   img_flat(    (    s8   lib/python2.7/site-packages/skimage/io/tests/test_pil.pyt   test_img_as_gray_flatten7   s    !'c          C   s˜   t  t j j t d ƒ d t ƒ}  |  j d k s6 t ‚ |  j t	 j
 k sN t ‚ t  t j j t d ƒ d t ƒ}  t	 j |  j ƒ t	 j d k s” t ‚ d  S(   Ns	   color.pngR,   i   s
   camera.pngt
   AllInteger(   R   R"   R/   R0   R   R1   t   ndimR&   t   dtypeR    t   float64t   sctype2chart	   typecodes(   R2   (    (    s8   lib/python2.7/site-packages/skimage/io/tests/test_pil.pyt   test_imread_flatten>   s
    !!c          C   s‚   t  j j d d d ƒ }  t d d ƒ } | j } | j ƒ  t | |  ƒ t | ƒ } t j	 | ƒ | j
 d k s~ t | j
 ƒ ‚ d  S(   Ni   i   i   R   s   .tif(   i   i   i   (   R    t   randomt   randR   R   R   R   R   R"   R#   t   shapeR&   (   t   xR'   R(   R2   (    (    s8   lib/python2.7/site-packages/skimage/io/tests/test_pil.pyt   test_imread_separate_channelsH   s    	
c          C   s=   t  t j j t d ƒ ƒ }  |  j d k s9 t |  j ƒ ‚ d  S(   Ns   multipage_rgb.tifi   i
   i   (   i   i
   i
   i   (   R   R"   R/   R0   R   R>   R&   (   R2   (    (    s8   lib/python2.7/site-packages/skimage/io/tests/test_pil.pyt   test_imread_multipage_rgb_tifU   s    c          C   sd   t  t j j t d ƒ ƒ }  |  j d k s0 t ‚ t  t j j t d ƒ ƒ }  |  j d k s` t ‚ d  S(   Ns   palette_gray.pngi   s   palette_color.pngi   (   R   R"   R/   R0   R   R6   R&   (   R2   (    (    s8   lib/python2.7/site-packages/skimage/io/tests/test_pil.pyt   test_imread_paletteZ   s    c          C   s.  t  j d d d d g d d d d g d d d d g d d d d g d d d d g g d d d d g d d d d g d d d d g d d d d g d d d d g g d d d d g d d d d g d d d d g d d d d g d d d d g g g d t  j ƒ}  t t j j t d ƒ ƒ } t | |  ƒ d  S(   Ni   i    iÿ   iÀ   i   R7   s   foo3x5x4indexed.png(	   R    t   arrayt   uint8R   R"   R/   R0   R   R   (   t   dataR2   (    (    s8   lib/python2.7/site-packages/skimage/io/tests/test_pil.pyt    test_imread_index_png_with_alphaa   s"    $c          C   se   t  j t j j t d ƒ ƒ }  t |  ƒ s0 t ‚ t  j t j j t d ƒ ƒ } t | ƒ sa t ‚ d  S(   Ns   palette_gray.pngs   palette_color.png(   R   t   openR"   R/   R0   R   R   R&   (   t   grayt   color(    (    s8   lib/python2.7/site-packages/skimage/io/tests/test_pil.pyt   test_palette_is_grayw   s    c          C   sN   t  j d ƒ }  d |  d  d  d … <t t j j t d ƒ ƒ } t | |  ƒ d  S(   Ni
   iÿ   i   s   checker_bilevel.png(   i
   i
   (   R    t   zerosR   R"   R/   R0   R   R   (   t   expectedR2   (    (    s8   lib/python2.7/site-packages/skimage/io/tests/test_pil.pyt   test_bilevel~   s    c          C   sh   t  j t j j t d ƒ ƒ }  t t j j t d ƒ ƒ } t  j | j t  j	 ƒ sW t
 ‚ t | |  ƒ d  S(   Ns   chessboard_GRAY_U8.npys   chessboard_GRAY_U16.tif(   R    t   loadR"   R/   R0   R   R   t
   issubdtypeR7   t   uint16R&   R   (   RL   R2   (    (    s8   lib/python2.7/site-packages/skimage/io/tests/test_pil.pyt   test_imread_uint16†   s    c           C   s3   t  j t ƒ  t t j j t d ƒ ƒ Wd  QXd  S(   Ns   truncated.jpg(   R   t   raisest   IOErrorR   R"   R/   R0   R   (    (    (    s8   lib/python2.7/site-packages/skimage/io/tests/test_pil.pyt   test_imread_truncated_jpg   s    c       
   C   s   t  j t j j t d ƒ ƒ }  t d d ƒ ] } t | |  d d ƒt | ƒ } t	 |  | d |  j
 ƒ  |  j ƒ  ƒ} | d k s† t ‚ Wd  QXd  S(   Ns   chessboard_GRAY_U8.npyR   s   .jpgt   qualityi_   t
   data_rangeg®Gáz®ï?(   R    RN   R"   R/   R0   R   R   R   R   t   ssimt   maxt   minR&   (   t
   chessboardt   jpgt   imt   sim(    (    s8   lib/python2.7/site-packages/skimage/io/tests/test_pil.pyt   test_jpg_quality_arg’   s    c          C   sb   t  j t j j t d ƒ ƒ }  t t j j t d ƒ ƒ } | j t  j k sQ t	 ‚ t
 | |  ƒ d  S(   Ns   chessboard_GRAY_U8.npys   chessboard_GRAY_U16B.tif(   R    RN   R"   R/   R0   R   R   R7   RP   R&   R   (   RL   R2   (    (    s8   lib/python2.7/site-packages/skimage/io/tests/test_pil.pyt   test_imread_uint16_big_endianœ   s    t   TestSavec           B   sA   e  Z d  „  Z d „  Z d d „ Z d „  Z d „  Z d „  Z RS(   c         C   s9   t  d d ƒ $ } t | | ƒ t | ƒ } | SWd  QXd  S(   NR   s   .png(   R   R   R   (   R   R?   R(   t   y(    (    s8   lib/python2.7/site-packages/skimage/io/tests/test_pil.pyt   roundtrip_file¤   s    c         C   s   t  | ƒ } t | ƒ } | S(   N(   R
   R	   (   R   R?   t	   pil_imageRa   (    (    s8   lib/python2.7/site-packages/skimage/io/tests/test_pil.pyt   roundtrip_pil_imageª   s    i   c         C   s!   t  | | j t j ƒ | ƒ d  S(   N(   R   t   astypeR    t   int32(   R   R7   R?   Ra   t   scaling(    (    s8   lib/python2.7/site-packages/skimage/io/tests/test_pil.pyt   verify_roundtrip¯   s    c         c   sÎ   xÇ d d d g D]¶ } x­ t  j t  j t  j t  j f D] } t  j | d | ƒt  j j | Œ  } t  j | t  j	 ƒ r• |  j
 | | | | ƒ d f Vq5 | d j | ƒ } |  j
 | | | | ƒ f Vq5 Wq Wd  S(	   Ni
   i   i   R7   iÿ   (   i
   i
   (   i
   i
   i   (   i
   i
   i   (   R    RD   RP   t   float32R8   t   onesR<   R=   RO   t   floatingRh   Re   (   R   t   roundtrip_functionR>   R7   R?   (    (    s8   lib/python2.7/site-packages/skimage/io/tests/test_pil.pyt   verify_imsave_roundtrip²   s    %%c         C   s   |  j  |  j ƒ d  S(   N(   Rm   Rb   (   R   (    (    s8   lib/python2.7/site-packages/skimage/io/tests/test_pil.pyt   test_imsave_roundtrip_file¿   s    c         C   s   |  j  |  j ƒ d  S(   N(   Rm   Rd   (   R   (    (    s8   lib/python2.7/site-packages/skimage/io/tests/test_pil.pyt   test_imsave_roundtrip_pil_imageÂ   s    (   t   __name__t
   __module__Rb   Rd   Rh   Rm   Rn   Ro   (    (    (    s8   lib/python2.7/site-packages/skimage/io/tests/test_pil.pyR`   £   s   				c          C   s¨   t  d d ƒ “ }  t j t ƒ 5 t |  d g ƒ  t |  t j d ƒ ƒ Wd  QXWd  QXt j t ƒ 5 t |  d g ƒ  t |  t j d ƒ ƒ Wd  QXWd  QXWd  QXd  S(	   NR   s   .pngs    is a low contrast imagei   i   i   (   i   i   i   i   (   i   i   i   (   R   R   RR   t
   ValueErrorR   R   R    RK   (   R(   (    (    s8   lib/python2.7/site-packages/skimage/io/tests/test_pil.pyt   test_imsave_incorrect_dimensionÆ   s    "c          C   s~   d }  t  j |  ƒ } t ƒ  } t d d g ƒ  t | | ƒ Wd  QX| j d ƒ t | ƒ } t | j |  ƒ t	 | | ƒ d  S(   Ni   s   precision losss   is a low contrast imagei    (   i   i   (
   R    RK   R    R   R   t   seekR   R   R>   R   (   R>   t   imaget   st   out(    (    s8   lib/python2.7/site-packages/skimage/io/tests/test_pil.pyt   test_imsave_filelikeÐ   s    	c          C   s„   d }  t  j d t  j |  Œ } t ƒ  } t d g ƒ  t | | ƒ Wd  QX| j d ƒ t | ƒ } t | j	 |  ƒ t
 | | ƒ d  S(   Ni   R7   s4   is a boolean image: setting True to 1 and False to 0i    (   i   i   (   R    R!   t   boolR    R   R   Rt   R   R   R>   R   (   R>   Ru   Rv   Rw   (    (    s8   lib/python2.7/site-packages/skimage/io/tests/test_pil.pyt   test_imsave_boolean_inputá   s    	c          C   sW   d }  t  j |  ƒ } t d g ƒ  t | ƒ } Wd  QXt | ƒ } t | j |  ƒ d  S(   Ni   s   precision loss(   i   i   (   R    RK   R   R
   R	   R   R>   (   R>   Ru   Rc   Rw   (    (    s8   lib/python2.7/site-packages/skimage/io/tests/test_pil.pyt   test_imexport_imimportò   s    c           C   sG   t  d g ƒ  t d ƒ Wd  QXt  d g ƒ  t d d ƒ Wd  QXd  S(   Ns   .* is a boolean imageR   t   bmp(   R   R   (    (    (    s8   lib/python2.7/site-packages/skimage/io/tests/test_pil.pyt   test_all_colorû   s    c           C   s$   t  d g ƒ  t d ƒ Wd  QXd  S(   Ns   .* is a boolean imageR   (   R   R   (    (    (    s8   lib/python2.7/site-packages/skimage/io/tests/test_pil.pyt   test_all_mono  s    c          C   s„   t  t j j t d ƒ ƒ }  |  j d k s9 t |  j ƒ ‚ t  t j j t d ƒ d d ƒ} | j d	 k so t ‚ t |  d | ƒ d  S(
   Ns   no_time_for_that_tiny.gifi   i   i   i   t   img_numi   (   i   i   i   i   (   i   i   i   (   R   R"   R/   R0   R   R>   R&   R   (   R2   t   img2(    (    s8   lib/python2.7/site-packages/skimage/io/tests/test_pil.pyt   test_multi_page_gif  s    	c          C   s_  t  t j j t d ƒ ƒ }  t j t j j t d ƒ ƒ } | j d ƒ } t d d ƒ } | j	 } | j
 ƒ  | j | ƒ y | j
 ƒ  Wn t k
 r˜ n Xt  | ƒ } t |  ƒ } t | ƒ } x› t d ƒ D] } t j | d  d  … d  d  … | f ƒ } t j | d  d  … d  d  … | f ƒ }	 t |	 | d |	 j ƒ  |	 j ƒ  ƒ}
 |
 d k sÊ t ‚ qÊ Wd  S(   Ns	   color.pngt   CMYKR   s   .jpgi   RV   g®Gáz®ï?(   R   R"   R/   R0   R   R   RG   t   convertR   R   R   t   savet   AttributeErrorR   t   rangeR    t   ascontiguousarrayRW   RX   RY   R&   (   t   refR2   R'   R(   t   newt   ref_labt   new_labt   it   newit   refiR]   (    (    s8   lib/python2.7/site-packages/skimage/io/tests/test_pil.pyt	   test_cmyk  s&    	
((%c          C   s/   t  t j j t d ƒ ƒ }  t |  j d ƒ d  S(   Ns   green_palette.pngi   (   R   R"   R/   R0   R   R   R6   (   R2   (    (    s8   lib/python2.7/site-packages/skimage/io/tests/test_pil.pyt   test_extreme_palette+  s    (    (@   R"   t   numpyR    t   sixR    t   tempfileR   t    R   R   R   R   R   R   t   PILR   t   _plugins.pil_pluginR	   R
   R   t   measureR   RW   RI   R   t   skimage._sharedR   t   skimage._shared.testingR   R   R   R   R   R   t   skimage._shared._warningsR   t   skimage._shared._tempfileR   R   R   R   R+   R4   R;   R@   RA   RB   RF   RJ   RM   RQ   RT   R^   R_   R`   Rs   Rx   Rz   R{   R}   R~   R   R   R   (    (    (    s8   lib/python2.7/site-packages/skimage/io/tests/test_pil.pyt   <module>   sN   ".						
									
	#	
									