
    zvgE                      d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
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mZ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dlm$Z$ ddl%m&Z& ddl'm(Z( ddl)m*Z* ddlm+Z+ erddl'm,Z,m-Z-  ej.        e/          Z0dZ1dZ2dZ3dZ4dZ5dZ6dZ7dZ8dZ9dZ:dZ;dZ<dZ=dZ>dZ?dZ@d ZAd!ZBd"ZCd#ZDd$ZEd%ZFd&ZGd'ZHd(ZId)ZJd*ZKd+ZLd,ZMd-ZNd.ZOd/ZPd0ZQd1ZRd2ZSd3ZTd4ZUd5ZVd6ZWd7ZXd8ZYd9ZZd:Z[d;Z\d<Z]d=Z^i dd>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^Z_d_ e_`                                D             Zai e4d d`dd`dafdbe5d d`dd`dafdbe4d d`d?d`dafdce5d d`d?d`dafdce4dd`dd`dafdde5dd`dd`dafdde4dd`d?d`dafdee5dd`d?d`dafdee4d d`ddfdafdge5d d`ddfdafdge4d d`d?dfdafdhe5d d`d?dfdafdhe4dd`ddfdafdie5dd`ddfdafdie4dd`d?dfdafdje5dd`d?dfdafdje4d d`ddkdafdli e5d d`ddkdafdle4d d`d?dkdafdme5d d`d?dkdafdme4dd`ddkdafdne5dd`ddkdafdne4dd`d?dkdafdoe5dd`d?dkdafdoe4d d`ddpdafdqe5d d`ddpdafdqe4d d`d?dpdafdre5d d`d?dpdafdre4dd`ddpdafdse5dd`ddpdafdse4ddfddpdafdse5ddfddpdafdse4dd`d?dpdafdte5dd`d?dpdafdti e4dd`ddudafdve4d d`ddwdafdxe4dd`ddwdafdxe5dd`ddwdafdye4dd`d?dwdafdze4ddfddwdafd{e5ddfddwdafd|e4d d}dd~dafde5d d}dd~dafde4dd`dd~dafde4ddfdd~dafde5ddfdd~dafde4dd}dd~dafde5dd}dd~dafde4dd`dddffde5dd`dddffde4d?d`dddafdi e5d?d`dddafde4d?d`d?ddafde5d?d`d?ddafde4d?d`dddafde5d?d`dddafde4d?d`dddfde5d?d`dddfde4d?d`dddfde5d?d`dddfde4d?d`dddfde5d?d`dddfde4d?d`ddd`fde5d?d`ddd`fde4d?d`dddfde5d?d`dddfde4d?d`dddfde5d?d`dddfdi e4d?d`dddffde5d?d`dddffde4d?d`dddfde5d?d`dddfde4d?d`dddfde5d?d`dddfde4d?d`dddfde5d?d`dddfde4d?d`dddafde5d?d`dddafde4d?d`dddafde5d?d`dddafde4d?d`dddfde5d?d`dddfde4d?d`ddd`fde5d?d`ddd`fde4d?d`dddffdi e5d?d`dddffde4dAd`dd`dafde5dAd`dd`dafde4dAd`d?d`dafde5dAd`d?d`dafde4dAd`ddfdafde5dAd`ddfdafde4dAd`d?dfdafde5dAd`d?dfdafde4dAd`ddkdafde5dAd`ddkdafde4dAd`d?dkdafde5dAd`d?dkdafde4dAd`ddpdafde5dAd`ddpdafde4dAd`dddfde4dAd`dddffdi e5dAd`dddffde4dAd`d?dpdafde5dAd`d?dpdafde4dEd`dddafde5dEd`dddafde4dEd`dddfde5dEd`dddfde4dEd`dddfde5dEd`dddfde4dEd`dddafde5dEd`dddafde4dGd`ddpdafdse5dGd`ddpdafdse4dGd`dddafde5dGd`dddafde4dKd`dddafde5dKd`dddafdZb ecd ebD                       Zdg dZe efejg        dd          s e&dd           ddZhddǄZid	dʄZji Zki Zld
d΄Zm G dτ de          Znedeoepgef         ZqddԄZrddքZsddڄZtereeuef         ZvneZv G dۄ dev          Zwekew_k        elew_l         e+j`                    D ]M\  ZxZyeyz                    ddݦ          Zy e{ewdey ekex         d                     e{ewdey elex                    N[k[l[x[y G d dew          Z|e|Z} G d dej                  Z~i dde4ddd`dfdde4dddpdfdde4dddd?fdde4dAddpdfdde4dAddd?fdde4dd?d~dfdde4dddwdfdde4dd?dwdfdde4ddAd~dfdde4d?dddfdde4d?ddd fdde4d?ddd?fdde4dEdddfdde4dGdddfdde4dKdddfdde5dd?d~dfdde5dddwdfde5dd?dwdfde5ddAd~dfdZdd Z G d dej                  ZddZ ej        e~j        e~eh            ej        e~j        e            ej        e~j        e            ej        e~j        ddg            ej        e~j        d           dS (      )annotationsN)IteratorMutableMapping)Fraction)NumberRational)IOTYPE_CHECKINGAnyCallableNoReturncast   )ExifTagsImage	ImageFileImageOpsImagePaletteTiffTags)i16be)i32beo8)	deprecate)StrOrBytesPath)is_pathTYPES)BufferIntegralLikeF   s   IIs   MM      i  i  i  i  i
  i    i  i  i  i  i  i  i(  i-  i1  i2  i;  i=  i@  iB  iC  D  iE  iJ  iR  iS  i[  i  i  i  i  iI  is  ii  i  i  i  i  raw   
tiff_ccitt   group3   group4   tiff_lzw   	tiff_jpeg   jpeg   tiff_adobe_deflatei  tiff_raw_16i  packbitsi)  tiff_thunderscani  tiff_deflateit  tiff_sgilogiu  tiff_sgilog24im  lzmaiP  zstdiQ  webpc                    i | ]\  }}||	S  r?   ).0kvs      P/var/www/pixelcanvas.ch/venv/lib/python3.11/site-packages/PIL/TiffImagePlugin.py
<dictcomp>rD      s    BBBA1BBB    r   r?   )1z1;I)rG   z1;IR)rG   rG   )rG   z1;R)r'   )LzL;2I)rH   zL;2IR)rH   zL;2)rH   zL;2R)r+   )rH   zL;4I)rH   zL;4IR)rH   zL;4)rH   zL;4R)r3   )rH   zL;I)rH   zL;IR)rH   rH   )rH   zL;R)   )I;16zI;12)   )rJ   rJ   )I;16BrL   )rJ   zI;16R)II;16S)rM   I;16BS)r)   )    )FF;32F)rQ   F;32BF)rM   zI;32N)rM   I;32S)rM   I;32BS)r3   r3   )LArV   )r3   r3   r3   )RGBrW   )rW   zRGB;R)r3   r3   r3   r3   )RGBArX   r   )rW   RGBX)r3   r3   r3   r3   r3   r   r   )rW   RGBXX)r3   r3   r3   r3   r3   r3   )r   r   r   )rW   RGBXXX)rX   RGBa)r   r   )rX   RGBaX)r   r   r   )rX   RGBaXX)r'   r   )rX   RGBAX)r'   r   r   )rX   RGBAXX)i  )rK   rK   rK   )rW   zRGB;16L)rW   zRGB;16B)rK   rK   rK   rK   )rX   zRGBA;16L)rX   zRGBA;16B)rW   zRGBX;16L)rW   zRGBX;16B)rX   zRGBa;16L)rX   zRGBa;16B)PzP;1)rc   zP;1R)rc   zP;2)rc   zP;2R)rc   zP;4)rc   zP;4R)rc   rc   )rc   PX)PAre   )rc   zP;R)CMYKrf   )rf   CMYKX)rf   CMYKXX)rf   zCMYK;16L)rf   zCMYK;16B)LABri   c              #  @   K   | ]}t          |d                    V  dS )r+   N)len)r@   key_tps     rC   	<genexpr>rm     s,      AAV#fQi..AAAAAArE   )   MM *   II* s   MM* s   II *s   MM +s   II+ libtiff_support_custom_tagsTz*Support for LibTIFF earlier than version 4rI   prefixbytesreturnboolc                $    | d d         t           v S Nr+   )PREFIXESrq   s    rC   _acceptry   "  s    "1":!!rE   valfloat | Fraction | IFDRationalmax_valint!tuple[IntegralLike, IntegralLike]c                    t          |           dk    }t          |rd| z  n|                               |          }|r|d d d         n|S )Nr   )absIFDRationallimit_rational)rz   r|   invn_ds       rC   _limit_rationalr   &  sT     c((Q,C
-a#gg#
.
.
=
=g
F
FC$3ttt99$rE   r   min_valc                J   t          |           }|j        |j        f}t          d |D                       |k     rt	          | t          |                    }t          d |D                       }t          |          |k    rt	          |d         |d         z  |          }|S )Nc              3  4   K   | ]}t          |          V  d S Nfloatr@   is     rC   rm   z)_limit_signed_rational.<locals>.<genexpr>4  s(      
!
!588
!
!
!
!
!
!rE   c              3  4   K   | ]}t          |          V  d S r   r   r   s     rC   rm   z)_limit_signed_rational.<locals>.<genexpr>7  s(      ,,1eAhh,,,,,,rE   r   r   )r   	numeratordenominatorminr   r   tuplemax)rz   r|   r   fracr   	n_d_floats         rC   _limit_signed_rationalr   .  s     C==D-1^T=M-MC

!
!S
!
!
!!!G++c3w<<00,,,,,,,I
9~~ilYq\97CCJrE   opstrr   c                     d fd}|S )	Nselfr   argstuple[float, ...]rs   bool | float | Fractionc                4     t          | j                  | S r   )getattr_val)r   r   r   s     rC   delegatez_delegate.<locals>.delegateF  s     &wty"%%t,,rE   )r   r   r   r   rs   r   r?   )r   r   s   ` rC   	_delegater   E  s(    - - - - - -
 OrE   c                     e Zd ZdZ	 dZ	 d8d9d
Zed:d            Zed;d            Zd<dZ	d=dZ
d;dZd>dZd?dZd@dZ	  ed          Z ed          Z ed          Z ed          Z ed           Z ed!          Z ed"          Z ed#          Z ed$          Z ed%          Z ed&          Z ed'          Z ed(          Z ed)          Z ed*          Z ed+          Z ed,          Z  ed-          Z! ed.          Z" ed/          Z# ed0          Z$ ed1          Z% ed2          Z& ed3          Z' ed4          Z( ed5          Z) e*e+d6          r ed6          Z,d7S d7S )Ar   zImplements a rational class where 0/0 is a legal value to match
    the in the wild use of exif rationals.

    e.g., DigitalZoomRatio - 0.00/0.00  indicates that no digital zoom was used
    )
