
    ]Mh}                        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j!        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+dS )    )fixedToFloatfloatToFixedfloatToFixedToStrstrToFixedToFloatotRound)safeEvalN)Counterdefaultdicti   i @  i       @      ?      i  c                   v   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dS )'TupleVariationc                 `    |                                 | _        t          |          | _        d S N)copyaxeslistcoordinates)selfr   r   s      e/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/fontTools/ttLib/tables/TupleVariation.py__init__zTupleVariation.__init__(   s'    IIKK	,,    c                     d                     t          d | j                                        D                                 }d|d| j        dS )N,c                 "    g | ]\  }}|d |S )= ).0namevalues      r   
<listcomp>z+TupleVariation.__repr__.<locals>.<listcomp>.   s'    SSSutttUU+SSSr   z<TupleVariation  >)joinsortedr   itemsr   )r   r   s     r   __repr__zTupleVariation.__repr__,   sW    xxSSARARSSSTT
 
 ,0441A1A1ABBr   c                 B    | j         |j         k    o| j        |j        k    S r   )r   r   )r   others     r   __eq__zTupleVariation.__eq__2   s!    5#44Pej9PPr   c                     d | j         vrt                      S t          d t          | j                   D                       }|r|nd S )Nc                     g | ]	\  }}||
S r   r    )r!   ips      r   r$   z0TupleVariation.getUsedPoints.<locals>.<listcomp>9   s    UUU1q}!}}}r   )r   	frozenset	enumerate)r   useds     r   getUsedPointszTupleVariation.getUsedPoints5   sP    t''';;UU	$2B(C(CUUUVV%tt%r   c                 >    t          d | j        D                       S )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      K   | ]}|d uV  	d S r   r    r!   cs     r   	<genexpr>z+TupleVariation.hasImpact.<locals>.<genexpr>C   s&      ;;Q1D=;;;;;;r   )anyr   )r   s    r   	hasImpactzTupleVariation.hasImpact=   s$     ;;$*:;;;;;;r   c           	         |                     d           |                                 |D ]}| j                            |          }||\  }}}t	          |d          }t          |d          }||k    r-||k    r'|                    d|t          |d                     nNd|fdt          |d          fdt          |d          fd	t          |d          fg}	|                    d|	           |                                 d
}
t          | j	                  D ]\  }}t          |          t          k    rOt          |          dk    r<|                    d||d         |d                    |                                 d}
lt          |          t          k    r/|                    d||           |                                 d}
|Ht                              d           |                    d|z             |                                 d}
|
s)|                    d           |                                 |                    d           |                                 d S )Ntuple        coord   )axisr#   rB   minr#   maxF   deltar      )ptxyT)cvtr#   zbad delta formatzbad delta #%dz	no deltas)begintagnewliner   getrC   rD   	simpletagfl2strr3   r   typer>   lenintlogerrorcommentendtag)r   writeraxisTagsrB   r#   minValuemaxValuedefaultMinValuedefaultMaxValueattrswrote_any_deltasr0   rF   s                r   toXMLzTupleVariation.toXMLE   s}       	! 	!DIMM$''E ,1)%"%eS//"%eS//..83N3N$$W4veR?P?P$QQQQ  x 4 45 &"3"34x 4 45	E $$We444    !$"233 	( 	(HAuE{{e##E

a  Q%(eAh GGG   #'  e##  au ===   #'  "		,---2333   #'  	NN;'''NNgr   c           	          |dk    r|d         }t          |d         d          }t          |d          }t          |d          }t          |                    d|          d          }t          |                    d|          d          }	|||	f| j        |<   d S |dk    rd	|v rMt          |d	                   }
t          |d
                   }t          |d                   }||f| j        |
