
    h}                        S SK JrJrJrJrJ	r	  S SK
Jr  S SKrS SKJrJr  S SKrS SKrS SKrS SKrSrSrSrSrS	rS
rS
rSrSrSrSrSrSr \RB                  " \"5      r# " S S\$5      r%S r&\ S-   4S jr' SSS.S jjr(S r)S r*S r+g)    )fixedToFloatfloatToFixedfloatToFixedToStrstrToFixedToFloatotRound)safeEvalN)Counterdefaultdicti   i @  i       @      ?      i  c                   T   \ rS rSrS rS rS rS rS rS r	S r
0 S	4S
S.S jjrS rS r\S 5       r\S 5       r\S 5       rS"S jr\S#S
S.S jj5       r\S 5       r\S"S j5       r\S"S j5       r\S"S j5       r\S$S j5       r\S 5       rS rS rS rS rS%S jrS rS  r S!r!g	)&TupleVariation'   c                 N    UR                  5       U l        [        U5      U l        g N)copyaxeslistcoordinates)selfr   r   s      W/var/www/html/env/lib/python3.13/site-packages/fontTools/ttLib/tables/TupleVariation.py__init__TupleVariation.__init__(   s    IIK	,    c                     SR                  [        U R                  R                  5        VVs/ s H  u  pU< SU< 3PM     snn5      5      nSU< SU R                  < S3$ s  snnf )N,=z<TupleVariation  >)joinsortedr   itemsr   )r   namevaluer   s       r   __repr__TupleVariation.__repr__,   sT    xxARSARtU+ARST
 ,01A1ABB Ts   A$c                 t    U R                   UR                   :H  =(       a    U R                  UR                  :H  $ r   )r   r   )r   others     r   __eq__TupleVariation.__eq__2   s+    5#4#44Pejj9PPr   c                     S U R                   ;  a
  [        5       $ [        [        U R                   5       VVs/ s H  u  pUc  M
  UPM     snn5      nU(       a  U$ S $ s  snnf r   )r   	frozenset	enumerate)r   ipuseds       r   getUsedPointsTupleVariation.getUsedPoints5   sU    t''';	$2B2B(CU(Cq!(CUVt%% Vs   	A
A
c                 :    [        S U R                   5       5      $ )zReturns 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   (   #    U  H  oS Lv   M
     g 7fr    .0cs     r   	<genexpr>+TupleVariation.hasImpact.<locals>.<genexpr>C   s     ;*:QD=*:   )anyr   )r   s    r   	hasImpactTupleVariation.hasImpact=   s     ;$*:*:;;;r   c           	         UR                  S5        UR                  5         U H  nU R                  R                  U5      nUc  M#  Uu  pTn[	        US5      n[        US5      nXW:X  a!  Xh:X  a  UR                  SU[        US5      S9  O>SU4S[        US5      4S[        US5      4S	[        US5      4/n	UR                  SU	5        UR                  5         M     S
n
[        U R                  5       H  u  p[        U5      [        :X  a:  [        U5      S:X  a+  UR                  SXS   US   S9  UR                  5         Sn
MR  [        U5      [        :X  a$  UR                  SXS9  UR                  5         Sn
M  Uc  M  [        R                  S5        UR!                  SU-  5        UR                  5         Sn
M     U
(       d!  UR!                  S5        UR                  5         UR#                  S5        UR                  5         g )Ntuple        coord   )axisr'   rG   minr'   maxF   deltar      )ptxyT)cvtr'   zbad delta formatzbad delta #%dz	no deltas)begintagnewliner   getrH   rI   	simpletagfl2strr0   r   typerC   lenintlogerrorcommentendtag)r   writeraxisTagsrG   r'   minValuemaxValuedefaultMinValuedefaultMaxValueattrswrote_any_deltasr1   rK   s                r   toXMLTupleVariation.toXMLE   s    DIIMM$'E ,1)"%eS/"%eS/.83N$$W4veR?P$Q  x 45 &"34x 45	E $$We4 ! " !!$"2"23HAE{e#E
a  Q(eAh G #' e#  a = #' "		,-23 #'  4  NN;'NNgr   c           	      j   US:X  av  US   n[        US   S5      n[        US5      n[        US5      n[        UR                  SU5      S5      n[        UR                  SU5      S5      n	XU	4U R                  U'   g US:X  a  S	U;   a;  [        US	   5      n
[        US
   5      n[        US   5      nX4U R                  U
'   g SU;   a+  [        US   5      n[        US   5      nXPR                  U'   g [        R                  SSR                  [        UR                  5       5      5      -  5        g g )NrE   rG   r'   rF   rD   rH   rI   rK   rM   rN   rO   rP   zbad delta format: %sz, )str2flrH   rI   rS   r   r   r   rY   warningr#   r$   keys)r   r&   rc   _contentrG   r'   ra   rb   r_   r`   pointrN   rO   rP   s                 r   fromXMLTupleVariation.fromXMLn   s   7?=D5>2.E!%oO!%oOeii?DHeii?DH'9DIIdOW_u} t-U3Z(U3Z(+,&  '%uU|, w0(-  %2TYYvejjl?S5TTU r   NToptimizeSizec          	         [        U R                  R                  5       5      [        U5      ::  d"   SU R                  R                  5       U45       e/ n/ nUc%  U R                  5       nUc  gU R	                  U5      nU R                  U5      nUR                  U5      n	U	c  [        n	UR                  U5        U R                  U5      n
U
b  U	[        -  n	UR                  U
5        U(       a  U	[        -  n	UR                  U5        UR                  U R                  US95        SR                  U5      nUR                  S[        R                   " S[#        U5      U	5      5        SR                  U5      U4$ )NzUnknown axis tag found.)r   r   ro   r   r   >HH)setr   rj   r4   compilePointscompileCoordrS   EMBEDDED_PEAK_TUPLEappendcompileIntermediateCoordINTERMEDIATE_REGIONPRIVATE_POINT_NUMBERScompileDeltasr#   insertstructpackrW   )r   r^   sharedCoordIndices	pointDatarp   	tupleDataauxData
usedPointsrE   flagsintermediateCoords              r   compileTupleVariation.compile   sa    499>>#$H5 	
%IINN8
 	
5 	++-J!**:6I!!(+"&&u-='EU# 99(C(((E./ **ENN9%t))|)DE((7#FKKs7|UCDxx	"G++r   c           
         / nU R                   nU H]  nUR                  U5      nUc  UR                  S5        M*  UR                  [        R                  " S[        US   S5      5      5        M_     SR                  U5      $ )Ns     >hrL   rF   r   )r   rS   rw   r}   r~   fl2fir#   )r   r^   resultr   rG   triples         r   ru   TupleVariation.compileCoord   sk    yyDXXd^F~g&fkk$fQi0DEF  xxr   c           
         SnU HH  nU R                   R                  US5      u  pEn[        US5      n[        US5      nXG:w  d  Xh:w  d  MF  Sn  O   U(       d  g / n	/ n
U H  nU R                   R                  US5      u  pEnU	R	                  [
        R                  " S[        US5      5      5        U
R	                  [
        R                  " S[        US5      5      5        M     SR                  X-   5      $ )NFrD   rD   rD   rD   Tr   rF   r   )	r   rS   rH   rI   rw   r}   r~   r   r#   )r   r^   neededrG   r_   r'   r`   ra   rb   	minCoords	maxCoordss              r   rx   'TupleVariation.compileIntermediateCoord   s    D(,		dO(L%HX!%oO!%oO+1L  		D(,		dO(L%HXV[[uXr/BCDV[[uXr/BCD  xx	-..r   c           
          0 nUnU  H3  n[        [        R                  " SXUS-    5      S   S5      X5'   US-  nM5     X44$ )Nr   rJ   r   rF   )fi2flr}   unpack)r^   dataoffsetrE   posrG   s         r   decompileCoord_TupleVariation.decompileCoord_   sP    DdDsQw4G H KRPEK1HC  zr   c                    U (       d  g[        U 5      n U R                  5         [        U 5      n[        5       nUS:  a  UR	                  U5        O+UR	                  US-	  S-  5        UR	                  US-  5        SnSnSnXA:  a  Sn[        U5      nUR	                  S5        S nXA:  a  Xc::  a  X   n	X-
  n
Uc  SU
s=:*  =(       a    S:*  Os  nU(       a  U
S:  d  U
S:  a  OYU(       a  UR	                  U
5        O(UR	                  U
S-	  5        UR	                  U
S-  5        U	nUS-  nUS-  nXA:  a  Xc::  a  M  U(       a  US-
  X''   OUS-
  [
        -  X''   XA:  a  M  U$ )N    r         r   r   rL   )r   sortrW   	bytearrayrw   POINTS_ARE_WORDS)points	numPointsr   MAX_RUN_LENGTHr   	lastValue	runLength	headerPosuseByteEncodingcurValuerK   s              r   rt   TupleVariation.compilePoints   se     fK	 tMM)$MM9>T12MM)d*+	oIFIMM!"O/i&A!; ,"*&'5&8&8D&8O"	 #MM%(MM%1*-MM%$,/$	qQ	# /i&A$ $-M!%.]6F$F!9 o< r   c                 h   US;   d   eUnX   nUS-  nU[         -  S:w  a  U[        -  S-  X   -  nUS-  nUS:X  a  [        U 5      U4$ / n[        U5      U:  a  X   nUS-  nU[        -  S-   nSn	U[         -  S:w  a  [        R                  " S5      n
US-  nO[        R                  " S5      n
UnU
R                  XXK-    5        [        R                  S:w  a  U
R                  5         [        U
5      U:X  d   eXK-  nUR                  U
5        [        U5      U:  a  M  / nSnU H  nX-  nUR                  U5        M     UnAU Vs1 s H  oS:  d  X:  d  M  [        U5      iM     nnU(       a6  [        R                  S	S
R                  [        U5      5      < SU< S35        Xd4$ s  snf )zJ(numPoints, data, offset, tableTag) --> ([point1, point2, ...], newOffset)cvargvarrL   r   r   HrJ   Bbigzpoint r   z out of range in 'z' table)r   POINT_RUN_COUNT_MASKrangerW   array	frombytessys	byteorderbyteswapextendrw   strrY   ri   r#   r$   )r   r   r   tableTagr   numPointsInDatar   	runHeadernumPointsInRunrl   r   
pointsSizeabsolutecurrentrK   r2   	badPointss                    r   decompilePoints_TupleVariation.decompilePoints_  s    ++++)q..14.1EE!KdiWO1HCa)$c**&kO+	I1HC'*>>!CNE,,2S)+a/
S)+
T(89:}}%!v;.000CMM&!% &kO+* EGOOG$  %+GV1uVSVV	GKK88F9-.: } Hs   F/F/c                 ^   / n/ nU R                  5       S:X  aA  U R                   H0  nUc  M  UR                  US   5        UR                  US   5        M2     O)U R                   H  nUc  M  UR                  U5        M     [        5       nU R	                  X%US9  U R	                  X5US9  U$ )NrJ   r   rL   ro   )getCoordWidthr   rw   r   compileDeltaValues_)r   rp   deltaXdeltaYr;   bytearrs         r   r{   TupleVariation.compileDeltasG  s    1$%%9ad#ad#	 & %%9a  & +  | L  | Lr   c                   Uc
  [        5       nSn[        U 5      nU(       a  X4:  a  X   nUS:X  a  [        R                  XU5      nOdSUs=::  a  S::  a  O  O[        R	                  XU5      nO=SUs=::  a  S::  a  O  O[        R                  XU5      nO[        R                  XU5      nX4:  a  M  O[        U 5      [        U 5      pvUSs=:X  a  U:X  a  O  O[        R                  XU5      nOoSUs=::  a  Us=::  a  S::  a  O  O[        R	                  XUSS9nOBSUs=::  a  Us=::  a  S::  a  O  O[        R                  XUSS9nO[        R                  XUSS9nX4:X  d   X445       eU$ )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      Fro   )	r   rW   r   encodeDeltaRunAsZeroes_encodeDeltaRunAsBytes_encodeDeltaRunAsWords_encodeDeltaRunAsLongs_rH   rI   )deltasr   rp   r   	numDeltasr'   minValmaxVals           r   r   "TupleVariation.compileDeltaValues_Z  se   " ?kGK	/A:(@@gVCU)c)(??WUCu--(??WUC(??WUC / ![#f+F$f$$<<V'R060S0$;;u <  64V4u4$;;u <  %;;u <  1#!11r   c                    Un[        U 5      nX4:  a  X   S:X  a  US-  nX4:  a
  X   S:X  a  M  X1-
  nUS:  a%  UR                  [        S-  5        US-  nUS:  a  M%  U(       a  UR                  [        US-
  -  5        U$ )Nr   rL   r   r   )rW   rw   DELTAS_ARE_ZERO)r   r   r   r   r   r   s         r   r   &TupleVariation.encodeDeltaRunAsZeroes_  s    K	o&+"21HC o&+"2L	2oNN?R/0OI 2o NN?i!m<=
r   c           	         Un[        U 5      nXE:  aB  X   nSUs=::  a  S::  d  O  O.U(       a  US:X  a  US-   U:  a  XS-      S:X  a  OUS-  nXE:  a  MB  XA-
  nUS:  aN  UR                  S5        UR                  [        R                  " SXUS-    5      5        US-  nUS-  nUS:  a  MN  U(       a<  UR                  US-
  5        UR                  [        R                  " SXU 5      5        U$ )Nr   r   r   rL   r   r   b)rW   rw   r   r   )r   r   r   rp   r   r   r'   r   s           r   r   %TupleVariation.encodeDeltaRunAsBytes_  s    K	oKEE(S( QJ!Gi'7Oq(1HC' o( L	2oNN2NN5;;sFFRK,HIJbLFOI	 2o
 NN9q=)NN5;;sF#,>?@
r   c                    Un[        U 5      nXE:  ad  X   nU(       a  US:X  a  ORU(       a/  SUs=::  a  S::  a"  O  OUS-   U:  a  SXS-      s=::  a  S::  a  O  OOSUs=::  a  S::  d  O  OUS-  nXE:  a  Md  XA-
  nUS:  a{  UR                  [        S-  5        [        R                  " S	XUS-    5      n[        R
                  S
:w  a  UR                  5         UR                  U5        US-  nUS-  nUS:  a  M{  U(       ai  UR                  [        US-
  -  5        [        R                  " S	XU 5      n[        R
                  S
:w  a  UR                  5         UR                  U5        U$ )Nr   r   r   rL   r   r   r   r   hr   )rW   rw   DELTAS_ARE_WORDSr   r   r   r   r   	r   r   r   rp   r   r   r'   r   as	            r   r   %TupleVariation.encodeDeltaRunAsWords_  sK   K	oKE 
 U)c)!Gi'V!G_33e,u,1HC= o> L	2oNN+b01C"!=>A}}%

NN1bLFOI 2o NN+y1}=>Cs!34A}}%

NN1
r   c                 d   Un[        U 5      nXE:  a(  X   nU(       a  SUs=::  a  S::  a  O  OOUS-  nXE:  a  M(  XA-
  nUS:  a{  UR                  [        S-  5        [        R                  " SXUS-    5      n[        R
                  S:w  a  UR                  5         UR                  U5        US-  nUS-  nUS:  a  M{  U(       ai  UR                  [        US-
  -  5        [        R                  " SXU 5      n[        R
                  S:w  a  UR                  5         UR                  U5        U$ )Nr   r   rL   r   r   r1   r   )rW   rw   DELTAS_ARE_LONGSr   r   r   r   r   r   s	            r   r   %TupleVariation.encodeDeltaRunAsLongs_  s   K	oKE% 85 81HC	 o
 L	2oNN+b01C"!=>A}}%

NN1bLFOI 2o NN+y1}=>Cs!34A}}%

NN1
r   c                 
   / nUnU b  [        U5      U :  GaV  OU[        U5      :  GaE  X   nUS-  nU[        -  S-   nU[        -  [        :X  a  UR	                  S/U-  5        OU[        -  [
        :X  a  [        R                  " S5      nUS-  nOEU[        -  [        :X  a  [        R                  " S5      nUS-  nO[        R                  " S5      nUnUR                  XXH-    5        [        R                  S:w  a  UR                  5         [        U5      U:X  d   [        U5      U45       eXH-  nUR	                  U5        U b  [        U5      U :  a  GM2  OU[        U5      :  a  GME  U b  [        U5      U :X  d   eX44$ )	z>(numDeltas, data, offset) --> ([delta, delta, ...], newOffset)rL   r   r1      r   rJ   r   r   )rW   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_TupleVariation.decompileDeltas_  si    )2)>c&kI%C#d)O	I1HC'*>>!CN,,@qcN23 005EE"[[-F!/!!3J"227GG"[[-F!/!!3J"[[-F!/J  C,<!=>==E)OO%6{n4Ss6{N6SS4!f%+ *3)>c&kI%C#d)O,  CK9$<<<}r   c                 Z    SnU [         -  S:w  a  X!S-  -  nU [        -  S:w  a  X!S-  -  nU$ )Nr   r   rJ   )rv   ry   )r   	axisCountsizes      r   getTupleSize_TupleVariation.getTupleSize_.  s@    ''A-M!D''A-M!Dr   c                     [        S U R                   5       S5      nUc  g[        U5      [        [        4;   a  g[        U5      [
        L a  [        U5      S:X  a  g[        SU-  5      e)z]Return 2 if coordinates are (x, y) as in gvar, 1 if single values
as in cvar, or 0 if empty.
c              3   .   #    U  H  oc  M  Uv   M     g 7fr   r8   r9   s     r   r<   /TupleVariation.getCoordWidth.<locals>.<genexpr>;  s     H&611&6s   	Nr   rL   rJ   zSinvalid type of delta; expected (int or float) number, or Tuple[number, number]: %r)nextr   rV   rX   floatrC   rW   	TypeError)r   
firstDeltas     r   r   TupleVariation.getCoordWidth7  sn     Hd&6&6H$O

U|+
u$ZA)=(*45
 	
r   c                     US:X  a  g U R                  5       nU R                   Vs/ s H"  nUc  S OUS:X  a  X1-  OUS   U-  US   U-  4PM$     snU l        g s  snf )Ng      ?rL   r   )r   r   )r   scalar
coordWidthds       r   scaleDeltasTupleVariation.scaleDeltasG  sz    S='')
 %%
 & 9 #-?QZ1!v8VW &
 
s   )Ac                     U R                  5       nU R                   Vs/ s H5  nUc  S O,US:X  a  [        U5      O[        US   5      [        US   5      4PM7     snU l        g s  snf NrL   r   )r   r   r   )r   r   r  s      r   roundDeltasTupleVariation.roundDeltasT  su    '')
 %%
 & 9 #-?WQZ1PQRSPT8VW &
 
s   <A$c                 <   SSK Jn  U R                  5       S:X  a  [        S5      eS U R                  ;   ag  [        U R                  5      [        U5      :w  a,  [        S[        U R                  5      [        U5      4-  5      eU" U R                  X5      U l        g g )Nr   )	iup_deltarL   z3Only 'gvar' TupleVariation can have inferred deltasz(Expected len(origCoords) == %d; found %d)fontTools.varLib.iupr	  r   r   r   rW   
ValueError)r   
origCoordsendPtsr	  s       r   calcInferredDeltas!TupleVariation.calcInferredDeltas_  s    21$QRR4###4##$J7 >4++,c*o>?   ))9)9:ND $r   c                    SSK Jn  S U R                  ;   a  g U" U R                  XUS9nS U;   a  U(       a-  [        S U 5       5      (       a  S/S /[	        U5      S-
  -  -   n[        U R                  U5      n[        U R                  R                  5       5      nU R                  U5      u  p[	        U	5      [	        U
5      -   nUR                  U5      u  p[	        U	5      [	        U
5      -   nX:  a  UR                  U l        g g g )Nr   )iup_delta_optimize)	tolerancec              3   (   #    U  H  oS L v   M
     g 7fr   r8   )r:   r  s     r   r<   *TupleVariation.optimize.<locals>.<genexpr>v  s     "?h9hr>   )r   r   rL   )
r
  r  r   allrW   r   r   r$   rj   r   )r   r  r  r  isCompositer  deltaOptvarOptr^   r   r   unoptimizedLengthoptimizedLengths                r   optimizeTupleVariation.optimizel  s    ;4###%jI
 8s"?h"??? #8tfH0A&BB#DIIx8F diinn./H!%h!7I #IW =!'!9I!)ns7|;O2#)#5#5  3 r   c                 (    U R                  U5        U $ r   )r  )r   r   s     r   __imul__TupleVariation.__imul__  s     r   c                    [        U[        5      (       d  [        $ U R                  n[	        U5      nUR                  n[	        U5      U:w  a  [        S5      eU R                  5       S:X  a=  [        [        U5      U5       H"  u  pVX%   n US   US   -   US   US   -   4X%'   M$     U $ [        [        U5      U5       H%  u  pVX%   nUb  Ub  Xv-   X%'   M  Ub  M  Uc  M!  XbU'   M'     U $ ! [         a    [        S5      ef = f)Nz7cannot sum TupleVariation deltas with different lengthsrJ   r   rL   z+cannot sum gvar deltas with inferred points)

isinstancer   NotImplementedr   rW   r  r   zipr   r   )r   r+   deltas1lengthdeltas2r1   d2d1s           r   __iadd__TupleVariation.__iadd__  s   %00!!""W##w<6!VWW 1$U6]G4ZT"$Q%"Q%-AA!?GJ 5  U6]G4Z>bn!#GJZBN!#AJ 5  ! T$%RSSTs   C**D )r   r   Tr   )r   )g      ?F)"__name__
__module____qualname____firstlineno__r   r(   r,   r4   r@   re   rm   r   ru   rx   staticmethodr   rt   r   r{   r   r   r   r   r   r   r   r   r  r  r  r  r  r)  __static_attributes__r8   r   r   r   r   '   sE   -CQ&<'RV. ,.&,OS&,P	 /&   > >@ 0 0d& 4$ 4 4l      D 1 1f  2  :  
 
	
O66r   r   c                     / n[        U5       H,  n[        R                  XU5      u  pcUR                  U5        M.     U$ r   )r   r   r   rw   )r^   sharedTupleCountr   r   r   _ts          r   decompileSharedTuplesr6    s>    F#$"2286J	a % Mr   rL   c                     [        5       nU H   nUR                  U 5      nX5==   S-  ss'   M"     [        UR                  U5      S S9nU Vs/ s H  owS   S:  d  M  US   PM     sn$ s  snf )NrL   c                     U S   * U S   4$ r  r8   )items    r   <lambda>%compileSharedTuples.<locals>.<lambda>  s    47(DG,r   keyr   )r	   ru   r$   most_common)r^   
variationsMAX_NUM_SHARED_COORDS
coordCountvarrE   sharedCoordsr;   s           r   compileSharedTuplesrD    sy     J  *Q 
 45,L '3,QA$(DAaD,333s   A+	A+Tro   c                t  ^^ A/ n/ nS n[        [        5      n	U  HF  n
U
R                  5       nUc  M  X==   S-  ss'   UR                  U
5        UR                  U5        MH     Un AU (       d  g[	        U S   R
                  5      m[        U4S jU  5       5      (       d   S5       eU	 Vs0 s H  o[        R                  U5      _M     snm[	        U 5      n/ n/ nU(       a>  U4S jn[        U	R                  5       US9S   nUR                  TU   5        U[        -  nU Vs/ s H  nX:w  a  TU   OSPM     nn[        X5       H<  u  n
nU
R                  X#UUS	9u  nnUR                  U5        UR                  U5        M>     SR                  U5      nSR                  U5      nXU4$ s  snf s  snf )
NrL   )r   r   r   r   c              3   T   >#    U  H  n[        UR                  5      T:H  v   M     g 7fr   )rW   r   )r:   vns     r   r<   -compileTupleVariationStore.<locals>.<genexpr>  s"      )3AAMMas   %(z#Variation sets have different sizesc                 @   > U S   nU S   n[        TU   5      US-
  -  $ )Nr   rL   )rW   )pnpointSetcountcompiledPointss      r   r=  'compileTupleVariationStore.<locals>.key  s.    !uHqEE~h/0EAI>>r   r<  r   )r   rp   )r
   rX   r4   rw   rW   r   r  r   rt   rI   r%   TUPLES_SHARE_POINT_NUMBERSr#  r   r#   )r?  
pointCountr^   sharedTupleIndicesuseSharedPointsrp   newVariations
pointDatassharedPointspointSetCountrG  r   rL  tupleVariationCounttuplesr   r=  r2   	thisTuplethisDatarN  rH  s                       @@r   compileTupleVariationStorer\    s    	MJL  $M">"Q&!  JJqM%%&A )3   -,- 
 JWIVX...x88N j/FD	?
 =..0c:1=N<0199
 ! F #)"8vcA   
 J+1iiAL ( 
	8 	i H , XXfF88D>D,,I*s   -F0'F5c                 p   [        U5      n/ n	U[        -  S:w  a  [        R                  X5Xp5      u  pO/ n
[	        U[
        -  5       Hj  n[        R                  " SXVUS-    5      u  p[        R                  X5      nXVXn-    nXWX|-    nU	R                  [        UUU
U UUU5      5        Xn-  nX|-  nMl     U	$ )Nr   rr   r   )rW   rP  r   r   r   TUPLE_COUNT_MASKr}   r   r   rw   decompileTupleVariation_)r   r^   rX  rQ  sharedTuplesr   r   dataPosnumAxesr   rV  r4  dataSizer   	tupleSizer   pointDeltaDatas                    r   decompileTupleVariationStorerf    s     (mGF88Q> . ? ?g!
g &)99: --t#'/BC"00@	s/	(:;$
	
 	# ;$ Mr   c                    US;   d   U5       e[         R                  " SUSS 5      S   nSnU[        -  S:X  a  X[        -     n	O[        R                  XEU5      u  pU[        -  S:w  a1  [        R                  XEU5      u  p[        R                  XEU5      u  pO[        U	5      u  p0 nU H  nX   X   X   4nUS:w  d  M  XU'   M     SnU[        -  S:w  a  [        R                  XX5      u  pOUnS /U -  nUS:X  aQ  [        R                  [        U5      Xh5      u  nn[        UU5       H  u  nnSUs=::  a  U :  d  M  O  M  UUU'   M      O|US:X  av  [        R                  [        U5      Xh5      u  nn[        R                  [        U5      Xh5      u  nn[        UUU5       H!  u  nnnSUs=::  a  U :  d  M  O  M  UU4UU'   M#     [	        UU5      $ )	Nr   z>HrJ   r   r   r   r   r   )r}   r   rv   TUPLE_INDEX_MASKr   r   ry   inferRegion_rz   r   r   rW   r#  )rQ  r`  rV  r   r^   r   r   r   r   peakstartendr   rG   regionr   r   
deltas_cvtr2   rK   deltas_xdeltas_yrN   rO   s                           r   r_  r_  7  s    ''11'MM$Qq	*1-E
C##)$445"2283G	##)#33HCH
!11(#FS!$'
Ddj#)3_$J  C%%!+$553
 Vj F6(99#f+yV
CFJ/HAuA"
""!q	 0 
V	&77FYT#&77FYT#68X6GAq!A"
""Fq	 7 $''r   c                 x    0 0 p!U R                  5        H!  u  p4[        US5      X'   [        US5      X#'   M#     X4$ )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.
rD   )r%   rH   rI   )rj  rk  rl  rG   r'   s        r   ri  ri  e  sA     R3zz|%osO	 $ <r   r+  ),fontTools.misc.fixedToolsr   r   r   r   r   rU   r   rh   r   fontTools.misc.textToolsr   r   collectionsr	   r
   iologgingr}   r   rv   ry   rz   r   r   r   r   r   r   r   rP  r^  rh  	getLoggerr,  rY   objectr   r6  rD  r\  rf  r_  ri  r8   r   r   <module>ry     s     .  , 	   

          #   !C
V C
L 1A10D4* H- H-V$N+(\r   