§
    ‚Ûgè,  ã                   óò  — d dl mZ d dlmZmZmZ d dlmZ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mZmZmZ d dlmZ d d	lZd d	lZ ej        d
¦  «        Z G d„ d¦  «        Zd„ Zd„ Z G d„ de¦  «        Z G d„ de¦  «        Z  G d„ de¦  «        Z!d„ Z"d„ Z#d„ Z$d„ Z%d„ Z&d„ Z'	 d dl(m)Z) e%Z*n"# e+$ r 	 d dl,m-Z- e&Z*n# e+$ r e'Z*Y nw xY wY nw xY wd„ Z.d„ Z/d„ Z0d Z1d!„ Z2d"„ Z3 e4¦   «         d#œd$„Z5d'd&„Z6d	S )(é    )ÚLerpGlyphSet)ÚAbstractPenÚBasePenÚDecomposingPen)ÚAbstractPointPenÚSegmentToPointPen)ÚRecordingPenÚDecomposingRecordingPen)Ú	Transform)ÚdefaultdictÚdeque)ÚsqrtÚcopysignÚatan2Úpi)ÚEnumNzfontTools.varLib.interpolatablec                   ój   — e Zd ZdZdZdZdZdZdZdZ	dZ
d	Zd
ZdZededededede	de
dedededediZdS )ÚInterpolatableProblemÚnothingÚmissingÚ	open_pathÚ
path_countÚ
node_countÚnode_incompatibilityÚcontour_orderÚwrong_start_pointÚkinkÚunderweightÚ
overweighté   é   é   é   é   é   é   é   é	   é
   é   N)Ú__name__Ú
__module__Ú__qualname__ÚNOTHINGÚMISSINGÚ	OPEN_PATHÚ
PATH_COUNTÚ
NODE_COUNTÚNODE_INCOMPATIBILITYÚCONTOUR_ORDERÚWRONG_START_POINTÚKINKÚUNDERWEIGHTÚ
OVERWEIGHTÚseverity© ó    ú\/granary/edev/quantum/lib/python3.11/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Ø�ð€H€H€Hr;   r   c                 óf   — t          t          |                      ¦   «         d„ d¬¦  «        ¦  «        S )zGSort problems by severity, then by glyph name, then by problem message.c                 óB   — t          d„ | d         D ¦   «         ¦  «         S )Nc              3   ót   K  — | ]3}t           j        |d                   |                     dd¦  «        z   V — Œ4dS )ÚtypeÚ	tolerancer   N)r   r9   Úget)Ú.0Úps     r<   ú	<genexpr>z2sort_problems.<locals>.<lambda>.<locals>.<genexpr>2   sV   è è € ð ð àõ +Ô3°A°f´IÔ>ÀÇÂÀ{ÐTUÑAVÔAVÑVðð ð ð ð ð r;   r    )Úmin)Ú_s    r<   ú<lambda>zsort_problems.<locals>.<lambda>1   s5   € �3ðð à˜qœTðñ ô ñô ð € r;   T)ÚkeyÚreverse)ÚdictÚsortedÚitems)Úproblemss    r<   Úsort_problemsrO   ,   sB   € åÝØ�NŠNÑÔðð ð ð		
ñ 		
ô 		
ñô ð r;   c                 ó0   — | | d…         | d| …         z   S )z{Rotate list by k items forward.  Ie. item at position 0 will be
    at position k in returned list.  Negative k is allowed.Nr:   )ÚlÚks     r<   Úrot_listrS   <   s"   € ð ˆaˆRˆSˆSŒ6�A�c˜�r�c”F‰?Ðr;   c                   ó@   — e Zd Zd
