
    jh%L                      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 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)m*Z* ddlm+Z+ dZ,e,rddl&m-Z-m.Z.  ej^                  e0      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.ZPd/ZQd0ZRd1ZSd2ZTd3ZUd4ZVd5ZWd6ZXd7ZYd8ZZd9Z[d: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`e`j                         D  ci c]  \  } }|| 
 c}} Zbi e5d d_dd_d`fdae6d d_dd_d`fdae5d d_d?d_d`fdbe6d d_d?d_d`fdbe5dd_dd_d`fdce6dd_dd_d`fdce5dd_d?d_d`fdde6dd_d?d_d`fdde5d d_dded`fdfe6d d_dded`fdfe5d d_d?ded`fdge6d d_d?ded`fdge5dd_dded`fdhe6dd_dded`fdhe5dd_d?ded`fdie6dd_d?ded`fdie5d d_ddjd`fdki e6d d_ddjd`fdke5d d_d?djd`fdle6d d_d?djd`fdle5dd_ddjd`fdme6dd_ddjd`fdme5dd_d?djd`fdne6dd_d?djd`fdne5d d_ddod`fdpe6d d_ddod`fdpe5d d_d?dod`fdqe6d d_d?dod`fdqe5dd_ddod`fdre6dd_ddod`fdre5ddeddod`fdre6ddeddod`fdre5dd_d?dod`fdse6dd_d?dod`fdsi e5dd_ddtd`fdue5d d_ddvd`fdwe5dd_ddvd`fdwe6dd_ddvd`fdxe5dd_d?dvd`fdye5ddeddvd`fdze6ddeddvd`fd{e5d d|dd}d`fd~e6d d|dd}d`fde5dd_dd}d`fde5ddedd}d`fde6ddedd}d`fde5dd|dd}d`fd~e6dd|dd}d`fde5dd_dddefde6dd_dddefde5d?d_ddd`fdi e6d?d_ddd`fde5d?d_d?dd`fde6d?d_d?dd`fde5d?d_ddd`fde6d?d_ddd`fde5d?d_dddfde6d?d_dddfde5d?d_dddfde6d?d_dddfde5d?d_dddfde6d?d_dddfde5d?d_ddd_fde6d?d_ddd_fde5d?d_dddfde6d?d_dddfde5d?d_dddfde6d?d_dddfdi e5d?d_dddefde6d?d_dddefde5d?d_dddfde6d?d_dddfde5d?d_dddfde6d?d_dddfde5d?d_dddfde6d?d_dddfde5d?d_ddd`fde6d?d_ddd`fde5d?d_ddd`fde6d?d_ddd`fde5d?d_dddfde6d?d_dddfde5d?d_ddd_fde6d?d_ddd_fde5d?d_dddefdi e6d?d_dddefde5dAd_dd_d`fde6dAd_dd_d`fde5dAd_d?d_d`fde6dAd_d?d_d`fde5dAd_dded`fde6dAd_dded`fde5dAd_d?ded`fde6dAd_d?ded`fde5dAd_ddjd`fde6dAd_ddjd`fde5dAd_d?djd`fde6dAd_d?djd`fde5dAd_ddod`fde6dAd_ddod`fde5dAd_dddfde5dAd_dddefdi e6dAd_dddefde5dAd_d?dod`fde6dAd_d?dod`fde5dEd_ddd`fde6dEd_ddd`fde5dEd_dddfde6dEd_dddfde5dEd_dddfde6dEd_dddfde5dEd_ddd`fde6dEd_ddd`fde5dGd_ddod`fdre6dGd_ddod`fdre5dGd_ddd`fde6dGd_ddd`fde5dKd_ddd`fde6dKd_ddd`fdZc edd ecD              Zeg dZf egej                  dd      s	 e%dd       ddZi	 	 	 	 	 	 ddZj	 	 	 	 	 	 	 	 ddZki Zli ZmddZn G d de      Zoedepeqgef   ZrddÄZsddĄZtddńZue,reevef   ZwneZw G dƄ dew      Zxelex_l        emex_m         e+j                         D ]:  \  ZyZzezj                  ddȫ      Zz e|exdez eley   d           e|exdez emey          < [l[m[y[z G d˄ dex      Z}e}Z~ G d̈́ dej4                        Zi dde5ddd_dfdde5dddodfdde5dddd?fdde5dAddodfdde5dAddd?fdde5dd?d}dfdde5dddvdfdde5dddvdfdde5ddAd}dfdde5d?dddfdde5d?ddd fdde5d?ddd?fdde5dEdddfdde5dGdddfdde5dKdddfdde6dddvdfZddZ G d dej                        ZddZ ej
                  ej                  eei        ej                  ej                  e        ej                  ej                  e        ej                  ej                  ddg        ej                  ej                  d       yc c}} w )    )annotationsN)IteratorMutableMapping)Fraction)NumberRational)IOAnyCallableNoReturncast   )ExifTagsImage	ImageFileImageOpsImagePaletteTiffTags)i16be)i32be)o8)	deprecate)StrOrBytesPath)DeferredErroris_pathTYPESF)BufferIntegralLike   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  webpr    )1z1;I)r?   z1;IR)r?   r?   )r?   z1;R)r&   )LzL;2I)r@   zL;2IR)r@   zL;2)r@   zL;2R)r*   )r@   zL;4I)r@   zL;4IR)r@   zL;4)r@   zL;4R)r2   )r@   zL;I)r@   zL;IR)r@   r@   )r@   zL;R)   )I;16zI;12)   )rB   rB   )I;16BrD   )rB   zI;16R)IzI;16S)rE   zI;16BS)r(   )    )FF;32F)rG   zF;32BF)rE   zI;32N)rE   I;32S)rE   zI;32BS)r2   r2   )LArJ   )r2   r2   r2   )RGBrK   )rK   zRGB;R)r2   r2   r2   r2   )RGBArL   r   )rK   RGBX)r2   r2   r2   r2   r2   r   r   )rK   RGBXX)r2   r2   r2   r2   r2   r2   )r   r   r   )rK   RGBXXX)rL   RGBa)r   r   )rL   RGBaX)r   r   r   )rL   RGBaXX)r&   r   )rL   RGBAX)r&   r   r   )rL   RGBAXX)i  )rC   rC   rC   )rK   zRGB;16L)rK   zRGB;16B)rC   rC   rC   rC   )rL   zRGBA;16L)rL   zRGBA;16B)rK   zRGBX;16L)rK   zRGBX;16B)rL   zRGBa;16L)rL   zRGBa;16B)PzP;1)rW   zP;1R)rW   zP;2)rW   zP;2R)rW   zP;4)rW   zP;4R)rW   rW   )rW   PX)PArY   )rW   zP;R)CMYKrZ   )rZ   CMYKX)rZ   CMYKXX)rZ   zCMYK;16L)rZ   zCMYK;16B)LABr]   c              #  8   K   | ]  }t        |d            yw)r*   N)len).0key_tps     e/var/www/pru.catia.catastroantioquia-mas.com/tasa/lib/python3.12/site-packages/PIL/TiffImagePlugin.py	<genexpr>rc     s     AV#fQi.As   )s   MM *s   II* s   MM* s   II *s   MM +s   II+ libtiff_support_custom_tagsTz*Support for LibTIFF earlier than version 4rA   c                >    | j                  t        t                    S N)
startswithtuplePREFIXESprefixs    rb   _acceptrl   #  s    U8_--    c                x    t        |       dkD  }t        |rd| z  n|       j                  |      }|r|d d d   S |S )Nr   )absIFDRationallimit_rational)valmax_valinvn_ds       rb   _limit_rationalrw   '  sC     c(Q,C
a#g#
.
=
=g
FC3tt9$$rm   rq   c                
   t        |       }|j                  |j                  f}t        d |D              |k  rt	        | t        |            }t        d |D              }t        |      |kD  rt	        |d   |d   z  |      }|S )Nc              3  2   K   | ]  }t        |        y wrf   floatr`   is     rb   rc   z)_limit_signed_rational.<locals>.<genexpr>5  s     
!58
!   c              3  2   K   | ]  }t        |        y wrf   rz   r|   s     rb   rc   z)_limit_signed_rational.<locals>.<genexpr>8  s     ,1eAh,r~   r   r   )r   	numeratordenominatorminrw   rp   rh   max)rs   rt   min_valfracrv   	n_d_floats         rb   _limit_signed_rationalr   /  s~     C=D-1^^T=M=M-MC

!S
!!G+c3w<0,,,I
9~ilYq\97CJrm   c                      	 	 	 	 	 	 d fd}|S )Nc                6     t        | j                        | S rf   )getattr_val)selfargsops     rb   delegatez_delegate.<locals>.delegateG  s     &wtyy"%t,,rm   )r   rq   r   ztuple[float, ...]returnzbool | float | Fractionr>   )r   r   s   ` rb   	_delegater   F  s'    --"3-	 -
 Orm   c                  F   e Zd ZdZ	 dZ	 d(	 	 	 	 	 d)dZed*d       Zed+d       Zd,dZ	d-dZ
