a
    ç´«j%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_d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOœZ`dPdQ„ e` a¡ D ƒZbe5d dRddRdSfdTe6d dRddRdSfdTe5d dRdUdRdSfdVe6d dRdUdRdSfdVe5ddRddRdSfdWe6ddRddRdSfdWe5ddRdUdRdSfdXe6ddRdUdRdSfdXe5d dRddYdSfdZe6d dRddYdSfdZe5d dRdUdYdSfd[e6d dRdUdYdSfd[e5ddRddYdSfd\e6ddRddYdSfd\e5ddRdUdYdSfd]e6ddRdUdYdSfd]e5d dRdd^dSfd_e6d dRdd^dSfd_e5d dRdUd^dSfd`e6d dRdUd^dSfd`e5ddRdd^dSfdae6ddRdd^dSfdae5ddRdUd^dSfdbe6ddRdUd^dSfdbe5d dRddcdSfdde6d dRddcdSfdde5d dRdUdcdSfdee6d dRdUdcdSfdee5ddRddcdSfdfe6ddRddcdSfdfe5ddYddcdSfdfe6ddYddcdSfdfe5ddRdUdcdSfdge6ddRdUdcdSfdge5ddRddhdSfdie5d dRddjdSfdke5ddRddjdSfdke6ddRddjdSfdle5ddRdUdjdSfdme5ddYddjdSfdne6ddYddjdSfdoe5d dpddqdSfdre6d dpddqdSfdse5ddRddqdSfdte5ddYddqdSfdue6ddYddqdSfdve5ddpddqdSfdre6ddpddqdSfdse5ddRddwdYfdxe6ddRddwdYfdxe5dUdRddydSfdze6dUdRddydSfdze5dUdRdUdydSfd{e6dUdRdUdydSfd{e5dUdRdd|dSfd}e6dUdRdd|dSfd}e5dUdRdd|d~fde6dUdRdd|d~fde5dUdRdd€d�fd‚e6dUdRdd€d�fd‚e5dUdRddƒd„fd…e6dUdRddƒd„fd…e5dUdRdd|dRfd†e6dUdRdd|dRfd†e5dUdRdd€d‡fdˆe6dUdRdd€d‡fdˆe5dUdRddƒd‰fdŠe6dUdRddƒd‰fdŠe5dUdRdd|dYfd}e6dUdRdd|dYfd}e5dUdRdd€d‹fdŒe6dUdRdd€d‹fdŒe5dUdRddƒd�fdŽe6dUdRddƒd�fdŽe5dUdRdd|d�fd}e6dUdRdd|d�fd}e5dUdRdd�dSfd‘e6dUdRdd�dSfd’e5dUdRdd“dSfd”e6dUdRdd“dSfd•e5dUdRdd“d~fd–e6dUdRdd“d~fd—e5dUdRdd“dRfd˜e6dUdRdd“dRfd™e5dUdRdd“dYfd”e6dUdRdd“dYfd•e5dšdRddRdSfd›e6dšdRddRdSfd›e5dšdRdUdRdSfdœe6dšdRdUdRdSfdœe5dšdRddYdSfd�e6dšdRddYdSfd�e5dšdRdUdYdSfdže6dšdRdUdYdSfdže5dšdRdd^dSfdŸe6dšdRdd^dSfdŸe5dšdRdUd^dSfd e6dšdRdUd^dSfd e5dšdRddcdSfd¡e6dšdRddcdSfd¡e5dšdRddwd~fd¢e5dšdRddwdYfd£e6dšdRddwdYfd£e5dšdRdUdcdSfd¤e6dšdRdUdcdSfd¤e5d¥dRdd|dSfd¦e6d¥dRdd|dSfd¦e5d¥dRdd€d~fd§e6d¥dRdd€d~fd§e5d¥dRddƒd�fd¨e6d¥dRddƒd�fd¨e5d¥dRdd“dSfd©e6d¥dRdd“dSfdªe5d«dRddcdSfdfe6d«dRddcdSfdfe5d«dRddydSfde6d«dRddydSfde5d¬dRddydSfd­e6d¬dRddydSfd­iwZcedd®d¯„ ecD ƒƒZeg d°¢Zfegejhd±d²ƒ�	sÂe%d³d´ƒ dµd¶d·œd¸d¹„Zidºd»d¼d½œd¾d¿„ZjdÀd»d»d¼dÁœdÂdÃ„Zki Zli ZmdÄdÅdÆœdÇdÈ„ZnG dÉdÀ„ dÀeƒZoedÊepeqgef Zrd»d»dËdÌœdÍdÎ„Zsd»dÏdÐœdÑdÒ„ZtdÓdÔdÕœdÖd×„Zue,�
rxeevef ZwneZwG dØdÊ„ dÊewƒZxelex_lemex_me+ a¡ D ]F\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dáe5dddRdfdâe5dddcdfdãe5dddwdUfdäe5dšddcdfdåe5dšddwdUfdæe5ddUdqdfdçe5dddjdfdèe5dddjdfdée5ddšdqdfdêe5dUddydfdëe5dUdd|d fdìe5dUdd|dUfdíe5d¥dd|dfdîe5d«ddydfdïe5d¬ddydfdðe6dddjdfdñœZ€dòdódôdÔdõœdöd÷„Z�G dødù„ dùej‚ƒZƒdòdódôdÔ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—Æ  ÚrawZ
tiff_ccittZgroup3Zgroup4Ztiff_lzwÚ	tiff_jpegÚjpegÚtiff_adobe_deflateZtiff_raw_16ZpackbitsZtiff_thunderscanÚtiff_deflateZtiff_sgilogZtiff_sgilog24ÚlzmaZzstdZwebp)r   é   é   é   é   é   é   é   i€  i€  i)€  i²€  it‡  iu‡  imˆ  iPÃ  iQÃ  c                 C  s   i | ]\}}||“qS © r2   )Ú.0ÚkÚvr2   r2   úR/var/www/html/laksyashrimp/venv/lib/python3.9/site-packages/PIL/TiffImagePlugin.pyÚ
<dictcomp>”   ó    r7   ©r   r2   )Ú1z1;Ir+   )r:   z1;IR)r:   r:   )r:   z1;R)r+   )ÚLzL;2I)r;   zL;2IR)r;   zL;2)r;   zL;2R)r-   )r;   zL;4I)r;   zL;4IR)r;   zL;4)r;   zL;4R)r1   )r;   zL;I)r;   zL;IR)r;   r;   )r;   zL;R)é   )úI;16zI;12)é   )r=   r=   )úI;16Br?   )r=   zI;16R)ÚIzI;16S)r@   zI;16BS)r,   )é    )ÚFúF;32F)rB   zF;32BF)r@   zI;32N)r@   úI;32S)r@   zI;32BS)r1   r1   )ÚLArE   )r1   r1   r1   )ÚRGBrF   )rF   zRGB;R)r1   r1   r1   r1   )ÚRGBArG   )r   )rF   ÚRGBX)r1   r1   r1   r1   r1   ©r   r   )rF   ZRGBXX)r1   r1   r1   r1   r1   r1   )r   r   r   )rF   ZRGBXXX)rG   ZRGBa)r   r   )rG   ZRGBaX)r   r   r   )rG   ZRGBaXX)r+   r   )rG   ZRGBAX)r+   r   r   )rG   ZRGBAXX)iç  )r>   r>   r>   )rF   zRGB;16L)rF   zRGB;16B)r>   r>   r>   r>   )rG   zRGBA;16L)rG   zRGBA;16B)rF   zRGBX;16L)rF   zRGBX;16B)rG   zRGBa;16L)rG   zRGBa;16Br,   )Ú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;Rr.   )ÚCMYKrL   )rL   ZCMYKX)rL   ZCMYKXX)rL   zCMYK;16L)rL   zCMYK;16Br/   r1   )ÚLABrM   c                 c  s   | ]}t |d  ƒV  qdS )r-   N)Úlen)r3   Zkey_tpr2   r2   r6   Ú	<genexpr>  r8   rO   )s   MM *s   II* s   MM* s   II *s   MM +s   II+ Úlibtiff_support_custom_tagsTz*Support for LibTIFF earlier than version 4r<   ÚbytesÚbool)ÚprefixÚreturnc                 C  s   |   ttƒ¡S ©N)Ú
startswithÚtupleÚPREFIXES©rS   r2   r2   r6   Ú_accept#  s    rZ   úfloat | Fraction | IFDRationalÚintz!tuple[IntegralLike, IntegralLike])ÚvalÚmax_valrT   c                 C  s<   t | ƒdk}t|rd|  n| ƒ |¡}|r8|d d d… S |S )Nr   éÿÿÿÿ)ÚabsÚIFDRationalÚlimit_rational)r]   r^   ÚinvÚn_dr2   r2   r6   Ú_limit_rational'  s    re   ra   )r]   r^   Úmin_valrT   c                 C  sp   t | ƒ}|j|jf}tdd„ |D ƒƒ|k r8t| t|ƒƒ}tdd„ |D ƒƒ}t|ƒ|krlt|d |d  |ƒ}|S )Nc                 s  s   | ]}t |ƒV  qd S rU   ©Úfloat©r3   Úir2   r2   r6   rO   5  r8   z)_limit_signed_rational.<locals>.<genexpr>c                 s  s   | ]}t |ƒV  qd S rU   rg   ri   r2   r2   r6   rO   8  r8   r   r   )r   Ú	numeratorÚdenominatorÚminre   r`   rW   Úmax)r]   r^   rf   Úfracrd   Z	n_d_floatr2   r2   r6   Ú_limit_signed_rational/  s    rp   Ústrr	   )ÚoprT   c                   s   ddddœ‡ fdd„}|S )Nra   ztuple[float, ...]zbool | float | Fraction)ÚselfÚargsrT   c                   s   t | jˆ ƒ|Ž S rU   )ÚgetattrÚ_val©rs   rt   ©rr   r2   r6   ÚdelegateG  s    z_delegate.<locals>.delegater2   )rr   ry   r2   rx   r6   Ú	_delegateF  s    rz   c                   @  sŠ  e Zd ZdZdZd@ddddœdd	„Zed
dœdd„ƒZeddœdd„ƒZdddœdd„Z	ddœdd„Z
ddœdd„Zdddœdd„Zddœdd „Zddd!œd"d#„Zed$ƒZed%ƒZed&ƒZed'ƒZed(ƒZed)ƒZed*ƒZed+ƒZed,ƒZed-ƒZed.ƒZed/ƒZe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*e+d>ƒ�r†ed>ƒZ,d?S )Ara   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Ú_denominatorrv   r   r[   r\   ÚNone)Úvaluerl   rT   c                 C  s¼   |  t |tƒr*|j| _|j| _|j| _dS t |tƒrF|j| _|j| _ntrXt	t
|ƒ| _n|| _|| _|dkrxtdƒ| _n@|dkrŒt|ƒ| _n,t|ƒ|krªtt|ƒ|ƒ| _n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   )Ú
isinstancera   rk   r{   rl   r|   rv   r   ÚTYPE_CHECKINGr   r   rh   r\   )rs   r~   rl   r2   r2   r6   Ú__init__]  s(    


zIFDRational.__init__r   ©rT   c                 C  s   | j S rU   )r{   ©rs   r2   r2   r6   rk     s    zIFDRational.numeratorc                 C  s   | j S rU   )r|   r„   r2   r2   r6   rl   ƒ  s    zIFDRational.denominatorztuple[IntegralLike, int])Úmax_denominatorrT   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   )rl   rk   r€   rv   r   Úlimit_denominator)rs   r…   Úfr2   r2   r6   rb   ‡  s
    
zIFDRational.limit_rationalrq   c                 C  s   t t| jƒƒS rU   )rq   rh   rv   r„   r2   r2   r6   Ú__repr__•  s    zIFDRational.__repr__c                 C  s
   | j  ¡ S rU   )rv   Ú__hash__r„   r2   r2   r6   r‰   ˜  s    zIFDRational.__hash__ÚobjectrR   )ÚotherrT   c                 C  s0   | j }t|tƒr|j }t|tƒr(t|ƒ}||kS rU   )rv   r€   ra   rh   )rs   r‹   r]   r2   r2   r6   Ú__eq__›  s    

zIFDRational.__eq__z%list[float | Fraction | IntegralLike]c                 C  s   | j | j| jgS rU   )rv   r{   r|   r„   r2   r2   r6   Ú__getstate__£  s    zIFDRational.__getstate__)ÚstaterT   c                 C  s^   t  | d¡ |\}}}t|ttfƒs(J ‚|| _tr@tt|ƒ| _	n|| _	t|t
ƒsTJ ‚|| _d S ©Nr   )ra   r‚   r€   rh   r   rv   r�   r   r   r{   r\   r|   )rs   rŽ   rv   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__N)r   )-Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__r‚   Úpropertyrk   rl   rb   rˆ   r‰   rŒ   r�   r�   rz   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   ra   O  sT    ÿ"ÚImageFileDirectory_v2z$Callable[[_LoaderFunc], _LoaderFunc])ÚidxÚsizerT   c                   s   dddœ‡ ‡fdd„}|S )NÚ_LoaderFunc©ÚfuncrT   c                   sB   ddl m} | j d¡r2| jdd …  dd¡|ˆ < ˆ| ftˆ < | S )Nr   r   Úload_r.   Ú_ú )r   r   r¬   rV   ÚreplaceÚ_load_dispatch)r¸   r   ©r´   rµ   r2   r6   Ú	decoratorÝ  s
    z#_register_loader.<locals>.decoratorr2   )r´   rµ   r¿   r2   r¾   r6   Ú_register_loaderÜ  s    rÀ   z2Callable[[Callable[..., Any]], Callable[..., Any]])r´   rT   c                   s   dddœ‡ fdd„}|S )NzCallable[..., Any]r·   c                   s   | t ˆ < | S rU   )Ú_write_dispatch)r¸   ©r´   r2   r6   r¿   é  s    z#_register_writer.<locals>.decoratorr2   )r´   r¿   r2   rÂ   r6   Ú_register_writerè  s    rÃ   ztuple[int, str, str]r}   )Úidx_fmt_namerT   c                   sj   ddl m} | \}‰ }|||< t dˆ › �¡‰dddddd	œ‡ ‡fd
d„}ˆ|ft|< ‡ fdd„t|< d S )Nr   r   ú=Tr³   rQ   rR   útuple[Any, ...])rs   ÚdataÚ
legacy_apirT   c                   s   |   t|ƒˆ › ˆ › �|¡S rU   )Ú_unpackrN   ©rs   rÇ   rÈ   ©Úfmtrµ   r2   r6   Úbasic_handler÷  s    z&_register_basic.<locals>.basic_handlerc                   s   d  ‡‡ fdd„|D ƒ¡S )Nr8   c                 3  s   | ]}ˆ  ˆ |¡V  qd S rU   )Ú_pack©r3   r~   )rÌ   rs   r2   r6   rO   þ  r8   z4_register_basic.<locals>.<lambda>.<locals>.<genexpr>©Újoin©rs   Úvalues)rÌ   r„   r6   Ú<lambda>ý  s    z!_register_basic.<locals>.<lambda>)T)r   r   ÚstructÚcalcsizer½   rÁ   )rÄ   r   r´   ÚnamerÍ   r2   rË   r6   Ú_register_basicð  s    
 ÿrØ   c                   @  s  e Zd ZU dZi Zded< i Zded< d~dd	d