d„Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	d	„ Z
dS )ÚPerContourPenNc                 óh   — t          j        | |¦  «         || _        || _        d | _        g | _        d S ©N)r   Ú__init__Ú	_glyphsetÚ_PenÚ_penÚvalue)ÚselfÚPenÚglyphsets      r<   rX   zPerContourPen.__init__C   s5   € ÝÔ˜˜xÑ(Ô(Ð(Ø!ˆŒØˆŒ	ØˆŒ	ØˆŒ
ˆ
ˆ
r;   c                 ób   — |                       ¦   «          | j                             |¦  «         d S rW   )Ú_newItemr[   ÚmoveTo)r]   Úp0s     r<   Ú_moveTozPerContourPen._moveToJ   s+   € Ø�Š‰ŒˆØŒ	×Ò˜ÑÔÐÐÐr;   c                 ó:   — | j                              |¦  «         d S rW   )r[   ÚlineTo)r]   Úp1s     r<   Ú_lineTozPerContourPen._lineToN   s   € ØŒ	×Ò˜ÑÔÐÐÐr;   c                 ó<   — | j                              ||¦  «         d S rW   )r[   ÚqCurveTo)r]   rg   Úp2s      r<   Ú_qCurveToOnezPerContourPen._qCurveToOneQ   s    € ØŒ	×Ò˜2˜rÑ"Ô"Ð"Ð"Ð"r;   c                 ó>   — | j                              |||¦  «         d S rW   )r[   ÚcurveTo)r]   rg   rk   Úp3s       r<   Ú_curveToOnezPerContourPen._curveToOneT   s"   € ØŒ	×Ò˜"˜b "Ñ%Ô%Ð%Ð%Ð%r;   c                 óF   — | j                              ¦   «          d | _         d S rW   )r[   Ú	closePath©r]   s    r<   Ú
_closePathzPerContourPen._closePathW   s!   € ØŒ	×ÒÑÔÐØˆŒ	ˆ	ˆ	r;   c                 óF   — | j                              ¦   «          d | _         d S rW   )r[   ÚendPathrs   s    r<   Ú_endPathzPerContourPen._endPath[   s!   € ØŒ	×ÒÑÔÐØˆŒ	ˆ	ˆ	r;   c                 óp   — |                       ¦   «         x| _        }| j                             |¦  «         d S rW   )rZ   r[   r\   Úappend)r]   Úpens     r<   ra   zPerContourPen._newItem_   s2   € ØŸ)š)™+œ+Ð%ˆŒ	�CØŒ
×Ò˜#ÑÔÐÐÐr;   rW   )r+   r,   r-   rX   rd   rh   rl   rp   rt   rw   ra   r:   r;   r<   rU   rU   B   s‘   € € € € € ðð ð ð ðð ð ðð ð ð#ð #ð #ð&ð &ð &ðð ð ðð ð ðð ð ð ð r;   rU   c                   ó   — e Zd Zd„ ZdS )ÚPerContourOrComponentPenc                 óp   — |                       ¦   «          | j        d                              ||¦  «         d S )Néÿÿÿÿ)ra   r\   ÚaddComponent)r]   Ú	glyphNameÚtransformations      r<   r   z%PerContourOrComponentPen.addComponente   s1   € Ø�Š‰ŒˆØŒ
�2Œ×#Ò# I¨~Ñ>Ô>Ð>Ð>Ð>r;   N)r+   r,   r-   r   r:   r;   r<   r|   r|   d   s#   € € € € € ð?ð ?ð ?ð ?ð ?r;   r|   c                   ó,   — e Zd Zd„ Zdd„Zdd„Zdd„ZdS )	ÚSimpleRecordingPointPenc                 ó   — g | _         d S rW   )r\   rs   s    r<   rX   z SimpleRecordingPointPen.__init__k   s   € ØˆŒ
ˆ
ˆ
r;   Nc                 ó   — d S rW   r:   )r]   Ú
identifierÚkwargss      r<   Ú	beginPathz!SimpleRecordingPointPen.beginPathn   ó   € Øˆr;   Úreturnc                 ó   — d S rW   r:   rs   s    r<   rv   zSimpleRecordingPointPen.endPathq   r‰   r;   c                 óF   — | j                              ||€dndf¦  «         d S )NFT)r\   ry   )r]   ÚptÚsegmentTypes      r<   ÚaddPointz SimpleRecordingPointPen.addPointt   s,   € ØŒ
×Ò˜2¨Ð(;˜u˜uÀÐFÑGÔGÐGÐGÐGr;   rW   )rŠ   N)r+   r,   r-   rX   rˆ   rv   r�   r:   r;   r<   rƒ   rƒ   j   se   € € € € € ðð ð ðð ð ð ðð ð ð ðHð Hð Hð Hð Hð Hr;   rƒ   c                 óP   — d}t          | |¦  «        D ]\  }}||z
  }|||z  z  }Œ|S ©Nr   )Úzip©Úv0Úv1ÚsÚx0Úx1Úds         r<   Úvdiff_hypot2rš   x   s?   € Ø	€AÝ�b˜"‘+”+ð ð ‰ˆˆBØ�‰GˆØ	ˆQ�‰U‰
