Ë
    ÚÍ:jÄ}  ã                   ó
  — d dl mZmZmZmZm	Z	 d dl
mZ d dlZd dlmZmZ d dlZd dlZd dlZd dlZdZdZdZdZd	Zd
Zd
ZdZdZdZdZdZdZ  ejB                  e"«      Z# G d„ de$«      Z%d„ Z&e dz   fd„Z'	 dddœd„Z(d„ Z)d„ Z*d„ Z+y)é    )ÚfixedToFloatÚfloatToFixedÚfloatToFixedToStrÚstrToFixedToFloatÚotRound)ÚsafeEvalN)ÚCounterÚdefaultdicti €  i @  i    é€   é@   éÀ   é?   é   iÿ  c                   ó8  — e Zd Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	i dfd	d
œd„Z
d„ Zd„ Zed„ «       Zed„ «       Zed„ «       Zd d„Zed!d	d
œd„«       Zed„ «       Zed d„«       Zed d„«       Zed d„«       Zed"d„«       Zed„ «       Zd„ Zd„ Zd„ Zd„ Zd#d„Zd„ Zd„ Zy)$ÚTupleVariationc                 óN   — |j                  «       | _        t        |«      | _        y ©N)ÚcopyÚaxesÚlistÚcoordinates)Úselfr   r   s      úz/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/fontTools/ttLib/tables/TupleVariation.pyÚ__init__zTupleVariation.__init__(   s   € Ø—I‘I“KˆŒ	Ü Ó,ˆÕó    c                 óÈ   — dj                  t        | j                  j                  «       D ��cg c]  \  }}|›d|›�‘Œ c}}«      «      }d|›d| j                  ›d�S c c}}w )Nú,ú=z<TupleVariation ú ú>)ÚjoinÚsortedr   Úitemsr   )r   ÚnameÚvaluer   s       r   Ú__repr__zTupleVariation.__repr__,   sP   € Ø�x‰xÜÀÇÁÇÁÓAR×S±°°ušt¡UÒ+ÓSÓTó
‰ò ,0°×1AÓ1AÐBÐBùó Ts   ®Ac                 ój   — | j                   |j                   k(  xr | j                  |j                  k(  S r   )r   r   )r   Úothers     r   Ú__eq__zTupleVariation.__eq__2   s+   € Ø×Ñ 5×#4Ñ#4Ñ4ÒP¸¿¹ÀeÇjÁjÑ9PÐPr   c                 ó²   — d | j                   vr
t        «       S t        t        | j                   «      D ��cg c]
  \  }}|€Œ	|‘Œ c}}«      }|r|S d S c c}}w r   )r   Ú	frozensetÚ	enumerate)r   ÚiÚpÚuseds       r   ÚgetUsedPointszTupleVariation.getUsedPoints5   sS   € à�t×'Ñ'Ñ'Ü“;ÐÜ¬	°$×2BÑ2BÓ(C×U¡  1ÀqÁ}š!ÓUÓVˆáˆtÐ% Ð%ùó Vs   ¶
A
ÁA
c                 ó:   — t        d„ | j                  D «       «      S )zÄReturns True if this TupleVariation has any visible impact.

        If the result is False, the TupleVariation can be omitted from the font
        without making any visible difference.
        c              3   ó$   K  — | ]  }|d u–— Œ
 y ­wr   © ©Ú.0Úcs     r   ú	<genexpr>z+TupleVariation.hasImpact.<locals>.<genexpr>C   s   è ø€ Ò; Q�1˜D”=Ñ;ùs   ‚)Úanyr   )r   s    r   Ú	hasImpactzTupleVariation.hasImpact=   s   € ô Ñ;¨$×*:Ñ*:Ô;Ó;Ð;r   c           	      ó
  — |j                  d«       |j                  «        |D ]µ  }| j                  j                  |«      }|€Œ!|\  }}}t	        |d«      }t        |d«      }||k(  r$||k(  r|j                  d|t        |d«      ¬«       n>d|fdt        |d«      fdt        |d«      fd	t        |d«      fg}	|j                  d|	«       |j                  «        Œ· d
}
t        | j                  «      D ]Ê  \  }}t        |«      t        k(  r<t        |«      dk(  r.|j                  d||d   |d   ¬«       |j                  «        d}
ŒTt        |«      t        k(  r'|j                  d||¬«       |j                  «        d}
Œ�|€Œ�t        j                  d«       |j!                  d|z  «       |j                  «        d}
ŒÌ |
s!|j!                  d«       |j                  «        |j#                  d«       |j                  «        y )NÚtupleç        Úcoordé   )Úaxisr%   r?   Úminr%   ÚmaxFé   Údeltar   é   )ÚptÚxÚyT)Úcvtr%   zbad delta formatzbad delta #%dz	no deltas)ÚbegintagÚnewliner   Úgetr@   rA   Ú	simpletagÚfl2strr,   r   Útyper;   ÚlenÚintÚlogÚerrorÚcommentÚendtag)r   ÚwriterÚaxisTagsr?   r%   ÚminValueÚmaxValueÚdefaultMinValueÚdefaultMaxValueÚattrsÚwrote_any_deltasr-   rC   s                r   ÚtoXMLzTupleVariation.toXMLE   sæ  € Ø�‰˜Ô Ø�‰ÔØò 	!ˆDØ—I‘I—M‘M $Ó'ˆEØÑ Ø,1Ñ)�˜% Ü"% e¨S£/�Ü"% e¨S£/�Ø˜Ò.°8¸Ò3NØ×$Ñ$ W°4¼vÀeÈRÓ?PÐ$ÕQð   ˜Ø¤ x°Ó 4Ð5Ø ¤&¨°Ó"3Ð4Ø¤ x°Ó 4Ð5ð	�Eð ×$Ñ$ W¨eÔ4Ø—‘Õ ð!	!ð" !ÐÜ! $×"2Ñ"2Ó3ò 	(‰HˆAˆuÜ�E‹{œeÒ#¬¨E«
°aªØ× Ñ  ¨Q°%¸±(¸eÀA¹hÐ ÔGØ—‘Ô Ø#'Ñ Ü�e“¤Ò#Ø× Ñ  ¨a°uÐ Ô=Ø—‘Ô Ø#'Ñ ØÑ"Ü—	‘	Ð,Ô-Ø—‘˜°Ñ2Ô3Ø—‘Ô Ø#'Ñ ð	(ñ  Ø�N‰N˜;Ô'Ø�N‰NÔØ�‰�gÔØ�‰Õr   c           	      ód  — |dk(  rw|d   }t        |d   d«      }t        |d«      }t        |d«      }t        |j                  d|«      d«      }t        |j                  d|«      d«      }	|||	f| j                  |<   y |dk(  r¯d	|v r<t        |d	   «      }
t        |d
   «      }t        |d   «      }||f| j                  |