<   d S d|v r6t          |d                   }t          |d                   }|| j        |<   d S t                              dd	                    t          |                                                    z             d S d S )Nr@   rB   r#   rA   r?   rC   rD   rF   rH   rI   rJ   rK   zbad delta format: %sz, )str2flrC   rD   rN   r   r   r   rT   warningr'   r(   keys)r   r"   r^   _contentrB   r#   r\   r]   rZ   r[   pointrI   rJ   rK   s                 r   fromXMLzTupleVariation.fromXMLn   sl   7??=D5>2..E!%ooO!%ooOeii??DDHeii??DDH'9DIdOOOW__u}} t--U3Z((U3Z((+,a& '''%uU|,, w00(- %%%2TYYvejjll?S?S5T5TTUUUUU _r   NToptimizeSizec          	      t   t          | j                                                  t          |          k    s$J d| j                                        |f            g }g }|-|                                 }|dS |                     |          }|                     |          }|                    |          }	|	t          }	|                    |           | 	                    |          }
|
|	t          z  }	|                    |
           |r|	t          z  }	|                    |           |                    |                     |                     d                    |          }|                    dt          j        dt#          |          |	                     d                    |          |fS )NzUnknown axis tag found.)r   r   rh   r   r   >HH)setr   rd   r5   compilePointscompileCoordrN   EMBEDDED_PEAK_TUPLEappendcompileIntermediateCoordINTERMEDIATE_REGIONPRIVATE_POINT_NUMBERScompileDeltasr'   insertstructpackrR   )r   rY   sharedCoordIndices	pointDatari   	tupleDataauxData
usedPointsr@   flagsintermediateCoords              r   compilezTupleVariation.compile   s    49>>##$$H555%INN8
555 	++--J!x**:66I!!(++"&&u--='EU### 99(CC(((E.///  	&**ENN9%%%t))|)DDEEE((7##FKs7||UCCDDDxx	""G++r   c           
         g }| j         }|D ]k}|                    |          }||                    d           /|                    t          j        dt          |d         d                               ld                    |          S )Ns     >hrG   rA   r   )r   rN   rp   rv   rw   fl2fir'   )r   rY   resultr   rB   triples         r   rn   zTupleVariation.compileCoord   s    y 	G 	GDXXd^^F~g&&&&fk$fQi0D0DEEFFFFxxr   c           
         d}|D ]Q}| j                             |d          \  }}}t          |d          }t          |d          }||k    s||k    rd} nR|sd S g }	g }
|D ]}| j                             |d          \  }}}|	                    t          j        dt          |d                               |
                    t          j        dt          |d                               d                    |	|
z             S )NFr?   r?   r?   r?   Tr   rA   r   )	r   rN   rC   rD   rp   rv   rw   r   r'   )r   rY   neededrB   rZ   r#   r[   r\   r]   	minCoords	maxCoordss              r   rq   z'TupleVariation.compileIntermediateCoord   s%    	 	D(,	dO(L(L%HeX!%ooO!%ooOO++_1L1L 2M  	4		 	E 	ED(,	dO(L(L%HeXV[uXr/B/BCCDDDV[uXr/B/BCCDDDDxx	I-...r   c           
          i }|}| D ]>}t          t          j        d|||dz                      d         d          ||<   |dz  }?||fS )Nr   rE   r   rA   )fi2flrv   unpack)rY   dataoffsetr@   posrB   s         r   decompileCoord_zTupleVariation.decompileCoord_   sa     	 	DdDsQw4G H H KRPPE$K1HCCczr   c                 
   | sdS t          |           } |                                  t          |           }t                      }|dk     r|                    |           n3|                    |dz	  dz             |                    |dz             d}d}d}||k     rd}t          |          }|                    d           d }||k     r||k    r| |         }	|	|z
  }
