o
    ë6Wj»O ã                   @  sò  U d dl mZ d dlZd dlZd dlZd dlZd dlZd dlZd dlZd dl	m
Z
mZ d dlmZ d dlmZmZ d dlmZmZmZ ddlmZmZmZmZmZmZ dd	lmZ dd
lmZ  ddlm!Z! ddl"m#Z#m$Z$ ddlm%Z% dZ&e&r�d dl	m'Z' d dlm(Z( ddl)m*Z*m+Z+m,Z, e -e.¡Z/dZ0dZ1dZ2dZ3dZ4dZ5dZ6dZ7dZ8dZ9dZ:dZ;dZ<dZ=dZ>dZ?d Z@d!ZAd"ZBd#ZCd$ZDd%ZEd&ZFd'ZGd(ZHd)ZId*ZJd+ZKd,ZLd-ZMd.ZNd/ZOd0ZPd1ZQd2ZRd3ZSd4ZTd5ZUd6ZVd7ZWd8ZXd9ZYd:ZZd;Z[d<Z\d=Z]i dd>“d?d@“dAdB“dCdD“dEdF“dGdH“dIdJ“dKdL“dMdN“dOdP“dQdR“dSdT“dUdV“dWdX“dYdZ“d[d\“d]d^“Z^d_d`„ e^ _¡ D ƒZ`i e3d daddadbfdc“e4d daddadbfdc“e3d dad?dadbfdd“e4d dad?dadbfdd“e3ddaddadbfde“e4ddaddadbfde“e3ddad?dadbfdf“e4ddad?dadbfdf“e3d daddgdbfdh“e4d daddgdbfdh“e3d dad?dgdbfdi“e4d dad?dgdbfdi“e3ddaddgdbfdj“e4ddaddgdbfdj“e3ddad?dgdbfdk“e4ddad?dgdbfdk“e3d daddldbfdm“i e4d daddldbfdm“e3d dad?dldbfdn“e4d dad?dldbfdn“e3ddaddldbfdo“e4ddaddldbfdo“e3ddad?dldbfdp“e4ddad?dldbfdp“e3d daddqdbfdr“e4d daddqdbfdr“e3d dad?dqdbfds“e4d dad?dqdbfds“e3ddaddqdbfdt“e4ddaddqdbfdt“e3ddgddqdbfdt“e4ddgddqdbfdt“e3ddad?dqdbfdu“e4ddad?dqdbfdu“¥i e3ddaddvdbfdw“e3d daddxdbfdy“e3ddaddxdbfdy“e4ddaddxdbfdz“e3ddad?dxdbfd{“e3ddgddxdbfd|“e4ddgddxdbfd}“e3d d~dddbfd€“e4d d~dddbfd�“e3ddadddbfd‚“e3ddgdddbfdƒ“e4ddgdddbfd„“e3dd~dddbfd€“e4dd~dddbfd�“e3ddadd…dgfd†“e4ddadd…dgfd†“e3d?dadd‡dbfdˆ“¥i e4d?dadd‡dbfdˆ“e3d?dad?d‡dbfd‰“e4d?dad?d‡dbfd‰“e3d?daddŠdbfd‹“e4d?daddŠdbfd‹“e3d?daddŠdŒfd�“e4d?daddŠdŒfd�“e3d?daddŽd�fd�“e4d?daddŽd�fd�“e3d?dadd‘d’fd““e4d?dadd‘d’fd““e3d?daddŠdafd”“e4d?daddŠdafd”“e3d?daddŽd•fd–“e4d?daddŽd•fd–“e3d?dadd‘d—fd˜“e4d?dadd‘d—fd˜“¥i e3d?daddŠdgfd‹“e4d?daddŠdgfd‹“e3d?daddŽd™fdš“e4d?daddŽd™fdš“e3d?dadd‘d›fdœ“e4d?dadd‘d›fdœ“e3d?daddŠd�fd‹“e4d?daddŠd�fd‹“e3d?daddždbfdŸ“e4d?daddždbfd “e3d?dadd¡dbfd¢“e4d?dadd¡dbfd£“e3d?dadd¡dŒfd¤“e4d?dadd¡dŒfd¥“e3d?dadd¡dafd¦“e4d?dadd¡dafd§“e3d?dadd¡dgfd¢“¥i e4d?dadd¡dgfd£“e3dAdaddadbfd¨“e4dAdaddadbfd¨“e3dAdad?dadbfd©“e4dAdad?dadbfd©“e3dAdaddgdbfdª“e4dAdaddgdbfdª“e3dAdad?dgdbfd«“e4dAdad?dgdbfd«“e3dAdaddldbfd¬“e4dAdaddldbfd¬“e3dAdad?dldbfd­“e4dAdad?dldbfd­“e3dAdaddqdbfd®“e4dAdaddqdbfd®“e3dAdadd…dŒfd¯“e4dAdadd…dŒfd¯“¥i e3dAdadd…dgfd°“e4dAdadd…dgfd°“e3dAdad?dqdbfd±“e4dAdad?dqdbfd±“e3dEdaddŠdbfd²“e4dEdaddŠdbfd²“e3dEdaddŽdŒfd³“e4dEdaddŽdŒfd³“e3dEdadd‘d�fd´“e4dEdadd‘d�fd´“e3dEdadd¡dbfdµ“e4dEdadd¡dbfd¶“e3dGdaddqdbfdt“e4dGdaddqdbfdt“e3dGdadd‡dbfd�“e4dGdadd‡dbfd�“e3dKdadd‡dbfd·“¥e4dKdadd‡dbfd·i¥Zaebd¸d¹„ eaD ƒƒZcg dº¢Zd�dd¿dÀ„Ze�ddÆdÇ„Zf�ddÊdË„Zgi ZhdÌeidÍ< i ZjdÎeidÏ< �ddÓdÔ„ZkG dÕdÈ„ dÈeƒZle
dÖemengef Zo�ddÚdÛ„Zp�ddÝdÞ„Zq�ddâdã„Zre&�rÑeesef ZtneZtG dädÖ„ dÖetƒZueheu_hejeu_je% _¡ D ]#\ZvZwew xdådæ¡Zweyeudçew› �ehev d ƒ eyeudèew› �ejev ƒ �qå[h[j[v[wG dédê„ dêeuƒZzezZ{G dëdì„ dìejƒZ|i dídíe3dddadf“dîdîe3dddqdf“dïdïe3ddd…d?f“dðdðe3dAddqdf“dñdñe3dAdd…d?f“dòdóe3dd?ddf“dôdôe3dddxdf“dõdõe3dddxdf“död÷e3ddAddf“dødøe3d?dd‡df“dùdùe3d?ddŠd f“dúdúe3d?ddŠd?f“dûdûe3dEddŠdf“düdüe3dGdd‡df“dýdýe3dKdd‡df“dþdþe4dddxdf“Z}�d�d�d„Z~G �d�d„ �dejƒZ€�d�d	�d
„Z�e ‚e|jƒe|ee¡ e „e|jƒe~¡ e …e|jƒe�¡ e †e|jƒ�d�dg¡ e ‡e|jƒ�d¡ dS (  é    )ÚannotationsN)ÚCallableÚMutableMapping)ÚFraction)ÚNumberÚRational)ÚIOÚAnyÚcasté   )ÚExifTagsÚImageÚ	ImageFileÚImageOpsÚImagePaletteÚTiffTags)Úi16be)Úi32be©Úo8)ÚDeferredErrorÚis_path©ÚTYPESF)ÚIterator)ÚNoReturn)ÚBufferÚIntegralLikeÚStrOrBytesPathé   s   IIs   MMéÿ   é   i  i  i  i  i
  i  é  i  i  i  i  i  i  i(  i-  i1  i2  i;  i=  i@  iB  iC  éD  iE  iJ  iR  iS  i[  i  i  i˜‚  i»ƒ  iI†  is‡  ii‡  i¼  i  i–Æ  i—Æ  Úrawé   Ú
tiff_ccitté   Úgroup3é   Úgroup4é   Útiff_lzwé   Ú	tiff_jpegé   Újpegé   Útiff_adobe_deflatei€  Útiff_raw_16i€  Úpackbitsi)€  Útiff_thunderscani²€  Útiff_deflateit‡  Útiff_sgilogiu‡  Útiff_sgilog24imˆ  ÚlzmaiPÃ  ÚzstdiQÃ  Úwebpc                 C  s   i | ]\}}||“qS © r<   )Ú.0ÚkÚvr<   r<   úb/home/esfera/Documents/content_generation/venv/lib/python3.10/site-packages/PIL/TiffImagePlugin.pyÚ
<dictcomp>•   s    rA   ©r   r<   )Ú1z1;I)rC   z1;IR)rC   rC   )rC   z1;R)r%   )ÚLzL;2I)rD   zL;2IR)rD   zL;2)rD   zL;2R)r)   )rD   zL;4I)rD   zL;4IR)rD   zL;4)rD   zL;4R)r1   )rD   zL;I)rD   zL;IR)rD   rD   )rD   zL;R)é   )úI;16zI;12)é   )rF   rF   )úI;16BrH   )rF   zI;16R)ÚIzI;16S)rI   zI;16BS)r'   )é    )ÚFúF;32F)rK   zF;32BF)rI   zI;32N)rI   úI;32S)rI   zI;32BS)r1   r1   )ÚLArN   )r1   r1   r1   )ÚRGBrO   )rO   zRGB;R)r1   r1   r1   r1   )ÚRGBArP   ©r   )rO   ÚRGBX)r1   r1   r1   r1   r1   ©r   r   )rO   ÚRGBXX)r1   r1   r1   r1   r1   r1   )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ç  )rG   rG   rG   )rO   zRGB;16L)rO   zRGB;16B)rG   rG   rG   rG   )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                 c  s   � | ]	}t |d  ƒV  qdS )r)   N)Úlen)r=   Úkey_tpr<   r<   r@   Ú	<genexpr>  ó   € rd   )s   MM *s   II* s   MM* s   II *s   MM +s   II+ ÚprefixÚbytesÚreturnÚboolc                 C  s   |   ttƒ¡S ©N)Ú
startswithÚtupleÚPREFIXES©rf   r<   r<   r@   Ú_accept"  ó   ro   Ú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)rq   rs   ÚinvÚn_dr<   r<   r@   Ú_limit_rational&  s   r|   rx   Ú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 rj   ©Úfloat©r=   Úir<   r<   r@   rd   4  ó   € z)_limit_signed_rational.<locals>.<genexpr>c                 s  r~   rj   r   r�   r<   r<   r@   rd   7  rƒ   r   r   )r   Ú	numeratorÚdenominatorÚminr|   rw   rl   Úmax)rq   rs   r}   Úfracr{   Ú	n_d_floatr<   r<   r@   Ú_limit_signed_rational.  s   rŠ   ú"dict[int, tuple[int, _LoaderFunc]]Ú_load_dispatchúdict[int, Callable[..., Any]]Ú_write_dispatchÚopÚstrr	   c                   s   d	‡ fdd„}|S )
NÚselfrx   Úargsútuple[float, ...]rh   úbool | float | Fractionc                   s   t | jˆ ƒ|Ž S rj   )ÚgetattrÚ_val©r‘   r’   ©r�   r<   r@   ÚdelegateF  s   z_delegate.<locals>.delegate)r‘   rx   r’   r“   rh   r”   r<   )r�   r™   r<   r˜   r@   Ú	_delegateE  s   rš   c                   @  sl  e Zd ZdZ	 dZ	dBdCd
d„ZedDdd„ƒZedEdd„ƒZdFdd„Z	dGdd„Z
dEdd„ZdHdd„ZdId d!„ZdJd#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d?ƒZ*e+e,d@ƒr´ed@ƒZ-dAS dAS )Krx   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   Úvaluerr   r…   rt   rh   Ú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   )Ú
isinstancerx   r„   r›   r…   rœ   r–   r   ÚTYPE_CHECKINGr
   r   r€   rt   )r‘   r�   r…   r<   r<   r@   Ú__init__\  s(   


zIFDRational.__init__r   c                 C  ó   | j S rj   )r›   ©r‘   r<   r<   r@   r„   ~  ó   zIFDRational.numeratorc                 C  r£   rj   )rœ   r¤   r<   r<   r@   r…   ‚  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   )r…   r„   r    r–   r   Úlimit_denominator)r‘   r¦   Úfr<   r<   r@   ry   †  s
   
