
    Li.(                        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Zd dlZ ej0                  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(d Z,d Z-d Z.dZ/d  Z0d! Z1 e2       d"d#Z3y# e)$ r 	 d dl*m+Z+ e$Z(n# e)$ r e%Z(Y nw xY wY ;w xY w)$    )LerpGlyphSet)AbstractPenBasePenDecomposingPen)AbstractPointPenSegmentToPointPen)RecordingPenDecomposingRecordingPen)	Transform)defaultdictdeque)sqrtcopysignatan2piNzfontTools.varLib.interpolatablec                   h    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y)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     l/home/ubuntu/crypto_trading_bot/.venv/lib/python3.12/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                 N    t        t        | j                         d d            S )z6Sort problem groups by their most severe problem type.c                 .    t        d | d   D               S )Nc              3   n   K   | ]-  }t         j                  |d       |j                  dd      z    / yw)type	tolerancer   N)r   r8   get).0ps     r;   	<genexpr>z2sort_problems.<locals>.<lambda>.<locals>.<genexpr>1   s8       +33AfI>{TUAVVs   35r   )min)_s    r;   <lambda>zsort_problems.<locals>.<lambda>0   s!    3qT  r:   T)keyreverse)dictsorteditems)problemss    r;   sort_problemsrN   +   s+    NN 		
 r:   c                     | | 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.Nr9   )lks     r;   rot_listrR   ;   s     aRS6AcrF?r:   c                   >    e Zd Zd
dZd Zd Zd Zd Zd Zd Z	d	 Z
y)PerContourPenNc                 Z    t        j                  | |       || _        d | _        g | _        y N)r   __init___Pen_penvalue)selfPenglyphsets      r;   rW   zPerContourPen.__init__B   s'    x(		
r:   c                 Z    | j                          | j                  j                  |       y rV   )_newItemrY   moveTo)r[   p0s     r;   _moveTozPerContourPen._moveToH   s    		r:   c                 :    | j                   j                  |       y rV   )rY   lineTo)r[   p1s     r;   _lineTozPerContourPen._lineToL   s    		r:   c                 <    | j                   j                  ||       y rV   )rY   qCurveTo)r[   re   p2s      r;   _qCurveToOnezPerContourPen._qCurveToOneO   s    		2r"r:   c                 >    | j                   j                  |||       y rV   )rY   curveTo)r[   re   ri   p3s       r;   _curveToOnezPerContourPen._curveToOneR   s    		"b"%r:   c                 F    | j                   j                          d | _         y rV   )rY   	closePathr[   s    r;   
_closePathzPerContourPen._closePathU   s    			r:   c                 F    | j                   j                          d | _         y rV   )rY   endPathrq   s    r;   _endPathzPerContourPen._endPathY   s    			r:   c                 h    | j                         x| _        }| j                  j                  |       y rV   )rX   rY   rZ   append)r[   pens     r;   r_   zPerContourPen._newItem]   s&    ))+%	C

#r:   rV   )r*   r+   r,   rW   rb   rf   rj   rn   rr   ru   r_   r9   r:   r;   rT   rT   A   s*    #&r:   rT   c                       e Zd Zd Zy)PerContourOrComponentPenc                 b    | j                          | j                  d   j                  ||       y )N)r_   rZ   addComponent)r[   	glyphNametransformations      r;   r}   z%PerContourOrComponentPen.addComponentc   s#    