<   y d|v r,t        |d   «      }t        |d   «      }|| j                  |<   y t        j                  ddj                  t        |j                  «       «      «      z  «       y y )Nr=   r?   r%   r>   r<   r@   rA   rC   rE   rF   rG   rH   zbad delta format: %sz, )Ústr2flr@   rA   rK   r   r   r   rQ   Úwarningr!   r"   Úkeys)r   r$   r[   Ú_contentr?   r%   rY   rZ   rW   rX   ÚpointrF   rG   rH   s                 r   ÚfromXMLzTupleVariation.fromXMLn   s$  € Ø�7Š?Ø˜‘=ˆDÜ˜5 ™>¨2Ó.ˆEÜ! %¨›oˆOÜ! %¨›oˆOÜ˜eŸi™i¨¨Ó?ÀÓDˆHÜ˜eŸi™i¨¨Ó?ÀÓDˆHØ'¨°Ð9ˆD�I‰I�dŠOØ�WŠ_Ø�u‰}Ü   t¡Ó-�Ü˜U 3™ZÓ(�Ü˜U 3™ZÓ(�Ø+,¨a¨&�× Ñ  Ò'Ø˜%‘Ü˜u U™|Ó,�Ü   w¡Ó0�Ø(-�× Ñ  Ò%ä—‘Ð2°T·Y±Y¼vÀeÇjÁjÃlÓ?SÓ5TÑTÕUð r   NT©ÚoptimizeSizec          	      óê  — t        | j                  j                  «       «      t        |«      k  s"J d| j                  j                  «       |f«       ‚g }g }|€$| j                  «       }|€y| j	                  |«      }| j                  |«      }|j                  |«      }	|	€t        }	|j                  |«       | j                  |«      }
|
�|	t        z  }	|j                  |
«       |r|	t        z  }	|j                  |«       |j                  | j                  |¬«      «       dj                  |«      }|j                  dt        j                   dt#        |«      |	«      «       dj                  |«      |fS )NzUnknown axis tag found.)r   r   re   r   r   ú>HH)Úsetr   ra   r0   ÚcompilePointsÚcompileCoordrK   ÚEMBEDDED_PEAK_TUPLEÚappendÚcompileIntermediateCoordÚINTERMEDIATE_REGIONÚPRIVATE_POINT_NUMBERSÚcompileDeltasr!   ÚinsertÚstructÚpackrO   )r   rV   ÚsharedCoordIndicesÚ	pointDatarf   Ú	tupleDataÚauxDataÚ
usedPointsr=   ÚflagsÚintermediateCoords              r   ÚcompilezTupleVariation.compile„   sa  € ô �4—9‘9—>‘>Ó#Ó$¬¨H«Ò5ð 	
Ø%Ø�I‰I�N‰NÓØð8
ó 	
Ð5ð ˆ	ØˆàÐØ×+Ñ+Ó-ˆJØÐ!ØØ×*Ñ*¨:Ó6ˆIà×!Ñ! (Ó+ˆØ"×&Ñ& uÓ-ˆØˆ=Ü'ˆEØ×Ñ˜UÔ#à ×9Ñ9¸(ÓCÐØÐ(ØÔ(Ñ(ˆEØ×ÑÐ.Ô/ñ ØÔ*Ñ*ˆEØ�N‰N˜9Ô%à�‰�t×)Ñ)°|Ð)ÓDÔEØ—(‘(˜7Ó#ˆà×Ñ˜œFŸK™K¨¬s°7«|¸UÓCÔDØ�x‰x˜	Ó" GÐ+Ð+r   c           
      óü   — g }| j                   }|D ]Y  }|j                  |«      }|€|j                  d«       Œ(|j                  t        j                  dt        |d   d«      «      «       Œ[ dj                  |«      S )Ns     ú>hrD   r>   r   )r   rK   rm   rs   rt   Úfl2fir!   )r   rV   Úresultr   r?   Útriples         r   rk   zTupleVariation.compileCoord¬   sr   € ØˆØ�y‰yˆØò 	GˆDØ—X‘X˜d“^ˆFØˆ~Ø—‘˜gÕ&à—‘œfŸk™k¨$´°f¸Q±iÀÓ0DÓEÕFð	Gð �x‰x˜ÓÐr   c           
      óà  — d}|D ]H  }| j                   j                  |d«      \  }}}t        |d«      }t        |d«      }||k7  s||k7  sŒFd} n |sy g }	g }