ddœdd„Zedd„ ƒZ	edd„ ƒZ
eddœdd„ƒZejdddœdd„ƒZddœdd„Zddœdd„Zddœdd „Zd!dœd"d#„Zd!d$d%œd&d'„Zd(dd%œd)d*„Zd!d$dd+œd,d-„Zd!d$ddd.œd/d0„Zd!dd%œd1d2„Zd3dœd4d5„Zddd6d7œd8d9„Zdd$dd:œd;d<„Zeeeejd=d>fejd?d@fejdAdBfej dCdDfej!dEdFfej"dGdHfej#dIdJfej$d?d@fej%dKdLfg	ƒƒ e&dMdMƒdddddOœdPdQ„ƒZ'e(dMƒdRddSœdTdU„ƒZ)e&dVdMƒd€ddddOœdWdX„ƒZ*e(dVƒdYddœdZd[„ƒZ+e&d\d]ƒd�ddd^dOœd_d`„ƒZ,e(d\ƒdaddbœdcdd„ƒZ-e&dedMƒd‚ddddOœdfdg„ƒZ.e(deƒdRddœdhdi„ƒZ/e&djd]ƒdƒddd^dOœdkdl„ƒZ0e(djƒdaddbœdmdn„ƒZ1dod!ddpœdqdr„Z2doddsœdtdu„Z3ddœdvdw„Z4d„d!ddyœdzd{„Z5dod!dsœ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*     NrQ   zbytes | Noneú
int | Noner}   )ÚifhrS   ÚgrouprT   c                 C  sÎ   t |ƒs dt|ƒ› d�}t|ƒ‚|dur,|n
|dd… | _| jtkrLd| _n| jtkr^d| _nd}t|ƒ‚|d dk| _|| _i | _	|  
¡  | jrª|  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   r;   r-   F)rZ   ÚreprÚSyntaxErrorÚ_prefixÚMMÚ_endianÚIIÚ_bigtiffrÜ   ÚtagtypeÚresetrÉ   ÚnextÚ_legacy_api)rs   rÛ   rS   rÜ   Úmsgr2   r2   r6   r‚   H  s&    

ÿýzImageFileDirectory_v2.__init__c                 C  s   | j S rU   )rã   r„   r2   r2   r6   rÔ   o  r8   zImageFileDirectory_v2.<lambda>c                 C  s   | j S rU   )Ú_offsetr„   r2   r2   r6   rÔ   p  r8   rR   rƒ   c                 C  s   | j S rU   )rë   r„   r2   r2   r6   rÈ   r  s    z ImageFileDirectory_v2.legacy_apir   ©r~   rT   c                 C  s   d}t |ƒ‚d S )Nz"Not allowing setting of legacy api)Ú	Exception)rs   r~   rì   r2   r2   r6   rÈ   v  s    c                 C  s(   i | _ i | _i | _i | _d | _d | _d S rU   )Ú_tags_v1Ú_tags_v2Ú_tagdatarè   Ú_nextrí   r„   r2   r2   r6   ré   {  s    zImageFileDirectory_v2.resetrq   c                 C  s   t t| ƒƒS rU   )rq   Údictr„   r2   r2   r6   Ú__str__ƒ  s    zImageFileDirectory_v2.__str__z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  s   t t| jƒt| jƒB ƒS rU   )rN   Úsetrò   rñ   r„   r2   r2   r6   Ú__len__‘  s    zImageFileDirectory_v2.__len__r	   ©ÚtagrT   c                 C  sf   || j vr>| j| }| j| }| j| \}}|| || jƒ| |< | j | }| jrbt|ttfƒsb|f}|S rU   )rñ   rò   rè   r½   rÈ   r€   rW   rQ   )rs   rý   rÇ   Útyprµ   Úhandlerr]   r2   r2   r6   Ú__getitem__”  s    



z!ImageFileDirectory_v2.__getitem__rŠ   c                 C  s   || j v p|| jv S rU   )rñ   rò   ©rs   rý   r2   r2   r6   Ú__contains__Ÿ  s    z"ImageFileDirectory_v2.__contains__©rý   r~   rT   c                 C  s   |   ||| j¡ d S rU   )Ú_setitemrÈ   )rs   rý   r~   r2   r2   r6   Ú__setitem__¢  s    z!ImageFileDirectory_v2.__setitem__)rý   r~   rÈ   rT   c              
     s6  t ttf}t || j¡‰ t||ƒr(|gn|}|| jv�rèˆ jrNˆ j| j|< �nštj	| j|< t
dd„ |D ƒƒr¬|D ]*}t|tƒs‚J ‚|dk rptj| j|<  q¨qptj| j|< �n<t
dd„ |D ƒƒ�r„d}d}d}	|D ]h}t|tƒsâJ ‚|�rd|  krþdk �sn d}|�r(d|  k �r"d	k �s(n d}|	rÐ|dk rÐd}	qÐ|�rNtj| j|< n4|�rbtj| j|< n |	�rvtj| j|< ntj| j|< ndt
d
d„ |D ƒƒ�r¦tj| j|< nBt
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�oDt|tƒ}
|
�sbt‡ fdd„|D ƒƒ}|�rn| jn| j}|
�s*ˆ jdk�s¸| j| tjk�s¸ˆ jd u �r*t|ƒdk�r*|�s*|�rÜ| j| tjtjfv �rÜ|f}z|\||< W n< t�y&   t d|› dt|ƒ› d�¡ |d ||< Y n0 n|||< d S )Nc                 s  s   | ]}t |tƒV  qd S rU   )r€   ra   ©r3   r5   r2   r2   r6   rO   °  r8   z1ImageFileDirectory_v2._setitem.<locals>.<genexpr>r   c                 s  s   | ]}t |tƒV  qd S rU   )r€   r\   r  r2   r2   r6   rO   ¸  r8   Tr    Fi €ÿÿi €  c                 s  s   | ]}t |tƒV  qd S rU   )r€   rh   r  r2   r2   r6   rO   Ì  r8   c                 s  s   | ]}t |tƒV  qd S rU   )r€   rq   r  r2   r2   r6   rO   Î  r8   c                 s  s   | ]}t |tƒV  qd S rU   )r€   rQ   r  r2   r2   r6   rO   Ð  r8   c                 S  s&   g | ]}t |tƒr| d d¡n|‘qS )Úasciir¼   )r€   rq   Ú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\   rh   r  r2   r2   r6   r	  Ù  r8   c                 3  s&   | ]}t |tƒrˆ  |¡n|V  qd S rU   )r€   rq   Zcvt_enumrÏ   ©Úinfor2   r6   rO   Ý  s   ÿr   zMetadata Warning, tag z had too many entries: z, expected 1)r   rQ   rq   r   rö   rÜ   r€   rè   ÚtypeÚ	UNDEFINEDÚallra   ZSIGNED_RATIONALZRATIONALr\   ÚSHORTÚSIGNED_SHORTÚLONGÚSIGNED_LONGÚDOUBLEÚASCIIÚBYTErô   rW   rð   rñ   ÚlengthrN   Ú
ValueErrorÚwarningsÚwarn)rs   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 rU   )rñ   Úpoprð   rò   r  r2   r2   r6   Ú__delitem__  s    z!ImageFileDirectory_v2.__delitem__úIterator[int]c                 C  s   t t| jƒt| jƒB ƒS rU   )Úiterrú   rò   rñ   r„   r2   r2   r6   Ú__iter__  s    zImageFileDirectory_v2.__iter__rÆ   )rÌ   rÇ   rT   c                 C  s   t  | j| |¡S rU   )rÕ   Úunpackrå   )rs   rÌ   rÇ   r2   r2   r6   rÉ     s    zImageFileDirectory_v2._unpack)rÌ   rÓ   rT   c                 G  s   t j| j| g|¢R Ž S rU   )rÕ   Úpackrå   )rs   rÌ   rÓ   r2   r2   r6   rÎ     s    zImageFileDirectory_v2._packÚHr  r;   r  Úbzsigned byteÚhzsigned shortÚlzsigned longr‡   rh   ÚdÚdoublerà   Zlong8r   T)rÇ   rÈ   rT   c                 C  s   |S rU   r2   rÊ   r2   r2   r6   Ú	load_byte"  s    zImageFileDirectory_v2.load_bytezbytes | int | IFDRational©rÇ   rT   c                 C  s*   t |tƒrt|ƒ}t |tƒr&t|fƒ}|S rU   )r€   ra   r\   rQ   ©rs   rÇ   r2   r2   r6   Ú
write_byte&  s
    


