o
     ¼Îh%L ã                   @  sê  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 /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`d_d`„ e` a¡ D ƒZbi e5d daddadbfdc“e6d daddadbfdc“e5d dad?dadbfdd“e6d dad?dadbfdd“e5ddaddadbfde“e6ddaddadbfde“e5ddad?dadbfdf“e6ddad?dadbfdf“e5d daddgdbfdh“e6d daddgdbfdh“e5d dad?dgdbfdi“e6d dad?dgdbfdi“e5ddaddgdbfdj“e6ddaddgdbfdj“e5ddad?dgdbfdk“e6ddad?dgdbfdk“e5d daddldbfdm“i e6d daddldbfdm“e5d dad?dldbfdn“e6d dad?dldbfdn“e5ddaddldbfdo“e6ddaddldbfdo“e5ddad?dldbfdp“e6ddad?dldbfdp“e5d daddqdbfdr“e6d daddqdbfdr“e5d dad?dqdbfds“e6d dad?dqdbfds“e5ddaddqdbfdt“e6ddaddqdbfdt“e5ddgddqdbfdt“e6ddgddqdbfdt“e5ddad?dqdbfdu“e6ddad?dqdbfdu“¥i e5ddaddvdbfdw“e5d daddxdbfdy“e5ddaddxdbfdy“e6ddaddxdbfdz“e5ddad?dxdbfd{“e5ddgddxdbfd|“e6ddgddxdbfd}“e5d d~dddbfd€“e6d d~dddbfd“e5ddadddbfd‚“e5ddgdddbfdƒ“e6ddgdddbfd„“e5dd~dddbfd€“e6dd~dddbfd“e5ddadd…dgfd†“e6ddadd…dgfd†“e5d?dadd‡dbfdˆ“¥i e6d?dadd‡dbfdˆ“e5d?dad?d‡dbfd‰“e6d?dad?d‡dbfd‰“e5d?daddŠdbfd‹“e6d?daddŠdbfd‹“e5d?daddŠdŒfd“e6d?daddŠdŒfd“e5d?daddŽdfd“e6d?daddŽdfd“e5d?dadd‘d’fd““e6d?dadd‘d’fd““e5d?daddŠdafd”“e6d?daddŠdafd”“e5d?daddŽd•fd–“e6d?daddŽd•fd–“e5d?dadd‘d—fd˜“e6d?dadd‘d—fd˜“¥i e5d?daddŠdgfd‹“e6d?daddŠdgfd‹“e5d?daddŽd™fdš“e6d?daddŽd™fdš“e5d?dadd‘d›fdœ“e6d?dadd‘d›fdœ“e5d?daddŠdfd‹“e6d?daddŠdfd‹“e5d?daddždbfdŸ“e6d?daddždbfd “e5d?dadd¡dbfd¢“e6d?dadd¡dbfd£“e5d?dadd¡dŒfd¤“e6d?dadd¡dŒfd¥“e5d?dadd¡dafd¦“e6d?dadd¡dafd§“e5d?dadd¡dgfd¢“¥i e6d?dadd¡dgfd£“e5dAdaddadbfd¨“e6dAdaddadbfd¨“e5dAdad?dadbfd©“e6dAdad?dadbfd©“e5dAdaddgdbfdª“e6dAdaddgdbfdª“e5dAdad?dgdbfd«“e6dAdad?dgdbfd«“e5dAdaddldbfd¬“e6dAdaddldbfd¬“e5dAdad?dldbfd­“e6dAdad?dldbfd­“e5dAdaddqdbfd®“e6dAdaddqdbfd®“e5dAdadd…dŒfd¯“e5dAdadd…dgfd°“¥i e6dAdadd…dgfd°“e5dAdad?dqdbfd±“e6dAdad?dqdbfd±“e5dEdaddŠdbfd²“e6dEdaddŠdbfd²“e5dEdaddŽdŒfd³“e6dEdaddŽdŒfd³“e5dEdadd‘dfd´“e6dEdadd‘dfd´“e5dEdadd¡dbfdµ“e6dEdadd¡dbfd¶“e5dGdaddqdbfdt“e6dGdaddqdbfdt“e5dGdadd‡dbfd“e6dGdadd‡dbfd“e5dKdadd‡dbfd·“e6dKdadd‡dbfd·“¥Zcedd¸d¹„ ecD ƒƒZeg dº¢Zfegejhd»d¼ƒs„e%d½d¾ƒ ddÃdÄ„ZiddÊdË„ZjddÎdÏ„Zki Zli ZmddÓdÔ„ZnG dÕdÌ„ dÌeƒZoedÖepeqgef ZrddÚdÛ„ZsddÝdÞ„Ztddâdã„Zue,rÍeevef ZwneZwG dädÖ„ dÖewƒZxelex_lemex_me+ a¡ D ]#\ZyZzez {dådæ¡Zze|exdçez› eley d ƒ e|exdèez› emey ƒ qá[l[m[y[zG dédê„ dêexƒZ}e}Z~G dëdì„ dìejƒZi dídíe5dddadf“dîdîe5dddqdf“dïdïe5ddd…d?f“dðdðe5dAddqdf“dñdñe5dAdd…d?f“dòdóe5dd?ddf“dôdôe5dddxdf“dõdõe5dddxdf“död÷e5ddAddf“dødøe5d?dd‡df“dùdùe5d?ddŠd f“dúdúe5d?ddŠd?f“dûdûe5dEddŠdf“düdüe5dGdd‡df“dýdýe5dKdd‡df“dþdþe6dddxdf“Z€ddd„ZG dd„ dej‚ƒZƒdd	d
„Z„e …ej†eei¡ e ‡ej†e¡ e ˆej†e„¡ e ‰ej†ddg¡ e Šej†d¡ dS (  é    )Ú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é   Z
tiff_ccitté   Zgroup3é   Zgroup4é   Ztiff_lzwé   Ú	tiff_jpegé   Újpegé   Útiff_adobe_deflatei€  Ztiff_raw_16i€  Zpackbitsi)€  Ztiff_thunderscani²€  Útiff_deflateit‡  Ztiff_sgilogiu‡  Ztiff_sgilog24imˆ  ÚlzmaiPÃ  ZzstdiQÃ  Zwebpc                 C  s   i | ]\}}||“qS © r2   )Ú.0ÚkÚvr2   r2   úY/home/www/facesmatcher.com/frenv_anti/lib/python3.10/site-packages/PIL/TiffImagePlugin.pyÚ
<dictcomp>”   s    r7   ©r   r2   )Ú1z1;I)r9   z1;IR)r9   r9   )r9   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)r.   )r:   zL;I)r:   zL;IR)r:   r:   )r:   zL;R)é   )úI;16zI;12)é   )r<   r<   )úI;16Br>   )r<   zI;16R)ÚIzI;16S)r?   zI;16BS)r'   )é    )ÚFúF;32F)rA   zF;32BF)r?   zI;32N)r?   úI;32S)r?   zI;32BS)r.   r.   )ÚLArD   )r.   r.   r.   )ÚRGBrE   )rE   zRGB;R)r.   r.   r.   r.   )ÚRGBArF   ©r   )rE   ÚRGBX)r.   r.   r.   r.   r.   ©r   r   )rE   ZRGBXX)r.   r.   r.   r.   r.   r.   )r   r   r   )rE   ZRGBXXX)rF   ZRGBa)r   r   )rF   ZRGBaX)r   r   r   )rF   ZRGBaXX)r&   r   )rF   ZRGBAX)r&   r   r   )rF   ZRGBAXX)iç  )r=   r=   r=   )rE   zRGB;16L)rE   zRGB;16B)r=   r=   r=   r=   )rF   zRGBA;16L)rF   zRGBA;16B)rE   zRGBX;16L)rE   zRGBX;16B)rF   zRGBa;16L)rF   zRGBa;16B)ÚPzP;1)rJ   zP;1R)rJ   zP;2)rJ   zP;2R)rJ   zP;4)rJ   zP;4R)rJ   rJ   )rJ   ZPX)ÚPArK   )rJ   zP;R)ÚCMYKrL   )rL   ZCMYKX)rL   ZCMYKXX)rL   zCMYK;16L)rL   zCMYK;16B)ÚLABrM   c                 c  s    | ]	}t |d  ƒV  qdS )r(   N)Úlen)r3   Zkey_tpr2   r2   r6   Ú	<genexpr>  ó   € rO   )s   MM *s   II* s   MM* s   II *s   MM +s   II+ Úlibtiff_support_custom_tagsTz*Support for LibTIFF earlier than version 4r;   ÚprefixÚbytesÚreturnÚboolc                 C  s   |   ttƒ¡S ©N)Ú
startswithÚtupleÚPREFIXES©rR   r2   r2   r6   Ú_accept#  ó   r[   Úvalúfloat | Fraction | IFDRationalÚmax_valÚintú!tuple[IntegralLike, IntegralLike]c                 C  s<   t | ƒdk}t|rd|  n| ƒ |¡}|r|d d d… S |S )Nr   éÿÿÿÿ)ÚabsÚIFDRationalÚlimit_rational)r]   r_   ÚinvÚn_dr2   r2   r6   Ú_limit_rational'  s   rh   rd   Úmin_valc                 C  sp   t | ƒ}|j|jf}tdd„ |D ƒƒ|k rt| t|ƒƒ}tdd„ |D ƒƒ}t|ƒ|kr6t|d |d  |ƒ}|S )Nc                 s  ó    | ]}t |ƒV  qd S rV   ©Úfloat©r3   Úir2   r2   r6   rO   5  ó   € z)_limit_signed_rational.<locals>.<genexpr>c                 s  rj   rV   rk   rm   r2   r2   r6   rO   8  ro   r   r   )r   Ú	numeratorÚdenominatorÚminrh   rc   rX   Úmax)r]   r_   ri   Úfracrg   Z	n_d_floatr2   r2   r6   Ú_limit_signed_rational/  s   ru   ÚopÚstrr	   c                   s   d	‡ fdd„}|S )
NÚselfrd   Úargsútuple[float, ...]rT   úbool | float | Fractionc                   s   t | jˆ ƒ|Ž S rV   )ÚgetattrÚ_val©rx   ry   ©rv   r2   r6   ÚdelegateG  s   z_delegate.<locals>.delegate)rx   rd   ry   rz   rT   r{   r2   )rv   r€   r2   r   r6   Ú	_delegateF  s   r   c                   @  sd  e Zd ZdZ	 dZ	dAdBd
d„ZedCdd„ƒZedDdd„ƒZdEdd„Z	dFdd„Z
dDdd„ZdGdd„ZdHd d!„ZdId#d$„Z	 ed%ƒZed&ƒZed'ƒZed(ƒZed)ƒZed*ƒZed+ƒZed,ƒZed-ƒZed.ƒZed/ƒZed0ƒZed1ƒZed2ƒZed3ƒZed4ƒZed5ƒZ ed6ƒZ!ed7ƒZ"ed8ƒZ#ed9ƒZ$ed:ƒZ%ed;ƒZ&ed<ƒZ'ed=ƒZ(ed>ƒZ)e*e+d?ƒr°ed?ƒZ,d@S d@S )Jrd   zÀImplements a rational class where 0/0 is a legal value to match
    the in the wild use of exif rationals.

    e.g., DigitalZoomRatio - 0.00/0.00  indicates that no digital zoom was used
    )Ú
_numeratorÚ_denominatorr}   r   Úvaluer^   rq   r`   rT   ÚNonec                 C  sÂ   |  t |tƒr|j| _|j| _|j| _dS t |tƒr#|j| _|j| _ntr,t	t
|ƒ| _n|| _|| _|dkr=tdƒ| _dS |dkrHt|ƒ| _dS t|ƒ|krXtt|ƒ|ƒ| _dS t|| ƒ| _dS )z®
        :param value: either an integer numerator, a
        float/rational/other number, or an IFDRational
        :param denominator: Optional integer denominator
        Nr   Únanr   )Ú