_numerator_denominatorr   r   valuer{   r   r}   rs   Nonec                H   |  t          |t                    r&|j        | _        |j        | _        |j        | _        dS t          |t                    r|j        | _        |j        | _        n0t          rt          t          |          | _        n|| _        || _        |dk    rt          d          | _        dS |dk    rt          |          | _        dS t          |          |k    r$t          t          |          |          | _        dS t          ||z            | _        dS )z
        :param value: either an integer numerator, a
        float/rational/other number, or an IFDRational
        :param denominator: Optional integer denominator
        Nr   nanr   )
isinstancer   r   r   r   r   r   r   r
   r   r    r   r}   )r   r   r   s      rC   __init__zIFDRational.__init__\  s    	#e[)) 	#oDO % 1D
DIFeX&& 	,#oDO % 1D ("&|U";";"' +D!eDIIIA DIIIZZ5   U[99DIII !455DIIIrE   r    c                    | j         S r   )r   r   s    rC   r   zIFDRational.numerator~  s
    rE   c                    | j         S r   )r   r   s    rC   r   zIFDRational.denominator  s      rE   max_denominatortuple[IntegralLike, int]c                    | j         dk    r| j        | j         fS t          | j        t                    sJ | j                            |          }|j        |j         fS )z

        :param max_denominator: Integer, the maximum denominator value
        :returns: Tuple of (numerator, denominator)
        r   )r   r   r   r   r   limit_denominator)r   r   fs      rC   r   zIFDRational.limit_rational  s^     q  >4#333$)X.....I''88{AM))rE   r   c                D    t          t          | j                            S r   )r   r   r   r   s    rC   __repr__zIFDRational.__repr__  s    5##$$$rE   c                4    | j                                         S r   )r   __hash__r   s    rC   r   zIFDRational.__hash__  s    y!!###rE   otherobjectrt   c                    | j         }t          |t                    r|j         }t          |t                    rt          |          }||k    S r   )r   r   r   r   )r   r   rz   s      rC   __eq__zIFDRational.__eq__  sI    ie[)) 	JEeU## 	**Ce|rE   %list[float | Fraction | IntegralLike]c                *    | j         | j        | j        gS r   )r   r   r   r   s    rC   __getstate__zIFDRational.__getstate__  s    	4?D,=>>rE   statec                    t                               | d           |\  }}}t          |t          t          f          sJ || _        t          rt          t          |          | _	        n|| _	        t          |t                    sJ || _        d S Nr   )r   r   r   r   r   r   r
   r   r    r   r}   r   )r   r   r   r   r   s        rC   __setstate__zIFDRational.__setstate__  s    T1%%%).&j,$ 122222	 	)"<<<DOO(DO,,,,,,(rE   __add____radd____sub____rsub____mul____rmul____truediv____rtruediv____floordiv____rfloordiv____mod____rmod____pow____rpow____pos____neg____abs__	__trunc____lt____gt____le____ge____bool____ceil__	__floor__	__round____int__NrF   )r   r{   r   r}   rs   r   )rs   r    rs   r}   )r   r}   rs   r   rs   r   )r   r   rs   rt   )rs   r   )r   r   rs   r   )-__name__
__module____qualname____doc__	__slots__r   propertyr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   hasattrr   r   r?   rE   rC   r   r   N  s        
 7I IJ 6  6  6  6  6D    X ! ! ! X!* * * *% % % %$ $ $ $   ? ? ? ?
) 
) 
) 
) i	""Gy$$Hi	""Gy$$Hi	""Gy$$H)M**K9^,,L9^,,LIo..Mi	""Gy$$Hi	""Gy$$Hi	""Gi	""Gi	""G	+&&IYx  FYx  FYx  FYx  Fy$$Hy$$H	+&&I	+&&Iwx## ')I&&' 'rE   ImageFileDirectory_v2idxsize$Callable[[_LoaderFunc], _LoaderFunc]c                     d fd}|S )Nfunc_LoaderFuncrs   c                    ddl m} | j                            d          r&| j        dd                              dd          |<   | ft
          <   | S )Nr   r   load_r-   _ )r   r   r   
startswithreplace_load_dispatch)r   r   r   r   s     rC   	decoratorz#_register_loader.<locals>.decorator  sd    ######=##G,, 	=qrr*223<<E#J"DjsrE   )r   r   rs   r   r?   )r   r   r   s   `` rC   _register_loaderr     s/           rE   2Callable[[Callable[..., Any]], Callable[..., Any]]c                     d fd}|S )Nr   Callable[..., Any]rs   c                    | t           <   | S r   )_write_dispatch)r   r   s    rC   r   z#_register_writer.<locals>.decorator  s    #rE   )r   r   rs   r   r?   )r   r   s   ` rC   _register_writerr     s)          rE   idx_fmt_nametuple[int, str, str]r   c                    ddl m} | \  }}|||<   t          j        d           	 ddfd}|ft          |<   fdt
          |<   d S )Nr   r   =Tr   r   datarr   
legacy_apirt   rs   tuple[Any, ...]c                X    |                      t          |          z    |          S r   )_unpackrk   )r   r  r  fmtr   s      rC   basic_handlerz&_register_basic.<locals>.basic_handler  s/     ||s4yyD07#77>>>rE   c                J     d                      fd|D                       S )NrE   c              3  D   K   | ]}                     |          V  d S r   )_pack)r@   r   r  r   s     rC   rm   z4_register_basic.<locals>.<lambda>.<locals>.<genexpr>  s1      <<EC''<<<<<<rE   join)r   valuesr  s   ` rC   <lambda>z!_register_basic.<locals>.<lambda>  s0    <<<<<V<<<<< rE   T)r   r   r  rr   r  rt   rs   r  )r   r   structcalcsizer   r   )r   r   r   namer  r  r   s        @@rC   _register_basicr    s    !NCdE#J?9s99%%D FJ? ? ? ? ? ? ? ?
 -N3   OCrE   c                     e Zd ZU dZi Zded<   i Zded<   	 	 	 d_d`dZ ed           Z	 ed           Z
edad            Zej        dbd            ZdcdZdddZdedZdfdZdgd!Zdhd#Zdid$Zdjd&Zdkd'Zdld)Zdmd-Zdnd/Z e eeej        d0d1fej        d2d3fej        d4d5fej         d6d7fej!        d8d9fej"        d:d;fej#        d<d=fej$        d2d3fej%        d>d?fg	                      e&d@d@          dodpdB            Z' e(d@          dqdD            Z) e&dEd@          dodrdF            Z* e(dE          dsdH            Z+ e&dIdJ          	 dodtdL            Z, e(dI          dudN            Z- e&dOd@          dodpdP            Z. e(dO          dvdQ            Z/ e&dRdJ          	 dodtdS            Z0 e(dR          dudT            Z1dwdXZ2dxdYZ3dZ Z4dydzd]Z5d{d^Z6dS )|r   a  This class represents a TIFF tag directory.  To speed things up, we
    don't decode tags unless they're asked for.

    Exposes a dictionary interface of the tags in the directory::

        ifd = ImageFileDirectory_v2()
        ifd[key] = 'Some Data'
        ifd.tagtype[key] = TiffTags.ASCII
        print(ifd[key])
        'Some Data'

    Individual values are returned as the strings or numbers, sequences are
    returned as tuples of the values.

    The tiff metadata type of each item is stored in a dictionary of
    tag types in
    :attr:`~PIL.TiffImagePlugin.ImageFileDirectory_v2.tagtype`. The types
    are read from a tiff file, guessed from the type added, or added
    manually.

    Data Structures:

        * ``self.tagtype = {}``

          * Key: numerical TIFF tag number
          * Value: integer corresponding to the data type from
            :py:data:`.TiffTags.TYPES`

          .. versionadded:: 3.0.0

    'Internal' data structures:

        * ``self._tags_v2 = {}``

          * Key: numerical TIFF tag number
          * Value: decoded data, as tuple for multiple values

        * ``self._tagdata = {}``

          * Key: numerical TIFF tag number
          * Value: undecoded byte string from file

        * ``self._tags_v1 = {}``

          * Key: numerical TIFF tag number
          * Value: decoded data in the v1 format

    Tags will be found in the private attributes ``self._tagdata``, and in
    ``self._tags_v2`` once decoded.

    ``self.legacy_api`` is a value for internal use, and shouldn't be changed
    from outside code. In cooperation with
    :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1`, if ``legacy_api``
    is true, then decoded tags will be populated into both ``_tags_v1`` and
    ``_tags_v2``. ``_tags_v2`` will be used if this IFD is used in the TIFF
    save routine. Tags should be read from ``_tags_v1`` if
    ``legacy_api == true``.

    z"dict[int, tuple[int, _LoaderFunc]]r   zdict[int, Callable[..., Any]]r      II*     Nifhrr   rq   bytes | Nonegroup
int | Noners   r   c                .   t          |          s"dt          |           d}t          |          ||n	|dd         | _        | j        t          k    rd| _        n)| j        t          k    rd| _        nd}t          |          |d         dk    | _        || _        i | _	        	 | 
                                 | j        r$|                     d	|d
d                   d         n#|                     d|dd                   d         | _        d| _        dS )a  Initialize an ImageFileDirectory.

        To construct an ImageFileDirectory from a real file, pass the 8-byte
        magic header to the constructor.  To only set the endianness, pass it
        as the 'prefix' keyword argument.

        :param ifh: One of the accepted magic headers (cf. PREFIXES); also sets
              endianness.
        :param prefix: Override the endianness of the file.
        znot a TIFF file (header z not valid)Nr'   ><znot a TIFF IFD+   Qr3   r   rH   r+   F)ry   reprSyntaxError_prefixMM_endianII_bigtiffr  tagtyperesetr  next_legacy_api)r   r  rq   r  msgs        rC   r   zImageFileDirectory_v2.__init__G  s     s|| 	#CT#YYCCCCc"""!'!3vvRaR<2DLL\RDLL"Cc"""A"
')'

 }/DLLc!""g&&q))c3qrr7++A. 		
 !rE   c                    | j         S r   )r"  r   s    rC   r  zImageFileDirectory_v2.<lambda>n      4< rE   c                    | j         S r   )_offsetr   s    rC   r  zImageFileDirectory_v2.<lambda>o  r-  rE   rt   c                    | j         S r   )r*  r   s    rC   r  z ImageFileDirectory_v2.legacy_apiq  s    rE   r   r   c                $    d}t          |          )Nz"Not allowing setting of legacy api)	Exception)r   r   r+  s      rC   r  z ImageFileDirectory_v2.legacy_apiu  s    2nnrE   c                Z    i | _         i | _        i | _        i | _        d | _        d | _        d S r   )_tags_v1_tags_v2_tagdatar'  _nextr/  r   s    rC   r(  zImageFileDirectory_v2.resetz  s0    (*(**,