z ImageFileDirectory_v2.write_byter+   c                 C  s"   |  d¡r|d d… }| dd¡S )Nó    r_   zlatin-1r¼   )ÚendswithÚdecoderÊ   r2   r2   r6   Úload_string.  s    
z!ImageFileDirectory_v2.load_stringzstr | bytes | intc                 C  s0   t |tƒrt|ƒ}t |tƒs(| dd¡}|d S )Nr  r¼   r/  )r€   r\   rq   rQ   r  ©rs   r~   r2   r2   r6   Úwrite_string4  s
    

z"ImageFileDirectory_v2.write_stringr.   r1   z)tuple[tuple[int, int] | IFDRational, ...]c                   s`   |   t|ƒd › d�|¡}ddddœ‡fdd„‰ t‡ fdd	„t|d d d
… |dd d
… ƒD ƒƒS )Nr-   r;   r\   útuple[int, int] | IFDRational©Úar&  rT   c                   s   ˆ r| |fS t | |ƒS rU   ©ra   ©r7  r&  ©rÈ   r2   r6   ÚcombineC  s    z4ImageFileDirectory_v2.load_rational.<locals>.combinec                 3  s   | ]\}}ˆ ||ƒV  qd S rU   r2   ©r3   ÚnumÚdenom©r;  r2   r6   rO   F  r8   z6ImageFileDirectory_v2.load_rational.<locals>.<genexpr>r+   r   ©rÉ   rN   rW   Úzip©rs   rÇ   rÈ   Úvalsr2   ©r;  rÈ   r6   Úload_rational=  s    z#ImageFileDirectory_v2.load_rationalra   )rÓ   rT   c                   s   d  ‡ fdd„|D ƒ¡S )Nr8   c                 3  s&   | ]}ˆ j d gt|dƒ¢R Ž V  qdS )Z2Ll   ÿÿ N)rÎ   re   ©r3   ro   r„   r2   r6   rO   J  s   z7ImageFileDirectory_v2.write_rational.<locals>.<genexpr>rÐ   rÒ   r2   r„   r6   Úwrite_rationalH  s    ÿz$ImageFileDirectory_v2.write_rationalr0   c                 C  s   |S rU   r2   rÊ   r2   r2   r6   Úload_undefinedN  s    z$ImageFileDirectory_v2.load_undefinedc                 C  s0   t |tƒrt|ƒ}t |tƒr,t|ƒ dd¡}|S )Nr  r¼   )r€   ra   r\   rq   r  r3  r2   r2   r6   Úwrite_undefinedR  s
    

z%ImageFileDirectory_v2.write_undefinedé
   c                   s`   |   t|ƒd › d�|¡}ddddœ‡fdd„‰ t‡ fdd	„t|d d d
… |dd d
… ƒD ƒƒS )Nr-   r(  r\   r5  r6  c                   s   ˆ r| |fS t | |ƒS rU   r8  r9  r:  r2   r6   r;  `  s    z;ImageFileDirectory_v2.load_signed_rational.<locals>.combinec                 3  s   | ]\}}ˆ ||ƒV  qd S rU   r2   r<  r?  r2   r6   rO   c  r8   z=ImageFileDirectory_v2.load_signed_rational.<locals>.<genexpr>r+   r   r@  rB  r2   rD  r6   Úload_signed_rationalZ  s    z*ImageFileDirectory_v2.load_signed_rationalc                   s   d  ‡ fdd„|D ƒ¡S )Nr8   c                 3  s(   | ] }ˆ j d gt|ddƒ¢R Ž V  qdS )Z2liÿÿÿi   €N)rÎ   rp   rF  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ú	IO[bytes])Úfprµ   rT   c                 C  s8   |  |¡}t|ƒ|kr4d|› dt|ƒ› d�}t|ƒ‚|S )Nz&Corrupt EXIF data.  Expecting to read ú bytes but only got z. )ÚreadrN   ÚOSError)rs   rN  rµ   Úretrì   r2   r2   r6   Ú_ensure_readl  s    
ÿÿÿz"ImageFileDirectory_v2._ensure_read)rN  rT   c              
   C  sˆ  |   ¡  | ¡ | _�z8| jr0|  d|  |d¡¡n|  d|  |d¡¡d }t|ƒD �]Â}| jrp|  d|  |d¡¡n|  d|  |d	¡¡\}}}}t || j	¡j
}t |d
¡}	d|› d|› d|	› d|› d�	}
z| j| \}}W n$ tyü   t d|
|¡ Y qPY n0 || }|| j�rdndk�rt| ¡ }|  | j�r4dnd|¡\}|
d|› d|› �7 }
| |¡ t ||¡}| |¡ n|d |… }t|ƒ|k�rºt d|› dt|ƒ› d|› �¡ t |
¡ qP|�sÌt |
¡ qP|| j|< || j|< |
d7 }
|
|dk�r d|› d�nt|ƒ7 }
t |
¡ qP| j�r2|  d|  |d¡¡n|  d|  |d¡¡\| _W n6 t�y‚ }
 zt t|
ƒ¡ W Y d }
~
d S d }
~
0 0 d S )Nrà   r1   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 rO  z. Skipping tag z
 - value: rA   ú<table: ú bytes>)ré   Útellrí   rç   rÉ   rS  Úranger   rö   rÜ   r×   r   Úgetr½   ÚKeyErrorÚloggerÚdebugÚseekr   Ú
_safe_readrN   r  r  rò   rè   rá   rê   rQ  rq   )rs   rN  Z	tag_countrj   rý   rþ   ÚcountrÇ   ÚtagnameÚtypnamerì   Z	unit_sizerÿ   rµ   ÚhereÚoffsetr2   r2   r6   Úloadv  sr    
ÿüÿý


ÿÿþÿ



"ÿý
zImageFileDirectory_v2.loadc                 C  sZ   | j |  d| jrdnd¡ }| jr4||  ddd¡7 }|| jrH|  dd¡n
|  d	d¡7 }|S )
Nr%  rß   é*   ÚHHr1   r   rà   r>   r;   )rã   rÎ   rç   ©rs   rÛ   r2   r2   r6   Ú_get_ifh¹  s
    "zImageFileDirectory_v2._get_ifhr   )ri  rT   c              
     sp  |   | jrdndt| jƒ¡}g }| jr*dnd}| jr8dnd}ˆ t|ƒt| jƒ| jrVdnd  | 7 ‰ d }t| j ¡ ƒD �]È\}}|tkr�t|ƒ}| j| }	t 	d||	t
|ƒ¡ |	tjkoÀt|tƒ}
|
�rt|  ¡ |d	�}| j| }| ¡ D ]\}}|||< qê| ˆ ¡}n,t|tƒ�r|n|f}| j|	 | g|¢R Ž }t || j¡j}|
�rNd
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¡ qv| ||	||   |ˆ ¡|f¡ ˆ t|ƒd d d 7 ‰ qv|d u�rÔ|| \}}	}}}|�r¦| j|	 \}}‡ fdd„|| || j ƒD ƒ}| j|	 | g|¢R Ž }n|   ||  !||¡d ˆ  ¡}||	|||f||< |D ]N\}}	}}}t 	d||	|t
|ƒt
|ƒ¡ ||   | j�rdnd||	||¡7 }�qØ||   |d¡7 }|D ].\}}	}}}||7 }t|ƒd@ �r<|d7 }�q<|S )Nrà   r%  r;   r1   r-   rU  r<   zTag %s, Type: %s, Value: %s)rÜ   ÚifdrW  zsave: rX  rY  z) - value: r>   r[  r\  r   r/  r8   r+   c                   s   g | ]}|ˆ  ‘qS r2   r2   )r3   r]   ©ri  r2   r6   r	  ù  r8   z1ImageFileDirectory_v2.tobytes.<locals>.<listcomp>r   z%s %s %s %s %srT  rV  )"rÎ   rç   rN   rñ   Úsortedrø   ÚSTRIPOFFSETSrè   ra  rb  rá   r   r  r€   rô   r³   rn  ÚtobytesrW   rÁ   rö   rÜ   r×   r   r_  rq   r  r  r  ÚappendÚljustr½   rÈ   rÉ   )rs   ri  ÚresultÚentriesrÌ   Úfmt_sizeZstripoffsetsrý   r~   rþ   r  ro  rÓ   Zifd_tagZ	ifd_valuerÇ   rf  rg  rì   re  rµ   rÿ   r2   rp  r6   rs  Á  sn    "ÿ