zIFDRational.limit_rationalr�   c                 C  s   t t| jƒƒS rj   )r�   r€   r–   r¤   r<   r<   r@   Ú__repr__”  rp   zIFDRational.__repr__c                 C  s
   | j  ¡ S rj   )r–   Ú__hash__r¤   r<   r<   r@   r«   —  ó   
zIFDRational.__hash__ÚotherÚobjectri   c                 C  s0   | j }t|tƒr|j }t|tƒrt|ƒ}||kS rj   )r–   r    rx   r€   )r‘   r­   rq   r<   r<   r@   Ú__eq__š  s   

zIFDRational.__eq__ú%list[float | Fraction | IntegralLike]c                 C  s   | j | j| jgS rj   )r–   r›   rœ   r¤   r<   r<   r@   Ú__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   )rx   r¢   r    r€   r   r–   r¡   r
   r   r›   rt   rœ   )r‘   r³   r–   r›   rœ   r<   r<   r@   Ú__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__Ú	__float__Ú__int__NrB   )r�   rr   r…   rt   rh   rž   )rh   r   ©rh   rt   )r¦   rt   rh   r§   ©rh   r�   )r­   r®   rh   ri   )rh   r°   )r³   r°   rh   rž   ).Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r¢   Úpropertyr„   r…   ry   rª   r«   r¯   r±   rµ   rš   r¶   r·   r¸   r¹   rº   r»   r¼   r½   r¾   r¿   rÀ   rÁ   rÂ   rÃ   rÄ   rÅ   rÆ   rÇ   rÈ   rÉ   rÊ   rË   rÌ   rÍ   rÎ   rÏ   rÐ   Úhasattrr   rÑ   r<   r<   r<   r@   rx   N  s^    ÿ"






