
    Mcg                        d Z ddl ddlmZ ddlmZ ddlmZmZm	Z	 ddl
mZ ddlmZmZ dd	lmZ dd
lmZmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlmZ ddl m!Z!m"Z"m#Z# ddl$Z$ddl%Z% e$jL                  d      Z'dZ(dZ)dZ*dZ+ G d d      Z,	 	 	 d"de(e)e+dg ddZ- ee-      d        Z.d Z/d Z0d#d Z1e2d!k(  r*ddl3Z3 e1       Z4 e3jj                   e6 e7e4                   yy)$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                   *    e Zd ZdZd Zd Zd ZddZy)Glyph)	
recordings
greenStatscontrolStatsgreenVectorscontrolVectors	nodeTypesisomorphismspointsopenContoursc                 p    || _         | j                  D ]  }t        | |g         | j                  |       y N)nameITEMSsetattr	_populate)self	glyphnameglyphsetitems       Z/var/www/html/bid-api/venv/lib/python3.12/site-packages/fontTools/varLib/interpolatable.py__init__zGlyph.__init__4   s/    	JJDD$# x     c                     | j                   D ]6  }t        t        | |            |k(  st        | |      j                  d        8 y r%   )r'   lengetattrappend)r*   ixr-   s      r.   _fill_inzGlyph._fill_in:   s9    JJD74&'2-d#**40 r0   c                 r   || j                      }|d u | _        | j                  ry t        t        |      }	 |j	                  |d       |j                  | _        ~t        | j                        D ]  \  }}|j                  D cg c]  \  }}|	 }}}| j                  j                  |       t        |      }	t        |      }
	 |j                  |	       |j                  |
       | j                  j                  d       | j"                  j                  |	       | j$                  j                  |
       | j&                  j                  t)        |	             | j*                  j                  t)        |
             |d   dk(  r| j!                  |       /|d   dk(  sJ |d   d	v sJ t-               }t/        |d      }|j                  |       | j0                  j                  |j                         g }| j2                  j                  |       t5        |j                  |d       t5        |j                  |d        y # t
        $ r |j	                  |       Y !w xY wc c}}w # t        $ r7}| j                  j                  d       | j!                  |       Y d }~?d }~ww xY w)
Nr,   T)outputImpliedClosingLineFr   addComponentmoveTo)	closePathendPath)r&   doesnt_existPerContourOrComponentPenr   draw	TypeErrorvaluer   	enumerater    r4   r   r   replayr#   r   r6   r   r   r   contour_vector_from_statsr   SimpleRecordingPointPenSegmentToPointPenr"   r!   add_isomorphisms)r*   r,   glyphperContourPenr5   contouropargr    r   r   er"   	converterr!   s                  r.   r)   zGlyph._populate?   sM   #!TM0Q	&JJ}tJD (--$T__5KB+2==9=C=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 I0=I6I-,I-6	J6?,J11J6Nc                     |#| j                   D ]  }|j                  |        y | j                   |   j                  |       y r%   )r   rA   )r*   pencountor_idxrL   s       r.   rA   z
Glyph.draww   s;    ??S! + OOK(--c2r0   r%   )__name__
__module____qualname__r'   r/   r6   r)   rA    r0   r.   r   r   '   s    
E!1
6?p3r0   r   F)	locations	tolerance	kinkinessupemshow_alldiscrete_axesc             #   D   \K   |dk\  r|dz  }d|cxk  rdk  sJ  J |dk\  r|dz  }d|k  sJ |xs  D 
cg c]  }
t        |
       c}
}|& D 
ch c]  }|j                         D ]  }
|
  }}}