#'rE   r   c                :    t          t          |                     S r   )r   dictr   s    rC   __str__zImageFileDirectory_v2.__str__  s    4::rE   dict[str, Any]c                D      fd                                  D             S )z
        :returns: dict of name|key: value

        Returns the complete tag dictionary, with named tags where possible.
        c                V    i | ]%\  }}t          j        |j                  j        |&S r?   )r   lookupr  r  )r@   coder   r   s      rC   rD   z/ImageFileDirectory_v2.named.<locals>.<dictcomp>  s@     
 
 
e OD$*--2E
 
 
rE   )itemsr   s   `rC   namedzImageFileDirectory_v2.named  s6    
 
 
 
#zz||
 
 
 	
rE   r}   c                n    t          t          | j                  t          | j                  z            S r   )rk   setr6  r5  r   s    rC   __len__zImageFileDirectory_v2.__len__  )    3t}%%DM(:(::;;;rE   tagr   c                    || j         vr?| j        |         }| j        |         }| j        |         \  }} || || j                  | |<   | j         |         }| j        rt          |t          t          f          s|f}|S r   )r5  r6  r'  r   r  r   r   rr   )r   rF  r  typr   handlerrz   s          rC   __getitem__z!ImageFileDirectory_v2.__getitem__  s    dm##=%D,s#C /4MD'dDO<<DImC ? 	:cE5>#B#B 	&C
rE   r   c                &    || j         v p|| j        v S r   )r5  r6  r   rF  s     rC   __contains__z"ImageFileDirectory_v2.__contains__      dm#;sdm';;rE   c                >    |                      ||| j                   d S r   )_setitemr  )r   rF  r   s      rC   __setitem__z!ImageFileDirectory_v2.__setitem__  s     c5$/22222rE   r  c           	     >   t           t          t          f}t          j        || j                  t          ||          r|gn|}|| j        vrj        rj        | j        |<   nt          j	        | j        |<   t          d |D                       rN|D ]5}t          |t                    sJ |dk     rt          j        | j        |<    n6t          j        | j        |<   nNt          d |D                       rd}d}d}	|D ]I}t          |t                    sJ |rd|cxk    rdk     sn d}|rd|cxk     rdk     sn d}|	r|dk     rd}	J|rt          j        | j        |<   n|rt          j        | j        |<   n|	rt          j        | j        |<   nt          j        | j        |<   nt          d	 |D                       rt          j        | j        |<   n[t          d
 |D                       rt          j        | j        |<   n-t          d |D                       rt          j        | j        |<   | j        |         t          j	        k    rd |D             }n'| j        |         t          j        k    rd |D             }| j        |         t          j        k    ot          |t,                    }
|
st/          fd|D                       }|r| j        n| j        }|
sj        dk    s7| j        |         t          j        k    sj        t7          |          dk    rz|sx|r(| j        |         t          j        t          j        fv r|f}	 |\  ||<   d S # t8          $ r7 t;          j        d| dt7          |           d           |d         ||<   Y d S w xY w|||<   d S )Nc              3  @   K   | ]}t          |t                    V  d S r   )r   r   r@   rB   s     rC   rm   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  s,      BBaz![11BBBBBBrE   r   c              3  @   K   | ]}t          |t                    V  d S r   )r   r}   rT  s     rC   rm   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  ,      <<As++<<<<<<rE   Tr!   Fi i   c              3  @   K   | ]}t          |t                    V  d S r   )r   r   rT  s     rC   rm   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  ,      >>!Au-->>>>>>rE   c              3  @   K   | ]}t          |t                    V  d S r   )r   r   rT  s     rC   rm   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  rV  rE   c              3  @   K   | ]}t          |t                    V  d S r   )r   rr   rT  s     rC   rm   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  rX  rE   c                h    g | ]/}t          |t                    r|                    d d          n|0S )asciir   )r   r   encoderT  s     rC   
<listcomp>z2ImageFileDirectory_v2._setitem.<locals>.<listcomp>  sJ        1;1c0B0BI),,,  rE   c                Z    g | ](}t          |t                    rt          |          n|)S r?   )r   r}   r   rT  s     rC   r^  z2ImageFileDirectory_v2._setitem.<locals>.<listcomp>  s1    LLL*Q"4"4;eAhhh!LLLrE   c              3  p   K   | ]0}t          |t                    r                    |          n|V  1d S r   )r   r   cvt_enum)r@   r   infos     rC   rm   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  sW         )35#(>(>Ie$$$E     rE   r   zMetadata Warning, tag z had too many entries: z, expected 1)r   rr   r   r   r>  r  r   r'  type	UNDEFINEDallr   SIGNED_RATIONALRATIONALr}   SHORTSIGNED_SHORTLONGSIGNED_LONGDOUBLEASCIIBYTEr9  r   r4  r5  lengthrk   
ValueErrorwarningswarn)r   rF  r   r  	basetypesr  rB   shortsigned_shortlongis_ifddestrb  s               @rC   rP  zImageFileDirectory_v2._setitem  sq   UC(	sDJ//&ui88C%edl""y %6$(IS!!$,$6S!BB6BBBBB !6# > >)![99999q55080HDL-!E ! -5,=S)<<V<<<<< 6 E#'LD# ) ))!S11111  *!q....5....$)E' 1A1E1E1E1E1E1E1E1E+0L )AEE#(D A,4NS))% A,4,AS)) A,4MS)),4,@S))>>v>>>>> 6(0DL%%<<V<<<<< 6(0DL%%>>v>>>>> 6(0DL%< 222   FF \#("333LLVLLLFc"hm3P
648P8P 	    #    F
 !+=t}}  	[A|C HM11#Fq(8(8(8  #dl3/!(4   !&%c & & &1S 1 16{{1 1 1   #1IS				& DIIIs   M =NNc                    | j                             |d            | j                            |d            | j                            |d            d S r   )r5  popr4  r6  rL  s     rC   __delitem__z!ImageFileDirectory_v2.__delitem__  sP    #t$$$#t$$$#t$$$$$rE   Iterator[int]c                n    t          t          | j                  t          | j                  z            S r   )iterrC  r6  r5  r   s    rC   __iter__zImageFileDirectory_v2.__iter__  )    C&&T]););;<<<rE   r  r  r  c                <    t          j        | j        |z   |          S r   )r  unpackr$  )r   r  r  s      rC   r  zImageFileDirectory_v2._unpack
  s    }T\C/666rE   r  c                6    t          j        | j        |z   g|R  S r   )r  packr$  )r   r  r  s      rC   r  zImageFileDirectory_v2._pack  s!    {4<#-77777rE   Hrt  rH   rv  bzsigned bytehzsigned shortlzsigned longr   r   ddoubler  long8r   Tc                    |S r   r?   r   r  r  s      rC   	load_bytezImageFileDirectory_v2.load_byte!      rE   bytes | int | IFDRationalc                    t          |t                    rt          |          }t          |t                    rt          |f          }|S r   )r   r   r}   rr   r   r  s     rC   
write_bytez ImageFileDirectory_v2.write_byte%  sC    dK(( 	t99DdC   	"$>>DrE   r'   c                l    |                     d          r
|d d         }|                    dd          S )N    r   zlatin-1r   )endswithdecoder  s      rC   load_stringz!ImageFileDirectory_v2.load_string-  s7    == 	9D{{9i000rE   str | bytes | intc                    t          |t                    rt          |          }t          |t                    s|                    dd          }|dz   S )Nr\  r   r  )r   r}   r   rr   r]  r   r   s     rC   write_stringz"ImageFileDirectory_v2.write_string3  sP     eS!! 	JJE%'' 	5LL)44Eu}rE   r-   r3   )tuple[tuple[int, int] | IFDRational, ...]c           
         |                      t          |          dz   d|          }dfdt          fd	t          |d d d
         |dd d
                   D                       S )Nr+   rH   ar}   r  rs   tuple[int, int] | IFDRationalc                0    r| |fnt          | |          S r   r   r  r  r  s     rC   combinez4ImageFileDirectory_v2.load_rational.<locals>.combineB       '>Aq66[A->->>rE   c              3  6   K   | ]\  }} ||          V  d S r   r?   r@   numdenomr  s      rC   rm   z6ImageFileDirectory_v2.load_rational.<locals>.<genexpr>E  3      VVZS%WWS%((VVVVVVrE   r'   r   r  r}   r  r}   rs   r  r  rk   r   zipr   r  r  valsr  s     ` @rC   load_rationalz#ImageFileDirectory_v2.load_rational<       ||s4yyA~000$77	? 	? 	? 	? 	? 	? VVVV3tCCaCy$qtRSt*;U;UVVVVVVrE   r   c                F     d                      fd|D                       S )NrE   c              3  P   K   | ] } j         d gt          |d          R  V  !dS )2Ll    N)r  r   r@   r   r   s     rC   rm   z7ImageFileDirectory_v2.write_rational.<locals>.<genexpr>I  sR       
 
DHJDJt?odI>>???
 
 
 
 
 
rE   r  r   r  s   ` rC   write_rationalz$ImageFileDirectory_v2.write_rationalG  s?    xx 
 
 
 
LR
 
 
 
 
 	
rE   r1   c                    |S r   r?   r  s      rC   load_undefinedz$ImageFileDirectory_v2.load_undefinedM  r  rE   c                    t          |t                    rt          |          }t          |t                    r#t          |                              dd          }|S )Nr\  r   )r   r   r}   r   r]  r  s     rC   write_undefinedz%ImageFileDirectory_v2.write_undefinedQ  sQ    e[)) 	JJEeS!! 	:JJ%%gy99ErE   
   c           
         |                      t          |          dz   d|          }dfdt          fd	t          |d d d
         |dd d
                   D                       S )Nr+   r  r  r}   r  rs   r  c                0    r| |fnt          | |          S r   r  r  s     rC   r  z;ImageFileDirectory_v2.load_signed_rational.<locals>.combine_  r  rE   c              3  6   K   | ]\  }} ||          V  d S r   r?   r  s      rC   rm   z=ImageFileDirectory_v2.load_signed_rational.<locals>.<genexpr>b  r  rE   r'   r   r  r  r  s     ` @rC   load_signed_rationalz*ImageFileDirectory_v2.load_signed_rationalY  r  rE   c                F     d                      fd|D                       S )NrE   c           	   3  R   K   | ]!} j         d gt          |dd          R  V  "dS )2lii   N)r  r   r  s     rC   rm   z>ImageFileDirectory_v2.write_signed_rational.<locals>.<genexpr>f  sX       
 
 DJtP4T9hOOPPP
 
 
 
 
 