|d|
cxk    odk    nc }|r|
dk    s|
dk     rn`|r|                    |
           n0|                    |
dz	             |                    |
dz             |	}|dz  }|dz  }||k     r||k    |r	|dz
  ||<   n|dz
  t
          z  ||<   ||k     |S )N    r         r   r   rG   )r   sortrR   	bytearrayrp   POINTS_ARE_WORDS)points	numPointsr   MAX_RUN_LENGTHr   	lastValue	runLength	headerPosuseByteEncodingcurValuerF   s              r   rm   zTupleVariation.compilePoints   s     	5 fKK	 tMM)$$$$MM9>T1222MM)d*+++	IooIFIMM!"O	//i>&A&A!#; 9,"*&'5&8&8&8&8D&8&8&8&8O" 		 # 0MM%((((MM%1*---MM%$,///$	qQ	# 	//i>&A&A$  G$-My!!%.]6F$Fy!9 Ioo< r   c                     |dv sJ |}||         }|dz  }|t           z  dk    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k    rt	          j        d          }
|dz  }nt	          j        d          }
|}|
                    ||||z                       t          j        dk    r|
                                 t          |
          |k    sJ ||z  }|	                    |
           t          |          |k     g }d}|D ]}||z  }|
                    |           |}~ fd	|D             }|rAt                              d
d                    t          |                    d|d           ||fS )zJ(numPoints, data, offset, tableTag) --> ([point1, point2, ...], newOffset)cvargvarrG   r   r   HrE   Bbigc                 F    h | ]}|d k     s|k    t          |          S r   )str)r!   r1   r   s     r   	<setcomp>z2TupleVariation.decompilePoints_.<locals>.<setcomp>?  s,    GGGq1uuYSVVr   zpoint r   z out of range in 'z' table)r   POINT_RUN_COUNT_MASKrangerR   array	frombytessys	byteorderbyteswapextendrp   rT   rc   r'   r(   )r   r   r   tableTagr   numPointsInDatar   	runHeadernumPointsInRunrf   r   
pointsSizeabsolutecurrentrF   	badPointss   `               r   decompilePoints_zTupleVariation.decompilePoints_  s2    +++++s)q..144.1EE!KdSViWO1HCa)$$c**&kkO++S	I1HC'*>>!CNE,,22S))+a/

S))+
T#j(8"89:::}%%!!!v;;.0000:CMM&!!!% &kkO++*  	% 	%EuGOOG$$$$GGGGVGGG	 	KKK88F9--....:   }r   c                    g }g }|                                  dk    rD| j        D ];}||                    |d                    |                    |d                    <n"| j        D ]}||                    |           t                      }|                     |||           |                     |||           |S )NrE   r   rG   rh   )getCoordWidthr   rp   r   compileDeltaValues_)r   ri   deltaXdeltaYr9   bytearrs         r   rt   zTupleVariation.compileDeltasG  s    1$$% $ $9ad###ad####	$ % ! !9a    ++  | LLL  | LLLr   c                v   |t                      }d}t          |           }|r||k     r| |         }|dk    rt                              | ||          }nvd|cxk    rdk    r n nt                              | ||          }nId|cxk    rdk    r n nt                              | ||          }nt                              | ||          }||k     nt          |           t          |           }}|dcxk    r|k    r n nt                              | ||          }nd|cxk    r|cxk    rdk    r"n nt                              | ||d          }nTd|cxk    r|cxk    rdk    r"n nt                              | ||d          }nt                              | ||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.
        Nr   r      Frh   )	r   rR   r   encodeDeltaRunAsZeroes_encodeDeltaRunAsBytes_encodeDeltaRunAsWords_encodeDeltaRunAsLongs_rC   rD   )deltasr   ri   r   	numDeltasr#   minValmaxVals           r   r   z"TupleVariation.compileDeltaValues_Z  s?   " ?kkGKK	 		//sA::(@@gVVCCU))))c)))))(??WUUCCu---------(??WUUCC(??WUUC 	// ![[#f++FF$$$$f$$$$$$<<VS'RR000060000S00000$;;Cu <   64444V4444u44444$;;Cu <   %;;Cu <   i#y!1r   c                 $   |}t          |           }||k     r#| |         dk    r|dz  }||k     r| |         dk    ||z
  }|dk    r(|                    t          dz             |dz  }|dk    (|r |                    t          |dz
  z             |S )Nr   rG   r   r   )rR   rp   DELTAS_ARE_ZERO)r   r   r   r   r   r   s         r   r   z&TupleVariation.encodeDeltaRunAsZeroes_  s    KK	Ioo&+"2"21HC Ioo&+"2"2&L	2ooNN?R/000OI 2oo  	>NN?i!m<===