ÿÚImageFileDirectory_v2ÚidxÚsizeú$Callable[[_LoaderFunc], _LoaderFunc]c                   s   d‡ ‡fdd„}|S )NÚfuncÚ_LoaderFuncrh   c                   sB   ddl m} | j d¡r| jdd …  dd¡|ˆ < ˆ| ftˆ < | S )Nr   r   Úload_r+   Ú_ú )r   r   rÔ   rk   ÚreplacerŒ   )rß   r   ©rÜ   rÝ   r<   r@   Ú	decoratorÝ  s
   z#_register_loader.<locals>.decorator)rß   rà   rh   rà   r<   )rÜ   rÝ   ræ   r<   rå   r@   Ú_register_loaderÜ  s   rç   ú2Callable[[Callable[..., Any]], Callable[..., Any]]c                   s   d‡ fdd„}|S )Nrß   úCallable[..., Any]rh   c                   s   | t ˆ < | S rj   )rŽ   )rß   ©rÜ   r<   r@   ræ   é  s   z#_register_writer.<locals>.decorator)rß   ré   rh   ré   r<   )rÜ   ræ   r<   rê   r@   Ú_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   ú=Tr‘   rÛ   Údatarg   Ú
legacy_apiri   rh   útuple[Any, ...]c                   s   |   t|ƒˆ › ˆ › �|¡S rj   )Ú_unpackrb   ©r‘   rï   rð   ©ÚfmtrÝ   r<   r@   Úbasic_handler÷  s   z&_register_basic.<locals>.basic_handlerc                   s   d  ‡‡ fdd„|D ƒ¡S )Nó    c                 3  s   � | ]	}ˆ  ˆ |¡V  qd S rj   )Ú_pack©r=   r�   )rõ   r‘   r<   r@   rd   þ  re   z4_register_basic.<locals>.<lambda>.<locals>.<genexpr>©Újoin©r‘   Úvalues)rõ   r¤   r@   Ú<lambda>ý  s   z!_register_basic.<locals>.<lambda>©T)r‘   rÛ   rï   rg   rð   ri   rh   rñ   )r   r   ÚstructÚcalcsizerŒ   rŽ   )rì   r   rÜ   Únamerö   r<   rô   r@   Ú_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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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ƒd�dŽdQdR„ƒZ'e(dOƒd�dTdU„ƒZ)e&dVdOƒd�d�dWdX„ƒZ*e(dVƒd‘dZd[„ƒZ+e&d\d]ƒ	Pd�d’d_d`„ƒZ,e(d\ƒd“dbdc„ƒZ-e&dddOƒd�dŽdedf„ƒZ.e(ddƒd”dgdh„ƒZ/e&did]ƒ	Pd�d’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``.

    r‹   rŒ   r�   rŽ   ó   II*     NÚifhrg   rf   úbytes | NoneÚgroupú
int | Nonerh   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é+   ÚQr1   r   rD   r)   F)ro   ÚreprÚSyntaxErrorÚ_prefixÚMMÚ_endianÚIIÚ_bigtiffr  ÚtagtypeÚresetrò   ÚnextÚ_legacy_api)r‘   r  rf   r  Úmsgr<   r<   r@   r¢   H  s(   

ÿý
zImageFileDirectory_v2.__init__c                 C  r£   rj   )r  r¤   r<   r<   r@   rþ   o  ó    zImageFileDirectory_v2.<lambda>c                 C  r£   rj   )Ú_offsetr¤   r<   r<   r@   rþ   p  r  ri   c                 C  r£   rj   )r  r¤   r<   r<   r@   rð   r  r¥   z ImageFileDirectory_v2.legacy_apir�   r   c                 C  s   d}t |ƒ‚)Nz"Not allowing setting of legacy api)Ú	Exception)r‘   r�   r  r<   r<   r@   rð   v  s   c                 C  s(   i | _ i | _i | _i | _d | _d | _d S rj   )Ú_tags_v1Ú_tags_v2Ú_tagdatar  Ú_nextr  r¤   r<   r<   r@   r  {  s   
zImageFileDirectory_v2.resetr�   c                 C  s   t t| ƒƒS rj   )r�   Údictr¤   r<   r<   r@   Ú__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 r<   )r   Úlookupr  r  )r=   Úcoder�   r¤   r<   r@   rA   Œ  s    ÿÿz/ImageFileDirectory_v2.named.<locals>.<dictcomp>)Úitemsr¤   r<   r¤   r@   Únamed†  s   
þzImageFileDirectory_v2.namedrt   c                 C  ó   t t| jƒt| jƒB ƒS rj   )rb   Úsetr  r  r¤   r<   r<   r@   Ú__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 rj   )r  r  r  rŒ   rð   r    rl   rg   )r‘   r,  rï   ÚtyprÝ   Úhandlerrq   r<   r<   r@   Ú__getitem__”  s   



z!ImageFileDirectory_v2.__getitem__r®   c                 C  ó   || j v p	|| jv S rj   )r  r  ©r‘   r,  r<   r<   r@   Ú__contains__Ÿ  ó   z"ImageFileDirectory_v2.__contains__c                 C  s   |   ||| j¡ d S rj   )Ú_setitemrð   )r‘   r,  r�   r<   r<   r@   Ú__setitem__¢  r3  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|<  nq6t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|r�tj| j|< nH|r¦tj| j|< n?|	r¯tj| j|< n6t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 rj   )r    rx   ©r=   r?   r<   r<   r@   rd   °  ó   € z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>r   c                 s  r6  rj   )r    rt   r7  r<   r<   r@   rd   ¸  r8  Tr   Fi €ÿÿi €  c                 s  r6  rj   )r    r€   r7  r<   r<   r@   rd   Ì  r8  c                 s  r6  rj   )r    r�   r7  r<   r<   r@   rd   Î  r8  c                 s  r6  rj   )r    rg   r7  r<   r<   r@   rd   Ð  r8  c                 S  s&   g | ]}t |tƒr| d d¡n|‘qS )Úasciirä   )r    r�   Úencoder7  r<   r<   r@   Ú
<listcomp>Ô  s    ÿÿz2ImageFileDirectory_v2._setitem.<locals>.<listcomp>c                 S  s"   g | ]}t |tƒrt|ƒn|‘qS r<   )r    rt   r€   r7  r<   r<   r@   r;  Ù  s   " c                 3  s(   � | ]}t |tƒrˆ  |¡n|V  qd S rj   )r    r�   Úcvt_enumrù   ©Úinfor<   r@   rd   Ý  s
   € ÿ
ÿr   zMetadata Warning, tag z had too many entries: z, expected 1)r   rg   r�   r   r$  r  r    r  ÚtypeÚ	UNDEFINEDÚallrx   ÚSIGNED_RATIONALÚRATIONALrt   ÚSHORTÚSIGNED_SHORTÚLONGÚSIGNED_LONGÚDOUBLEÚASCIIÚBYTEr   rl   r  r  Úlengthrb   Ú
ValueErrorÚwarningsÚwarn)r‘   r,  r�   rð   Ú	basetypesrý   r?   ÚshortÚsigned_shortÚlongÚis_ifdÚdestr<   r=  r@   r4  ¥  s”   