isinstancerd   rp   r‚   rq   rƒ   r}   r   ÚTYPE_CHECKINGr   r   rl   r`   )rx   r„   rq   r2   r2   r6   Ú__init__]  s(   


zIFDRational.__init__r   c                 C  ó   | j S rV   )r‚   ©rx   r2   r2   r6   rp     ó   zIFDRational.numeratorc                 C  rŠ   rV   )rƒ   r‹   r2   r2   r6   rq   ƒ  rŒ   zIFDRational.denominatorÚmax_denominatorútuple[IntegralLike, int]c                 C  s>   | j dkr| j| j fS t| jtƒsJ ‚| j |¡}|j|j fS )z…

        :param max_denominator: Integer, the maximum denominator value
        :returns: Tuple of (numerator, denominator)
        r   )rq   rp   r‡   r}   r   Úlimit_denominator)rx   r   Úfr2   r2   r6   re   ‡  s
   
zIFDRational.limit_rationalrw   c                 C  s   t t| jƒƒS rV   )rw   rl   r}   r‹   r2   r2   r6   Ú__repr__•  r\   zIFDRational.__repr__c                 C  s
   | j  ¡ S rV   )r}   Ú__hash__r‹   r2   r2   r6   r’   ˜  ó   
zIFDRational.__hash__ÚotherÚobjectrU   c                 C  s0   | j }t|tƒr|j }t|tƒrt|ƒ}||kS rV   )r}   r‡   rd   rl   )rx   r”   r]   r2   r2   r6   Ú__eq__›  s   

zIFDRational.__eq__ú%list[float | Fraction | IntegralLike]c                 C  s   | j | j| jgS rV   )r}   r‚   rƒ   r‹   r2   r2   r6   Ú__getstate__£  ó   zIFDRational.__getstate__Ústatec                 C  s^   t  | d¡ |\}}}t|ttfƒsJ ‚|| _tr tt|ƒ| _	n|| _	t|t
ƒs*J ‚|| _d S ©Nr   )rd   r‰   r‡   rl   r   r}   rˆ   r   r   r‚   r`   rƒ   )rx   rš   r}   r‚   rƒ   r2   r2   r6   Ú__setstate__¦  s   

zIFDRational.__setstate__Ú__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__Nr8   )r„   r^   rq   r`   rT   r…   )rT   r   ©rT   r`   )r   r`   rT   rŽ   ©rT   rw   )r”   r•   rT   rU   )rT   r—   )rš   r—   rT   r…   )-Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r‰   Úpropertyrp   rq   re   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·   r2   r2   r2   r6   rd   O  s\    ÿ"






ÿÚImageFileDirectory_v2ÚidxÚsizeú$Callable[[_LoaderFunc], _LoaderFunc]c                   s   d‡ ‡fdd„}|S )NÚfuncÚ_LoaderFuncrT   c                   sB   ddl m} | j d¡r| jdd …  dd¡|ˆ < ˆ| ftˆ < | S )Nr   r   Úload_r)   Ú_ú )r   r   rº   rW   ÚreplaceÚ_load_dispatch)rÅ   r   ©rÂ   rÃ   r2   r6   Ú	decoratorÝ  s
   z#_register_loader.<locals>.decorator)rÅ   rÆ   rT   rÆ   r2   )rÂ   rÃ   rÍ   r2   rÌ   r6   Ú_register_loaderÜ  s   rÎ   ú2Callable[[Callable[..., Any]], Callable[..., Any]]c                   s   d‡ fdd„}|S )NrÅ   úCallable[..., Any]rT   c                   s   | t ˆ < | S rV   )Ú_write_dispatch)rÅ   ©rÂ   r2   r6   rÍ   é  s   z#_register_writer.<locals>.decorator)rÅ   rÐ   rT   rÐ   r2   )rÂ   rÍ   r2   rÒ   r6   Ú_register_writerè  s   rÓ   Úidx_fmt_nameútuple[int, str, str]r…   c                   sb   ddl m} | \}‰ }|||< t dˆ › ¡‰	dd‡ ‡fdd„}ˆ|ft|< ‡ fdd„t|< d S )Nr   r   ú=Trx   rÁ   ÚdatarS   Ú
legacy_apirU   rT   útuple[Any, ...]c                   s   |   t|ƒˆ › ˆ › |¡S rV   )Ú_unpackrN   ©rx   r×   rØ   ©ÚfmtrÃ   r2   r6   Úbasic_handler÷  s   z&_register_basic.<locals>.basic_handlerc                   s   d  ‡‡ fdd„|D ƒ¡S )Nó    c                 3  s    | ]	}ˆ  ˆ |¡V  qd S rV   )Ú_pack©r3   r„   )rÝ   rx   r2   r6   rO   þ  rP   z4_register_basic.<locals>.<lambda>.<locals>.<genexpr>©Újoin©rx   Úvalues)rÝ   r‹   r6   Ú<lambda>ý  s   z!_register_basic.<locals>.<lambda>©T)rx   rÁ   r×   rS   rØ   rU   rT   rÙ   )r   r   ÚstructÚcalcsizerË   rÑ   )rÔ   r   rÂ   ÚnamerÞ   r2   rÜ   r6   Ú_register_basicð  s   
ÿrë   c                   @  sR  e Zd ZU dZi Zded< i Zded< 			d}d~dd„Zedd„ ƒZ	edd„ ƒZ
eddd„ƒZejd€dd„ƒZddd„Zd‚dd„Zdƒd!d"„Zd„d$d%„Zd…d(d)„Zd†d+d,„Zd‡d-d.„Zdˆd0d1„Zd‰d2d3„ZdŠd5d6„Zd‹d:d;„ZdŒd=d>„Zeeeejd?d@fejdAdBfejdCdDfej dEdFfej!dGdHfej"dIdJfej#dKdLfej$dAdBfej%dMdNfg	ƒƒ e&dOdOƒddŽdQdR„ƒZ'e(dOƒddTdU„ƒZ)e&dVdOƒdddWdX„ƒZ*e(dVƒd‘dZd[„ƒZ+e&d\d]ƒ	Pdd’d_d`„ƒZ,e(d\ƒd“dbdc„ƒZ-e&dddOƒddŽdedf„ƒZ.e(ddƒd”dgdh„ƒZ/e&did]ƒ	Pdd’djdk„ƒZ0e(diƒd“dldm„ƒZ1d•dqdr„Z2d–dsdt„Z3d—dudv„Z4d˜d™dydz„Z5dšd{d|„Z6dS )›rÁ   a  This class represents a TIFF tag directory.  To speed things up, we
    don't decode tags unless they're asked for.

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

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

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

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

    Data Structures:

        * ``self.tagtype = {}``

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

          .. versionadded:: 3.0.0

    'Internal' data structures:

        * ``self._tags_v2 = {}``

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

        * ``self._tagdata = {}``

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

        * ``self._tags_v1 = {}``

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

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

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

    z"dict[int, tuple[int, _LoaderFunc]]rË   zdict[int, Callable[..., Any]]rÑ   ó   II*     NÚifhrS   rR   úbytes | NoneÚgroupú
int | NonerT   r…   c                 C  sÐ   t |ƒsdt|ƒ› d}t|ƒ‚|dur|n|dd… | _| jtkr&d| _n| jtkr/d| _nd}t|ƒ‚|d dk| _|| _i | _		 |  
¡  | jrV|  d	|d
d… ¡d n|  d|dd… ¡d | _d| _dS )a—  Initialize an ImageFileDirectory.

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

        :param ifh: One of the accepted magic headers (cf. PREFIXES); also sets
              endianness.
        :param prefix: Override the endianness of the file.
        znot a TIFF file (header z not valid)Nr&   ú>ú<znot a TIFF IFDé+   ÚQr.   r   r:   r(   F)r[   ÚreprÚSyntaxErrorÚ_prefixÚMMÚ_endianÚIIÚ_bigtiffrï   ÚtagtypeÚresetrÚ   ÚnextÚ_legacy_api)rx   rí   rR   rï   Úmsgr2   r2   r6   r‰   H  s(   

ÿý
zImageFileDirectory_v2.__init__c                 C  rŠ   rV   )r÷   r‹   r2   r2   r6   ræ   o  ó    zImageFileDirectory_v2.<lambda>c                 C  rŠ   rV   )Ú_offsetr‹   r2   r2   r6   ræ   p  r  rU   c                 C  rŠ   rV   )rÿ   r‹   r2   r2   r6   rØ   r  rŒ   z ImageFileDirectory_v2.legacy_apir„   r   c                 C  s   d}t |ƒ‚)Nz"Not allowing setting of legacy api)Ú	Exception)rx   r„   r   r2   r2   r6   rØ   v  s   c                 C  s(   i | _ i | _i | _i | _d | _d | _d S rV   )Ú_tags_v1Ú_tags_v2Ú_tagdatarü   Ú_nextr  r‹   r2   r2   r6   rý   {  s   
zImageFileDirectory_v2.resetrw   c                 C  s   t t| ƒƒS rV   )rw   Údictr‹   r2   r2   r6   Ú__str__ƒ  ó   zImageFileDirectory_v2.__str__údict[str, Any]c                   s   ‡ fdd„ˆ   ¡ D ƒS )z
        :returns: dict of name|key: value

        Returns the complete tag dictionary, with named tags where possible.
        c                   s"   i | ]\}}t  |ˆ j¡j|“qS r2   )r   Úlookuprï   rê   )r3   Úcoder„   r‹   r2   r6   r7   Œ  s    ÿÿz/ImageFileDirectory_v2.named.<locals>.<dictcomp>)Úitemsr‹   r2   r‹   r6   Únamed†  s   