ˆˆØ€Hr;   c                 ó„   — d}t          | |¦  «        D ],\  }}||z
  }||j        |j        z  |j        |j        z  z   z  }Œ-|S r‘   )r’   ÚrealÚimagr“   s         r<   Úvdiff_hypot2_complexrž   €   sS   € Ø	€AÝ�b˜"‘+”+ð /ð /‰ˆˆBØ�‰GˆØ	ˆQŒV�a”f‰_˜qœv¨¬™Ñ.Ñ.ˆˆð €Hr;   c                 óT   ‡ — t          ˆ fd„t          |¦  «        D ¦   «         ¦  «        S )Nc              3   ó:   •K  — | ]\  }}‰|         |         V — Œd S rW   r:   )rC   ÚiÚjÚGs      €r<   rE   z matching_cost.<locals>.<genexpr>‹   s/   øè è € Ð7Ð7™4˜1˜aˆq�Œt�AŒwÐ7Ð7Ð7Ð7Ð7Ð7r;   )ÚsumÚ	enumerate)r£   Úmatchings   ` r<   Úmatching_costr§   Š   s.   ø€ ÝÐ7Ð7Ð7Ð7¥9¨XÑ#6Ô#6Ð7Ñ7Ô7Ñ7Ô7Ð7r;   c                 ó  — t          | ¦  «        }t          | ¦  «        \  }}|t          t          |¦  «        ¦  «        k                         ¦   «         sJ ‚t          d„ |D ¦   «         ¦  «        }t          |¦  «        t          | |¦  «        fS )Nc              3   ó4   K  — | ]}t          |¦  «        V — Œd S rW   )Úint)rC   Úes     r<   rE   z<min_cost_perfect_bipartite_matching_scipy.<locals>.<genexpr>”   s(   è è € Ð%Ð%˜1•�A‘”Ð%Ð%Ð%Ð%Ð%Ð%r;   )ÚlenÚlinear_sum_assignmentÚlistÚrangeÚallr§   )r£   ÚnÚrowsÚcolss       r<   Ú)min_cost_perfect_bipartite_matching_scipyr´   Ž   s€   € ÝˆA‰Œ€AÝ& qÑ)Ô)�J€Dˆ$Ø•D�˜q™œ‘N”NÒ"×'Ò'Ñ)Ô)Ð)Ð)Ð)õ Ð%Ð% Ð%Ñ%Ô%Ñ%Ô%€DÝ�‰:Œ:•} Q¨Ñ-Ô-Ð-Ð-r;   c                 ó¨   — t          | ¦  «        }d g|z  }t          ¦   «                              | ¦  «        D ]