þ€€þþ þÿÿúzImageFileDirectory_v2._setitemc                 C  s.   | j  |d ¡ | j |d ¡ | j |d ¡ d S rj   )r  Úpopr  r  r1  r<   r<   r@   Ú__delitem__  s   z!ImageFileDirectory_v2.__delitem__úIterator[int]c                 C  r(  rj   )Úiterr)  r  r  r¤   r<   r<   r@   Ú__iter__  r+  zImageFileDirectory_v2.__iter__rõ   rï   rñ   c                 C  s   t  | j| |¡S rj   )r   Úunpackr  )r‘   rõ   rï   r<   r<   r@   rò     ó   zImageFileDirectory_v2._unpackrý   c                 G  s   t j| j| g|¢R Ž S rj   )r   Úpackr  )r‘   rõ   rý   r<   r<   r@   rø     r+  zImageFileDirectory_v2._packÚHrP  rD   rR  Úbzsigned byteÚhzsigned shortÚlzsigned longr©   r€   ÚdÚdoubler  Úlong8r   Tc                 C  ó   |S rj   r<   ró   r<   r<   r@   Ú	load_byte"  ó   zImageFileDirectory_v2.load_byteúbytes | int | IFDRationalc                 C  s*   t |tƒr	t|ƒ}t |tƒrt|fƒ}|S rj   )r    rx   rt   rg   ©r‘   rï   r<   r<   r@   Ú
write_byte&  s
   


z ImageFileDirectory_v2.write_byter%   c                 C  s"   |  d¡r|d d… }| dd¡S )Nó    rv   zlatin-1rä   )ÚendswithÚdecoderó   r<   r<   r@   Úload_string.  s   
z!ImageFileDirectory_v2.load_stringústr | bytes | intc                 C  s0   t |tƒr	t|ƒ}t |tƒs| dd¡}|d S )Nr9  rä   rj  )r    rt   r�   rg   r:  ©r‘   r�   r<   r<   r@   Úwrite_string4  s
   

z"ImageFileDirectory_v2.write_stringr+   r1   ú)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)   rD   Úart   r^  rh   útuple[int, int] | IFDRationalc                   ó   ˆ r| |fS t | |ƒS rj   ©rx   ©rs  r^  ©rð   r<   r@   ÚcombineC  ó   z4ImageFileDirectory_v2.load_rational.<locals>.combinec                 3  ó   � | ]
\}}ˆ ||ƒV  qd S rj   r<   ©r=   ÚnumÚdenom©ry  r<   r@   rd   F  ó   € z6ImageFileDirectory_v2.load_rational.<locals>.<genexpr>r%   r   ©rs  rt   r^  rt   rh   rt  ©rò   rb   rl   Úzip©r‘   rï   rð   Úvalsr<   ©ry  rð   r@   Úload_rational=  ó   0z#ImageFileDirectory_v2.load_rationalrx   c                   ó   d  ‡ fdd„|D ƒ¡S )Nr÷   c                 3  s(   � | ]}ˆ j d gt|dƒ¢R Ž V  qdS )Ú2Ll   ÿÿ N)rø   r|   ©r=   rˆ   r¤   r<   r@   rd   J  s   € 
ÿz7ImageFileDirectory_v2.write_rational.<locals>.<genexpr>rú   rü   r<   r¤   r@   Úwrite_rationalH  s   ÿz$ImageFileDirectory_v2.write_rationalr/   c                 C  rd  rj   r<   ró   r<   r<   r@   Úload_undefinedN  rf  z$ImageFileDirectory_v2.load_undefinedc                 C  s0   t |tƒr	t|ƒ}t |tƒrt|ƒ dd¡}|S )Nr9  rä   )r    rx   rt   r�   r:  ro  r<   r<   r@   Úwrite_undefinedR  s
   

z%ImageFileDirectory_v2.write_undefinedé
   c                   rr  )Nr)   r`  rs  rt   r^  rh   rt  c                   ru  rj   rv  rw  rx  r<   r@   ry  `  rz  z;ImageFileDirectory_v2.load_signed_rational.<locals>.combinec                 3  r{  rj   r<   r|  r  r<   r@   rd   c  r€  z=ImageFileDirectory_v2.load_signed_rational.<locals>.<genexpr>r%   r   r�  r‚  r„  r<   r†  r@   Úload_signed_rationalZ  rˆ  z*ImageFileDirectory_v2.load_signed_rationalc                   r‰  )Nr÷   c                 3  s*   � | ]}ˆ j d gt|ddƒ¢R Ž V  qdS )Ú2liÿÿÿi   €N)rø   rŠ   r‹  r¤   r<   r@   rd   g  s
   € ÿ
ÿz>ImageFileDirectory_v2.write_signed_rational.<locals>.<genexpr>rú   rü   r<   r¤   r@   Ú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. )Úreadrb   ÚOSError)r‘   r“  rÝ   Úretr  r<   r<   r@   Ú_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  r1   r]  r%   r   ÚHHQ8sé   ÚHHL4srE   Úunknownztag: ú (ú
) - type: ú)z%s - unsupported type %sr)   rD   z Tag Location: z - Data Location: z/Possibly corrupt EXIF data.  Expecting to read r•  z. Skipping tag z
 - value: rJ   ú<table: ú bytes>)r  Útellr  r  rò   r™  Úranger   r$  r  r  r   ÚgetrŒ   ÚKeyErrorÚloggerÚdebugÚseekr   Ú
_safe_readrb   rM  rN  r  r  r  r  r—  r�   )r‘   r“  Ú	tag_countr‚   r,  r-  Úcountrï   ÚtagnameÚtypnamer  Ú	unit_sizer.  rÝ   ÚhereÚoffsetr<   r<   r@   Ú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  é*   ÚHHr1   r   r  rG   rD   )r  rø   r  ©r‘   r  r<   r<   r@   Ú_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]  rD   r1   r)   r›  rE   zTag %s, Type: %s, Value: %s)r  Úifdr�  zsave: rž  rŸ  z) - value: rG   r¡  r¢  r   rj  r÷   r%   c                   s   g | ]}|ˆ  ‘qS r<   r<   )r=   rq   ©r±  r<   r@   r;  ù  ó    z1ImageFileDirectory_v2.tobytes.<locals>.<listcomp>r   z%s %s %s %s %srš  rœ  )"rø   r  rb   r  Úsortedr&  ÚSTRIPOFFSETSr  r§  r¨  r  r   rF  r    r   rÛ   r¶  Útobytesrl   rŽ   r$  r  r  r   r¥  r�   rJ  rI  r@  ÚappendÚljustrŒ   rð   rò   )r‘   r±  ÚresultÚentriesrõ   Úfmt_sizeÚstripoffsetsr,  r�   r-  rS  r·  rý   Úifd_tagÚ	ifd_valuerï   r­  r®  r  r¬  rÝ   r.  r<   r¸  r@   r¼  Á  sp   "ÿ