r   c           	         |}t          |           }||k     rD| |         }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     D||z
  }|dk    rX|                    d           |                    t          j        d| ||dz                                 |dz  }|dz  }|dk    X|rH|                    |dz
             |                    t          j        d| ||                              |S )Nr   r   r   rG   r   r   b)rR   rp   r   r   )r   r   r   ri   r   r   r#   r   s           r   r   z%TupleVariation.encodeDeltaRunAsBytes_  sN   KK	Ioo3KEE((((S(((( QJJ!Gi''37Oq((1HC' Ioo( &L	2ooNN2NN5;sF6FRK3G,HIIJJJbLFOI	 2oo
  	ANN9q=)))NN5;sF6#:,>??@@@
r   c                    |}t          |           }||k     ra| |         }|r|dk    rnP|r3d|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     a||z
  }|dk    r|                    t          dz             t          j        d	| ||dz                      }t          j        d
k    r|                                 |                    |           |dz  }|dz  }|dk    |rv|                    t          |dz
  z             t          j        d	| ||                   }t          j        d
k    r|                                 |                    |           |S )Nr   r   r   rG   r   r   r   r   hr   )rR   rp   DELTAS_ARE_WORDSr   r   r   r   r   	r   r   r   ri   r   r   r#   r   as	            r   r   z%TupleVariation.encodeDeltaRunAsWords_  s   KK	Ioo3KE  

 U))))c)))))!Gi''VC!G_333333333e,,,,u,,,,1HC= Ioo> &L	2ooNN+b0111C"(<!=>>A}%%

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

NN1
r   c                    |}t          |           }||k     r&| |         }|rd|cxk    rdk    rn nn|dz  }||k     &||z
  }|dk    r|                    t          dz             t          j        d| ||dz                      }t          j        dk    r|                                 |                    |           |dz  }|dz  }|dk    |rv|                    t          |dz
  z             t          j        d| ||                   }t          j        dk    r|                                 |                    |           |S )Nr   r   rG   r   r   r0   r   )rR   rp   DELTAS_ARE_LONGSr   r   r   r   r   r   s	            r   r   z%TupleVariation.encodeDeltaRunAsLongs_  si   KK	Ioo3KE % 8 8 8 85 8 8 8 8 81HC	 Ioo
 &L	2ooNN+b0111C"(<!=>>A}%%

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

NN1
r   r   c                 n   g }|}| t          |          | k     rn|t          |          k     rl||         }|dz  }|t          z  dz   }|t          z  t          k    r|                    dg|z             n|t          z  t
          k    rt          j        d          }|dz  }nC|t          z  t          k    rt          j        d          }|dz  }nt          j        d          }|}|                    ||||z                       t          j
        d	k    r|                                 t          |          |k    sJ t          |          |f            ||z  }|                    |           | t          |          | k     Wn|t          |          k     l| t          |          | k    sJ ||fS )
