+
    f7i-  c                   s   ^ RI Ht ^ RIHtHtHt ^ RIHtHt ^ RI	H
t
Ht ^ RIHt ^ RIHtHt ^ RIHtHtHtHt ^ RIHt ^ R	It^ R	It]P4                  ! R
4      t ! R R4      tR tR t ! R R]4      t ! R R]4      t  ! R R]4      t!R t"R t#R t$R t%R t&R t' ^ RI(H)t) ]%t*R t.R t/R t0^t1R  t2R! t3R"]4! 4       /R# lt5R%R$ lt6R	#   ]+ d     ^ RI,H-t- ]&t* L6  ]+ d    ]'t*  LBi ; ii ; i)&    )LerpGlyphSet)AbstractPenBasePenDecomposingPen)AbstractPointPenSegmentToPointPen)RecordingPenDecomposingRecordingPen)	Transform)defaultdictdeque)sqrtcopysignatan2pi)EnumNzfontTools.varLib.interpolatablec                   sr    ] tR t^tRtRtRtRtRtRt	Rt
RtR	tR
tRt]^]^]^]^]	^]
^]^]^]^	]^
]^/tRtR# )InterpolatableProblemZnothingZmissingZ	open_pathZ
path_countZ
node_countZnode_incompatibilityZcontour_orderZwrong_start_pointZkinkZunderweightZ
overweight N)__name__
__module____qualname____firstlineno__ZNOTHINGZMISSINGZ	OPEN_PATHZ
PATH_COUNTZ
NODE_COUNTZNODE_INCOMPATIBILITYZCONTOUR_ORDERZWRONG_START_POINTZKINKZUNDERWEIGHTZ
OVERWEIGHTseverity__static_attributes__r       M/usr/lib64/python3.14/site-packages/fontTools/varLib/interpolatableHelpers.pyr   r      s{    GGIJJ1#M+DKJ 	1AAaq1aQBHr   r   c                sN    \        \        V P                  4       R RR7      4      # )zGSort problems by severity, then by glyph name, then by problem message.c                 s6    \        R  V ^,           4       4      ) # )c              3   s   "   T F:  p\         P                  VR ,          ,          VP                  R^ 4      ,           x  K<  	  R# 5i)ZtypeZ	toleranceN)r   r   get).0p   & r   	<genexpr>Z2sort_problems.<locals>.<lambda>.<locals>.<genexpr>2   s:      ! +33AfI>{TUAVVV!s   AA)Zmin)_   &r   Z<lambda>Zsort_problems.<locals>.<lambda>1   s    3qT r   T)Zkeyreverse)Zdictsorteditems)Zproblemsr!   r   sort_problemsr%   ,   s+    NN 		
 r   c                s"    W) R V RV)  ,           # )zwRotate list by k items forward.  Ie. item at position 0 will be
at position k in returned list.  Negative k is allowed.Nr   )lk   &&r   rot_listr)   <   s     RS6AcrF?r   c                   sT   a  ] tR t^Bt o RR ltR tR tR tR tR t	R t
R	 tR
tV tR# )PerContourPenNc                sf    \         P                  ! W4       W n        Wn        R V n        . V n        R # N)r   __init__	_glyphset_Pen_penvalue)selfZPenZglyphset   &&&r   r,   ZPerContourPen.__init__C   s(    (!		
r   c                s\    V P                  4        V P                  P                  V4       R # r+   )_newItemr/   ZmoveTo)r1   p0r(   r   _moveToZPerContourPen._moveToJ   s    		r   c                s<    V P                   P                  V4       R # r+   )r/   ZlineTo)r1   p1r(   r   _lineToZPerContourPen._lineToN   s    		r   c                s<    V P                   P                  W4       R # r+   )r/   ZqCurveTo)r1   r6   p2r2   r   _qCurveToOneZPerContourPen._qCurveToOneQ   s    		2"r   c                s>    V P                   P                  WV4       R # r+   )r/   ZcurveTo)r1   r6   r8   Zp3s   &&&&r   _curveToOneZPerContourPen._curveToOneT   s    		""%r   c                H    V P                   P                  4        R V n         R # r+   )r/   Z	closePathr1   r!   r   
_closePathZPerContourPen._closePathW   s    			r   c                r;   r+   )r/   endPathr<   r!   r   _endPathZPerContourPen._endPath[   s    			r   c                sj    V P                  4       ;V n        pV P                  P                  V4       R # r+   )r.   r/   r0   append)r1   Zpenr   r   r3   ZPerContourPen._newItem_   s&    ))+%	C

#r   )r.   r-   r/   r0   r+   )r   r   r   r   r,   r5   r7   r9   r:   r=   r?   r3   r   __classdictcell____classdict__   @r   r*   r*   B   s2     #& r   r*   c                   s&   a  ] tR t^dt o R tRtV tR# )PerContourOrComponentPenc                sj    V P                  4        V P                  R,          P                  W4       R# )i   N)r3   r0   addComponent)r1   Z	glyphNameZtransformationr2   r   rG   Z%PerContourOrComponentPen.addComponente   s!    

2##I>r   r   N)r   r   r   r   rG   r   rA   rB   rD   r   rE   rE   d   s     ? ?r   rE   c                   sL   a  ] tR t^jt o R tRR ltV 3R lR ltRR ltRtV t	R# )	SimpleRecordingPointPenc                s    . V n         R # r+   r0   r<   r!   r   r,   Z SimpleRecordingPointPen.__init__k   s	    
r   Nc                    R # r+   r   )r1   Z
identifierZkwargss   &&,r   	beginPathZ!SimpleRecordingPointPen.beginPathn       r   c                s   < V ^8  d   QhRR/# )   ZreturnNr   )ZformatrC   s   "r   Z__annotate__Z$SimpleRecordingPointPen.__annotate__q   s       r   c                rJ   r+   r   r<   r!   r   r>   ZSimpleRecordingPointPen.endPathq   rL   r   c                sJ    V P                   P                  Yf   RMR34       R # )NFT)r0   r@   )r1   ptZsegmentTyper2   r   addPointZ SimpleRecordingPointPen.addPointt   s    

2(;uFGr   rI   r+   )
r   r   r   r   r,   rK   r>   rO   r   rA   rB   rD   r   rH   rH   j   s%      H Hr   rH   c                 s`    ^ p\        W4       F  w  r4WC,
          pW%V,          ,          pK  	  V# r    )zipv0v1ZsZx0Zx1Zd   &&    r   vdiff_hypot2rV   x   s0    	Ab+G	U
  Hr   c                 s    ^ p\        W4       FR  w  r4WC,
          pW%P                  VP                  ,          VP                  VP                  ,          ,           ,          pKT  	  V# rP   )rQ   realimagrR   rU   r   vdiff_hypot2_complexrY      sJ    	Ab+G	VVaff_qvv.. 
 Hr   c                 s@   a  \        V 3R  l\        V4       4       4      # )c              3   sH   <"   T F  w  rSV,          V,          x  K  	  R # 5ir+   r   )r   ijG   &  r   r   Z matching_cost.<locals>.<genexpr>   s     7#641qtAww#6   ")sum	enumerate)r\   matchings   f&r   matching_costrb      s    79X#6777r   c                 s    \        V 4      p\        V 4      w  r#\        R  V 4       4      p\        V4      \        W4      3# )c              3   s8   "   T F  p\        V4      x  K  	  R # 5ir+   )Zint)r   Zer   r   r   Z<min_cost_perfect_bipartite_matching_scipy.<locals>.<genexpr>   s     %1As   )lenlinear_sum_assignmentlistrb   )r\   nrowscols   &   r   )min_cost_perfect_bipartite_matching_scipyrj      s=    AA&q)JD %%%D:}Q---r   c                 s    \        V 4      pR .V,          p\        4       P                  V 4       F	  w  r4WBV&   K  	  V\        W4      3# r+   )rc   MunkresZcomputerb   )r\   rf   rh   rowcols   &    r   +min_cost_perfect_bipartite_matching_munkresrn      sF    AA6A:DI%%a(S	 )q'''r   c                 s   \        V 4      pV^8  d   \        R4      h\        P                  ! \	        V4      4      p\        \        V4      4      p\        W4      pV F"  p\        W4      pWd8  g   K  \        V4      TrCK$  	  W43# )i   z4Install Python module 'munkres' or 'scipy >= 0.17.0')rc   Z	Exception	itertoolspermutationsrangere   Znextrb   )r\   rf   rp   ZbestZ	best_costr   Zcosts   &      r   .min_cost_perfect_bipartite_matching_bruteforcerr      s|    AA1uNOO ))%(3L\"#Da&IQ""1gt)  ?r   )rd   )rk   c                 s   \        \        V P                  4      4      p\        WP                  4      V P                  V P
                  V P                  ^,          V P                  ^,          V P                  V,          3# )rM   )	r   absZarear   meanXmeanYZstddevXZstddevYZcorrelation)statsZsizer   r   contour_vector_from_statsrw      s`     EJJ D$$D  r   c                 s  a	 \        V 4      p\        \        V4      4      pV  UUu. uF  qA Uu. uF  p\        WE4      NK  	  upNK  	  uppo	\	        S	4      w  pp\        V	3R  l\        V4       4       4      pWgV3# u upi u uppi )c              3   sD   <"   T F  pSV,          V,          x  K  	  R # 5ir+   r   )r   rZ   costs   & r   r   Z'matching_for_vectors.<locals>.<genexpr>   s     6XaXs    )rc   re   rq   rV   #min_cost_perfect_bipartite_matchingr_   )
Zm0Zm1rf   Zidentity_matchingrS   rT   ra   rb   Zidentity_costrx   s
   &&       @r   matching_for_vectorsr{      s~    BAU1X;=>2RR0Rrl2"R02>E 	,E26U1X66MM11 1>s   BA=B=Bc                 sR    ^ p\        V 4       F  w  r#V^,          V,          pK  	  V# rP   )Zreversed)pointsbitsrN   bri   r   points_characteristic_bitsr      s*    D&!	Q "Kr   c                 s   . pV '       g   V# V  UUu. uF  w  r#\        V!  NK  	  p pp\        V 4      pV P                  V R \        ^,
           4       \        V 4      \        8  d"   V P                  V R \        ^,
           4       K5  \	        V4       F  pW,          pVP                  V4       W^,           ,          pWv,
          pVP                  V^,          4       W^,           ,          p	W,
          p
VP                  W,
          4       VP                  V
P                  ,          VP                  V
P                  ,          ,
          p\        \        \        V4      4      V4      pVP                  V^,          4       K  	  V# u uppi r+   )Zcomplexrc   Zextend$_NUM_ITEMS_PER_POINTS_COMPLEX_VECTORrq   r@   rW   rX   r   r   rs   )r|   vectorrN   r    rf   rZ   r4   r6   Zd0r8   Zd1Zcrosss   &           r   points_complex_vectorr      s3   F(./urgrlF/FA
MM&C?!CDE
f+<
<fGCaGHI1X Yb E]Wb1f E]Wbg "''!BGGbgg$55c%j)51eai + . M; 0s   Fc                 s   \        V 4      p\        V 4      pV'       d   V R R R1,          p \        V 4      pMTp\        V 4      p\        V4      V,          p^V,          ^,
          p\        V4       Fk  p	WTV	,
          ,          V,          WY,	          ,          p