\  }}|||<   Œ|t          | |¦  «        fS rW   )r¬   ÚMunkresÚcomputer§   )r£   r±   r³   ÚrowÚcols        r<   Ú+min_cost_perfect_bipartite_matching_munkresrº   ˜   s]   € ÝˆA‰Œ€AØˆ6�A‰:€DÝ‘I”I×%Ò% aÑ(Ô(ð ð ‰ˆˆSØˆˆS‰	ˆ	Ø•˜q $Ñ'Ô'Ð'Ð'r;   c                 óD  — t          | ¦  «        }|dk    rt          d¦  «        ‚t          j        t	          |¦  «        ¦  «        }t          t          |¦  «        ¦  «        }t          | |¦  «        }|D ])}t          | |¦  «        }||k     rt          |¦  «        |}}Œ*||fS )Nr%   z4Install Python module 'munkres' or 'scipy >= 0.17.0')r¬   Ú	ExceptionÚ	itertoolsÚpermutationsr¯   r®   Únextr§   )r£   r±   r¾   ÚbestÚ	best_costrD   Úcosts          r<   Ú.min_cost_perfect_bipartite_matching_bruteforcerÃ       s¤   € ÝˆA‰Œ€Aàˆ1‚u€uÝÐNÑOÔOÐOõ Ô)­%°©(¬(Ñ3Ô3€LÝ•�\Ñ"Ô"Ñ#Ô#€DÝ˜a Ñ&Ô&€IØð ,ð ,ˆÝ˜Q Ñ"Ô"ˆØ�)ÒÐÝ" 1™gœg t�)ˆDøØ�ˆ?Ðr;   )r­   )r¶   c                 ó¾   — t          t          | j        ¦  «        ¦  «        }t          || j        ¦  «        | j        | j        | j        dz  | j        dz  | j        |z  fS )Nr!   )	r   ÚabsÚarear   ÚmeanXÚmeanYÚstddevXÚstddevYÚcorrelation)ÚstatsÚsizes     r<   Úcontour_vector_from_statsrÎ   Â   s[   € õ •�E”J‘”Ñ Ô €Då�$˜œÑ$Ô$ØŒØŒØŒ˜ÑØŒ˜ÑØÔ˜DÑ ðð r;   c                 óö   ‡‡— t          | ¦  «        }t          t          |¦  «        ¦  «        }ˆfd„| D ¦   «         Št          ‰¦  «        \  }}t	          ˆfd„t          |¦  «        D ¦   «         ¦  «        }|||fS )Nc                 ó.   •‡— g | ]Šˆfd „‰D ¦   «         ‘ŒS )c                 ó0   •— g | ]}t          ‰|¦  «        ‘ŒS r:   )rš   )rC   r•   r”   s     €r<   ú
<listcomp>z3matching_for_vectors.<locals>.<listcomp>.<listcomp>Ö   s#   ø€ Ð0Ð0Ð0 r�l˜2˜rÑ"Ô"Ð0Ð0Ð0r;   r:   )rC   r”   Úm1s    @€r<   rÒ   z(matching_for_vectors.<locals>.<listcomp>Ö   s/   øø€ Ð>Ð>Ð>°RÐ0Ð0Ð0Ð0¨RÐ0Ñ0Ô0Ð>Ð>Ð>r;   c              3   ó4   •K  — | ]}‰|         |         V — Œd S rW   r:   )rC   r¡   Úcostss     €r<   rE   z'matching_for_vectors.<locals>.<genexpr>Û   s+   øè è € Ð6Ð6¨˜˜aœ œÐ6Ð6Ð6Ð6Ð6Ð6r;   )r¬   r®   r¯   Ú#min_cost_perfect_bipartite_matchingr¤   )Úm0rÓ   r±   Úidentity_matchingr¦   r§   Úidentity_costrÕ   s    `     @r<   Úmatching_for_vectorsrÚ   Ñ   s‡   øø€ ÝˆB‰Œ€Aå�U 1™XœX™œÐà>Ð>Ð>Ð>¸2Ð>Ñ>Ô>€Eõ 	,¨EÑ2Ô2ñØØåÐ6Ð6Ð6Ð6­U°1©X¬XÐ6Ñ6Ô6Ñ6Ô6€MØ�] MÐ1Ð1r;   c                 óD   — d}t          | ¦  «        D ]\  }}|dz  |z  }Œ|S )Nr   r    )Úreversed)ÚpointsÚbitsr�   Úbs       r<   Úpoints_characteristic_bitsrà   ß   s6   € Ø€DÝ˜&Ñ!Ô!ð ð ‰ˆˆAØ˜‘	˜Q‰ˆˆØ€Kr;   r#   c                 ó  — g }| s|S d„ | D ¦   «         } t          | ¦  «        }t          dk    sJ ‚|                      | d t          dz
  …         ¦  «         t          | ¦  «        t          k     r=|                      | d t          dz
  …         ¦  «         t          | ¦  «        t          k     °=t          |¦  «        D ]Ð}| |         }|                     |¦  «         | |dz            }||z
  }|                     |dz  ¦  «         | |dz            }||z
  }|                     ||z
  ¦  «         |j        |j        z  |j        |j        z  z
  }	t          t          t          |	¦  «        ¦  «        |	¦  «        }	|                     |	dz  ¦  «         ŒÑ|S )Nc                 ó&   — g | ]\  }}t          |Ž ‘ŒS r:   )Úcomplex)rC   r�   rG   s      r<   rÒ   z)points_complex_vector.<locals>.<listcomp>í   s    € Ð/Ð/Ð/™u˜r 1�g�rˆlÐ/Ð/Ð/r;   r#   r    r"   r!   )