z>(numDeltas, data, offset) --> ([delta, delta, ...], newOffset)NrG   r   r0      r   rE   r   r   )rR   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_  s    )2)>c&kkI%%%C#d))OOS	I1HC'*>>!CN,,@@qcN23333 005EEE"[--F!/!!3JJ"227GGG"[--F!/!!3JJ"[--F!/J  cC*,<&<!=>>>=E))OO%%%6{{n444s6{{N6S444z!f%%%+ *3)>c&kkI%%%C#d))OO,  CKK9$<$<$<$<}r   c                 b    d}| t           z  dk    r||dz  z  }| t          z  dk    r||dz  z  }|S )Nr   r   rE   )ro   rr   )r}   	axisCountsizes      r   getTupleSize_zTupleVariation.getTupleSize_.  sJ    ''A--IM!D''A--IM!Dr   c                     t          d | j        D             d          }|dS t          |          t          t          fv rdS t          |          t
          u rt          |          dk    rdS 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   | ]}||V  	d S r   r    r8   s     r   r:   z/TupleVariation.getCoordWidth.<locals>.<genexpr>;  s"      HH!-1----HHr   Nr   rG   rE   zSinvalid type of delta; expected (int or float) number, or Tuple[number, number]: %r)nextr   rQ   rS   floatr>   rR   	TypeError)r   
firstDeltas     r   r   zTupleVariation.getCoordWidth7  s     HHd&6HHH$OO
1
U|++1
u$$ZA)=)=1(*45
 
 	
r   c                 t    dk    rd S |                                  fd| j        D             | _        d S )Ng      ?c                 Z    g | ]'}|d n dk    r|z  n|d         z  |d         z  f(S NrG   r   r    )r!   d
coordWidthscalars     r   r$   z.TupleVariation.scaleDeltas.<locals>.<listcomp>K  s\     
 
 
  9 #-??QZZ1!v8V	
 
 
r   r   r   )r   r   r   s    `@r   scaleDeltaszTupleVariation.scaleDeltasG  s^    S==F''))

 
 
 
 
 %
 
 
r   c                 `    |                                  fd| j        D             | _        d S )Nc                     g | ]E}|d n>dk    rt          |          n)t          |d                   t          |d                   fFS r   )r   )r!   r   r   s     r   r$   z.TupleVariation.roundDeltas.<locals>.<listcomp>V  se     
 
 
  9 #-??WQZZZ1PQRSPT8V	
 
 
r   r   )r   r   s    @r   roundDeltaszTupleVariation.roundDeltasT  sJ    ''))

 
 
 
 %
 
 
r   c                 T   ddl m} |                                 dk    rt          d          d | j        v rqt          | j                  t          |          k    r3t          dt          | j                  t          |          fz             || j        ||          | _        d S d S )Nr   )	iup_deltarG   z3Only 'gvar' TupleVariation can have inferred deltasz(Expected len(origCoords) == %d; found %d)fontTools.varLib.iupr   r   r   r   rR   
ValueError)r   
origCoordsendPtsr   s       r   calcInferredDeltasz!TupleVariation.calcInferredDeltas_  s    2222221$$QRRR4###4#$$J77 >4+,,c*oo>?    )y)9:vNND $#r         ?Fc                 @   ddl m} d | j        v rd S  || j        |||          }d |v r|r3t          d |D                       rdgd gt	          |          dz
  z  z   }t          | j        |          }t          | j                                                  }| 	                    |          \  }	}
t	          |	          t	          |
          z   }|	                    |          \  }	}
t	          |	          t	          |
          z   }||k     r|j        | _        d S d S d S )Nr   )iup_delta_optimize)	tolerancec              3      K   | ]}|d u V  	d S r   r    )r!   r   s     r   r:   z*TupleVariation.optimize.<locals>.<genexpr>v  s&      "?"?19"?"?"?"?"?"?r   )r   r   rG   )