|D ]€  }| j                   j                  |d«      \  }}}|	j	                  t        j                  dt        |d«      «      «       |
j	                  t        j                  dt        |d«      «      «       Œ‚ dj                  |	|
z   «      S )NF©r<   r<   r<   r<   Tr~   r>   r   )	r   rK   r@   rA   rm   rs   rt   r   r!   )r   rV   Úneededr?   rW   r%   rX   rY   rZ   Ú	minCoordsÚ	maxCoordss              r   rn   z'TupleVariation.compileIntermediateCoord·   sò   € ØˆØò 	ˆDØ(,¯	©	¯©°d¸OÓ(LÑ%ˆH�e˜XÜ! %¨›oˆOÜ! %¨›oˆOØ˜OÒ+°¸_Ó1LØ�Ùð	ñ ØØˆ	Øˆ	Øò 	EˆDØ(,¯	©	¯©°d¸OÓ(LÑ%ˆH�e˜XØ×ÑœVŸ[™[¨¬u°X¸rÓ/BÓCÔDØ×ÑœVŸ[™[¨¬u°X¸rÓ/BÓCÕDð	Eð �x‰x˜	 IÑ-Ó.Ð.r   c           
      ó‚   — i }|}| D ]3  }t        t        j                  d|||dz    «      d   d«      ||<   |dz  }Œ5 ||fS )Nr~   rB   r   r>   )Úfi2flrs   Úunpack)rV   ÚdataÚoffsetr=   Úposr?   s         r   ÚdecompileCoord_zTupleVariation.decompileCoord_Ê   s[   € àˆØˆØò 	ˆDÜ¤§¡¨d°D¸¸sÀQ¹wÐ4GÓ HÈÑ KÈRÓPˆE�$‰KØ�1‰H‰Cð	ð �cˆzÐr   c                 ó’  — | syt        | «      } | j                  «        t        | «      }t        «       }|dk  r|j	                  |«       n+|j	                  |dz	  dz  «       |j	                  |dz  «       d}d}d}||k  rÆd}t        |«      }|j	                  d«       d }||k  r�||k  r|| |   }	|	|z
  }
|€d|
cxk  xr dk  nc }|r|
dkD  s|
dk  rnS|r|j	                  |
«       n(|j	                  |
dz	  «       |j	                  |
dz  «       |	}|dz  }|dz  }||k  r||k  rŒ||r	|dz
  ||<   n|dz
  t
        z  ||<   ||k  rŒÆ|S )Nó    r   é   éÿ   r   r   rD   )r   ÚsortrO   Ú	bytearrayrm   ÚPOINTS_ARE_WORDS)ÚpointsÚ	numPointsr€   ÚMAX_RUN_LENGTHrŒ   Ú	lastValueÚ	runLengthÚ	headerPosÚuseByteEncodingÚcurValuerC   s              r   rj   zTupleVariation.compilePointsÓ   sv  € ñ Øô �f“ˆØ�‰ŒÜ˜“Kˆ	ä“ˆð �tÒØ�M‰M˜)Õ$à�M‰M˜9¨™>¨TÑ1Ô2Ø�M‰M˜) dÑ*Ô+àˆØˆØˆ	Ø�IŠoØˆIä˜F›ˆIØ�M‰M˜!Ôà"ˆOØ˜	’/ i°>Ò&AØ! #™;�Ø  9Ñ,�Ø"Ð*Ø&'¨5Ö&8°DÔ&8�OÙ"¨°ª¸Àº	àñ #Ø—M‘M %Õ(à—M‘M %¨1¡*Ô-Ø—M‘M %¨$¡,Ô/Ø$�	Ø�q‘�Ø˜Q‘�	ð# ˜	’/ i°>Ó&Añ$ Ø$-°¡M��yÒ!à%.°¡]Ô6FÑ$F��yÑ!ð9 �I‹oð< ˆr   c                 óF  — |dv sJ ‚|}||   }|dz  }|t         z  dk7  r|t        z  dz  ||   z  }|dz  }|dk(  rt        | «      |fS g }t        |«      |k  rÅ||   }|dz  }|t        z  dz   }d}	|t         z  dk7  rt	        j                  d«      }