r¬   Ú$_NUM_ITEMS_PER_POINTS_COMPLEX_VECTORÚextendr¯   ry   rœ   r�   r   r   rÅ   )
rÝ   Úvectorr±   r¡   rc   rg   Úd0rk   Úd1Úcrosss
             r<   Úpoints_complex_vectorrê   é   s–  € Ø€FØð ØˆØ/Ð/¨Ð/Ñ/Ô/€FÝˆF‰Œ€AÝ/°1Ò4Ð4Ð4Ð4Ø
‡M‚M�&ÐCÕ?À!ÑCÐCÔDÑEÔEÐEÝ
ˆf‰+Œ+Õ<Ò
<Ð
<Ø�Š�fÐGÕCÀaÑGÐGÔHÑIÔIÐIõ ˆf‰+Œ+Õ<Ò
<Ð
<å�1‰XŒXð !ð !ˆð �AŒYˆØ�Š�bÑÔÐð �A˜‘EŒ]ˆØ�"‰WˆØ�Š�b˜1‘fÑÔÐð �A˜‘EŒ]ˆØ�"‰WˆØ�Š�b˜2‘gÑÔÐð ”˜"œ'Ñ! B¤G¨b¬gÑ$5Ñ5ˆÝ��c %™jœjÑ)Ô)¨5Ñ1Ô1ˆØ�Š�e˜a‘iÑ Ô Ð Ð à€Mr;   c                 ó¼  — t          | ¦  «        }t          | ¦  «        }|r| d d d…         } t          | ¦  «        }n|}t          | ¦  «        }t          |¦  «        |z  dk    sJ ‚t          |¦  «        |z  }d|z  dz
  }t          |¦  «        D ]M}	|||	z
  z  |z  ||	z	  z  }