*


ÿ
zImageFileDirectory_v2.tobytesc                 C  sB   |  ¡ dkr| |  ¡ ¡ |  ¡ }|  |¡}| |¡ |t|ƒ S r�   )r]  Úwritern  rs  rN   )rs   rN  ri  rv  r2   r2   r6   Úsave  s    

zImageFileDirectory_v2.save)rÙ   NN)T)T)T)T)T)r   )7r¬   r­   r®   r¯   r½   Ú__annotations__rÁ   r‚   r±   rS   ri  rÈ   Úsetterré   rõ   rù   rû   r   r  r  r  r  r"  rÉ   rÎ   ÚlistÚmaprØ   r   r  r  ZSIGNED_BYTEr  r  ÚFLOATr  ZIFDÚLONG8rÀ   r+  rÃ   r.  r2  r4  rE  rG  rH  rI  rK  rL  rS  rj  rn  rs  rz  r2   r2   r2   r6   r³     s†   
<   ü'^








÷þÿ ÿ
 ÿ

CPr»   rº   r¹   Zwrite_c                      s¼   e Zd ZU dZddddœ‡ fdd„Zedd„ ƒZed	d„ ƒZd
ed< e	dd dœdd„ƒZ
ddœdd„Zdddœdd„Zddœdd„Zddœdd„Zddddœdd „Zdd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}   )rt   ÚkwargsrT   c                   s   t ƒ j|i |¤Ž d| _d S )NT)Úsuperr‚   rë   )rs   rt   r‚  ©Ú	__class__r2   r6   r‚   8  s    zImageFileDirectory_v1.__init__c                 C  s   | j S rU   )rð   r„   r2   r2   r6   rÔ   <  r8   zImageFileDirectory_v1.<lambda>c                 C  s   | j S rU   )rò   r„   r2   r2   r6   rÔ   =  r8   zdict[int, int]rè   r³   )ÚoriginalrT   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`

        rY   )rS   rò   rè   rê   )Úclsr†  ro  r2   r2   r6   Úfrom_v2C  s
    zImageFileDirectory_v1.from_v2rƒ   c                 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`

        rY   )r³   rS   rô   rò   rè   rñ   )rs   ro  r2   r2   r6   Úto_v2U  s
    zImageFileDirectory_v1.to_v2rŠ   rR   rü   c                 C  s   || j v p|| jv S rU   )rð   rò   r  r2   r2   r6   r  f  s    z"ImageFileDirectory_v1.__contains__r\   c                 C  s   t t| jƒt| jƒB ƒS rU   )rN   rú   rò   rð   r„   r2   r2   r6   rû   i  s    zImageFileDirectory_v1.__len__r   c                 C  s   t t| jƒt| jƒB ƒS rU   )r!  rú   rò   rð   r„   r2   r2   r6   r"  l  s    zImageFileDirectory_v1.__iter__r  c                 C  s   dD ]}|   |||¡ qd S ©N)FT)r  )rs   rý   r~   rÈ   r2   r2   r6   r  o  s    z!ImageFileDirectory_v1.__setitem__c                 C  sn   || j vrL| j| }| j| }| j| \}}dD ]}|  ||| ||ƒ|¡ q0| j | }t|ttfƒsj|f}|S rŠ  )rð   rò   rè   r½   r  r€   rW   rQ   )rs   rý   rÇ   rþ   rµ   rÿ   Úlegacyr]   r2   r2   r6   r   s  s    



z!ImageFileDirectory_v1.__getitem__)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dddœ‡ fd	d
„Zddœdd„Zeddœdd„ƒZ	dddœdd„Z
dddœdd„Zddœdd„Zddœdd„Zddœ‡ fdd„Zddœdd„Zddœd d!„Zddœd"d#„Zddœd$d%„Z‡  ZS )'ÚTiffImageFileZTIFFz
Adobe TIFFFNúStrOrBytesPath | IO[bytes]zstr | bytes | Noner}   )rN  ÚfilenamerT   c                   s   |  |  t ƒ  ||¡ d S rU   )rƒ  r‚   )rs   rN  r‘  r„  r2   r6   r‚   �  s    zTiffImageFile.__init__rƒ   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 filer1   r+   rß   r_   Nz*** TiffImageFile._open ***z- __first: %sz	- ifh: %sr   )rN  rP  r³   Útag_v2rê   Z_TiffImageFile__firstÚ_TiffImageFile__nextÚ_TiffImageFile__frameÚ_fpÚ
_frame_posÚ	_n_framesra  rb  rá   Ú_seekrm  r2   r2   r6   Ú_openš  s    

zTiffImageFile._openr\   c                 C  sb   | j }|d u rN|  ¡ }|  t| jƒ¡ | j d u rD|  |  ¡ d ¡ q&|  |¡ | j d us\J ‚| j S )Nr   )r—  r]  r˜  rN   r–  rc  )rs   Zcurrent_n_framesÚcurrentr2   r2   r6   Ún_frames²  s    

zTiffImageFile.n_frames)ÚframerT   c                 C  sN   |   |¡sdS |  |¡ | jdurJ| jj| jksD| jj| jksD| jrJd| _dS )z%Select a given frame as current imageN)Z_seek_checkr˜  Ú_imÚimrµ   Ú
_tile_sizeÚmodeÚreadonly)rs   rœ  r2   r2   r6   rc  ¾  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rpd}t|ƒ‚| j | j¡ | j | j¡ t	 
d| j ¡ ¡ | j | j¡ | jj| jv rÂd| _n
| jj| _| jdkrà|d | _t| jƒdkrú| jdk| _|  jd7  _q| j | j| ¡ | j | j¡ t| jv �rn| jt }t |tƒ�rbt|ƒdk�rb|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   ÚexrN  rN   r–  r“  ÚEOFErrorra  rb  r”  r]  r  rc  rt  r’  rj  rê   r—  Úis_animatedÚXMPrW   r  Z_reload_exifr�  rˆ  rý   ro  Ú_setup)rs   rœ  rì   r¢  r2   r2   r6   r˜  Ê  sT    û