þzImageFileDirectory_v2.namedr`   c                 C  ó   t t| jƒt| jƒB ƒS rV   )rN   Úsetr  r  r‹   r2   r2   r6   Ú__len__‘  ó   zImageFileDirectory_v2.__len__Útagr	   c                 C  sf   || j vr| j| }| j| }| j| \}}|| || jƒ| |< | j | }| jr1t|ttfƒs1|f}|S rV   )r  r  rü   rË   rØ   r‡   rX   rS   )rx   r  r×   ÚtyprÃ   Úhandlerr]   r2   r2   r6   Ú__getitem__”  s   



z!ImageFileDirectory_v2.__getitem__r•   c                 C  ó   || j v p	|| jv S rV   )r  r  ©rx   r  r2   r2   r6   Ú__contains__Ÿ  ó   z"ImageFileDirectory_v2.__contains__c                 C  s   |   ||| j¡ d S rV   )Ú_setitemrØ   )rx   r  r„   r2   r2   r6   Ú__setitem__¢  r  z!ImageFileDirectory_v2.__setitem__rØ   c              
     s  t ttf}t || j¡‰ t||ƒr|gn|}|| jvråˆ jr%ˆ j| j|< nÀtj	| j|< t
dd„ |D ƒƒrS|D ]}t|tƒs?J ‚|dk rKtj| j|<  qRq6tj| j|< n’t
dd„ |D ƒƒr¶d}d}d}	|D ]/}t|tƒsmJ ‚|r|d|  krydk s|n d}|r‹d|  k rˆd	k s‹n d}|	r“|dk r“d}	qd|rtj| j|< qå|r¦tj| j|< qå|	r¯tj| j|< qåtj| j|< n/t
d
d„ |D ƒƒrÆtj| j|< nt
dd„ |D ƒƒrÖtj| j|< nt
dd„ |D ƒƒråtj| j|< | j| tj	krõdd„ |D ƒ}n| j| tjkrdd„ |D ƒ}| j| tjkot|tƒ}
|
s!t‡ fdd„|D ƒƒ}|r'| jn| j}|
s†ˆ jdksL| j| tjksLˆ jd u r†t|ƒdkr†|s†|r^| j| tjtjfv r^|f}z|\||< W d S  ty…   t d|› dt|ƒ› d¡ |d ||< Y d S w |||< d S )Nc                 s  ó    | ]}t |tƒV  qd S rV   )r‡   rd   ©r3   r5   r2   r2   r6   rO   °  ó   € z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>r   c                 s  r  rV   )r‡   r`   r  r2   r2   r6   rO   ¸  r   Tr    Fi €ÿÿi €  c                 s  r  rV   )r‡   rl   r  r2   r2   r6   rO   Ì  r   c                 s  r  rV   )r‡   rw   r  r2   r2   r6   rO   Î  r   c                 s  r  rV   )r‡   rS   r  r2   r2   r6   rO   Ð  r   c                 S  s&   g | ]}t |tƒr| d d¡n|‘qS )ÚasciirÊ   )r‡   rw   Úencoder  r2   r2   r6   Ú
<listcomp>Ô  s    ÿÿz2ImageFileDirectory_v2._setitem.<locals>.<listcomp>c                 S  s"   g | ]}t |tƒrt|ƒn|‘qS r2   )r‡   r`   rl   r  r2   r2   r6   r#  Ù  s   " c                 3  s(    | ]}t |tƒrˆ  |¡n|V  qd S rV   )r‡   rw   Zcvt_enumrá   ©Úinfor2   r6   rO   Ý  s
   € ÿ
ÿr   zMetadata Warning, tag z had too many entries: z, expected 1)r   rS   rw   r   r  rï   r‡   rü   ÚtypeÚ	UNDEFINEDÚallrd   ZSIGNED_RATIONALZRATIONALr`   ÚSHORTÚSIGNED_SHORTÚLONGÚSIGNED_LONGÚDOUBLEÚASCIIÚBYTEr  rX   r  r  ÚlengthrN   Ú
ValueErrorÚwarningsÚwarn)rx   r  r„   rØ   Z	basetypesrå   r5   ÚshortZsigned_shortÚlongÚis_ifdÚdestr2   r$  r6   r  ¥  s¢   

þ€€þþÿþý
ýýþÿÿúzImageFileDirectory_v2._setitemc                 C  s.   | j  |d ¡ | j |d ¡ | j |d ¡ d S rV   )r  Úpopr  r  r  r2   r2   r6   Ú__delitem__  s   z!ImageFileDirectory_v2.__delitem__úIterator[int]c                 C  r  rV   )Úiterr  r  r  r‹   r2   r2   r6   Ú__iter__  r  zImageFileDirectory_v2.__iter__rÝ   r×   rÙ   c                 C  s   t  | j| |¡S rV   )rè   Úunpackrù   )rx   rÝ   r×   r2   r2   r6   rÚ     ó   zImageFileDirectory_v2._unpackrå   c                 G  s   t j| j| g|¢R Ž S rV   )rè   Úpackrù   )rx   rÝ   rå   r2   r2   r6   rà     r  zImageFileDirectory_v2._packÚHr4  r:   r5  Úbzsigned byteÚhzsigned shortÚlzsigned longr   rl   ÚdÚdoublerô   Zlong8r   Tc                 C  ó   |S rV   r2   rÛ   r2   r2   r6   Ú	load_byte"  ó   zImageFileDirectory_v2.load_byteúbytes | int | IFDRationalc                 C  s*   t |tƒr	t|ƒ}t |tƒrt|fƒ}|S rV   )r‡   rd   r`   rS   ©rx   r×   r2   r2   r6   Ú
write_byte&  s
   