d+dZd.d	Zd/d
Zd0d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d       Z$ ed!      Z% ed"      Z& ed#      Z' ed$      Z( ed%      Z) e*e+d&      r	 ed&      Z,y'y')1rq   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   c                   |  t        |t              r4|j                  | _        |j                  | _        |j                  | _        yt        |t              r#|j                  | _        |j                  | _        n*t        rt        t        |      | _        n|| _        || _        |dk(  rt        d      | _        y|dk(  rt        |      | _        yt        |      |k(  rt        t        |      |      | _        yt        ||z        | _        y)z
        :param value: either an integer numerator, a
        float/rational/other number, or an IFDRational
        :param denominator: Optional integer denominator
        Nr   nanr   )
isinstancerq   r   r   r   r   r   r   TYPE_CHECKINGr   r   r{   int)r   valuer   s      rb   __init__zIFDRational.__init__]  s     	e[)#ooDO % 1 1D

DIeX&#ooDO % 1 1D"&|U";"' +D!eDIA DIZ5  U[9DI !45DIrm   c                    | j                   S rf   )r   r   s    rb   r   zIFDRational.numerator  s    rm   c                    | j                   S rf   )r   r   s    rb   r   zIFDRational.denominator  s       rm   c                    | j                   dk(  r| j                  | j                   fS t        | j                  t              sJ | 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   max_denominatorfs      rb   rr   zIFDRational.limit_rational  sb     q >>4#3#333$))X...II''8{{AMM))rm   c                >    t        t        | j                              S rf   )strr{   r   r   s    rb   __repr__zIFDRational.__repr__  s    5#$$rm   c                6    | j                   j                         S rf   )r   __hash__r   s    rb   r   zIFDRational.__hash__  s    yy!!##rm   c                    | j                   }t        |t              r|j                   }t        |t              rt        |      }||k(  S rf   )r   r   rq   r{   )r   otherrs   s      rb   __eq__zIFDRational.__eq__  s;    iie[)JJEeU#*Ce|rm   c                H    | j                   | j                  | j                  gS rf   )r   r   r   r   s    rb   __getstate__zIFDRational.__getstate__  s    		4??D,=,=>>rm   c                    t         j                  | d       |\  }}}t        |t        t        f      sJ || _        t        rt        t        |      | _	        n|| _	        t        |t              sJ || _        y Nr   )rq   r   r   r{   r   r   r   r   r   r   r   r   )r   stater   r   r   s        rb   __setstate__zIFDRational.__setstate__  sj    T1%).&j,$ 1222	"<<DO(DO,,,,(rm   __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__Nr=   )r   float | Fraction | IFDRationalr   r   r   None)r   r   r   r   )r   r   r   ztuple[IntegralLike, int]r   r   )r   objectr   bool)r   %list[float | Fraction | IntegralLike])r   r   r   r   )-__name__
__module____qualname____doc__	__slots__r   propertyr   r   rr   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>   rm   rb   rq   rq   O  s   
 7I IJ 63 6BE 6	 6D   ! !*%$?
) 	"G$H	"G$H	"G$HM*K^,L^,Lo.M	"G$H	"G$H	"G	"G	"G+&Ix Fx Fx Fx F$H$H+&I+&Ix#I& $rm   ImageFileDirectory_v2c                     d fd}|S )Nc                    ddl m} | j                  j                  d      r"| j                  dd  j	                  dd      |<   | ft
        <   | S )Nr   r   load_r,   _ )r   r   r   rg   replace_load_dispatch)funcr   idxsizes     rb   	decoratorz#_register_loader.<locals>.decorator  sL    #==##G,qr*223<E#J"Djsrm   )r   _LoaderFuncr   r   r>   )r   r   r   s   `` rb   _register_loaderr     s     rm   c                     d fd}|S )Nc                    | t         <   | S rf   )_write_dispatch)r   r   s    rb   r   z#_register_writer.<locals>.decorator  s    #rm   )r   Callable[..., Any]r   r   r>   )r   r   s   ` rb   _register_writerr     s     rm   c                    ddl m} | \  }}|||<   t        j                  d       	 d	 	 	 	 	 	 	 dfd}|ft        |<   fdt
        |<   y )Nr   r   =c                H    | j                  t        |      z    |      S rf   )_unpackr_   )r   data
legacy_apifmtr   s      rb   basic_handlerz&_register_basic.<locals>.basic_handler  s)     ||s4yD01#7>>rm   c                <     dj                   fd|D              S )Nrm   c              3  B   K   | ]  }j                  |        y wrf   )_pack)r`   r   r   r   s     rb   rc   z4_register_basic.<locals>.<lambda>.<locals>.<genexpr>  s     <EC'<s   join)r   valuesr   s   ` rb   <lambda>z!_register_basic.<locals>.<lambda>  s    <V<< rm   T)r   r   r   bytesr   r   r   tuple[Any, ...])r   r   structcalcsizer   r   )idx_fmt_namer   r   namer   r   r   s        @@rb   _register_basicr    sw    !NCdE#J??Qse9%D FJ?#?+0?>B?	?
 -N3OCrm   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d?d
       Zej                  d@d       ZdAdZdBdZdCdZdDdZdEdZdFdZdGdZdHdZdIdZdJdZdKdZdLdZ e eeej:                  ddfej<                  ddfej>                  ddfej@                  ddfejB                  d d!fejD                  d"d#fejF                  d$d%fejH                  ddfejJ                  d&d'fg	              e&d(d(      dMdNd)       Z' e(d(      dOd*       Z) e&d+d(      dMdPd,       Z* e(d+      dQd-       Z+ e&d.d/      	 dM	 	 	 	 	 dRd0       Z, e(d.      dSd1       Z- e&d2d(      dMdNd3       Z. e(d2      dTd4       Z/ e&d5d/      	 dM	 	 	 	 	 dRd6       Z0 e(d5      dSd7       Z1dUd8Z2dVd9Z3dWd:Z4dXdYd;Z5dZd<Z6y)[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   Nc                   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                          | j                  r| j                  d	|d
d       d   n| j                  d|dd       d   | _        d| _        y)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+   Qr2   r   r@   r*   F)rl   reprSyntaxError_prefixMM_endianII_bigtiffgrouptagtyperesetr   next_legacy_api)r   ifhrk   r  msgs        rb   r   zImageFileDirectory_v2.__init__H  s      s|,T#YK{CCc""!'!3vRa<<2DL\\RDL"Cc""A"
')'

 }} LLc!"g&q)c3qr7+A. 		
 !rm   c                    | j                   S rf   )r  r   s    rb   r   zImageFileDirectory_v2.<lambda>o  
    4<< rm   c                    | j                   S rf   )_offsetr   s    rb   r   zImageFileDirectory_v2.<lambda>p  r  rm   c                    | j                   S rf   )r  r   s    rb   r   z ImageFileDirectory_v2.legacy_apir  s    rm   c                    d}t        |      )Nz"Not allowing setting of legacy api)	Exception)r   r   r  s      rb   r   z ImageFileDirectory_v2.legacy_apiv  s    2nrm   c                X    i | _         i | _        i | _        i | _        d | _        d | _        y rf   )_tags_v1_tags_v2_tagdatar  _nextr  r   s    rb   r  zImageFileDirectory_v2.reset{  s,    (*(**,
#'rm   c                *    t        t        |             S rf   )r   dictr   s    rb   __str__zImageFileDirectory_v2.__str__  s    4:rm   c                    | j                         D ci c]0  \  }}t        j                  || j                        j                  |2 c}}S c c}}w )z
        :returns: dict of name|key: value

        Returns the complete tag dictionary, with named tags where possible.
        )itemsr   lookupr  r  )r   coder   s      rb   namedzImageFileDirectory_v2.named  sH      $zz|