rE   r  r  s   ` rC   write_signed_rationalz+ImageFileDirectory_v2.write_signed_rationald  s?    xx 
 
 
 

 
 
 
 
 	
rE   fp	IO[bytes]r   c                    |                     |          }t          |          |k    r%d| dt          |           d}t          |          |S )Nz&Corrupt EXIF data.  Expecting to read  bytes but only got z. )readrk   OSError)r   r  r   retr+  s        rC   _ensure_readz"ImageFileDirectory_v2._ensure_readk  sj    ggdmms88tL%)L L?B3xxL L L  #,,
rE   c           
        |                                   |                                | _        	 | j        r*|                     d|                     |d                    n)|                     d|                     |d                    d         }t          |          D ]J}| j        r*|                     d|                     |d                    n)|                     d|                     |d	                    \  }}}}t          j        || j	                  j
        }t          j        |d
          }	d| d| d|	 d| d	}
	 | j        |         \  }}n,# t          $ r t                              d|
|           Y w xY w||z  }|| j        rdndk    r|                                }|                     | j        rdnd|          \  }|
d| d| z  }
|                    |           t%          j        ||          }|                    |           n
|d |         }t)          |          |k    rFt+          j        d| dt)          |           d|            t                              |
           |st                              |
           || j        |<   || j        |<   |
dz  }
|
|dk    rd| dnt3          |          z  }
t                              |
           L| j        r*|                     d|                     |d                    n)|                     d|                     |d                    \  | _        d S # t6          $ r,}
t+          j        t9          |
                     Y d }
~
d S d }
~
ww xY w)Nr  r3   r  r'   r   HHQ8s   HHL4srI   unknownztag:  (
) - type: )z%s - unsupported type %sr+   rH   z Tag Location: z - Data Location: z/Possibly corrupt EXIF data.  Expecting to read r  z. Skipping tag z
 - value: rP   <table:  bytes>)r(  tellr/  r&  r  r  ranger   r>  r  r  r   getr   KeyErrorloggerdebugseekr   
_safe_readrk   rq  rr  r6  r'  r   r)  r  r   )r   r  	tag_countr   rF  rH  countr  tagnametypnamer+  	unit_sizerI  r   hereoffsets                   rC   loadzImageFileDirectory_v2.loadu  s   

wwyy=	 =AS$"3"3B":":;;;\\#t'8'8Q'?'?@@	I
 9%% ." ." }JDLL$*;*;B*C*CDDDgt/@/@R/H/HII &S% #/#tz::?)C33IgIIIIII3III)-)<S)A&Iww   LL!;S#FFFH y(4111557799D $DM-JSSsD Q QIVMTMMVMMMCGGFOOO$/D99DGGDMMMM;Dt99$$M/-1/ /GJ4yy/ /),/ /  
 LL%%% LL%%%%)c"$'S!|#4"99/$////$t**LS!!!! =AS$"3"3B":":;;;\\#t'8'8Q'?'?@@ TYYY
  	 	 	M#c((###FFFFF	s=   DM EM &F =M ?F  GM 
N!N  Nc                   | j         |                     d| j        rdnd          z   }| j        r||                     ddd          z  }|| j        r|                     dd          n|                     d	d          z  }|S )
Nr  r  *   HHr3   r   r  rK   rH   )r"  r  r&  r   r  s     rC   _get_ifhzImageFileDirectory_v2._get_ifh  s    lTZZ4=-HRRbIII= 	*4::dAq)))CdmKtzz#r"""C9K9KK
rE   r   r  c                   |                      | j        rdndt          | j                            }g }t          |          t          | j                  | j        rdndz  z   dz   z  d }| j        rdnd}| j        rdnd}t	          | j                                                  D ]\  }}|t          k    rt          |          }| j        |         }	t          	                    d||	t          |                     |	t          j        k    ot          |t                    }
|
ret          |                                 |	          }| j        |         }|                                D ]
\  }}|||<   |                              }n.t          |t$                    r|n|f} | j        |	         | g|R  }t          j        || j                  j        }|
rd
nt/          j        |	d          }d| d| d| d|	 d	}|t          |          dk    rdt          |           dnt3          |          z  }t          	                    |           |
rd}nD|	t          j        t          j        t          j        fv rt          |          }nt          |          }t          |          |k    r0|                    ||	||                    |d          df           6|                    ||	||                      |          |f           t          |          dz   dz  dz  z  |||         \  }}	}}}|rC| j        |	         \  }}fd || || j                   D             } | j        |	         | g|R  }n3|                      || !                    ||          d         z             }||	|||f||<   |D ]f\  }}	}}}t          	                    d||	|t          |          t          |                     ||                      | j        rdnd||	||          z  }g|dz  }|D ]$\  }}	}}}||z  }t          |          dz  r|dz  }%|S )Nr  r  r  rI   r+   rH   r3   zTag %s, Type: %s, Value: %s)r  ifdr  zsave: r  r  z) - value: rK   r  r  r   r  rE   r'   c                    g | ]}|z   S r?   r?   )r@   rz   r  s     rC   r^  z1ImageFileDirectory_v2.tobytes.<locals>.<listcomp>  s    WWW3#,WWWrE   r   z%s %s %s %s %sr  r  s       )"r  r&  rk   r5  sortedr@  STRIPOFFSETSr'  r  r  r   r   rj  r   r9  r   r  tobytesr   r   r>  r  r  r   r  r   rn  rm  rd  appendljustr   r  r  )r   r  resultentriesstripoffsetsr  fmt_sizerF  r   rH  rw  r  r  ifd_tag	ifd_valuer  r  r  r+  r  r   rI  s    `                    rC   r  zImageFileDirectory_v2.tobytes  s   4=9CCc3t};M;MNN<>#f++DM 2 2DM6Qbbr RRUVVV ]+cc,111 !4!4!6!677 "	3 "	3JCl"""7||,s#CLL6S$u++NNNHM)Ej.E.EF @+DMMOO3GGGs+*0,,.. - -&GY#,CLL{{6**",UE":":H0t+C0????oc4:66;G%Dee59S)+D+DGP7PPcPPWPPPPPCCIIOO0c$ii0000VTCLL  $8JKKKD		F4yyH$$S%He1L1LcRSSSSS%C1H1H$OPPP3t99q=Q.22 #+2<+@(CeUD N $ 3C 8gWWWW''$do2V2VWWW0t+C0????

