
    h                        S r SSK7  SSKJr  SSKJr  SSKJrJrJ	r	  SSK
Jr  SSKJrJr  SS	KJr  SS
KJrJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSKJr  SSK J!r!J"r"J#r#  SSK$r$SSK%r%\$RL                  " S5      r'Sr(Sr)Sr*Sr+ " S S5      r,   S"S\(\)\+S/ S.S jjr-\" \-5      S 5       r.S r/S r0S#S  jr1\2S!:X  a*  SSK3r3\1" 5       r4\3Rj                  " \6" \7" \45      5      5        gg)$z
Tool to find wrong contour order between different masters, and
other interpolatability (or lack thereof) issues.

Call as:
$ fonttools varLib.interpolatable font1 font2 ...
   )*)test_contour_order)test_starting_point    )RecordingPenDecomposingRecordingPenlerpRecordings)TransformPen)StatisticsPenStatisticsControlPen)OpenContourError)piecewiseLinearMapnormalizeLocation)floatToFixedToStr)	Transform)defaultdict)SimpleNamespace)wraps)pformat)sqrtatan2piNzfontTools.varLib.interpolatablegffffff?g      ?gMb`?i  c                   4    \ rS rSrSrS rS rS rS	S jrSr	g)
Glyph'   )	
recordings
greenStatscontrolStatsgreenVectorscontrolVectors	nodeTypesisomorphismspointsopenContoursc                 p    Xl         U R                   H  n[        X/ 5        M     U R                  U5        g N)nameITEMSsetattr	_populate)self	glyphnameglyphsetitems       Q/var/www/html/env/lib/python3.13/site-packages/fontTools/varLib/interpolatable.py__init__Glyph.__init__4   s+    	JJDD# x     c                     U R                    H7  n[        [        X5      5      U:X  d  M  [        X5      R                  S 5        M9     g r&   )r(   lengetattrappend)r+   ixr.   s      r/   _fill_inGlyph._fill_in:   s5    JJD74&'2-#**40 r2   c                 x   XR                      nUS L U l        U R                  (       a  g [        [        US9n UR	                  USS9  UR                  U l        A[        U R                  5       GH  u  pEUR                   VVs/ s H  u  pgUPM	     nnnU R                  R                  U5        [        US9n	[        US9n
 UR                  U	5        UR                  U
5        U R                  R                  S5        U R"                  R                  U	5        U R$                  R                  U
5        U R&                  R                  [)        U	5      5        U R*                  R                  [)        U
5      5        US   S:X  a  U R!                  U5        GM,  US   S:X  d   eUS   S	;   d   e[-        5       n[/        US5      nUR                  U5        U R0                  R                  UR                  5        / nU R2                  R                  U5        [5        UR                  US5        [5        UR                  US5        GM     g ! [
         a    UR	                  U5         GN$f = fs  snnf ! [         a8  nU R                  R                  S5        U R!                  U5         S nAGMD  S nAff = f)
Nr-   T)outputImpliedClosingLineFr   addComponentmoveTo)	closePathendPath)r'   doesnt_existPerContourOrComponentPenr   draw	TypeErrorvaluer   	enumerater!   r6   r   r   replayr$   r   r8   r   r   r   contour_vector_from_statsr    SimpleRecordingPointPenSegmentToPointPenr#   r"   add_isomorphisms)r+   r-   glyphperContourPenr7   contouropargr!   r   r   er#   	converterr"   s                  r/   r*   Glyph._populate?   sG   #!TM0Q	&JJ}tJD (--$T__5KB+2==9==I9NN!!),&9J/BLz*|,!!((/
 OO"":.$$\2$$%>z%JK&&'@'NO |~-b!Q<8+++R=$<<<<,.F)&%8INN9% KKv||,L$$\2 V\\<?V\\<>Q 6  	&JJ}%	& : $ !!((.b!s/   I I1=I7I.-I.7
J9,J44J9Nc                     Uc%  U R                    H  nUR                  U5        M     g U R                   U   R                  U5        g r&   )r   rD   )r+   pencountor_idxrO   s       r/   rD   
Glyph.draww   s;    ??S! + OOK(--c2r2   )rB   r'   r   r&   )
__name__
__module____qualname____firstlineno__r(   r0   r8   r*   rD   __static_attributes__ r2   r/   r   r   '   s    
E!1
6?p3r2   r   F)	locations	tolerance	kinkinessupemshow_alldiscrete_axesc             #     ^ ^\#    US:  a  US-  nSUs=::  a  S::  d   e   eUS:  a  US-  nSU::  d   eU=(       d    T  V
s/ s H  n
[        U
5      PM     sn
nUc*  T  VV
s1 s H  oR                  5         H  oiM     M     nnn
[        T XIS9u  m\nU U\4S jnU G
HV  n[        R	                  SU5        T  Vs/ s H  n[        X5      PM     nn[        U Vs/ s H
  nUc  M  SPM     sn5      S::  a  M\  [        [        UT U5      5       H  u  nu  nnnUR                  (       a!  U(       d  U[        R                  UUS.4v   M<  S	n[        UR                  5       H*  u  nnU(       d  M  S
nU[        R                  UUUS.4v   M,     U(       d  M  M     S /[        T 5      -  nU G	H@  nUU   nUb  UR                  (       d  M  U" UU5      nUc  M-  UU   nUb  UR                  (       d  MH  UR                  nUR                  n[        U5      [        U5      :w  a6  U[        R                  UU   UU   UU[        U5      [        U5      S.4v   M  UU:w  a  [        [        UU5      5       H  u  nu  nnUU:X  a  M  [        U5      [        U5      :w  a7  U[        R                   UUU   UU   UU[        U5      [        U5      S.4v   M`  [        [        UU5      5       H5  u  n u  n!n"U!U":w  d  M  U[        R"                  UU UU   UU   UUU!U"S.	4v   M7     M     [%        UU5      u  n#n$U#U:  aC  U[        R&                  UU   UU   UU[)        [+        [        U$5      5      5      U$U#S.4v   U$UU'   UR,                  n%UR,                  n&UR.                  n'UR.                  n(UR0                  n)UR0                  n*UU   n$U$bF  U&(       a?  U$ V+s/ s H  n+U&U+   PM
     n&n+U$ V+s/ s H  n+U(U+   PM
     n(n+U$ V+s/ s H  n+U*U+   PM
     n*n+/ n,[        U)U*5       HP  u  n-n. [3        5       n/[)        [5        U-R6                  U.R6                  5      5      U/l        U,R9                  U/5        MR     [        [        U%U&5      5       GH  u  nu  n0n1U0b*  U1b'  [        U05      S:X  d  [        U05      [        U15      :w  a  M9  [=        UUUUU$5      u  n#n2n3U#U:  a%  U[        R>                  UUU   UU   UUSU2U3U#S.
4v   U,U   n4U4(       d  M  U'U   S   S:  U(U   S   S:  :X  d  M  [A        S S9n5U4RC                  U55        [E        U55      n6U'U   n7U(U   n8U7S   U7S   -  n9U8S   U8S   -  n:U6S   U6S   -  n;[        [        RF                  [        RH                  45       H  u  n<n=U<(       a  [K        U9U:5      n>M  [M        U9U:-  5      n>[        RO                  SU=U;U>U9U:5        U<(       d  U>U-  U;S-   :  d  U<(       d  M_  SU>U-  -   U;:  d  Mm   U<(       a  U>U;-  n#OU;U>-  n# [        RO                  SU#5        UU=UUU   UU   UUU#S.4v   M     GM     URR                  nURR                  nUU   b  U(       a  UU    V+s/ s H  n+UU+   PM
     nn+Sn?U[T        -  [V        -  U-  n@[        [        UU5      5       GH  u  nu  n0n1U0b*  U1b'  [        U05      S:X  d  [        U05      [        U15      :w  a  M9  [+        [        U05      5       GH  n+U0U+   nAU1U+   nBUAS   (       a
  WBS   (       d  M$  U0U+S-
     nCU1U+S-
     nDU0U+S-   [        U05      -     nEU1U+S-   [        U15      -     nFUCS   (       a  WDS   (       a  Mr  WCS   (       a  WDS   (       a  M  [Y        WAS   6 nA[Y        WBS   6 nB[Y        WCS   6 nC[Y        WDS   6 nD[Y        WES   6 nE[Y        WFS   6 nFUAUC-
  nGUEUA-
  nHUBUD-
  nIUFUB-
  nJUGRZ                  UHR\                  -  UGR\                  UHRZ                  -  -
  nKUIRZ                  UJR\                  -  UIR\                  UJRZ                  -  -
  nL UK[_        UG5      [_        UH5      -  -  nKUL[_        UI5      [_        UJ5      -  -  nL[_        WK5      U?:  d  [_        WL5      U?:  a  GM  WGRZ                  WHRZ                  -  UGR\                  UHR\                  -  -   nMWIRZ                  WJRZ                  -  UIR\                  UJR\                  -  -   nNUMS:  d  WNS:  a  GM  [_        WG5      [_        UG5      [_        WH5      -   -  nO[_        WI5      [_        UI5      [_        WJ5      -   -  nP[_        UOUP-
  5      nQ[_        UQ5      U?:  a  GMu  WAWB-   S-  nRWCWD-   S-  nSWEWF-   S-  nTURUS-
  nUUTUR-
  nVUURZ                  UVR\                  -  UUR\                  UVRZ                  -  -
  nW UW[_        UU5      [_        UV5      -  -  nW[_        WW5      XV-  -  U?::  a  GM  WW[_        WU5      -  [_        WV5      -  nX[_        UUUV-   5      nY[_        UXUY-  5      nZUZW@:  a  GM;  WZWY-  n[U[U?:  a  GMI  U?[_        WW5      U-  -  n#[        RO                  SWZW[UWWQ5        [        RO                  SU#5        U[        R`                  UUU   UU   UUU+U#S.4v   GM     GM     U(       d  G	M   U[        Rb                  UU   UU   UUS.4v   G	MC     G
MY     g s  sn
f s  sn
nf s  snf s  snf s  sn+f s  sn+f s  sn+f ! [:         a    U,R9                  S 5         GM  f = f! [P         a    Sn# GN(f = fs  sn+f ! [P         a     GMX  f = f! [P         a     GMj  f = f7f)N
   g{Gz?r   r   )rd   c                 l   > U c  g TU    n U c  g TU    b  TU    U   c  TU    n TU    b  TU    U   c  M  U $ r&   r^   )ir,   	glyphsetsparentss     r/   grand_parenttest_gen.<locals>.grand_parent   s\    9AJ9aj$1i)@)H
A aj$1i)@)Hr2   zTesting glyph %s)typemaster
master_idxFT)rm   rn   ro   rO   )rm   master_1master_2master_1_idxmaster_2_idxvalue_1value_2)rm   pathrp   rq   rr   rs   rt   ru   )	rm   rv   noderp   rq   rr   rs   rt   ru   )rm   rp   rq   rr   rs   rt   ru   r`   )
rm   rO   rp   rq   rr   rs   rt   ru   reversedr`   r;   z;%s: actual size %g; threshold size %g, master sizes: %g, %ggh㈵>ztolerance %g)rm   rO   rp   rq   rr   rs   r`   g?   z=kink: deviation %g; deviation_ratio %g; sin_mid %g; r_diff %g)rm   rO   rp   rq   rr   rs   rF   r`   )rm   rp   rq   rr   rs   )2reprkeysfind_parents_and_orderloginfor   r4   rG   ziprB   InterpolatableProblemMISSINGr$   	OPEN_PATHr!   
PATH_COUNT
NODE_COUNTNODE_INCOMPATIBILITYr   CONTOUR_ORDERlistranger"   r   r   r   r	   rF   r6   
ValueErrorr   WRONG_START_POINTr   rH   rI   UNDERWEIGHT
OVERWEIGHTmaxr   debugZeroDivisionErrorr#   DEFAULT_KINKINESS_LENGTHDEFAULT_KINKINESScomplexrealimagabsKINKNOTHING)]ri   glyphsnamesignore_missingr_   r`   ra   rb   rc   rd   gr-   orderrk   
glyph_name	allGlyphsrM   ro   r'   has_openr7   open	matchingsm1idxglyph1m0idxglyph0m1m0pathIxnodes1nodes2nodeIxn1n2this_tolerancematchingm0Isomorphismsm1Isomorphisms	m0Vectors	m1Vectors
recording0
recording1rh   midRecordingc0c1rcontour0contour1proposed_pointreverserO   midStats	midVectorm0Vecm1Vecsize0size1midSize
overweightproblem_typeexpectedSizetdeviation_thresholdpt0pt1pt0_prevpt1_prevpt0_nextpt1_nextd0_prevd0_nextd1_prevd1_nextsin0sin1dot0dot1r0r1r_diffmidmid_prevmid_nextmid_d0mid_d1sin_midcrossarc_len	deviationdeviation_ratiorj   s]   `                                                                                           @r/   test_genr      sA     BT		QBT		>>1y1y!d1gy1E~ %.GI}}!!!IG+9NGU 
#Z0AJKXU:0	Ky>yeEy>?1D3<	9e,4
/J/$ !!%"$9$A$A&**4  H%e&8&89D 5 ? ?"&&0#%	 	 : x=4
@ FS^+	Eu%F~V%5%5 
3E}u%F~V%5%5 !!B!!B2w#b'! 5 @ @$)%L$)%L(-(-#&r7#&r7  Rx09#b"+0F,F,VV' 6{c&k1&(=(H(H(.,1%L,1%L0505+.v;+.v;	  !,5c&&6I,J(R8 *,A,V,V,2,205e05e4949/1/1
!"#  %! -K% 1GP (:&&'I$NH	) 5 C C$)%L$)%L(-(-#'c(m(<#=#+%3	  $,	%  $00N#00N++I++I**J**J !'H$=E!FX."3X!F3;<8aYq\8	<5=>XjmX
>Lj*5B.$A">"((BHH#EFAG ''*	 6 -6NN3-((Xx $'8})8}H5 :MFB	8;7 "I-"$9$K$K')(-e(-e,1,1'('5(/)7 . 'r*7	"a 01 4)B-:JQ:NO,d;HNN8, 9( CI%bME%bME!!HuQx/E!!HuQx/E'lYq\9G4=1==1<<50
L &+.ue+<L$+/+>L		Y(#(!! !+|i/G'TX./X(jTL94L-Lw-V3#-5AG5KN5<|5KN  IInnE *,8/105e05e49491?!"# A5o-N BB +%.u%56%5be%56A//2CCiO   -6c"bk,B((Xx$'8})8}H5 
 s8}-A"1+C"1+Cq6Q 'AH'AH'Q#h-(?@H'Q#h-(?@H{x{ {x{ !3q6*C!3q6*C&4H&4H&4H&4H "HnG&nG!HnG&nG"<<',,69TTD"<<',,69TTD!Gs7| ;;Gs7| ;; 4y1}D	A  #<<',,69TTD"<<',,69TTDax4!8  WWG)DEBWWG)DEB b\F6{Q 9/C (8 3q8H (8 3q8H 8^F%^F$kkFKK7&++:SSG!3v;V#<<
 7|y'<=B  $c&k1CK?E!&6/2G #EGO 4I #66 &/'&9O&* %&#g,*B%CNIIW!' IInn="$9$>$>')(-e(-e,1,1%&)7	 E . -CD x 5 = =$)%L$)%L(-(-	 	] O + 2
 H$ L>\ "G<> " . ''--.p $5 31230 7t - ! !@ - ! !s6  >m<k9m<""k>7m<;lm<l	
&l	
,B)m<E m<=Cm<l+m<1l m<lm<,A	l5Bm<m<-Cm<
m<m  m<!m &A m<mF=m<4mEm<m*3Cm<Am<l=	8m<<l=	=m< mm<mm<
m'"m<&m''m<*
m94m<8m99m<c                  r    [        [        5      n[        U 0 UD6 H  u  p4X#   R                  U5        M     U$ r&   )r   r   r   r6   )argskwargsproblemsr,   problems        r/   testr   I  s9    4 H&77	""7+ 8Or2   c                 v    X;   a  g X    X'   [        X0   S/ 5       H  n[        UR                  XU5        M     g )N
components)r5   recursivelyAddGlyph	glyphName)r,   r-   
ttGlyphSetglyf	components        r/   r   r   Q  s>    $/HT_lB?	I//tL @r2   c                 |    [         R                  R                  U 5      nU(       a  [         R                  " USS9  U $ )NT)exist_ok)osrv   dirnamemakedirs)rv   r   s     r/   ensure_parent_dirr   Z  s*    ggood#G
Gd+Kr2   c                 *  ^^b^c SSK nSSKnUR                  S[        R                  S9nUR                  SSSS9  UR                  S	S
SS9  UR                  SS[        S[        -  S9  UR                  SS[        S[        -  S9  UR                  SS
SS9  UR                  SSSS9  UR                  SSSS9  UR                  SSSS9  UR                  SS
SS9  UR                  SSSS9  UR                  SS
SS9  UR                  SS [        S!S"S#9  UR                  S$S%[        S&S'S(9  UR                  S)S*S
S+S9  UR                  S,S
S-S9  UR                  U 5      n SS.KJn  U" U R                  (       a  S/OS0S19  U R                  (       a  U" S2S19  U R                  (       a  U R                  R!                  5       OSnSS3KJn  / n/ n/ n	['        5       n
[(        n[+        U R,                  5      n[/        U R,                  5      S4:X  GaI  SnU R,                  S   R1                  S55      (       Gav  SS6KJn  UR7                  U R,                  S   5      nUR8                   Vs/ s H  oR:                  PM     snU l        UR8                   Vs/ s H  oR<                  PM     n	nUR>                   Vs1 s H"  n[A        US75      (       a  M  URB                  iM$     n
nUR>                   Vs0 s HC  nURB                  U
;  d  M  URB                  URD                  URF                  URH                  4_ME     nnUR>                   Vs0 s H  nURB                  URJ                  _M     snmcURM                  5        V^Vs0 s H  u  mnT[+        UcU4S8 jU 5       5      _M     nnnGOU R,                  S   R1                  S95      (       Ga{  SS:K'J(nJ)n  U" U R,                  S   5      nURT                  nU" U5      nUR8                   Vs/ s H  nURV                  PM     nnU Vs/ s H4  nURX                  RZ                  < S;URX                  R\                  < 3PM6     nn/ U l        UR8                   Vs/ s H  oR<                  PM     n	nUR>                   Vs0 s H1  nURB                  URD                  URF                  URH                  4_M3     nnUR>                   Vs0 s H  nURB                  URJ                  _M     snmcURM                  5        V^Vs0 s H  u  mnT[+        UcU4S< jU 5       5      _M     nnnGOU R,                  S   R1                  S=5      (       d$  U R,                  S   R1                  S>5      (       Ga  SS?K/J0n  U" U R,                  S   5      nUS@   Rb                  nUSA   n0 mbUR>                   H4  nURd                  URf                  URh                  SB.TbURj                  '   M6     SCnSDU;   a  USD   n[m        URn                  SES5      (       a  Tb Vs0 s H
  nUSFSS4SB._M     snmbSGnOcURp                  RM                  5        HE  u  n n!TbU    Rs                  5       n"U!RM                  5        H  u  n#n$[u        U#U"5      TbU    U$'   M     MG     0 n%[w        [x        5      n&SHU;   a  USH   n'USI   n(Uc#  [{        U'R|                  R                  5       5      nU H  n)U'R|                  U)    H  n*0 n+/ n,[{        U*R>                  RM                  5       5       H$  u  nn-U-S4   U+U'   U,R                  UU-S4   45        M&     [+        U,5      n.U.U%;  a  UR                  U+SGSCSJ9U%U.'   [        U)U&U.   U%U.   U(5        M     M     GOSKU;   Ga  USA   R>                  n/USK   R                  R                  S   n0U0R                  n1Uc  [{        U1R                  5       5      nU GH  n)U1U)   n2U2R                  n3[m        U3SLS5      1n4[m        U3SLS5      n5Sn6[        U2R                  5       H<  n7U7SM:X  a  U4R                  U55        OU7SL:X  a  [        U6[        5      (       d   eU6n5U7n6M>     [A        U3SN5      (       d  M  U3R                  R                  n8U4 H  n5U8R                  U5   n9U9R                   H  n:U8R                  R                  U:   n;0 n+/ n,[        U;R                  5       H9  u  n<nU/U<   Rj                  nUR                  n-U-U+U'   U,R                  UU-45        M;     [+        U,5      n.U.U%;  a  UR                  U+SGSCSJ9U%U.'   U&U.   n=U%U.   U)   U=U)'   M     M     GM     SO/nUR                  5       /n0 /n	[{        TbR                  5       5       Vs0 s H  nUSB_M     nn[{        U&R                  5       SP SQ9 Ho  n.SRSSR                  Ub4ST jU. 5       5      -   SR-   n>U(       a  U>SU-  n>UR                  U>5        UR                  U&U.   5        U	R                  [y        U.5      5        Mq     SGU lU        / U l        U	(       d  U V?s/ s H  n?0 PM     n	n?U R,                   H  n@U@R1                  SV5      (       aG  SSWKVJWnA  UA" W@5      n[        5       nBUR                  UB5        UBRb                  nUR                  U5        O.SS?K/J0n  U" W@5      nUS@   Rb                  nUR                  U5        UR                  U" W@5      R                  SXS45      S   5        M     [/        U5      SY:  a  [        R                  SZ5        g/ n&U H[  n[A        US[5      (       a  UR                  5       n=OUn=U&R                  U=R                  5        Vs0 s H	  nUU=U   _M     sn5        M]     U RB                  (       a  ['        U RB                  5      nC[        UU&5       V>V=s/ s H  u  n>n=U>WC;   d  M  U=PM     n&n>n=[        X5       V>V#s/ s H  u  n>n#U>WC;   d  M  U#PM     n	n>n#U V>s/ s H  n>U>WC;   d  M  U>PM     nn>U(       d?  [{        ['        U& V=VDs/ s H  n=U=R                  5         H  nDUDPM     M     snDn=5      5      n['        U5      nEU& H8  n=['        U=R                  5       5      nFWEUF-
  nGUG(       d  M*  WG H  nDSU=UD'   M
     M:     U	 V,VVHs/ s H@  n,0 [        U,W5      EU,RM                  5        VVHs0 s H  u  nnHUU
;   d  M  UWH_M     snHnEPMB     n	nn,nHU R                  =(       d    [        nIU R                  b  U R                  O[        nJ [        RY                  S\[/        U&5      5        [        RY                  S][        U	5      5        [        U&UUU	UU R                  WIUJU R                  U
S^9
nK[w        [        5      nLU R                  c  UR                  O[        [        U R                  5      S_5      nU R                  (       Gd.  U R                  (       a?  SSKjnMWK H  u  n)nNWLU)   R                  UN5        M     [        WMR                  WL5      US`9  GOSnOWK GH  u  n)nPWLU)   R                  UP5        U)WO:w  a  [        SaU) Sb3US`9  U)nOSnQScWP;   a  WPSc   4O	WPSd   UPSe   4nRURWQ:w  a4  SfWP;   a  WPSf   4O	WPSg   UPSh   4nS[        SiSjR                  US5      -  US`9  WRnQWPSk   [        R                  :X  a  [        SlWPSf   -  US`9  M  WPSk   [        R                  :X  a  [        SmWPSf   -  US`9  M  WPSk   [        R                  :X  a   [        SnWPSo   UPSg   UPSp   UPSh   4-  US`9  GM  WPSk   [        R                  :X  a$  [        SqWPSr   UPSo   UPSg   UPSp   UPSh   4-  US`9  GMG  WPSk   [        R                  :X  a(  [        SsWPSt   UPSr   UPSo   UPSg   UPSp   UPSh   4-  US`9  GM  WPSk   [        R                  :X  a)  [        SuWPSo   < SvUPSg   < SjUPSp   < SvUPSh   < 3US`9  GM  WPSk   [        R                  :X  a(  [        SwWPSx   UPSo   UPSg   UPSp   UPSh   UPSy   4-  US`9  GM  WPSk   [        R                  :X  a  [        SzWPSx   UPSg   UPSh   4-  US`9  GM8  WPSk   [        R                  :X  a  [        S{WPSx   UPSg   UPSh   4-  US`9  GMk  WPSk   [        R                  :X  a   [        S|WPSx   UPS}   UPSg   UPSh   4-  US`9  GM  WPSk   [        R                  :X  d  GM  [        S~WPSg   < SUPSh   < 3US`9  GM     O WK H  u  n)nNWLU)   R                  UN5        M     [        WL5      nLS H  nP[m        U UP5      nTUTc  M  [        RY                  SWPR                  5       WT5        S4SK{J|nUJ}nV  UPS:X  a  WUOWVnWUW" [        WT5      U&US9 nXUXR                  UWIWJS9  WL(       a  WXR                  WL5        WXGR                  WL5        UL(       d"  U R                  (       d  WXGR                  5         WL(       a"  WXGR                  5         UXGR                  5         SSS5        M     U GR                  (       Ga  [        RY                  SU GR                  5        S4SK{JnY  / nZ0 n[UY" UZU&US9 n\U\R                  USCWIWJS9  WLRM                  5        H(  u  n]n^U]W[[/        WZ5      '   W\GR                  U]U^0SCSCS9  M*     WL(       d"  U R                  (       d  W\GR                  5         SSS5        SSKn_[        [        U GR                  5      S5       nUGR                  S5        UGR                  S5        UGR                  S5        [        WZ5       H  u  n`n\U`W[;   a)  UGR                  SW[W`    S3GR                  S5      5        UGR                  SGR                  S5      5        UGR                  W_GR                  W\5      5        UGR                  S5        UGR                  S5        M     UGR                  S5        SSS5        O WL(       a  WL$ gs  snf s  snf s  snf s  snf s  snf s  snnf s  snf s  snf s  snf s  snf s  snf s  snnf s  snf s  snf s  sn?f s  snf s  sn=n>f s  sn#n>f s  sn>f s  snDn=f s  snHnf s  snHnn,f ! , (       d  f       GMo  = f! , (       d  f       GN= f! , (       d  f       N= f! G[         a2  naUa=GR                  U-  sl        [        GR                  Ua5        e SnaAaff = f)z/Test for interpolatability issues between fontsr   Nzfonttools varLib.interpolatable)descriptionz--glyphsstorez&Space-separate name of glyphs to check)actionhelpz
--show-all
store_truez3Show all glyph pairs, even if no problems are foundz--tolerancez,Error tolerance. Between 0 and 1. Default %s)r   rm   r   z--kinkinessz)How aggressively report kinks. Default %sz--jsonzOutput report in JSON formatz--pdfzOutput report in PDF formatz--psz"Output report in PostScript formatz--htmlzOutput report in HTML formatz--quietz%Only exit with code 1 or 0, no outputz--outputz3Output file for the problem report; Default: stdoutz--ignore-missingz<Will not report glyphs missing from sparse masters as errorsinputsFILE+zSInput a single variable font / DesignSpace / Glyphs file, or multiple TTF/UFO files)metavarrm   nargsr   z--nameNAMEr6   zGName of the master to use in the report. If not provided, all are used.)r  rm   r   r   z-vz	--verbosezRun verbosely.z--debugzRun with debug output.)configLoggerINFOWARNING)levelDEBUG)basenamer   z.designspace)DesignSpaceDocumentminimumc              3   T   >#    U  H  n[        U[        TT   5      5      v   M     g 7fr&   r   dict.0vaxis_mappingsks     r/   	<genexpr>main.<locals>.<genexpr>  (     SPR1+AtM!4D/EFFPR   %()z.glyphsz.glyphspackage)GSFontto_designspace-c              3   T   >#    U  H  n[        U[        TT   5      5      v   M     g 7fr&   r  r  s     r/   r  r    r  r  z.ttfz.otf)TTFontheadfvar)r?   r   r   FavarVarStorer?   Tgvarr   )location
normalizedrecalcBoundsCFF2vsindexblendvstorez''c                     [        U 5      U 4$ r&   )r4   )r  s    r/   <lambda>main.<locals>.<lambda>e  s    CFA;r2   )key' c           
   3   h   >#    U  H'  u  pU< S [        [        UTU   5      S5      < 3v   M)     g7f)=   N)r   r   )r  r  r  axisMappings      r/   r  r  h  s;      	 %-DA - 21k!n Er %-s   /2z (normalized)z.ufo)	UFOReader.ry   z9Font file does not seem to be variable. Nothing to check.getGlyphSetzRunning on %d glyphsetszLocations: %s)	r   r   r_   rb   r   r`   ra   rc   rd   w)filezGlyph z was not compatible:ro   rr   rs   rn   rp   rq   z  Masters: %s:z, rm   z"    Glyph was missing in master %sz'    Glyph has an open path in master %sz*    Path count differs: %i in %s, %i in %srt   ru   z5    Node count differs in path %i: %i in %s, %i in %srv   z7    Node %o incompatible in path %i: %s in %s, %s in %srw   z    Contour order differs: z in zD    Contour %d start point differs: %s in %s, %s in %s; reversed: %srO   rx   z3    Contour %d interpolation is underweight: %s, %sz2    Contour %d interpolation is overweight: %s, %sz'    Contour %d has a kink at %s: %s, %srF   z    Showing z and )pspdfzWriting %s to %s)InterpolatablePSInterpolatablePDFr9  )ri   r   )r`   ra   zWriting HTML to %s)InterpolatableSVG)show_tolerancer`   ra   )r>  show_page_numberwbs   <!DOCTYPE html>
sN   <html><body align="center" style="font-family: sans-serif; text-color: #222">
s6   <title>fonttools varLib.interpolatable report</title>
z
<h1>Glyph z</h1>
zutf-8z$<img src='data:image/svg+xml;base64,s   ' />
s   <hr>
s   </body></html>
)argparsesysArgumentParsermain__doc__add_argumentfloatDEFAULT_TOLERANCEr   str
parse_args	fontToolsr  verboser   r   splitos.pathr
  setDEFAULT_UPEMtupler   r4   endswithfontTools.designspaceLibr  fromfilesourcesrv   r#  axeshasattrr'   r  defaultmaximummapitems	glyphsLibr  r  upmfontr~   
familyName	styleNamefontTools.ttLibr  
unitsPerEmminValuedefaultValuemaxValueaxisTagr5   tablesegmentscopyr   r   r  sorted
variationsr{   r6   r6  r   cfftopDictIndexCharStringsprivaterG   programadd
isinstanceintr)  
otVarStoreVarDataVarRegionIndexVarRegionListRegionVarRegionAxis	PeakCoordjoinr   fontTools.ufoLibr4  r   readInforsplitr}   warningr   r   r`   ra   r   r   rc   r   outputstdoutr   r   quietjsonprintdumpsr   r   r   r   r   r   r   r   r   r   r   r   sort_problemsupperinterpolatablePlotr;  r<  add_title_pageadd_summaryadd_problemsdraw_cupcake	add_indexadd_table_of_contentshtmlr=  base64writeencode	b64encode	Exceptionr   error)dr   rA  rB  parserr  r   r
  fontsr   r_   rd   rb   original_args_inputsdesignspacer  rn   aaxis_triplesr  vvr  r  gsfontsourcefr  r^  r  axisr$  r   tagrf  rh  fvarMappingr#  rF   ttGlyphSetsri   r"  r   r,   varlocDictlocvallocTuplefvarAxescff2charstringscsro  	vsindicesr'  last_oprP   varStorevarDataregionIndexregion	axisIndexr-   r'   _filenamer4  r~   accepted_namesgn	glyphsSetglyphSetGlyphNamesdiffr  r`   ra   problems_genr   r  r   last_glyphnameplast_master_idxsmaster_idxsmaster_namesrQ   r;  r<  PlotterClassdocr=  svgsglyph_startssvgrM   glyph_problemsr  rh   rR   r3  r  sd                     `                                                                               @@r/   rD  rD  a  sW   $$)LL % F 5  
 B  
 ;>OO	   8;LL	   +  
 *  
 1  
 +  
 4  
 B  
 K  
 b   V   k,EUV
	,=UVT"D&$,,I?zz7#$(KKT[[ TF EEIEMD -
4;;1;;q>"">22D-66t{{1~FK5@5H5HI5H6;;5HIDK7B7J7JK7JV7JIK + 0 0 0198M 0  
 %)))A66. :AIIqyy99)  
 5@4D4DE4DqQVVQUU]4DEM *//11EAr 5SPRSSS1  L
 [[^$$%BCC8DKKN+F::D(0K/:/B/BC/BVV[[/BECNSTe 1 11663C3CDeETDK7B7J7JK7JV7JIKCNCSCSCSaAIIqyy99CS   5@4D4DE4DqQVVQUU]4DEM *//11EAr 5SPRSSS1  L
 [[^$$V,,A0G0G0O0O. $++a.)D<**D<DK		((}}-DLL) " J~F|4::z488HS"T3RA!(<#<"TK!%J-1]]-@-@-B)&1'&:&?&?&A/7~~/?OHe:L (+;K07 0@ .C K#D)I~F|F|>#DOO$8$8$:;F!'I#y9"$ (.sxx~~/?(@HC+.q6GCLJJSV}5 )A $):#;6484D4D)0TPU 5E 5K1 ,%y':K<QSW  : "($ 4<,,F|''44Q7"..>#K$4$4$67F!'I$Y/B jjG "))Q!? @I%gy!<GG (

3=%MM'29_#-gs#;#;;#;&-G"$ 4 #7H55 &~~88H#,"*"2"27";+2+A+AK%-%;%;%B%B;%OF&(G"$C3<V=Q=Q3R	4&.y&9&A&A&*nn/2 #

C: 6	 4S (-SzH'{:8<8H8H-4/316 9I 9"H 5 (1':H2=h2G	2RHY/) ,B $-/ "(^ FE%%'(EI4:;;K;K;M4NO4NqA{N4NLO"9>>#39NOhh 	 %-	 	
   O+DT"Yx01  h0' P* #'DDK!&'AR	'KKV$$2X&D"$DMM$??DLL.(#D<**DLLXh'..sA6q9:!  $ 5zA~OPI4'''')HH(--/B/Q!Xa[./BC  yyTYY #&eY"7
"7h~% "7 	 
 #&e"7
"7h~% "7 	 

 #(B%$4>+A%B	T	HHMMObROR	TUVFI 1--4# 	  
 C		
\2	
 #		B1qM/Atq!tB	
    3"3I"&.."<BSIm*C	N;')"45..]]'
 t$ {{" JJ'4c: 	
 zzzyy*6&IwY'..w7 +7 djj*3!%$0LIqY'..q1 N2yk1EFQO)2+/( (1, <*/>1BC  
 #&66  (1} x[N"#J-:!? %
 $))L2IIPQR+6(y$9$A$AA@1X;NUV 6&;&E&EEE(S!" 6&;&F&FFH !) !* !) !*	 "#	 6&;&F&FFS !&	 !) !* !) !* "#
 6&;&P&PPU !&	 !&	 !) !* !) !* "# 6&;&I&II !") !* !) !* "#	 6&;&M&MMb !) !) !* !) !* !* "# 6&;&G&GGQ !) !* !* "# 6&;&F&FFP !) !* !* "# 6&;&@&@@E !) !'
 !* !*	 "#	 6&;&C&CC !"* !*
 "#w %1H '3"	7#**73 '3 !*A$"C{HH'C8O/0Dy+>OL!#&)5""(I #  OOH-  *

$$&MMO--/  0 999HH)4995=DL"49EJc""(#(''	 #  .6^^-=)E>.3LT+$$/',). %  .>  

$$& K" '		2D9Q,-f RS'oFAsL(*\!_,=W E L LW UVGGBII'RSGGF,,S12GGI&GGI& . +, :93 Z  G JK
 F DTK F2 #U~ P4 (< C



 C U Cz * KJ& :9  	&&		!sh  %AQ*AQ/5AQ4AQ4.AQ92AQ9!AQ> $ARAR	(;AR:AR8AR'!AR$AR"1AR(-AR-!AR2$AR7
4AR<AR<AS-AS:
ASAS&$AS%&ASASAS#	AS)OAT D6B'AT GBAS I+AAT J=A8AS3L5,AT M!C5ATQAT SASS 
AS0	S*	AT S3
ATS=AT T
ATTAT TAT TAUT!-AUUAU__main__)NNFr&   )8rE  interpolatableHelpersinterpolatableTestContourOrderr   interpolatableTestStartingPointr   fontTools.pens.recordingPenr   r   r	   fontTools.pens.transformPenr
   fontTools.pens.statisticsPenr   r   fontTools.pens.momentsPenr   fontTools.varLib.modelsr   r   fontTools.misc.fixedToolsr   fontTools.misc.transformr   collectionsr   typesr   	functoolsr   pprintr   mathr   r   r   loggingr   	getLoggerr}   rH  r   r   rP  r   r   r   r   r   rD  rY   rB  r   exitrs  boolr^   r2   r/   <module>r     s   % > @ 
 5 L 6 I 7 . # !        	9:    U3 U3t 
	G 	GT x MQ	h zvHHHSh !	 r2   