(



ÿ€zImageFileDirectory_v2.tobytesc                 C  sB   |  ¡ dkr| |  ¡ ¡ |  ¡ }|  |¡}| |¡ |t|ƒ S r´   )r£  Úwriter¶  r¼  rb   )r‘   r“  r±  r¿  r<   r<   r@   Úsave  s   

zImageFileDirectory_v2.save)r  NN)r  rg   rf   r  r  r  rh   rž   )rh   ri   )r�   ri   rh   r   ©rh   rž   rÓ   )rh   r#  rÒ   ©r,  rt   rh   r	   ©r,  r®   rh   ri   ©r,  rt   r�   r	   rh   rž   )r,  rt   r�   r	   rð   ri   rh   rž   )r,  rt   rh   rž   ©rh   rW  )rõ   r�   rï   rg   rh   rñ   )rõ   r�   rý   r	   rh   rg   rÿ   )rï   rg   rð   ri   rh   rg   )rï   rg  rh   rg   )rï   rg   rð   ri   rh   r�   )r�   rn  rh   rg   )rï   rg   rð   ri   rh   rq  )rý   rx   rh   rg   )r�   rg  rh   rg   )r“  r”  rÝ   rt   rh   rg   )r“  r”  rh   rž   )rh   rg   rQ   )r±  rt   rh   rg   )r“  r”  rh   rt   )7rÔ   rÕ   rÖ   r×   rŒ   Ú__annotations__rŽ   r¢   rÙ   rf   r±  rð   Úsetterr  r!  r'  r*  r/  r2  r5  r4  rV  rY  rò   rø   ÚlistÚmapr  r   rD  rF  ÚSIGNED_BYTErE  rG  ÚFLOATrH  ÚIFDÚLONG8rç   re  rë   ri  rm  rp  r‡  rŒ  r�  rŽ  r�  r’  r™  r²  r¶  r¼  rÆ  r<   r<   r<   r@   rÛ     sˆ   
 <ü'








^











÷þÿÿ
ÿ




CPrã   râ   rá   Ú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
    r’   r	   Úkwargsrh   rž   c                   s   t ƒ j|i |¤Ž d| _d S )NT)Úsuperr¢   r  )r‘   r’   rÖ  ©Ú	__class__r<   r@   r¢   8  s   
zImageFileDirectory_v1.__init__c                 C  r£   rj   )r  r¤   r<   r<   r@   rþ   <  r  zImageFileDirectory_v1.<lambda>c                 C  r£   rj   )r  r¤   r<   r<   r@   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`

        rn   )rf   r  r  r  )ÚclsrÚ  r·  r<   r<   r@   Ú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`

        rn   )rÛ   rf   r   r  r  r  )r‘   r·  r<   r<   r@   Úto_v2U  s
   zImageFileDirectory_v1.to_v2r,  r®   ri   c                 C  r0  rj   )r  r  r1  r<   r<   r@   r2  f  r3  z"ImageFileDirectory_v1.__contains__rt   c                 C  r(  rj   )rb   r)  r  r  r¤   r<   r<   r@   r*  i  r+  zImageFileDirectory_v1.__len__rW  c                 C  r(  rj   )rX  r)  r  r  r¤   r<   r<   r@   rY  l  r+  zImageFileDirectory_v1.__iter__r�   c                 C  s   dD ]	}|   |||¡ qd S ©N)FT)r4  )r‘   r,  r�   rð   r<   r<   r@   r5  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Œ   r4  r    rl   rg   )r‘   r,  rï   r-  rÝ   r.  Úlegacyrq   r<   r<   r@   r/  s  s   



z!ImageFileDirectory_v1.__getitem__)r’   r	   rÖ  r	   rh   rž   )rÚ  rÛ   rh   rÕ  )rh   rÛ   rÉ  rÒ   rË  rÊ  rÈ  )rÔ   rÕ   rÖ   r×   r¢   rÙ   ÚtagsÚtagdatarÌ  ÚclassmethodrÜ  rÝ  r2  r*  rY  r5  r/  Ú__classcell__r<   r<   rØ  r@   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 ).ÚTiffImageFileÚTIFFz
Adobe TIFFFNr“  úStrOrBytesPath | IO[bytes]Úfilenameústr | bytes | Nonerh   rž   c                   s   |  	 |  	 t ƒ  ||¡ d S rj   )r×  r¢   )r‘   r“  rç  rØ  r<   r@   r¢   �  s
   zTiffImageFile.__init__c                 C  s    | j dusJ ‚| 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 fileNr1   r%   r  rv   z*** TiffImageFile._open ***z- __first: %sz	- ifh: %sr   )r“  r–  rÛ   Útag_v2r  Ú_TiffImageFile__firstÚ_TiffImageFile__nextÚ_TiffImageFile__frameÚ_fpÚ
_frame_posÚ	_n_framesr§  r¨  r  Ú_seekrµ  r<   r<   r@   Ú_openš  s   

zTiffImageFile._openrt   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ð  rb   rî  r©  )r‘   Úcurrent_n_framesÚcurrentr<   r<   r@   Ú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)Ú_seek_checkrð  Ú_imÚimrÝ   Ú
_tile_sizeÚmodeÚreadonly)r‘   rõ  r<   r<   r@   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   Úexr“  rb   rî  rë  ÚEOFErrorr§  r¨  rì  r£  rL  r©  r½  ré  r²  r  rï  Úis_animatedÚXMPrl   r>  Ú_reload_exifrÕ  rÜ  r,  r·  Ú_setup)r‘   rõ  r  rü  r<   r<   r@   rð  Ë  sV   û



ä


zTiffImageFile._seekc                 C  r£   )zReturn the current frame number)rì  r¤   r<   r<   r@   r£  ü  r¥   zTiffImageFile.tellúdict[int, dict[str, bytes]]c                 C  sì   i }| j  tjj¡}|rt| d¡rtt|ƒdkrtt|dd… ƒ}t 	|d d d ¡d }zt
|d| d| … ƒ}W n tjyE   Y |S w |d| d| | … }d|i||< |t 	d| | d ¡d d	… }| d¡rtt|ƒdk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   8BIMrE   r)   r-   r   r%   r�  rï   N)ré  r¥  r   ÚBaseÚImageResourcesrk   rb   Úi16ÚmathÚceilÚi32r   Úerror)r‘   Úblocksrq   ÚidÚnrÝ   rï   r<   r<   r@   Úget_photoshop_blocks   s"   ú"öz"TiffImageFile.get_photoshop_blocksúImage.core.PixelAccess | Nonec                   s   | j r
| jr
|  ¡ S tƒ  ¡ S rj   )ÚtileÚuse_load_libtiffÚ_load_libtiffr×  r²  r¤   rØ  r<   r@   r²    s   
zTiffImageFile.loadc                 C  s:   | j d u rt | j¡ tj | j| j¡| _tj 	| ¡ d S rj   )
r÷  r   Ú_decompression_bomb_checkrù  ÚcoreÚnewrú  rø  r   Úload_preparer¤   r<   r<   r@   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)Úin_place)rÿ  Ú!_close_exclusive_fp_after_loadingÚgetexifr   ÚTAGS_V2_GROUPSÚget_ifdr   Úexif_transposer   r  ÚOrientationré  )r‘   ÚexifÚkeyr<   r<   r@   Úload_end#  s   
ÿzTiffImageFile.load_endc              
   C  s  t j  | ¡ |  ¡  t| jƒdksd}t|ƒ‚| jd d }| jd d }| jdus,J ‚zt| jdƒo7| j ¡ }t| jdƒrC| j 	¡  W n tyO   d}Y nw |ret