t         ||	      \  \} \fd}|D 	]  }t        j	                  d|        D cg c]  }t        ||       }}t        |D cg c]  }|d	 c}      dk  rSt        t        | |            D ]p  \  }\  }}}|j                  r|s|t        j                  ||df 1d	}t        |j                        D ]#  \  }}|s	d
}|t        j                  |||df % |sqr d gt               z  }|D ]  }||   }||j                  s |||      }|$||   }||j                  s8|j                  }|j                  }t        |      t        |      k7  r5|t        j                  ||   ||   ||t        |      t        |      df ||k7  rt        t        ||            D ]  \  }\  }}||k(  rt        |      t        |      k7  r6|t        j                   |||   ||   ||t        |      t        |      df \t        t        ||            D ]2  \  } \  }!}"|!|"k7  s|t        j"                  || ||   ||   |||!|"d	f 4  t%        ||      \  }#}$|#|k  rC|t        j&                  ||   ||   ||t)        t+        t        |$                  |$|#df |$||<   |j,                  }%|j,                  }&|j.                  }'|j.                  }(|j0                  })|j0                  }*||   }$|$8|&r6|$D +cg c]  }+|&|+   	 }&}+|$D +cg c]  }+|(|+   	 }(}+|$D +cg c]  }+|*|+   	 }*}+g },t        |)|*      D ]O  \  }-}.	 t3               }/t)        t5        |-j6                  |.j6                              |/_        |,j9                  |/       Q t        t        |%|&            D ]  \  }\  }0}1|0'|1%t        |0      dk(  st        |0      t        |1      k7  r4t=        |||||$      \  }#}2}3|#|k  r%|t        j>                  |||   ||   ||d|2|3|#d
f |,|   }4|4sy|'|   d   dk  |(|   d   dk  k(  stA        d       }5|4jC                  |5       tE        |5      }6|'|   }7|(|   }8|7d   |7d   z  }9|8d   |8d   z  }:|6d   |6d   z  };t        t        jF                  t        jH                  f      D ]  \  }<}=|<rtK        |9|:      }>tM        |9|:z        }>t        jO                  d|=|;|>|9|:       |<s|>|z  |;dz   kD  s|<sMd|>|z  z   |;k  sY	 |<r|>|;z  }#n|;|>z  }#t        jO                  d|#       ||=|||   ||   |||#df   |jR                  }|jR                  }||   |r||   D +cg c]  }+||+   	 }}+d}?|tT        z  tV        z  |z  }@t        t        ||            D ]  \  }\  }0}1|0'|1%t        |0      dk(  st        |0      t        |1      k7  r4t+        t        |0            D ]}  }+|0|+   }A|1|+   }B|Ad   rBd   s|0|+dz
     }C|1|+dz
     }D|0|+dz   t        |0      z     }E|1|+dz   t        |1      z     }F|Cd   rDd   r\Cd   rDd   rgtY        Ad    }AtY        Bd    }BtY        Cd    }CtY        Dd    }DtY        Ed    }EtY        Fd    }F|A|Cz
  }G|E|Az
  }H|B|Dz
  }I|F|Bz
  }J|GjZ                  |Hj\                  z  |Gj\                  |HjZ                  z  z
  }K|IjZ                  |Jj\                  z  |Ij\                  |JjZ                  z  z
  }L	 Kt_        G      t_        H      z  z  }KLt_        I      t_        J      z  z  }Lt_        K      |?kD  st_        L      |?kD  rvGjZ                  HjZ                  z  |Gj\                  |Hj\                  z  z   }MIjZ                  JjZ                  z  |Ij\                  |Jj\                  z  z   }N|Mdk  sNdk  rt_        G      t_        |G      t_        H      z   z  }Ot_        I      t_        |I      t_        J      z   z  }Pt_        |O|Pz
        }Qt_        |Q      |?k  rLABz   dz  }RCDz   dz  }SEFz   dz  }T|R|Sz
  }U|T|Rz
  }V|UjZ                  |Vj\                  z  |Uj\                  |VjZ                  z  z
  }W	 Wt_        U      t_        V      z  z  }Wt_        W      ||z  z  |?k  rWt_        U      z  t_        V      z  }Xt_        |U|Vz         }Yt_        |X|Yz        }Z|Z@k  rZYz  }[|[|?kD  r|?t_        W      |z  z  }#t        jO                  dZ[|WQ       t        jO                  d|#       |t        j`                  |||   ||   |||+|#df   |s|t        jb                  ||   ||   ||df  	 y c c}
w c c}
}w c c}w c c}w c c}+w c c}+w c c}+w # t:        $ r |,j9                  d        Y w xY w# tP        $ r d}#Y w xY wc c}+w # tP        $ r Y w xY w# tP        $ r Y 'w xY ww)N
   g{Gz?r   r   )r]   c                 ^    | y |    } | y |    |    |   |    } |    	|    |   | S r%   rW   )ir+   	glyphsetsparentss     r.   grand_parentztest_gen.<locals>.grand_parent   s\    9AJ9aj$1i)@)H