zTiffImageFile._seekc                 C  s   | j S )zReturn the current frame number)r”  r„   r2   r2   r6   r]  û  s    zTiffImageFile.tellzdict[int, dict[str, bytes]]c                 C  s°   i }| j  tjj¡}|r¬| d¡r¬t|dd… ƒ}t |d d d ¡d }t	|d| d| … ƒ}|d| d| | … }d|i||< |t d| | d ¡d d… }q|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+   rJ  rÇ   N)
r’  r_  r   ÚBaseZImageResourcesrV   Úi16ÚmathÚceilÚi32)rs   Úblocksr]   ÚidÚnrµ   rÇ   r2   r2   r6   Úget_photoshop_blocksÿ  s    
$z"TiffImageFile.get_photoshop_blockszImage.core.PixelAccess | Nonec                   s   | j r| jr|  ¡ S tƒ  ¡ S rU   )ÚtileÚuse_load_libtiffÚ_load_libtiffrƒ  rj  r„   r„  r2   r6   rj    s    zTiffImageFile.loadc                 C  s:   | j d u r*t | j¡ tj | j| j¡| _tj 	| ¡ d S rU   )
r�  r   Z_decompression_bomb_checkrŸ  ÚcoreÚnewr   rž  r   Úload_preparer„   r2   r2   r6   r¶    s    
zTiffImageFile.load_preparec                 C  s`   | j s4d| _|  ¡ }tjD ]}||vr(q| |¡ qtj| dd� tj	j
| jv r\| jtj	j
= d S )NT)Zin_place)r¥  Ú!_close_exclusive_fp_after_loadingZgetexifr   ÚTAGS_V2_GROUPSÚget_ifdr   Zexif_transposer   r¨  ÚOrientationr’  )rs   Ú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 }z0t| jdƒo`| j ¡ }t| jdƒrx| j 	¡  W n ty�   d}Y n0 |r¼t
|tƒs¤J ‚t|ƒ}||d< t|ƒ}t  | jd	|| j¡}z| | j|¡ W n4 t�y } zd
}t|ƒ|‚W Y d}~n
d}~0 0 | j�o&| j }t| jdƒ�rVt d¡ | | j ¡ ¡\}	}
n||�r¨t d¡ |�sx| 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   rj  r¶  rN   r±  rQ  r²   rN  r¾  r¿  r€   rW   r}  Z_getdecoderr   ZdecoderconfigÚsetimagerž  r  Z_exclusive_fpr¥  ra  rb  r1  rÁ  rc  ÚosÚlseekÚSEEK_CURÚSEEK_SETrP  r¡  r½  Úclose)rs   rì   Zextentsrt   rN  Z	args_listÚdecoderÚeZclose_self_fpr¯  ÚerrÚposr2   r2   r6   r³  0  s`    
 






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rVd}| 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 n4 t�y } zd}t|ƒ|‚W Y d}~n
d}~0 0 t|tƒ�rt|tƒ�s(d}t|ƒ‚||f| _| j  tjj¡}|dv �rX||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�rRt
 "d|¡ d}t#|ƒ‚||k �rj|	d|… }	n||k�r†|dk�r†|	| }	t|	ƒ|k�r d}t#|ƒ‚| j j$||||	|
f}t
 d|¡ zt%| \| _&}W n> t�y } z$t
 d¡ d}t#|ƒ|‚W Y d}~n
d}~0 0 t
 d|¡ t
 d | j'¡ | j| j(d!< | j  t)d¡}| j  t*d¡}|�rÞ|�rÞ| j  t+¡}|d"k�r†||f| j(d#< nX|dk�r¨|d$ |d$ f| j(d#< n6|du �rÐ||f| j(d#< ||f| j(d%< n||f| j(d%< d } }}g | _,t-�pþ| jd&k| _.| j.�rÔ|d"k�rJ|dd… d |dd…  }t
 d|¡ t%| \| _&}|dk�rr| jd'k�rr| jdk�rrd(}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 �rXt4| j v �r| j t4 }| j  t6|¡}|}nJ| j t5 }| j  t7¡}| j  t8¡}t|tƒ�rPt|tƒ�s\d0}t|ƒ‚|}||k�rŒ||k�rŒ| jd"k�rŒ|d,d… }|D ]Ä}|| |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 �r¾d5d6„ | j t; D ƒ}t< =d7d8 >|¡¡| _?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/   r0   r1   z
- size: %sr9   r2   )r+   r/   r1   r,   r.   r-   )r+   r/   z.More samples per pixel than can be decoded: %sz#Invalid value for samples per pixelzunknown data organizationzformat key: %sz- unsupported formatzunknown pixel modez- raw mode: %sz- pil mode: %sÚcompressionr+   ÚdpigR¸…ëQ@Ú
resolutionr%   r'   rF   r=   úI;16N)z;16Bz;16Lr_   ÚNFrÀ  zInvalid tile dimensionsr1   z- unsupported data organizationÚicc_profile©rJ   rK   c                 S  s   g | ]}t |d  ƒ‘qS ©r"   r   )r3   r&  r2   r2   r6   r	  ~  r8   z(TiffImageFile._setup.<locals>.<listcomp>úRGB;Lr8   )@r’  rQ  ÚCOMPRESSION_INFOr_  ÚCOMPRESSIONÚ_compressionÚPLANAR_CONFIGURATIONZ_planar_configurationÚPHOTOMETRIC_INTERPRETATIONÚ	FILLORDERra  rb  ÚYCBCRSUBSAMPLINGÚ
IMAGEWIDTHÚIMAGELENGTHr`  Ú	TypeErrorr€   r\   r  rŸ  r   r¨  rº  Ú_sizerµ   ÚSAMPLEFORMATrN   rn   rm   ÚBITSPERSAMPLEÚEXTRASAMPLESÚSAMPLESPERPIXELÚMAX_SAMPLESPERPIXELÚerrorrâ   rS   Ú	OPEN_INFOÚ_moder   r  ÚX_RESOLUTIONÚY_RESOLUTIONÚRESOLUTION_UNITr±  ÚREAD_LIBTIFFr²  r0  ri  rt  r   Ú_Tilerr  ÚTILEOFFSETSÚROWSPERSTRIPÚ	TILEWIDTHÚ
TILELENGTHÚsumÚ
ICCPROFILEÚCOLORMAPr   r%   rÑ   Úpalette) rs   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Úlayerr7  Úoffsetsr'  ÚwZ	tilewidthri  ÚstrideZtile_rawmodert   rô  r2   r2   r6   r§  �  s4   



 


2

þ
ÿ
ú
 



ÿþý
$

 üÿ