e OOD$**-22E9
 	
 
s   5Ac                j    t        t        | j                        t        | j                        z        S rf   )r_   setr"  r!  r   s    rb   __len__zImageFileDirectory_v2.__len__  $    3t}}%DMM(::;;rm   c                   || j                   vrG| j                  |   }| j                  |   }| j                  |   \  }} || || j                        | |<   | j                   |   }| j                  rt        |t        t        f      s|f}|S rf   )r!  r"  r  r   r   r   rh   r   )r   tagr   typr   handlerrs   s          rb   __getitem__z!ImageFileDirectory_v2.__getitem__  s    dmm#==%D,,s#C //4MD'dDOO<DImmC ??:cE5>#B&C
rm   c                >    || j                   v xs || j                  v S rf   )r!  r"  r   r1  s     rb   __contains__z"ImageFileDirectory_v2.__contains__      dmm#;sdmm';;rm   c                >    | j                  ||| j                         y rf   )_setitemr   )r   r1  r   s      rb   __setitem__z!ImageFileDirectory_v2.__setitem__  s    c5$//2rm   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              r]|D ]9  }t        |t              sJ |dk  st        j                  | j                  |<    n t        j                  | j                  |<   nkt        d |D              rd}d}d}	|D ]A  }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}|	s:|dk  s@d}	C |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(  r2|D cg c]&  }t        |t              r|j-                  dd      n|( }}nJ| j                  |   t        j                  k(  r*|D cg c]  }t        |t              rt/        |      n|! }}| j                  |   t        j"                  k(  xr t        |t0              }
|
st3        fd|D              }|r| j4                  n| j6                  }|
sj8                  dk(  s<| j                  |   t        j*                  k(  sj8                  Mt;        |      dk(  r?|s=|r2| j                  |   t        j                  t        j                  fv r|f}	 |\  ||<   y |||<   y c c}w c c}w # t<        $ r0 t?        j@                  d| dt;        |       d       |d   ||<   Y y w xY w)Nc              3  <   K   | ]  }t        |t                y wrf   )r   rq   r`   vs     rb   rc   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  s     Baz![1B   r   c              3  <   K   | ]  }t        |t                y wrf   )r   r   r>  s     rb   rc   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>       <As+<r@  Tr    Fi i   c              3  <   K   | ]  }t        |t                y wrf   )r   r{   r>  s     rb   rc   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>       >!Au->r@  c              3  <   K   | ]  }t        |t                y wrf   )r   r   r>  s     rb   rc   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  rB  r@  c              3  <   K   | ]  }t        |t                y wrf   )r   r   r>  s     rb   rc   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  rD  r@  asciir   c              3  d   K   | ]'  }t        |t              rj                  |      n| ) y wrf   )r   r   cvt_enum)r`   r   infos     rb   rc   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  s0       )35#(>e$EIs   -0r   zMetadata Warning, tag z had too many entries: z, expected 1)!r   r   r   r   r)  r  r   r  type	UNDEFINEDallrq   SIGNED_RATIONALRATIONALr   SHORTSIGNED_SHORTLONGSIGNED_LONGDOUBLEASCIIBYTEencoder{   r%  rh   r   r!  lengthr_   
ValueErrorwarningswarn)r   r1  r   r   	basetypesr   r?  shortsigned_shortlongis_ifddestrJ  s               @rb   r:  zImageFileDirectory_v2._setitem  s   UC(	sDJJ/&ui8%edll"yy$(IIS!$,$6$6S!B6BB# >)![999q5080H0HDLL-!	> -5,=,=S)<V<< E#'LD# ))!S111 !q.5.$)E'A1E1E+0LAE#(D) ,4NNS)%,4,A,AS),4MMS),4,@,@S)>v>>(0DLL%<V<<(0DLL%>v>>(0DLL%<< 2 22   1;1c0B),IF  \\#("3"33EKL*Q"4eAh!;LFLc"hmm3P
648P # F
 !+t}} [[A||C HMM1#Fq(8 dll3/!!((4  !&%c DI[
 M:  &,SE1H6{m<1 #1IS	&s   +O?'$P1P	 	6QQc                    | j                   j                  |d        | j                  j                  |d        | j                  j                  |d        y rf   )r!  popr   r"  r6  s     rb   __delitem__z!ImageFileDirectory_v2.__delitem__  s>    #t$#t$#t$rm   c                j    t        t        | j                        t        | j                        z        S rf   )iterr-  r"  r!  r   s    rb   __iter__zImageFileDirectory_v2.__iter__  $    C&T]]);;<<rm   c                H    t        j                  | j                  |z   |      S rf   )r   unpackr  )r   r   r   s      rb   r   zImageFileDirectory_v2._unpack  s    }}T\\C/66rm   c                H    t        j                  | j                  |z   g| S rf   )r   packr  )r   r   r   s      rb   r   zImageFileDirectory_v2._pack  s    {{4<<#-777rm   Hr]  r@   r_  bzsigned bytehzsigned shortlzsigned longr   r{   ddoubler	  long8r   c                    |S rf   r>   r   r   r   s      rb   	load_bytezImageFileDirectory_v2.load_byte"      rm   c                t    t        |t              rt        |      }t        |t              rt        |f      }|S rf   )r   rq   r   r   r   r   s     rb   
write_bytez ImageFileDirectory_v2.write_byte&  s/    dK(t9DdC $>Drm   r&   c                R    |j                  d      r|d d }|j                  dd      S )N    ro   zlatin-1r   )endswithdecoderu  s      rb   load_stringz!ImageFileDirectory_v2.load_string.  s*    ==9D{{9i00rm   c                    t        |t              rt        |      }t        |t              s|j	                  dd      }|dz   S )NrG  r   r|  )r   r   r   r   rW  r   r   s     rb   write_stringz"ImageFileDirectory_v2.write_string4  s;     eS!JE%'LL)4Eu}rm   r,   r2   c           
         | j                  t        |      dz   d|      }dfdt        fdt        |d d d   |dd d         D              S )Nr*   r@   c                (    r| |fS t        | |      S rf   rq   arn  r   s     rb   combinez4ImageFileDirectory_v2.load_rational.<locals>.combineC      'Aq6>[A->>rm   c              3  6   K   | ]  \  }} ||        y wrf   r>   r`   numdenomr  s      rb   rc   z6ImageFileDirectory_v2.load_rational.<locals>.<genexpr>F       VZS%WS%(V   r&   r   r  r   rn  r   r   ztuple[int, int] | IFDRationalr   r_   rh   zipr   r   r   valsr  s     ` @rb   load_rationalz#ImageFileDirectory_v2.load_rational=  W     ||s4yA~.a0$7	? V3tCaCy$qtRSt*;UVVVrm   c                8     dj                   fd|D              S )Nrm   c              3  X   K   | ]!  } j                   d gt        |d        # yw)2Ll    N)r   rw   r`   r   r   s     rb   rc   z7ImageFileDirectory_v2.write_rational.<locals>.<genexpr>J  s-      
DHJDJJt?odI>?
s   '*r   r   r   s   ` rb   write_rationalz$ImageFileDirectory_v2.write_rationalH  s!    xx 
LR
 
 	
rm   r0   c                    |S rf   r>   ru  s      rb   load_undefinedz$ImageFileDirectory_v2.load_undefinedN  rw  rm   c                    t        |t              rt        |      }t        |t              rt        |      j	                  dd      }|S )NrG  r   )r   rq   r   r   rW  r  s     rb   write_undefinedz%ImageFileDirectory_v2.write_undefinedR  s:    e[)JEeS!J%%gy9Erm   
   c           
         | j                  t        |      dz   d|      }dfdt        fdt        |d d d   |dd d         D              S )Nr*   rp  c                (    r| |fS t        | |      S rf   r  r  s     rb   r  z;ImageFileDirectory_v2.load_signed_rational.<locals>.combine`  r  rm   c              3  6   K   | ]  \  }} ||        y wrf   r>   r  s      rb   rc   z=ImageFileDirectory_v2.load_signed_rational.<locals>.<genexpr>c  r  r  r&   r   r  r  r  s     ` @rb   load_signed_rationalz*ImageFileDirectory_v2.load_signed_rationalZ  r  rm   c                8     dj                   fd|D              S )Nrm   c           	   3  Z   K   | ]"  } j                   d gt        |dd        $ yw)2lii   N)r   r   r  s     rb   rc   z>ImageFileDirectory_v2.write_signed_rational.<locals>.<genexpr>g  s3      
 DJJtP4T9hOP