A aj$1i)@)Hr0   zTesting glyph %s)typemaster
master_idxFT)re   rf   rg   rL   )re   master_1master_2master_1_idxmaster_2_idxvalue_1value_2)re   pathrh   ri   rj   rk   rl   rm   )	re   rn   noderh   ri   rj   rk   rl   rm   )re   rh   ri   rj   rk   rl   rm   rY   )
re   rL   rh   ri   rj   rk   rl   rm   reversedrY   r8   z;%s: actual size %g; threshold size %g, master sizes: %g, %ggh㈵>ztolerance %g)re   rL   rh   ri   rj   rk   rY   g?   z=kink: deviation %g; deviation_ratio %g; sin_mid %g; r_diff %g)re   rL   rh   ri   rj   rk   rC   rY   )re   rh   ri   rj   rk   )2reprkeysfind_parents_and_orderloginfor   r2   rD   zipr?   InterpolatableProblemMISSINGr#   	OPEN_PATHr    
PATH_COUNT
NODE_COUNTNODE_INCOMPATIBILITYr   CONTOUR_ORDERlistranger!   r   r   r   r	   rC   r4   
ValueErrorr   WRONG_START_POINTr   rE   rF   UNDERWEIGHT
OVERWEIGHTmaxr   debugZeroDivisionErrorr"   DEFAULT_KINKINESS_LENGTHDEFAULT_KINKINESScomplexrealimagabsKINKNOTHING)]rb   glyphsnamesignore_missingrX   rY   rZ   r[   r\   r]   gr,   orderrd   
glyph_name	allGlyphsrJ   rg   r&   has_openr5   open	matchingsm1idxglyph1m0idxglyph0m1m0pathIxnodes1nodes2nodeIxn1n2this_tolerancematchingm0Isomorphismsm1Isomorphisms	m0Vectors	m1Vectors
recording0
recording1ra   midRecordingc0c1rcontour0contour1proposed_pointreverserL   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_ratiorc   s]   `                                                                                           @r.   test_genr      sB     BT		QBT		>>1y1y!d1gy1E~ %.GIx}}!!!IG+9MNGU 
#Z0AJKXU:x0	Ky>yeE,=y>?1D3<	9e,4
/J/$ !!%"$9$A$A&**4  H%e&8&89D 5 ? ?"&&0#%	 	 : =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*	"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(TL94L-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|y9'<=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  5 = =$)%L$)%L(-(-	 	] O + 2
 H$ L>\ "G<> " . ''-.p $5 31230 7t - ! !@ - ! !s)  4j h$

j h)2:j ,h/?j 
h4
h4
Bj (Ej 1Cj h9j h>#j )i5j A	iBj %j =Cj j i) Aj 5i;Fj 4j E	j j1C
j =Aj i&	"j %i&	&j )i84j 7i88j  	j	j jj 	jj jj c                  r    t        t              }t        | i |D ]  \  }}||   j                  |        |S r%   )r   r   r   r4   )argskwargsproblemsr+   problems        r.   testr   I  s=    4 H&77	7""7+ 8Or0   c                 x    | |v ry ||    || <   t        ||    dg       D ]  }t        |j                  |||        y )N
components)r3   recursivelyAddGlyph	glyphName)r+   r,   
ttGlyphSetglyf	components        r.   r   r   Q  sH    H$Y/HYT)_lB?	I//:tL @r0   c                 v    t         j                  j                  |       }|rt        j                  |d       | S )NT)exist_ok)osrn   dirnamemakedirs)rn   r   s     r.   ensure_parent_dirr   Z  s*    ggood#G
Gd+Kr0   c                 (  bc ddl }ddl}|j                  dt        j                        }|j                  ddd       |j                  d	d
d       |j                  ddt        dt        z         |j                  ddt        dt        z         |j                  dd
d       |j                  ddd       |j                  ddd       |j                  ddd       |j                  dd
d       |j                  ddd       |j                  dd
d       |j                  dd t        d!d"#       |j                  d$d%t        d&d'(       |j                  d)d*d
d+       |j                  d,d
d-       |j                  |       } dd.lm}  || j                  rd/nd01       | j                  r	 |d21       | j                  r| j                  j!                         nd}dd3lm} g }g }g }	t'               }
t(        }t+        | j,                        }t/        | j,                        d4k(  rd}| j,                  d   j1                  d5      r[dd6lm} |j7                  | j,                  d         }|j8                  D cg c]  }|j:                   c}| _        |j8                  D cg c]  }|j<                   }	}|j>                  D ch c]  }tA        |d7      r|jB                   }
}|j>                  D ci c]>  }|jB                  |
vr.|jB                  |jD                  |jF                  |jH                  f@ }}|j>                  D ci c]  }|jB                  |jJ                   c}c|jM                         D ci c]  \  }t+        cfd8|D               }}}nQ| j,                  d   j1                  d9      rgdd:l'm(}m)}  || j,                  d         }|jT                  } ||      }|j8                  D cg c]  }|jV                   }}|D cg c]1  }|jX                  jZ                  d;|jX                  j\                  3 }}g | _        |j8                  D cg c]  }|j<                   }	}|j>                  D ci c]0  }|jB                  |jD                  |jF                  |jH                  f2 }}|j>                  D ci c]  }|jB                  |jJ                   c}c|jM                         D ci c]  \  }t+        cfd<|D               }}}n| j,                  d   j1                  d=      s| j,                  d   j1                  d>      rdd?l/m0}  || j,                  d         }|d@   jb                  }|dA   }i b|j>                  D ]3  }|jd                  |jf                  |jh                  dBb|jj                  <   5 dC}dD|v r|dD   }tm        |jn                  dEd      rbD ci c]	  }|dFdd4dB c}bdG}n_|jp                  jM                         D ]B  \  } }!b|    js                         }"|!jM                         D ]  \  }#}$tu        |#|"      b|    |$<    D i }%tw        tx              }&dH|v r|dH   }'|dI   }(|#t{        |'j|                  j                               }|D ]  })|'j|                  |)   D ]  }*i }+g },t{        |*j>                  jM                               D ]#  \  }}-|-d4   |+|<   |,j                  ||-d4   f       % t+        |,      }.|.|%vr|j                  |+dGdCJ      |%|.<   t        |)|&|.   |%|.   |(         ndK|v r|dA   j>                  }/|dK   j                  j                  d   }0|0j                  }1|t{        |1j                               }|D ]j  })|1|)   }2|2j                  }3tm        |3dLd      h}4tm        |3dLd      }5d}6t        |2j                        D ]4  }7|7dMk(  r|4j                  |5       n|7dLk(  rt        |6t              sJ |6}5|7}66 tA        |3dN      s|3j                  j                  }8|4D ]  }5|8j                  |5   }9|9j                  D ]  }:|8j                  j                  |:   };i }+g },t        |;j                        D ]8  \  }<}|/|<   jj                  }|j                  }-|-|+|<   |,j                  ||-f       : t+        |,      }.|.|%vr|j                  |+dGdCJ      |%|.<   |&|.   }=|%|.   |)   |=|)<     m dOg}|j                         g}i g}	t{        bj                               D ci c]  }|dB }}t{        |&j                         dP Q      D ]h  }.dRdSj                  bfdT|.D              z   dRz   }>|r|>dUz  }>|j                  |>       |j                  |&|.          |	j                  ty        |.             j dG| _U        g | _        |	s|D ?cg c]  }?i  }	}?| j,                  D ]  }@|@j1                  dV      rGddWlVmW}A  |A@      }t               }B|j                  |B       |Bjb                  }|j                  |       n.dd?l/m0}  |@      }|d@   jb                  }|j                  |       |j                   |@      j                  dXd4      d           t/        |      dYk  rt        j                  dZ       yg }&|D ]R  }tA        |d[      r|j                         }=n|}=|&j                  |=j                         D ci c]  }||=|   
 c}       T | jB                  rmt'        | jB                        }Ct        ||&      D >=cg c]  \  }>}=|>Cv r|= }&}>}=t        ||	      D >#cg c]  \  }>}#|>Cv r|# }	}>}#|D >cg c]	  }>|>Cv s|> }}>|s9t{        t'        |&D =Dcg c]  }=|=j                         D ]  }D|D  c}D}=            }t'        |      }E|&D ]/  }=t'        |=j                               }FE|Fz
  }G|Gs$GD ]  }Dd|=|D<   	 1 |	D ,Hcg c]9  },i t        |,      |,jM                         D Hci c]  \  }}H||
v s|H c}H}; }	}},}H| j                  xs t        }I| j                  | j                  nt        }J	 t        jY                  d\t/        |&             t        jY                  d]t        |	             t        |&|||	|| j                  IJ| j                  |
^
      }Ktw        t              }L| j                  |j                  nt        t        | j                        d_      }| j                  s-| j                  r@ddlj}MKD ]  \  })}NL|)   j                  |N        t        Mj                  L      |`       nd}OKD ]  \  })}PL|)   j                  |P       |)Ok7  rt        da|) db|`       |)}Od}QdcPv rPdc   fn	Pdd   |Pde   f}R|RQk7  r5dfPv rPdf   fn	Pdg   |Pdh   f}St        didjj                  |S      z  |`       R}QPdk   t        j                  k(  rt        dlPdf   z  |`       Pdk   t        j                  k(  rt        dmPdf   z  |`       Pdk   t        j                  k(  r"t        dnPdo   |Pdg   |Pdp   |Pdh   fz  |`       Pdk   t        j                  k(  r&t        dqPdr   |Pdo   |Pdg   |Pdp   |Pdh   fz  |`       KPdk   t        j                  k(  r*t        dsPdt   |Pdr   |Pdo   |Pdg   |Pdp   |Pdh   fz  |`       Pdk   t        j                  k(  r't        duPdo   dv|Pdg   dj|Pdp   dv|Pdh   |`       Pdk   t        j                  k(  r*t        dwPdx   |Pdo   |Pdg   |Pdp   |Pdh   |Pdy   fz  |`       Pdk   t        j                  k(  rt        dzPdx   |Pdg   |Pdh   fz  |`       <Pdk   t        j                  k(  rt        d{Pdx   |Pdg   |Pdh   fz  |`       pPdk   t        j                  k(  r"t        d|Pdx   |Pd}   |Pdg   |Pdh   fz  |`       Pdk   t        j                  k(  st        d~Pdg   d|Pdh   |`        nKD ]  \  })}NL|)   j                  |N        t        L      }LdD ]  }Ptm        | |P      }T|Tt        jY                  dPj                         T       d4dl{m|}Um}}V |Pdk(  rUnV}W |Wt        T      |&|      5 }X|Xj                  |IJ       LrXj                  L       Xj                  L       |Ls| j                  sXj                          Lr"Xj                          |Xj                          ddd        | j                  rt        jY                  d| j                         d4dl{m}Y g }Zi }[ |Y|Z|&|      5 }\|\j                  |dCIJ       LjM                         D ]*  \  }]}^|][t/        Z      <   \j                  |]|^idCdC       , Ls| j                  s\j                          ddd       ddl}_t        t        | j                        d      5 }|j                  d       |j                  d       |j                  d       t        Z      D ]  \  }`}\|`[v r)|j                  d[`    dj                  d             |j                  dj                  d             |j                  _j                  \             |j                  d       |j                  d        |j                  d       ddd       LrLS yc c}w c c}w c c}w c c}w c c}w c c}}w c c}w c c}w c c}w c c}w c c}w c c}}w c c}w c c}w c c}?w c c}w c c}=}>w c c}#}>w c c}>w c c}D}=w c c}H}w c c}H}},w # 1 sw Y   CxY w# 1 sw Y   xY w# 1 sw Y   xY w# t        $ r2}aaxj                  |z  c_        t        j                  |a        d}a~aww xY w)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   re   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)metavarre   nargsr   z--nameNAMEr4   zGName of the master to use in the report. If not provided, all are used.)r   re   r   r   z-vz	--verbosezRun verbosely.z--debugzRun with debug output.)configLoggerINFOWARNING)levelDEBUG)basenamer   z.designspace)DesignSpaceDocumentminimumc              3   N   K   | ]  }t        |t                         y wr%   r   dict.0vaxis_mappingsks     r.   	<genexpr>zmain.<locals>.<genexpr>  &     SPR1+AtM!4D/EFPR   "%)z.glyphsz.glyphspackage)GSFontto_designspace-c              3   N   K   | ]  }t        |t                         y wr%   r  r  s     r.   r  zmain.<locals>.<genexpr>  r  r  z.ttfz.otf)TTFontheadfvar)r<   r   r   FavarVarStorer<   Tgvarr   )location