r   r   r   allrR   r   r   r(   rd   r   )r   r   r   r   isCompositer   deltaOptvarOptrY   rz   r{   unoptimizedLengthoptimizedLengths                r   optimizezTupleVariation.optimizel  sQ   ;;;;;;4###F%%j&I
 
 
 8 Cs"?"?h"?"?"??? C #8tfH0A&BB#DIx88F dinn..//H!%h!7!7Iw #IW =!'!9!9Iw!)nns7||;O!222#)#5   !  32r   c                 0    |                      |           | S r   )r   )r   r   s     r   __imul__zTupleVariation.__imul__  s       r   c                 L   t          |t                    st          S | j        }t	          |          }|j        }t	          |          |k    rt          d          |                                 dk    rot          t          |          |          D ]P\  }}||         }	 |d         |d         z   |d         |d         z   f||<   4# t          $ r t          d          w xY wnAt          t          |          |          D ]#\  }}||         }||	||z   ||<   |||||<   $| S )Nz7cannot sum TupleVariation deltas with different lengthsrE   r   rG   z+cannot sum gvar deltas with inferred points)

isinstancer   NotImplementedr   rR   r   r   zipr   r   )r   r,   deltas1lengthdeltas2r0   d2d1s           r   __iadd__zTupleVariation.__iadd__  s\   %00 	"!!"W#w<<6!!VWWW 1$$U6]]G44 T T2QZT"$Q%"Q%-AA!?GAJJ  T T T$%RSSST	T U6]]G44 $ $2QZ>bn!#bGAJJZBN!#GAJs   %CCTr   r   )r   F) __name__
__module____qualname__r   r*   r-   r5   r<   r`   rg   r   rn   rq   staticmethodr   rm   r   rt   r   r   r   r   r   r   r   r   r   r   r   r  r	  r  r    r   r   r   r   '   s       - - -C C CQ Q Q& & &< < <' ' 'RV V V. ,.&,OS&, &, &, &, &,P	  	  	 / / /&   \ > > \>@ 0 0 \0d   & 4$ 4 4 4 4 \4l   \       \ D 1 1 1 \1f    \2    \:   \
 
 
 
 
 
	
 	
 	
O O O6 6 6 66      r   r   c                     g }t          |          D ]6}t                              | ||          \  }}|                    |           7|S r   )r   r   r   rp   )rY   sharedTupleCountr   r   r   _ts          r   decompileSharedTuplesr    sT    F#$$  "228T6JJ	6aMr   rG   c                     t                      }|D ]'}|                    |           }||xx         dz  cc<   (t          |                    |          d           }d |D             S )NrG   c                 $    | d          | d         fS r   r    )items    r   <lambda>z%compileSharedTuples.<locals>.<lambda>  s    47(DG, r   keyc                 6    g | ]}|d          d k    |d         S )rG   r   r    r8   s     r   r$   z'compileSharedTuples.<locals>.<listcomp>  s%    333Q!A$((AaD(((r   )r	   rn   r(   most_common)rY   
variationsMAX_NUM_SHARED_COORDS
coordCountvarr@   sharedCoordss          r   compileSharedTuplesr+    s     J    **5Q 455,,  L 43,3333r   Trh   c                   ~g }g }d t          t                    }| D ]S}	|	                                }
|
||
xx         dz  cc<   |                    |	           |                    |
           T|} ~| sdS t	          | d         j                  t          fd| D                       s
J d            d |D             t	          |           }g }g }|rSfd}t          |                                |          d         |                                        |t          z  }fd	|D             }t          | |          D ]K\  }	}|	                    ||||
          \  }}|                    |           |                    |           Ld                    |          }d                    |          }|||fS )NrG   )r   r   r   r   c              3   H   K   | ]}t          |j                  k    V  d S r   )rR   r   )r!   vns     r   r:   z-compileTupleVariationStore.<locals>.<genexpr>  sC        $%AMa     r   z#Variation sets have different sizesc                 D    i | ]}|t                               |          S r    )r   rm   )r!   pointSets     r   
<dictcomp>z.compileTupleVariationStore.<locals>.<dictcomp>  s5       =E...x88  r   c                 Z    | d         }| d         }t          |                   |dz
  z  S )Nr   rG   )rR   )pnr1  countcompiledPointss      r   r#  z'compileTupleVariationStore.<locals>.key  s1    !uHqEE~h/00EAI>>r   r"  c                 0    g | ]}|k    r|         nd S )r   r    )r!   r   r6  sharedPointss     r   r$   z.compileTupleVariationStore.<locals>.<listcomp>  s=        #)L"8"8vc  r   )ry   ri   r   )r
   rS   r5   rp   rR   r   r  rD   r)   TUPLES_SHARE_POINT_NUMBERSr  r   r'   )r&  
pointCountrY   sharedTupleIndicesuseSharedPointsri   newVariations
pointDataspointSetCountr.  r   tupleVariationCounttuplesr   r#  r1   	thisTuplethisDatar6  r/  r8  s                     @@@r   compileTupleVariationStorerD    su    	MJL  $$M " """>f"Q&!!!!J }JqM%&&A    )3     - -,- - - IV  N j//FD 
:	? 	? 	? 	? 	?
 =..00c:::1=N<011199       J
 J
++  1ii(AL ( 
 
	8 	i   HXXfF88D>>D,,r   c                    t          |          }g }	|t          z  dk    r!t                              ||||           \  }
}ng }
t	          |t
          z            D ]}t          j        d|||dz                      \  }}t                              ||          }||||z            }||||z            }|		                    t          |||
| |||                     ||z  }||z  }|	S )Nr   rk   r   )rR   r9  r   r   r   TUPLE_COUNT_MASKrv   r   r   rp   decompileTupleVariation_)r   rY   r@  r:  sharedTuplesr   r   dataPosnumAxesr   r8  r  dataSizer}   	tupleSizerz   pointDeltaDatas                    r   decompileTupleVariationStorerN    s"    (mmGF88Q>> . ? ?gx!
 !
gg &)99::   -tC#'M/BCC%"00@@	sY./	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                              |||          \  }	}|t          z  dk    r?t                              |||          \  }
}t                              |||          \  }}nt          |	          \  }
}i }|D ]$}|
|         |	|         ||         f}|dk    r|||<   %d}|t          z  dk    r!t          	                    | |||          \  }}n|}d g| z  }|dk    rXt          
                    t          |          ||          \  }}t          ||          D ]\  }}d|cxk    r| k     rn |||<   n|dk    rt          
                    t          |          ||          \  }}t          
                    t          |          ||          \  }}t          |||          D ]\  }}}d|cxk    r| k     r
n ||f||<   t	          ||          S )	Nr   z>HrE   r   r   r   r   r   )rv   r   ro   TUPLE_INDEX_MASKr   r   rr   inferRegion_rs   r   r   rR   r  )r:  rH  r8  r   rY   r   rz   r}   r   peakstartendr   rB   regionr   r   
deltas_cvtr1   rF   deltas_xdeltas_yrI   rJ   s                           r   rG  rG  7  s    '''''''M$QqS	**1-E
C##))E$445"228T3GG	c##))#33HdCHH
s!11(D#FFSS!$''
sD    td4j#d)3_$$DJ
C%%!++$55	3
 
 Vj F6(99#f++yRUVV
CFJ// 	" 	"HAuA""""
"""""!q		" 
V		&77FYPSTT#&77FYPSTT#68X66 	# 	#GAq!A""""
"""""Fq	$'''r   c                     i i }}|                                  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)   rC   rD   )rR  rS  rT  rB   r#   s        r   rQ  rQ  e  sV     R3Ezz|| $ $e%oodsOOD		3<r   r  ),fontTools.misc.fixedToolsr   r   r   r   r   rP   r   rb   r   fontTools.misc.textToolsr   r   collectionsr	   r
   iologgingrv   r   ro   rr   rs   r   r   r   r   r   r   r   r9  rF  rP  	getLoggerr  rT   objectr   r  r+  rD  rN  rG  rQ  r    r   r   <module>ra     s                . - - - - -  , , , , , , , , 				   




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