
    h4h
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 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#m$Z$ ddlm%Z% dZ&e&rd dl	m'Z' d dlm(Z( ddl)m*Z*m+Z+m,Z,  ejZ                  e.      Z/d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/ZOd0ZPd1ZQd2ZRd3ZSd4ZTd5ZUd6ZVd7ZWd8ZXd9ZYd:ZZd;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}} Z`i e3d d_dd_d`fdae4d d_dd_d`fdae3d d_d?d_d`fdbe4d d_d?d_d`fdbe3dd_dd_d`fdce4dd_dd_d`fdce3dd_d?d_d`fdde4dd_d?d_d`fdde3d d_dded`fdfe4d d_dded`fdfe3d d_d?ded`fdge4d d_d?ded`fdge3dd_dded`fdhe4dd_dded`fdhe3dd_d?ded`fdie4dd_d?ded`fdie3d d_ddjd`fdki e4d d_ddjd`fdke3d d_d?djd`fdle4d d_d?djd`fdle3dd_ddjd`fdme4dd_ddjd`fdme3dd_d?djd`fdne4dd_d?djd`fdne3d d_ddod`fdpe4d d_ddod`fdpe3d d_d?dod`fdqe4d d_d?dod`fdqe3dd_ddod`fdre4dd_ddod`fdre3ddeddod`fdre4ddeddod`fdre3dd_d?dod`fdse4dd_d?dod`fdsi e3dd_ddtd`fdue3d d_ddvd`fdwe3dd_ddvd`fdwe4dd_ddvd`fdxe3dd_d?dvd`fdye3ddeddvd`fdze4ddeddvd`fd{e3d d|dd}d`fd~e4d d|dd}d`fde3dd_dd}d`fde3ddedd}d`fde4ddedd}d`fde3dd|dd}d`fd~e4dd|dd}d`fde3dd_dddefde4dd_dddefde3d?d_ddd`fdi e4d?d_ddd`fde3d?d_d?dd`fde4d?d_d?dd`fde3d?d_ddd`fde4d?d_ddd`fde3d?d_dddfde4d?d_dddfde3d?d_dddfde4d?d_dddfde3d?d_dddfde4d?d_dddfde3d?d_ddd_fde4d?d_ddd_fde3d?d_dddfde4d?d_dddfde3d?d_dddfde4d?d_dddfdi e3d?d_dddefde4d?d_dddefde3d?d_dddfde4d?d_dddfde3d?d_dddfde4d?d_dddfde3d?d_dddfde4d?d_dddfde3d?d_ddd`fde4d?d_ddd`fde3d?d_ddd`fde4d?d_ddd`fde3d?d_dddfde4d?d_dddfde3d?d_ddd_fde4d?d_ddd_fde3d?d_dddefdi e4d?d_dddefde3dAd_dd_d`fde4dAd_dd_d`fde3dAd_d?d_d`fde4dAd_d?d_d`fde3dAd_dded`fde4dAd_dded`fde3dAd_d?ded`fde4dAd_d?ded`fde3dAd_ddjd`fde4dAd_ddjd`fde3dAd_d?djd`fde4dAd_d?djd`fde3dAd_ddod`fde4dAd_ddod`fde3dAd_dddfde4dAd_dddfdi e3dAd_dddefde4dAd_dddefde3dAd_d?dod`fde4dAd_d?dod`fde3dEd_ddd`fde4dEd_ddd`fde3dEd_dddfde4dEd_dddfde3dEd_dddfde4dEd_dddfde3dEd_ddd`fde4dEd_ddd`fde3dGd_ddod`fdre4dGd_ddod`fdre3dGd_ddd`fde4dGd_ddd`fde3dKd_ddd`fde4dKd_ddd`fdiZa ebd eaD              Zcg dZdddZe	 	 	 	 	 	 ddZf	 	 	 	 	 	 	 	 ddZgi Zhi ZiddZj G d de      Zke
delemgef   ZnddZoddZpddZqe&reeref   ZsneZs G d des      Ztehet_h        eiet_i         e%j                         D ]:  \  ZuZvevj                  ddī      Zv exetdev eheu   d           exetdev eieu          < [h[i[u[v G dǄ det      ZyeyZz G dɄ dej0                        Z{i dde3ddd_dfdde3dddodfdde3dddd?fdde3dAddodfdde3dAddd?fdde3dd?d}dfdde3dddvdfdde3dddvdfdde3ddAd}dfdde3d?dddfdde3d?ddd fdde3d?ddd?fdde3dEdddfdde3dGdddfdde3dKdddfdde4dddvdfZ|dd݄Z} G dބ dej                        ZddZ ej                  e{j                  e{ee        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)CallableMutableMapping)Fraction)NumberRational)IOAnycast   )ExifTagsImage	ImageFileImageOpsImagePaletteTiffTags)i16be)i32be)o8)DeferredErroris_pathTYPESF)Iterator)NoReturn)BufferIntegralLikeStrOrBytesPath   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)r1   )r?   zL;I)r?   zL;IR)r?   r?   )r?   zL;R)   )I;16zI;12)   )rA   rA   )I;16BrC   )rA   zI;16R)IzI;16S)rD   zI;16BS)r'   )    )FF;32F)rF   zF;32BF)rD   zI;32N)rD   I;32S)rD   zI;32BS)r1   r1   )LArI   )r1   r1   r1   )RGBrJ   )rJ   zRGB;R)r1   r1   r1   r1   )RGBArK   r   )rJ   RGBX)r1   r1   r1   r1   r1   r   r   )rJ   RGBXX)r1   r1   r1   r1   r1   r1   )r   r   r   )rJ   RGBXXX)rK   RGBa)r   r   )rK   RGBaX)r   r   r   )rK   RGBaXX)r%   r   )rK   RGBAX)r%   r   r   )rK   RGBAXX)i  )rB   rB   rB   )rJ   zRGB;16L)rJ   zRGB;16B)rB   rB   rB   rB   )rK   zRGBA;16L)rK   zRGBA;16B)rJ   zRGBX;16L)rJ   zRGBX;16B)rK   zRGBa;16L)rK   zRGBa;16B)PzP;1)rV   zP;1R)rV   zP;2)rV   zP;2R)rV   zP;4)rV   zP;4R)rV   rV   )rV   PX)PArX   )rV   zP;R)CMYKrY   )rY   CMYKX)rY   CMYKXX)rY   zCMYK;16L)rY   zCMYK;16B)LABr\   c              #  8   K   | ]  }t        |d            yw)r)   N)len).0key_tps     K/var/www/flask-api/venv/lib/python3.12/site-packages/PIL/TiffImagePlugin.py	<genexpr>rb     s     AV#fQi.As   )s   MM *s   II* s   MM* s   II *s   MM +s   II+ c                >    | j                  t        t                    S N)
startswithtuplePREFIXESprefixs    ra   _acceptrj   "  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       ra   _limit_rationalru   &  sC     c(Q,C
a#g#
.
=
=g
FC3tt9$$rk   ro   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rd   floatr_   is     ra   rb   z)_limit_signed_rational.<locals>.<genexpr>4  s     
!58
!   c              3  2   K   | ]  }t        |        y wrd   rx   rz   s     ra   rb   z)_limit_signed_rational.<locals>.<genexpr>7  s     ,1eAh,r|   r   r   )r   	numeratordenominatorminru   rn   rf   max)rq   rr   min_valfracrt   	n_d_floats         ra   _limit_signed_rationalr   .  s~     C=D-1^^T=M=M-MC