|tƒsYJ ‚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'   NÚfilenoÚflushFr%   ÚlibtiffzCouldn't set the imageÚgetvaluez5have getvalue. just sending in a string from getvaluez3have fileno, calling fileno version of the decoder.s   fpfpz+don't have fileno or getvalue. just readingzdecoder error )"r   r²  r  rb   r  r—  r“  rÚ   r!  r"  r    rl   rÎ  Ú_getdecoderrú  ÚdecoderconfigÚsetimagerø  rL  Ú_exclusive_fprÿ  r§  r¨  rl  r$  r©  ÚosÚlseekÚSEEK_CURÚSEEK_SETr–  rû  r   Úclose)r‘   r  Úextentsr’   r“  Ú	args_listÚdecoderÚeÚclose_self_fpr  ÚerrÚposr<   r<   r@   r  4  sj   
€ý
€þ






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 f}| j  td¡}	| j  td¡}
| j  t | jdkrå|dv rådnd¡}|dv rïd}n	|dkröd}nd}| jdk�r|
�rt|
ƒdk�r|	dt|
ƒ … }	|t|
ƒ8 }d}
|t|
ƒ7 }t|	ƒ}|t!k�r4t
 "d|¡ d}t#|ƒ‚||k �r@|	d|… }	n||k�rN|dk�rN|	| }	t|	ƒ|k�r[d}t#|ƒ‚| j j$||||	|
f}t
 d|¡ z	t%| \| _&}W n t�y� } 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.�rn|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�rFd*}n| /d+¡�rT|dd,… d- }|| jd.| j j0f}| j, 1t2 3d/dd||fd|¡¡ nÍt4| j v �szt5| j v �r0t4| j v �r�| 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 �rI| j t: | j(d3< | j'd4v �red5d6„ | 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/   r1   z
- size: %srB   r<   )r%   r-   r'   )r%   r-   r1   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ÚcompressionÚdpigR¸…ëQ@Ú
resolutionr$   r0   rO   rF   úI;16N)z;16Bz;16Lrv   ÚNFr#  zInvalid tile dimensionsr1   z- unsupported data organizationÚicc_profile©r[   r]   c                 S  s   g | ]}t |d  ƒ‘qS ©r!   r   )r=   r^  r<   r<   r@   r;  ‰  s    z(TiffImageFile._setup.<locals>.<listcomp>úRGB;Lr÷   )@ré  r—  ÚCOMPRESSION_INFOr¥  ÚCOMPRESSIONÚ_compressionÚPLANAR_CONFIGURATIONÚ_planar_configurationÚPHOTOMETRIC_INTERPRETATIONÚ	FILLORDERr§  r¨  ÚYCBCRSUBSAMPLINGÚ
IMAGEWIDTHÚIMAGELENGTHr¦  Ú	TypeErrorr    rt   rL  rù  r   r  r  Ú_sizerÝ   ÚSAMPLEFORMATrb   r‡   r†   ÚBITSPERSAMPLEÚEXTRASAMPLESÚSAMPLESPERPIXELÚMAX_SAMPLESPERPIXELr
  r  rf   Ú	OPEN_INFOÚ_moderú  r>  ÚX_RESOLUTIONÚY_RESOLUTIONÚRESOLUTION_UNITr  ÚREAD_LIBTIFFr  rk  r±  r½  r   Ú_Tiler»  ÚTILEOFFSETSÚROWSPERSTRIPÚ	TILEWIDTHÚ
TILELENGTHÚsumÚ
ICCPROFILEÚCOLORMAPr   r$   rû   Úpalette) r‘   r  ÚphotoÚ	fillorderÚxsizeÚysizer1  ÚorientationÚsample_formatÚ	bps_tupleÚextra_tupleÚsamples_per_pixelÚ	bps_countÚbps_actual_countr  ÚrawmodeÚxresÚyresÚresunitÚxÚyÚlayerrs  Úoffsetsr_  ÚwÚ	tilewidthr±  ÚstrideÚtile_rawmoder’   r]  r<   r<   r@   r  •  sD  




€þ


þ 
ÿ
ú

€ý





"

 üÿ

€å
þzTiffImageFile._setuprj   )r“  ræ  rç  rè  rh   rž   rÇ  rÒ   )rõ  rt   rh   rž   )rh   r  )rh   r  )rÔ   rÕ   rÖ   ÚformatÚformat_descriptionr  r¢   rñ  rÙ   rô  r©  rð  r£  r  r²  r  r   r  r  rã  r<   r<   rØ  r@   rä  ˆ  s$    ý



1



