
    :h;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?d}dfdde6dddvdfde6dd?dvdfde6ddAd}dfd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)II;16S)rE   I;16BS)r(   )    )FF;32F)rI   F;32BF)rE   zI;32N)rE   I;32S)rE   I;32BS)r2   r2   )LArN   )r2   r2   r2   )RGBrO   )rO   zRGB;R)r2   r2   r2   r2   )RGBArP   r   )rO   RGBX)r2   r2   r2   r2   r2   r   r   )rO   RGBXX)r2   r2   r2   r2   r2   r2   )r   r   r   )rO   RGBXXX)rP   RGBa)r   r   )rP   RGBaX)r   r   r   )rP   RGBaXX)r&   r   )rP   RGBAX)r&   r   r   )rP   RGBAXX)i  )rC   rC   rC   )rO   zRGB;16L)rO   zRGB;16B)rC   rC   rC   rC   )rP   zRGBA;16L)rP   zRGBA;16B)rO   zRGBX;16L)rO   zRGBX;16B)rP   zRGBa;16L)rP   zRGBa;16B)PzP;1)r[   zP;1R)r[   zP;2)r[   zP;2R)r[   zP;4)r[   zP;4R)r[   r[   )r[   PX)PAr]   )r[   zP;R)CMYKr^   )r^   CMYKX)r^   CMYKXX)r^   zCMYK;16L)r^   zCMYK;16B)LABra   c              #  8   K   | ]  }t        |d            yw)r*   N)len).0key_tps     Q/var/www/urcfiles/bundle/venv/lib/python3.12/site-packages/PIL/TiffImagePlugin.py	<genexpr>rg     s     AyV#fQi.ys   )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    rf   _acceptrp   #  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       rf   _limit_rationalr{   '  sC     c(Q,C
a#g#
.
=
=g
FC3tt9$$rq   ru   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rj   floatrd   is     rf   rg   z)_limit_signed_rational.<locals>.<genexpr>5  s     
!S58S   c              3  2   K   | ]  }t        |        y wrj   r~   r   s     rf   rg   z)_limit_signed_rational.<locals>.<genexpr>8  s     ,1eAhr   r   r   )r   	numeratordenominatorminr{   rt   rl   max)rw   rx   min_valfracrz   	n_d_floats         rf   _limit_signed_rationalr   /  s~     C=D-1^^T=M=M-MC

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