!S
!!G+c3w<0,,,I
9~ilYq\97CJrk   c                      	 	 	 	 	 	 d fd}|S )Nc                6     t        | j                        | S rd   )getattr_val)selfargsops     ra   delegatez_delegate.<locals>.delegateF  s     &wtyy"%t,,rk   )r   ro   r   ztuple[float, ...]returnzbool | float | Fractionr=   )r   r   s   ` ra   	_delegater   E  s'    --"3-	 -
 Ork   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')1ro   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   )
isinstancero   r~   r   r   r   r   r   TYPE_CHECKINGr   r   ry   int)r   valuer   s      ra   __init__zIFDRational.__init__\  s     	e[)#ooDO % 1 1D

DIeX&#ooDO % 1 1D"&|U";"' +D!eDIA DIZ5  U[9DI !45DIrk   c                    | j                   S rd   )r   r   s    ra   r~   zIFDRational.numerator~  s    rk   c                    | j                   S rd   )r   r   s    ra   r   zIFDRational.denominator  s       rk   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      ra   rp   zIFDRational.limit_rational  sb     q >>4#3#333$))X...II''8{{AMM))rk   c                >    t        t        | j                              S rd   )strry   r   r   s    ra   __repr__zIFDRational.__repr__  s    5#$$rk   c                6    | j                   j                         S rd   )r   __hash__r   s    ra   r   zIFDRational.__hash__  s    yy!!##rk   c                    | j                   }t        |t              r|j                   }t        |t              rt        |      }||k(  S rd   )r   r   ro   ry   )r   otherrq   s      ra   __eq__zIFDRational.__eq__  s;    iie[)JJEeU#*Ce|rk   c                H    | j                   | j                  | j                  gS rd   )r   r   r   r   s    ra   __getstate__zIFDRational.__getstate__  s    		4??D,=,=>>rk   c                    t         j                  | d       |\  }}}t        |t        t        f      sJ || _        t        rt        t        |      | _	        n|| _	        t        |t              sJ || _        y Nr   )ro   r   r   ry   r   r   r   r   r   r   r   r   )r   stater   r   r   s        ra   __setstate__zIFDRational.__setstate__  sj    T1%).&j,$ 1222	"<<DO(DO,,,,(rk   __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   rp   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=   rk   ra   ro   ro   N  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& $rk   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   re   replace_load_dispatch)funcr   idxsizes     ra   	decoratorz#_register_loader.<locals>.decorator  sL    #==##G,qr*223<E#J"Djsrk   )r   _LoaderFuncr   r   r=   )r   r   r   s   `` ra   _register_loaderr     s     rk   c                     d fd}|S )Nc                    | t         <   | S rd   )_write_dispatch)r   r   s    ra   r   z#_register_writer.<locals>.decorator  s    #rk   )r   Callable[..., Any]r   r   r=   )r   r   s   ` ra   _register_writerr     s     rk   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 rd   )_unpackr^   )r   data
legacy_apifmtr   s      ra   basic_handlerz&_register_basic.<locals>.basic_handler  s)     ||s4yD01#7>>rk   c                <     dj                   fd|D              S )Nrk   c              3  B   K   | ]  }j                  |        y wrd   )_pack)r_   r   r   r   s     ra   rb   z4_register_basic.<locals>.<lambda>.<locals>.<genexpr>  s     <EC'<s   join)r   valuesr   s   ` ra   <lambda>z!_register_basic.<locals>.<lambda>  s    <V<< rk   T)r   r   r   bytesr   r   r   tuple[Any, ...])r   r   structcalcsizer   r   )idx_fmt_namer   r   namer   r   r   s        @@ra   _register_basicr    sw    !NCdE#J??Qse9%D FJ?#?+0?>B?	?
 -N3OCrk   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+   Qr1   r   r?   r)   F)rj   reprSyntaxError_prefixMM_endianII_bigtiffgrouptagtyperesetr   next_legacy_api)r   ifhri   r  msgs        ra   r   zImageFileDirectory_v2.__init__G  s      s|,T#YK{CCc""!'!3vRa<<2DL\\RDL"Cc""A"