arä  rC   rD   rN   r[   r]   rI   rM   rF   úI;16LrK   rL   rO   rR   rP   r^   ÚYCbCrra   rH   rø  úImage.Imager“  r”  rç  ústr | bytesc           6      C  s¾	  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¡dk�r t"|v �r t#|v �r|t#  t$|t" ƒ8  < |t"= t%t&fD ]}||v �r.||= �q$t| dƒ�rot't(t)t*t+t,fD ]0}|| j-v �rm|t*k�r]| j-j| tj.tj/fv�r]||= �q>| j-| ||< | j-j| |j|< �q>| d| j	 d¡¡}|�r€||t0< t1dft(dft)dft(dft)dft'dft2dft3dft4dft5dff
D ]\}}||v �r¯|| ||< �q | d¡}|�rÉd|t'< |d |t(< |d |t)< |dk�rß||t6< t$|ƒdk�rßt$|ƒ|t#< |d u�rè||t"< |dk�rñ||t&< t7|v�rû||t7< nK| jd v �rF|t7 dk�rF| jd!k�rA|  8¡ }| ¡ }|d u�r@t9|j:ƒD ]}t9|j;ƒD ]}|||f d"k�r4dnd"|||f< �q'�q |} nt< =| ¡} | jd#v �rƒ| j> ?d$d%¡}g }t$|ƒd& }t9d&ƒD ]} |d'd(„ |||  || d  … D ƒ7 }|dgd)|  7 }�q_||t@< |t |t }!}"t$|ƒ|!|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 �rq|d1 }*t
|*tƒ�r\|*dk �s\|*d2k�rbd3}
tR|
ƒ‚|d	k�rmd4}
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 })t6|d i}-t\ ]| L¡ | L¡ ¡D ]z\}}.|tj^v�r|tjv �rÑtj_|,|< n5||jv �rß|j| |,|< n't
|.tt`tatfƒ�sùt
|.tFƒ�rtbd8d9„ |.D ƒƒ�rt c|¡jd}/|/�r|/|,|< ||-v�r4||)v�r4t
|.taƒ�r"|. ed:d;¡d< |-|< �q»t
|.tfƒ�r0t`|.ƒ|-|< �q»|.|-|< �q»t&|-v �rLt$|-t& ƒdk�rL|-t& d |-t&< t d=tT|- L¡ ƒ¡ | jd>v �r^d?}t|- L¡ ƒ}0|0 g¡  |||+||0|,f}1t h| jd@|1|¡}2|2 i| j>dA| j ¡ 	 |2 etjjk¡dd … \}3}4|+�s˜| l|4¡ |3�rœn�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 TIFFrn   Úbig_tiffTr5  r$   r.   r0   r6   r2   r   r   Útiffinfor  zTiffinfo Keys: %sr,  ré  r%   r:  Údescriptionr7  Úx_resolutionÚy_resolutionÚresolution_unitÚsoftwareÚ	date_timeÚartistÚ	copyrightr6  rB   )rC   rD   rC   r    r;  rO   r=  r'   c                 S  s   g | ]}|d  ‘qS r<  r<   r7  r<   r<   r@   r;  H  r¹  z_save.<locals>.<listcomp>r!   r/   r1   Ú
strip_sizer   rx  )r   r   )r   r    é€   r    r†  r    Úqualityéd   zInvalid quality settingz5quality setting only supported for 'jpeg' compressionzSaving using libtiff encoderz	Items: %sr!  c                 s  s    � | ]}t |tttfƒV  qd S rj   )r    rt   r€   rx   r7  r<   r<   r@   rd   ¨  s   € z_save.<locals>.<genexpr>r9  rä   rj  zConverted items: %s)rF   rH   rw  r8  r#  rS   zencoder error z when writing image fileÚ_debug_multipage)qÚ	SAVE_INFOrú  r¦  r—  ÚencoderinfoÚencoderconfigrÛ   r¥  r  r>  r    rt   ÚWRITE_LIBTIFFrA  rÝ   rF  rG  rg   r   ÚExifr²  r§  r¨  rÎ  rÕ  rÝ  r   r  r  r  r  rÚ   r,  r•   rL  rM  rb   ÚEXIFIFDrJ  rS  rQ  rR  ÚIPTC_NAA_CHUNKÚPHOTOSHOP_CHUNKr   ré  rJ  r@  r[  ÚIMAGEDESCRIPTIONÚSOFTWAREÚ	DATE_TIMEÚARTISTÚ	COPYRIGHTrK  rC  Úcopyr¤  ÚheightÚwidthr   Úinvertrø  Ú
getpaletter\  rW  Ú
STRIP_SIZEr†   rF  ÚSTRIPBYTECOUNTSrl   r»  ÚCOMPRESSION_INFO_REVr?  rE  ÚREFERENCEBLACKWHITEr&  Ú
setdefaultrX  rY  rV  ÚTILEBYTECOUNTSrL  ÚJPEGQUALITYrº  r©  r!  ÚioÚUnsupportedOperationÚOSUBFILETYPEÚTRANSFERFUNCTIONÚSUBIFDÚ	itertoolsÚchainÚLIBTIFF_CORErÓ  r€   r�   rA  r$  r?  r:  rx   ÚsortÚ_getencoderr'  r   ÚMAXBLOCKrÅ  rÆ  Ú_saverU  Úsetattr)6rø  r“  rç  ri  rf   r^  ru  ÚbitsÚextrar1  r  r‹  rŒ  r·  r5  r#  r>  r  r  Ú
legacy_ifdÚsupplied_tagsr,  Úiccr  r6  Úinverted_imÚpxrn  rm  ÚlutÚcolormapÚcolorsr‚   rq  r_  rs  Úim_strip_sizeÚrows_per_stripÚstrip_byte_countsÚstrips_per_imageÚdefault_valueÚ	blocklistr‡  rí  ÚtypesÚattsr�   r?  rà  rs  ÚencoderÚerrcoderï   r±  r<   r<   r@   r®  ª  sô  
€þ


€ü


€
ÿ


ü
€úþ
€ö
€






&ÿ€
&

€


ÿÿþ
ý
 


ÿú
ÿþ€
û
þ

ý
þr®  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)   r1   r   r   r%   r)   r1   r)   r1   r)   r%   r)   r1   >   é  é  é	  é   r"   r#   FÚfnræ  r  ri   rh   rž   c                 C  s~   |  t |ƒr(|| _d| _zt||rdndƒ| _W n ty'   t|dƒ| _Y nw ttt |ƒ| _d| _| j 	¡ | _
|  ¡  d S )NTzw+bzr+bF)r   r  Úclose_fpÚopenr©   r—  r
   r   rg   r£  Ú	beginningÚsetup)r‘   rÉ  r  r<   r<   r@   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©  rÌ  r)  r,  ÚwhereToWriteNewIFDOffsetÚoffsetOfNewPager–  ÚIIMMr  ÚisFirstrm   ÚRuntimeErrorÚ	setEndianrk   r  r+  ÚskipIFDsÚgoToEnd)r‘   Úiimmr  r<   r<   r@   rÍ    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 pager1   )rÒ  r©   r©  rÐ  r–  rÑ  rÓ  r  r)  r+  Ú_readrÏ  Ú_writeÚfixIFD)r‘   r×  r  Ú
ifd_offsetr<   r<   r@   Úfinalize+  s$   

zAppendingTiffWriter.finalizec                 C  s   |   ¡  |  ¡  d S rj   )rÜ  rÍ  r¤   r<   r<   r@   ÚnewFrameE  s   zAppendingTiffWriter.newFramec                 C  s   | S rj   r<   r¤   r<   r<   r@   Ú	__enter__J  s   zAppendingTiffWriter.__enter__r’   r®   c                 G  s   | j r	|  ¡  d S d S rj   )rÊ  r-  r—   r<   r<   r@   Ú__exit__M  s   ÿzAppendingTiffWriter.__exit__rt   c                 C  s   | j  ¡ | j S rj   )r©   r£  rÐ  r¤   r<   r<   r@   r£  Q  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,  rÐ  r©   r©  r£  )r‘   r±  rà  r<   r<   r@   r©  T  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   rG   )r©   r©  r)  ÚSEEK_ENDr£  rÅ  rg   rÐ  )r‘   r4  Ú	pad_bytesr<   r<   r@   rÖ  a  s   
zAppendingTiffWriter.goToEndÚendianr�   c                 C  sB   || _ | j › d�| _| j › d�| _| j › d�| jrdnd | _d S )NrD   r]  r´  r  )rã  ÚlongFmtÚshortFmtr  Ú	tagFormat)r‘   rã  r<   r<   r@   rÔ  k  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)NTr1   r)   r   r%   r›  rE   )rØ  r  r©   r£  rÏ  r©  r)  r+  )r‘   rÛ  Únum_tagsr<   r<   r@   rÕ  q  s   ÿözAppendingTiffWriter.skipIFDsrï   r   c                C  s   | j  |¡S rj   )r©   rÅ  rh  r<   r<   r@   rÅ  ~  r"  zAppendingTiffWriter.writeÚ
field_sizec                 C  s.   z	ddddœ| W S  t y   d}t|ƒ‚w )Nr]  rD   r  )r%   r)   r1   zoffset is not supported)r¦  rÓ  )r‘   rè  r  r<   r<   r@   Ú_fmt�  s   þzAppendingTiffWriter._fmtc                 C  s&   t  | j|  |¡ | j |¡¡\}|S rj   )r   rZ  rã  ré  r©   r–  )r‘   rè  r�   r<   r<   r@   rØ  ˆ  s   ÿzAppendingTiffWriter._readc                 C  ó
   |   d¡S ©Nr%   ©rØ  r¤   r<   r<   r@   Ú	readShortŽ  r¬   zAppendingTiffWriter.readShortc                 C  rê  ©Nr)   rì  r¤   r<   r<   r@   Ú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 )rÓ  )rð  rñ  r  r<   r<   r@   Ú_verify_bytes_written”  s   þz)AppendingTiffWriter._verify_bytes_writtenr   r�   Únew_field_sizec                 C  sJ   | j  | tj¡ |s|}| j  t | j|  |¡ |¡¡}|  	||¡ d S rj   )
