a
    ZXh                     @   sv  d Z ddlT 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$&dZ'dZ(dZ)dZ*dZ+G dd dZ,d'de(e)e+dg dddZ-ee-dd Z.d d! Z/d"d# Z0d(d$d%Z1e2d&krrddl3Z3e1 Z4e35e6e7e4 dS ))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                   @   s2   e Zd ZdZdd Zdd Zdd Zdd	d
ZdS )Glyph)	
recordings
greenStatscontrolStatsgreenVectorscontrolVectors	nodeTypesisomorphismspointsopenContoursc                 C   s,   || _ | jD ]}t| |g  q| | d S N)nameITEMSsetattr	_populate)self	glyphnameglyphsetitem r+   d/var/www/viveiro_mudafortebrasil/venv/lib/python3.9/site-packages/fontTools/varLib/interpolatable.py__init__4   s    
zGlyph.__init__c                 C   s2   | j D ]&}tt| ||krt| |d  qd S r"   )r$   lengetattrappend)r'   ixr*   r+   r+   r,   _fill_in:   s    
zGlyph._fill_inc                 C   s  || j  }|d u | _| jrd S tt|d}z|j|dd W n tyX   || Y n0 |j| _~t| jD ]p\}}dd |jD }| j	
| t|d}t|d}z$|| || | j
d W nH ty }	 z.| j
d | | W Y d }	~	qnW Y d }	~	n
d }	~	0 0 | j
| | j
| | j
t| | j
t| |d dkrh| | qn|d d	kszJ |d
 dv sJ t }
t|
d}|| | j
|
j g }| j
| t|
j|d t|
j|d qnd S )Nr)   T)ZoutputImpliedClosingLinec                 S   s   g | ]\}}|qS r+   r+   ).0opargr+   r+   r,   
<listcomp>N       z#Glyph._populate.<locals>.<listcomp>Fr   ZaddComponentZmoveTo)Z	closePathZendPath)r#   doesnt_existZPerContourOrComponentPenr   draw	TypeErrorvaluer   	enumerater   r0   r
   r   replayr!   r   r2   r   r   r   contour_vector_from_statsr   ZSimpleRecordingPointPenZSegmentToPointPenr    r   Zadd_isomorphisms)r'   r)   glyphZperContourPenr1   contourr   r   r   er    	converterr   r+   r+   r,   r&   ?   sR    






"


zGlyph._populateNc                 C   s4   |d u r | j D ]}|| qn| j | | d S r"   )r   r;   )r'   ZpenZcountor_idxrB   r+   r+   r,   r;   w   s    
z
Glyph.draw)N)__name__
__module____qualname__r$   r-   r2   r&   r;   r+   r+   r+   r,   r   '   s
   8r   F)	locations	tolerance	kinkinessupemshow_alldiscrete_axesc          V      #   sj
  |dkr|d9 }d|  kr$dks*n J |dkr:|d9 }d|ksFJ |pVdd D }|d u rndd D }t ||	d	\}