')'

 }} LLc!"g&q)c3qr7+A. 		
 !rk   c                    | j                   S rd   )r
  r   s    ra   r   zImageFileDirectory_v2.<lambda>n  
    4<< rk   c                    | j                   S rd   )_offsetr   s    ra   r   zImageFileDirectory_v2.<lambda>o  r  rk   c                    | j                   S rd   )r  r   s    ra   r   z ImageFileDirectory_v2.legacy_apiq  s    rk   c                    d}t        |      )Nz"Not allowing setting of legacy api)	Exception)r   r   r  s      ra   r   z ImageFileDirectory_v2.legacy_apiu  s    2nrk   c                X    i | _         i | _        i | _        i | _        d | _        d | _        y rd   )_tags_v1_tags_v2_tagdatar  _nextr  r   s    ra   r  zImageFileDirectory_v2.resetz  s,    (*(**,
#'rk   c                *    t        t        |             S rd   )r   dictr   s    ra   __str__zImageFileDirectory_v2.__str__  s    4:rk   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      ra   namedzImageFileDirectory_v2.named  sH      $zz|
e OOD$**-22E9
 	
 
s   5Ac                j    t        t        | j                        t        | j                        z        S rd   )r^   setr   r  r   s    ra   __len__zImageFileDirectory_v2.__len__  $    3t}}%DMM(::;;rk   c                   || j                   vrG| j                  |   }| j                  |   }| j                  |   \  }} || || j                        | |<   | j                   |   }| j                  rt        |t        t        f      s|f}|S rd   )r  r   r  r   r   r   rf   r   )r   tagr   typr   handlerrq   s          ra   __getitem__z!ImageFileDirectory_v2.__getitem__  s    dmm#==%D,,s#C //4MD'dDOO<DImmC ??:cE5>#B&C
rk   c                >    || j                   v xs || j                  v S rd   )r  r   r   r/  s     ra   __contains__z"ImageFileDirectory_v2.__contains__      dmm#;sdmm';;rk   c                >    | j                  ||| j                         y rd   )_setitemr   )r   r/  r   s      ra   __setitem__z!ImageFileDirectory_v2.__setitem__  s    c5$//2rk   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rd   )r   ro   r_   vs     ra   rb   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  s     Baz![1B   r   c              3  <   K   | ]  }t        |t                y wrd   )r   r   r<  s     ra   rb   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>       <As+<r>  Tr   Fi i   c              3  <   K   | ]  }t        |t                y wrd   )r   ry   r<  s     ra   rb   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>       >!Au->r>  c              3  <   K   | ]  }t        |t                y wrd   )r   r   r<  s     ra   rb   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  r@  r>  c              3  <   K   | ]  }t        |t                y wrd   )r   r   r<  s     ra   rb   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  rB  r>  asciir   c              3  d   K   | ]'  }t        |t              rj                  |      n| ) y wrd   )r   r   cvt_enum)r_   r   infos     ra   rb   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allro   SIGNED_RATIONALRATIONALr   SHORTSIGNED_SHORTLONGSIGNED_LONGDOUBLEASCIIBYTEencodery   r#  rf   r  r  lengthr^   
ValueErrorwarningswarn)r   r/  r   r   	basetypesr   r=  shortsigned_shortlongis_ifddestrH  s               @ra   r8  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 rd   )r  popr  r   r4  s     ra   __delitem__z!ImageFileDirectory_v2.__delitem__  s>    #t$#t$#t$rk   c                j    t        t        | j                        t        | j                        z        S rd   )iterr+  r   r  r   s    ra   __iter__zImageFileDirectory_v2.__iter__  $    C&T]]);;<<rk   c                H    t        j                  | j                  |z   |      S rd   )r   unpackr  )r   r   r   s      ra   r   zImageFileDirectory_v2._unpack
  s    }}T\\C/66rk   c                H    t        j                  | j                  |z   g| S rd   )r   packr  )r   r   r   s      ra   r   zImageFileDirectory_v2._pack  s    {{4<<#-777rk   Hr[  r?   r]  bzsigned bytehzsigned shortlzsigned longr   ry   ddoubler  long8r   c                    |S rd   r=   r   r   r   s      ra   	load_bytezImageFileDirectory_v2.load_byte!      rk   c                t    t        |t              rt        |      }t        |t              rt        |f      }|S rd   )r   ro   r   r   r   r   s     ra   
write_bytez ImageFileDirectory_v2.write_byte%  s/    dK(t9DdC $>Drk   r%   c                R    |j                  d      r|d d }|j                  dd      S )N    rm   zlatin-1r   )endswithdecoders  s      ra   load_stringz!ImageFileDirectory_v2.load_string-  s*    ==9D{{9i00rk   c                    t        |t              rt        |      }t        |t              s|j	                  dd      }|dz   S )NrE  r   rz  )r   r   r   r   rU  r   r   s     ra   write_stringz"ImageFileDirectory_v2.write_string3  s;     eS!JE%'LL)4Eu}rk   r+   r1   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 rd   ro   arl  r   s     ra   combinez4ImageFileDirectory_v2.load_rational.<locals>.combineB      'Aq6>[A->>rk   c              3  6   K   | ]  \  }} ||        y wrd   r=   r_   numdenomr  s      ra   rb   z6ImageFileDirectory_v2.load_rational.<locals>.<genexpr>E       VZS%WS%(V   r%   r   r  r   rl  r   r   ztuple[int, int] | IFDRationalr   r^   rf   zipr   r   r   valsr  s     ` @ra   load_rationalz#ImageFileDirectory_v2.load_rational<  W     ||s4yA~.a0$7	? V3tCaCy$qtRSt*;UVVVrk   c                8     dj                   fd|D              S )Nrk   c              3  X   K   | ]!  } j                   d gt        |d        # yw)2Ll    N)r   ru   r_   r   r   s     ra   rb   z7ImageFileDirectory_v2.write_rational.<locals>.<genexpr>I  s-      
DHJDJJt?odI>?
s   '*r   r   r   s   ` ra   write_rationalz$ImageFileDirectory_v2.write_rationalG  s!    xx 
LR
 
 	
rk   r/   c                    |S rd   r=   rs  s      ra   load_undefinedz$ImageFileDirectory_v2.load_undefinedM  ru  rk   c                    t        |t              rt        |      }t        |t              rt        |      j	                  dd      }|S )NrE  r   )r   ro   r   r   rU  r  s     ra   write_undefinedz%ImageFileDirectory_v2.write_undefinedQ  s:    e[)JEeS!J%%gy9Erk   
   c           
         | j                  t        |      dz   d|      }dfdt        fdt        |d d d   |dd d         D              S )Nr)   rn  c                (    r| |fS t        | |      S rd   r  r  s     ra   r  z;ImageFileDirectory_v2.load_signed_rational.<locals>.combine_  r  rk   c              3  6   K   | ]  \  }} ||        y wrd   r=   r  s      ra   rb   z=ImageFileDirectory_v2.load_signed_rational.<locals>.<genexpr>b  r  r  r%   r   r  r  r  s     ` @ra   load_signed_rationalz*ImageFileDirectory_v2.load_signed_rationalY  r  rk   c                8     dj                   fd|D              S )Nrk   c           	   3  Z   K   | ]"  } j                   d gt        |dd        $ yw)2lii   N)r   r   r  s     ra   rb   z>ImageFileDirectory_v2.write_signed_rational.<locals>.<genexpr>f  s3      
 DJJtP4T9hOP
s   (+r   r  s   ` ra   write_signed_rationalz+ImageFileDirectory_v2.write_signed_rationald  s!    xx 

 
 	