normalizedrecalcBoundsCFF2vsindexblendvstorez''c                     t        |       | fS r%   )r2   )r
  s    r.   <lambda>zmain.<locals>.<lambda>e  s    CFA;r0   )key' c           
   3   `   K   | ]%  \  }}|d t        t        ||         d       ' yw)=   N)r   r   )r	  r  r
  axisMappings      r.   r  zmain.<locals>.<genexpr>h  s>      	 %-DAq - 21k!n Er %-s   +.z (normalized)z.ufo)	UFOReader.rq   z9Font file does not seem to be variable. Nothing to check.getGlyphSetzRunning on %d glyphsetszLocations: %s)	r   r   rX   r[   r   rY   rZ   r\   r]   w)filezGlyph z was not compatible:rg   rj   rk   rf   rh   ri   z  Masters: %s:z, re   z"    Glyph was missing in master %sz'    Glyph has an open path in master %sz*    Path count differs: %i in %s, %i in %srl   rm   z5    Node count differs in path %i: %i in %s, %i in %srn   z7    Node %o incompatible in path %i: %s in %s, %s in %sro   z    Contour order differs: z in zD    Contour %d start point differs: %s in %s, %s in %s; reversed: %srL   rp   z3    Contour %d interpolation is underweight: %s, %sz2    Contour %d interpolation is overweight: %s, %sz'    Contour %d has a kink at %s: %s, %srC   z    Showing z and )pspdfzWriting %s to %s)InterpolatablePSInterpolatablePDFr/  )rb   r   )rY   rZ   zWriting HTML to %s)InterpolatableSVG)show_tolerancerY   rZ   )r4  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   r2   endswithfontTools.designspaceLibr  fromfilesourcesrn   r  axeshasattrr&   r  defaultmaximummapitems	glyphsLibr  r  upmfontrv   
familyName	styleNamefontTools.ttLibr  
unitsPerEmminValuedefaultValuemaxValueaxisTagr3   tablesegmentscopyr   r   r  sorted
variationsrs   r4   r,  r   cfftopDictIndexCharStringsprivaterD   programadd
isinstanceintr   
otVarStoreVarDataVarRegionIndexVarRegionListRegionVarRegionAxis	PeakCoordjoinr   fontTools.ufoLibr*  r   readInforsplitru   warningrw   r   rY   rZ   r   r   r\   r   outputstdoutr   r   quietjsonprintdumpsrx   ry   rz   r{   r|   r}   r~   r   r   r   r   r   sort_problemsupperinterpolatablePlotr1  r2  add_title_pageadd_summaryadd_problemsdraw_cupcake	add_indexadd_table_of_contentshtmlr3  base64writeencode	b64encode	Exceptionr   error)dr   r7  r8  parserr   r   r  fontsr   rX   r]   r[   original_args_inputsdesignspacer  rf   aaxis_triplesr  vvr  r  gsfontsourcefr  rT  r  axisr  r  tagr\  r^  fvarMappingr  rC   ttGlyphSetsrb   r  r   r+   varlocDictlocvallocTuplefvarAxescff2charstringscsre  	vsindicesr  last_oprM   varStorevarDataregionIndexregion	axisIndexr,   r&   _filenamer*  rv   accepted_namesgn	glyphsSetglyphSetGlyphNamesdiffr
  rY   rZ   problems_genr   ry  r   last_glyphnameplast_master_idxsmaster_idxsmaster_namesrN   r1  r2  PlotterClassdocr3  svgsglyph_startssvgrJ   glyph_problemsr  ra   rO   r)  r  sd                     `                                                                               @@r.   r:  r:  a  s+   $$)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D-66t{{1~FK5@5H5HI5H66;;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  
 [[^$$%B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  
 [[^$$V,A0G0G0O. $++a.)D<**D<DK		((}}-DLL) " J~F|4::z4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 &~~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 	 
 #&eY"7
"7h~% "7 	 

 #(B%$4>+A%B	T	HHMMObROR	TUVFI 1--# 	  
 C		
\2	
 #		B1qM/Aq!tB	
    3"3I"&.."<BSIm*C	N;')"45..]]'
 t$ {{" JJ'4c: 	
 zz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 99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& . +, :(  G JK
 F DTK F2 #U~ P4 (< C



 C U Cz * KJ& :9  	&&		!sL  AN/ANAN$ANAAN!AN&
 AN+AN1&6AN63AN;5AO AO AO
AO
AO	AO9AO
?AO$!AO*8	AO0AO0AO5%AP-AO;:AO;?AP=OAP. BB$AP. D+A=APF(AAP. G6A2API(,AP. JC1AP"NAP. O;APPAP	PAP. PAPPAP. P"AP+P'AP. P.
AQ*P8-AQ%Q%AQ*__main__)NNFr%   )8r;  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   	getLoggerru   r>  r   r   rF  r   r   r   r   r   r:  rT   r8  r   exitri  boolrW   r0   r.   <module>r     s   % > @ 
 5 L 6 I 7 . # !        	g9:    U3 U3t 
	G 	GT x MQ	h zvHCHHSh !	 r0   