3S%(@(@(Cf(LMM$'eUD$@GL! -4 	 	(CeUDLL)3UDKKdTTTdjj=5gsC  FF
 	+ -4 	  	 (CeUDdNF4yy1}  %rE   c                    |                                 dk    r'|                    |                                            |                                 }|                     |          }|                    |           |t	          |          z   S r   )r  writer  r  rk   )r   r  r  r  s       rC   savezImageFileDirectory_v2.save  sn    7799>>HHT]]__%%%f%%
F##rE   )r  NN)r  rr   rq   r  r  r  rs   r   )rs   rt   )r   rt   rs   r   rs   r   r   )rs   r;  r   rF  r}   rs   r   rF  r   rs   rt   rF  r}   r   r   rs   r   )rF  r}   r   r   r  rt   rs   r   )rF  r}   rs   r   rs   r|  )r  r   r  rr   rs   r  )r  r   r  r   rs   rr   r  )r  rr   r  rt   rs   rr   )r  r  rs   rr   )r  rr   r  rt   rs   r   )r   r  rs   rr   )r  rr   r  rt   rs   r  )r  r   rs   rr   )r   r  rs   rr   )r  r  r   r}   rs   rr   )r  r  rs   r   rY   )r  r}   rs   rr   )r  r  rs   r}   )7r   r   r   r   r   __annotations__r   r   r   rq   r  r  setterr(  r:  rA  rD  rJ  rM  rQ  rP  r{  r  r  r  listmapr  r   rh  rj  SIGNED_BYTEri  rk  FLOATrl  IFDLONG8r   r  r   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r?   rE   rC   r   r     s        : :x :<N;;;;57O7777 3# 	%! %! %! %! %!N X//00FX//00F      X     ( ( ( (   	
 	
 	
 	
< < < <	 	 	 	< < < <3 3 3 3\ \ \ \|% % % %
= = = =7 7 7 78 8 8 8 	Dg.V,%sM:&^<%sM:g.#x0sF+g.
	
 	
  " a     a    a1 1 1 1 1
 a    a.2W W W W W a
 
 
 

 a     a    b!.2W W W W W b
 
 
 
   A A A AF  K K K K KZ$ $ $ $ $ $rE   r   r   r   write_c                       e Zd ZU dZd fdZ ed           Z ed	           Zd
ed<   	 e	dd            Z
ddZddZddZd dZd!dZd"dZ xZS )#ImageFileDirectory_v1a  This class represents the **legacy** interface to a TIFF tag directory.

    Exposes a dictionary interface of the tags in the directory::

        ifd = ImageFileDirectory_v1()
        ifd[key] = 'Some Data'
        ifd.tagtype[key] = TiffTags.ASCII
        print(ifd[key])
        ('Some Data',)

    Also contains a dictionary of tag types as read from the tiff image file,
    :attr:`~PIL.TiffImagePlugin.ImageFileDirectory_v1.tagtype`.

    Values are returned as a tuple.

    ..  deprecated:: 3.0.0
    r   r   kwargsrs   r   c                H     t                      j        |i | d| _        d S )NT)superr   r*  )r   r   r  	__class__s      rC   r   zImageFileDirectory_v1.__init__4  s-    $)&)))rE   c                    | j         S r   )r4  r   s    rC   r  zImageFileDirectory_v1.<lambda>8  s     rE   c                    | j         S r   )r6  r   s    rC   r  zImageFileDirectory_v1.<lambda>9  s    DM rE   zdict[int, int]r'  originalr   c                p     | |j                   }|j        |_        |j        |_        |j        |_        |S )a2  Returns an
        :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1`
        instance with the same data as is contained in the original
        :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v2`
        instance.

        :returns: :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1`

        rx   )rq   r6  r'  r)  )clsr  r  s      rC   from_v2zImageFileDirectory_v1.from_v2?  s:     c)))(&=
rE   c                    t          | j                  }t          | j                  |_        t          | j                  |_        t          | j                  |_        |S )a2  Returns an
        :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v2`
        instance with the same data as is contained in the original
        :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v1`
        instance.

        :returns: :py:class:`~PIL.TiffImagePlugin.ImageFileDirectory_v2`

        rx   )r   rq   r9  r6  r'  r5  )r   r  s     rC   to_v2zImageFileDirectory_v1.to_v2Q  sN     $4;777DM**4<((DM**
rE   rF  r   rt   c                &    || j         v p|| j        v S r   )r4  r6  rL  s     rC   rM  z"ImageFileDirectory_v1.__contains__b  rN  rE   r}   c                n    t          t          | j                  t          | j                  z            S r   )rk   rC  r6  r4  r   s    rC   rD  zImageFileDirectory_v1.__len__e  rE  rE   r|  c                n    t          t          | j                  t          | j                  z            S r   )r~  rC  r6  r4  r   s    rC   r  zImageFileDirectory_v1.__iter__h  r  rE   r   c                >    dD ]}|                      |||           d S N)FT)rP  )r   rF  r   r  s       rC   rQ  z!ImageFileDirectory_v1.__setitem__k  s4    ' 	2 	2JMM#uj1111	2 	2rE   c           	        || j         vrQ| j        |         }| j        |         }| j        |         \  }}dD ]$}|                     | || ||          |           %| j         |         }t          |t          t          f          s|f}|S r  )r4  r6  r'  r   rP  r   r   rr   )r   rF  r  rH  r   rI  legacyrz   s           rC   rJ  z!ImageFileDirectory_v1.__getitem__o  s    dm##=%D,s#C /4MD'' H Hc774v#>#>GGGGmC #u~.. 	&C
rE   )r   r   r  r   rs   r   )r  r   rs   r  )rs   r   r  r   r  r   r  )r   r   r   r   r   r   tagstagdatar  classmethodr  r  rM  rD  r  rQ  rJ  __classcell__r  s   @rC   r  r  !  s         $            8..//Dh1122G !   ["   "< < < << < < <= = = =2 2 2 2
 
 
 
 
 
 
 
rE   r  c                       e Zd ZdZdZdZ	 dd fdZddZedd            Z	ddZ
ddZddZd dZd! fdZddZddZd!dZddZ xZS )"TiffImageFileTIFFz
Adobe TIFFFNr  StrOrBytesPath | IO[bytes]filenamestr | bytes | Noners   r   c                X    |  	 |  	 t                                          ||           d S r   )r  r   )r   r  r)  r  s      rC   r   zTiffImageFile.__init__  s7    
 	*5'"X&&&&&rE   c                   | j                             d          }|d         dk    r|| j                             d          z  }t          |          | _        | j        j        x| _        | _        d| _        | j         | _        g | _	        d| _
        t                              d           t                              d| j                   t                              dt          |                     |                     d	           dS )
z#Open the first image in a TIFF filer3   r'   r  r   Nz*** TiffImageFile._open ***z- __first: %sz	- ifh: %sr   )r  r  r   tag_v2r)  _TiffImageFile__first_TiffImageFile__next_TiffImageFile__frame_fp
_frame_pos	_n_framesr  r  r   _seekr  s     rC   _openzTiffImageFile._open  s     gll1ooq6R<<47<<??"C+C00 &*[%55t{7%'%)2333_dl333[$s)),,, 	

1rE   r}   c                D   | j         }||                                 }|                     t          | j                             | j         1|                     |                                 dz              | j         1|                     |           | j         J | j         S )Nr   )r3  r  r4  rk   r2  r  )r   current_n_framescurrents      rC   n_frameszTiffImageFile.n_frames  s    >#iikkGJJs4?++,,,.(

499;;?+++ .(IIg~)))~rE   framec                    |                      |          sdS |                     |           | j        3| j        j        | j        k    s| j        j        | j        k    rd| _        dS dS dS )z%Select a given frame as current imageN)_seek_checkr4  _imimr   
_tile_sizemode)r   r:  s     rC   r  zTiffImageFile.seek  ss    && 	F

58GLDO++tw|ty/H/H DHHH	  /H/HrE   c                (   | j         | _        t          | j                  |k    r| j        sd}t          |          t                              d|| j        | j        | j        	                                           | j        dk    rd}t          |          | j                            | j                   | j                            | j                   t                              d| j        	                                           | j                            | j                   | j        j        | j        v rd| _        n| j        j        | _        | j        dk    r
|dz   | _        t          | j                  dk    r| j        dk    | _        | xj        dz  c_        t          | j                  |k    | j                            | j        |                    | j                            | j                   t$          | j        v r| j        t$                   | j        d<   nd| j        v r| j        d= |                                  t*                              | j                  x| _        | _        || _        |                                  d S )	Nzno more images in TIFF filez9Seeking to frame %s, on frame %s, __next %s, location: %sl            zUnable to seek to framezLoading tags, location: %sr   r   xmp)r1  r  rk   r2  r/  EOFErrorr  r  r0  r  rp  r  r  r-  r  r)  r3  is_animatedXMPrb  _reload_exifr  r  rF  r  _setup)r   r:  r+  s      rC   r4  zTiffImageFile._seek  s6   ($/""e++; $3smm#LLK   {e##/ oo%GLL%%%O""4;///LL5tw||~~FFFKTW%%%{4?22  "k.{a!&4?##q((#';!#3 LLALL9 $/""e++: 	T_U+,,,!!!$+#{3/DIedi	% 3;;DKHHH48rE   c                    | j         S )zReturn the current frame number)r0  r   s    rC   r  zTiffImageFile.tell  s
    |rE   dict[int, dict[str, bytes]]c                   i }| j                             t          j        j                  }|r|dd         dk    rt          |dd                   }t          j        |d         dz   dz            dz  }t          |d|z   d|z                      }|d|z   d|z   |z            }d|i||<   |t          j        d|z   |z   dz            dz  d         }|dd         dk    |S )	a5  
        Returns a dictionary of Photoshop "Image Resource Blocks".
        The keys are the image resource ID. For more information, see
        https://www.adobe.com/devnet-apps/photoshop/fileformatashtml/#50577409_pgfId-1037727

        :returns: Photoshop "Image Resource Blocks" in a dictionary.
        Nr+   s   8BIMr/   r   r'   r  r  )	r-  r  r   BaseImageResourcesi16mathceili32)r   blocksrz   idnr   r  s          rC   get_photoshop_blocksz"TiffImageFile.get_photoshop_blocks  s     koohm:;; 	@bqb'W$$QqS]]Is1vzQ.//!33q1urAv~.//26BFTM12$d^r
$)R!Vd]a$7881<>>? bqb'W$$ rE   Image.core.PixelAccess | Nonec                    | j         r| j        r|                                 S t                                                      S r   )tileuse_load_libtiff_load_libtiffr  r  )r   r  s    rC   r  zTiffImageFile.load
  s;    9 	(. 	(%%'''ww||~~rE   c                    | j         Ht          j        | j                   t          j                            | j        | j                  | _        t          j        	                    |            d S r   )
r=  r   _decompression_bomb_checkr?  corenewr@  r>  r   load_preparer   s    rC   r^  zTiffImageFile.load_prepare  sU    8+DO<<<jnnTY@@DG((.....rE   c                *   | j         sDd| _        |                                 }t          j        D ]}||vr|                    |           t          j        | d           t          j	        j
        | j        v r| j        t          j	        j
        = d S d S )NT)in_place)rD  !_close_exclusive_fp_after_loadinggetexifr   TAGS_V2_GROUPSget_ifdr   exif_transposer   rK  Orientationr-  )r   exifkeys      rC   load_endzTiffImageFile.load_end  s      	"59D2 <<>>D. " "d??S!!!!t4444=$33HM5666 43rE   c                   t           j                             |            |                                  t          | j                  dk    sd}t          |          | j        d         d         }| j        d         d         }	 t          | j        d          o| j                                        }t          | j        d          r| j        	                                 n# t
          $ r d}Y nw xY w|r:t          |t                    sJ t          |          }||d<   t          |          }t          j        | j        d	|| j                  }	 |                    | j        |           n$# t$          $ r}d
}t          |          |d}~ww xY w| j        o| j         }t          | j        d          rJt*                              d           |                    | j                                                  \  }	}
n|rt*                              d           |s| j                            d           t5          j        |dt4          j                  }|                    d          \  }	}
t5          j        ||t4          j                   nct*                              d           | j                            d           |                    | j                                                  \  }	}
g | _        d| _        |                                   |r | j        !                                 d| _        |
dk     rt          |
          t           j                             |           S )zWOverload method triggered when we detect a compressed tiff
        Calls out to libtiffr   zNot exactly one tiler   r)   filenoflushFr'   libtiffzCouldn't set the imageNgetvaluez5have getvalue. just sending in a string from getvaluez3have fileno, calling fileno version of the decoder.s   fpfpz+don't have fileno or getvalue. just reading)"r   r  r^  rk   rW  r  r   r  rk  rl  r   r   r  _getdecoderr@  decoderconfigsetimager>  rp  _exclusive_fprD  r  r  r  rn  r  oslseekSEEK_CURSEEK_SETr  readonlyri  close)r   r+  extentsr   r  	args_listdecodereclose_self_fprS  errposs               rC   rY  zTiffImageFile._load_libtiff&  s    	49~~""(C#,, )A,q/y|A

	(++@0@0@B tw((   	 	 	 BBB	
  	$dE*****T

IIaL##D#DIy$@RSS	&TWg.... 	& 	& 	&*C#,,A%	& *C43C/C47J'' !	4 LLPQQQ^^DG$4$4$6$677FAss 	4LLNOOO   Q (2q"+..C^^G,,FAsHRbk**** LLFGGGGLLOOO^^DGLLNN33FAs	 	GMMOOODG77#,,{%%%s+   AC! !C0/C0E- -
F7F		Fc                   d| j         v rd}t          |          t          | j                             t          d                   | _        | j                             t          d          | _        | j                             t          d          }| j        dk    rd}| j                             t          d          }t                              d           t                              d| j                   t                              d	|           t                              d
| j                   t                              d|           t                              d| j                             t                               	 | j         t                   }| j         t                   }n$# t          $ r}d}t!          |          |d}~ww xY wt#          |t$                    rt#          |t$                    sd}t'          |          ||f| _        | j                             t*          j        j                  }|dv r
||f| _        n	||f| _        t                              d| j                   | j                             t4          d          }t7          |          dk    r,t9          |          t;          |          cxk    rdk    rn nd}| j                             t<          d          }	| j                             t>          d          }
|dv rd}n|dk    rd}nd}|t7          |
          z  }t7          |	          }| j                             t@          | j        dk    r|dv rdnd          }|tB          k    r,t          "                    d|           d}tG          |          ||k     r|	d|         }	n||k    r|dk    r|	|z  }	t7          |	          |k    rd}tG          |          | j         j$        ||||	|
f}t                              d|           	 tJ          |         \  | _&        }n># t          $ r1}t                              d           d}tG          |          |d}~ww xY wt                              d|           t                              d | j'                   | j        | j(        d!<   | j                             tR          d          }| j                             tT          d          }|rt|rr| j                             tV                    }|d"k    r||f| j(        d#<   n@|dk    r|d$z  |d$z  f| j(        d#<   n'|||f| j(        d#<   ||f| j(        d%<   n||f| j(        d%<   dx}x}}g | _,        tZ          p
| j        d&k    | _.        | j.        r|d"k    rH|dd         dz   |dd         z   }t                              d|           tJ          |         \  | _&        }|dk    r| j        d'k    r| j        dk    rd(}n@|d)k    rd*}n7|/                    d+          s|/                    d,          r|dd-         d.z   }|| j        d/| j         j0        f}| j,        1                    te          j3        d0dd||fd|                     nth          | j         v stj          | j         v rth          | j         v r5| j         th                   }| j                             tl          |          }|}n| j         tj                   }| j                             tn                    }| j                             tp                    }t#          |t$                    rt#          |t$                    sd1}t'          |          |}|D ]}||z   |k    r|ts          |	          z  d2z  }nd}|}| j        d"k    r||         }||z  }|t%          |          df}| j,        1                    te          j3        | j        ||t;          ||z   |          t;          ||z   |          f||                     ||z   }||k    rd||z   }}||k    r	dx}}|dz  }n+t                              d3           d}tG          |          tt          | j         v r| j         tt                   | j(        d4<   | j'        d5v rKd6 | j         tv                   D             }ty          j=        d7d8>                    |                    | _?        dS dS )9z-Setup this image object based on current tagsi  z+Windows Media Photo files not yet supportedr   r   r0   r/   z*** Summary ***z- compression: %sz - photometric_interpretation: %sz- planar_configuration: %sz- fill_order: %sz- YCbCr subsampling: %szMissing dimensionsNzInvalid dimensions)r-   r/   r1   r3   z
- size: %srF   r?   )r'   r/   r3   r)   r-   r+   )r'   r/   z.More samples per pixel than can be decoded: %sz#Invalid value for samples per pixelzunknown data organizationzformat key: %sz- unsupported formatzunknown pixel modez- raw mode: %sz- pil mode: %scompressionr'   dpigRQ@
resolutionr&   r2   rW   rJ   I;16Nz;16Bz;16Lr   NFrm  zInvalid tile dimensionsr3   z- unsupported data organizationicc_profilerc   re   c                2    g | ]}t          |d z            S r#   r   )r@   r  s     rC   r^  z(TiffImageFile._setup.<locals>.<listcomp>o  s"    CCCr!s(||CCCrE   RGB;LrE   )@r-  r  COMPRESSION_INFOr  COMPRESSION_compressionPLANAR_CONFIGURATION_planar_configurationPHOTOMETRIC_INTERPRETATION	FILLORDERr  r  YCBCRSUBSAMPLING
IMAGEWIDTHIMAGELENGTHr  	TypeErrorr   r}   rp  r?  r   rK  rf  _sizer   SAMPLEFORMATrk   r   r   BITSPERSAMPLEEXTRASAMPLESSAMPLESPERPIXELMAX_SAMPLESPERPIXELerrorr!  rq   	OPEN_INFO_moder@  rb  X_RESOLUTIONY_RESOLUTIONRESOLUTION_UNITrW  READ_LIBTIFFrX  r  r  r  r   _Tiler  TILEOFFSETSROWSPERSTRIP	TILEWIDTH
TILELENGTHsum
ICCPROFILECOLORMAPr   r&   r  palette) r   r+  photo	fillorderxsizeysizer|  orientationsample_format	bps_tupleextra_tuple	bps_countbps_actual_countsamples_per_pixelrh  rawmodexresyresresunitxylayerr  offsetsr  w	tilewidthr  stridetile_rawmoder   r  s                                    rC   rG  zTiffImageFile._setup  s	    T[  ?C#,, -T[__[!-L-LM%)[__5I1%M%M"  :A>> ++EKOOIq11	&'''($*;<<<7???143MNNN'333.@P0Q0QRRR	(K
+EK,EE 	( 	( 	(&CC..a'	( %%% 	"Zs-C-C 	"&CS//!,koohm&?@@,&&DJJDJ\49---d;;}!!c-&8&8C<N<N&S&S&S&SRS&S&S&S&S&S !MKOOM488	koolB77IIIaZZIIIS%%%	y>> KOO"k11evooAA1
 

 222LL@BS   8Cc"""/// ""4#4"45II!1116F!6K6K "$55Iy>>...-Cc""" K
 	%s+++	*"+C.DJ 	* 	* 	*LL/000&Cc"")	*
 	%w///%ty111#'#4	- {|Q//{|Q// 	5D 	5kooo66G!||$($<	%  A$(4K#=	%  $($<	%  +/*	,''*.*	,' A	 , J0AU0J  Z	# A~~"1"gns122w.-s333 '0n#
G 

%//.!33
 F""!!!&)) -W-=-=f-E-E -!#2#,, $+UDK4FGAIY_YAue8LaQRSSTTTTT[((K4;,F,Ft{**+l3KOOL%88 +k2 KOOI66	KOOJ//!)S11 *As9K9K *3C$S//)! # #q55==Y/!3FFF&-22#*5>Li'F$c&kk15	  O)As1q5%00#a!eU2C2CD	    E::a!eqAEzz !	A
7#: LL:;;;-Cc""" $$'+{:'>DIm$ 9##CCT[-BCCCG'+GSXXg5F5FGGDLLL $#s0   $F+ +
G5GG!P7 7
Q2,Q--Q2r   )r  r(  r)  r*  rs   r   r  r   )r:  r}   rs   r   )rs   rI  )rs   rU  )r   r   r   formatformat_descriptionra  r   r5  r   r9  r  r4  r  rT  r  r^  ri  rY  rG  r#  r$  s   @rC   r&  r&    s`       F%(-%
 (,' ' ' ' ' ' '   0 	 	 	 X		 	 	 	* * * *X      *     
/ / / /7 7 7 7"]& ]& ]& ]&~kH kH kH kH kH kH kH kHrE   r&  rG   rH   rV   rc   re   rM   rT   rJ   rN   rQ   rR   rW   rZ   rX   rf   YCbCrri   rU   rL   rO   rS   )rO   rS   r>  Image.Imager  r  r)  str | bytesc                   	 t           | j                 \  }}}}}}n-# t          $ r }	d| j         d}
t          |
          |	d }	~	ww xY w| j        }| j        }t          |          }|                    d          rd|_        	 |d         }nA# t          $ r4 | j	                            d          }t          |t                    rd }Y nw xY w|d}n|dk    rd	}n|d