fd
d}|D 	]Љ td   fddD }tdd |D dkrqtt||D ]t\}\}}}|jr|sވ tj||dfV  qd}t|j	D ].\}}|s.qd} tj
|||dfV  q|rqqd gt }|
D ]}|| }|d u sf|jsqf|| }|d u rqf|| }|d u sf|jsqf|j|j}t|tkr tj|| || ||t|tdfV  qf|krtt|D ]\}\}}||kr@q&t|t|kr tj||| || ||t|t|dfV  q&tt||D ]D\}\}}||kr tj|||| || ||||d	fV  qqq&t||\} }!| |k r. tj|| || ||ttt|!|!| dfV  |!||< |j}"|j|j}#|j|j}$|j|| }!|!d urrfdd|!D fdd|!D fdd|!D g }%t|$D ]R\}&}'z(t }(tt|&j|'j|(_|%|( W n ty   |%d  Y n0 qtt|"D ]\}\})}*|)d u s|*d u st|)dkst|)t|*krVqt|||||!\} }+},| |k r tj||| || ||d|+|,| d
fV  |%| }-|-r|#| d dk | d dk krtd d}.|-|. t|.}/|#| }0| }1|0d |0d  }2|1d |1d  }3|/d |/d  }4ttj tj!fD ]\}5}6|5rZt"|2|3}7q<nt#|2|3 }7t$d|6|4|7|2|3 |5s|7| |4d ks|5r<d|7|  |4k r<z|5r|7|4 } n|4|7 } W n t%y   d} Y n0 t$d|   |6||| || ||| dfV  q<q|j&}|j&|| d urLrLfd d|| D d!}8|t' t( | }9tt|D ]\}\})}*|)d u sn|*d u snt|)dksnt|)t|*krqntt|)D ]r}:|)|: };|*|: }<|;d r|<d sq|)|:d  }=|*|:d  }>|)|:d t|)  }?|*|:d t|*  }@|=d rF|>d rFq|=d r^|>d r^qt)|;d  };t)|<d  }<t)|=d  }=t)|>d  }>t)|?d  }?t)|@d  }@|;|= }A|?|; }B|<|> }C|@|< }D|Aj*|Bj+ |Aj+|Bj*  }E|Cj*|Dj+ |Cj+|Dj*  }Fz,|Et,|At,|B  }E|Ft,|Ct,|D  }FW n t%y<   Y qY n0 t,|E|8kst,|F|8kr^q|Aj*|Bj* |Aj+|Bj+  }G|Cj*|Dj* |Cj+|Dj+  }H|Gdk s|Hdk rqt,|At,|At,|B  }It,|Ct,|Ct,|D  }Jt,|I|J }Kt,|K|8k rq|;|< d" }L|=|> d" }M|?|@ d" }N|L|M }O|N|L }P|Oj*|Pj+ |Oj+|Pj*  }Qz|Qt,|Ot,|P  }QW n t%	yr   Y qY n0 t,|Q||  |8k	rq|Qt,|O t,|P }Rt,|O|P }St,|R|S }T|T|9k 	rȐq|T|S }U|U|8k	rސq|8t,|Q|  } t$d#|T|U|Q|K t$d|   tj-||| || |||:| d$fV  qqn|rf tj.|| || ||d%fV  qfqd S )&N
   g{Gz?r   r   c                 S   s   g | ]}t |qS r+   )repr)r4   gr+   r+   r,   r7      r8   ztest_gen.<locals>.<listcomp>c                 S   s   h | ]}|  D ]}|qqS r+   keys)r4   r)   rP   r+   r+   r,   	<setcomp>   r8   ztest_gen.<locals>.<setcomp>rM   c                    sJ   | d u rd S |  } | d u r d S |  d urF |  | d u rF|  } q | S r"   r+   )ir(   )	glyphsetsparentsr+   r,   grand_parent   s    