zTiffImageFile._setup)N)r¬   r­   r®   ÚformatÚformat_descriptionr·  r‚   r™  r±   r›  rc  r˜  r]  r°  rj  r¶  r½  r³  r§  rŽ  r2   r2   r„  r6   r�  ˆ  s"    ý1`r�  r:   r;   rE   rJ   rK   rD   r=   úI;16LrC   rF   rH   rG   rL   ÚYCbCrrM   r?   )r:   r;   rE   rJ   rK   r@   r=   rÿ  rB   rF   rH   rG   rL   r   rM   r?   zImage.ImagerM  zstr | bytes)rž  rN  r‘  rT   c           6      C  sŒ	  zt | j \}}}}}}W n< tyV }	 z$d| j› d�}
t|
ƒ|	‚W Y d }	~	n
d }	~	0 0 | j}| j}t|d�}| d¡r~d|_z|d }W n, ty¶   | j	 d¡}t
|tƒr²d }Y n0 |d u rÆd}n|dkrÔd	}n|d
kràd}tpê|dk}d|t< | jd |t< | jd |t< d|v �r$|d }n:d|v �rZ|d }t
|tƒ�r^t ¡ }| |¡ |}ni }t dt|ƒ¡ t
|tƒ�r‚| ¡ }|D ]h}t
|tjƒ�r´|tjv �r´| |¡||< n| |¡||< z|j| |j|< W n t�yê   Y n0 �q†i }t| dƒ�r
| j  ¡ }i |¥t!| di ƒ¥}t"t#fD ]}||v �r&||= �q&t| dƒ�rºt$t%t&t't(t)fD ]^}|| j*v �rZ|t'k�r–| j*j| tj+tj,fv�r–||= n | j*| ||< | j*j| |j|< �qZ| 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¡}|�rnd|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< n–| jd v �rh|t7 dk�rh| jd!k�r^|  8¡ }| ¡ }|d u�rht9|j:ƒD ]:}t9|j;ƒD ](}|||f d"k�rDdnd"|||f< �q*�q|} n
t< =| ¡} | jd#v �râ| 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„|�rj| d,tB¡}$|#dk�r:dntC|$|# |"ƒ}%|d	k�rntC|%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�rPtJd/tKd0i L¡ D ]\}}(| M||(¡ �q8tNtOtPtQg})|�	r.d1|v �r¾|d1 }*t
|*tƒ�r”|*dk �s”|*d2k�r d3}
tR|
ƒ‚|d	k�r¶d4}
tR|
ƒ‚|*|tS< t d5¡ t d6tT| L¡ ƒ¡ d}+t|d7ƒ�rz| Ud¡ | V¡ }+W n tWjX�y   Y n0 i },|)tYtKtEtGtZt[g7 })t3|d i}-t\ ]| L¡ | L¡ ¡D ]ê\}}.|tj^v�rât!tj_d8d9ƒ�sz�qR|tjv �r’tj`|,|< nP||jv �r®|j| |,|< n4t
|.ttatbtfƒ�sÈ�qRnt c|¡jd}/|/�râ|/|,|< ||-v�rR||)v�rRt
|.tbƒ�r|. ed:d;¡d< |-|< n"t
|.tfƒ�r2ta|.ƒ|-|< n|.|-|< �qRt#|-v �rjt4|-t# ƒdk�rj|-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Ø�	q�qØ|3dk �	rrdB|3› dC�}
t|
ƒ‚nD|)D ]}||= �	q2| m|¡}5tj n| |tj oddA| j |5||#df¡g¡ dD|v �	rˆtp| dD|ƒ d S )ENzcannot write mode z as TIFFrY   Zbig_tiffTrÌ  r%   r&   r'   r)   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+   r9   )r:   r;   r:   r!   rÒ  rF   rÔ  r,   c                 S  s   g | ]}|d  ‘qS rÓ  r2   r  r2   r2   r6   r	  7  r8   z_save.<locals>.<listcomp>r"   r0   r1   Z
strip_sizer    r   )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¾  rP   Fr  r¼   r/  zConverted items: %s)r=   r?   rÿ  rÏ  rÀ  rI   zencoder error z when writing image fileZ_debug_multipage)qÚ	SAVE_INFOr   r`  rQ  ÚencoderinfoÚencoderconfigr³   r_  rç   r  r€   r\   ÚWRITE_LIBTIFFrØ  rµ   rÜ  rÝ  rQ   r   ZExifrj  ra  rb  r}  r�  r‰  r   r¸  r¹  rè   rï   r²   rý   ru   Ú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_SIZErm   r  ÚSTRIPBYTECOUNTSrW   rr  ÚCOMPRESSION_INFO_REVrÖ  rÛ  ÚREFERENCEBLACKWHITErø   Ú
setdefaultrï  rð  rí  ÚTILEBYTECOUNTSr  ÚJPEGQUALITYrq  rc  r¾  ÚioÚUnsupportedOperationÚOSUBFILETYPEÚTRANSFERFUNCTIONÚSUBIFDÚ	itertoolsÚchainZLIBTIFF_COREr´  r€  rh   rq   rö   r  r  ra   ÚsortZ_getencoderrÂ  r   ZMAXBLOCKry  rz  Ú_saverì  Úsetattr)6rž  rN  r‘  rö  rS   rõ  rý  ÚbitsÚextrarÉ  rì   r  r	  ro  rÌ  rÀ  r  r»  r¼  Z
legacy_ifdZsupplied_tagsrý   Ziccr×   rÍ  Zinverted_imZpxrø  r÷  ZlutZcolormapÚcolorsrj   rû  r'  rü  Zim_strip_sizeZrows_per_stripZstrip_byte_countsZstrips_per_imageÚdefault_valueZ	blocklistr  r•  ÚtypesZattsr~   r  rŒ  r7  ÚencoderÚerrcoderÇ   ri  r2   r2   r6   r&  Ÿ  sÂ    









ü

úþö







*
&



ÿ
ÿþ
 


ú





ý
r&  c                   @  sè  e Zd Zg d¢Zh d£ZdSddddœdd	„Zdd
œdd„Zdd
œdd„Zdd
œdd„Zd d
œdd„Z	dddœdd„Z
dd
œdd„Zejfddddœdd„Zdd
œdd„Zddd œd!d"„Zdd
œd#d$„Zd%dd&œd'd(„Zddd)œd*d+„Zddd)œd,d-„Zdd
œd.d/„Zdd
œd0d1„Zed2ddd3œd4d5„ƒZdTddddd7œd8d9„Zddd:œd;d<„Zddd:œd=d>„Zddd:œd?d@„ZddddAœdBdC„Zddd:œdDdE„Zddd:œdFdG„Zdd
œdHdI„Z dd
œdJdK„Z!ddddLœdMdN„Z"dUdddddOœdPdQ„Z#dRS )VÚAppendingTiffWriter)r   r   r   r+   r-   r1   r   r   r+   r-   r1   r-   r1   r-   r+   r-   r1   >   i   r$   i  i  i	  r#   Fr�  rR   r}   )Úfnrµ  rT   c                 C  s€   |  t |ƒrR|| _d| _zt||r&dndƒ| _W qh tyN   t|dƒ| _Y qh0 nttt |ƒ| _d| _| j 	¡ | _
|  ¡  d S )NTzw+bzr+bF)r   r×   Úclose_fpÚopenr‡   rQ  r   r   rQ   r]  Ú	beginningÚsetup)rs   r0  rµ  r2   r2   r6   r‚   ó  s    zAppendingTiffWriter.__init__rƒ   c                 C  s¤   | j  | jtj¡ d | _d| _| j  d¡ | _}d|v | _	|sHd| _
d S d| _
|tvrbd}t|ƒ‚|  | t¡rtdnd¡ | j	r�| j  dtj¡ |  ¡  |  ¡  d S )	Nr   r-   ó   +TFzInvalid TIFF file headerrÞ   rÝ   )r‡   rc  r3  rÃ  rÆ  ÚwhereToWriteNewIFDOffsetÚoffsetOfNewPagerP  ÚIIMMrç   ÚisFirstrX   ÚRuntimeErrorÚ	setEndianrV   ræ   rÅ  ÚskipIFDsÚgoToEnd)rs   Úiimmrì   r2   r2   r6   r4    s"    
zAppendingTiffWriter.setupc                 C  sÀ   | j r
d S | j | j¡ | j d¡}|s,d S || jkrBd}t|ƒ‚| jrX| j dtj	¡ |  
| jrfdnd¡}|| j7 }| jd us„J ‚| j | j¡ |  || jr¢dnd¡ | j |¡ |  ¡  d S )Nr-   z1IIMM of new page doesn't match IIMM of first pager1   )r9  r‡   rc  r7  rP  r8  r:  rç   rÃ  rÅ  Ú_readr6  Ú_writeÚfixIFD)rs   r>  rì   Ú
ifd_offsetr2   r2   r6   Úfinalize  s$    

zAppendingTiffWriter.finalizec                 C  s   |   ¡  |  ¡  d S rU   )rC  r4  r„   r2   r2   r6   ÚnewFrame6  s    zAppendingTiffWriter.newFramec                 C  s   | S rU   r2   r„   r2   r2   r6   Ú	__enter__;  s    zAppendingTiffWriter.__enter__rŠ   )rt   rT   c                 G  s   | j r|  ¡  d S rU   )r1  rÇ  rw   r2   r2   r6   Ú__exit__>  s    zAppendingTiffWriter.__exit__r\   c                 C  s   | j  ¡ | j S rU   )r‡   r]  r7  r„   r2   r2   r6   r]  B  s    zAppendingTiffWriter.tell)ri  ÚwhencerT   c                 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Æ  r7  r‡   rc  r]  )rs   ri  rG  r2   r2   r6   rc  E  s    