s   (+r   r  s   ` rb   write_signed_rationalz+ImageFileDirectory_v2.write_signed_rationale  s!    xx 

 
 	
rm   c                ~    |j                  |      }t        |      |k7  rd| dt        |       d}t        |      |S )Nz&Corrupt EXIF data.  Expecting to read  bytes but only got z. )readr_   OSError)r   fpr   retr  s        rb   _ensure_readz"ImageFileDirectory_v2._ensure_readl  sN    ggdms8t%%)F*>s3xjL  #,
rm   c           
     ~   | j                          |j                         | _        	 | j                  r"| j	                  d| j                  |d            n!| j	                  d| j                  |d            d   }t        |      D ]  }| j                  r"| j	                  d| j                  |d            n!| j	                  d| j                  |d	            \  }}}}t        j                  || j                        j                  }t        j                  |d
      }	d| d| d|	 d| d	}
	 | j                  |   \  }}||z  }|| j                  rdndkD  rv|j                         }| j	                  | j                  rdnd|      \  }|
d| d| z  }
|j#                  |       t%        j&                  ||      }|j#                  |       n|d | }t)        |      |k7  r>t+        j,                  d| dt)        |       d|        t        j!                  |
       |st        j!                  |
       || j.                  |<   || j0                  |<   |
dz  }
|
|dkD  rd| dn
t3        |      z  }
t        j!                  |
        | j                  r"| j	                  d| j                  |d            n!| j	                  d| j                  |d            \  | _        y # t        $ r t        j!                  d|
|       Y w xY w# t6        $ r(}
t+        j,                  t9        |
             Y d }
~
y d }
~
ww xY w)Nr	  r2   rm  r&   r   HHQ8s   HHL4srA   unknownztag:  (
) - type: )z%s - unsupported type %sr*   r@   z Tag Location: z - Data Location: z/Possibly corrupt EXIF data.  Expecting to read r  z. Skipping tag z
 - value: rF   <table:  bytes>)r  tellr  r  r   r  ranger   r)  r  r  r   getr   KeyErrorloggerdebugseekr   
_safe_readr_   rZ  r[  r"  r  r
  r  r  r   )r   r  	tag_countr}   r1  r2  countr   tagnametypnamer  	unit_sizer3  r   hereoffsets                   rb   loadzImageFileDirectory_v2.loadv  s   

wwy=	 == S$"3"3B":;\\#t'8'8Q'?@	I
 9% ." }} LL$*;*;B*CDgt/@/@R/HI &S% #//#tzz:??))C3gYbZy3%qI)-)<)<S)A&Iw y(115779D $DMMSsD QIV_TF2DVHMMCGGFO$//D9DGGDM;Dt9$MM--1F2Fs4yk R)),/
 LL%LL%%)c"$'S!|#4"9$w/$t*LS!]."d == S$"3"3B":;\\#t'8'8Q'?@ TYG   LL!;S#FP  	MM#c(#	s=   DL .K$ F#L $ LL LL 	L<L77L<c                   | j                   | j                  d| j                  rdnd      z   }| j                  r|| j                  ddd      z  }|| j                  r| j                  dd      z  }|S | j                  d	d      z  }|S )
Nrm  r  *   HHr2   r   r	  rC   r@   )r  r   r  r   r  s     rb   _get_ifhzImageFileDirectory_v2._get_ifh  s{    llTZZ4==RbII==4::dAq))Cdmmtzz#r"K
 :>C9KK
rm   c                \   | j                  | j                  rdndt        | j                              }g }| j                  rdnd}| j                  rdnd}|t        |      t        | j                        | j                  rdndz  z   |z   z  }d }t	        | j                  j                               D ]H  \  }}|t        k(  rt        |      }| j                  |   }	t        j                  d||	t        |             |	t        j                  k(  xr t        |t              }
|
rYt        | j!                         |	      }| j                  |   }|j                         D ]
  \  }}|||<    |j#                  |      }n+t        |t$              r|n|f} | j&                  |	   | g| }t        j(                  || j*                        j,                  }|
rd
nt/        j0                  |	d      }d| d| d| d|	 d	}|t        |      dk\  rdt        |       dn
t3        |      z  }t        j                  |       |
rd}nH|	t        j4                  t        j6                  t        j8                  fv rt        |      }nt        |      }t        |      |k  r(|j;                  ||	||j=                  |d      df       |j;                  ||	|| j                  ||      |f       |t        |      dz   dz  dz  z  }K |||   \  }}	}}}|rM| j>                  |	   \  }} || || j@                        D cg c]  }||z   	 }} | j&                  |	   | g| }n(| j                  || jC                  ||      d   |z         }||	|||f||<   |D ]Z  \  }}	}}}t        j                  d||	|t        |      t        |             || j                  | j                  rdnd||	||      z  }\ || j                  |d      z  }|D ]!  \  }}	}}}||z  }t        |      dz  s|dz  }# |S c c}w )Nr	  rm  r@   r2   r*   r  rA   zTag %s, Type: %s, Value: %s)r  ifdr  zsave: r  r  z) - value: rC   r  r  r   r|  rm   r&   r   z%s %s %s %s %sr  r  )"r   r  r_   r!  sortedr(  STRIPOFFSETSr  r  r  r
  r   rR  r   r%  r   r  tobytesrh   r   r)  r  r  r   r  r   rV  rU  rL  appendljustr   r   r   )r   r  resultentriesr   fmt_sizestripoffsetsr1  r   r2  r`  r  r   ifd_tag	ifd_valuer   r  r  r  r  r   r3  rs   s                          rb   r  zImageFileDirectory_v2.tobytes  s	   4==Cc3t}};MN<>]]c11K#dmm,dmmLLxW	
  !!4!4!67 "	3JCl""7|,,s#CLL6S$u+NHMM)Ej.EF+DMMO3Gs+*0,,. -&GY#,CL-{{6*",UE":0t++C0??ooc4::6;;G%e599S)+DG7)2cU*WIRuKPCCIOXc$i[0VTCLL 8J8JKKD	F4yH$S%He1LcRSS%C1H$OP3t9q=Q.22E"	3J #+2<+@(CeUD $ 3 3C 8g29$doo2VW3#,WW0t++C0??

3S%(@(Cf(LM$'eUD$@GL! -4 	(CeUDLL)3UDKdTdjj==gsC F	 	$**S!$$ -4 	 (CeUDdNF4y1}%	 
 - Xs   6P)c                    |j                         dk(  r|j                  | j                                |j                         }| j                  |      }|j                  |       |t	        |      z   S r   )r  writer  r  r_   )r   r  r  r  s       rb   savezImageFileDirectory_v2.save  sU    779>HHT]]_%f%
F##rm   )s   II*     NN)r  r   rk   zbytes | Noner  
int | Noner   r   )r   r   )r   r   r   r   r   r   r   )r   zdict[str, Any]r   r1  r   r   r
   r1  r   r   r   r1  r   r   r
   r   r   )r1  r   r   r
   r   r   r   r   )r1  r   r   r   r   zIterator[int])r   r   r   r   r   r   )r   r   r   r
   r   r   r   )r   r   r   r   r   r   )r   bytes | int | IFDRationalr   r   )r   r   r   r   r   r   )r   zstr | bytes | intr   r   )r   r   r   r   r   z)tuple[tuple[int, int] | IFDRational, ...])r   rq   r   r   )r   r  r   r   )r  	IO[bytes]r   r   r   r   )r  r  r   r   )r   r   rM   )r  r   r   r   )r  r  r   r   )7r   r   r   r   r   __annotations__r   r   r   rk   r  r   setterr  r&  r+  r.  r4  r7  r;  r:  rd  rg  r   r   listmapr  r   rP  rR  SIGNED_BYTErQ  rS  FLOATrT  IFDLONG8r   rv  r   rz  r  r  r  r  r  r  r  r  r  r  r  r  r  r>   rm   rb   r   r     s   :x :<N6;57O27 3# 	%!%! %! 	%!
 
%!N /0F/0F     (	
<	<3\|%
=78 	g.V,%%sM:&&^<%%sM:g.#x0sF+g.
	
" a  a  a1 1
 a  a.2WW'+W	2W W a
 

 a  a  b!.2WW'+W	2W W b
 
AFN`$rm   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
    c                2    t        |   |i | d| _        y )NT)superr   r  )r   r   kwargs	__class__s      rb   r   zImageFileDirectory_v1.__init__8  s    $)&)rm   c                    | j                   S rf   )r   r   s    rb   r   zImageFileDirectory_v1.<lambda><  s
     rm   c                    | j                   S rf   )r"  r   s    rb   r   zImageFileDirectory_v1.<lambda>=  s
    DMM rm   zdict[int, int]r  c                     | |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`

        rj   )rk   r"  r  r  )clsoriginalr  s      rb   from_v2zImageFileDirectory_v1.from_v2C  s<     )((&&==
rm   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`

        rj   )r   rk   r%  r"  r  r!  )r   r  s     rb   to_v2zImageFileDirectory_v1.to_v2U  sG     $4;;7DMM*4<<(DMM*
rm   c                >    || j                   v xs || j                  v S rf   )r   r"  r6  s     rb   r7  z"ImageFileDirectory_v1.__contains__f  r8  rm   c                j    t        t        | j                        t        | j                        z        S rf   )r_   r-  r"  r   r   s    rb   r.  zImageFileDirectory_v1.__len__i  r/  rm   c                j    t        t        | j                        t        | j                        z        S rf   )rf  r-  r"  r   r   s    rb   rg  zImageFileDirectory_v1.__iter__l  rh  rm   c                8    dD ]  }| j                  |||        y N)FT)r:  )r   r1  r   r   s       rb   r;  z!ImageFileDirectory_v1.__setitem__o  s!    ' 	2JMM#uj1	2rm   c           	        || j                   vrR| j                  |   }| j                  |   }| j                  |   \  }}dD ]  }| j	                  | || ||      |        | j                   |   }t        |t        t        f      s|f}|S r  )r   r"  r  r   r:  r   rh   r   )r   r1  r   r2  r   r3  legacyrs   s           rb   r4  z!ImageFileDirectory_v1.__getitem__s  s    dmm#==%D,,s#C //4MD'' Hc74v#>GHmmC #u~.&C
rm   )r   r
   r  r
   r   r   )r  r   r   r  )r   r   r  r   r  r  r  )r   r   r   r   r   r   tagstagdatar  classmethodr  r  r7  r.  rg  r;  r4  __classcell__r  s   @rb   r  r  %  s`    $  ./D12G ! ""<<=2