k    rd}t          p|dk    }d|t          <   | j        d         |t          <   | j        d         |t           <   d|v r	|d         }nNd|v rH|d         }t          |t"                    r*t%          j                    }|                    |           |}ni }t*                              dt/          |                     t          |t0                    r|                                }|D ]}t          |t$          j                  r'|t4          j        v r|                    |          ||<   n|                    |          ||<   	 |j        |         |j        |<   r# t<          $ r Y ~w xY wi }t?          | d          r| j                                         }i |tC          | di           }tD          tF          fD ]	}||v r||= 
t?          | d          rtH          tJ          tL          tN          tP          tR          fD ]n}|| j*        v rc|tN          k    r.| j*        j        |         t4          j+        t4          j,        fvr||= D| j*        |         ||<   | j*        j        |         |j        |<   o|                    d| j	                            d                    }|r
||tZ          <   t\          dftJ          dftL          dftJ          dftL          dftH          dft^          dft`          dftb          dftd          dff
D ]\  }}||v r||         ||<   |                    d          }|r*d|tH          <   |d         |tJ          <   |d         |tL          <   |dk    r4||tf          <   ti          |          dk    rti          |          |tj          <   |
||tl          <   |dk    r
||tF          <   tn          |vr||tn          <   n| j        d v r|tn                   dk    r| j        d!k    rr| 8                                }|                                }|Gts          |j:                  D ]0}ts          |j;                  D ]}|||f         d"k    rdnd"|||f<   1|} nty          j=        |           } | j        d#v rw| j>        ?                    d$d%          }g }ti          |          d&z  }ts          d&          D ].} |d' ||| z  || dz   z           D             z  }|dgd(|z
  z  z  }/||t          <   |t                   |t                    }"}!ti          |          |!|d         z  d)z   d*z  z  }#t          |vrl|rV|                    d+t                    }$|#dk    rdnt          |$|#z  |"          }%|d	k    rt          |%d)z   d*z  d*z  |"          }%n|"}%|%dk    rd}%|%|t          <   |#dk    rdn|#|t                   z  }&|"|t                   z   dz
  |t                   z  }'|&d,k    rt4          jD        |j        t          <   |&f|'dz
  z  |#|"z  |&|'dz
  z  z
  fz   |t          <   t          ts          d|&|'z  |&                    |t          <   t                              |d          |t          <   | j        d-k    r>t          d.t          d/iL                                D ]\  }}(|M                    ||(           t          t          t          t          g})|rd0|v r[|d0         }*t          |*t                    r|*dk     s|*d1k    rd2}
t          |
          |d	k    rd3}
t          |
          |*|t          <   t*                              d4           t*                              d5t          |L                                                     d}+t?          |d6          r@	 |U                    d           |V                                }+n# t          jX        $ r Y nw xY wi },|)t          t          t          t          t          t          gz  })tf          |d         i}-t          j]        |L                                |L                                          D ]\  }}.|t4          j^        vrtC          t$          j_        d7d8          s0|t4          j        v rt4          j`        |,|<   nc||j        v r|j        |         |,|<   nIt          |.t          t          t          t"          f          st5          jc        |          jd        }/|/r|/|,|<   ||-vrd||)vr`t          |.t                    r|.e                    d9d:          d;z   |-|<   t          |.t                    rt          |.          |-|<   |.|-|<   tF          |-v r9ti          |-tF                             dk    r|-tF                   d         |-tF          <   t*                              d<t          |-L                                                     | j        d=v rd>}t/          |-L                                          }0|0g                                 |||+||0|,f}1t%          jh        | j        d?|1|          }2|2i                    | j>        d@| j        z              	 |2e                    t          jk                  dd          \  }3}4|+s|l                    |4           |3rnE|3dk     rdA|3 dB}