|
|k    r4|                     t          ||	 |z  ¦  «        |r|dz
  |	z
  n|	|f¦  «         ŒNd S )Nr~   r   r    )rà   r¬   rê   r¯   ry   rS   )rÝ   ÚisomorphismsrJ   Úreference_bitsr±   rÞ   ræ   ÚmultÚmaskr¡   rß   s              r<   Úadd_isomorphismsrð     s  € Ý/°Ñ7Ô7€NÝˆF‰Œ€Að
 ð Ø˜˜˜"˜”ˆÝ)¨&Ñ1Ô1ˆˆàˆå" 6Ñ*Ô*€Fåˆv‰;Œ;˜‰?˜aÒÐÐÐÝˆv‰;Œ;˜!Ñ€DØ�‰F�a‰<€Då�1‰XŒXð ð ˆØ�q˜1‘u‰o Ñ%¨$°!©)Ñ4ˆØ�ÒÐØ×ÒÝ˜& 1 " t¡)Ñ,Ô,¸7Ð.I¨a°!©e°a©i¨iÈÈ7ÐSñô ð øðð r;   )Údiscrete_axesc                ó  ‡‡‡— d gt          t          t          | ¦  «        dz
  ¦  «        ¦  «        z   }t          t          t          | ¦  «        ¦  «        ¦  «        }‰�rˆfd„t          ‰¦  «        D ¦   «         }|r$t	          j        dt          |¦  «        |¦  «         nt	          j        d¦  «         	 ddlm} ˆfd„t          t          ‰¦  «        ¦  «        D ¦   «         }t          ¦   «         Š‰D ])}‰ 
                    |                     ¦   «         ¦  «         Œ*t          ‰¦  «        Šˆfd„‰D ¦   «         }	t          j        t          t          ‰¦  «        ¦  «        d	¦  «        D ]u\  }
}ˆfd
„t          ‰|	|
         ¦  «        D ¦   «         }ˆfd„t          ‰|	|         ¦  «        D ¦   «         }||k    rŒPt!          |	|
         |	|         ¦  «        ||
         |<   Œv ||d¬¦  «        }|                     ¦   «         \  }}t%          t          ¦  «        }t          ||¦  «        D ];\  }}||                              |¦  «         ||                              |¦  «         Œ<d gt          ‰¦  «        z  }g }t          ¦   «         }t)          |¦  «        }|rv|                     ¦   «         }
|                     |
¦  «         |                     |
¦  «         t          ||
         ¦  «        D ] }||vr|