2##I~>r:   N)r*   r+   r,   r}   r9   r:   r;   rz   rz   b   s    ?r:   rz   c                   *    e Zd Zd ZddZddZddZy)SimpleRecordingPointPenc                     g | _         y rV   )rZ   rq   s    r;   rW   z SimpleRecordingPointPen.__init__i   s	    
r:   Nc                      y rV   r9   )r[   
identifierkwargss      r;   	beginPathz!SimpleRecordingPointPen.beginPathl       r:   c                      y rV   r9   rq   s    r;   rt   zSimpleRecordingPointPen.endPatho   r   r:   c                 R    | j                   j                  ||df       y df       y )NFT)rZ   rw   )r[   ptsegmentTypes      r;   addPointz SimpleRecordingPointPen.addPointr   s&    

2(;uFGFGr:   rV   )returnN)r*   r+   r,   rW   r   rt   r   r9   r:   r;   r   r   h   s    Hr:   r   c                 L    d}t        | |      D ]  \  }}||z
  }|||z  z  } |S Nr   )zipv0v1sx0x1ds         r;   vdiff_hypot2r   v   s=    	Ab"+ BG	QU
 Hr:   c                     d}t        | |      D ]@  \  }}||z
  }||j                  |j                  z  |j                  |j                  z  z   z  }B |S r   )r   realimagr   s         r;   vdiff_hypot2_complexr   ~   sW    	Ab"+ /BG	QVVaff_qvv../
 Hr:   c                 >     t         fdt        |      D              S )Nc              3   4   K   | ]  \  }}|   |     y wrV   r9   )rB   ijGs      r;   rD   z matching_cost.<locals>.<genexpr>   s     741aqtAw7s   )sum	enumerate)r   matchings   ` r;   matching_costr      s    79X#6777r:   c                     t        |       }t        |       \  }}|t        t        |            k(  j	                         sJ t        d |D              }t        |      t        | |      fS )Nc              3   2   K   | ]  }t        |        y wrV   )int)rB   es     r;   rD   z<min_cost_perfect_bipartite_matching_scipy.<locals>.<genexpr>   s     %1A%s   )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N"''))) %%%D:}Q---r:   c                     t        |       }d g|z  }t               j                  |       D ]
  \  }}|||<    |t        | |      fS rV   )r   Munkrescomputer   )r   r   r   rowcols        r;   +min_cost_perfect_bipartite_matching_munkresr      sQ    AA6A:DI%%a( SS	q$'''r:   c                    t        |       }|dkD  rt        d      t        j                  t	        |            }t        t        |            }t        | |      }|D ]!  }t        | |      }||k  st        |      |}}# ||fS )Nr$   z4Install Python module 'munkres' or 'scipy >= 0.17.0')r   	Exception	itertoolspermutationsr   r   nextr   )r   r   r   best	best_costrC   costs          r;   .min_cost_perfect_bipartite_matching_bruteforcer      s    AA1uNOO ))%(3L\"#Da&I ,Q")"1gt)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      sb     EJJ D$$D  r:   c                     t        |       }| D cg c]  }|D cg c]  }t        ||       c} c}}t              \  }}t        fdt	        |      D              }|||fS c c}w c c}}w )Nc              3   .   K   | ]  }|   |     y wrV   r9   )rB   r   costss     r;   rD   z'matching_for_vectors.<locals>.<genexpr>   s     6a6s   )r   r   #min_cost_perfect_bipartite_matchingr   r   )	m0m1r   r   r   r   r   identity_costr   s	           @r;   matching_for_vectorsr      sl    BA;=>RR0rl2r"0>E 	,E26U1X66M]M11 1>s   	A,A'A,'A,c                 @    d}t        |       D ]  \  }}|dz  |z  } |S )Nr   r   )reversed)pointsbitsr   bs       r;   points_characteristic_bitsr      s1    D&! A	QKr:   r"   c                    g }| s|S | D cg c]  \  }}t        |  } }}t        |       }t        dk(  sJ | j                  | d t        dz
          t        |       t        k  r.| j                  | d t        dz
          t        |       t        k  r.t	        |      D ]  }| |   }|j                  |       | |dz      }||z
  }|j                  |dz         | |dz      }	|	|z
  }
|j                  |
|z
         |j                  |
j                  z  |j                  |
j                  z  z
  }t        t        t        |            |      }|j                  |dz          |S c c}}w )Nr"   r   r!   r    )complexr   $_NUM_ITEMS_PER_POINTS_COMPLEX_VECTORextendr   rw   r   r   r   r   r   )r   vectorr   rF   r   r   ra   re   d0ri   d1crosss               r;   points_complex_vectorr      sb   F(./ur1grl/F/FA/1444
MM&C?!CDE
f+<
<fGCaGHI f+<
<1X ! AYb AE]"Wb1f AE]"Wb2g "''!BGGbgg$55c%j)51eai +!. M; 0s   E!c                 n   t        |       }t        |       }|r| d d d   } t        |       }n|}t        |       }t        |      |z  dk(  sJ t        |      |z  }d|z  dz
  }t        |      D ]E  }	|||	z
  z  |z  ||	z	  z  }
|
|k(  s|j	                  t        ||	 |z        |r|dz
  |	z
  n|	|f       G y )Nr|   r   r   )r   r   r   r   rw   rR   )r   isomorphismsrI   reference_bitsr   r   r   multmaskr   r   s              r;   add_isomorphismsr     s    /7NFA
 ")&1"6*Fv;?av;!DFa<D1X q1uo%$!)4&1"t),7a!eai7Sr:   )discrete_axesc          	         d gt        t        t        |       dz
              z   }t        t        t        |                   }|rt        |      D cg c])  \  }}t	        fd|j                         D              r|+ }}}|r!t        j                  dt        |      |       nt        j                  d       	 ddl	m
} t        t        |            D 	cg c]  }	dgt        |      z   }
}	t               }|D ]!  |j                  j                                # t        |      }|D cg c]  t        fd|D               }}t!        j"                  t        t        |            d      D ]q  \  }}t%        |||         D ci c]  \  }}|v s|| }}}t%        |||         D ci c]  \  }}|v s|| }}}||k7  rZt'        ||   ||         |
|   |<   s  ||
d	
      }|j)                         \  }}t+        t              }
t%        ||      D ]-  \  }}|
|   j-                  |       |
|   j-                  |       / d gt        |      z  }g }t               }t/        |      }|rc|j1                         }|j-                  |       |j3                  |       t        |
|         D ]  }||vs|||<   |j3                  |        |rct        |      t        |      k(  sJ d       	 t        j                  d|       t        j                  d|       ||fS c c}}w c c}	w c c}w c c}}w c c}}w # t4        $ r Y Ww xY w)Nr   c              3   8   K   | ]  \  }}|vs|d k(    ywr   Nr9   )rB   rQ   vr   s      r;   rD   z)find_parents_and_order.<locals>.<genexpr>/  s      Jda1M3I16Js   
zFound %s base masters: %szNo base master location foundr   )minimum_spanning_treec              3   B   K   | ]  }j                  |d         ywr   )rA   )rB   rQ   rP   s     r;   rD   z)find_parents_and_order.<locals>.<genexpr>?  s     7QQUU1a[7s   r    T)	overwritez.Not all masters are reachable; report an issuezParents: %sz	Order: %s)r   r   r   r   r   rL   loginfowarningscipy.sparse.csgraphr   setupdatekeysrK   tupler   combinationsr   r   nonzeror   addr   popleftrw   ImportError)	glyphsets	locationsr   parentsorderr   rP   basesr   rF   graphaxesvectorsr   rQ   r   i_discrete_locationj_discrete_locationtreer   r   r   r   visitedqueues     `   `                  r;   find_parents_and_orderr  '  sB   ftE#i.1"4566Gs9~&'E "),
1JaggiJJ 
 

 HH0#e*eDKK78-	B38Y3HIaaS3y>)IEI5D &AFFH%&$<DAJKAu7$77KGK!..uS^/DaH 	C1%(wqz%:'!Qa=>PAqD'# ' &)wqz%:'!Qa=>PAqD'# ' '*==*71:wqzBa	C )$?DJD$$EdO $Sc
s#c
s#$
 fs9~-GEeG%LEMMOAQa) (A'%&
Q(	  u:"  @?@  	(e$E>y
 J
 L''>  		si   .L.?M
 L41AM
 3L9AM
 L>L>"M
 7MM	C:M
 M
 M
 4M
 
	MM)4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   r   logging	getLoggerr   r   rN   rR   rT   rz   r   r   r   r   r   r   r   scipy.optimizer   r   r   munkresr   r   r   r   r   r   r   r   r  r9   r:   r;   <module>r     s   3 G G G M . * * *  g9: 8 G B?} ?H. H8.((
4*S'	2 () $!H6 CF% Ac  

	
# 8 	,  
: 	,


s6   B> >CCCCCCCC