t          |
          nT|)D ]}||= |m                    |          }5t          jn        | |t          jo        dd@| j        z   |5||#df          g           dC|v rt          | dC|           d S d S )DNzcannot write mode z as TIFFrx   big_tiffTr  r&   r0   r2   r8   r4   r   r   tiffinforg  zTiffinfo Keys: %srF  r-  r  descriptionr  x_resolutiony_resolutionresolution_unitsoftware	date_timeartist	copyrightr  r'   rF   )rG   rH   rG   r"   r  rW   r  r)   c                    g | ]}|d z  S r  r?   rT  s     rC   r^  z_save.<locals>.<listcomp>+  s    MMMQSMMMrE   r#   r1   r3   
strip_sizer!   r  )r   r   )r   r"      r"   r  r"   qualityd   zInvalid quality settingz5quality setting only supported for 'jpeg' compressionzSaving using libtiff encoderz	Items: %srk  rp   Fr\  r   r  zConverted items: %s)rL   rJ   r  rm  r[   zencoder error z when writing image file_debug_multipage)q	SAVE_INFOr@  r  r  encoderinfoencoderconfigr   r  r&  rb  r   r}   WRITE_LIBTIFFr  r   r  r  rr   r   Exifr  r  r  r  r  r  r   rc  rd  r'  r2  r   rF  r   EXIFIFDr  r  r  r  IPTC_NAA_CHUNKPHOTOSHOP_CHUNKrE  r-  rn  rd  r  IMAGEDESCRIPTIONSOFTWARE	DATE_TIMEARTIST	COPYRIGHTr  rk   r  r  r  copyr  heightwidthr   invertr>  
getpaletter  r  
STRIP_SIZEr   rj  STRIPBYTECOUNTSr   r  COMPRESSION_INFO_REVr  r  REFERENCEBLACKWHITEr@  
setdefaultr  r  r  TILEBYTECOUNTSrp  JPEGQUALITYr  r  rk  ioUnsupportedOperationOSUBFILETYPETRANSFERFUNCTIONSUBIFD	itertoolschainLIBTIFF_COREr\  r	  r   r   r>  rc  r]  r   sort_getencoderrq  r   MAXBLOCKr  r  _saver  setattr)6r>  r  r)  r  rq   r  r  bitsextrar|  r+  r  r  r  r  rm  rb  rg  rh  
legacy_ifdsupplied_tagsrF  iccr  r  inverted_impxr  r  lutcolormapcolorsr   r  r  r  im_strip_sizerows_per_stripstrip_byte_countsstrips_per_imagedefault_value	blocklistr  r1  typesattsr   rc  r   r  encodererrcoder  r  s6                                                         rC   r  r    s   "6?6H3ee " " "427444cll!" .K$M
v
.
.
.Cz"" !-0   gkk-00k3'' 	K	
 		#	#		&	&*3{e3G !"CgajC
OwqzC [  :&	;		6"dE"" 	:<<DIIdOOOD
LL$d4jj111$-.. zz||  dEJ'' 	%C83J,J,J||C((CHHxx}}CH	#|C0CK 	 	 	D	 Jr5 $V\\^^
?z?WR2%>%>?M 		 # # -c" r8 > 
 	> 	>C bi.((RY->s-CM&L . . &c**!y~CH')y'8'=CK$ //-])C)C
D
DC
 J 
=)	|$	|$	~&	~&	+,	:	K 		K  ) )	T ;"4(CH
//%
 
 C
 # OFLFLt||!Mt99>>#&t99C !L{{"L!,,*/&''	J		3'A#Ba#G#G7c>>''))K!!##B~{122 A AA";#455 A A(*1a4C11S1a4A $$B	w+eug..SQq 	- 	-AMM#fqj6QU;K.K*LMMMMHsV|,,HH Hz?C,qAYY1tAw;?q01F3 	'OOL*EEM"(A++QQ3}7NPQ3R3RNf$$!$~'9a&?1%Da!H!HNQN*L#q[[fs<7H.HC--1c,6GGE!!'/}O$-/3Ca3GH
&*:Q*>??L C a"%557HII C ,//Q??C	w'f!=#
 %''	/ 	/C NN3....J^DI n
##!),Ggs++ &w{{gmm/ oo%f$$M oo%&C3444[&"5"56662x   	


iikk*     	
 	
	 !.tAw7 $/#))++}7J7J7L7LMM 	& 	&JC
 (///uz+H%PP (111!)E#JJCK''!$S!1E#JJ$US%e,DEE *#?3//4D *%)c
$3i#7#7eS)) & %Wi @ @5 HDII{33 & %eDII %DI4C\(:$;$;q$@$@!%l!3A!6D*F4::<<,@,@AAA 7'''G
 DJJLL!!		k3$>#BGY=II 0111	#NN9+=>>qrrBMGT  	 Q;;D7DDDC#,, 
  	 	CC"_UFRW$4fwPQ>RSST	
 	
 	
 [((&,,,,, )(sJ    
AAAB ;C
C/I
II*)b b&%b&c                     e Zd Zg dZh dZd7d8d
Zd9dZd9dZd9dZd:dZ	d;dZ
d<dZej        fd=dZd9dZd>dZd9dZd?dZd@d ZdAd!Zd<d"Zd<d#ZedBd'            ZdCd)ZdDd*ZdCd+ZdCd,ZdCd-ZdCd.Zd9d/Zd9d0Z dEd2Z!	 dFdGd5Z"d6S )HAppendingTiffWriter)r   r   r   r'   r+   r3   r   r   r'   r+   r3   r+   r3   r+   r'   r+   r3   >       	     r$   r%   Ffnr(  r]  rt   rs   r   c                   |  t          |          rN|| _        d| _        	 t          ||rdnd          | _        nQ# t
          $ r t          |d          | _        Y n0w xY wt          t          t                   |          | _        d| _        | j        	                                | _
        |                                  d S )NTzw+bzr+bF)r   r  close_fpopenr   r  r   r	   rr   r  	beginningsetup)r   r  r]  s      rC   r   zAppendingTiffWriter.__init__  s    2;; 		"DI DM)b3"9%%E:: ) ) )b%) "U)R((DF!DM

s   ; AAc                   | j                             | j        t          j                   d | _        d| _        | j                             d          x| _        }|s	d| _	        d S d| _	        |dk    r| 
                    d           n-|dk    r| 
                    d           nd	}t          |          |                                  |                                  d S )
Nr   r+   TFro   r  rn   r  zInvalid TIFF file header)r   r  r  rs  rv  whereToWriteNewIFDOffsetoffsetOfNewPager  IIMMisFirst	setEndianRuntimeErrorskipIFDsgoToEnd)r   iimmr+  s      rC   r  zAppendingTiffWriter.setup  s    DNBK00048% 6;;q>>)	D 	DLF=  NN3]""NN3,Cs###rE   c                   | j         rd S | j                            | j                   | j                            d          }|sd S || j        k    rd}t          |          |                                 }|| j        z  }| j        J | j                            | j                   | 	                    |           | j                            |           | 
                                 d S )Nr+   z1IIMM of new page doesn't match IIMM of first page)r#  r   r  r!  r  r"  r%  readLongr   	writeLongfixIFD)r   r(  r+  