||<   |                     |¦  «         Œ!|°vt          |¦  «        t          |¦  «        k    s
J d¦   «         ‚n# t.          $ r Y nw xY wt0                               d|¦  «         t0                               d|¦  «         ||fS )Nr    c                 ót   •— g | ]4\  }}t          ˆfd „|                     ¦   «         D ¦   «         ¦  «        ¯2|‘Œ5S )c              3   ó2   •K  — | ]\  }}|‰v¯	|d k    V — ŒdS ©r   Nr:   ©rC   rR   Úvrñ   s      €r<   rE   z4find_parents_and_order.<locals>.<listcomp>.<genexpr>0  s5   øè è € ÐJÐJ™d˜a °1¸MÐ3IÐ3I�1˜’6Ð3IÐ3IÐ3IÐ3IÐJÐJr;   )r°   rM   )rC   r¡   rQ   rñ   s      €r<   rÒ   z*find_parents_and_order.<locals>.<listcomp>-  sX   ø€ ð 
ð 
ð 
á��1ÝÐJÐJÐJÐJ a§g¢g¡i¤iÐJÑJÔJÑJÔJð
Øð
ð 
ð 
r;   zFound %s base masters: %szNo base master location foundr   )Úminimum_spanning_treec                 ó6   •— g | ]}d gt          ‰¦  «        z  ‘ŒS )r   )r¬   )rC   rG   Ú	locationss     €r<   rÒ   z*find_parents_and_order.<locals>.<listcomp>;  s&   ø€ ÐIÐIÐI¨a�a�S�3˜y™>œ>Ñ)ÐIÐIÐIr;   c                 óH   •‡— g | ]Št          ˆfd „‰D ¦   «         ¦  «        ‘ŒS )c              3   óD   •K  — | ]}‰                      |d ¦  «        V — ŒdS rõ   )rB   )rC   rR   rQ   s     €r<   rE   z4find_parents_and_order.<locals>.<listcomp>.<genexpr>@  s/   øè è € Ð7Ð7¨Q˜QŸUšU 1 a™[œ[Ð7Ð7Ð7Ð7Ð7Ð7r;   )Útuple)rC   rQ   Úaxess    @€r<   rÒ   z*find_parents_and_order.<locals>.<listcomp>@  s7   øø€ ÐKÐKÐK¸A•uÐ7Ð7Ð7Ð7°$Ð7Ñ7Ô7Ñ7Ô7ÐKÐKÐKr;   r!   c                 ó$   •— i | ]\  }}|‰v ¯	||“ŒS r:   r:   rö   s      €r<   ú
<dictcomp>z*find_parents_and_order.<locals>.<dictcomp>B  ó0   ø€ ð 'ð 'ð 'Ù!˜Q ¸aÀ=Ð>PÐ>P�A�qÐ>PÐ>PÐ>Pr;   c                 ó$   •— i | ]\  }}|‰v ¯	||“ŒS r:   r:   rö   s      €r<   r   z*find_parents_and_order.<locals>.<dictcomp>E  r  r;   T)Ú	overwritez.Not all masters are reachable; report an issuezParents: %sz	Order: %s)r®   r¯   r¬   r¥   ÚloggingÚinfoÚwarningÚscipy.sparse.csgraphrø   ÚsetÚupdateÚkeysrL   r½   Úcombinationsr’   rš   Únonzeror   Úaddr   Úpopleftry   ÚImportErrorÚlog)Ú	glyphsetsrú   rñ   ÚparentsÚorderÚbasesrø   ÚgraphrQ   Úvectorsr¡   r¢   Úi_discrete_locationÚj_discrete_locationÚtreer²   r³   r¸   r¹   ÚvisitedÚqueuerþ   s    ``                  @r<   Úfind_parents_and_orderr  (  sÛ  øøø€ Øˆf•t�E¥# i¡.¤.°1Ñ"4Ñ5Ô5Ñ6Ô6Ñ6€GÝ••s˜9‘~”~Ñ&Ô&Ñ'Ô'€EØñ =%ð
ð 
ð 
ð 
å! )Ñ,Ô,ð
ñ 
ô 
ˆð
 ð 	=ÝŒLÐ4µc¸%±j´jÀ%ÑHÔHÐHÐHåŒOÐ;Ñ<Ô<Ð<ð-	ØBÐBÐBÐBÐBÐBàIÐIÐIÐIµ5½¸Y¹¼Ñ3HÔ3HÐIÑIÔIˆEÝ‘5”5ˆDØð &ð &�Ø—’˜AŸFšF™HœHÑ%Ô%Ð%Ð%Ý˜$‘<”<ˆDØKÐKÐKÐKÀÐKÑKÔKˆGÝ!Ô.­uµS¸±^´^Ñ/DÔ/DÀaÑHÔHð 	Cð 	C‘��1ð'ð 'ð 'ð 'Ý%(¨¨w°q¬zÑ%:Ô%:ð'ñ 'ô 'Ð#ð'ð 'ð 'ð 'Ý%(¨¨w°q¬zÑ%:Ô%:ð'ñ 'ô 'Ð#ð 'Ð*=Ò=Ð=ØÝ*¨7°1¬:°w¸q´zÑBÔB��a”˜‘�à(Ð(¨¸$Ð?Ñ?Ô?ˆDØŸš™œ‰JˆD�$Ý¥Ñ$Ô$ˆEÝ  d™OœOð $ð $‘��SØ�c”
—’˜sÑ#Ô#Ð#Ø�c”
—’˜sÑ#Ô#Ð#Ð#ð �f�s 9™~œ~Ñ-ˆGØˆEÝ‘e”eˆGÝ˜%‘L”LˆEØð (Ø—M’M‘O”O�Ø—’˜A‘”�Ø—’˜Q‘”�Ý  a¤Ñ)Ô)ð (ð (�AØ Ð'Ð'Ø%&˜ ™
ØŸš Q™œ˜øð ð (õ �u‘:”:¥Øñ"ô "ò ð ð à?ñô ð ð øõ ð 	ð 	ð 	ØˆDð	øøøõ 	�Š� Ñ(Ô(Ð(Ý�Š�˜eÑ$Ô$Ð$Ø�Eˆ>Ðs   Â6JL9 Ì9
MÍMFc                 ó²  — | j         }| j        }| j        }||z
  dz  dz  ||z  z   dz  }||z   dz  |z   }||z   dz  |z
  }|dk    rt          ||z
  |¦  «        n||k     r