DIeX&#ooDO % 1 1D"&|U";"' +D!eDIA DIZ5  U[9DI !45DIrq   c                    | j                   S rj   )r   r   s    rf   r   zIFDRational.numerator  s    rq   c                    | j                   S rj   )r   r   s    rf   r   zIFDRational.denominator  s       rq   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      rf   rv   zIFDRational.limit_rational  sb     q >>4#3#333$))X...II''8{{AMM))rq   c                >    t        t        | j                              S rj   )strr   r   r   s    rf   __repr__zIFDRational.__repr__  s    5#$$rq   c                6    | j                   j                         S rj   )r   __hash__r   s    rf   r   zIFDRational.__hash__  s    yy!!##rq   c                    | j                   }t        |t              r|j                   }t        |t              rt        |      }||k(  S rj   )r   r   ru   r   )r   otherrw   s      rf   __eq__zIFDRational.__eq__  s;    iie[)JJEeU#*Ce|rq   c                H    | j                   | j                  | j                  gS rj   )r   r   r   r   s    rf   __getstate__zIFDRational.__getstate__  s    		4??D,=,=>>rq   c                    t         j                  | d       |\  }}}t        |t        t        f      sJ || _        t        rt        t        |      | _	        n|| _	        t        |t              sJ || _        y Nr   )ru   r   r   r   r   r   r   r   r   r   r   r   )r   stater   r   r   s        rf   __setstate__zIFDRational.__setstate__  sj    T1%).&j,$ 1222	"<<DO(DO,,,,(rq   __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   rv   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>   rq   rf   ru   ru   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& $rq   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   rk   replace_load_dispatch)funcr   idxsizes     rf   	decoratorz#_register_loader.<locals>.decorator  sL    #==##G,qr*223<E#J"Djsrq   )r   _LoaderFuncr   r   r>   )r   r   r   s   `` rf   _register_loaderr     s     rq   c                     d fd}|S )Nc                    | t         <   | S rj   )_write_dispatch)r   r   s    rf   r   z#_register_writer.<locals>.decorator  s    #rq   )r   Callable[..., Any]r   r   r>   )r   r   s   ` rf   _register_writerr     s     rq   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 rj   )_unpackrc   )r   data
legacy_apifmtr   s      rf   basic_handlerz&_register_basic.<locals>.basic_handler  s)     ||s4yD01#7>>rq   c                <     dj                   fd|D              S )Nrq   c              3  B   K   | ]  }j                  |        y wrj   )_pack)rd   r   r   r   s     rf   rg   z4_register_basic.<locals>.<lambda>.<locals>.<genexpr>  s     <VEC'Vs   join)r   valuesr   s   ` rf   <lambda>z!_register_basic.<locals>.<lambda>  s    <V<<rq   T)r   r   r   bytesr   r   r   tuple[Any, ...])r   r   structcalcsizer   r   )idx_fmt_namer   r   namer   r   r   s        @@rf   _register_basicr    sw    !NCdE#J??Qse9%D FJ?#?+0?>B?	?
 -N3OCrq   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)rp   reprSyntaxError_prefixMM_endianII_bigtiffgrouptagtyperesetr   next_legacy_api)r   ifhro   r  msgs        rf   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. 		
 !rq   c                    | j                   S rj   )r  r   s    rf   r   zImageFileDirectory_v2.<lambda>o      4<<rq   c                    | j                   S rj   )_offsetr   s    rf   r   zImageFileDirectory_v2.<lambda>p  r  rq   c                    | j                   S rj   )r  r   s    rf   r   z ImageFileDirectory_v2.legacy_apir  s    rq   c                    d}t        |      )Nz"Not allowing setting of legacy api)	Exception)r   r   r  s      rf   r   z ImageFileDirectory_v2.legacy_apiv  s    2nrq   c                X    i | _         i | _        i | _        i | _        d | _        d | _        y rj   )_tags_v1_tags_v2_tagdatar  _nextr  r   s    rf   r  zImageFileDirectory_v2.reset{  s,    (*(**,