rm   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 TIFFFc                2    |  	 |  	 t         |   ||       y rf   )r  r   )r   r  filenamer  s      rb   r   zTiffImageFile.__init__  s     
 	5"X&rm   c                    | j                   j                  d      }|d   dk(  r|| j                   j                  d      z  }t        |      | _        | j                  j                  x| _        | _        d| _        | j                   | _        g | _	        d| _
        t        j                  d       t        j                  d| j
                         t        j                  dt        |             | j                  d	       y)
z#Open the first image in a TIFF filer2   r&   r  ro   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     rb   _openzTiffImageFile._open  s     ggll1oq6R<477<<?"C+C0 &*[[%5%55t{77%'%)23_dll3[$s), 	

1rm   c                R   | j                   }|| j                         }| j                  t        | j                               | j                   /| j                  | j                         dz          | j                   /| j                  |       | j                   J | j                   S )Nr   )r  r  r  r_   r  r  )r   current_n_framescurrents      rb   n_frameszTiffImageFile.n_frames  s    >>#iikGJJs4??+,..(

499;?+ ..(IIg~~)))~~rm   c                   | j                  |      sy| j                  |       | j                  [| j                  j                  | j
                  k7  s/| j                  j                  | j                  k7  s| j                  rd| _        yyy)z%Select a given frame as current imageN)_seek_checkr  _imimr   
_tile_sizemodereadonly)r   frames     rb   r  zTiffImageFile.seek  si    &

588GGLLDOO+ww||tyy(}}DH   rm   c                |   t        | j                  t              r| j                  j                  | j                  | _        t        | j                        |k  r| j                  sd}t        |      t        j                  d|| j                  | j                  | j                  j                                | j                  dk\  rd}t        |      | j                  j                  | j                         | j                  j                  | j                         t        j                  d| j                  j                                | 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k7  | _        | xj                  dz  c_        t        | j                        |k  r| j                  j                  | j                  |          | j                   j#                  | j                         t*        | j                   v rF| j                   t*           }t        |t,              rt        |      dk(  r|d   }|| j.                  d<   nd| j.                  v r| j.                  d= | j1                          t2        j5                  | j                         x| _        | _        || _        | j;                          y )	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)r   r  r   exr  r_   r  r  EOFErrorr  r  r  r  rY  r  r  r  r  r  r  is_animatedXMPrh   rJ  _reload_exifr  r  r1  r  _setup)r   r%  r  r'  s       rb   r  zTiffImageFile._seek  sD   dhh.((++(($//"e+;;3sm#LLK {{e#/ o%GGLL%OO""4;;/LL5tww||~FKKTWW%{{4??2  "kk..{{a!&4??#q(#';;!#3 LLAL9 $//"e+: 	T__U+,!$++++c"C#u%#c(a-!f"DIIedii		% 3;;DKKHH48rm   c                    | j                   S )zReturn the current frame number)r  r   s    rb   r  zTiffImageFile.tell  s    ||rm   c                   i }| j                   j                  t        j                  j                        }|r|j                  d      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 }|j                  d      r|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.
        s   8BIMr*   r.   r   r&   r  r   N)
r  r  r   BaseImageResourcesrg   i16mathceili32)r   blocksrs   idnr   r   s          rb   get_photoshop_blocksz"TiffImageFile.get_photoshop_blocks  s     kkoohmm::;..)Qq]IIs1vzQ./!33q1urAv./26BFTM2$d^r
$))R!Vd]a$781<>? ..) rm   c                p    | j                   r| j                  r| j                         S t        |          S rf   )tileuse_load_libtiff_load_libtiffr  r  )r   r  s    rb   r  zTiffImageFile.load  s-    99..%%''w|~rm   c                
   | j                   Xt        j                  | j                         t        j                  j                  | j                  | j                        | _        t        j                  j                  |        y rf   )
r   r   _decompression_bomb_checkr"  corenewr#  r!  r   load_preparer   s    rb   rB  zTiffImageFile.load_prepare  sP    88++DOO<jjnnTYY@DG((.rm   c                f   | j                   sBd| _        | j                         }t        j                  D ]  }||vr|j                  |        t        j                  | d       t        j                  j                  | j                  v r&| j                  t        j                  j                  = y y )NT)in_place)r*  !_close_exclusive_fp_after_loadinggetexifr   TAGS_V2_GROUPSget_ifdr   exif_transposer   r0  Orientationr  )r   exifkeys      rb   load_endzTiffImageFile.load_end  s     59D2 <<>D.. "d?S!"
 	t4==$$3HMM556 4rm   c                   t         j                   j                  |        | j                          t        | j                        dk(  sd}t        |      | j                  d   d   }| j                  d   d   }	 t        | j                  d      xr | j                  j                         }t        | j                  d      r| j                  j                          |r-t        |t              sJ t        |      }||d<   t        |      }t        j                  | j                  d	|| j                        }	 |j!                  | j"                  |       | j&                  xr | j(                   }t        | j                  d      rBt*        j-                  d       |j/                  | j                  j1                               \  }	}
n|rt*        j-                  d       |s| j                  j3                  d       t5        j6                  |dt4        j8                        }|j/                  d      \  }	}
t5        j6                  ||t4        j:                         n\t*        j-                  d       | j                  j3                  d       |j/                  | j                  j=                               \  }	}
g | _        d| _        | jA                          |r!| j                  jC                          d| _        |
dk  rd|
 }t        |      t         j                   j                  |       S # t
        $ r d}Y ]w xY w# t$        $ r}d
}t        |      |d}~ww xY w)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 readingzdecoder error )"r   r  rB  r_   r;  r  r   r  rO  rP  r   rh   r  _getdecoderr#  decoderconfigsetimager!  rY  _exclusive_fpr*  r  r  r~  rR  r  oslseekSEEK_CURSEEK_SETr  r$  rM  close)r   r  extentsr   r  	args_listdecodereclose_self_fpr8  errposs               rb   r=  zTiffImageFile._load_libtiff0  s    	499~"(C#, ))A,q/yy|A

	(+@0@B tww( dE***T
IIaL#D##DIIy$@R@RS	&TWWg.
 **C43C3C/C477J' LLPQ^^DGG$4$4$67FAsLLNO Q ((2q"++.C^^G,FAsHHRbkk* LLFGGGLLO^^DGGLLN3FAs	GGMMODG7"3%(C#,{{%%G  	 B	  	&*C#,A%	&s+   :A"L+ 8L= +L:9L:=	MMMc                   d| j                   v rd}t        |      t        | j                   j                  t        d         | _        | j                   j                  t        d      | _        | j                   j                  t        d      }| j
                  dk(  rd}| j                   j                  t        d      }t        j                  d       t        j                  d| j
                         t        j                  d	|       t        j                  d
| j                         t        j                  d|       t        j                  d| j                   j                  t                     	 | j                   t           }| j                   t           }t#        |t$              rt#        |t$              sd}t'        |      ||f| _        | j                   j                  t*        j,                  j.                        }|dv r
||f| _        n	||f| _        t        j                  d| j2                         | j                   j                  t4        d      }t7        |      dkD  r"t9        |      t;        |      cxk(  rdk(  rn nd}| j                   j                  t<        d      }	| j                   j                  t>        d      }
|dv rd}n
|dk(  rd}nd}|t7        |
      z  }t7        |	      }| j                   j                  t@        | j
                  dk(  r|dv rdnd      }|tB        kD  r#t        jE                  d|       d}tG        |      ||k  r|	d| }	n||kD  r
