
    ]Mh,                        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     f/var/www/html/test/jupyter/venv/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HHHr;   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         +3AfI>{TUAVAVV     r;   r    )min)_s    r<   <lambda>zsort_problems.<locals>.<lambda>1   s5    3 qT     r;   T)keyreverse)dictsorteditems)problemss    r<   sort_problemsrO   ,   sB    NN  		
 		
 		
  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"     aRSS6AcrcF?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     	2r"""""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(;uu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	QVaf_qv.. 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741aqtAw777777r;   )sum	enumerate)r   matchings   ` r<   matching_costr      s.    77779X#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))JD$DqNN"''))))) %%%%%%%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6A:DII%%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1uuNOOO )%((33L\""##Da&&I , ,Q"")"1ggt)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[     EJ  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0rl2r""000r;   r:   )rC   r   m1s    @r<   r   z(matching_for_vectors.<locals>.<listcomp>   s/    >>>R0000R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U1XX>>>>2>>>E 	,E226666U1XX66666M]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     ///ur1grl///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
MM&C?!CCDEEE
f++<
<
<fGCaGGHIII f++<
<
<1XX ! ! AYb AE]"Wb1f AE]"Wb2g "'!BGbg$55c%jj))511eai    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7NFA
  ")&11"6**Fv;;?av;;!DFa<D1XX  q1uo%$!)4&1"t),,7.Ia!eaii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Jda1M3I3I163I3I3I3IJJr;   )r   rM   )rC   r   rQ   r   s      r<   r   z*find_parents_and_order.<locals>.<listcomp>-  sX     
 
 
1JJJJaggii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IaaS3y>>)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7QQUU1a[[777777r;   )tuple)rC   rQ   axess    @r<   r   z*find_parents_and_order.<locals>.<listcomp>@  s7    KKKAu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>PAq>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   ftE#i..1"455666Gs9~~&&''E =%
 
 
 
!),,
 
 

  	=L4c%jj%HHHHO;<<<-	BBBBBBIIII5Y3H3HIIIE55D & &AFFHH%%%%$<<DKKKKKKKG!.uS^^/D/DaHH 	C 	C1' ' ' '%(wqz%:%:' ' '#' ' ' '%(wqz%:%:' ' '# '*===*71:wqzBBa(($???DJD$$$EdOO $ $Sc
s###c
s#### fs9~~-GEeeG%LLE (MMOO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1um!AE)c1E1ume#G1ume#G%&!VVE'A+q!!!a!ee"s((EKKE{{  :u{l;;eV$$AW-q4==/@AADMM4==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