#'rq   c                *    t        t        |             S rj   )r   dictr   s    rf   __str__zImageFileDirectory_v2.__str__  s    4:rq   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      rf   namedzImageFileDirectory_v2.named  sM      $zz|
+e OOD$**-22E9+
 	
 
s   5Ac                j    t        t        | j                        t        | j                        z        S rj   )rc   setr&  r%  r   s    rf   __len__zImageFileDirectory_v2.__len__  $    3t}}%DMM(::;;rq   c                   || j                   vrG| j                  |   }| j                  |   }| j                  |   \  }} || || j                        | |<   | j                   |   }| j                  rt        |t        t        f      s|f}|S rj   )r%  r&  r  r   r   r   rl   r  )r   tagr   typr   handlerrw   s          rf   __getitem__z!ImageFileDirectory_v2.__getitem__  s    dmm#==%D,,s#C //4MD'dDOO<DImmC ??:cE5>#B&C
rq   c                >    || j                   v xs || j                  v S rj   )r%  r&  r   r5  s     rf   __contains__z"ImageFileDirectory_v2.__contains__      dmm#;sdmm';;rq   c                >    | j                  ||| j                         y rj   )_setitemr   )r   r5  r   s      rf   __setitem__z!ImageFileDirectory_v2.__setitem__  s    c5$//2rq   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rj   )r   ru   rd   vs     rf   rg   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  s     B6az![16   r   c              3  <   K   | ]  }t        |t                y wrj   )r   r   rB  s     rf   rg   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>       <VAs+VrD  Tr    Fi i   c              3  <   K   | ]  }t        |t                y wrj   )r   r   rB  s     rf   rg   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>       >v!Au-vrD  c              3  <   K   | ]  }t        |t                y wrj   )r   r   rB  s     rf   rg   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  rF  rD  c              3  <   K   | ]  }t        |t                y wrj   )r   r  rB  s     rf   rg   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  rH  rD  asciir   c              3  d   K   | ]'  }t        |t              rj                  |      n| ) y wrj   )r   r   cvt_enum)rd   r   infos     rf   rg   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>  s0      #E )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allru   SIGNED_RATIONALRATIONALr   SHORTSIGNED_SHORTLONGSIGNED_LONGDOUBLEASCIIBYTEencoder   r)  rl   r$  r%  lengthrc   
ValueErrorwarningswarn)r   r5  r   r   	basetypesr   rC  shortsigned_shortlongis_ifddestrN  s               @rf   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  A 1;1c0B),I   \\#("3"33EKLV*Q"4eAh!;VF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 rj   )r%  popr$  r&  r:  s     rf   __delitem__z!ImageFileDirectory_v2.__delitem__  s>    #t$#t$#t$rq   c                j    t        t        | j                        t        | j                        z        S rj   )iterr1  r&  r%  r   s    rf   __iter__zImageFileDirectory_v2.__iter__  $    C&T]]);;<<rq   c                H    t        j                  | j                  |z   |      S rj   )r  unpackr  )r   r   r   s      rf   r   zImageFileDirectory_v2._unpack  s    }}T\\C/66rq   c                H    t        j                  | j                  |z   g| S rj   )r  packr  )r   r   r   s      rf   r   zImageFileDirectory_v2._pack  s    {{4<<#-777rq   Hra  r@   rc  bzsigned bytehzsigned shortlzsigned longr   r   ddoubler  long8r   c                    |S rj   r>   r   r   r   s      rf   	load_bytezImageFileDirectory_v2.load_byte"      rq   c                t    t        |t              rt        |      }t        |t              rt        |f      }|S rj   )r   ru   r   r  r   r   s     rf   
write_bytez ImageFileDirectory_v2.write_byte&  s/    dK(t9DdC $>Drq   r&   c                R    |j                  d      r|d d }|j                  dd      S )N    rs   zlatin-1r   )endswithdecodery  s      rf   load_stringz!ImageFileDirectory_v2.load_string.  s*    ==9D{{9i00rq   c                    t        |t              rt        |      }t        |t              s|j	                  dd      }|dz   S )NrK  r   r  )r   r   r   r  r[  r   r   s     rf   write_stringz"ImageFileDirectory_v2.write_string4  s;     eS!JE%'LL)4Eu}rq   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 rj   ru   arr  r   s     rf   combinez4ImageFileDirectory_v2.load_rational.<locals>.combineC      'Aq6>[A->>rq   c              3  6   K   | ]  \  }} ||        y wrj   r>   rd   numdenomr  s      rf   rg   z6ImageFileDirectory_v2.load_rational.<locals>.<genexpr>F       V;UZS%WS%(;U   r&   r   r  r   rr  r   r   ztuple[int, int] | IFDRationalr   rc   rl   zipr   r   r   valsr  s     ` @rf   load_rationalz#ImageFileDirectory_v2.load_rational=  W     ||s4yA~.a0$7	? V3tCaCy$qtRSt*;UVVVrq   c                8     dj                   fd|D              S )Nrq   c              3  X   K   | ]!  } j                   d gt        |d        # yw)2Ll    N)r   r{   rd   r   r   s     rf   rg   z7ImageFileDirectory_v2.write_rational.<locals>.<genexpr>J  s,      
LRDJDJJt?odI>?Fs   '*r   r   r   s   ` rf   write_rationalz$ImageFileDirectory_v2.write_rationalH  s!    xx 
LR
 
 	
rq   r0   c                    |S rj   r>   ry  s      rf   load_undefinedz$ImageFileDirectory_v2.load_undefinedN  r{  rq   c                    t        |t              rt        |      }t        |t              rt        |      j	                  dd      }|S )NrK  r   )r   ru   r   r   r[  r  s     rf   write_undefinedz%ImageFileDirectory_v2.write_undefinedR  s:    e[)JEeS!J%%gy9Erq   
   c           
         | j                  t        |      dz   d|      }dfdt        fdt        |d d d   |dd d         D              S )Nr*   rt  c                (    r| |fS t        | |      S rj   r  r  s     rf   r  z;ImageFileDirectory_v2.load_signed_rational.<locals>.combine`  r  rq   c              3  6   K   | ]  \  }} ||        y wrj   r>   r  s      rf   rg   z=ImageFileDirectory_v2.load_signed_rational.<locals>.<genexpr>c  r  r  r&   r   r  r  r  s     ` @rf   load_signed_rationalz*ImageFileDirectory_v2.load_signed_rationalZ  r  rq   c                8     dj                   fd|D              S )Nrq   c           	   3  Z   K   | ]"  } j                   d gt        |dd        $ yw)2lii   N)r   r   r  s     rf   rg   z>ImageFileDirectory_v2.write_signed_rational.<locals>.<genexpr>g  s3      
 DJJtP4T9hOPs   (+r   r  s   ` rf   write_signed_rationalz+ImageFileDirectory_v2.write_signed_rationale  s!    xx 

 
 	
rq   c                ~    |j                  |      }t        |      |k7  rd| dt        |       d}t        |      |S )Nz&Corrupt EXIF data.  Expecting to read  bytes but only got z. )readrc   OSError)r   fpr   retr  s        rf   _ensure_readz"ImageFileDirectory_v2._ensure_readl  sN    ggdms8t%%)F*>s3xjL  #,
rq   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   rq  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: rH   <table:  bytes>)r  tellr  r  r   r  ranger   r-  r  r  r   getr   KeyErrorloggerdebugseekr   
_safe_readrc   r^  r_  r&  r  r  r  r  r   )r   r  	tag_countr   r5  r6  countr   tagnametypnamer  	unit_sizer7  r   hereoffsets                   rf   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 )
Nrq  r  *   HHr2   r   r  rC   r@   )r  r   r  r   r  s     rf   _get_ifhzImageFileDirectory_v2._get_ifh  s{    llTZZ4==RbII==4::dAq))Cdmmtzz#r"K
 :>C9KK
rq   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  rq  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  rq   r&   r   z%s %s %s %s %sr  r  )"r   r  rc   r%  sortedr,  STRIPOFFSETSr  r  r  r  r   rV  r   r)  r   r  tobytesrl   r   r-  r  r  r   r  r   rZ  rY  rP  appendljustr   r   r   )r   r  resultentriesr   fmt_sizestripoffsetsr5  r   r6  rd  r  r   ifd_tag	ifd_valuer   r  r  r  r  r   r7  rw   s                          rf   r  zImageFileDirectory_v2.tobytes  s   4==Cc3t}};MN<>]]c11K#dmm,dmmLLxW	
  !!4!4!67JCl""7|,,s#CLL6S$u+NHMM)Ej.EF+DMMO3Gs+*0,,.&GY#,CL +9{{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 8J #+2<+@(CeUD $ 3 3C 8g29$doo2VW2V3#,2VW0t++C0??

3S%(@(Cf(LM$'eUD$@GL! -4(CeUDLL)3UDKdTdjj==gsC F -4 	$**S!$$ -4(CeUDdNF4y1}% -4
 - Xs   6P)c                    |j                         dk(  r|j                  | j                                |j                         }| j                  |      }|j                  |       |t	        |      z   S r   )r  writer  r  rc   )r   r  r  r  s       rf   savezImageFileDirectory_v2.save  sU    779>HHT]]_%f%
F##rq   )s   II*     NN)r  r  ro   zbytes | Noner  
int | Noner   r   )r   r   )r   r   r   r   r   r   r   )r   zdict[str, Any]r   r5  r   r   r
   r5  r   r   r   r5  r   r   r
   r   r   )r5  r   r   r
   r   r   r   r   )r5  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   ru   r   r  )r   r  r   r  )r  	IO[bytes]r   r   r   r  )r  r  r   r   )r   r  rQ   )r  r   r   r  )r  r  r   r   )7r   r   r   r   r   __annotations__r   r   r   ro   r  r   setterr  r*  r/  r2  r8  r;  r?  r>  rh  rk  r   r   listmapr  r   rT  rV  SIGNED_BYTErU  rW  FLOATrX  IFDLONG8r   rz  r   r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r>   rq   rf   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`$rq   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      rf   r   zImageFileDirectory_v1.__init__8  s    $)&)rq   c                    | j                   S rj   )r$  r   s    rf   r   zImageFileDirectory_v1.<lambda><  s    rq   c                    | j                   S rj   )r&  r   s    rf   r   zImageFileDirectory_v1.<lambda>=  s    DMMrq   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`

        rn   )ro   r&  r  r  )clsoriginalr  s      rf   from_v2zImageFileDirectory_v1.from_v2C  s<     )((&&==
rq   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`

        rn   )r   ro   r)  r&  r  r%  )r   r  s     rf   to_v2zImageFileDirectory_v1.to_v2U  sG     $4;;7DMM*4<<(DMM*
rq   c                >    || j                   v xs || j                  v S rj   )r$  r&  r:  s     rf   r;  z"ImageFileDirectory_v1.__contains__f  r<  rq   c                j    t        t        | j                        t        | j                        z        S rj   )rc   r1  r&  r$  r   s    rf   r2  zImageFileDirectory_v1.__len__i  r3  rq   c                j    t        t        | j                        t        | j                        z        S rj   )rj  r1  r&  r$  r   s    rf   rk  zImageFileDirectory_v1.__iter__l  rl  rq   c                8    dD ]  }| j                  |||        y N)FT)r>  )r   r5  r   r   s       rf   r?  z!ImageFileDirectory_v1.__setitem__o  s    'JMM#uj1 (rq   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   rl   r  )r   r5  r   r6  r   r7  legacyrw   s           rf   r8  z!ImageFileDirectory_v1.__getitem__s  s    dmm#==%D,,s#C //4MD''c74v#>G (mmC #u~.&C
rq   )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  r;  r2  rk  r?  r8  __classcell__r  s   @rf   r  r  %  s`    $  ./D12G ! ""<<=2
rq   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 rj   )r  r   )r   r  filenamer  s      rf   r   zTiffImageFile.__init__  s     
 	5"X&rq   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  rs   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     rf   _openzTiffImageFile._open  s     ggll1oq6R<477<<?"C+C0 &*[[%5%55t{77%'%)23_dll3[$s), 	

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

499;?+ ..(IIg~~)))~~rq   c                    | j                  |      sy| j                  |       | j                  O| j                  j                  | j
                  k7  s#| j                  j                  | j                  k7  rd| _        yyy)z%Select a given frame as current imageN)_seek_checkr  _imimr   
_tile_sizemode)r   frames     rf   r  zTiffImageFile.seek  sd    &

588GGLLDOO+tww||tyy/H DH 0I  rq   c                2   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 r!| j                   t*           | j,                  d<   nd| j,                  v r| j,                  d= | j/                          t0        j3                  | j                         x| _        | _        || _        | j9                          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  rc   r  r  EOFErrorr  r  r  r  r]  r  r  r  r  r  r  is_animatedXMPrN  _reload_exifr  r   r5  r  _setup)r   r(  r  s      rf   r  zTiffImageFile._seek  s"   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+,!$++#{{3/DIIedii		% 3;;DKKHH48rq   c                    | j                   S )zReturn the current frame number)r  r   s    rf   r  zTiffImageFile.tell  s    ||rq   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ImageResourcesrk   i16mathceili32)r   blocksrw   idnr   r   s          rf   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<>? ..) rq   c                p    | j                   r| j                  r| j                         S t        |          S rj   )tileuse_load_libtiff_load_libtiffr  r  )r   r  s    rf   r  zTiffImageFile.load  s-    99..%%''w|~rq   c                
   | j                   Xt        j                  | j                         t        j                  j                  | j                  | j                        | _        t        j                  j                  |        y rj   )
r$  r   _decompression_bomb_checkr&  corenewr'  r%  r   load_preparer   s    rf   rE  zTiffImageFile.load_prepare  sP    88++DOO<jjnnTYY@DG((.rq   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   r3  Orientationr  )r   exifkeys      rf   load_endzTiffImageFile.load_end  s     59D2 <<>D..d?S! /
 	t4==$$3HMM556 4rq   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  rE  rc   r>  r  r   r  rR  rS  r   rl   r  _getdecoderr'  decoderconfigsetimager%  r]  _exclusive_fpr-  r  r  r  rU  r  oslseekSEEK_CURSEEK_SETr  readonlyrP  close)r   r  extentsr   r  	args_listdecodereclose_self_fpr;  errposs               rf   r@  zTiffImageFile._load_libtiff,  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   rO   rB   I;16N)z;16Bz;16Lrs   NFrT  zInvalid tile dimensionsr2   z- unsupported data organizationicc_profiler[   r]   r"   RGB;Lrq   )Ar  r  COMPRESSION_INFOr  COMPRESSION_compressionPLANAR_CONFIGURATION_planar_configurationPHOTOMETRIC_INTERPRETATION	FILLORDERr  r  YCBCRSUBSAMPLING
IMAGEWIDTHIMAGELENGTHr  	TypeErrorr   r   r]  r&  r   r3  rM  _sizer   SAMPLEFORMATrc   r   r   BITSPERSAMPLEEXTRASAMPLESSAMPLESPERPIXELMAX_SAMPLESPERPIXELerrorr  ro   	OPEN_INFO_moder'  rN  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ysizerc  orientationsample_format	bps_tupleextra_tuple	bps_countbps_actual_countsamples_per_pixelrO  rawmodexresyresresunitxylayerr  offsetsrs  w	tilewidthr  stridetile_rawmoder   rr  r  s!                                    rf   r0  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-Br!s(|-BGC'++GSXXg5FGDL $[  	(&CC.a'	(P  	*LL/0&Cc")	*L Ds6   3&b <b# c	b bb #	c,#ccrj   )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_descriptionrH  r   r  r   r!  r  r  r  r<  r  rE  rP  r@  r0  r  r  s   @rf   r  r    s    F%(-%
 (,'&' %' 
	'0 	 		,\*
/7"^&@oHrq   r  r?   r@   rN   r[   r]   rE   rL   rB   rF   rI   rJ   rO   rR   rP   r^   YCbCrra   rM   rD   rG   rK   )rG   rK   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 TIFFrn   big_tiffTrh  r%   r/   r1   r7   r3   r   r   tiffinforN  zTiffinfo Keys: %sr5  r  rm  descriptionrj  x_resolutiony_resolutionresolution_unitsoftware	date_timeartist	copyrightri  r&   r=   )r?   r@   r?   r!   rn  rO   ro  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: %srR  rh   FrK  r   r  zConverted items: %s)rD   rB   rk  rT  rS   zencoder error z when writing image file_debug_multipage)q	SAVE_INFOr'  r  r  encoderinfoencoderconfigr   r  r  rN  r   r   WRITE_LIBTIFFrs  r   rx  ry  r  r   Exifr  r  r  r  r  r  r   rJ  rK  r  r"  r   r5  r   EXIFIFDr|  r  r  r  IPTC_NAA_CHUNKPHOTOSHOP_CHUNKr.  r  rZ  rP  r  IMAGEDESCRIPTIONSOFTWARE	DATE_TIMEARTIST	COPYRIGHTr}  rc   r  r~  ru  copyr  heightwidthr   invertr%  
getpaletter  r  
STRIP_SIZEr   rV  STRIPBYTECOUNTSrl   r  COMPRESSION_INFO_REVrq  rw  REFERENCEBLACKWHITEr,  
setdefaultr  r  r  TILEBYTECOUNTSr]  JPEGQUALITYr  r  rR  ioUnsupportedOperationOSUBFILETYPETRANSFERFUNCTIONSUBIFD	itertoolschainLIBTIFF_CORErC  r  r   r   r-  rO  r[  ru   sort_getencoderrX  r   MAXBLOCKr  r  _saver  setattr)7r%  r  r  r  ro   r  r  bitsextrarc  r  r  r  r  rh  rT  rN  rN  rO  
legacy_ifdsupplied_tagsr5  iccr  ri  inverted_impxr  r  lutcolormapcolorsr   rC  r  rs  r  im_strip_sizerows_per_stripstrip_byte_countsstrips_per_imagedefault_value	blocklistr  r  typesattsr   rO  r
  r  encodererrcoder   r  s7                                                          rf   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2A";#4#45(*1a4C1S1a4 6 3 !$B	ww+eeug.SQqA#fqj6QU;K*LM*LQS*L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MJC
 (///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 N6 4C\(:$;q$@!%l!3A!6D*F4::<,@A 77''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   fnrD  s      rf   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  rZ  r]  whereToWriteNewIFDOffsetoffsetOfNewPager  IIMMr  isFirstrm   RuntimeError	setEndianrk   r  r\  skipIFDsgoToEnd)r   iimmr  s      rf   r   zAppendingTiffWriter.setup  s    DNNBKK048% 66;;q>)	D4DLx,Cs##doob1ss;==FFKK2;;'rq   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  rZ  r\  _readr  _writefixIFD)r   r  r  
ifd_offsets       rf   finalizezAppendingTiffWriter.finalize  s    << 	D(()vv{{1~499ECs##==FFKK2;;'ZZT]]:
d***
,,888D112JT]]:Jrq   c                D    | j                          | j                          y rj   )r  r   r   s    rf   newFramezAppendingTiffWriter.newFrame5  s    

rq   c                    | S rj   r>   r   s    rf   	__enter__zAppendingTiffWriter.__enter__:  s    rq   c                >    | j                   r| j                          y y rj   )r  r_  )r   r   s     rf   __exit__zAppendingTiffWriter.__exit__=  s    ==JJL rq   c                P    | j                   j                         | j                  z
  S rj   )r   r  r  r   s    rf   r  zAppendingTiffWriter.tellA  s    vv{{}t3333rq   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.
        )rZ  r]  r  r   r  r  )r   r  whences      rf   r  zAppendingTiffWriter.seekD  s>     R[[ d***FFF#yy{rq   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  rZ  SEEK_ENDr  r  r  r  )r   rf  	pad_bytess      rf   r  zAppendingTiffWriter.goToEndQ  sj    Ar{{#ffkkm rM	y2FFLLy)*#vv{{}rq   c                    || _         | j                    d| _        | j                    d| _        | j                    d| j                  r
dz   | _        y dz   | _        y )Nr@   rq  r  r  )endianlongFmtshortFmtr  	tagFormat)r   r   s     rf   r	  zAppendingTiffWriter.setEndian[  sS    ++a(;;-q) KK=+dmmsMMrq   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  rZ  r\  )r   r  num_tagss      rf   r
  zAppendingTiffWriter.skipIFDsa  s    AA>JQ04A1-  -.1- FFKK
#zzt}}!!<HFFKK$--BR@"++N rq   c               8    | j                   j                  |      S rj   )r   r  r}  s     rf   r  zAppendingTiffWriter.writen  s    vv||D!!rq   c                J    	 dddd|   S # t         $ r d}t        |      w xY w)Nrq  r@   r  )r&   r*   r2   zoffset is not supported)r  r  )r   
field_sizer  s      rf   _fmtzAppendingTiffWriter._fmtq  s8    	$ss+J77 	$+Cs##	$s    "c                    t        j                  | j                  | j                  |      z   | j                  j                  |            \  }|S rj   )r  rn  r   r)  r   r  )r   r(  r   s      rf   r  zAppendingTiffWriter._readx  s=    ==KK$))J//Z1H
 rq   c                $    | j                  d      S Nr&   r  r   s    rf   	readShortzAppendingTiffWriter.readShort~      zz!}rq   c                $    | j                  d      S Nr*   r-  r   s    rf   readLongzAppendingTiffWriter.readLong  r/  rq   c                :    | | |k7  rd|  d| }t        |      y y )Nzwrote only z bytes but wanted )r  )bytes_writtenexpectedr  s      rf   _verify_bytes_writtenz)AppendingTiffWriter._verify_bytes_written  s6    $()B.@
KCs## *C$rq   c                   | j                   j                  | t        j                         |s|}| j                   j	                  t        j                  | j                  | j                  |      z   |            }| j                  ||       y rj   )
r   r  rZ  r\  r  r  rp  r   r)  r6  )r   r   r(  new_field_sizer4  s        rf   _rewriteLastz AppendingTiffWriter._rewriteLast  sh     	ZK-'NKKdii&??G
 	""=.Arq   c                *    | j                  |dd       y )Nr&   r*   r9  r  s     rf   rewriteLastShortToLongz*AppendingTiffWriter.rewriteLastShortToLong  s    %A&rq   c                &    | j                  |d      S r,  r;  r  s     rf   rewriteLastShortz$AppendingTiffWriter.rewriteLastShort        **rq   c                &    | j                  |d      S r1  r;  r  s     rf   rewriteLastLongz#AppendingTiffWriter.rewriteLastLong  r?  rq   c                    | j                   j                  t        j                  | j                  | j                  |      z   |            }| j                  ||       y rj   )r   r  r  rp  r   r)  r6  )r   r   r(  r4  s       rf   r  zAppendingTiffWriter._write  sF    KKdii
&;;UC
 	""=*=rq   c                (    | j                  |d       y r,  r  r  s     rf   
writeShortzAppendingTiffWriter.writeShort      E1rq   c                (    | j                  |d       y r1  rD  r  s     rf   	writeLongzAppendingTiffWriter.writeLong  rF  rq   c                r    | j                          | j                  r| j                  j                          y y rj   )r  r  r   r_  r   s    rf   r_  zAppendingTiffWriter.close  s$    ==FFLLN rq   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  rn  r#  r   r  
fieldSizesr  r9  Tagsr  r  r  r   r-  r  r   r  _fixOffsetsr  rZ  r\  )r   r%  r   r5  
field_typer  r(  
total_sizer  is_localr  cur_poss               rf   r  zAppendingTiffWriter.fixIFD  s   ::4==aa8xA%+]]$--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 !rq   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  r9  r   r  rZ  r\  rE  )r   r  r(  r   r  r8  r  rewinds           rf   rM  zAppendingTiffWriter._fixOffsets  s    uAZZ
+Fd***FN}}v!5&E/!"qVu_!"A:+C&s++ !!&*nE(1,q0FBKK0/AJ4!!&*53 rq   c                >    |rd}n|rd}nd}| j                  ||      S )Nr&   r*   r   )rM  )r   r  isShortisLongr(  s        rf   
fixOffsetszAppendingTiffWriter.fixOffsets  s,     JJJz22rq   N)F)r  r  rD  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   )r4  r  r5  r   r   r   rQ   )r   r   r(  r   r8  r   r   r   )r   r   r   r   )r   r   r(  r   r   r   )r  r   r(  r   r   r   )FF)r  r   rU  r   rV  r   r   r   )$r   r   r   rK  rL  r   r   r  r  r  r  r  r  r]  r  r  r	  r
  r  r)  r  r.  r2  staticmethodr6  r9  r<  r>  rA  r  rE  rH  r_  r  rM  rW  r>   rq   rf   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		3rq   r  c                N   t        | j                  j                  dg             }t        | d      s|st	        | ||      S | j                         }	 t        |      5 }| g|z   D ]  }t        |d      si |_        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  r  r  r   r  r  r  r  )	r%  r  r  rZ  cur_idxtfimsnfrr   s	            rf   	_save_allr_   	  s    ++OR@AM2z"=RX&&ggiG $tm+sM2&(COsO4(*C%c:q1 :CHHSMHHJ#r8,KKM	 & , % 	 %$ 	s%   D BD+D D
D D$z.tifz.tiffz
image/tiff)ro   r  r   r   )rw   r   rx   r   r   !tuple[IntegralLike, IntegralLike])rw   ru   rx   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  loggingr6  rZ  r  r^  collections.abcr   r   	fractionsr   numbersr   r   typingr	   r
   r   r   r    r   r   r   r   r   r   _binaryr   r5  r   r8  r   
_deprecater   _typingr   _utilr   r   r   r   r   r   	getLoggerr   r  r  r  r  r  r  r  rx  ry  r}  rq  ru  rv  r  r  r  r  r  r  r  rs  r  r  r  r  r  	PREDICTORr  r  r  r  r  r  r~  r|  
JPEGTABLESrw  r  r  r  r  r  r  r.  r  IMAGEJ_META_DATA_BYTE_COUNTSIMAGEJ_META_DATArp  r,  r  r  r   r  rm   r   rC  rp   r{   r   r   r   r   ru   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)krC  s   00rf   <module>rz     s  R # 	    	   4  $ 4 4 J J ! !  ! # ) -			8	$ 


 
  	   				
	
  	

	  %  u | x	
 x z { v  
= 
: 
 
> 
= 
?  
6!" 
6#$ 
6% * *:)?)?)AB)AA1)A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  %IC<<S!D!U4&>>#3Fq3IJ!VD6?OC4HI  OS$X1 Xx + sHI'' sHz #r1at	$ #r1at	$	
 	4Q61
% #r1at	$ 	4Q61
% '2q!UD	) VRAud+ gr1a- '2q!UD	) 
E2q!Y- VRA|Q/ VRA|Q/ VRA|T2  gr1aD1!" 
E2q!Y-#$ xQ5$/%& gr1a-'( Q5$/Q5$/+	2s-l	i3"** i3X	8   M((- A   M((% 0   ,,i 8   -..0A B   M((, 7]D Cs   `