|dz  }nt	        j                  d«      }
|}|
j                  ||||z    «       t        j                  dk7  r|
j                  «        t        |
«      |k(  sJ ‚||z  }|j                  |
«       t        |«      |k  rŒÅg }d}|D ]  }||z  }|j                  |«       Œ |}~|D �ch c]  }|dk  s|| k\  sŒt        |«      ’Œ }}|r4t        j                  d	d
j                  t        |«      «      ›d|›d�«       ||fS c c}w )zJ(numPoints, data, offset, tableTag) --> ([point1, point2, ...], newOffset)©ÚcvarÚgvarrD   r   r�   ÚHrB   ÚBÚbigzpoint r   z out of range in 'z' table)r”   ÚPOINT_RUN_COUNT_MASKÚrangerO   ÚarrayÚ	frombytesÚsysÚ	byteorderÚbyteswapÚextendrm   ÚstrrQ   r`   r!   r"   )r–   rŠ   r‹   ÚtableTagrŒ   ÚnumPointsInDatar€   Ú	runHeaderÚnumPointsInRunrc   r•   Ú
pointsSizeÚabsoluteÚcurrentrC   r.   Ú	badPointss                    r   ÚdecompilePoints_zTupleVariation.decompilePoints_  sá  € ð Ð+Ñ+Ð+Ð+ØˆØ˜s™)ˆØˆq‰ˆØÔ.Ñ.°1Ò4Ø.Ô1EÑEÈ!ÑKÈdÐSVÉiÑWˆOØ�1‰HˆCØ˜aÒÜ˜)Ó$ cÐ*Ð*àˆÜ�&‹k˜OÒ+Ø˜S™	ˆIØ�1‰HˆCØ'Ô*>Ñ>À!ÑCˆNØˆEØÔ,Ñ,°Ò2ÜŸ™ SÓ)�Ø+¨aÑ/‘
äŸ™ SÓ)�Ø+�
Ø×Ñ˜T #¨¨jÑ(8Ð9Ô:Ü�}‰} Ò%Ø—‘Ô!ä�v“; .Ò0Ð0Ð0Ø�:ÑˆCà�M‰M˜&Ô!ô% �&‹k˜OÓ+ð* ˆØˆØò 	%ˆEØ�uÑˆGØ�O‰O˜GÕ$ð	%ð ˆØà%+ÖG ¨q°1ªu¸¸Y»”S˜•VÐGˆ	ÐGÙÜ�KŠKà—8‘8œF 9Ó-Õ.²ð:ôð ˜ˆ}Ðùò Hs   ÅFÅFc                 ó\  — g }g }| j                  «       dk(  r=| j                  D ]-  }|€Œ|j                  |d   «       |j                  |d   «       Œ/ n%| j                  D ]  }|€Œ|j                  |«       Œ t        «       }| j	                  |||¬«       | j	                  |||¬«       |S )NrB   r   rD   re   )ÚgetCoordWidthr   rm   r“   ÚcompileDeltaValues_)r   rf   ÚdeltaXÚdeltaYr6   Úbytearrs         r   rq   zTupleVariation.compileDeltasG  s½   € ØˆØˆØ×ÑÓ 1Ò$Ø×%Ñ%ò $�Ø�9ØØ—‘˜a ™dÔ#Ø—‘˜a ™dÕ#ñ	$ð ×%Ñ%ò !�Ø�9ØØ—‘˜aÕ ð!ô “+ˆØ× Ñ  ¨¸|Ð ÔLØ× Ñ  ¨¸|Ð ÔLØˆr   c                óÞ  — |€
t        «       }d}t        | «      }|r’||k  �r=| |   }|dk(  rt        j                  | ||«      }ncd|cxk  rdk  rn nt        j	                  | ||«      }n=d|cxk  rdk  rn nt        j                  | ||«      }nt        j                  | ||«      }||k  rŒ‹n±t        | «      t        | «      }}|dcxk(  r|k(  rn nt        j                  | ||«      }nud|cxk  r|cxk  rdk  rn nt        j	                  | ||d¬«      }nGd|cxk  r|cxk  rdk  rn nt        j                  | ||d¬«      }nt        j                  | ||d¬«      }||k(  s	J ||f«       ‚|S )aê  [value1, value2, value3, ...] --> bytearray

        Emits a sequence of runs. Each run starts with a
        byte-sized header whose 6 least significant bits
        (header & 0x3F) indicate how many values are encoded
        in this run. The stored length is the actual length
        minus one; run lengths are thus in the range [1..64].
        If the header byte has its most significant bit (0x80)
        set, all values in this run are zero, and no data
        follows. Otherwise, the header byte is followed by
        ((header & 0x3F) + 1) signed values.  If (header &
        0x40) is clear, the delta values are stored as signed
        bytes; if (header & 0x40) is set, the delta values are
        signed 16-bit integers.
        r   é€ÿÿÿr   é €ÿÿéÿ  Fre   )	r“   rO   r   ÚencodeDeltaRunAsZeroes_ÚencodeDeltaRunAsBytes_ÚencodeDeltaRunAsWords_ÚencodeDeltaRunAsLongs_r@   rA   )Údeltasr»   rf   rŒ   Ú	numDeltasr%   ÚminValÚmaxVals           r   r¸   z"TupleVariation.compileDeltaValues_Z  s€  € ð" ˆ?Ü“kˆGàˆÜ˜“Kˆ	áØ˜	“/Ø˜s™�Ø˜A’:Ü(×@Ñ@ÀÈÈgÓV‘CØ˜UÔ) cÕ)Ü(×?Ñ?ÀÈÈWÓU‘CØ˜uÔ-¨Õ-Ü(×?Ñ?ÀÈÈWÓU‘Cä(×?Ñ?ÀÈÈWÓU�Cð ˜	”/ô ! ›[¬#¨f«+�FˆFØ˜Ô$˜fÕ$Ü$×<Ñ<¸VÀSÈ'ÓR‘Ø˜Ô0 6Ô0¨SÕ0Ü$×;Ñ;Ø˜C °uð <ó ‘ð ˜6Ô4 VÔ4¨uÕ4Ü$×;Ñ;Ø˜C °uð <ó ‘ô %×;Ñ;Ø˜C °uð <ó �ð �iÒÐ1 # yÐ!1Ó1Ðàˆr   c                 óô   — |}t        | «      }||k  r| |   dk(  r|dz  }||k  r	| |   dk(  rŒ||z
  }|dk\  r#|j                  t        dz  «       |dz  }|dk\  rŒ#|r|j                  t        |dz
  z  «       |S )Nr   rD   r   r   )rO   rm   ÚDELTAS_ARE_ZERO)rÄ   r‹   r»   rŒ   rÅ   r™   s         r   rÀ   z&TupleVariation.encodeDeltaRunAsZeroes_‘  s‘   € àˆÜ˜“Kˆ	Ø�IŠo &¨¡+°Ò"2Ø�1‰HˆCð �IŠo &¨¡+°Ó"2à˜&‘Lˆ	Ø˜2ŠoØ�N‰Nœ?¨RÑ/Ô0Ø˜‰OˆIð ˜2‹oñ Ø�N‰Nœ?¨i¸!©mÑ<Ô=Øˆ
r   c           	      óÄ  — |}t        | «      }||k  r9| |   }d|cxk  rdk  sn n&|r|dk(  r|dz   |k  r| |dz      dk(  rn|dz  }||k  rŒ9||z
  }|dk\  rL|j                  d«       |j                  t        j                  d| ||dz    «      «       |dz  }|dz  }|dk\  rŒL|r<|j                  |dz
  «       |j                  t        j                  d| || «      «       |S )Nr½   r   r   rD   r   r   Úb)rO   rm   r«   r¦   )rÄ   r‹   r»   rf   rŒ   rÅ   r%   r™   s           r   rÁ   z%TupleVariation.encodeDeltaRunAsBytes_Ÿ  s   € àˆÜ˜“Kˆ	Ø�IŠoØ˜3‘KˆEØ˜EÔ( SÔ(Øñ Ø˜Q’JØ˜!‘G˜iÒ'Ø˜3 ™7‘O qÒ(àØ�1‰HˆCð' �I‹oð( ˜&‘Lˆ	Ø˜2ŠoØ�N‰N˜2ÔØ�N‰Nœ5Ÿ;™; s¨F°6¸FÀR¹KÐ,HÓIÔJØ�b‰LˆFØ˜‰OˆIð	 ˜2‹oñ
 Ø�N‰N˜9 q™=Ô)Ø�N‰Nœ5Ÿ;™; s¨F°6¸#Ð,>Ó?Ô@Øˆ
r   c                 ó¨  — |}t        | «      }||k  rS| |   }|r|dk(  rnF|r+d|cxk  rdk  r n n|dz   |k  rd| |dz      cxk  rdk  rn nnd|cxk  rdk  sn n|dz  }||k  rŒS||z
  }|dk\  rx|j                  t        dz  «       t        j                  d	| ||dz    «      }t        j
                  d
k7  r|j                  «        |j                  |«       |dz  }|dz  }|dk\  rŒx|rh|j                  t        |dz
  z  «       t        j                  d	| || «      }t        j
                  d
k7  r|j                  «        |j                  |«       |S )Nr   r½   r   rD   r¾   r¿   r   r   Úhr£   )rO   rm   ÚDELTAS_ARE_WORDSr¦   r¨   r©   rª   r«   ©	rÄ   r‹   r»   rf   rŒ   rÅ   r%   r™   Úas	            r   rÂ   z%TupleVariation.encodeDeltaRunAsWords_Â  sY  € àˆÜ˜“Kˆ	Ø�IŠoØ˜3‘KˆEñ  ¨¢
Øñ Ø˜UÔ) cÕ)Ø˜!‘G˜iÒ'Ø˜V C¨!¡G™_Ô3°Õ3àà˜eÔ, uÔ,Øà�1‰HˆCð= �I‹oð> ˜&‘Lˆ	Ø˜2ŠoØ�N‰NÔ+¨bÑ0Ô1Ü—‘˜C ¨°¸"±Ð!=Ó>ˆAÜ�}‰} Ò%Ø—
‘
”Ø�N‰N˜1ÔØ�b‰LˆFØ˜‰OˆIð ˜2‹oñ Ø�N‰NÔ+¨y¸1©}Ñ=Ô>Ü—‘˜C ¨¨sÐ!3Ó4ˆAÜ�}‰} Ò%Ø—
‘
”Ø�N‰N˜1ÔØˆ
r   c                 óD  — |}t        | «      }||k  r!| |   }|rd|cxk  rdk  rn nn|dz  }||k  rŒ!||z
  }|dk\  rx|j                  t        dz  «       t        j                  d| ||dz    «      }t        j
                  dk7  r|j                  «        |j                  |«       |dz  }|dz  }|dk\  rŒx|rh|j                  t        |dz
  z  «       t        j                  d| || «      }t        j
                  dk7  r|j                  «        |j                  |«       |S )Nr¾   r¿   rD   r   r   r-   r£   )rO   rm   ÚDELTAS_ARE_LONGSr¦   r¨   r©   rª   r«   rÏ   s	            r   rÃ   z%TupleVariation.encodeDeltaRunAsLongs_ö  s  € àˆÜ˜“Kˆ	Ø�IŠoØ˜3‘KˆEÙ ¨%Ô 8°5Õ 8ØØ�1‰HˆCð	 �I‹oð
 ˜&‘Lˆ	Ø˜2ŠoØ�N‰NÔ+¨bÑ0Ô1Ü—‘˜C ¨°¸"±Ð!=Ó>ˆAÜ�}‰} Ò%Ø—
‘
”Ø�N‰N˜1ÔØ�b‰LˆFØ˜‰OˆIð ˜2‹oñ Ø�N‰NÔ+¨y¸1©}Ñ=Ô>Ü—‘˜C ¨¨sÐ!3Ó4ˆAÜ�}‰} Ò%Ø—
‘
”Ø�N‰N˜1ÔØˆ
r   c                 óð  — g }|}| �t        |«      | k  �rLn|t        |«      k  �r<||   }|dz  }|t        z  dz   }|t        z  t        k(  r|j	                  dg|z  «       nÝ|t        z  t
        k(  rt        j                  d«      }|dz  }nB|t        z  t        k(  rt        j                  d«      }|dz  }nt        j                  d«      }|}|j                  ||||z    «       t        j                  dk7  r|j                  «        t        |«      |k(  sJ t        |«      |f«       ‚||z  }|j	                  |«       | �t        |«      | k  r�Œ+n|t        |«      k  r�Œ<| �t        |«      | k(  sJ ‚||fS )	z>(numDeltas, data, offset) --> ([delta, delta, ...], newOffset)rD   r   r-   é   rÍ   rB   rË   r£   )rO   ÚDELTA_RUN_COUNT_MASKÚDELTAS_SIZE_MASKrÉ   r«   rÒ   r¦   rÎ   r§   r¨   r©   rª   )	rÅ   rŠ   r‹   r€   rŒ   r¯   ÚnumDeltasInRunrÄ   Ú
deltasSizes	            r   ÚdecompileDeltas_zTupleVariation.decompileDeltas_  ss  € ð ˆØˆØ)2Ð)>Œc�&‹k˜IÔ%ÀCÌ#ÈdË)ÃOØ˜S™	ˆIØ�1‰HˆCØ'Ô*>Ñ>À!ÑCˆNØÔ,Ñ,´Ò@Ø—‘˜q˜c NÑ2Õ3àÔ 0Ñ0Ô5EÒEÜ"Ÿ[™[¨Ó-�FØ!/°!Ñ!3‘JØÔ"2Ñ2Ô7GÒGÜ"Ÿ[™[¨Ó-�FØ!/°!Ñ!3‘Jä"Ÿ[™[¨Ó-�FØ!/�JØ× Ñ   c¨C°*Ñ,<Ð!=Ô>Ü—=‘= EÒ)Ø—O‘OÔ%Ü˜6“{ nÒ4ÐS´s¸6³{ÀNÐ6SÓSÐ4Ø�zÑ!�Ø—‘˜fÔ%ð+ *3Ð)>Œc�&‹k˜IÕ%ÀCÌ#ÈdË)ÄOð, Ð ¤C¨£K°9Ò$<Ð<Ð<Ø˜ˆ}Ðr   c                 óZ   — d}| t         z  dk7  r||dz  z  }| t        z  dk7  r||dz  z  }|S )NrÔ   r   rB   )rl   ro   )rz   Ú	axisCountÚsizes      r   ÚgetTupleSize_zTupleVariation.getTupleSize_.  sD   € àˆØÔ'Ñ'¨AÒ-Ø�I ‘MÑ!ˆDØÔ'Ñ'¨AÒ-Ø�I ‘MÑ!ˆDØˆr   c                 óÎ   — t        d„ | j                  D «       d«      }|€yt        |«      t        t        fv ryt        |«      t
        u rt        |«      dk(  ryt        d|z  «      ‚)zmReturn 2 if coordinates are (x, y) as in gvar, 1 if single values
        as in cvar, or 0 if empty.
        c              3   ó&   K  — | ]	  }|€Œ|–— Œ y ­wr   r3   r4   s     r   r7   z/TupleVariation.getCoordWidth.<locals>.<genexpr>;  s   è ø€ ÒH ¸!¹-œ1ÑHùs   ‚ŠNr   rD   rB   zSinvalid type of delta; expected (int or float) number, or Tuple[number, number]: %r)Únextr   rN   rP   Úfloatr;   rO   Ú	TypeError)r   Ú
firstDeltas     r   r·   zTupleVariation.getCoordWidth7  sn   € ô ÑH d×&6Ñ&6ÔHÈ$ÓOˆ
ØÐØÜ�
Ó¤¤U˜|Ñ+ØÜ�
ÓœuÑ$¬¨Z«¸AÒ)=ØÜð(Ø*4ñ5ó
ð 	
r   c                 ó°   — |dk(  ry | j                  «       }| j                  D �cg c]   }|€d n|dk(  r||z  n|d   |z  |d   |z  f‘Œ" c}| _        y c c}w )Ng      ð?rD   r   )r·   r   )r   ÚscalarÚ
coordWidthÚds       r   ÚscaleDeltaszTupleVariation.scaleDeltasG  su   € Ø�SŠ=ØØ×'Ñ'Ó)ˆ
ð ×%Ñ%ö
ð ð �9ñ à#-°¢?�Q˜’Z¸¸1¹À¹ÈÈ!ÉÈvÉÐ8VñWò
ˆÕùò 
s   ¥%Ac                 óÈ   — | j                  «       }| j                  D �cg c]2  }|€d n+|dk(  rt        |«      nt        |d   «      t        |d   «      f‘Œ4 c}| _        y c c}w ©NrD   r   )r·   r   r   )r   ræ   rç   s      r   ÚroundDeltaszTupleVariation.roundDeltasT  sn   € Ø×'Ñ'Ó)ˆ
ð ×%Ñ%ö
ð ð �9ñ à#-°¢?”W˜Q”Z¼ÀÀ1Á»ÌÐPQÐRSÑPTËÐ8VñWò
ˆÕùò 
s   Ÿ7Ac                 ó6  — ddl m} | j                  «       dk(  rt        d«      ‚d | j                  v rgt        | j                  «      t        |«      k7  r,t        dt        | j                  «      t        |«      fz  «      ‚ || j                  ||«      | _        y y )Nr   )Ú	iup_deltarD   z3Only 'gvar' TupleVariation can have inferred deltasz(Expected len(origCoords) == %d; found %d)ÚfontTools.varLib.iuprí   r·   râ   r   rO   Ú
ValueError)r   Ú
origCoordsÚendPtsrí   s       r   ÚcalcInferredDeltasz!TupleVariation.calcInferredDeltas_  s‘   € Ý2à×ÑÓ 1Ò$ÜÐQÓRÐRØ�4×#Ñ#Ñ#Ü�4×#Ñ#Ó$¬¨J«Ò7Ü Ø>Ü˜4×+Ñ+Ó,¬c°*«oÐ>ñ?óð ñ  )¨×)9Ñ)9¸:ÀvÓNˆDÕð $r   c                 óè  — ddl m} |rt        j                  dt        «       d | j
                  v ry  || j
                  |||¬«      }d |v r§t        | j                  |«      }t        | j                  j                  «       «      }| j                  |«      \  }	}
t        |	«      t        |
«      z   }|j                  |«      \  }	}
t        |	«      t        |
«      z   }||k  r|j
                  | _        y y y )Nr   )Úiup_delta_optimizezMThe isComposite argument is deprecated and may be removed in a future version)Ú	tolerance)rî   rô   ÚwarningsÚwarnÚDeprecationWarningr   r   r   r"   ra   r|   rO   )r   rð   rñ   rõ   ÚisCompositerô   ÚdeltaOptÚvarOptrV   rw   rx   ÚunoptimizedLengthÚoptimizedLengths                r   ÚoptimizezTupleVariation.optimizel  sã   € Ý;áÜ�M‰MØ_Ü"ôð
 �4×#Ñ#Ñ#Øá%Ø×Ñ˜j¨&¸Iô
ˆð �8Ñä# D§I¡I¨xÓ8ˆFô ˜dŸi™iŸn™nÓ.Ó/ˆHØ!%§¡¨hÓ!7ÑˆI�wÜ # I£´°W³Ñ =ÐØ!'§¡°Ó!9ÑˆI�wÜ! )›n¬s°7«|Ñ;ˆOàÐ!2Ò2Ø#)×#5Ñ#5�Õ ð 3ð r   c                 ó(   — | j                  |«       | S r   )rè   )r   rå   s     r   Ú__imul__zTupleVariation.__imul__‰  s   € Ø×Ñ˜Ô Øˆr   c                 óð  — t        |t        «      st        S | j                  }t	        |«      }|j                  }t	        |«      |k7  rt        d«      ‚| j                  «       dk(  r>t        t        |«      |«      D ]$  \  }}||   }	 |d   |d   z   |d   |d   z   f||<   Œ& | S t        t        |«      |«      D ]"  \  }}||   }|�|�	||z   ||<   Œ|�Œ|€Œ|||<   Œ$ | S # t        $ r t        d«      ‚w xY w)Nz7cannot sum TupleVariation deltas with different lengthsrB   r   rD   z+cannot sum gvar deltas with inferred points)
Ú
isinstancer   ÚNotImplementedr   rO   rï   r·   Úzipr¥   râ   )r   r(   Údeltas1ÚlengthÚdeltas2r-   Úd2Úd1s           r   Ú__iadd__zTupleVariation.__iadd__�  s/  € Ü˜%¤Ô0Ü!Ð!Ø×"Ñ"ˆÜ�W“ˆØ×#Ñ#ˆÜˆw‹<˜6Ò!ÜÐVÓWÐWð ×ÑÓ 1Ò$ÜœU 6›]¨GÓ4ò T‘��2Ø˜Q‘Z�ðTØ"$ Q¡%¨"¨Q©%¡-°°A±¸¸A¹±Ð!?�G˜A’JðTð ˆô œU 6›]¨GÓ4ò $‘��2Ø˜Q‘Z�Ø�> b nØ!# b¡�G˜A’JØ‘Z B¡NØ!#�G˜A’Jð$ð ˆøô !ò TÜ$Ð%RÓSÐSðTús   ÂC Ã C5©Tr   )r   )g      à?F) Ú__name__Ú
__module__Ú__qualname__r   r&   r)   r0   r9   r]   rd   r|   rk   rn   Ústaticmethodr�   rj   rµ   rq   r¸   rÀ   rÁ   rÂ   rÃ   rÙ   rÝ   r·   rè   rë   rò   rþ   r   r
  r3   r   r   r   r   '   sE  „ ò-òCòQò&ò<ò'òRVð. ,.¸ð&,ØOSô&,òP	 ò/ð& ñó ðð ñ>ó ð>ð@ ñ0ó ð0ódð& ð4À$ó 4ó ð4ðl ñó ðð ò ó ð ðD ò1ó ð1ðf òó ðð2 òó ðð: ñó ðò
ò 
ò	
òOó6ò:ór   r   c                 ó€   — g }t        |«      D ]-  }t        j                  | ||«      \  }}|j                  |«       Œ/ |S r   )r¥   r   r�   rm   )rV   ÚsharedTupleCountrŠ   r‹   r€   Ú_Úts          r   ÚdecompileSharedTuplesr  ¯  sG   € Ø€FÜÐ#Ó$ò ˆÜ"×2Ñ2°8¸TÀ6ÓJ‰	ˆˆ6Ø�‰�aÕðð €Mr   rD   c                 óÜ   — t        «       }|D ]   }|j                  | «      }||xx   dz  cc<   Œ" t        |j                  |«      d„ ¬«      }|D �cg c]  }|d   dkD  sŒ|d   ‘Œ c}S c c}w )NrD   c                 ó   — | d    | d   fS rê   r3   )Úitems    r   ú<lambda>z%compileSharedTuples.<locals>.<lambda>Â  s   € ˜4 ™7˜( D¨¡GÐ,€ r   ©Úkeyr   )r	   rk   r"   Úmost_common)rV   Ú
variationsÚMAX_NUM_SHARED_COORDSÚ
coordCountÚvarr=   ÚsharedCoordsr6   s           r   ÚcompileSharedTuplesr!  ·  s|   € ô “€JØò ˆØ× Ñ  Ó*ˆØ�5Ó˜QÑÔðô
 Ø×ÑÐ4Ó5Ù,ô€Lð 'Ö3�Q¨!¨A©$°«(ˆAˆa‹DÒ3Ð3ùÒ3s   ÁA)ÁA)Tre   c                óP  ‡‡— ~g }g }d }t        t        «      }	| D ]D  }
|
j                  «       }|€Œ|	|xx   dz  cc<   |j                  |
«       |j                  |«       ŒF |} ~| syt	        | d   j
                  «      Št        ˆfd„| D «       «      sJ d«       ‚|	D �ci c]  }|t        j                  |«      “Œ c}Št	        | «      }g }g }|r@ˆfd„}t        |	j                  «       |¬«      d   }|j                  ‰|   «       |t        z  }|D �cg c]  }||k7  r‰|   nd‘Œ }}t        | |«      D ]?  \  }
}|
j                  ||||¬	«      \  }}|j                  |«       |j                  |«       ŒA dj                  |«      }dj                  |«      }|||fS c c}w c c}w )
NrD   )r   r   r   r   c              3   óN   •K  — | ]  }t        |j                  «      ‰k(  –— Œ y ­wr   )rO   r   )r5   ÚvÚns     €r   r7   z-compileTupleVariationStore.<locals>.<genexpr>ç  s$   øè ø€ ò Ø$%ŒˆA�M‰MÓ˜aÕñùs   ƒ"%z#Variation sets have different sizesc                 ó@   •— | d   }| d   }t        ‰|   «      |dz
  z  S )Nr   rD   )rO   )ÚpnÚpointSetÚcountÚcompiledPointss      €r   r  z'compileTupleVariationStore.<locals>.keyõ  s.   ø€ Ø˜!‘uˆHØ�q‘EˆEÜ�~ hÑ/Ó0°E¸A±IÑ>Ð>r   r  r   )rv   rf   )r
   rP   r0   rm   rO   r   Úallr   rj   rA   r#   ÚTUPLES_SHARE_POINT_NUMBERSr  r|   r!   )r  Ú
pointCountrV   ÚsharedTupleIndicesÚuseSharedPointsrf   ÚnewVariationsÚ
pointDatasÚsharedPointsÚpointSetCountr$  r•   r(  ÚtupleVariationCountÚtuplesrŠ   r  r.   Ú	thisTupleÚthisDatar*  r%  s                       @@r   ÚcompileTupleVariationStorer8  Ç  sú  ù€ ð 	Ø€MØ€Jà€Lô  ¤Ó$€MØò "ˆØ—‘Ó"ˆØˆ>ØØ�fÓ Ñ"ÓØ×Ñ˜QÔØ×Ñ˜&Õ!ð"ð €JØáØäˆJ�q‰M×%Ñ%Ó&€AÜó Ø)3ôô ð -à,ó-ð ð
 JWöØ=Eˆ”.×.Ñ.¨xÓ8Ñ8ò€Nô ˜j›/ÐØ€FØ€Dáô	?ô
 ˜=×.Ñ.Ó0°cÔ:¸1Ñ=ˆà�‰�N <Ñ0Ô1ØÔ9Ñ9Ðð
 !öàð #)¨LÒ"8ˆ�vÒ¸cÑAð€Jð ô
 �J 
Ó+ò ‰ˆˆ1ØŸi™iØÐ(°AÀLð (ó 
Ñˆ	�8ð 	�‰�iÔ Ø�‰�HÕðð �X‰X�fÓ€FØ�8‰8�D‹>€DØ ¨Ð,Ð,ùòIùò*s   ÂFÄF#c                 ó€  — t        |«      }g }	|t        z  dk7  rt        j                  |||| «      \  }
}ng }
t	        |t
        z  «      D ]q  }t        j                  d|||dz    «      \  }}t        j                  ||«      }||||z    }||||z    }|	j                  t        |||
| |||«      «       ||z  }||z  }Œs |	S )Nr   rh   rÔ   )rO   r,  r   rµ   r¥   ÚTUPLE_COUNT_MASKrs   r‰   rÝ   rm   ÚdecompileTupleVariation_)r­   rV   r4  r-  ÚsharedTuplesrŠ   rŒ   ÚdataPosÚnumAxesr€   r2  r  ÚdataSizerz   Ú	tupleSizerw   ÚpointDeltaDatas                    r   ÚdecompileTupleVariationStorerB    sø   € ô �(‹m€GØ€FØÔ8Ñ8¸QÒ>Ü .× ?Ñ ?Ø˜˜g xó!
Ñˆ‘gð ˆÜÐ&Ô)9Ñ9Ó:ò ˆÜ Ÿ-™-¨¨t°C¸#À¹'Ð/BÓC‰ˆ�%Ü"×0Ñ0°¸Ó@ˆ	Ø˜˜s Y™Ð/ˆ	Ø˜g¨°(Ñ(:Ð;ˆØ�‰Ü$ØØØØØØØóô
	
ð 	ˆyÑˆØ�8Ñ‰ð#ð$ €Mr   c                 ó¨  — |dv sJ |«       ‚t        j                  d|dd «      d   }d}|t        z  dk(  r||t        z     }	nt        j                  |||«      \  }	}|t        z  dk7  r5t        j                  |||«      \  }
}t        j                  |||«      \  }}nt        |	«      \  }
}i }|D ]  }|
|   |	|   ||   f}|dk7  sŒ|||<   Œ d}|t        z  dk7  rt        j                  | |||«      \  }}n|}d g| z  }|dk(  rLt        j                  t        |«      ||«      \  }}t        ||«      D ]  \  }}d|cxk  r| k  sŒn Œ|||<   Œ nw|dk(  rrt        j                  t        |«      ||«      \  }}t        j                  t        |«      ||«      \  }}t        |||«      D ]  \  }}}d|cxk  r| k  sŒn Œ||f||<   Œ t	        ||«      S )	Nrž   z>HrB   rÔ   r   rƒ   rŸ   r    )rs   r‰   rl   ÚTUPLE_INDEX_MASKr   r�   ro   ÚinferRegion_rp   rµ   rÙ   rO   r  )r-  r<  r2  r­   rV   rŠ   rw   rz   rŒ   ÚpeakÚstartÚendr   r?   Úregionr•   rÄ   Ú
deltas_cvtr.   rC   Údeltas_xÚdeltas_yrF   rG   s                           r   r;  r;  9  s  € ð Ð'Ñ'Ð1¨Ó1Ð'Ü�M‰M˜$  Q q 	Ó*¨1Ñ-€EØ
€CØÔ#Ñ#¨Ò)Ø˜EÔ$4Ñ4Ñ5‰ä"×2Ñ2°8¸TÀ3ÓG‰	ˆˆcØÔ#Ñ#¨Ò)Ü#×3Ñ3°H¸dÀCÓH‰
ˆˆsÜ!×1Ñ1°(¸DÀ#ÓF‰ˆ‰Sä! $Ó'‰
ˆˆsØ€DØò  ˆØ�t‘˜d 4™j¨#¨d©)Ð3ˆØ�_Ó$ØˆD�ŠJð ð €CØÔ%Ñ%¨!Ò+Ü$×5Ñ5Ø˜	 3¨ó
‰ˆ‘ð ˆàˆV�jÑ €Fà�6ÒÜ(×9Ñ9¼#¸f»+ÀyÐRUÓV‰ˆ
�CÜ˜F JÓ/ò 	"‰HˆAˆuØ�AÔ"˜
Ö"Ø!��q’	ñ	"ð 
�VÒ	Ü&×7Ñ7¼¸F»ÀYÐPSÓT‰ˆ�#Ü&×7Ñ7¼¸F»ÀYÐPSÓT‰ˆ�#Ü˜6 8¨XÓ6ò 	#‰GˆAˆq�!Ø�AÔ"˜
Ö"Ø ˜F��q’	ð	#ô ˜$ Ó'Ð'r   c                 ó~   — i i }}| j                  «       D ]#  \  }}t        |d«      ||<   t        |d«      ||<   Œ% ||fS )aî  Infer start and end for a (non-intermediate) region

    This helper function computes the applicability region for
    variation tuples whose INTERMEDIATE_REGION flag is not set in the
    TupleVariationHeader structure.  Variation tuples apply only to
    certain regions of the variation space; outside that region, the
    tuple has no effect.  To make the binary encoding more compact,
    TupleVariationHeaders can omit the intermediateStartTuple and
    intermediateEndTuple fields.
    r<   )r#   r@   rA   )rF  rG  rH  r?   r%   s        r   rE  rE  g  sP   € ð �Rˆ3€EØ—z‘z“|ò $‰ˆˆeÜ˜% “oˆˆd‰Ü˜˜s“OˆˆDŠ	ð$ð �3ˆ<Ðr   r  ),ÚfontTools.misc.fixedToolsr   rˆ   r   r   r   rM   r   r_   r   ÚfontTools.misc.textToolsr   r¦   Úcollectionsr	   r
   Úloggingrs   r¨   rö   rl   ro   rp   rÉ   rÎ   rÒ   rÖ   rÕ   r”   r¤   r,  r:  rD  Ú	getLoggerr  rQ   Úobjectr   r  r!  r8  rB  r;  rE  r3   r   r   ú<module>rT     sÓ   ð÷õ õ .Û ß ,Û Û Û 
Û ð
 Ð ØÐ ØÐ à€ØÐ ØÐ ØÐ ØÐ àÐ ØÐ à#Ð ØÐ ØÐ à€g×Ñ˜Ó!€ôE
�Vô E
òPð 1AÀ1Ñ0Dó4ð* ðH-ð ôH-òV$òN+(ó\r   