ztest_gen.<locals>.grand_parentzTesting glyph %sc                    s   g | ]}t  |qS r+   )r   )r4   r)   )
glyph_namer+   r,   r7      r8   c                 S   s   g | ]}|d urdqS )Nr   r+   )r4   rA   r+   r+   r,   r7      r8   )typemaster
master_idxFT)rZ   r[   r\   rB   )rZ   master_1master_2master_1_idxmaster_2_idxvalue_1value_2)rZ   pathr]   r^   r_   r`   ra   rb   )	rZ   rc   noder]   r^   r_   r`   ra   rb   )rZ   r]   r^   r_   r`   ra   rb   rI   c                    s   g | ]} | qS r+   r+   r4   rU   )m1Isomorphismsr+   r,   r7   9  r8   c                    s   g | ]} | qS r+   r+   re   )	m1Vectorsr+   r,   r7   :  r8   c                    s   g | ]} | qS r+   r+   re   )
recording1r+   r,   r7   ;  r8   )
rZ   rB   r]   r^   r_   r`   ra   rb   reversedrI   r3   z;%s: actual size %g; threshold size %g, master sizes: %g, %ggh㈵>ztolerance %g)rZ   rB   r]   r^   r_   r`   rI   c                    s   g | ]} | qS r+   r+   re   )m1r+   r,   r7     r8   g?   z=kink: deviation %g; deviation_ratio %g; sin_mid %g; r_diff %g)rZ   rB   r]   r^   r_   r`   r=   rI   )rZ   r]   r^   r_   r`   )/Zfind_parents_and_orderloginfor.   r>   zipr:   InterpolatableProblemMISSINGr!   	OPEN_PATHr   
PATH_COUNT
NODE_COUNTNODE_INCOMPATIBILITYr   CONTOUR_ORDERlistranger   r   r   r   r   r=   r0   
ValueErrorr   WRONG_START_POINTr
   r?   r@   UNDERWEIGHT
OVERWEIGHTmaxr   debugZeroDivisionErrorr    DEFAULT_KINKINESS_LENGTHDEFAULT_KINKINESScomplexrealimagabsKINKNOTHING)VrV   glyphsnamesignore_missingrH   rI   rJ   rK   rL   rM   orderrX   Z	allGlyphsr\   rA   r)   r#   Zhas_openr1   openZ	matchingsZm1idxZglyph1Zm0idxZglyph0Zm0ZpathIxZnodes1Znodes2ZnodeIxZn1Zn2Zthis_toleranceZmatchingZm0IsomorphismsZ	m0VectorsZ
recording0ZmidRecordingZc0Zc1rZcontour0Zcontour1Zproposed_pointreverserB   ZmidStatsZ	midVectorZm0VecZm1VecZsize0Zsize1ZmidSizeZ
overweightZproblem_typeZexpectedSizetZdeviation_thresholdrU   Zpt0Zpt1Zpt0_prevZpt1_prevZpt0_nextZpt1_nextZd0_prevZd0_nextZd1_prevZd1_nextZsin0Zsin1Zdot0Zdot1Zr0Zr1Zr_diffZmidZmid_prevZmid_nextZmid_d0Zmid_d1Zsin_midZcrossZarc_lenZ	deviationZdeviation_ratior+   )rY   rV   rj   rf   rg   rW   rh   r,   test_gen   s   




	










(








r   c                  O   s2   t t}t| i |D ]\}}|| | q|S r"   )r   rv   r   r0   )argskwargsproblemsr(   problemr+   r+   r,   testI  s    r   c                 C   sB   | |v rd S ||  || < t ||  dg D ]}t|j||| q(d S )N
components)r/   recursivelyAddGlyphZ	glyphName)r(   r)   Z
ttGlyphSetglyf	componentr+   r+   r,   r   Q  s
    r   c                 C   s"   t j| }|rt j|dd | S )NT)exist_ok)osrc   dirnamemakedirs)rc   r   r+   r+   r,   ensure_parent_dirZ  s    r   c           W         s  ddl }ddl}|jdtjd}|jdddd |jd	d
dd |jddtdt d |jddtdt d |jdd
dd |jdddd |jdddd |jdddd |jdd
dd |jdddd |jdd
dd |jdd t	d!d"d# |jd$d%t	d&d'd( |jd)d*d
d+d |jd,d
d-d |
| } dd.lm} || jrJd/nd0d1 | jrd|d2d1 | jrv| j nd}dd3lm} g }g }g }	t t}
t| j}t| jd4krd}| jd d5rXdd6lm} || jd }d7d8 |jD | _d9d8 |jD }	d:d; |jD fd<d=|jD d>d= |jD fd?d= D n| jd d@rddAlm }m!} || jd }|j"}
||}dBd8 |jD }dCd8 |D }g | _dDd8 |jD }	dEd= |jD dFd= |jD fdGd= D n| jd dHs(| jd dIrddJl#m$} || jd }|dK j%}
|dL }i |jD ]}|j&|j'|j(dM|j)< q^dN}dO|v r |dO }t*|j+dPdrdQd= D dR}nH|j, D ]<\}}| - }| D ]\}}t.||| |< qސqi }t/t0}dS|v r|dS }|dT }|du r>t1|j23 }|D ]} |j2|  D ]}!i }"g }#t1|!j D ](\}$}%|%d4 |"|$< |#4|$|%d4 f qjt|#}&|&|vr|j5|"dRdNdU||&< t6| ||& ||& | qPqBndV|v rj|dL j}'|dV j7j8d }(|(j9})|du rt1|)3 }|D ]F} |)|  }*|*j:}+t*|+dWdh},t*|+dWd}-d}.t;|*j<D ]>}/|/dXkrv|,=|- n|/dWkrt>|.t?sJ |.}-|/}.q\t@|+dYsq |+jAjB}0|,D ]}-|0jC|- }1|1jDD ]}2|0jEjF|2 }3i }"g }#t;|3jGD ]0\}4}|'|4 j)}$|jH}%|%|"|$< |#4|$|%f qt|#}&|&|vrF|j5|"dRdNdU||&< ||& ||& |  | < q̐qq dZg}|5 g}i g}	d[d= t13 D t1|3 d\d] d^D ]Z}&d_d`Ifdadb|&D  d_ }5|r|5dc7 }5|4|5 |4||&  |	4t0|& qdR| _Jg | _|	s&ddd8 |D }	| jD ]}6|6derrddflKmL}7 |7|6}tM }8|N|8 |8j%}
|4| n(ddJl#m$} ||6}|dK j%}
|4| |4||6Odgd4d  q,t|dhk rtPQdi dS g }|D ]<}t@|djr|5 n||4fdkd=3 D  q| jRrnt| jR  fdld8tS||D } fdmd8tS||	D }	 fdnd8|D }|st1tdod8 |D }t|}9|D ]4t3 }:|9|: };|;r|;D ]}<d|<< qqfdpd8|	D }	| jTpt}=| jUdur| jUnt}>zftPVdqt| tPVdrtW|	 tX||||	|
| jJ|=|>| jYds
}?t/tZ}@| j[du 	r`|j\nt]t^| j[dt}A| j_s| j`	rddl`}B|?D ]\} }C|@|  4|C 	qta|Bb|@|Adu qd}D|?D ]\} }E|@|  4|E | |Dk
rtadv|  dw|Adu | }Dd}Fdx|Ev 
r|Edx fn|Edy |Edz f}G|G|Fk
rnd{|Ev 
rD|Ed{ fn|Ed| |Ed} f}Htad~dI|H |Adu |G}F|Ed tcjdk
rtad|Ed{  |Adu 	q|Ed tcjek
rtad|Ed{  |Adu 	q|Ed tcjfk
rtad|Ed |Ed| |Ed |Ed} f |Adu 	q|Ed tcjgkr<tad|Ed |Ed |Ed| |Ed |Ed} f |Adu 	q|Ed tcjhkrtad|Ed |Ed |Ed |Ed| |Ed |Ed} f |Adu 	q|Ed tcjikrtad|Ed |Ed| |Ed |Ed} f |Adu 	q|Ed tcjjkrtad|Ed |Ed |Ed| |Ed |Ed} |Ed f |Adu n|Ed tcjkkr:tad|Ed |Ed| |Ed} f |Adu n|Ed tcjlkrntad|Ed |Ed| |Ed} f |Adu nf|Ed tcjmkrtad|Ed |Ed |Ed| |Ed} f |Adu n,|Ed tcjnk	rtad|Ed| |Ed} f |Adu 	qn|?D ]\} }C|@|  4|C qto|@}@dD ]}Et*| |E}I|Idu r qtPVd|Ep |I d4dlqmr}Jms}K |EdkrP|Jn|K}L|Lt^|I||df}M|Mjt||=|>d |@r|Mu|@ |Mv|@ |@s| j_s|Mw  |@r|Mx  |My  W d   n1 s0    Y  q| jzrhtPVd| jz d4dlqm{}N g }Oi }P|N|O||dl}Q|Qjt|dN|=|>d |@ D ]*\}R}S|R|Pt|O< |Qjv|R|SidNdNd q6|@sx| j_sx|Qw  W d   n1 s0    Y  ddl|}Tt]t^| jzd}A|A}d |A}d |A}d t;|OD ]d\}U}Q|U|Pv r|A}d|P|U  d~d |A}d~d |A}|T|Q |A}d |A}d q|A}d W d   n1 s^0    Y  W n@ ty }V z&|V j|7  _tP|V  W Y d}V~Vn
d}V~V0 0 |@r|@S dS )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   rZ   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)metavarrZ   nargsr   z--nameNAMEr0   zGName of the master to use in the report. If not provided, all are used.)r   rZ   r   r   z-vz	--verbosezRun verbosely.z--debugzRun with debug output.)configLoggerINFOWARNING)levelDEBUG)basenamer   z.designspace)DesignSpaceDocumentc                 S   s   g | ]
}|j qS r+   )rc   r4   r[   r+   r+   r,   r7     r8   zmain.<locals>.<listcomp>c                 S   s   g | ]
}|j qS r+   locationr   r+   r+   r,   r7     r8   c                 S   s   h | ]}t |d s|jqS )minimum)hasattrr#   r4   ar+   r+   r,   rS     s   zmain.<locals>.<setcomp>c                    s*   i | ]"}|j  vr|j |j|j|jfqS r+   r#   r   defaultmaximumr   rT   r+   r,   
<dictcomp>  s   
zmain.<locals>.<dictcomp>c                 S   s   i | ]}|j |jqS r+   r#   mapr   r+   r+   r,   r     r8   c                    s*   i | ]"\ } t  fd d|D qS )c                 3   s    | ]}t |t  V  qd S r"   r   dictr4   vaxis_mappingskr+   r,   	<genexpr>  r8   "main.<locals>.<dictcomp>.<genexpr>tupler4   vvr   r   r,   r     s   )z.glyphsz.glyphspackage)GSFontto_designspacec                 S   s   g | ]
}|j qS r+   )font)r4   sourcer+   r+   r,   r7     r8   c                 S   s    g | ]}d |j j|j jf qS )z%s-%s)rm   Z
familyNameZ	styleName)r4   fr+   r+   r,   r7     r8   c                 S   s   g | ]
}|j qS r+   r   r   r+   r+   r,   r7     r8   c                 S   s    i | ]}|j |j|j|jfqS r+   r   r   r+   r+   r,   r     s   c                 S   s   i | ]}|j |jqS r+   r   r   r+   r+   r,   r     r8   c                    s*   i | ]"\ } t  fd d|D qS )c                 3   s    | ]}t |t  V  qd S r"   r   r   r   r+   r,   r     r8   r   r   r   r   r   r,   r     s   z.ttfz.otf)TTFontheadfvarr9   r   r   FavarZVarStorec                 S   s   i | ]}|d dddqS )r9   r   r   r   r+   )r4   tagr+   r+   r,   r     r8   Tgvarr   )r   
normalizedZrecalcBoundsZCFF2vsindexZblendvstorez''c                 S   s   i | ]
}|d qS )r   r+   r   r+   r+   r,   r   d  r8   c                 S   s   t | | fS r"   )r.   )r   r+   r+   r,   <lambda>e  r8   zmain.<locals>.<lambda>)key' c                 3   s.   | ]&\}}d |t t| | df V  qdS )z%s=%s   N)r   r   r4   r   r   )axisMappingr+   r,   r   h  s   zmain.<locals>.<genexpr>z (normalized)c                 S   s   g | ]}i qS r+   r+   )r4   _r+   r+   r,   r7   ~  r8   z.ufo)	UFOReader.rk   z9Font file does not seem to be variable. Nothing to check.getGlyphSetc                    s   i | ]}| | qS r+   r+   )r4   r   r3   r+   r,   r     r8   c                    s   g | ]\}}| v r|qS r+   r+   )r4   r#   r)   accepted_namesr+   r,   r7     s   c                    s   g | ]\}}| v r|qS r+   r+   )r4   r#   r   r   r+   r,   r7     s   c                    s   g | ]}| v r|qS r+   r+   )r4   r#   r   r+   r,   r7     r8   c                 S   s   g | ]}|  D ]}|qqS r+   rQ   )r4   r)   gnr+   r+   r,   r7     r8   c                    s0   g | ](}i t | fd d| D qS )c                    s   i | ]\}}| v r||qS r+   r+   r   rT   r+   r,   r     r8   z#main.<locals>.<listcomp>.<dictcomp>)r   items)r4   loc)axis_triplesrM   r+   r,   r7     s   zRunning on %d glyphsetszLocations: %s)	r   r   rH   rK   r   rI   rJ   rL   rM   w)filezGlyph z was not compatible:r\   r_   r`   r[   r]   r^   z  Masters: %s:z, rZ   z"    Glyph was missing in master %sz'    Glyph has an open path in master %sz*    Path count differs: %i in %s, %i in %sra   rb   z5    Node count differs in path %i: %i in %s, %i in %src   z7    Node %o incompatible in path %i: %s in %s, %s in %srd   z-    Contour order differs: %s in %s, %s in %szD    Contour %d start point differs: %s in %s, %s in %s; reversed: %srB   ri   z3    Contour %d interpolation is underweight: %s, %sz2    Contour %d interpolation is overweight: %s, %sz'    Contour %d has a kink at %s: %s, %sr=   z    Showing %s and %s)psZpdfzWriting %s to %s)InterpolatablePSInterpolatablePDFr   )rV   r   )rI   rJ   zWriting HTML to %s)InterpolatableSVG)show_tolerancerI   rJ   )r   Z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_argsZ	fontToolsr   verboser}   r   splitos.pathr   setDEFAULT_UPEMr   r   r.   endswithZfontTools.designspaceLibr   fromfilesourcesZaxesr   Z	glyphsLibr   r   ZupmZfontTools.ttLibr   Z
unitsPerEmZminValuedefaultValueZmaxValueaxisTagr/   tablesegmentscopyr   r   r   sortedZ
variationsrR   r0   r   r   ZcffZtopDictIndexZCharStringsprivater>   programadd
isinstanceintr   r   Z
otVarStoreZVarDataZVarRegionIndexZVarRegionListZRegionZVarRegionAxisZ	PeakCoordjoinr   ZfontTools.ufoLibr   r   ZreadInforsplitrl   warningr#   rn   rI   rJ   rm   r   r   rL   rv   outputstdoutr   r   quietjsonprintdumpsro   rp   rq   rr   rs   rt   ru   ry   rz   r{   r   r   Zsort_problemsupperZinterpolatablePlotr   r   Zadd_title_pageZadd_summaryZadd_problemsZdraw_cupcakeZ	add_indexZadd_table_of_contentshtmlr   base64writeencode	b64encode	Exceptionr   error)Wr   r   r   parserr   r   r   Zfontsr   rH   rK   Zoriginal_args_inputsZdesignspacer   r   r   Zgsfontr   r   r   Zaxisr   r   r  r	  ZfvarMappingr   r=   ZttGlyphSetsrV   r   r   r(   varZlocDictr   r   valZlocTupleZfvarAxesZcff2Zcharstringscsr  Z	vsindicesr   Zlast_opr5   ZvarStoreZvarDataZregionIndexZregionZ	axisIndexr#   filenamer   rm   Z	glyphsSetZglyphSetGlyphNamesdiffr   rI   rJ   Zproblems_genr   r   r  r   Zlast_glyphnamepZlast_master_idxsZmaster_idxsZmaster_namesr6   r   r   ZPlotterClassdocr   ZsvgsZglyph_startssvgrA   Zglyph_problemsr  rU   rC   r+   )r   r   r   r   rM   r)   r,   r   a  s   







$

























 











	


			
	




,
(



.
r   __main__)NNF)N)8r   ZinterpolatableHelpersZinterpolatableTestContourOrderr   ZinterpolatableTestStartingPointr   ZfontTools.pens.recordingPenr   r   r   ZfontTools.pens.transformPenr	   ZfontTools.pens.statisticsPenr
   r   ZfontTools.pens.momentsPenr   ZfontTools.varLib.modelsr   r   ZfontTools.misc.fixedToolsr   ZfontTools.misc.transformr   collectionsr   typesr   	functoolsr   pprintr   mathr   r   r   loggingr   	getLoggerrl   r   r   r   r  r   r   r   r   r   r   rE   r   r   exitr  boolr+   r+   r+   r,   <module>   sd   
Z      M
	
    X
