ó
O'—^c           @   s¯  d  d l  m Z m Z m Z m Z m Z m Z d Z e j Z e j	 Z
 e j Z e j Z d „  Z d e j f d „  ƒ  YZ y d  d l Z Wn e k
 r£ d Z n Xi d d 6d d 6d	 d	 6Z e d
 „ Z d „  Z e d „ Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z e Z d „  Z  d d d „ Z! d d „ Z" e j# e j$ e e ƒ e j% e j$ e ƒ e j& e j$ e ƒ e j' e j$ d ƒ e j( e j$ d ƒ d S(   iÿÿÿÿ(   t   Imaget	   ImageFilet   ImagePalettet
   ImageChopst   ImageSequencet   _binarys   0.9c         C   s   |  d  d k S(   Ni   t   GIF87at   GIF89a(   R   R   (    (   t   prefix(    (    s4   /tmp/pip-unpacked-wheel-ivxKtu/PIL/GifImagePlugin.pyt   _accept-   s    t   GifImageFilec           B   sn   e  Z d  Z d Z d
 Z d „  Z d „  Z e d „  ƒ Z	 e d „  ƒ Z
 d „  Z d „  Z d „  Z d	 „  Z RS(   t   GIFs   Compuserve GIFc         C   s>   |  j  j d ƒ } | r: t | ƒ r: |  j  j t | ƒ ƒ Sd  S(   Ni   (   t   fpt   readt   i8t   None(   t   selft   s(    (    s4   /tmp/pip-unpacked-wheel-ivxKtu/PIL/GifImagePlugin.pyt   data;   s    c         C   s¡  |  j  j d ƒ } | d  d k r1 t d ƒ ‚ n  | d  |  j d <t | d ƒ t | d ƒ f |  _ g  |  _ t | d ƒ } | d	 @d
 } | d @r`t | d ƒ |  j d <|  j  j d | >ƒ } xš t d t	 | ƒ d ƒ D]} } | d t | | ƒ k o.t | | d
 ƒ k o.t | | d ƒ k n sÜ t
 j d | ƒ } | |  _ |  _ PqÜ qÜ Wn  |  j  |  _ |  j  j ƒ  |  _ d  |  _ d  |  _ |  j d ƒ d  S(   Ni   i   R   R   s   not a GIF filet   versioni   i
   i   i   i€   i   t
   backgroundi   i    i   t   RGB(   R   R   (   R   R   t   SyntaxErrort   infot   i16t   sizet   tileR   t   ranget   lenR   t   rawt   global_palettet   palettet   _GifImageFile__fpt   tellt   _GifImageFile__rewindR   t	   _n_framest   _is_animatedt   _seek(   R   R   t   flagst   bitst   pt   i(    (    s4   /tmp/pip-unpacked-wheel-ivxKtu/PIL/GifImagePlugin.pyt   _openA   s*    #	
Q		c         C   s   |  j  d  k rz |  j ƒ  } y( x! t rA |  j |  j ƒ  d ƒ q! WWn$ t k
 ri |  j ƒ  d |  _  n X|  j | ƒ n  |  j  S(   Ni   (   R#   R   R!   t   Truet   seekt   EOFError(   R   t   current(    (    s4   /tmp/pip-unpacked-wheel-ivxKtu/PIL/GifImagePlugin.pyt   n_frames_   s    	c         C   si   |  j  d  k rb |  j ƒ  } y |  j d ƒ t |  _  Wn t k
 rQ t |  _  n X|  j | ƒ n  |  j  S(   Ni   (   R$   R   R!   R,   R+   R-   t   False(   R   R.   (    (    s4   /tmp/pip-unpacked-wheel-ivxKtu/PIL/GifImagePlugin.pyt   is_animatedk   s    c         C   s¢   | |  j  k r d  S| |  j  k  r2 |  j d ƒ n  |  j  } x` t |  j  d | d ƒ D]D } y |  j | ƒ WqV t k
 r™ |  j | ƒ t d ƒ ‚ qV XqV Wd  S(   Ni    i   s   no more images in GIF file(   t   _GifImageFile__frameR%   R   R-   R,   (   R   t   framet
   last_framet   f(    (    s4   /tmp/pip-unpacked-wheel-ivxKtu/PIL/GifImagePlugin.pyR,   y   s    	!c         C   s  | d k rd d |  _  d  |  _ d d d d g |  _ d |  _ |  j j |  j ƒ d  |  _ d |  _	 n |  j
 sz |  j ƒ  n  | |  j d k r  t d | ƒ ‚ n  | |  _ g  |  _ |  j |  _ |  j  rù |  j j |  j  ƒ x |  j ƒ  rì qÝ Wd |  _  n  |  j r|  j
 j |  j |  j ƒ n  d d l m } | |  j ƒ |  _ xït r1|  j j d ƒ } | sn| d k rrPqC| d k rö|  j j d ƒ } |  j ƒ  } t | ƒ d k r)t | d ƒ } | d @rât | d	 ƒ |  j d
 <n  t | d d	 !ƒ d |  j d <d | @} | d ?} | rà| |  _	 qàn· t | ƒ d k rK| |  j d <n• t | ƒ d k rà| |  j j ƒ  f |  j d <| d  d k rà|  j ƒ  } t | ƒ d	 k rÝt | d ƒ d k rÝt | d d	 !ƒ |  j d <qÝqàn  xK|  j ƒ  ròqãWqC| d k rC|  j j d ƒ } t | d ƒ t | d ƒ } } | t | d ƒ | t | d ƒ }	 }
 | | |	 |
 f |  _ t | d ƒ } | d @d k } | d @rÓ| d @d } t j d |  j j d	 | >ƒ ƒ |  _ n  t |  j j d ƒ ƒ } |  j j ƒ  |  _  d | | |	 |
 f |  j  | | f f g |  _ PqCqCWy˜ |  j	 d k  rPd  |  _ nU |  j	 d k r‡t j j d  |  j  |  j d! ƒ |  _ n |  j
 r¥|  j
 j ƒ  |  _ n  |  j rÉ|  j j! |  j ƒ |  _ n  Wn t" t# f k
 rãn X|  j söt$ ‚ n  d" |  _% |  j rd  |  _% n  d  S(#   Ni    iÿÿÿÿi   s   cannot seek to frame %d(   t   copyt   ;t   !iù   i   t   transparencyi
   t   durationi   i   iþ   t   commentiÿ   t	   extensioni   s   NETSCAPE2.0t   loopt   ,i	   i   i   i   i@   i€   i   R   t   gift   PR   t   L(&   t   _GifImageFile__offsetR   t   disposet   dispose_extentR2   R    R,   R"   t   _prev_imt   disposal_methodt   imt   loadt
   ValueErrorR   R   R   t   pasteR6   R   R   R+   R   R   R   R   R!   R   R   R   R    t   coret   fillR   t   cropt   AttributeErrort   KeyErrorR-   t   mode(   R   R3   R6   R   t   blockR&   t   dispose_bitst   x0t   y0t   x1t   y1t	   interlaceR'   (    (    s4   /tmp/pip-unpacked-wheel-ivxKtu/PIL/GifImagePlugin.pyR%   ‡   sª    										


(#!)
(						c         C   s   |  j  S(   N(   R2   (   R   (    (    s4   /tmp/pip-unpacked-wheel-ivxKtu/PIL/GifImagePlugin.pyR!     s    c         C   s„   t  j  j |  ƒ |  j rn |  j d k rn |  j j |  j ƒ } |  j j | |  j | j d ƒ ƒ |  j |  _ n  |  j j	 ƒ  |  _ d  S(   Ni   t   RGBA(
   R   t   load_endRE   RF   RG   RM   RD   RJ   t   convertR6   (   R   t   updated(    (    s4   /tmp/pip-unpacked-wheel-ivxKtu/PIL/GifImagePlugin.pyRY     s    N(   t   __name__t
   __module__t   formatt   format_descriptionR   R   R   R*   t   propertyR/   R1   R,   R%   R!   RY   (    (    (    s4   /tmp/pip-unpacked-wheel-ivxKtu/PIL/GifImagePlugin.pyR
   5   s   				Ž	NRA   t   1R@   c         C   sƒ   t  j |  j ƒ d k rv | rf d } |  j rM t |  j j ƒ  d ƒ d } n  |  j d d d d | ƒS|  j d ƒ Sn  |  j d ƒ S(	   NR   i   i   i   R@   R   t   colorsRA   (   R    t   getmodebaseRP   R   R   t   getdataRZ   (   RG   t   initial_callt   palette_size(    (    s4   /tmp/pip-unpacked-wheel-ivxKtu/PIL/GifImagePlugin.pyt   _convert_mode5  s    	 c         C   s   t  |  | | d t ƒd  S(   Nt   save_all(   t   _saveR+   (   RG   R   t   filename(    (    s4   /tmp/pip-unpacked-wheel-ivxKtu/PIL/GifImagePlugin.pyt	   _save_allC  s    c         C   s  |  j  j |  j ƒ t rK y t j |  | | ƒ d  SWqK t k
 rG qK Xn  |  j t k ri |  j ƒ  } n t	 |  t
 ƒ } y |  j  d } Wn3 t k
 r¾ d  } |  j  j d t
 ƒ |  j  d <n X| rd  } d  } |  j  j d g  ƒ } x |  g | D]}	 xt j |	 ƒ D]÷ }
 |  j  j ƒ  } t	 |
 ƒ }
 | s`t |
 | | ƒ d } | t |
 d |  7} n› | rx | D] } | j | ƒ qmWd  } n  t j |
 | j ƒ  ƒ } | j ƒ  } | rût
 | d <x7 t |
 j | ƒ | d  |  D] } | j | ƒ qáWn  |
 } q
Wqô W| rt } qn  | sßt | | |  j  ƒ d } x | D] } | j | ƒ qAWd } t |  ƒ rw| d B} n  t | |  d | ƒ d t |  ƒ f | _ t j | | d	 d |  j d t | j f g ƒ | j d
 ƒ n  | j d ƒ t | d ƒ r| j ƒ  n  d  S(   NR   t   optimizet   append_imagesi    t   include_color_tablei   i@   i   R?   s    R7   t   flush(   i    i    (   i    i    (   i    i    (    t   encoderinfot   updateR   t   _imaging_gift   savet   IOErrorRP   t   RAWMODER6   Rg   R+   RO   R   t   getR   t   Iteratort	   getheaderRd   t   writeR   t   subtract_modulot   getbboxRM   R0   t   get_interlacet   _get_local_headert   encoderconfigR   Ri   R   t   hasattrRo   (   RG   R   Rj   Rh   t   im_outR   t   previoust   first_frameRm   t
   imSequencet   im_frameRp   R   t   deltat   bboxt   headerR&   (    (    s4   /tmp/pip-unpacked-wheel-ivxKtu/PIL/GifImagePlugin.pyRi   G  sn     	
c         C   sM   y |  j  d } Wn t k
 r* d } n Xt |  j ƒ d k  rI d } n  | S(   NRW   i   i   i    (   Rp   RO   t   minR   (   RG   RW   (    (    s4   /tmp/pip-unpacked-wheel-ivxKtu/PIL/GifImagePlugin.pyR|     s    
	c         C   sd  t  } y | j d } Wn t k
 r* nŒ Xt | ƒ } t } t | | j ƒ r¶ t | ƒ } t | ƒ d k  r¶ xC t t | ƒ ƒ D], } | | | k r¦ | } t } Pq€ t  } q€ Wq¶ n  d | j k rß t | j d d ƒ } n d } | s÷ | d k rd| rd n d }	 | sd } n  |  j	 d t
 d ƒ t
 d	 ƒ t
 |	 ƒ t | ƒ t
 | ƒ t
 d ƒ ƒ n  d
 | j k râd t | j d
 ƒ k o—d k n râ|  j	 d t
 d ƒ t
 t | j d
 ƒ ƒ | j d
 t
 d ƒ ƒ n  d | j k rN| j d }
 |  j	 d t
 d ƒ t
 d ƒ d t
 d ƒ t
 d ƒ t |
 ƒ t
 d ƒ ƒ n  | j j d ƒ } | rÖy | j d } Wn t k
 rd  } n Xt | | | j ƒ d } t | ƒ } | rÖ| d B} | | B} qÖn  |  j	 d t | d ƒ t | d ƒ t | j d ƒ t | j d ƒ t
 | ƒ ƒ | rM| rM|  j	 t | ƒ ƒ n  |  j	 t
 d ƒ ƒ d  S(   NR9   i   R:   i
   i    i   R8   iù   i   R;   iÿ   iþ   R=   i   s   NETSCAPE2.0i   Rn   R   i€   R>   i   (   R0   Rp   RO   t   intR+   t   _get_optimizet   _get_used_palette_colorsR   R   Ry   t   o8t   o16Rv   R   t   _get_palette_bytest   _get_color_table_sizeR   t   _get_header_palette(   R   RG   t   offsetR&   t   transparent_color_existsR9   t   used_palette_colorsR)   R:   t   transparency_flagt   number_of_loopsRn   R   t   palette_bytest   color_table_size(    (    s4   /tmp/pip-unpacked-wheel-ivxKtu/PIL/GifImagePlugin.pyR}   ª  sh    	58/9

Ac         C   s—  d d  l  } d d l m } m } m } m } d d  l } |  j ƒ  }	 |  j d k r˜ t	 | d ƒ / }
 | j
 ƒ  } | d |	 g d |
 d | ƒWd  QXnÖ t	 | d ƒ Å }
 d d	 |	 g } d g } | j
 ƒ  } | | d | d | ƒ} | j
 ƒ  } | | d
 | j d |
 d | ƒ} | j j ƒ  | j ƒ  } | rD| | | ƒ ‚ n  | j ƒ  } | rh| | | ƒ ‚ n  Wd  QXy | j |	 ƒ Wn t k
 r’n Xd  S(   Niÿÿÿÿ(   t   Popent
   check_callt   PIPEt   CalledProcessErrorR   t   wbt   ppmtogift   stdoutt   stderrt   ppmquantt   256t   stdin(   t   ost
   subprocessR˜   R™   Rš   R›   t   tempfilet   _dumpRP   t   opent   TemporaryFileRž   t   closet   waitt   unlinkt   OSError(   RG   R   Rj   R£   R˜   R™   Rš   R›   R¥   t   fileR5   RŸ   t	   quant_cmdt	   togif_cmdt
   quant_proct
   togif_proct   retcode(    (    s4   /tmp/pip-unpacked-wheel-ivxKtu/PIL/GifImagePlugin.pyt   _save_netpbmú  s6    "%		c         C   s%   |  j  d k o$ | o$ | j d d ƒ S(   NR@   RA   Rl   i    (   R@   RA   (   RP   Rv   (   RG   R   (    (    s4   /tmp/pip-unpacked-wheel-ivxKtu/PIL/GifImagePlugin.pyRŠ   +  s    c         C   sG   g  } d } x4 |  j  ƒ  D]& } | r5 | j | ƒ n  | d 7} q W| S(   Ni    i   (   t	   histogramt   append(   RG   R“   R)   t   count(    (    s4   /tmp/pip-unpacked-wheel-ivxKtu/PIL/GifImagePlugin.pyR‹   /  s    c         C   sT   d d  l  } t | j | j t |  ƒ d d ƒ ƒ ƒ d } | d k  rP d } n  | S(   Niÿÿÿÿi   i   i   i    (   t   mathR‰   t   ceilt   logR   (   R–   R·   R—   (    (    s4   /tmp/pip-unpacked-wheel-ivxKtu/PIL/GifImagePlugin.pyR   ;  s
    /	c         C   sO   t  |  ƒ } d | >t |  ƒ d } | d k rK |  t d ƒ d | 7}  n  |  S(   Ni   i   i    (   R   R   RŒ   (   R–   R—   t   actual_target_size_diff(    (    s4   /tmp/pip-unpacked-wheel-ivxKtu/PIL/GifImagePlugin.pyR   C  s
    c         C   sL  |  j  d k rJ | r1 t | t ƒ r1 | d  } q• |  j j d ƒ d  } nK | rl t | t ƒ rl | d  } n) t g  t d ƒ D] } | d ^ q| ƒ } d  } } t |  | ƒ r3t	 |  ƒ } t
 s|  j  d k st | ƒ d k r3t | ƒ t | ƒ k r3|  j |  j d k  r3d } d	 g d
 } xA t | ƒ D]3 \ } } | | | d | d d !7} | | | <q/Wt | ƒ }	 |  j ƒ  }
 d |
 _  t j d d |	 d d d ƒ|
 _ |
 j j |
 j j ƒ  Œ  |
 j d ƒ }
 | d t | ƒ d } |
 j | ƒ t j d d | d t | ƒ ƒ|
 _ |  j |
 j ƒ  ƒ q3n  | sB| } n  | | f S(   NR@   i   R   i   RA   i€   i   t    i    i   R   R   s    i   (   RP   t
   isinstancet   bytesRG   t
   getpalettet	   bytearrayR   R   RŠ   R‹   t   _FORCE_OPTIMIZER   t   maxt   widtht   heightt	   enumerateR6   R   R   t
   putpaletteRd   RZ   t	   frombytest   tobytes(   RG   R   R   t   source_paletteR)   R“   R–   t   new_positionst   oldPositiont   mapping_palettet   m_imt   new_palette_bytes(    (    s4   /tmp/pip-unpacked-wheel-ivxKtu/PIL/GifImagePlugin.pyRŽ   Q  sJ    )
	
	c   
      C   s  d } x¬ d d d d g D]w } | r | | k r | d k rM | | d k s | d k r† d t  | | ƒ k oz d k n r† q n  d	 } Pq q W|  j j d
 ƒ d	 k rµ d	 } n  d | t |  j d ƒ t |  j d ƒ g } t |  | | ƒ \ } } t | ƒ } | j t | d ƒ ƒ | r>d | k r>| d }	 n% d |  j k r]|  j d }	 n d }	 | j t |	 ƒ t d ƒ ƒ | j t	 | ƒ ƒ | | f S(   s2   Return a list of strings representing a GIF headert   87aR9   R:   R=   R;   i    i   iÿ   t   89aR   R   i€   R   (
   R   R   Rv   R   R   RŽ   R   Rµ   RŒ   R   (
   RG   R   R   R   t   extensionKeyR‡   R–   R“   R—   R   (    (    s4   /tmp/pip-unpacked-wheel-ivxKtu/PIL/GifImagePlugin.pyRx   ¬  s.    3	i    c         K   s—   d t  f d „  ƒ  Y} |  j ƒ  | ƒ  } z] | |  _ t | |  | d ƒ t j |  | d d |  j d t |  j f g ƒ | j	 d ƒ Wd |  ` X| j
 S(   s   Return a list of strings representing this image.
       The first string is a local image header, the rest contains
       encoded image data.t	   Collectorc           B   s   e  Z g  Z d  „  Z RS(   c         S   s   |  j  j | ƒ d  S(   N(   R   Rµ   (   R   R   (    (    s4   /tmp/pip-unpacked-wheel-ivxKtu/PIL/GifImagePlugin.pyRy   å  s    (   R\   R]   R   Ry   (    (    (    s4   /tmp/pip-unpacked-wheel-ivxKtu/PIL/GifImagePlugin.pyRÑ   â  s   i    R?   s    N(   i    i    (   t   objectRH   Rp   R}   R   Ri   R   Ru   RP   Ry   R   (   RG   R‘   t   paramsRÑ   R   (    (    s4   /tmp/pip-unpacked-wheel-ivxKtu/PIL/GifImagePlugin.pyRd   Ý  s    
		0s   .gifs	   image/gif(   i    i    ()   t   PILR    R   R   R   R   R   t   __version__R   t   i16leR   RŒ   t   o16leR   R	   R
   Rr   t   ImportErrorR   Ru   R0   Rg   Rk   Ri   R|   R}   R³   RŠ   R‹   R   R   RÀ   RŽ   Rx   Rd   t   register_openR^   t   register_savet   register_save_allt   register_extensiont   register_mime(    (    (    s4   /tmp/pip-unpacked-wheel-ivxKtu/PIL/GifImagePlugin.pyt   <module>   sD   .					ô

	V		P	1					[1"