t          dz  nd}t          ¦   «         }	|dk     rd}|ro|	                     | j         | j         ¦  «        }	|	 	                    | ¦  «        }	|	 
                    dt          |¦  «        z  dt          |¦  «        z  ¦  «        }	ne|	 
                    t          |¦  «        t          |¦  «        ¦  «        }	|	 	                    |¦  «        }	|	                     | j        | j        ¦  «        }	|	S )Ng      à?r!   r   r    )Ú	varianceXÚ
covarianceÚ	varianceYr   r   r   Ú	translaterÇ   rÈ   ÚrotateÚscaler   )
rÌ   ÚinverseÚarß   ÚcÚdeltaÚlambda1Úlambda2ÚthetaÚtranss
             r<   Útransform_from_statsr,  l  sR  € àŒ€AØÔ€AØŒ€Aà�1‰u˜‰m Ñ! A¨¡EÑ)¨cÑ1€EØ�1‰u˜‰m˜eÑ#€GØ�1‰u˜‰m˜eÑ#€GØ%&¨!¢V V�E�'˜A‘+˜qÑ!Ô!Ð!¸aÀ!ºe¸eµ"°s±(°(È€EÝ‰KŒK€Eà�‚{€{ð ˆàð :Ø—’ ¤ ¨u¬{¨lÑ;Ô;ˆØ—’˜e˜VÑ$Ô$ˆØ—’˜A¥ W¡¤Ñ-¨qµ4¸±=´=Ñ/@ÑAÔAˆˆà—’�D ™MœM­4°©=¬=Ñ9Ô9ˆØ—’˜UÑ#Ô#ˆØ—’ ¤¨U¬[Ñ9Ô9ˆà€Lr;   )F)7ÚfontTools.ttLib.ttGlyphSetr   ÚfontTools.pens.basePenr   r   r   ÚfontTools.pens.pointPenr   r   ÚfontTools.pens.recordingPenr	   r
   ÚfontTools.misc.transformr   Úcollectionsr   r   Úmathr   r   r   r   Úenumr   r½   r  Ú	getLoggerr  r   rO   rS   rU   r|   rƒ   rš   rž   r§   r´   rº   rÃ   Úscipy.optimizer­   rÖ   r  Úmunkresr¶   rÎ   rÚ   rà   rä   rê   rð   r  r  r,  r:   r;   r<   ú<module>r8     s?  ðØ 3Ð 3Ð 3Ð 3Ð 3Ð 3Ø GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GØ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GØ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MØ .Ð .Ð .Ð .Ð .Ð .Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð à €€€à€gÔÐ9Ñ:Ô:€ðð ð ð ð ñ ô ð ð8ð ð ð ð ð ðð ð ð ð �Gñ ô ð ðD?ð ?ð ?ð ?ð ?˜}ñ ?ô ?ð ?ðHð Hð Hð Hð HÐ.ñ Hô Hð Hðð ð ðð ð ð8ð 8ð 8ð.ð .ð .ð(ð (ð (ðð ð ð"
Ø4Ð4Ð4Ð4Ð4Ð4à*SÐ'Ð'øØð 

ð 

ð 

ð	
Ø#Ð#Ð#Ð#Ð#Ð#ð 8ð 	,Ð+øð ð 
ð 
ð 
à:ð 	,Ð+Ð+ð
øøøøøð

øøøðð ð ð2ð 2ð 2ðð ð ð ()Ð $ð!ð !ð !ðHð ð ð6 CFÀ#Á%Ä%ð Að Að Að Að AðH ð  ð  ð  ð  ð  s6   Â)B2 Â2CÂ8CÃ CÃCÃCÃ
CÃCÃC