|dk(  r|	|z  }	t7        |	      |k7  rd}tG        |      | j                   jH                  ||||	|
f}t        j                  d|       	 tJ        |   \  | _&        }t        j                  d|       t        j                  d | jN                         | j
                  | jP                  d!<   | j                   j                  tR        d      }| j                   j                  tT        d      }|r|r| j                   j                  tV              }|d"k(  r||f| jP                  d#<   nS|dk(  r|d$z  |d$z  f| jP                  d#<   n6|#||f| jP                  d#<   ||f| jP                  d%<   n||f| jP                  d%<   dx}x}}g | _,        tZ        xs | j
                  d&k7  | _.        | j\                  r|d"k(  r5|dd dz   |dd z   }t        j                  d|       tJ        |   \  | _&        }|dk(  r!| j
                  d'k(  r| j                  dk(  rd(}n!|d)k(  rd*}n|j_                  d+      r|dd, d-z   }|| j
                  d.| j                   j`                  f}| jX                  jc                  te        jf                  d/dd||fd|             nth        | j                   v stj        | j                   v rth        | j                   v r6| j                   th           }| j                   j                  tl        |      }|}n| j                   tj           }| j                   j                  tn              }| j                   j                  tp              }t#        |t$              rt#        |t$              sd0}t'        |      |}||k(  r||k(  r| j                  d"k7  r|d,d }|D ]  }||z   |kD  r|ts        |	      z  d1z  }nd}|}| j                  d"k(  r
||   }||z  }|t%        |      df}| jX                  jc                  te        jf                  | j
                  ||t;        ||z   |      t;        ||z   |      f||             ||z  }||k\  sd||z   }}||k\  sd}|dz  } n"t        j                  d2       d}tG        |      tt        | j                   v r | j                   tt           | jP                  d3<   | jN                  d4v rW| j                   tv           D cg c]  }ty        |d5z         } }t{        j|                  d6d7j                  |             | _@        yy# t        $ r}d}t!        |      |d}~ww xY w# t        $ r(}t        j                  d       d}tG        |      |d}~ww xY wc c}w )8z-Setup this image object based on current tagsi  z+Windows Media Photo files not yet supportedr   r   r/   r.   z*** Summary ***z- compression: %sz - photometric_interpretation: %sz- planar_configuration: %sz- fill_order: %sz- YCbCr subsampling: %szMissing dimensionsNzInvalid dimensions)r,   r.   r0   r2   z
- size: %sr=   r>   )r&   r.   r2   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%   r1   rK   rB   I;16N)z;16Bz;16Lro   NFrQ  zInvalid tile dimensionsr2   z- unsupported data organizationicc_profilerW   rY   r"   RGB;Lrm   )Ar  r  COMPRESSION_INFOr  COMPRESSION_compressionPLANAR_CONFIGURATION_planar_configurationPHOTOMETRIC_INTERPRETATION	FILLORDERr  r  YCBCRSUBSAMPLING
IMAGEWIDTHIMAGELENGTHr  	TypeErrorr   r   rY  r"  r   r0  rJ  _sizer   SAMPLEFORMATr_   r   r   BITSPERSAMPLEEXTRASAMPLESSAMPLESPERPIXELMAX_SAMPLESPERPIXELerrorr  rk   	OPEN_INFO_moder#  rJ  X_RESOLUTIONY_RESOLUTIONRESOLUTION_UNITr;  READ_LIBTIFFr<  r}  r  r  r   _Tiler  TILEOFFSETSROWSPERSTRIP	TILEWIDTH
TILELENGTHsum
ICCPROFILECOLORMAPr   r   r%   r   palette)!r   r  photo	fillorderxsizeysizer_  orientationsample_format	bps_tupleextra_tuple	bps_countbps_actual_countsamples_per_pixelrL  rawmodexresyresresunitxylayerr  offsetsro  w	tilewidthr  stridetile_rawmoder   rn  r  s!                                    rb   r-  zTiffImageFile._setup  s    T[[ ?C#, -T[[__[!-LM%)[[__5I1%M"  :A> +EKKOOIq1	&'($*;*;<7?143M3MN'3.@P0QR	(KK
+EKK,E %%Zs-C&CS/!,kkoohmm&?&?@,&DJDJ\499-d;}!c-&8C<N&SRS&S !MKKOOM48	kkoolB7IIaZIIS%%	y> KKOO""k1evoA1

 22LL@BS 8Cc""// ""4#45I!116F!6K "$55Iy>..-Cc"" KK
 	%s+	*"+C.DJ 	%w/%tyy1#'#4#4		- {{|Q/{{|Q/Dkkooo6G!|$($<		% A$(4K#=		% $($<		%  +/*		,'*.*		,' A	 , J0A0AU0J   A~"1gns12w.-s3 '0n#
G 
%%/..!3
 F"!!!"23!#2,, $++UDKK4F4FGAIIY__YAue8LaQRSTT[[(K4;;,Ft{{*++l3KKOOL%8 ++k2 KKOOI6	KKOOJ/!)S1As9K3C$S/)Eza5jT-G-G1-L!"#,! #q55=Y/!3FF&--2#*5>Li'F$c&k15		  OO))As1q5%0#a!eU2CD	 Q:a!eqAEz
7#: LL:;-Cc"" $'+{{:'>DIIm$ 99#-1[[-BCr!s(|CGC'++GSXXg5FGDL $[  	(&CC.a'	(P  	*LL/0&Cc")	*L Ds6   3&b <b# c	b bb #	c,#ccrf   )r  StrOrBytesPath | IO[bytes]r  zstr | bytes | Noner   r   r  r   )r%  r   r   r   )r   zdict[int, dict[str, bytes]])r   zImage.core.PixelAccess | None)r   r   r   formatformat_descriptionrE  r   r  r   r  r  r  r  r9  r  rB  rM  r=  r-  r	  r
  s   @rb   r  r    s    F%(-%
 (,'&' %' 
	'0 	 	
/b*
/7"^&@oHrm   r  r?   r@   rJ   rW   rY   rE   rI   rB   I;16LrG   rH   rK   rN   rL   rZ   YCbCrr]   rD   c                \   	 t         | j                     \  }}}}}}| j                  }| j
                  }t        |      }|j                  d      rd|_        	 |d   }|d}n|dk(  rd	}n|d
k(  rd}t        xs |dk7  }d|t        <   | j                  d   |t        <   | j                  d   |t         <   d|v r|d   }nCd|v r=|d   }t        |t"              r*t%        j&                         }|j)                  |       |}ni }t*        j-                  dt/        |             t        |t0              r|j3                         }|D ]t  }t        |t$        j&                        r'|t4        j6                  v r|j9                  |      ||<   n|j                  |      ||<   	 |j:                  |   |j:                  |<   v i }t?        | d      r| j@                  j3                         }i |tC        | di       }tD        tF        fD ]
  }||v s||=  t?        | d      rtH        tJ        tL        tN        tP        tR        fD ]  }|| jT                  v s|tN        k(  r=| jT                  j:                  |   t4        jV                  t4        jX                  fvr||= X| jT                  |   ||<   | jT                  j:                  |   |j:                  |<    |j                  d| j                  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 s||   ||<    |j                  d      }|r!d|tH        <   |d   |tJ        <   |d   |tL        <   |dk7  r)||tf        <   ti        |      dk7  rti        |      |tj        <   |	||tl        <   |dk7  r	||tF        <   tn        |vr
||tn        <   n| j                  d v r|tn           dk(  r| j                  d!k(  rl| jq                         }|j)                         }|_ts        |jt                        D ]/  }ts        |jv                        D ]  }|||f   d"k(  rdnd"|||f<    1 |} nty        jz                  |       } | j                  d#v rs| j|                  j                  d$d%      }g }ti        |      d&z  }ts        d&      D ]0  } |||| z  || dz   z   D !cg c]  }!|!d'z  	 c}!z  }|dgd'|z
  z  z  }2 ||t        <   |t           |t            }#}"ti        |      |"|d   z  d(z   d)z  z  }$t        |vr[|rG|j                  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        j                  |j:                  t        <   |'f|(dz
  z  |$|#z  |'|(dz
  z  z
  fz   |t        <   t        ts        d|'|(z  |'            |t        <   t        j                  |d      |t        <   | j                  d,k(  r6t        d-t        d.ij                         D ]  \  }})|j                  ||)        t        t        t        t        g}*|ryd/|v rG|d/   }+t        |+t              r
|+dk  s|+d0kD  rd1}
t        |
      |d	k7  rd2}
t        |
      |+|t        <   t*        j-                  d3       t*        j-                  d4t        |j                                      d},t?        |d5      r"	 |j                  d       |j                         },i }-|*t        t        t        t        t        t        gz  }*tf        |d   i}.t        j                  |j                         |j                               D ]  \  }}/|t4        j                  vrtC        t$        j                  d6d7      s5|t4        j6                  v rt4        j                  |-|<   nh||j:                  v r|j:                  |   |-|<   nGt        |/t        t        t        t"        f      st5        j                  |      j                  }0|0r|0|-|<   ||.vs||*vst        |/t              r|/j                  d8d9      d:z   |.|<   t        |/t              rt        |/      |.|<   |/|.|<    tF        |.v r(ti        |.tF                 dk(  r|.tF           d   |.tF        <   t*        j-                  d;t        |.j                                      | j                  d<v rd=}t/        |.j                               }1|1j                          |||,||1|-f}2t%        j                  | j                  d>|2|      }3|3j                  | j|                  d?| j                  z          	 |3j                  t        j                        dd  \  }4}5|,s|j                  |5       |4rn<|4dk  rjd@|4 dA}
t        |
      |*D ]  }||=  |j                  |      }6t        j                  | |t        j                  dd?| j                  z   |6||$df      g       dB|v rt        | dB|       y y # t        $ r!}	d| j                   d}
t        |
      |	d }	~	ww xY w# t        $ r1 | j                  j                  d      }t        |t              rd }Y 
w xY w# t<        $ r Y 	w xY wc c}!w # t        j                  $ r Y w xY w)CNzcannot write mode z as TIFFrj   big_tiffTrd  r%   r/   r1   r7   r3   r   r   tiffinforK  zTiffinfo Keys: %sr1  r  ri  descriptionrf  x_resolutiony_resolutionresolution_unitsoftware	date_timeartist	copyrightre  r&   r=   )r?   r@   r?   r!   rj  rK   rk  r(   r"   r0   r2   
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: %srO  rd   FrG  r   r|  zConverted items: %s)rB   rD   r  rg  rQ  rO   zencoder error z when writing image file_debug_multipage)q	SAVE_INFOr#  r  r  encoderinfoencoderconfigr   r  r  rJ  r   r   WRITE_LIBTIFFro  r   rt  ru  r   r   Exifr  r  r  r  r  r  r   rG  rH  r  r  r   r1  r   EXIFIFDrx  r  r  r  IPTC_NAA_CHUNKPHOTOSHOP_CHUNKr+  r  rV  rL  r  IMAGEDESCRIPTIONSOFTWARE	DATE_TIMEARTIST	COPYRIGHTry  r_   r{  rz  rq  copyr  heightwidthr   invertr!  
getpaletter  r  
STRIP_SIZEr   rR  STRIPBYTECOUNTSrh   r  COMPRESSION_INFO_REVrm  rs  REFERENCEBLACKWHITEr(  
setdefaultr  r  r  TILEBYTECOUNTSrY  JPEGQUALITYr  r  rO  ioUnsupportedOperationOSUBFILETYPETRANSFERFUNCTIONSUBIFD	itertoolschainLIBTIFF_COREr@  r  r{   r   r)  rK  rW  rq   sort_getencoderrU  r   MAXBLOCKr  r  _saver  setattr)7r!  r  r  r  rk   r  r  bitsextrar_  r  r  r  r  rd  rQ  rJ  rK  rL  
legacy_ifdsupplied_tagsr1  iccr  re  inverted_impxr  r  lutcolormapcolorsr}   r?  r  ro  r  im_strip_sizerows_per_stripstrip_byte_countsstrips_per_imagedefault_value	blocklistr  r  typesattsr   rK  r  r  encodererrcoder   r  s7                                                          rb   r  r    s(   "6?6H3e
 ..K$$M
v
.Cz"!-0 		#		&*3{e3G !"CggajC
OwwqzC [ :&	;	6"dE"::<DIIdOD
LL$d4j1$-.zz| dEJJ'C83J3J,J||C(CHxx}CH	#||C0CKK Jr5VV\\^
?z?WR2%>?M 		 # -c"# r8 
 	>C bii.(RYY->->s-CMM&&L . &c*!yy~CH')yy'8'8'=CKK$!	>( //-])C
DC
J 
=)	|$	|$	~&	~&	+,	:	K 		K  )	T ;"4(CH) //%
 C
 OFLFLt|!Mt9>#&t9C !L{"L!,*/&'	J	3'A#Ba#G77c>'')K!!#B~{112 AA";#4#45 A(*1a4C1S1a4AA !$B	ww+eeug.SQq 	-A#fqj6QU;K*LMQSMMHsV|,,H	- !Hz?C,qAY1tAw;?q01F3'OOL*EM"(A+Q3}7NPQ3RNf$!$~'9a&?1%Da!HNQN*L#q[fs<7H.HC--1c,6GGE!'/}}O$-/3Ca3GH
&*:Q*>??L C a"%557HIC ,//Q?C	ww'f!=#
 %'	/C NN3.		/ J^DI#!),Ggs+w{gm/ o%f$M o%&C34[&"562x 
iik
  	
 	
	 !.tAw7 $//#))+}7J7J7LM 	&JC
 (///uzz+H%P(111!)E#JCKK'!$S!1E#J$US%e,DE#??3/44D%)c
$3i#7eS) %Wi @5 HDI{3 %eDI %DI3	&6 4C\(:$;q$@!%l!3A!6D*F4::<,@A 7700G
 DJJL!		k3$>##BGGY=I 01#NN9+=+=>qrBMGT  Q;"7)+CDC#,  	CC	"__UFRWW$4fwPQ>RST	
 [(&, )]	  ""277)84cl!"  ggkk-0k3'K	T  		| Nt ** sS   j k k?,l!l 	j?j::j?6k<;k<?	lll+*l+c                  D   e Zd Zg dZh dZd d!dZd"dZd"dZd"dZd#dZ	d$dZ
d%d	Zej                  fd&d
Zd"dZd'dZd"dZd(dZd)dZd*dZd%dZd%dZed+d       Z	 d,	 	 	 	 	 	 	 d-dZd.dZd.dZd.dZd/dZd.dZd.dZd"dZ d"dZ!d0dZ"	 d1	 	 	 	 	 	 	 d2dZ#y)3AppendingTiffWriter)r   r   r   r&   r*   r2   r   r   r&   r*   r2   r*   r2   r*   r&   r*   r2   >       	     r#   r$   c                L   |  t        |      r%|| _        d| _        	 t        ||rdnd      | _        n#t        t        t           |      | _        d| _        | j                  j                         | _
        | j                          y # t
        $ r t        |d      | _        Y Lw xY w)NTzw+bzr+bF)r   r  close_fpopenr   r  r   r	   r   r  	beginningsetup)r   fnrA  s      rb   r   zAppendingTiffWriter.__init__  s    2;DI DM)b3%E: "U)R(DF!DM

  )b%)s   B B#"B#c                &   | j                   j                  | j                  t        j                         d | _        d| _        | j                   j                  d      x| _        }d|v | _	        |sd| _
        y d| _
        |t        vrd}t        |      | j                  |j                  t              rdnd       | j                  r*| j                   j                  dt        j                          | j#                          | j%                          y )	Nr   r*      +TFzInvalid TIFF file headerr  r  )r   r  r  rW  rZ  whereToWriteNewIFDOffsetoffsetOfNewPager  IIMMr  isFirstri   RuntimeError	setEndianrg   r  rY  skipIFDsgoToEnd)r   iimmr  s      rb   r  zAppendingTiffWriter.setup  s    DNNBKK048% 66;;q>)	D4DLx,Cs##doob1ss;==FFKK2;;'rm   c                   | j                   ry | j                  j                  | j                         | j                  j	                  d      }|sy || j
                  k7  rd}t        |      | j                  r*| j                  j                  dt        j                         | j                  | j                  rdnd      }|| j                  z  }| j                  J | j                  j                  | j                         | j                  || j                  rdnd       | j                  j                  |       | j                          y )Nr*   z1IIMM of new page doesn't match IIMM of first pager2   )r  r   r  r  r  r  r  r  rW  rY  _readr  _writefixIFD)r   r	  r  
ifd_offsets       rb   finalizezAppendingTiffWriter.finalize  s    << 	D(()vv{{1~499ECs##==FFKK2;;'ZZT]]:
d***
,,888D112JT]]:Jrm   c                D    | j                          | j                          y rf   )r  r  r   s    rb   newFramezAppendingTiffWriter.newFrame6  s    

rm   c                    | S rf   r>   r   s    rb   	__enter__zAppendingTiffWriter.__enter__;  s    rm   c                >    | j                   r| j                          y y rf   )r  r[  )r   r   s     rb   __exit__zAppendingTiffWriter.__exit__>  s    ==JJL rm   c                P    | j                   j                         | j                  z
  S rf   )r   r  r  r   s    rb   r  zAppendingTiffWriter.tellB  s    vv{{}t3333rm   c                    |t         j                  k(  r|| j                  z  }| j                  j	                  ||       | 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.
        )rW  rZ  r  r   r  r  )r   r  whences      rb   r  zAppendingTiffWriter.seekE  s>     R[[ d***FFF#yy{rm   c                >   | j                   j                  dt        j                         | j                   j	                         }d|dz  z
  }d|cxk  rdk  r'n n$| j                   j                  t        |             | j                   j	                         | _        y )Nr   rC   )r   r  rW  SEEK_ENDr  r  r   r  )r   rb  	pad_bytess      rb   r  zAppendingTiffWriter.goToEndR  sj    Ar{{#ffkkm rM	y2FFLLy)*#vv{{}rm   c                    || _         | j                    d| _        | j                    d| _        | j                    d| j                  r
dz   | _        y dz   | _        y )Nr@   rm  r  r	  )endianlongFmtshortFmtr  	tagFormat)r   r  s     rb   r  zAppendingTiffWriter.setEndian\  sS    ++a(;;-q) KK=+dmmsMMrm   c                   	 | j                  | j                  rdnd      }|dk(  r9| j                  j                         | j                  r
dz
  | _        y dz
  | _        y | j                  j                  |       | j                  | j                  rdnd      }| j                  j                  || j                  rdndz  t        j                         )Nr2   r*   r   r&   r  rA   )r  r  r   r  r  r  rW  rY  )r   r  num_tagss      rb   r  zAppendingTiffWriter.skipIFDsb  s    AA>JQ04A1-  -.1- FFKK
#zzt}}!!<HFFKK$--BR@"++N rm   c               8    | j                   j                  |      S rf   )r   r  ry  s     rb   r  zAppendingTiffWriter.writeo  s    vv||D!!rm   c                J    	 dddd|   S # t         $ r d}t        |      w xY w)Nrm  r@   r	  )r&   r*   r2   zoffset is not supported)r  r  )r   
field_sizer  s      rb   _fmtzAppendingTiffWriter._fmtr  s8    	$ss+J77 	$+Cs##	$s    "c                    t        j                  | j                  | j                  |      z   | j                  j                  |            \  }|S rf   )r   rj  r  r&  r   r  )r   r%  r   s      rb   r  zAppendingTiffWriter._ready  s=    ==KK$))J//Z1H
 rm   c                $    | j                  d      S Nr&   r  r   s    rb   	readShortzAppendingTiffWriter.readShort      zz!}rm   c                $    | j                  d      S Nr*   r*  r   s    rb   readLongzAppendingTiffWriter.readLong  r,  rm   c                :    | | |k7  rd|  d| }t        |      y y )Nzwrote only z bytes but wanted )r  )bytes_writtenexpectedr  s      rb   _verify_bytes_writtenz)AppendingTiffWriter._verify_bytes_written  s6    $()B.@
KCs## *C$rm   c                   | j                   j                  | t        j                         |s|}| j                   j	                  t        j                  | j                  | j                  |      z   |            }| j                  ||       y rf   )
r   r  rW  rY  r  r   rl  r  r&  r3  )r   r   r%  new_field_sizer1  s        rb   _rewriteLastz AppendingTiffWriter._rewriteLast  sh     	ZK-'NKKdii&??G
 	""=.Arm   c                *    | j                  |dd       y )Nr&   r*   r6  r  s     rb   rewriteLastShortToLongz*AppendingTiffWriter.rewriteLastShortToLong  s    %A&rm   c                &    | j                  |d      S r)  r8  r  s     rb   rewriteLastShortz$AppendingTiffWriter.rewriteLastShort        **rm   c                &    | j                  |d      S r.  r8  r  s     rb   rewriteLastLongz#AppendingTiffWriter.rewriteLastLong  r<  rm   c                    | j                   j                  t        j                  | j                  | j                  |      z   |            }| j                  ||       y rf   )r   r  r   rl  r  r&  r3  )r   r   r%  r1  s       rb   r  zAppendingTiffWriter._write  sF    KKdii
&;;UC
 	""=*=rm   c                (    | j                  |d       y r)  r  r  s     rb   
writeShortzAppendingTiffWriter.writeShort      E1rm   c                (    | j                  |d       y r.  rA  r  s     rb   	writeLongzAppendingTiffWriter.writeLong  rC  rm   c                r    | j                          | j                  r| j                  j                          y y rf   )r  r  r   r[  r   s    rb   r[  zAppendingTiffWriter.close  s$    ==FFLLN rm   c           
        | j                  | j                  rdnd      }t        |      D ]  }t        j                  | j
                  | j                  j                  | j                  rdnd            \  }}}| j                  |   }||z  }| j                  rdnd}||k  }	|	s0| j                  |      | j                  z   }
| j                  |
|       || j                  v r| j                  j                         }t        j                  dt        j                   |      j"                  |t%        j&                  |d      |||       |	r2| j)                  ||       | j                  j+                  ||z          R| j                  j+                  
       | j)                  ||       | j                  j+                  |       |	s| j                  j+                  |t,        j.                          y )Nr2   r&   rA   r*   z;fixIFD: %s (%d) - type: %s (%d) - type size: %d - count: %dr  )r  r  r  r   rj  r   r   r  
fieldSizesr  r6  Tagsr  r  r  r   r)  r  r   r  _fixOffsetsr  rW  rY  )r   r"  r}   r1  
field_typer  r%  
total_sizer  is_localr  cur_poss               rb   r  zAppendingTiffWriter.fixIFD  s   ::4==aa8x $	3A%+]]$--BQ G&"CU 4J#e+J MMqqH!X-HH-0D0DD!!&(3dii&&++-QOOC(--IIj)4 $$UJ7FFKK( 23FFKK'$$UJ7FFKK(Hbkk2I$	3rm   c                   t        |      D ]  }| j                  |      }|| j                  z  }d}| j                  r|dv r|dk\  rd}n|dk(  r|dk\  rd}|r|dk7  rd	}t	        |      | j                  |||       | dz
  dz
  }| j                  j                  |t        j                         | j                  |       | j                  j                  d|z
  t        j                         | j                  ||        y )
Nr   )r&   r*   l        r2   r&   r    r*   r   znot implemented)r  r  r  r  r  r6  r   r  rW  rY  rB  )r   r  r%  r}   r  r5  r  rewinds           rb   rJ  zAppendingTiffWriter._fixOffsets  s    u 	6AZZ
+Fd***FN}}v!5&E/!"qVu_!"A:+C&s++ !!&*nE(1,q0FBKK0/AJ4!!&*53	6rm   c                >    |rd}n|rd}nd}| j                  ||      S )Nr&   r*   r   )rJ  )r   r  isShortisLongr%  s        rb   
fixOffsetszAppendingTiffWriter.fixOffsets  s,     JJJz22rm   N)F)r  r  rA  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   )r1  r  r2  r   r   r   rM   )r   r   r%  r   r5  r   r   r   )r   r   r   r   )r   r   r%  r   r   r   )r  r   r%  r   r   r   )FF)r  r   rR  r   rS  r   r   r   )$r   r   r   rH  rI  r   r  r  r  r  r  r  r  rZ  r  r  r  r  r  r&  r  r+  r/  staticmethodr3  r6  r9  r;  r>  r  rB  rE  r[  r  rJ  rT  r>   rm   rb   r  r    s
   J(D44
4 /1kk -NO"$ $ $ BC	B	B&)	B;>	B		B'++>
'3R6: AF	3	3#'	39=	3		3rm   r  c                X   t        | j                  j                  dg             }t        | d      s|st	        | ||      S | j                         }	 t        |      5 }| g|z   D ]  }|j                  |       }t        |d      sd|_        t        |dd      }t        |      D ]@  }	|j                  |	       |j                          t	        |||       |j                          B ||_         	 d d d        | j                  |       y # 1 sw Y   xY w# | j                  |       w xY w)Nappend_imagesr  r  r>   r   )r  r  r  r   r  r  r  _attach_default_encoderinfor  r   r  r  r  r  )
r!  r  r  rW  cur_idxtfimsr  nfrr   s
             rb   	_save_allr]  	  s   ++OR@AM2z"=RX&&ggiG $ 	.tm+ .!==bAsO4(*C%c:q1 : "CHHSMHHJ#r8,KKM	"
 #..	. 		. 	. 	s%   D BD
0D 
DD D)z.tifz.tiffz
image/tiff)rk   r   r   r   )rs   r   rt   r   r   !tuple[IntegralLike, IntegralLike])rs   rq   rt   r   r   r   r   r^  )r   r   r   r
   )r   r   r   r   r   z$Callable[[_LoaderFunc], _LoaderFunc])r   r   r   z2Callable[[Callable[..., Any]], Callable[..., Any]])r  ztuple[int, str, str]r   r   )r!  zImage.Imager  r  r  zstr | bytesr   r   )
__future__r   r  r  loggingr3  rW  r   rZ  collections.abcr   r   	fractionsr   numbersr   r   typingr	   r
   r   r   r    r   r   r   r   r   r   _binaryr   r2  r   r5  r   
_deprecater   _typingr   _utilr   r   r   r   r   r   	getLoggerr   r  r  r  r  r  r  r  rt  ru  ry  rm  rq  rr  r  r  r{  r  r  r  r  ro  r  r  r  r  r  	PREDICTORr  r  r  r  r  r  rz  rx  
JPEGTABLESrs  r  r  r  r  r  r  r+  r  IMAGEJ_META_DATA_BYTE_COUNTSIMAGEJ_META_DATArl  r(  r  r~  r   r|  ri   r   r@  rl   rw   r   r   r   r   rq   r   r   r   r   r   r  r   
_IFDv2Baser   r   r  r   r  r  ImageFileDirectoryr  r  r  BytesIOr  r]  register_openr  register_saveregister_save_allregister_extensionsregister_mime)kr?  s   00rb   <module>rx     sB  R # 	    	   4  $ 4 4 J J ! !  ! # ) -			8	$ 


 
  	   				
	
  	

	  %  u | x	
 x z { v  
= 
: 
 
> 
= 
?  
6!" 
6#$ 
6% * *:)?)?)ABA1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|	| AyAA  uzz8$?:B?.%	'%25%&%	"-0&& G'( G'T /=sBC	$ S)JJP$J P$f (6  $(7  % JIC<<S!D!U4&>>#3Fq3IJ!VD6?OC4HIJ OS$X1 Xx + wHI'' wHB #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-#$ gr1a-%	,s-l	i3"** i3X	8   M((- A   M((% 0   ,,i 8   -..0A B   M((, 7_D Cs   _.