z ImageFileDirectory_v2.write_byter&   c                 C  s"   |  d¡r|d d… }| dd¡S )Nó    rb   zlatin-1rÊ   )ÚendswithÚdecoderÛ   r2   r2   r6   Úload_string.  s   
z!ImageFileDirectory_v2.load_stringústr | bytes | intc                 C  s0   t |tƒr	t|ƒ}t |tƒs| dd¡}|d S )Nr!  rÊ   rL  )r‡   r`   rw   rS   r"  ©rx   r„   r2   r2   r6   Úwrite_string4  s
   

z"ImageFileDirectory_v2.write_stringr)   r.   ú)tuple[tuple[int, int] | IFDRational, ...]c                   óX   |   t|ƒd › d|¡}d‡fdd	„‰ t‡ fd
d„t|d d d… |dd d… ƒD ƒƒS )Nr(   r:   Úar`   rA  rT   útuple[int, int] | IFDRationalc                   ó   ˆ r| |fS t | |ƒS rV   ©rd   ©rU  rA  ©rØ   r2   r6   ÚcombineC  ó   z4ImageFileDirectory_v2.load_rational.<locals>.combinec                 3  ó    | ]
\}}ˆ ||ƒV  qd S rV   r2   ©r3   ÚnumÚdenom©r[  r2   r6   rO   F  ó   € z6ImageFileDirectory_v2.load_rational.<locals>.<genexpr>r&   r   ©rU  r`   rA  r`   rT   rV  ©rÚ   rN   rX   Úzip©rx   r×   rØ   Úvalsr2   ©r[  rØ   r6   Úload_rational=  ó   0z#ImageFileDirectory_v2.load_rationalrd   c                   ó   d  ‡ fdd„|D ƒ¡S )Nrß   c                 3  s(    | ]}ˆ j d gt|dƒ¢R Ž V  qdS )Z2Ll   ÿÿ N)rà   rh   ©r3   rt   r‹   r2   r6   rO   J  s   € 
ÿz7ImageFileDirectory_v2.write_rational.<locals>.<genexpr>râ   rä   r2   r‹   r6   Úwrite_rationalH  s   ÿz$ImageFileDirectory_v2.write_rationalr,   c                 C  rF  rV   r2   rÛ   r2   r2   r6   Úload_undefinedN  rH  z$ImageFileDirectory_v2.load_undefinedc                 C  s0   t |tƒr	t|ƒ}t |tƒrt|ƒ dd¡}|S )Nr!  rÊ   )r‡   rd   r`   rw   r"  rQ  r2   r2   r6   Úwrite_undefinedR  s
   

z%ImageFileDirectory_v2.write_undefinedé
   c                   rT  )Nr(   rC  rU  r`   rA  rT   rV  c                   rW  rV   rX  rY  rZ  r2   r6   r[  `  r\  z;ImageFileDirectory_v2.load_signed_rational.<locals>.combinec                 3  r]  rV   r2   r^  ra  r2   r6   rO   c  rb  z=ImageFileDirectory_v2.load_signed_rational.<locals>.<genexpr>r&   r   rc  rd  rf  r2   rh  r6   Úload_signed_rationalZ  rj  z*ImageFileDirectory_v2.load_signed_rationalc                   rk  )Nrß   c                 3  s*    | ]}ˆ j d gt|ddƒ¢R Ž V  qdS )Z2liÿÿÿi   €N)rà   ru   rl  r‹   r2   r6   rO   g  s
   € ÿ
ÿz>ImageFileDirectory_v2.write_signed_rational.<locals>.<genexpr>râ   rä   r2   r‹   r6   Úwrite_signed_rationale  s   þz+ImageFileDirectory_v2.write_signed_rationalÚfpú	IO[bytes]rÃ   c                 C  s8   |  |¡}t|ƒ|krd|› dt|ƒ› d}t|ƒ‚|S )Nz&Corrupt EXIF data.  Expecting to read ú bytes but only got z. )ÚreadrN   ÚOSError)rx   rs  rÃ   Úretr   r2   r2   r6   Ú_ensure_readl  s   
ÿÿÿz"ImageFileDirectory_v2._ensure_readc              
   C  st  |   ¡  | ¡ | _z| jr|  d|  |d¡¡n	|  d|  |d¡¡d }t|ƒD ]Ù}| jr7|  d|  |d¡¡n	|  d|  |d	¡¡\}}}}t || j	¡j
}t |d
¡}	d|› d|› d|	› d|› d	}
z	| j| \}}W n ty{   t d|
|¡ Y q(w || }|| jr†dndkr´| ¡ }|  | jr”dnd|¡\}|
d|› d|› 7 }
| |¡ t ||¡}| |¡ n|d |… }t|ƒ|krÖt d|› dt|ƒ› d|› ¡ t |
¡ q(|sÞt |
¡ q(|| j|< || j|< |
d7 }
|
|dkr÷d|› dnt|ƒ7 }
t |
¡ q(| jr|  d|  |d¡¡n	|  d|  |d¡¡\| _W d S  ty9 }
 zt t|
ƒ¡ W Y d }
~
d S d }
~
ww )Nrô   r.   r@  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 ru  z. Skipping tag z
 - value: r@   ú<table: ú bytes>)rý   Útellr  rû   rÚ   ry  Úranger   r  rï   rê   r   ÚgetrË   ÚKeyErrorÚloggerÚdebugÚseekr   Ú
_safe_readrN   r2  r3  r  rü   rõ   rþ   rw  rw   )rx   rs  Z	tag_countrn   r  r  Úcountr×   ÚtagnameÚtypnamer   Z	unit_sizer  rÃ   ÚhereÚoffsetr2   r2   r6   Úloadv  sx   
ÿüÿ
ýþ
ÿÿþÿ



 ÿý€þzImageFileDirectory_v2.loadc                 C  s`   | j |  d| jr
dnd¡ }| jr||  ddd¡7 }|| jr'|  dd¡7 }|S |  d	d¡7 }|S )
Nr@  ró   é*   ÚHHr.   r   rô   r=   r:   )r÷   rà   rû   ©rx   rí   r2   r2   r6   Ú_get_ifh¹  s   þzImageFileDirectory_v2._get_ifhr   r  c              
     s`  |   | 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  | 7 ‰ d }t| j ¡ ƒD ]Ý\}}|tkrGt|ƒ}| j| }	t 	d||	t
|ƒ¡ |	tjko_t|tƒ}
|
r‚t|  ¡ |d	}| j| }| ¡ D ]\}}|||< qs| ˆ ¡}nt|tƒr‰|n|f}| j|	 | g|¢R Ž }t || j¡j}|
r£d
nt |	d¡}d|› d|› d|› d|	› d	}|t|ƒdkrÇdt|ƒ› dnt|ƒ7 }t 	|¡ |
rÖd}n|	tjtjtjfv råt|ƒ}nt|ƒ}t|ƒ|krþ| ||	|| |d¡df¡ q;| ||	||   |ˆ ¡|f¡ ˆ t|ƒd d d 7 ‰ q;|d urb|| \}}	}}}|rK| j|	 \}}‡ fdd„|| || j ƒD ƒ}| j|	 | g|¢R Ž }n|   ||  !||¡d ˆ  ¡}||	|||f||< |D ]'\}}	}}}t 	d||	|t
|ƒt
|ƒ¡ ||   | jr‚dnd||	||¡7 }qd||   |d¡7 }|D ]\}}	}}}||7 }t|ƒd@ r¬|d7 }q–|S )Nrô   r@  r:   r.   r(   r{  r;   zTag %s, Type: %s, Value: %s)rï   Úifdr}  zsave: r~  r  z) - value: r=   r  r‚  r   rL  rß   r&   c                   s   g | ]}|ˆ  ‘qS r2   r2   )r3   r]   ©r  r2   r6   r#  ù  ó    z1ImageFileDirectory_v2.tobytes.<locals>.<listcomp>r   z%s %s %s %s %srz  r|  )"rà   rû   rN   r  Úsortedr  ÚSTRIPOFFSETSrü   r‡  rˆ  rõ   r   r+  r‡   r  rÁ   r”  ÚtobytesrX   rÑ   r  rï   rê   r   r…  rw   r/  r.  r'  ÚappendÚljustrË   rØ   rÚ   )rx   r  ÚresultÚentriesrÝ   Úfmt_sizeZstripoffsetsr  r„   r  r6  r•  rå   Zifd_tagZ	ifd_valuer×   rŒ  r  r   r‹  rÃ   r  r2   r–  r6   rš  Á  sp   "ÿ


(



ÿ€zImageFileDirectory_v2.tobytesc                 C  sB   |  ¡ dkr| |  ¡ ¡ |  ¡ }|  |¡}| |¡ |t|ƒ S r›   )rƒ  Úwriter”  rš  rN   )rx   rs  r  r  r2   r2   r6   Úsave  s   

zImageFileDirectory_v2.save)rì   NN)rí   rS   rR   rî   rï   rð   rT   r…   )rT   rU   )r„   rU   rT   r   ©rT   r…   r¹   )rT   r  r¸   ©r  r`   rT   r	   ©r  r•   rT   rU   ©r  r`   r„   r	   rT   r…   )r  r`   r„   r	   rØ   rU   rT   r…   )r  r`   rT   r…   ©rT   r:  )rÝ   rw   r×   rS   rT   rÙ   )rÝ   rw   rå   r	   rT   rS   rç   )r×   rS   rØ   rU   rT   rS   )r×   rI  rT   rS   )r×   rS   rØ   rU   rT   rw   )r„   rP  rT   rS   )r×   rS   rØ   rU   rT   rS  )rå   rd   rT   rS   )r„   rI  rT   rS   )rs  rt  rÃ   r`   rT   rS   )rs  rt  rT   r…   )rT   rS   rG   )r  r`   rT   rS   )rs  rt  rT   r`   )7rº   r»   r¼   r½   rË   Ú__annotations__rÑ   r‰   r¿   rR   r  rØ   Úsetterrý   r	  r  r  r  r  r  r  r9  r<  rÚ   rà   ÚlistÚmaprë   r   r)  r+  ZSIGNED_BYTEr*  r,  ÚFLOATr-  ZIFDÚLONG8rÎ   rG  rÓ   rK  rO  rR  ri  rm  rn  ro  rq  rr  ry  r  r”  rš  r¡  r2   r2   r2   r6   rÁ     sˆ   
 <ü'