rk   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        ra   _ensure_readz"ImageFileDirectory_v2._ensure_readk  sN    ggdms8t%%)F*>s3xjL  #,
rk   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  r1   rk  r%   r   HHQ8s   HHL4sr@   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: rE   <table:  bytes>)r  tellr  r  r   r  ranger   r'  r  r   r   getr   KeyErrorloggerdebugseekr   
_safe_readr^   rX  rY  r   r  r  r  r  r   )r   r  	tag_countr{   r/  r0  countr   tagnametypnamer  	unit_sizer1  r   hereoffsets                   ra   loadzImageFileDirectory_v2.loadu  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 )
Nrk  r  *   HHr1   r   r  rB   r?   )r
  r   r  r   r  s     ra   _get_ifhzImageFileDirectory_v2._get_ifh  s{    llTZZ4==RbII==4::dAq))Cdmmtzz#r"K
 :>C9KK
rk   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  rk  r?   r1   r)   r  r@   zTag %s, Type: %s, Value: %s)r  ifdr  zsave: r  r  z) - value: rB   r  r  r   rz  rk   r%   r   z%s %s %s %s %sr  r  )"r   r  r^   r  sortedr&  STRIPOFFSETSr  r  r  r  r   rP  r   r#  r   r  tobytesrf   r   r'  r  r   r   r  r   rT  rS  rJ  appendljustr   r   r   )r   r  resultentriesr   fmt_sizestripoffsetsr/  r   r0  r^  r  r   ifd_tag	ifd_valuer   r  r  r  r  r   r1  rq   s                          ra   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       ra   savezImageFileDirectory_v2.save  sU    779>HHT]]_%f%
F##rk   )s   II*     NN)r  r   ri   zbytes | Noner  
int | Noner   r   )r   r   )r   r   r   r   r   r   r   )r   zdict[str, Any]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   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   ro   r   r   )r   r  r   r   )r  	IO[bytes]r   r   r   r   )r  r  r   r   )r   r   rL   )r  r   r   r   )r  r  r   r   )7r   r   r   r   r   __annotations__r   r   r   ri   r  r   setterr  r$  r)  r,  r2  r5  r9  r8  rb  re  r   r   listmapr  r   rN  rP  SIGNED_BYTErO  rQ  FLOATrR  IFDLONG8r   rt  r   rx  r}  r  r  r  r  r  r  r  r  r  r  r  r  r=   rk   ra   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`$rk   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      ra   r   zImageFileDirectory_v1.__init__7  s    $)&)rk   c                    | j                   S rd   )r  r   s    ra   r   zImageFileDirectory_v1.<lambda>;  s
     rk   c                    | j                   S rd   )r   r   s    ra   r   zImageFileDirectory_v1.<lambda><  s
    DMM rk   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`

        rh   )ri   r   r  r  )clsoriginalr  s      ra   from_v2zImageFileDirectory_v1.from_v2B  s<     )((&&==
rk   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`

        rh   )r   ri   r#  r   r  r  )r   r  s     ra   to_v2zImageFileDirectory_v1.to_v2T  sG     $4;;7DMM*4<<(DMM*
rk   c                >    || j                   v xs || j                  v S rd   )r  r   r4  s     ra   r5  z"ImageFileDirectory_v1.__contains__e  r6  rk   c                j    t        t        | j                        t        | j                        z        S rd   )r^   r+  r   r  r   s    ra   r,  zImageFileDirectory_v1.__len__h  r-  rk   c                j    t        t        | j                        t        | j                        z        S rd   )rd  r+  r   r  r   s    ra   re  zImageFileDirectory_v1.__iter__k  rf  rk   c                8    dD ]  }| j                  |||        y N)FT)r8  )r   r/  r   r   s       ra   r9  z!ImageFileDirectory_v1.__setitem__n  s!    ' 	2JMM#uj1	2rk   c           	        || j                   vrR| j                  |   }| j                  |   }| j                  |   \  }}dD ]  }| j	                  | || ||      |        | j                   |   }t        |t        t        f      s|f}|S r  )r  r   r  r   r8  r   rf   r   )r   r/  r   r0  r   r1  legacyrq   s           ra   r2  z!ImageFileDirectory_v1.__getitem__r  s    dmm#==%D,,s#C //4MD'' Hc74v#>GHmmC #u~.&C
rk   )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  r5  r,  re  r9  r2  __classcell__r  s   @ra   r  r  $  s`    $  ./D12G ! ""<<=2
rk   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 rd   )r  r   )r   r  filenamer  s      ra   r   zTiffImageFile.__init__  s     
 	5"X&rk   c                   | j                   J | 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 fileNr1   r%   r  rm   z*** 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     ra   _openzTiffImageFile._open  s     ww"""ggll1oq6R<477<<?"C+C0 &*[[%5%55t{77%'%)23_dll3[$s), 	