ifd_offsets       rC   finalizezAppendingTiffWriter.finalize  s    < 	F 	D()))v{{1~~ 	F49ECs###]]__
d**
,888D1222z"""JrE   c                V    |                                   |                                  d S r   )r.  r  r   s    rC   newFramezAppendingTiffWriter.newFrame'  s     

rE   c                    | S r   r?   r   s    rC   	__enter__zAppendingTiffWriter.__enter__,  s    rE   r   r   c                @    | j         r|                                  d S d S r   )r  rx  )r   r   s     rC   __exit__zAppendingTiffWriter.__exit__/  s'    = 	JJLLLLL	 	rE   r}   c                D    | j                                         | j        z
  S r   )r   r  r!  r   s    rC   r  zAppendingTiffWriter.tell3  s    v{{}}t333rE   r  whencec                    |t           j        k    r
|| j        z  }| j                            ||           |                                 S )z
        :param offset: Distance to seek.
        :param whence: Whether the distance is relative to the start,
                       end or current position.
        :returns: The resulting position, relative to the start.
        )rs  rv  r!  r   r  r  )r   r  r6  s      rC   r  zAppendingTiffWriter.seek6  sB     R[  d**FFF###yy{{rE   c                <   | j                             dt          j                   | j                                         }d|dz  z
  }d|cxk     rdk     r*n n'| j                             t          |                     | j                                         | _        d S )Nr   rK   )r   r  rs  SEEK_ENDr  r  rr   r!  )r   r  	pad_bytess      rC   r'  zAppendingTiffWriter.goToEndC  s    Ar{###fkkmm rM	y2FLLy))***#v{{}}rE   endianr   c                n    || _         | j          d| _        | j          d| _        | j          d| _        d S )NrH   r  HHL)r;  longFmtshortFmt	tagFormat)r   r;  s     rC   r$  zAppendingTiffWriter.setEndianM  sC    +(((;))) K,,,rE   c                ,   	 |                                  }|dk    r#| j                                        dz
  | _        d S | j                            |           |                                 }| j                            |dz  t          j                   )NTr   r+   rI   )r*  r   r  r   r  	readShortrs  ru  )r   r-  num_tagss      rC   r&  zAppendingTiffWriter.skipIFDsS  s}    	4JQ040A-FKK
###~~''HFKK2r{333	4rE   r  r   c               6    | j                             |          S r   )r   r  r  s     rC   r  zAppendingTiffWriter.write^  s    v||D!!!rE   
field_sizec                Z    	 dddd|         S # t           $ r d}t          |          w xY w)Nr  rH   r  )r'   r+   r3   zoffset is not supported)r  r%  )r   rE  r+  s      rC   _fmtzAppendingTiffWriter._fmta  sJ    	$ss++J77 	$ 	$ 	$+Cs###	$s    *c                    t          j        | j        |                     |          z   | j                            |                    \  }|S r   )r  r  r;  rG  r   r  )r   rE  r   s      rC   _readzAppendingTiffWriter._readh  sB    =K$))J///Z1H1H
 
 rE   c                ,    |                      d          S Nr'   rI  r   s    rC   rB  zAppendingTiffWriter.readShortn      zz!}}rE   c                ,    |                      d          S rv   rL  r   s    rC   r*  zAppendingTiffWriter.readLongq  rM  rE   bytes_writtenr  expectedc                H    | | |k    rd|  d| }t          |          d S d S )Nzwrote only z bytes but wanted )r%  )rO  rP  r+  s      rC   _verify_bytes_writtenz)AppendingTiffWriter._verify_bytes_writtent  sC    $()B)BKKKKKCs### %$)B)BrE   r   c                    | j                             dt          j                   | j                             t          j        | j        |                    }|                     |d           d S )Nr+   )	r   r  rs  ru  r  r  r  r>  rR  r   r   rO  s      rC   rewriteLastShortToLongz*AppendingTiffWriter.rewriteLastShortToLongz  sW    B$$$V[u%E%EFF""=!44444rE   c                   | j                             | t          j                   | j                             t          j        | j        |                     |          z   |                    }| 	                    ||           d S r   )
r   r  rs  ru  r  r  r  r;  rG  rR  )r   r   rE  rO  s       rC   _rewriteLastz AppendingTiffWriter._rewriteLast  sq    ZK---Kdii
&;&;;UCC
 
 	""=*=====rE   c                .    |                      |d          S rK  rX  r  s     rC   rewriteLastShortz$AppendingTiffWriter.rewriteLastShort        ***rE   c                .    |                      |d          S rv   rZ  r  s     rC   rewriteLastLongz#AppendingTiffWriter.rewriteLastLong  r\  rE   c                    | j                             t          j        | j        |                    }|                     |d           d S rK  )r   r  r  r  r?  rR  rU  s      rC   
writeShortzAppendingTiffWriter.writeShort  s?    V[%F%FGG""=!44444rE   c                    | j                             t          j        | j        |                    }|                     |d           d S rv   )r   r  r  r  r>  rR  rU  s      rC   r+  zAppendingTiffWriter.writeLong  s?    V[u%E%EFF""=!44444rE   c                r    |                                   | j        r| j                                         d S d S r   )r.  r  r   rx  r   s    rC   rx  zAppendingTiffWriter.close  s6    = 	FLLNNNNN	 	rE   c                   |                                  }t          |          D ]O}t          j        | j        | j                            d                    \  }}}| j        |         }||z  }|dk    }|s1|                                 | j	        z   }	| 
                    |	           || j        v r| j                                        }
|r4|                     ||           | j                            |
dz              | j                            |	           |                     ||           | j                            |
           (|r%| j                            dt          j                   Qd S )Nr3   r+   )rB  r  r  r  r@  r   r  
fieldSizesr*  r!  r^  Tagsr  _fixOffsetsr  rs  ru  )r   rC  r   rF  
field_typer  rE  
total_sizeis_localr  cur_poss              rC   r,  zAppendingTiffWriter.fixIFD  s]   >>##x 	, 	,A%+]4>46;;q>>%R%R"CU4J#e+J!QH -4+??$$V,,,di&++-- )$$UJ777FKK!,,,,FKK'''$$UJ777FKK(((( ,Ar{+++/	, 	,rE   r  c                   t          |          D ]}|                     |          }|| j        z  }|dk    r|dk    r|dk    rd}t          |          |                     |           | j                            dt          j                   | 	                    t          j                   | j                            dt          j                   |                     ||           d S )Nr'   r!   r   znot implementedir3   )r  rI  r!  r%  rV  r   r  rs  ru  r`  r   rj  rX  )r   r  rE  r   r  r+  s         rC   rf  zAppendingTiffWriter._fixOffsets  s    u 	6 	6AZZ
++Fd**FQ6U??A::+C&s+++ ++F333C---...Ar{++++!!&*5555!	6 	6rE   isShortisLongc                F    |rd}n|rd}nd}|                      ||          S )Nr'   r+   r   )rf  )r   r  rl  rm  rE  s        rC   
fixOffsetszAppendingTiffWriter.fixOffsets  s=      	JJ 	JJJz222rE   N)F)r  r(  r]  rt   rs   r   r  )rs   r  )r   r   rs   r   r   )r  r}   r6  r}   rs   r}   )r;  r   rs   r   )r  r   rs   r}   )rE  r}   rs   r   )rE  r}   rs   r}   )rO  r  rP  r}   rs   r   )r   r}   rs   r   )r   r}   rE  r}   rs   r   )r  r}   rE  r}   rs   r   )FF)r  r}   rl  rt   rm  rt   rs   r   )#r   r   r   rd  re  r   r  r.  r0  r2  r4  r  r  rv  r  r'  r$  r&  r  rG  rI  rB  r*  staticmethodrR  rV  rX  r[  r^  r`  r+  rx  r,  rf  ro  r?   rE   rC   r  r    s{         J(  D       2   0   
      4 4 4 4 /1k     - - - -- - - -	4 	4 	4 	4" " " "$ $ $ $          $ $ $ \$
5 5 5 5
> > > >+ + + ++ + + +5 5 5 55 5 5 5   
, , , ,86 6 6 6( AF	3 	3 	3 	3 	3 	3 	3rE   r  c                   | j                                         }| j        }t          |                    dg                     }t          | d          s|st          | ||          S |                                 }	 t          |          5 }| g|z   D ]}||_         ||_        t          |d          sd}	n|j	        }	t          |	          D ]P}
|                    |
           |                                 t          |||           |                                 Q	 d d d            n# 1 swxY w Y   |                     |           d S # |                     |           w xY w)Nappend_imagesr9  r   )r  r  r  r  r  r   r  r  r  r9  r  r  r  r0  )r>  r  r)  r  r  rr  cur_idxtfimsnfrr   s              rC   	_save_allrw    s   .%%''K$M"==>>M2z"" '= 'RX&&&ggiiG $$ 	"tm+ " ""-$1!sJ// 'CC,C :: " "CHHSMMMHHJJJ#r8,,,KKMMMM	""	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	" 	s1   <E BD*E *D..E 1D.2E E#z.tifz.tiffz
image/tiff)rq   rr   rs   rt   )rz   r{   r|   r}   rs   r~   )rz   r   r|   r}   r   r}   rs   r~   )r   r   rs   r   )r   r}   r   r}   rs   r   )r   r}   rs   r   )r   r   rs   r   )r>  r  r  r  r)  r  rs   r   )
__future__r   r  r  loggingrN  rs  r  rq  collections.abcr   r   	fractionsr   numbersr   r   typingr	   r
   r   r   r   r    r   r   r   r   r   r   _binaryr   rM  r   rP  r   
_deprecater   _typingr   _utilr   r   r   r    	getLoggerr   r  r  r  r  r%  r#  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  	PREDICTORr  r  r  r  r  r  r  r  
JPEGTABLESr  r  r  r  r  r  r  rE  r  IMAGEJ_META_DATA_BYTE_COUNTSIMAGEJ_META_DATAr  r@  r  r  r   r  rw   r   r\  ry   r   r   r   r   r   r   rr   rt   r   r   r   r  r}   
_IFDv2Baser   r   r  r   r  r  ImageFileDirectoryr&  r  r  BytesIOr  rw  register_openr  register_saveregister_save_allregister_extensionsregister_mimer?   rE   rC   <module>r     sd  R # " " " " " 				       				   4 4 4 4 4 4 4 4       $ $ $ $ $ $ $ $ C C C C C C C C C C C C C C C C J J J J J J J J J J J J J J J J ! ! ! ! ! ! ! ! ! ! ! !       ! ! ! ! ! ! # # # # # #             .--------		8	$	$ 


 
  	   				
	
  	

	  %  u | x	
 x z { v  
= 
: 
 
> 
= 
?  
6!" 
6#$ 
6% * CB)9)?)?)A)ABBB | D!T2| D!T2	|
 D!T2| D!T2| D!T2
| D!T2
| D!T2| D!T2| D!T2| D!T2| D!T2| D!T2| D!T2|  D!T2!|" D!T2#|$ D!T2%|& D!T2'| |( D!T2)|* D!T2+|, D!T2-|. D!T2/|0 D!T21|2 D!T23|4 D!T25|6 D!T27|8 D!T29|: D!T2;|< D!T2=|> D!T2
?|@ D!T2
A|B D!T2
C|D D!T2
E|F D!T2G|H D!T2I| | |J D!UB!1K|L D!UB!1M|N D!UB!1O|P D!UB!3Q|R D!UB!2S|T D!UBU|V D!UBW|X D!UBY|Z D!UB[|\ D!UB]|^ D!UB_|` D!UBa|b D!UBc|d D!UBe|f D!VT"Lg|h D!VT"Li|j D!Y#^k| | |l D!Y#^m|n D!Y#%5o|p D!Y#%5q|r D!\2&(8s|t D!\2&(8u|v D!\4(/w|x D!\4(/y|z D!_f-/?{|| D!_f-/?}|~ D!'35F|@ D!'35FA|B D!\4(*:C|D D!\4(*:E|F D!_f-/@G|H D!_f-/@I|J D!'35GK|L D!'35GM| | |N D!\4(*:O|P D!\4(*:Q|R D!_f-/@S|T D!_f-/@U|V D!'35GW|X D!'35GY|Z D!\6*,<[|\ D!\6*,<]|^ D!\2&(:_|` D!\2&(:a|b D!%r*,@c|d D!%r*,@e|f D!%t,.Ag|h D!%t,.Ai|j D!%t,.Bk|l D!%t,.Bm|n D!%t,.Bo| | |p D!%t,.Bq|r D!T2s|t D!T2u|v D!T2w|x D!T2y|z D!T2{|| D!T2}|~ D!T2|@ D!T2A|B D!T2C|D D!T2E|F D!T2G|H D!T2I|J D!T2
K|L D!T2
M|N D!VT"KO|P D!VT"LQ| | |R D!VT"LS|T D!T2U|V D!T2W|X D!\2&(8Y|Z D!\2&(8[|\ D!_d+->]|^ D!_d+->_|` D!'02Da|b D!'02Dc|d D!%r*,@e|f D!%r*,@g|h D!T2
i|j D!T2
k|p D!Y#_q|r D!Y#_s|t D!Y#^u|v D!Y#^w| |	| cAAyAAAAA    wuz8$?? @I:B???" " " "% % % %   &    G' G' G' G' G'( G' G' G'T /=sBC	 	 	 	      $   S)JJJM$ M$ M$ M$ M$J M$ M$ M$` (6  $(7  % J JIC<<S!!DG!>4>>>#3Fq3IJJJG!?D??OC4HIIIIOS$X X X X X1 X X Xx + lH lH lH lH lHI' lH lH lHl #r1at	$ #r1at	$	
 	4Q61
% #r1at	$ 	4Q61
% '2q!UD	) VRAud+ gr1a- '2q!UD	) 
E2q!Y- VRA|Q/ VRA|Q/ VRA|T2  gr1aD1!" 
E2q!Y-#$ xQ5$/%& gr1a-'( Q5$/Q5$/+  	2s- s- s- s-l	H3 H3 H3 H3 H3"* H3 H3 H3V   >  M(- A A A  M(% 0 0 0  ,i 8 8 8  -.0A B B B  M(, 7 7 7 7 7rE   