W8X  g   K.  TP	                  \        Wi) V,          4      V'       d   V^,
          V	,
          MT	V34       Km  	  R # )NrF   )r   rc   r   rq   r@   r)   )r|   Zisomorphismsr"   Zreference_bitsrf   r}   r   ZmultZmaskrZ   r~   s   &&&        r   add_isomorphismsr     s    /7NFA
 ")&1"6*F v;!DFa<D1X1uo%$)4&"t),7a!eai7S r   discrete_axesc          	      s  aa R .\        \        \        V 4      ^,
          4      4      ,           p\        \        \        V 4      4      4      pV'       Edj   \        V4       UUu. uFe  w  rV\        ;QJ d-    V3R lVP                  4        4       F  '       d   K   RM"	  RM! V3R lVP                  4        4       4      '       g   Kc  VNKg  	  pppV'       d#   \        P                  ! R\        V4      V4       M\        P                  ! R4        ^ RI	H
p \        \        V4      4       U	u. uF  p	^ .\        V4      ,          NK  	  p
p	\        4       pV F"  oVP                  SP                  4       4       K$  	  \        V4      pV Uau. uF5  o\        ;QJ d    . V3R lV 4       F  NK  	  5M! V3R lV 4       4      NK7  	  pp\         P"                  ! \        \        V4      4      ^4       F  w  r]\%        WV,          4       UUu/ uF  w  rVS9   g   K  WbK  	  ppp\%        WV,          4       UUu/ uF  w  rVS9   g   K  WbK  	  pppVV8w  d   Kj  \'        W,          W,          4      W,          V&   K  	  V! V
RR7      pVP)                  4       w  pp\+        \        4      p
\%        VV4       F6  w  ppV
V,          P-                  V4       V
V,          P-                  V4       K8  	  R .\        V4      ,          p. p\        4       p\/        V4      pV'       dk   VP1                  4       pVP-                  V4       VP3                  V4       \        W,          4       F!  pVV9  g   K  WSV&   VP3                  V4       K#  	  Kr   \6        P                  R	V4       \6        P                  R
V4       W43# u uppi u up	i u upi u uppi u uppi   \4         d     LXi ; i)Nc              3   sD   <"   T F  w  rVS9  g   K  V^ 8H  x  K  	  R# 5ir    Nr   )r   r'   vr   r]   r   r   )find_parents_and_order.<locals>.<genexpr>3  s      Jida1M3I616is     FTzFound %s base masters: %szNo base master location found)minimum_spanning_treec              3   sH   <"   T F  pSP                  V^ 4      x  K  	  R# 5ir   )r   )r   r'   r&   ry   r   r   r   C  s     7$QQUU1a[[$r^   )Z	overwritezParents: %sz	Order: %s)re   rq   rc   r`   Zallr$   loggingZinfoZwarningZscipy.sparse.csgraphr   setZupdateZkeysr#   Ztuplero   ZcombinationsrQ   rV   Znonzeror
   Zaddr   Zpopleftr@   ImportErrorlog)Z	glyphsetsZ	locationsr   ZparentsZorderrZ   r&   Zbasesr   r    ZgraphZaxesZvectorsr[   r'   r   Zi_discrete_locationZj_discrete_locationZtreerg   rh   rl   rm   ZvisitedZqueues   &&d   `                  r   find_parents_and_orderr   +  s   ftE#i.1"4566Gs9~&'Ey "),
,sJaggiJsssJaggiJJ A, 	 

 LL4c%j%HOO;<-	B38Y3HI3HaaS3y>))3HEI5DAFFH% $<DAJKAuu7$7uu7$77GK!..uS^/DaH%(qz%:'%:TQa=>PDAD%: $ ' &)qz%:'%:TQa=>PDAD%: $ ' '*==*7:wzB I )$?DJD$$EdOSc
