
    Mcg}                     
   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      `/var/www/html/bid-api/venv/lib/python3.12/site-packages/fontTools/ttLib/tables/TupleVariation.py__init__zTupleVariation.__init__(   s    IIK	,    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__,   sV    xxARSARutU+ARST
 ,01A1A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ejj9P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   sY    t''';	$2B2B(CU(C1q}!(CUVt%% Vs   
A
A
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 
 y wr    .0cs     r   	<genexpr>z+TupleVariation.hasImpact.<locals>.<genexpr>C   s     ;*:Q1D=*:   )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   getrA   rB   	simpletagfl2strr,   r   typer<   lenintlogerrorcommentendtag)r   writeraxisTagsr@   r%   minValuemaxValuedefaultMinValuedefaultMaxValueattrswrote_any_deltasr-   rD   s                r   toXMLzTupleVariation.toXMLE   s    DIIMM$'E ,1)%"%eS/"%eS/.83N$$W4veR?P$Q  x 45 &"34x 45	E $$We4 ! " !!$"2"23HAuE{e#E
a  Q%(eAh G #' e#  au = #' "		,-23 #'  4  NN;'NN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(  rd	|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=   rA   rB   rD   rF   rG   rH   rI   zbad delta format: %sz, )str2flrA   rB   rL   r   r   r   rR   warningr!   r"   keys)r   r$   r\   _contentr@   r%   rZ   r[   rX   rY   pointrG   rH   rI   s                 r   fromXMLzTupleVariation.fromXMLn   s$   7?=D5>2.E!%oO!%oOeii?DHeii?DH'9DIIdOW_u} t-U3Z(U3Z(+,a&  '%uU|, w0(-  %2TYYvejjl?S5T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   rf   r   r   >HH)setr   rb   r0   compilePointscompileCoordrL   EMBEDDED_PEAK_TUPLEappendcompileIntermediateCoordINTERMEDIATE_REGIONPRIVATE_POINT_NUMBERScompileDeltasr!   insertstructpackrP   )r   rW   sharedCoordIndices	pointDatarg   	tupleDataauxData
usedPointsr>   flagsintermediateCoords              r   compilez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           
          g }| j                   }|D ]Y  }|j                  |      }||j                  d       (|j                  t        j                  dt        |d   d                   [ dj                  |      S )Ns     >hrE   r?   r   )r   rL   rn   rt   ru   fl2fir!   )r   rW   resultr   r@   triples         r   rl   zTupleVariation.compileCoord   sk    yyDXXd^F~g&fkk$fQi0DEF  xx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   rL   rA   rB   rn   rt   ru   r   r!   )r   rW   neededr@   rX   r%   rY   rZ   r[   	minCoords	maxCoordss              r   ro   z'TupleVariation.compileIntermediateCoord   s    D(,		dO(L%HeX!%oO!%oOO+_1L  		D(,		dO(L%HeXV[[uXr/BCDV[[uXr/BCD  xx	I-..r   c           
          i }|}| D ]3  }t        t        j                  d|||dz          d   d      ||<   |dz  }5 ||fS )Nr   rC   r   r?   )fi2flrt   unpack)rW   dataoffsetr>   posr@   s         r   decompileCoord_zTupleVariation.decompileCoord_   sV    DdDsQw4G H KRPE$K1HC  cz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  rd}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   rE   )r   sortrP   	bytearrayrn   POINTS_ARE_WORDS)points	numPointsr   MAX_RUN_LENGTHr   	lastValue	runLength	headerPosuseByteEncodingcurValuerD   s              r   rk   zTupleVariation.compilePoints   sv     fK	 tMM)$MM9>T12MM)d*+	IoIFIMM!"O	/i>&A!#; 9,"*&'5&8D&8O"	 #MM%(MM%1*-MM%$,/$	qQ	# 	/i>&A$ $-My!%.]6F$Fy!9 Io< 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gvarrE   r   r   HrC   Bbigzpoint r   z out of range in 'z' table)r   POINT_RUN_COUNT_MASKrangerP   array	frombytessys	byteorderbyteswapextendrn   strrR   ra   r!   r"   )r   r   r   tableTagr   numPointsInDatar   	runHeadernumPointsInRunrd   r   
pointsSizeabsolutecurrentrD   r.   	badPointss                    r   decompilePoints_zTupleVariation.decompilePoints_  s    ++++s)q..14.1EE!KdSViWO1HCa)$c**&kO+S	I1HC'*>>!CNE,,2S)+a/
S)+
T#j(89:}}%!v;.000:CMM&!% &kO+* EuGOOG$  %+GVq1uYSVV	GKK88F9-.: } 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 )NrC   r   rE   rf   )getCoordWidthr   rn   r   compileDeltaValues_)r   rg   deltaXdeltaYr6   bytearrs         r   rr   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nt        |       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      Frf   )	r   rP   r   encodeDeltaRunAsZeroes_encodeDeltaRunAsBytes_encodeDeltaRunAsWords_encodeDeltaRunAsLongs_rA   rB   )deltasr   rg   r   	numDeltasr%   minValmaxVals           r   r   z"TupleVariation.compileDeltaValues_Z  s   " ?kGK		/sA:(@@gVCU)c)(??WUCu--(??WUC(??WUC 	/ ![#f+FF$f$$<<VS'R060S0$;;Cu <  64V4u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   rE   r   r   )rP   rn   DELTAS_ARE_ZERO)r   r   r   r   r   r   s         r   r   z&TupleVariation.encodeDeltaRunAsZeroes_  s    K	Io&+"21HC Io&+"2&L	2oNN?R/0OI 2o NN?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   rE   r   r   b)rP   rn   r   r   )r   r   r   rg   r   r   r%   r   s           r   r   z%TupleVariation.encodeDeltaRunAsBytes_  s    K	Io3KEE(S( QJ!Gi'37Oq(1HC' Io( &L	2oNN2NN5;;sF6FRK,HIJbLFOI	 2o
 NN9q=)NN5;;sF6#,>?@
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   rE   r   r   r   r   hr   )rP   rn   DELTAS_ARE_WORDSr   r   r   r   r   	r   r   r   rg   r   r   r%   r   as	            r   r   z%TupleVariation.encodeDeltaRunAsWords_  sY   K	Io3KE 
 U)c)!Gi'VC!G_33e,u,1HC= Io> &L	2oNN+b01C"!=>A}}%

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

NN1
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   rE   r   r   r-   r   )rP   rn   DELTAS_ARE_LONGSr   r   r   r   r   r   s	            r   r   z%TupleVariation.encodeDeltaRunAsLongs_  s   K	Io3KE% 85 81HC	 Io
 &L	2oNN+b01C"!=>A}}%

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

NN1
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)rE   r   r-      r   rC   r   r   )rP   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&kI%C#d)OS	I1HC'*>>!CN,,@qcN23 005EE"[[-F!/!!3J"227GG"[[-F!/!!3J"[[-F!/J  cC*,<!=>==E)OO%6{n4Ss6{N6SS4z!f%+ *3)>c&kI%C#d)O,  CK9$<<<}r   c                 Z    d}| t         z  dk7  r||dz  z  }| t        z  dk7  r||dz  z  }|S )Nr   r   rC   )rm   rp   )r{   	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&6!-1&6s   Nr   rE   rC   zSinvalid type of delta; expected (int or float) number, or Tuple[number, number]: %r)nextr   rO   rQ   floatr<   rP   	TypeError)r   
firstDeltas     r   r   zTupleVariation.getCoordWidth7  sn     Hd&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      ?rE   r   )r   r   )r   scalar
coordWidthds       r   scaleDeltaszTupleVariation.scaleDeltasG  s|    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 NrE   r   )r   r   r   )r   r   r   s      r   roundDeltaszTupleVariation.roundDeltasT  su    '')
 %%
 & 9 #-?WQZ1PQRSPT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_deltarE   z3Only 'gvar' TupleVariation can have inferred deltasz(Expected len(origCoords) == %d; found %d)fontTools.varLib.iupr   r   r   r   rP   
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ND $r   c                    ddl m} d | j                  v ry  || j                  |||      }d |v r|r(t        d |D              rdgd gt	        |      dz
  z  z   }t        | j                  |      }t        | j                  j                               }| j                  |      \  }	}
t	        |	      t	        |
      z   }|j                  |      \  }	}
t	        |	      t	        |
      z   }||k  r|j                  | _        y y y )Nr   )iup_delta_optimize)	tolerancec              3   $   K   | ]  }|d u  
 y wr   r3   )r5   r   s     r   r7   z*TupleVariation.optimize.<locals>.<genexpr>v  s     "?h19hr8   )r   r   rE   )
r   r   r   allrP   r   r   r"   rb   r}   )r   r   r   r   isCompositer   deltaOptvarOptrW   rx   ry   unoptimizedLengthoptimizedLengths                r   optimizezTupleVariation.optimizel  s    ;4###%j&I
 8s"?h"?? #8tfH0A&BB#DIIx8F diinn./H!%h!7Iw #IW =!'!9Iw!)ns7|;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 lengthsrC   r   rE   z+cannot sum gvar deltas with inferred points)

isinstancer   NotImplementedr   rP   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$U6]G42QZT"$Q%"Q%-AA!?GAJ 5  U6]G42QZ>bn!#bGAJZBN!#GAJ 5  ! T$%RSSTs   C  C5Tr   )r   )g      ?F) __name__
__module____qualname__r   r&   r)   r0   r:   r^   re   r}   rl   ro   staticmethodr   rk   r   rr   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66r   r   c                     g }t        |      D ]-  }t        j                  | ||      \  }}|j                  |       / |S r   )r   r   r   rn   )rW   sharedTupleCountr   r   r   _ts          r   decompileSharedTuplesr    sB    F#$"228T6J	6a % Mr   rE   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 )NrE   c                     | d    | d   fS r   r3   )items    r   <lambda>z%compileSharedTuples.<locals>.<lambda>  s    47(DG,r   keyr   )r	   rl   r"   most_common)rW   
variationsMAX_NUM_SHARED_COORDS
coordCountvarr>   sharedCoordsr6   s           r   compileSharedTuplesr!    s{     J  *5Q 
 45,L '3,Q!A$(AaD,333s   A)A)Trf   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 )
NrE   )r   r   r   r   c              3   N   K   | ]  }t        |j                        k(    y wr   )rP   r   )r5   vns     r   r7   z-compileTupleVariationStore.<locals>.<genexpr>  s#      )3AAMMas   "%z#Variation sets have different sizesc                 @    | d   }| d   }t        |         |dz
  z  S )Nr   rE   )rP   )pnpointSetcountcompiledPointss      r   r  z'compileTupleVariationStore.<locals>.key  s.    !uHqEE~h/0EAI>>r   r  r   )rw   rg   )r
   rQ   r0   rn   rP   r   r   r   rk   rB   r#   TUPLES_SHARE_POINT_NUMBERSr  r}   r!   )r  
pointCountrW   sharedTupleIndicesuseSharedPointsrg   newVariations
pointDatassharedPointspointSetCountr$  r   r(  tupleVariationCounttuplesr   r  r.   	thisTuplethisDatar*  r%  s                       @@r   compileTupleVariationStorer7    s    	MJL  $M">f"Q&!  JJqM%%&A )3  -,- 
 JWIVX...x88N j/FD	?
 =..0c:1=N<0199
 ! F #)L"8vcA   
 J
+1ii(AL ( 
	8 	i H , XXfF88D>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   ri   r   )rP   r+  r   r   r   TUPLE_COUNT_MASKrt   r   r   rn   decompileTupleVariation_)r   rW   r3  r,  sharedTuplesr   r   dataPosnumAxesr   r1  r  dataSizer{   	tupleSizerx   pointDeltaDatas                    r   decompileTupleVariationStorerA    s     (mGF88Q> . ? ?gx!
g &)99: --tC#'/B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        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>HrC   r   r   r   r   r   )rt   r   rm   TUPLE_INDEX_MASKr   r   rp   inferRegion_rq   r   r   rP   r  )r,  r;  r1  r   rW   r   rx   r{   r   peakstartendr   r@   regionr   r   
deltas_cvtr.   rD   deltas_xdeltas_yrG   rH   s                           r   r:  r:  7  s    ''11'MM$Qq	*1-E
C##)E$445"228T3G	c##)#33HdCH
s!11(D#FS!$'
sDtd4j#d)3_$DJ  C%%!+$55	3
 Vj F6(99#f+yRUV
CFJ/HAuA"
"!q	 0 
V	&77FYPST#&77FYPST#68X6GAq!A"
"Fq	 7 $''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#   rA   rB   )rE  rF  rG  r@   r%   s        r   rD  rD  e  sK     R3Ezz|e%odsOD	 $ 3<r   r  ),fontTools.misc.fixedToolsr   r   r   r   r   rN   r   r`   r   fontTools.misc.textToolsr   r   collectionsr	   r
   iologgingrt   r   rm   rp   rq   r   r   r   r   r   r   r   r+  r9  rC  	getLoggerr  rR   objectr   r  r!  r7  rA  r:  rD  r3   r   r   <module>rT     s     .  , 	   

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