^











÷þÿÿ
ÿ




CPrÉ   rÈ   rÇ   Zwrite_c                      s   e Zd ZU dZd$‡ fdd„Zed	d
„ ƒZedd
„ ƒZded< 	 e	d%dd„ƒZ
d&dd„Zd'dd„Zd(dd„Zd)dd„Zd*d d!„Zd+d"d#„Z‡  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
    ry   r	   ÚkwargsrT   r…   c                   s   t ƒ j|i |¤Ž d| _d S )NT)Úsuperr‰   rÿ   )rx   ry   r®  ©Ú	__class__r2   r6   r‰   8  s   
zImageFileDirectory_v1.__init__c                 C  rŠ   rV   )r  r‹   r2   r2   r6   ræ   <  r  zImageFileDirectory_v1.<lambda>c                 C  rŠ   rV   )r  r‹   r2   r2   r6   ræ   =  r  zdict[int, int]rü   ÚoriginalrÁ   c                 C  s(   | |j d}|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`

        rZ   )rR   r  rü   rþ   )Úclsr²  r•  r2   r2   r6   Úfrom_v2C  s
   zImageFileDirectory_v1.from_v2c                 C  s4   t | jd}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`

        rZ   )rÁ   rR   r  r  rü   r  )rx   r•  r2   r2   r6   Úto_v2U  s
   zImageFileDirectory_v1.to_v2r  r•   rU   c                 C  r  rV   )r  r  r  r2   r2   r6   r  f  r  z"ImageFileDirectory_v1.__contains__r`   c                 C  r  rV   )rN   r  r  r  r‹   r2   r2   r6   r  i  r  zImageFileDirectory_v1.__len__r:  c                 C  r  rV   )r;  r  r  r  r‹   r2   r2   r6   r<  l  r  zImageFileDirectory_v1.__iter__r„   c                 C  s   dD ]	}|   |||¡ qd S ©N)FT)r  )rx   r  r„   rØ   r2   r2   r6   r  o  s   ÿz!ImageFileDirectory_v1.__setitem__c                 C  sn   || j vr&| j| }| j| }| j| \}}dD ]}|  ||| ||ƒ|¡ q| j | }t|ttfƒs5|f}|S r¶  )r  r  rü   rË   r  r‡   rX   rS   )rx   r  r×   r  rÃ   r  Úlegacyr]   r2   r2   r6   r  s  s   



z!ImageFileDirectory_v1.__getitem__)ry   r	   r®  r	   rT   r…   )r²  rÁ   rT   r­  )rT   rÁ   r¤  r¸   r¦  r¥  r£  )rº   r»   r¼   r½   r‰   r¿   ÚtagsZtagdatar§  Úclassmethodr´  rµ  r  r  r<  r  r  Ú__classcell__r2   r2   r°  r6   r­  %  s   
 




r­  c                      s¤   e Zd ZdZdZdZ	d'd(‡ fdd„Zd)dd„Zed*dd„ƒZ	d+dd„Z
d+dd„Zd*dd„Zd,dd„Zd-‡ fdd„Zd)dd „Zd)d!d"„Zd-d#d$„Zd)d%d&„Z‡  ZS ).ÚTiffImageFileZTIFFz
Adobe TIFFFNrs  úStrOrBytesPath | IO[bytes]Úfilenameústr | bytes | NonerT   r…   c                   s   |  	 |  	 t ƒ  ||¡ d S rV   )r¯  r‰   )rx   rs  r½  r°  r2   r6   r‰     s
   zTiffImageFile.__init__c                 C  s’   | j  d¡}|d dkr|| j  d¡7 }t|ƒ| _| jj | _| _d| _| j | _g | _	d| _
t d¡ t d| j¡ t dt|ƒ¡ |  d	¡ dS )
z#Open the first image in a TIFF filer.   r&   ró   rb   Nz*** TiffImageFile._open ***z- __first: %sz	- ifh: %sr   )rs  rv  rÁ   Útag_v2rþ   Z_TiffImageFile__firstÚ_TiffImageFile__nextÚ_TiffImageFile__frameÚ_fpÚ
_frame_posÚ	_n_framesr‡  rˆ  rõ   Ú_seekr“  r2   r2   r6   Ú_openš  s   

zTiffImageFile._openr`   c                 C  sj   | j }|d u r+|  ¡ }|  t| jƒ¡ | j d u r&|  |  ¡ d ¡ | j d u s|  |¡ | j d us2J ‚| j S )Nr   )rÄ  rƒ  rÅ  rN   rÃ  r‰  )rx   Zcurrent_n_framesÚcurrentr2   r2   r6   Ún_frames²  s   

ÿ
zTiffImageFile.n_framesÚframec                 C  sV   |   |¡sdS |  |¡ | jdur'| jj| jks"| jj| jks"| jr)d| _dS dS dS )z%Select a given frame as current imageN)Z_seek_checkrÅ  Ú_imÚimrÃ   Ú
_tile_sizeÚmodeÚreadonly)rx   rÉ  r2   r2   r6   r‰  ¾  s   


ÿþý
ûzTiffImageFile.seekc                 C  s²  t | jtƒr
| jj‚| j| _t| jƒ|krŠ| jsd}t|ƒ‚t	 
d|| j| j| j ¡ ¡ | jdkr7d}t|ƒ‚| j | j¡ | j | j¡ t	 
d| j ¡ ¡ | j | j¡ | jj| jv r`d| _n| jj| _| jdkro|d | _t| jƒdkr|| jdk| _|  jd7  _t| jƒ|ks| j | j| ¡ | j | j¡ t| jv r¹| jt }t |tƒr³t|ƒdkr³|d }|| jd< n	d| jv rÂ| jd= |  ¡  t | j¡ | _| _|| _|  ¡  d S )	Nzno more images in TIFF filez9Seeking to frame %s, on frame %s, __next %s, location: %sl            zUnable to seek to framezLoading tags, location: %sr   r   Úxmp)r‡   rÂ  r   Úexrs  rN   rÃ  rÀ  ÚEOFErrorr‡  rˆ  rÁ  rƒ  r1  r‰  r›  r¿  r  rþ   rÄ  Úis_animatedÚXMPrX   r%  Z_reload_exifr­  r´  r  r•  Ú_setup)rx   rÉ  r   rÏ  r2   r2   r6   rÅ  Ê  sV   û



ä


zTiffImageFile._seekc                 C  rŠ   )zReturn the current frame number)rÁ  r‹   r2   r2   r6   rƒ  û  rŒ   zTiffImageFile.tellúdict[int, dict[str, bytes]]c                 C  s¸   i }| j  tjj¡}|rZ| d¡rZt|dd… ƒ}t |d d d ¡d }t	|d| d| … ƒ}|d| d| | … }d|i||< |t d| | d ¡d d… }| d¡s|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&   rp  r×   N)
r¿  r…  r   ÚBaseZImageResourcesrW   Úi16ÚmathÚceilÚi32)rx   Úblocksr]   ÚidÚnrÃ   r×   r2   r2   r6   Úget_photoshop_blocksÿ  s   
"
ùz"TiffImageFile.get_photoshop_blocksúImage.core.PixelAccess | Nonec                   s   | j r
| jr
|  ¡ S tƒ  ¡ S rV   )ÚtileÚuse_load_libtiffÚ_load_libtiffr¯  r  r‹   r°  r2   r6   r    s   
zTiffImageFile.loadc                 C  s:   | j d u rt | j¡ tj | j| j¡| _tj 	| ¡ d S rV   )
rÊ  r   Z_decompression_bomb_checkrÌ  ÚcoreÚnewrÍ  rË  r   Úload_preparer‹   r2   r2   r6   rå    s   
zTiffImageFile.load_preparec                 C  sd   | j sd| _|  ¡ }tjD ]}||vrq| |¡ qtj| dd tj	j
| jv r0| jtj	j
= d S d S )NT)Zin_place)rÒ  Ú!_close_exclusive_fp_after_loadingZgetexifr   ÚTAGS_V2_GROUPSÚget_ifdr   Zexif_transposer   rÖ  ÚOrientationr¿  )rx   ÚexifÚkeyr2   r2   r6   Úload_end  s   
ÿzTiffImageFile.load_endc              
   C  s
  t j  | ¡ |  ¡  t| jƒdksd}t|ƒ‚| jd d }| jd d }zt| jdƒo0| j ¡ }t| jdƒr<| j 	¡  W n tyH   d}Y nw |r^t