s#c
s# ,
 fs9~-GEeG%LEMMOAQ)A'%&
Q *	  	(e$>y
 J
 L''>  		s|   #4O)OOO .O
AO O+O	AO OO$O <OOCO 'A
O 6O O O+*O+c                 s   V P                   pV P                  pV P                  pW$,
          R ,          ^,          W3,          ,           R ,          pW$,           R ,          V,           pW$,           R ,          V,
          pV^ 8w  d   \        Wb,
          V4      MW$8  d   \        R ,          M^ p\        4       p	V^ 8  d   ^ pV'       do   V	P                  V P                  ) V P                  ) 4      p	V	P                  V) 4      p	V	P                  ^\        V4      ,          ^\        V4      ,          4      p	V	# V	P                  \        V4      \        V4      4      p	V	P                  V4      p	V	P                  V P                  V P                  4      p	V	# )g      ?)Z	varianceXZ
covarianceZ	varianceYr   r   r	   Z	translatert   ru   ZrotateZscaler   )
rv   ZinverseZar~   ZcZdeltaZlambda1Zlambda2ZthetaZtranss
   &&        r   transform_from_statsr   o  s-   AAAum!AE)c1Eume#Gume#G%&!VE'+q!ae"s(EKE{ u{{l;eV$AW-q4=/@A L	 DM4=9U#U[[9Lr   )F)7ZfontTools.ttLib.ttGlyphSetr   ZfontTools.pens.basePenr   r   r   ZfontTools.pens.pointPenr   r   ZfontTools.pens.recordingPenr   r   ZfontTools.misc.transformr	   Zcollectionsr
   r   Zmathr   r   r   r   Zenumr   ro   r   Z	getLoggerr   r   r%   r)   r*   rE   rH   rV   rY   rb   rj   rn   rr   Zscipy.optimizerd   rz   r   Zmunkresrk   rw   r{   r   r   r   r   r   r   r   r   r   r   <module>r      s   3 G G G M . * * *   9: 8 G D?} ?H. H8.((
4*S'2 () $!H6A#% AH o  

	
# 8 	,  
: 	,


s*   C C.C	C*&C.)C**C.