1rk   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      ra   n_frameszTiffImageFile.n_frames  s    >>#iikGJJs4??+,..(

499;?+ ..(IIg~~)))~~rk   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     ra   r  zTiffImageFile.seek  si    &

588GGLLDOO+ww||tyy(}}DH   rk   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  rW  r  r  r  r  r  r  is_animatedXMPrf   rH  _reload_exifr  r  r/  r  _setup)r   r#  r  r%  s       ra   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rk   c                    | j                   S )zReturn the current frame number)r  r   s    ra   r  zTiffImageFile.tell  s    ||rk   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ImageResourcesre   i16mathceili32)r   blocksrq   idnr   r   s          ra   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<>? ..) rk   c                p    | j                   r| j                  r| j                         S t        |          S rd   )tileuse_load_libtiff_load_libtiffr  r  )r   r  s    ra   r  zTiffImageFile.load  s-    99..%%''w|~rk   c                
   | j                   Xt        j                  | j                         t        j                  j                  | j                  | j                        | _        t        j                  j                  |        y rd   )
r  r   _decompression_bomb_checkr   corenewr!  r  r   load_preparer   s    ra   r@  zTiffImageFile.load_prepare  sP    88++DOO<jjnnTYY@DG((.rk   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   r.  Orientationr  )r   exifkeys      ra   load_endzTiffImageFile.load_end  s     59D2 <<>D.. "d?S!"
 	t4==$$3HMM556 4rk   c                   t         j                   j                  |        | j                          t        | j                        dk(  sd}t        |      | j                  d   d   }| j                  d   d   }| j                  J 	 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'   NfilenoflushFr%   libtiffzCouldn't set the image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  r@  r^   r9  r  r  r   rM  rN  r   rf   r  _getdecoderr!  decoderconfigsetimager  rW  _exclusive_fpr(  r  r  r|  rP  r  oslseekSEEK_CURSEEK_SETr  r"  rK  close)r   r  extentsr   r  	args_listdecodereclose_self_fpr6  errposs               ra   r;  zTiffImageFile._load_libtiff0  s    	499~"(C#, ))A,q/yy|A
 ww"""
	(+@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"L9 M 9MM	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-   r/   r1   z
- size: %sr<   r=   )r%   r-   r1   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$   r0   rJ   rA   I;16N)z;16Bz;16Lrm   NFrO  zInvalid tile dimensionsr1   z- unsupported data organizationicc_profilerV   rX   r!   RGB;Lrk   )Ar  r  COMPRESSION_INFOr  COMPRESSION_compressionPLANAR_CONFIGURATION_planar_configurationPHOTOMETRIC_INTERPRETATION	FILLORDERr  r  YCBCRSUBSAMPLING
IMAGEWIDTHIMAGELENGTHr  	TypeErrorr   r   rW  r   r   r.  rH  _sizer   SAMPLEFORMATr^   r   r   BITSPERSAMPLEEXTRASAMPLESSAMPLESPERPIXELMAX_SAMPLESPERPIXELerrorr	  ri   	OPEN_INFO_moder!  rH  X_RESOLUTIONY_RESOLUTIONRESOLUTION_UNITr9  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_pixelrJ  rawmodexresyresresunitxylayerr  offsetsrm  w	tilewidthr  stridetile_rawmoder   rl  r  s!                                    ra   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rd   )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_descriptionrC  r   r  r   r  r  r  r  r7  r  r@  rK  r;  r+  r  r  s   @ra   r
  r
    s    F%(-%
 (,'&' %' 
	'2 	 	
/b*
/7"_&BoHrk   r
  r>   r?   rI   rV   rX   rD   rH   rA   I;16LrF   rG   rJ   rM   rK   rY   YCbCrr\   rC   c                f   	 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}*|r~d/|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r|t4        j6                  v rt4        j                  |-|<   n||j:                  v r|j:                  |   |-|<   nht        |/t        t        t        t"        f      s"t        |/t              r8t        d6 |/D              r&t5        j                  |      j                  }0|0r|0|-|<   ||.vs||*vst        |/t              r|/j                  d7d8      d9z   |.|<   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 d@}
t        |
      |*D ]  }||=  |j                  |      }6t        j                  | |t        j                  dd>| j                  z   |6||$df      g       dA|v rt        | dA|       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)BNzcannot write mode z as TIFFrh   big_tiffTrb  r$   r.   r0   r6   r2   r   r   tiffinforI  zTiffinfo Keys: %sr/  r  rg  descriptionrd  x_resolutiony_resolutionresolution_unitsoftware	date_timeartist	copyrightrc  r%   r<   )r>   r?   r>   r    rh  rJ   ri  r'   r!   r/   r1   
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: %srM  c              3  R   K   | ]  }t        |t        t        t        f       ! y wrd   )r   r   ry   ro   r<  s     ra   rb   z_save.<locals>.<genexpr>  s     TJq3{*CDTs   %'rE  r   rz  zConverted items: %s)rA   rC   r  re  rO  rN   zencoder error z when writing image file_debug_multipage)q	SAVE_INFOr!  r  r  encoderinfoencoderconfigr   r  r  rH  r   r   WRITE_LIBTIFFrm  r   rr  rs  r   r   Exifr  r  r  r  r  r  r   rE  rF  r  r  r   r/  r   EXIFIFDrv  r  r~  r  IPTC_NAA_CHUNKPHOTOSHOP_CHUNKr)  r  rT  rJ  r  IMAGEDESCRIPTIONSOFTWARE	DATE_TIMEARTIST	COPYRIGHTrw  r^   ry  rx  ro  copyr  heightwidthr   invertr  
getpaletter  r  
STRIP_SIZEr   rP  STRIPBYTECOUNTSrf   r  COMPRESSION_INFO_REVrk  rq  REFERENCEBLACKWHITEr&  
setdefaultr  r  r  TILEBYTECOUNTSrW  JPEGQUALITYr  r  rM  ioUnsupportedOperationOSUBFILETYPETRANSFERFUNCTIONSUBIFD	itertoolschainLIBTIFF_COREr  ry   r   rK  r'  rI  rU  ro   sort_getencoderrS  r   MAXBLOCKr  r  _saver  setattr)7r  r  r  r  ri   r  r  bitsextrar]  r  r  r  r  rb  rO  rH  rI  rJ  
legacy_ifdsupplied_tagsr/  iccr   rc  inverted_impxr  r  lutcolormapcolorsr{   r=  r  rm  r  im_strip_sizerows_per_stripstrip_byte_countsstrips_per_imagedefault_value	blocklistr  r  typesattsr   rI  r  r  encodererrcoder   r  s7                                                          ra   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
 (///(111!)E#JCKK'!$S!1E#JUC'?@ue,TeTT#??3/44D%)c
$3i#7eS) %Wi @5 HDI{3 %eDI %DI/	&2 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	
 [(&, )Y	  ""277)84cl!"  ggkk-0k3'K	T  		| Nt ** sS   j k l,l!l 	k#j??k6l l	lll0/l0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)   r1   r   r   r%   r)   r1   r)   r1   r)   r%   r)   r1   >       	     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   fnr?  s      ra   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  rU  rX  whereToWriteNewIFDOffsetoffsetOfNewPager  IIMMr  isFirstrg   RuntimeError	setEndianre   r  rW  skipIFDsgoToEnd)r   iimmr  s      ra   r  zAppendingTiffWriter.setup  s    DNNBKK048% 66;;q>)	D4DLx,Cs##doob1ss;==FFKK2;;'rk   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 pager1   )r  r   r  r  r  r  r  r  rU  rW  _readr   _writefixIFD)r   r  r  
ifd_offsets       ra   finalizezAppendingTiffWriter.finalize  s    << 	D(()vv{{1~499ECs##==FFKK2;;'ZZT]]:
d***
,,888D112JT]]:Jrk   c                D    | j                          | j                          y rd   )r  r  r   s    ra   newFramezAppendingTiffWriter.newFrame5  s    

rk   c                    | S rd   r=   r   s    ra   	__enter__zAppendingTiffWriter.__enter__:  s    rk   c                >    | j                   r| j                          y y rd   )r  rY  )r   r   s     ra   __exit__zAppendingTiffWriter.__exit__=  s    ==JJL rk   c                P    | j                   j                         | j                  z
  S rd   )r   r  r  r   s    ra   r  zAppendingTiffWriter.tellA  s    vv{{}t3333rk   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.
        )rU  rX  r  r   r  r  )r   r  whences      ra   r  zAppendingTiffWriter.seekD  s>     R[[ d***FFF#yy{rk   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   rB   )r   r  rU  SEEK_ENDr  r  r   r  )r   r`  	pad_bytess      ra   r  zAppendingTiffWriter.goToEndQ  sj    Ar{{#ffkkm rM	y2FFLLy)*#vv{{}rk   c                    || _         | j                    d| _        | j                    d| _        | j                    d| j                  r
dz   | _        y dz   | _        y )Nr?   rk  r  r  )endianlongFmtshortFmtr  	tagFormat)r   r  s     ra   r  zAppendingTiffWriter.setEndian[  sS    ++a(;;-q) KK=+dmmsMMrk   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                         )Nr1   r)   r   r%   r  r@   )r
  r  r   r  r   r  rU  rW  )r   r  num_tagss      ra   r  zAppendingTiffWriter.skipIFDsa  s    AA>JQ04A1-  -.1- FFKK
#zzt}}!!<HFFKK$--BR@"++N rk   c               8    | j                   j                  |      S rd   )r   r  rw  s     ra   r  zAppendingTiffWriter.writen  s    vv||D!!rk   c                J    	 dddd|   S # t         $ r d}t        |      w xY w)Nrk  r?   r  )r%   r)   r1   zoffset is not supported)r  r  )r   
field_sizer  s      ra   _fmtzAppendingTiffWriter._fmtq  s8    	$ss+J77 	$+Cs##	$s    "c                    t        j                  | j                  | j                  |      z   | j                  j                  |            \  }|S rd   )r   rh  r  r%  r   r  )r   r$  r   s      ra   r
  zAppendingTiffWriter._readx  s=    ==KK$))J//Z1H
 rk   c                $    | j                  d      S Nr%   r
  r   s    ra   	readShortzAppendingTiffWriter.readShort~      zz!}rk   c                $    | j                  d      S Nr)   r)  r   s    ra   readLongzAppendingTiffWriter.readLong  r+  rk   c                :    | | |k7  rd|  d| }t        |      y y )Nzwrote only z bytes but wanted )r  )bytes_writtenexpectedr  s      ra   _verify_bytes_writtenz)AppendingTiffWriter._verify_bytes_written  s6    $()B.@
KCs## *C$rk   c                   | j                   j                  | t        j                         |s|}| j                   j	                  t        j                  | j                  | j                  |      z   |            }| j                  ||       y rd   )
r   r  rU  rW  r  r   rj  r  r%  r2  )r   r   r$  new_field_sizer0  s        ra   _rewriteLastz AppendingTiffWriter._rewriteLast  sh     	ZK-'NKKdii&??G
 	""=.Ark   c                *    | j                  |dd       y )Nr%   r)   r5  r  s     ra   rewriteLastShortToLongz*AppendingTiffWriter.rewriteLastShortToLong  s    %A&rk   c                &    | j                  |d      S r(  r7  r  s     ra   rewriteLastShortz$AppendingTiffWriter.rewriteLastShort        **rk   c                &    | j                  |d      S r-  r7  r  s     ra   rewriteLastLongz#AppendingTiffWriter.rewriteLastLong  r;  rk   c                    | j                   j                  t        j                  | j                  | j                  |      z   |            }| j                  ||       y rd   )r   r  r   rj  r  r%  r2  )r   r   r$  r0  s       ra   r  zAppendingTiffWriter._write  sF    KKdii
&;;UC
 	""=*=rk   c                (    | j                  |d       y r(  r  r  s     ra   
writeShortzAppendingTiffWriter.writeShort      E1rk   c                (    | j                  |d       y r-  r@  r  s     ra   	writeLongzAppendingTiffWriter.writeLong  rB  rk   c                r    | j                          | j                  r| j                  j                          y y rd   )r  r  r   rY  r   s    ra   rY  zAppendingTiffWriter.close  s$    ==FFLLN rk   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 )Nr1   r%   r@   r)   z;fixIFD: %s (%d) - type: %s (%d) - type size: %d - count: %dr  )r
  r  r  r   rh  r  r   r  
fieldSizesr  r5  Tagsr  r  r  r   r'  r   r   r  _fixOffsetsr  rU  rW  )r   r!  r{   r/  
field_typer  r$  
total_sizer  is_localr  cur_poss               ra   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$	3rk   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        r1   r%   r   r)   r   znot implemented)r  r
  r  r  r  r5  r   r  rU  rW  rA  )r   r  r$  r{   r  r4  r  rewinds           ra   rI  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	6rk   c                >    |rd}n|rd}nd}| j                  ||      S )Nr%   r)   r   )rI  )r   r  isShortisLongr$  s        ra   
fixOffsetszAppendingTiffWriter.fixOffsets  s,     JJJz22rk   N)F)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   r   r   )r0  r  r1  r   r   r   rL   )r   r   r$  r   r4  r   r   r   )r   r   r   r   )r   r   r$  r   r   r   )r  r   r$  r   r   r   )FF)r  r   rQ  r   rR  r   r   r   )$r   r   r   rG  rH  r   r  r  r  r  r  r  r  rX  r  r  r  r  r  r%  r
  r*  r.  staticmethodr2  r5  r8  r:  r=  r  rA  rD  rY  r  rI  rS  r=   rk   ra   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		3rk   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  rV  cur_idxtfimsr  nfrr   s
             ra   	_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)ri   r   r   r   )rq   r   rr   r   r   !tuple[IntegralLike, IntegralLike])rq   ro   rr   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  loggingr1  rU  r   rX  collections.abcr   r   	fractionsr   numbersr   r   typingr	   r
   r    r   r   r   r   r   r   _binaryr   r0  r   r3  r   _utilr   r   r   r   r   r   _typingr   r   r   	getLoggerr   r  r  r  r  r  r  r  rr  rs  rw  rk  ro  rp  r  r  ry  r  r  r~  r  rm  r  r  r  r  r  	PREDICTORr  r  r  r  r  r  rx  rv  
JPEGTABLESrq  r  r  r  r  r  r  r)  r  IMAGEJ_META_DATA_BYTE_COUNTSIMAGEJ_META_DATArj  r&  r  r|  r   rz  rg   rj   ru   r   r   r   r   ro   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   00ra   <module>rv     sC  R # 	    	   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"KQ}R D!VT"LS}T D!VT"LU}V D!T2W}X D!T2Y}Z D!\2&(8[}\ D!\2&(8]}^ D!_d+->_}` D!_d+->a}b D!'02Dc}d D!'02De}f D!%r*,@g}h D!%r*,@i}j D!T2
k}l D!T2
m}r D!Y#_s}t D!Y#_u}v D!Y#^w}x D!Y#^y}	~ AyAA .%	'%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 + yHI'' yHF #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-%	,q-h	i3"** i3X	8   M((- A   M((% 0   ,,i 8   -..0A B   M((, 7[D Cs   _