zAppendingTiffWriter.seekc                 C  s^   | j  dtj¡ | j  ¡ }d|d  }d|  k r:dk rNn n| j  t|ƒ¡ | j  ¡ | _d S )Nr   r>   )r‡   rc  rÃ  ÚSEEK_ENDr]  ry  rQ   r7  )rs   rË  Z	pad_bytesr2   r2   r6   r=  R  s    
zAppendingTiffWriter.goToEndrq   )ÚendianrT   c                 C  sB   || _ | j › d�| _| j › d�| _| j › d�| jr6dnd | _d S )Nr;   r%  rl  rà   )rI  ZlongFmtZshortFmtrç   Ú	tagFormat)rs   rI  r2   r2   r6   r;  \  s    zAppendingTiffWriter.setEndianc                 C  s|   |   | jrdnd¡}|dkr8| j ¡ | jr.dnd | _qx| j |¡ |   | jrRdnd¡}| j || jrjdnd tj¡ q d S )Nr1   r-   r   r+   rU  r<   )r?  rç   r‡   r]  r6  rc  rÃ  rÅ  )rs   rB  Únum_tagsr2   r2   r6   r<  b  s    ÿzAppendingTiffWriter.skipIFDsr   r,  c                C  s   | j  |¡S rU   )r‡   ry  r-  r2   r2   r6   ry  o  s    zAppendingTiffWriter.write)Ú
field_sizerT   c                 C  s6   zddddœ| W S  t y0   d}t|ƒ‚Y n0 d S )Nr%  r;   rà   )r+   r-   r1   zoffset is not supported)r`  r:  )rs   rL  rì   r2   r2   r6   Ú_fmtr  s
    zAppendingTiffWriter._fmtc                 C  s&   t  | j|  |¡ | j |¡¡\}|S rU   )rÕ   r#  rI  rM  r‡   rP  )rs   rL  r~   r2   r2   r6   r?  y  s    ÿzAppendingTiffWriter._readc                 C  s
   |   d¡S ©Nr+   ©r?  r„   r2   r2   r6   Ú	readShort  s    zAppendingTiffWriter.readShortc                 C  s
   |   d¡S ©Nr-   rO  r„   r2   r2   r6   ÚreadLong‚  s    zAppendingTiffWriter.readLongrÚ   )Úbytes_writtenÚexpectedrT   c                 C  s,   | d ur(| |kr(d| › d|› �}t |ƒ‚d S )Nzwrote only z bytes but wanted )r:  )rS  rT  rì   r2   r2   r6   Ú_verify_bytes_written…  s    z)AppendingTiffWriter._verify_bytes_writtenr   )r~   rL  Únew_field_sizerT   c                 C  sJ   | j  | tj¡ |s|}| j  t | j|  |¡ |¡¡}|  	||¡ d S rU   )
r‡   rc  rÃ  rÅ  ry  rÕ   r$  rI  rM  rU  )rs   r~   rL  rV  rS  r2   r2   r6   Ú_rewriteLast‹  s    ÿz AppendingTiffWriter._rewriteLastrî   c                 C  s   |   |dd¡ d S )Nr+   r-   ©rW  r3  r2   r2   r6   ÚrewriteLastShortToLong–  s    z*AppendingTiffWriter.rewriteLastShortToLongc                 C  s   |   |d¡S rN  rX  r3  r2   r2   r6   ÚrewriteLastShort™  s    z$AppendingTiffWriter.rewriteLastShortc                 C  s   |   |d¡S rQ  rX  r3  r2   r2   r6   ÚrewriteLastLongœ  s    z#AppendingTiffWriter.rewriteLastLong)r~   rL  rT   c                 C  s0   | j  t | j|  |¡ |¡¡}|  ||¡ d S rU   )r‡   ry  rÕ   r$  rI  rM  rU  )rs   r~   rL  rS  r2   r2   r6   r@  Ÿ  s    ÿzAppendingTiffWriter._writec                 C  s   |   |d¡ d S rN  ©r@  r3  r2   r2   r6   Ú
writeShort¥  s    zAppendingTiffWriter.writeShortc                 C  s   |   |d¡ d S rQ  r\  r3  r2   r2   r6   Ú	writeLong¨  s    zAppendingTiffWriter.writeLongc                 C  s   |   ¡  | jr| j ¡  d S rU   )rC  r1  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rddnd}||k}	|	s�|   |¡| j	 }
|  
|
|¡ || jv �r| j ¡ }t dt |¡j|t |d¡|||¡ |	rî|  ||¡ | j || ¡ n$| j |
¡ |  ||¡ | j |¡ q|	r| j |tj¡ qd S )Nr1   r+   r<   r-   z;fixIFD: %s (%d) - type: %s (%d) - type size: %d - count: %drW  )r?  rç   r^  rÕ   r#  rJ  r‡   rP  Ú
fieldSizesr7  rW  ÚTagsr]  ra  rb  r   rö   r×   r   r_  Ú_fixOffsetsrc  rÃ  rÅ  )rs   rK  rj   rý   Z
field_typere  rL  Ú
total_sizerx  Úis_localri  Zcur_posr2   r2   r6   rA  °  s>    ÿ




ù
zAppendingTiffWriter.fixIFD)re  rL  rT   c                 C  sÊ   t |ƒD ]¼}|  |¡}|| j7 }d}| jr@|dv r@|dkr@d}n|dkrT|dkrTd}|r¸|dkrld	}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?  r7  rç   r:  rW  r‡   rc  rÃ  rÅ  r]  )rs   re  rL  rj   ri  rV  rì   Úrewindr2   r2   r6   ra  Ù  s$    


zAppendingTiffWriter._fixOffsets)re  ÚisShortÚisLongrT   c                 C  s$   |r
d}n|rd}nd}|   ||¡S )Nr+   r-   r   )ra  )rs   re  re  rf  rL  r2   r2   r6   Ú
fixOffsetsõ  s    zAppendingTiffWriter.fixOffsetsN)F)r   )FF)$r¬   r­   r®   r_  r`  r‚   r4  rC  rD  rE  rF  r]  r  rÆ  rc  r=  r;  r<  ry  rM  r?  rP  rR  ÚstaticmethodrU  rW  rY  rZ  r[  r@  r]  r^  rÇ  rA  ra  rg  r2   r2   r2   r6   r/  Õ  sB   	
 ÿ) ÿr/  c           
   	   C  sì   t | j dg ¡ƒ}t| dƒs,|s,t| ||ƒS |  ¡ }z¦t|ƒ�€}| g| D ]d}| | ¡}t|dƒshd|_t	|ddƒ}t
|ƒD ]*}	| |	¡ | ¡  t|||ƒ | ¡  q|||_qJW d   ƒ n1 sÄ0    Y  W |  |¡ n|  |¡ 0 d S )NÚappend_imagesr›  r	  r2   r   )r}  r  r_  r²   r&  r]  r/  Z_attach_default_encoderinfor	  ru   r^  rc  rj  rD  )
rž  rN  r‘  ri  Zcur_idxÚtfZimsr  Znfrr´   r2   r2   r6   Ú	_save_all	  s$    




(rk  z.tifz.tiffz
image/tiff)‹Ú
__future__r   r  r#  Úloggingrª  rÃ  rÕ   r  Ú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¬   ra  rë  r
  r  ræ   rä   r   rÜ  rÝ  rá  rÖ  rÙ  rÚ  r  rr  rã  rî  r  rè  ré  rØ  rê  r!  r  r  r  Z	PREDICTORró  rï  rð  rí  r  r"  râ  rà  Z
JPEGTABLESrÛ  r  r  r  r  rò  r  r¦  r  ZIMAGEJ_META_DATA_BYTE_COUNTSZIMAGEJ_META_DATArÕ  rø   r  ræ  rn   rä  rX   ru   r´  rZ   re   rp   r½   rÁ   rz   ra   rQ   rR   r¶   rÀ   rÃ   rØ   r\   Z
_IFDv2Baser³   r´   r×   r¼   r'  r�  ZImageFileDirectoryr�  r  r&  ÚBytesIOr/  rk  Zregister_openrý  Zregister_saveZregister_save_allZregister_extensionsZregister_mimer2   r2   r2   r6   Ú<module>)   s&   
î…~	
	     \    î  8  .