|tƒsRJ ‚t|ƒ}||d< t|ƒ}t  | jd	|| j¡}z	| | j|¡ W n ty„ } zd
}t|ƒ|‚d}~ww | jo‹| j }t| jdƒr¢t d¡ | | j ¡ ¡\}	}
n<|rÉt d¡ |s±| j d¡ t |dtj¡}| d¡\}	}
t ||tj¡ nt d¡ | j d¡ | | j ¡ ¡\}	}
g | _d| _|   ¡  |rò| j !¡  d| _|
dk rÿd|
› }t|ƒ‚t j  | ¡S )zWOverload method triggered when we detect a compressed tiff
        Calls out to libtiffr   zNot exactly one tiler   r'   ÚfilenoÚflushFr&   ÚlibtiffzCouldn't set the imageNÚgetvaluez5have getvalue. just sending in a string from getvaluez3have fileno, calling fileno version of the decoder.s   fpfpz+don't have fileno or getvalue. just readingzdecoder error )"r   r  rå  rN   rà  rw  rÀ   rs  rí  rî  r‡   rX   r©  Z_getdecoderrÍ  ZdecoderconfigÚsetimagerË  r1  Z_exclusive_fprÒ  r‡  rˆ  rN  rð  r‰  ÚosÚlseekÚSEEK_CURÚSEEK_SETrv  rÎ  rì  Úclose)rx   r   Zextentsry   rs  Z	args_listÚdecoderÚeZclose_self_fprÝ  ÚerrÚposr2   r2   r6   râ  0  sh   
€ý
€þ





zTiffImageFile._load_libtiffc                  C  sš  d| j v rd}t|ƒ‚t| j  td¡ | _| j  td¡| _| j  td¡}| jdkr+d}| j  t	d¡}t
 d¡ t
 d| j¡ t
 d	|¡ t
 d
| j¡ t
 d|¡ t
 d| j  t¡¡ z| j t }| j t }W n tyz } zd}t|ƒ|‚d}~ww t|tƒr…t|tƒs‹d}t|ƒ‚||f| _| j  tjj¡}|dv r¢||f| _n||f| _t
 d| j¡ | j  td¡}t|ƒdkrÍt|ƒt|ƒ  krÉdkrÍn nd}| j  td¡}	| j  td¡}
|dv râd}n	|dkréd}nd}|t|
ƒ7 }t|	ƒ}| j  t | jdkr|dv rdnd¡}|t!krt
 "d|¡ d}t#|ƒ‚||k r&|	d|… }	n||kr4|dkr4|	| }	t|	ƒ|krAd}t#|ƒ‚| j j$||||	|
f}t
 d|¡ z	t%| \| _&}W n tys } zt
 d¡ d}t#|ƒ|‚d}~ww t
 d|¡ t
 d | j'¡ | j| j(d!< | j  t)d¡}| j  t*d¡}|rÚ|rÚ| j  t+¡}|d"kr®||f| j(d#< n,|dkr¿|d$ |d$ f| j(d#< n|du rÓ||f| j(d#< ||f| j(d%< n||f| j(d%< d } }}g | _,t-pê| jd&k| _.| j.rT|d"kr|dd… d |dd…  }t
 d|¡ t%| \| _&}|dkr$| jd'kr$| jdkr$d(}n|d)kr,d*}n| /d+¡r:|dd,… d- }|| jd.| j j0f}| j, 1t2 3d/dd||fd|¡¡ nÍt4| j v s`t5| j v rt4| j v ru| j t4 }| j  t6|¡}|}n%| j t5 }| j  t7¡}| j  t8¡}t|tƒr’t|tƒs˜d0}t|ƒ‚|}||kr°||kr°| jd"kr°|d,d… }|D ]b}|| |krÄ|t9|	ƒ d1 }nd}|}| jd"krÖ|| }|| }|t|ƒdf}| j, 1t2 3| j||t|| |ƒt|| |ƒf||¡¡ ||7 }||krd|| }}||krd}|d7 }q²nt
 d2¡ d}t#|ƒ‚t:| j v r/| j t: | j(d3< | j'd4v rKd5d6„ | j t; D ƒ}t< =d7d8 >|¡¡| _?dS dS )9z-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,   r.   z
- size: %sr8   r2   )r&   r*   r.   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%   r-   rE   r<   úI;16N)z;16Bz;16Lrb   ÚNFrï  zInvalid tile dimensionsr.   z- unsupported data organizationÚicc_profile©rJ   rK   c                 S  s   g | ]}t |d  ƒ‘qS ©r"   r   )r3   rA  r2   r2   r6   r#  ~  s    z(TiffImageFile._setup.<locals>.<listcomp>úRGB;Lrß   )@r¿  rw  ÚCOMPRESSION_INFOr…  ÚCOMPRESSIONÚ_compressionÚPLANAR_CONFIGURATIONZ_planar_configurationÚPHOTOMETRIC_INTERPRETATIONÚ	FILLORDERr‡  rˆ  ÚYCBCRSUBSAMPLINGÚ
IMAGEWIDTHÚIMAGELENGTHr†  Ú	TypeErrorr‡   r`   r1  rÌ  r   rÖ  ré  Ú_sizerÃ   ÚSAMPLEFORMATrN   rs   rr   ÚBITSPERSAMPLEÚEXTRASAMPLESÚSAMPLESPERPIXELÚMAX_SAMPLESPERPIXELÚerrorrö   rR   Ú	OPEN_INFOÚ_moderÍ  r%  ÚX_RESOLUTIONÚY_RESOLUTIONÚRESOLUTION_UNITrà  ÚREAD_LIBTIFFrá  rM  r  r›  r   Ú_Tiler™  ÚTILEOFFSETSÚROWSPERSTRIPÚ	TILEWIDTHÚ
TILELENGTHÚsumÚ
ICCPROFILEÚCOLORMAPr   r%   rã   Úpalette) rx   r   ÚphotoZ	fillorderZxsizeZysizerø  ZorientationZsample_formatZ	bps_tupleZextra_tupleZ	bps_countZbps_actual_countZsamples_per_pixelrë  ÚrawmodeZxresZyresZresunitÚxÚyÚlayerrU  ÚoffsetsrB  ÚwZ	tilewidthr  ÚstrideZtile_rawmodery   r#  r2   r2   r6   rÔ    sB  




€þ

,þ
ÿ
ú

€ý



ÿþý
"

 üÿ

€å
þzTiffImageFile._setuprV   )rs  r¼  r½  r¾  rT   r…   r¢  r¸   )rÉ  r`   rT   r…   )rT   rÕ  )rT   rß  )rº   r»   r¼   ÚformatÚformat_descriptionræ  r‰   rÆ  r¿   rÈ  r‰  rÅ  rƒ  rÞ  r  rå  rì  râ  rÔ  rº  r2   r2   r°  r6   r»  ˆ  s$    ý



1