r©   r©  r)  r+  rÅ  r   r\  rã  ré  rò  )r‘   r�   rè  ró  rð  r<   r<   r@   Ú_rewriteLastš  s   ÿz AppendingTiffWriter._rewriteLastc                 C  s   |   |dd¡ d S )Nr%   r)   ©rô  ro  r<   r<   r@   ÚrewriteLastShortToLong¥  r[  z*AppendingTiffWriter.rewriteLastShortToLongc                 C  ó   |   |d¡S rë  rõ  ro  r<   r<   r@   ÚrewriteLastShort¨  r"  z$AppendingTiffWriter.rewriteLastShortc                 C  r÷  rî  rõ  ro  r<   r<   r@   ÚrewriteLastLong«  r"  z#AppendingTiffWriter.rewriteLastLongc                 C  s0   | j  t | j|  |¡ |¡¡}|  ||¡ d S rj   )r©   rÅ  r   r\  rã  ré  rò  )r‘   r�   rè  rð  r<   r<   r@   rÙ  ®  s   ÿzAppendingTiffWriter._writec                 C  ó   |   |d¡ d S rë  ©rÙ  ro  r<   r<   r@   Ú
writeShort´  r²   zAppendingTiffWriter.writeShortc                 C  rú  rî  rû  ro  r<   r<   r@   Ú	writeLong·  r²   zAppendingTiffWriter.writeLongc                 C  s    |   ¡  | jr| j ¡  d S d S rj   )rÜ  rÊ  r©   r-  r¤   r<   r<   r@   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 )Nr1   r%   rE   r)   z;fixIFD: %s (%d) - type: %s (%d) - type size: %d - count: %dr�  )rØ  r  r¤  r   rZ  ræ  r©   r–  Ú
fieldSizesrÐ  rô  ÚTagsr£  r§  r¨  r   r$  r  r   r¥  Ú_fixOffsetsr©  r)  r+  )r‘   rç  r‚   r,  Ú
field_typer¬  rè  Ú
total_sizerÁ  Úis_localr±  Úcur_posr<   r<   r@   rÚ  ¿  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        r1   r%   r   r)   r   znot implemented)r¤  rØ  rÐ  r  rÓ  rô  r©   r©  r)  r+  rü  )r‘   r¬  rè  r‚   r±  ró  r  Úrewindr<   r<   r@   r   è  s&   


çzAppendingTiffWriter._fixOffsetsÚisShortÚisLongc                 C  s$   |rd}n|r
d}nd}|   ||¡S )Nr%   r)   r   )r   )r‘   r¬  r  r  rè  r<   r<   r@   Ú
fixOffsets	  s   zAppendingTiffWriter.fixOffsetsN)F)rÉ  ræ  r  ri   rh   rž   rÇ  )rh   rÄ  )r’   r®   rh   rž   rÒ   )r±  rt   rà  rt   rh   rt   )rã  r�   rh   rž   )rï   r   rh   rt   )rè  rt   rh   r�   )rè  rt   rh   rt   )rð  r  rñ  rt   rh   rž   rQ   )r�   rt   rè  rt   ró  rt   rh   rž   )r�   rt   rh   rž   )r�   rt   rè  rt   rh   rž   )r¬  rt   rè  rt   rh   rž   )FF)r¬  rt   r  ri   r  ri   rh   rž   )$rÔ   rÕ   rÖ   rþ  rÿ  r¢   rÍ  rÜ  rÝ  rÞ  rß  r£  r£  r,  r©  rÖ  rÔ  rÕ  rÅ  ré  rØ  rí  rï  Ústaticmethodrò  rô  rö  rø  rù  rÙ  rü  rý  r-  rÚ  r   r  r<   r<   r<   r@   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Œ  r<   r   )rÎ  r‹  r¥  rÚ   r®  r£  rÄ  Ú_attach_default_encoderinforŒ  r•   r¤  r©  r²  rÝ  )
rø  r“  rç  r
  Úcur_idxÚtfÚimsr‹  ÚnfrrÜ   r<   r<   r@   Ú	_save_all	  s,   




õÿòr  z.tifz.tiffz
image/tiff)rf   rg   rh   ri   )rq   rr   rs   rt   rh   ru   )rq   rx   rs   rt   r}   rt   rh   ru   )r�   r�   rh   r	   )rÜ   rt   rÝ   rt   rh   rÞ   )rÜ   rt   rh   rè   )rì   rí   rh   rž   )rø  ry  r“  r”  rç  rz  rh   rž   )ˆÚ
__future__r   r£  r¨  Úloggingr  r)  r   rM  Úcollections.abcr   r   Ú	fractionsr   Únumbersr   r   Útypingr   r	   r
   Ú r   r   r   r   r   r   Ú_binaryr   r  r   r	  r   Ú_utilr   r   r   r¡   r   r   Ú_typingr   r   r   Ú	getLoggerrÔ   r§  rT  r�  rœ  r  r  r¥  rF  rG  rK  r?  rC  rD  r’  r»  rM  rW  r�  rQ  rR  rA  rS  r¦  r“  r”  r•  Ú	PREDICTORr\  rX  rY  rV  r¡  r§  rL  rJ  Ú
JPEGTABLESrE  rŸ  r–  r�  r‘  r[  r�  r   r¢  ÚIMAGEJ_META_DATA_BYTE_COUNTSÚIMAGEJ_META_DATAr>  r&  rž  rO  r‡   rN  rm   ro   r|   rŠ   rŒ   rÌ  rŽ   rš   rx   rg   ri   rà   rç   rë   r  rt   Ú
_IFDv2BaserÛ   rÜ   r  rä   r¯  rÕ  ÚImageFileDirectoryrä  rŠ  r®  ÚBytesIOrÄ  r  Úregister_openru  Úregister_saveÚregister_save_allÚregister_extensionsÚregister_mimer<   r<   r<   r@   Ú<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‹vŠy‡z†{…|„
	     \    ýüûúùø	÷
öõôóòñðïî  <  .