`r»  r9   r:   rD   rJ   rK   r?   rC   r<   úI;16LrA   rB   rE   rH   rF   rL   ÚYCbCrrM   r>   rË  úImage.Imagers  rt  r½  ústr | bytesc           6      C  sv	  zt | j \}}}}}}W n ty% }	 zd| j› d}
t|
ƒ|	‚d }	~	ww | j}| j}t|d}| d¡r9d|_z|d }W n tyU   | j	 d¡}t
|tƒrSd }Y nw |d u r]d}n|dkrdd	}n|d
krjd}tpo|dk}d|t< | jd |t< | jd |t< d|v r‹|d }nd|v r¤|d }t
|tƒr£t ¡ }| |¡ |}ni }t dt|ƒ¡ t
|tƒr·| ¡ }|D ]/}t
|tjƒrÎ|tjv rÎ| |¡||< n| |¡||< z
|j| |j|< W q¹ tyè   Y q¹w i }t| dƒrõ| j  ¡ }i |¥t!| di ƒ¥}t"t#fD ]}||v r||= qt| dƒrNt$t%t&t't(t)fD ]0}|| j*v rL|t'kr<| j*j| tj+tj,fvr<||= q| j*| ||< | j*j| |j|< q| d| j	 d¡¡}|r_||t-< t.dft%dft&dft%dft&dft$dft/dft0dft1dft2dff
D ]\}}||v rŽ|| ||< q| d¡}|r¨d|t$< |d |t%< |d |t&< |dkr¾||t3< t4|ƒdkr¾t4|ƒ|t5< |d urÇ||t6< |dkrÐ||t#< t7|vrÚ||t7< nK| jd v r%|t7 dkr%| jd!kr |  8¡ }| ¡ }|d urt9|j:ƒD ]}t9|j;ƒD ]}|||f d"krdnd"|||f< qqÿ|} nt< =| ¡} | jd#v rb| j> ?d$d%¡}g }t4|ƒd& }t9d&ƒD ]} |d'd(„ |||  || d  … D ƒ7 }|dgd)|  7 }q>||t@< |t |t }!}"t4|ƒ|!|d  d* d+  }#tA|vr³|r¦| d,tB¡}$|#dkrŽdntC|$|# |"ƒ}%|d	kr¥tC|%d* d+ d+ |"ƒ}%n|"}%|%dkr¯d}%|%|tA< |#dkrºdn|#|tA  }&|"|tA  d |tA  }'|&d-kr×tjD|jtE< |&f|'d  |#|" |&|'d   f |tE< tFt9d|&|' |&ƒƒ|tG< tH |d¡|tI< | jd.krtJd/tKd0i L¡ D ]\}}(| M||(¡ qtNtOtPtQg})|rŠd1|v rP|d1 }*t
|*tƒr;|*dk s;|*d2krAd3}
tR|
ƒ‚|d	krLd4}
tR|
ƒ‚|*|tS< t d5¡ t d6tT| L¡ ƒ¡ d}+t|d7ƒr~z| Ud¡ | V¡ }+W n tWjXy}   Y nw i },|)tYtKtEtGtZt[g7 })t3|d i}-t\ ]| L¡ | L¡ ¡D ]v\}}.|tj^vrát!tj_d8d9ƒs®qš|tjv rºtj`|,|< n'||jv rÈ|j| |,|< nt
|.ttatbtfƒsÔqšt c|¡jd}/|/rá|/|,|< ||-vr||)vrt
|.tbƒrý|. ed:d;¡d< |-|< qšt
|.tfƒrta|.ƒ|-|< qš|.|-|< qšt#|-v r't4|-t# ƒdkr'|-t# d |-t#< t d=tT|- L¡ ƒ¡ | jd>v r9d?}t|- L¡ ƒ}0|0 g¡  |||+||0|,f}1t h| jd@|1|¡}2|2 i| j>dA| j ¡ 	 |2 etjjk¡dd … \}3}4|+ss| l|4¡ |3rxqzq_|3dk r‰dB|3› dC}
t|
ƒ‚n"|)D ]}||= qŒ| m|¡}5tj n| |tj oddA| j |5||#df¡g¡ dD|v r¹tp| dD|ƒ d S d S )ENzcannot write mode z as TIFFrZ   Zbig_tiffTrû  r%   r+   r-   r0   r/   r   r   Ztiffinforê  zTiffinfo Keys: %sr  r¿  r   Údescriptionrý  Zx_resolutionZy_resolutionZresolution_unitZsoftwareÚ	date_timeZartistÚ	copyrightrü  r&   r8   )r9   r:   r9   r!   r  rE   r  r'   c                 S  s   g | ]}|d  ‘qS r  r2   r  r2   r2   r6   r#  7  r—  z_save.<locals>.<listcomp>r"   r,   r.   Z
strip_sizer    r/  )r   r   )r   r!   é€   r!   r5  r!   Úqualityéd   zInvalid quality settingz5quality setting only supported for 'jpeg' compressionzSaving using libtiff encoderz	Items: %srí  rQ   Fr!  rÊ   rL  zConverted items: %s)r<   r>   r.  rþ  rï  rI   zencoder error z when writing image fileZ_debug_multipage)qÚ	SAVE_INFOrÍ  r†  rw  ÚencoderinfoÚencoderconfigrÁ   r…  rû   r%  r‡   r`   ÚWRITE_LIBTIFFr  rÃ   r  r  rS   r   ZExifr  r‡  rˆ  r©  r­  rµ  r   rç  rè  rü   r  rÀ   r  r|   ÚEXIFIFDr  r  r  r  ÚIPTC_NAA_CHUNKÚPHOTOSHOP_CHUNKrÓ  r¿  r/  r'  r!  ÚIMAGEDESCRIPTIONÚSOFTWAREÚ	DATE_TIMEÚARTISTÚ	COPYRIGHTr  rN   r  r  r  Úcopyr„  ÚheightÚwidthr   ÚinvertrË  Z
getpaletter"  r  Ú
STRIP_SIZErr   r+  ÚSTRIPBYTECOUNTSrX   r™  ÚCOMPRESSION_INFO_REVr  r
  ÚREFERENCEBLACKWHITEr  Ú
setdefaultr  r  r  ÚTILEBYTECOUNTSr1  ÚJPEGQUALITYr˜  r‰  rí  ÚioÚUnsupportedOperationÚOSUBFILETYPEÚTRANSFERFUNCTIONÚSUBIFDÚ	itertoolsÚchainZLIBTIFF_CORErã  r¬  rl   rw   r  r&  r"  rd   ÚsortZ_getencoderrñ  r   ZMAXBLOCKr   r¡  Ú_saver  Úsetattr)6rË  rs  r½  r%  rR   r$  r,  ÚbitsÚextrarø  r   r9  r:  r•  rû  rï  r%  rê  rë  Z
legacy_ifdZsupplied_tagsr  Ziccrê   rü  Zinverted_imZpxr'  r&  ZlutZcolormapÚcolorsrn   r*  rB  r+  Zim_strip_sizeZrows_per_stripZstrip_byte_countsZstrips_per_imageÚdefault_valueZ	blocklistr6  rÂ  ÚtypesZattsr„   r&  r¸  rU  ÚencoderÚerrcoder×   r  r2   r2   r6   rW  Ÿ  sê  
€þ


€ü


€
ÿ

ü
€úþ
€ö
€






&ÿ€
&

€


ÿÿþ
ý
 


ÿú
€
û
þ

ý
þrW  c                   @  sH  e Zd Zg d¢Zh d£ZdVdWd
d„ZdXdd„ZdXdd„ZdXdd„ZdYdd„Z	dZdd„Z
d[dd„Zejfd\dd„ZdXdd „Zd]d#d$„ZdXd%d&„Zd^d)d*„Zd_d,d-„Zd`d.d/„Zd[d0d1„Zd[d2d3„Zedad7d8„ƒZ	9dbdcd<d=„Zddd>d?„Zddd@dA„ZdddBdC„ZdedDdE„ZdddFdG„ZdddHdI„ZdXdJdK„Z dXdLdM„Z!dfdOdP„Z"	dgdhdSdT„Z#dUS )iÚAppendingTiffWriter)r   r   r   r&   r(   r.   r   r   r&   r(   r.   r(   r.   r(   r&   r(   r.   >   i   r$   i  i  i	  r#   FÚfnr¼  rä  rU   rT   r…   c                 C  s~   |  t |ƒr(|| _d| _zt||rdndƒ| _W q3 ty'   t|dƒ| _Y q3w ttt |ƒ| _d| _| j 	¡ | _
|  ¡  d S )NTzw+bzr+bF)r   rê   Úclose_fpÚopenr   rw  r   r   rS   rƒ  Ú	beginningÚsetup)rx   ra  rä  r2   r2   r6   r‰   ó  s   ÿzAppendingTiffWriter.__init__c                 C  s¤   | j  | jtj¡ d | _d| _| j  d¡ | _}d|v | _	|s$d| _
d S d| _
|tvr1d}t|ƒ‚|  | t¡r:dnd¡ | j	rH| j  dtj¡ |  ¡  |  ¡  d S )	Nr   r(   ó   +TFzInvalid TIFF file headerrò   rñ   )r   r‰  rd  rò  rõ  ÚwhereToWriteNewIFDOffsetÚoffsetOfNewPagerv  ÚIIMMrû   ÚisFirstrY   ÚRuntimeErrorÚ	setEndianrW   rú   rô  ÚskipIFDsÚgoToEnd)rx   Úiimmr   r2   r2   r6   re    s"   
zAppendingTiffWriter.setupc                 C  sÀ   | j rd S | j | j¡ | j d¡}|sd S || jkr!d}t|ƒ‚| jr,| j dtj	¡ |  
| jr3dnd¡}|| j7 }| jd usBJ ‚| j | j¡ |  || jrQdnd¡ | j |¡ |  ¡  d S )Nr(   z1IIMM of new page doesn't match IIMM of first pager.   )rj  r   r‰  rh  rv  ri  rk  rû   rò  rô  Ú_readrg  Ú_writeÚfixIFD)rx   ro  r   Ú
ifd_offsetr2   r2   r6   Úfinalize  s$   

zAppendingTiffWriter.finalizec                 C  s   |   ¡  |  ¡  d S rV   )rt  re  r‹   r2   r2   r6   ÚnewFrame6  s   zAppendingTiffWriter.newFramec                 C  s   | S rV   r2   r‹   r2   r2   r6   Ú	__enter__;  s   zAppendingTiffWriter.__enter__ry   r•   c                 G  s   | j r	|  ¡  d S d S rV   )rb  rö  r~   r2   r2   r6   Ú__exit__>  s   ÿzAppendingTiffWriter.__exit__r`   c                 C  s   | j  ¡ | j S rV   )r   rƒ  rh  r‹   r2   r2   r6   rƒ  B  r™   zAppendingTiffWriter.tellr  Úwhencec                 C  s*   |t jkr
|| j7 }| 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.
        )rò  rõ  rh  r   r‰  rƒ  )rx   r  rx  r2   r2   r6   r‰  E  s   

zAppendingTiffWriter.seekc                 C  s^   | j  dtj¡ | j  ¡ }d|d  }d|  k rdk r'n n| j  t|ƒ¡ | j  ¡ | _d S )Nr   r=   )r   r‰  rò  ÚSEEK_ENDrƒ  r   rS   rh  )rx   rú  Z	pad_bytesr2   r2   r6   rn  R  s   
zAppendingTiffWriter.goToEndÚendianrw   c                 C  sB   || _ | j › d| _| j › d| _| j › d| jrdnd | _d S )Nr:   r@  r’  rô   )rz  ZlongFmtZshortFmtrû   Ú	tagFormat)rx   rz  r2   r2   r6   rl  \  s    zAppendingTiffWriter.setEndianc                 C  s|   	 |   | jrdnd¡}|dkr| j ¡ | jrdnd | _d S | j |¡ |   | jr+dnd¡}| j || jr7dnd tj¡ q)NTr.   r(   r   r&   r{  r;   )rp  rû   r   rƒ  rg  r‰  rò  rô  )rx   rs  Únum_tagsr2   r2   r6   rm  b  s   ÿözAppendingTiffWriter.skipIFDsr×   r   c                C  s   | j  |¡S rV   )r   r   rJ  r2   r2   r6   r   o  r
  zAppendingTiffWriter.writeÚ
field_sizec                 C  s.   z	ddddœ| W S  t y   d}t|ƒ‚w )Nr@  r:   rô   )r&   r(   r.   zoffset is not supported)r†  rk  )rx   r}  r   r2   r2   r6   Ú_fmtr  s   þzAppendingTiffWriter._fmtc                 C  s&   t  | j|  |¡ | j |¡¡\}|S rV   )rè   r=  rz  r~  r   rv  )rx   r}  r„   r2   r2   r6   rp  y  s   ÿzAppendingTiffWriter._readc                 C  ó
   |   d¡S ©Nr&   ©rp  r‹   r2   r2   r6   Ú	readShort  r“   zAppendingTiffWriter.readShortc                 C  r  ©Nr(   r  r‹   r2   r2   r6   ÚreadLong‚  r“   zAppendingTiffWriter.readLongÚbytes_writtenrð   Úexpectedc                 C  s0   | d ur| |krd| › d|› }t |ƒ‚d S d S )Nzwrote only z bytes but wanted )rk  )r…  r†  r   r2   r2   r6   Ú_verify_bytes_written…  s   þz)AppendingTiffWriter._verify_bytes_writtenr   r„   Únew_field_sizec                 C  sJ   | j  | tj¡ |s|}| j  t | j|  |¡ |¡¡}|  	||¡ d S rV   )
r   r‰  rò  rô  r   rè   r?  rz  r~  r‡  )rx   r„   r}  rˆ  r…  r2   r2   r6   Ú_rewriteLast‹  s   ÿz AppendingTiffWriter._rewriteLastc                 C  s   |   |dd¡ d S )Nr&   r(   ©r‰  rQ  r2   r2   r6   ÚrewriteLastShortToLong–  r>  z*AppendingTiffWriter.rewriteLastShortToLongc                 C  ó   |   |d¡S r€  rŠ  rQ  r2   r2   r6   ÚrewriteLastShort™  r
  z$AppendingTiffWriter.rewriteLastShortc                 C  rŒ  rƒ  rŠ  rQ  r2   r2   r6   ÚrewriteLastLongœ  r
  z#AppendingTiffWriter.rewriteLastLongc                 C  s0   | j  t | j|  |¡ |¡¡}|  ||¡ d S rV   )r   r   rè   r?  rz  r~  r‡  )rx   r„   r}  r…  r2   r2   r6   rq  Ÿ  s   ÿzAppendingTiffWriter._writec                 C  ó   |   |d¡ d S r€  ©rq  rQ  r2   r2   r6   Ú
writeShort¥  r™   zAppendingTiffWriter.writeShortc                 C  r  rƒ  r  rQ  r2   r2   r6   Ú	writeLong¨  r™   zAppendingTiffWriter.writeLongc                 C  s    |   ¡  | jr| j ¡  d S d S rV   )rt  rb  r   rö  r‹   r2   r2   r6   rö  «  s   ÿzAppendingTiffWriter.closec              
   C  s*  |   | jrdnd¡}t|ƒD ]„}t | j| j | jrdnd¡¡\}}}| j| }|| }| jr1dnd}||k}	|	sG|   |¡| j	 }
|  
|
|¡ || jv rˆ| j ¡ }t dt |¡j|t |d¡|||¡ |	ru|  ||¡ | j || ¡ q| j |
¡ |  ||¡ | j |¡ q|	r’| j |tj¡ qd S )Nr.   r&   r;   r(   z;fixIFD: %s (%d) - type: %s (%d) - type size: %d - count: %dr}  )rp  rû   r„  rè   r=  r{  r   rv  Ú
fieldSizesrh  r‰  ÚTagsrƒ  r‡  rˆ  r   r  rê   r   r…  Ú_fixOffsetsr‰  rò  rô  )rx   r|  rn   r  Z
field_typer‹  r}  Z
total_sizerŸ  Úis_localr  Zcur_posr2   r2   r6   rr  °  sB   
ÿ




ù
€ÜzAppendingTiffWriter.fixIFDr‹  c                 C  sÊ   t |ƒD ]^}|  |¡}|| j7 }d}| jr |dv r |dkr d}n
|dkr*|dkr*d}|r\|dkr6d	}t|ƒ‚|  |||¡ | d d }| j |tj	¡ |  
|¡ | j d| tj	¡ q|  ||¡ qd S )
Nr   )r&   r(   l        r.   r&   r    r(   r   znot implemented)r„  rp  rh  rû   rk  r‰  r   r‰  rò  rô  r‘  )rx   r‹  r}  rn   r  rˆ  r   Úrewindr2   r2   r6   r•  Ù  s&   


çzAppendingTiffWriter._fixOffsetsÚisShortÚisLongc                 C  s$   |rd}n|r
d}nd}|   ||¡S )Nr&   r(   r   )r•  )rx   r‹  r˜  r™  r}  r2   r2   r6   Ú
fixOffsetsõ  s   zAppendingTiffWriter.fixOffsetsN)F)ra  r¼  rä  rU   rT   r…   r¢  )rT   r`  )ry   r•   rT   r…   r¸   )r  r`   rx  r`   rT   r`   )rz  rw   rT   r…   )r×   r   rT   r`   )r}  r`   rT   rw   )r}  r`   rT   r`   )r…  rð   r†  r`   rT   r…   rG   )r„   r`   r}  r`   rˆ  r`   rT   r…   )r„   r`   rT   r…   )r„   r`   r}  r`   rT   r…   )r‹  r`   r}  r`   rT   r…   )FF)r‹  r`   r˜  rU   r™  rU   rT   r…   )$rº   r»   r¼   r“  r”  r‰   re  rt  ru  rv  rw  rƒ  rO  rõ  r‰  rn  rl  rm  r   r~  rp  r‚  r„  Ústaticmethodr‡  r‰  r‹  r  rŽ  rq  r‘  r’  rö  rr  r•  rš  r2   r2   r2   r6   r`  Õ  sD    	














ÿ








)ÿr`  c           
   	   C  sú   t | j dg ¡ƒ}t| dƒs|st| ||ƒS |  ¡ }z\t|ƒ@}| g| D ]2}| | ¡}t|dƒs4d|_t	|ddƒ}t
|ƒD ]}	| |	¡ | ¡  t|||ƒ | ¡  q>||_q%W d   ƒ n1 sbw   Y  W |  |¡ d S W |  |¡ d S |  |¡ w )NÚappend_imagesrÈ  r:  r2   r   )r©  r9  r…  rÀ   rW  rƒ  r`  Z_attach_default_encoderinfor:  r|   r„  r‰  r  ru  )
rË  rs  r½  rœ  Zcur_idxÚtfZimsr9  ZnfrrÂ   r2   r2   r6   Ú	_save_all	  s,   




õÿòrž  z.tifz.tiffz
image/tiff)rR   rS   rT   rU   )r]   r^   r_   r`   rT   ra   )r]   rd   r_   r`   ri   r`   rT   ra   )rv   rw   rT   r	   )rÂ   r`   rÃ   r`   rT   rÄ   )rÂ   r`   rT   rÏ   )rÔ   rÕ   rT   r…   )rË  r0  rs  rt  r½  r1  rT   r…   )‹Ú
__future__r   rO  rT  ÚloggingrØ  rò  rè   r2  Úcollections.abcr   r   Ú	fractionsr   Únumbersr   r   Útypingr   r	   r
   r   r   Ú r   r   r   r   r   r   Ú_binaryr   r×  r   rÚ  r   Z
_deprecater   Z_typingr   Z_utilr   r   r   rˆ   r   r   Ú	getLoggerrº   r‡  r  r;  rH  rú   rø   rQ  r  r  r  r  r  r	  r?  r™  r  r  rI  r  r  r  r  rR  r@  rA  rB  Z	PREDICTORr"  r  r  r  rM  rS  r  r  Z
JPEGTABLESr
  rK  rC  r=  r>  r!  r<  rÓ  rN  ZIMAGEJ_META_DATA_BYTE_COUNTSZIMAGEJ_META_DATAr  r  rJ  r  rs   r  rY   r|   rã  r[   rh   ru   rË   rÑ   r   rd   rS   rU   rÆ   rÎ   rÓ   rë   r`   Z
_IFDv2BaserÁ   rÂ   rê   rÊ   rX  r­  ZImageFileDirectoryr»  r8  rW  ÚBytesIOr`  rž  Zregister_openr,  Zregister_saveZregister_save_allZregister_extensionsZregister_mimer2   r2   r2   r6   Ú<module>   sX  ( 
þýüûúùø	÷
öõôóòñðïîýüûúùø	÷
öõôóòñðïîíìëêéèçæåäãâá à!ß"Þ#Ý$Ü%Û&Ú'Ù(Ø)×*Ö+Õ,Ô-Ó.Ò/Ñ0Ð1Ï2Î3Í4Ì5Ë6Ê7É8È9Ç:Æ;Å<Ä=Ã>Â?Á@ÀA¿B¾C½D¼E»FºG¹H¸I·J¶KµL´M³N²O±P°Q¯R®S­T¬U«VªW©X¨Y§Z¦[¥\¤]£^¢_¡` aŸbžcdœe›fšg™h˜i—j–k•l”m“n’o‘pqrŽstŒu‹xˆy‡z†{…~	
	     \    ýüûúùø	÷
öõôóòñðïî  8  .