
    ]MhW                        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 ddlmZmZ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ZddlZddlZddlZ ej        d          Z G d de           Z! G d d          Z" G d de"          Z# G d de#          Z$ G d de#          Z% G d de"          Z&dS )   )*    )TTFont)LerpGlyphSet)RecordingPenDecomposingRecordingPenRecordingPointPen)ControlBoundsPen)CairoPen)SegmentToPointPenPointToSegmentPenReverseContourPointPen)PerContourOrComponentPenSimpleRecordingPointPen)cycle)wraps)BytesIONzfontTools.varLib.interpolatablec                       e Zd Zd Zd ZdS )OverridingDictc                     || _         d S Nparent_dict)selfr   s     c/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/fontTools/varLib/interpolatablePlot.py__init__zOverridingDict.__init__    s    &    c                     | j         |         S r   r   )r   keys     r   __missing__zOverridingDict.__missing__#   s    $$r   N)__name__
__module____qualname__r   r     r   r   r   r      s2        ' ' '% % % % %r   r   c            	          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d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d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'dZ(d Z)d!Z*d"Z+dEd$Z,d% Z-d& Z.d' Z/d(d#d#d)d*Z0d(d#d#d)d+Z1d, Z2d- Z3d. Z4d/ Z5d(d(d0d1Z6d(d(d0d2Z7d3d3d4d3d5d#d#d#d6d7Z8d3d3d#d8d9Z9d3d3d4d:d;d<Z:d3d3d4d:dd=d>Z;d3d3d4d?d@Z<d3d3d4d#d#dAdBZ=dC Z>dFdDZ?d#S )GInterpolatablePlotg      @i  g@      r   )333333?r)   r)   )皙?r*   r*   )?r+   r+         ?)皙?r-   r-   )皙?r.   r.   )r   r-   r   ffffff?   )r   r,   r   r/      )r   r+   r   r/      )r   r   r   r/   )r   r   r   r/   	   )r   r   r   r/      ))r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   )r   r   r   皙?z#Your font's good! Have a cupcake...)r   r,   r   )r)   r   r)   a  
                          ,@.
                        ,@.@@,.
                  ,@@,.@@@.  @.@@@,.
                ,@@. @@@.     @@. @@,.
        ,@@@.@,.@.              @.  @@@@,.@.@@,.
   ,@@.@.     @@.@@.            @,.    .@' @'  @@,
 ,@@. @.          .@@.@@@.  @@'                  @,
,@.  @@.                                          @,
@.     @,@@,.     ,                             .@@,
@,.       .@,@@,.         .@@,.  ,       .@@,  @, @,
@.                             .@. @ @@,.    ,      @
 @,.@@.     @,.      @@,.      @.           @,.    @'
  @@||@,.  @'@,.       @@,.  @@ @,.        @'@@,  @'
     \\@@@@'  @,.      @'@@@@'   @@,.   @@@' //@@@'
      |||||||| @@,.  @@' |||||||  |@@@|@||  ||
       \\\\\\\  ||@@@||  |||||||  |||||||  //
        |||||||  ||||||  ||||||   ||||||  ||
         \\\\\\  ||||||  ||||||  ||||||  //
          ||||||  |||||  |||||   |||||  ||
           \\\\\  |||||  |||||  |||||  //
            |||||  ||||  |||||  ||||  ||
             \\\\  ||||  ||||  ||||  //
              ||||||||||||||||||||||||
)r   r)   r)   z\_(")_/z
 o
/|\
/ \
z
 o
/O\
/ \
z \o/ Nc                 ~   || _         || _        |pd |D             | _        i | _        |                                D ]8\  }}t          | |          st          d|z            t          | ||           9| j        dz  | j	        dz  z
  | _
        | j        dz  | j	        dz  z
  | j        dz  z
  | j        z
  | _        d S )Nc                 ,    g | ]}t          |          S r$   )repr).0gs     r   
<listcomp>z/InterpolatablePlot.__init__.<locals>.<listcomp>u   s    :::1tAww:::r   zUnknown keyword argument: %s      r0   )out	glyphsetsnamestocitemshasattr	TypeErrorsetattrwidthpadpanel_widthheight	font_sizetitle_font_sizepanel_height)r   r>   r?   r@   kwargskvs          r   r   zInterpolatablePlot.__init__r   s    ":::	:::
LLNN 	  	 DAq4## D > BCCCD!Q:>DHqL8K!Odhl*T^a-??$BVV 	r   c                     | S r   r$   r   s    r   	__enter__zInterpolatablePlot.__enter__   s    r   c                     d S r   r$   r   typevalue	tracebacks       r   __exit__zInterpolatablePlot.__exit__   s    r   c                 &    | xj         dz  c_         d S )Nr   )page_numberrQ   s    r   	show_pagezInterpolatablePlot.show_page   s    Ar   Tshow_tolerance	tolerance	kinkinessc          
         | j         }| j        d| j         z  z
  }| j        d| j         z  z
  }|x}}	|                     d||	d|| j                   |	| j        z  }	dd l}
|D ]}t          j                            |          }|	| j	        | j         z   z  }	|                     |||	d|           |	| j	        | j         z   z  }		 |

                    t          |d                                                                                    }|                     d	|z  ||z   |	|
           |	| j	        z  }	n# t          $ r Y nw xY w|                    d          rtt!          |          }d|v r|d         nd }|rSdD ]P\  }}|                    |          }||                     |d|||z   |	|
           |	| j	        | j         z   z  }	Qk|                    d          rZddlm}  ||          }dD ]F\  }}|                     |dt)          ||          ||z   |	|
           |	| j	        | j         z   z  }	G|                     |||           |                                  d S )Nr=   r<   zProblem report for:TxyboldrF   rJ   r   )rb   rc   rd   rF   rbzsha1: %srb   rc   rF   z.ttfname))Family name)   r(   r   )Version)   z: )z.glyphsz.glyphspackage)GSFont))rh   
familyName)VersionMajorversionMajor)VersionMinor_versionMinorr\   )rG   rF   rI   
draw_labelrK   hashlibospathbasenamerJ   sha1openread	hexdigestIsADirectoryErrorendswithr   getFirstDebugName	glyphsLibrl   getattrdraw_legendr[   )r   filesr]   r^   r_   rG   rF   rI   rb   rc   rs   file	base_filehttFontrg   whatnameIDsnrl   ffields                         r   add_title_pagez!InterpolatablePlot.add_title_page   s    h
Q\)q48|+A!* 	 	
 	
 	
 	
T!! +	3 +	3D((..I$(**AOOIad%OHHH$(**ALLdD!1!1!6!6!8!899CCEE
Q!c'QeLLLT^#$    }}V$$ 3)/6)9)9vf~~t 7* 
7 
7g !227;;9$(,aa0AGq (    T^dh66<== 3,,,,,,F4LL$ 3 3KD%
 OO$(DD'!U*;*;*;<c'#	 $    $(22AA)Y) 	 	
 	
 	
 	s   A0D22
D?>D?c                
   t          j        | j                  }| j        }| j        | j        z
  | j        dz  z
  }| j        d| j        z  z
  }|| j        dz  z   }|| j        dz  z   }	|r+|                     d|	||           || j        | j        z   z  }|                     d|	||           |                    || j        dz  z
  |d| j        z  | j                    |j	        | j
          |                                 | j        r= |j	        | j          |                    | j                   |                                  |j        | j          |                                 || j        | j        z   z  }|                     d|	||           |                    || j        dz  z
  |d| j        z  | j                   | j
        r# |j	        | j
          |                                 | j        r= |j	        | j          |                    | j                   |                                  |j        g | j        d	         | j        R   |                                 || j        | j        z   z  }|                     d
|	||           |                     |||| j        dz  z   | j        | j        | j                   || j        | j        z   z  }|                     d|	||           |                     |||| j        dz  z   | j        | j                   || j        | j        z   z  }|                     d|	||           |                     |||| j        dz  z   | j        | j                   || j        | j        z   z  }|                     d|	||           |                     ||| j        dz  z
  || j        dz  z   | j                    || j        | j        z   z  }|                     d|	||           |                     |||| j        dz  z   | j        | j!                   || j        | j        z   z  }|                     d|	||           |                     ||| j        dz  z
  || j        dz  z   | j!                   || j        | j        z   z  }|                     d|||d           || j        | j        z   z  }|.|                     d|z  |	||           || j        | j        z   z  }|.|                     d|z  |	||           || j        | j        z   z  }|                     d|||d           || j        | j        z   z  }d S )Nr<   r1   z,Tolerance: badness; closer to zero the worserf   zUnderweight contoursr/   g      ?z/Colored contours: contours with the wrong orderr   zKink artifactr,   )rb   rc   diameterstroke_widthcolorz!Point causing kink in the contour)rb   rc   r   r   z!Suggested new contour start pointz4Contour start point in contours with wrong directionr)   rb   rc   r   z5Contour start point when the first two points overlapz!Contour start point and directionzLegend:Trb   rc   rF   rd   z!Kink-reporting aggressiveness: %gzError tolerance: %gzParameters:)"cairoContextsurfacerG   rI   rJ   rF   rr   	rectangleset_source_rgb
fill_colorfill_preservestroke_colorset_line_widthr   stroke_preserveset_source_rgbaweight_issue_contour_colorfillcontour_colorscontour_alphadraw_circlekink_circle_sizekink_circle_stroke_widthkink_circle_colordraw_dotkink_point_sizekink_point_colorcorrected_start_point_sizecorrected_start_point_color
draw_arrowstart_arrow_lengthwrong_start_point_colorstart_point_color)
r   r]   r^   r_   crrb   rc   rF   xxxxxs
             r   r   zInterpolatablePlot.draw_legend   sE   ]4<((HK$("T^a%77
Q\)A$(Q, 	+OO>#RW     DN**A.#%HHH
R$(S.(!S48^T^LLL4?++
 	!Bt011d/000   D;<<
				TX&&=QV 	 	
 	
 	
 	R$(S.(!S48^T^LLL? 	Bt// 	!Bt011d/000   GD/2GD4FGGGG
				TX&&3!5AAA$.3&&*6( 	 	
 	
 	
 	
TX&&;sauUUU$.3&&)' 	 	
 	
 	
 	
TX&&;sauUUU$.3&&42 	 	
 	
 	
 	
TX&&B	 	 	
 	
 	
 	4*S00$.3&&.	 	 	
 	
 	
 	
TX&&C	 	 	
 	
 	
 	$.3&&4( 	 	
 	
 	
 	
TX&&;sauUUU4*S00$.3&&(	 	 	
 	
 	
 	
TX&&	Q!5tDDD	TX&& OO3i?	     DN**A OO%	1	     DN**Aau4HHH	TX&&r   c           
      L   | j         }| j        d| j         z  z
  }| j        d| j         z  z
  }|x}}|                     d||d|| j                   || j        z  }t          t                    }t          |                                          D ]+\  }}|D ]#}	||	d                  	                    |           $,d|v r|d= t          |d 	          D ]}
|| j
        z  }|                     d
|
t          ||
                   fz  |||d           || j
        z  }t          ||
                   D ]]}|| j
        z   |k    r|                                  | j
        |z   }|                     ||d|z  z   ||d|z  z
             || j
        z  }^|                                  d S )Nr=   r<   zSummary of problemsTra   rU   nothingc                 &    t           j        |          S r   )InterpolatableProblemseverityrb   s    r   <lambda>z0InterpolatablePlot.add_summary.<locals>.<lambda>r  s    .C.LQ.O r   r   z%s: %dr   rf   )rG   rF   rI   rr   rK   defaultdictsetsortedrB   addrJ   lenr[   )r   problemsrG   rF   rI   rb   rc   glyphs_per_problem	glyphnameproblemproblem_types              r   add_summaryzInterpolatablePlot.add_summaryY  s   h
Q\)q48|+A!* 	 	
 	
 	
 	
T!!(--#)(..*:*:#;#; 	C 	CIx# C C"76?377	BBBBC ***"9-"$O$O
 
 
 	$ 	$L AOOL#.@.N*O*OPP     A#$6|$DEE $ $	t~%..NN$$$,A	QS[AUQQTW_UUUT^#$ 	r   c           	      &   | j         }| j        d| j         z  z
  }| j        d| j         z  z
  }|x}}|                     |||d|| j                   || j        | j         z   z  }d }|D ]\  }	\  }
}|
|k    r|
}|| j        z   |k    r|                                  | j        |z   }|                     |
|d|z  z   ||d|z  z
             |                     t          |	          ||d|z  d           || j        z  }|                                  d S )	Nr<   Tra   rk   rf   r1   r   )rb   rc   rF   align)rG   rF   rI   rr   rK   rJ   r[   str)r   titlerB   rG   rF   rI   rb   rc   last_glyphnamepage_nor   r   s               r   _add_listingzInterpolatablePlot._add_listing  sJ   h
Q\)q48|+AQ!$et?S 	 	
 	
 	
 	
T!DH,,.3 		  		 *G*iN**&N4>!F**   NS(OOIQWSOQQQOOCLLA!c'OKKKAAr   c                 z    |                      dt          | j                                                             d S )NzTable of contentsr   r   rA   rB   rQ   s    r   add_table_of_contentsz(InterpolatablePlot.add_table_of_contents  s3    -vdhnn6F6F/G/GHHHHHr   c                     |                      dt          | j                                        d                      d S )NIndexc                     | d         d         S )Nr   r   r$   r   s    r   r   z.InterpolatablePlot.add_index.<locals>.<lambda>  s    !A$q' r   r   r   rQ   s    r   	add_indexzInterpolatablePlot.add_index  s;    '6$(..*:*:@Q@Q#R#R#RSSSSSr   r]   show_page_numberc                   |                                 D ]\  }}d }g }|D ]}d|v r|d         n|d         |d         f}	|	|k    r|                    |           :|r/|                     ||||           |                                  g }|	}|                    |           |r-|                     ||||           |                                  d S )N
master_idxmaster_1_idxmaster_2_idxr   )rB   appendadd_problemr[   )
r   r   r]   r   glyphglyph_problemslast_masterscurrent_glyph_problemspmasterss
             r   add_problemszInterpolatablePlot.add_problems  s@   %-^^%5%5 	! 	!!E>L%'"# 1 1 $q(( lOON+Q~->? 
 l***11!444) 0$$.'5)9	 %    NN$$$-/*&&--a0000% !  *#1%5	 !       ?	! 	!r   c                <  78 t                    t          t          fvrgf| j        | j        <   d         d         8t          d D                       }t          8fd|D                       s,d                    t          d D                                 8t          
                    d8           dd         v rd	nd
}fd|D             }8t          j        k    rCt          fdt          | j                  D                       }|                    d|           | j        }	| j        }
|                     dz   |	|
| j        dd| j                   t+          d D                       }|dk     r0|r.|                     d|z  |	|
| j        d| j        z  z
  dd           |
| j        | j        z   z  }
|                     d8z   |	|
| j        d| j        z  z
  | j        d           |
| j        | j        dz  z   z  }
g }t          |          D ]\  }}| j        |         }| j        |         }|                     ||	|
| j        | j        d           |
| j        | j        z   z  }
|         /|                    |                     |||	|
                     n|                     | j        |	|
           |
| j        | j        z   | j        z   z  }
tA          d |D                       r| j        | j        z   | j        z   }	| j        }
|
| j        | j        dz  z   z  }
|
| j        | j        z   z  }
| j        |d                  }| j        |d                  }|                     d|	|
| j        | j        d           |
| j        | j        z   z  }
tC          ||          }|                     |ddigd D             z   d |	|
t+          |                     |
| j        | j        z   | j        z   z  }
tA          d |D                       rN|                     d |	|
| j        | j        d           |
| j        | j        z   z  }
tE          |          }tE          |          }tG          tH          |!          }tG          tH          |!          7|         %                    |           |         %                    7           D ]9}|d         t          j&        k    r!7fd"d         d#         D             }|7_'        :D ]}|d         t          j(        k    r|j'        |d$                  }7j'        |d$                  }tS                      }tU          |d%          }|+                    |           tS                      }tU          |d%          }|+                    |           |d#         }|d&         rNtS                      }tY          |          } |+                    |            |}t[          |j'                  dz
  |z
  }|j'        d d         }!|j'        d'd          }"|j'        dd'         }#|#|d          |#d |         z   }#|!|#z   |"z   |_'        tI                      }$t]          |$d          }|+                    |           tI                      }%t]          |%d          }|+                    |           |$j'        |_'        |%j'        |_'        ||j'        |d$         <   |7j'        |d$         <   D ]U}|d         t          j/        k    r;|j'        |d$                  }7j'        |d$                  }tS                      }tU          |d%          }|+                    |           tS                      }tU          |d%          }|+                    |           |d(         }&|&dz   }'|j'        |'         d         d         }(|j'        |'         d         d         })|&dz
  t[          |j'                  dz
  z  dz   }*|j'        |*         d         d         }+|j'        |*         d         d         },|&dz   t[          |j'                  dz
  z  dz   }-|j'        |-         d         d         }.|j'        |-         d         d         }/ta          |( }(ta          |) })ta          |+ }+ta          |, },ta          |. }.ta          |/ }/tc          |(|+z
            tc          |.|+z
            z  }0tc          |)|,z
            tc          |/|,z
            z  }1|0|1z   dz  }2|+|2|.|+z
  z  z   }(|,|2|/|,z
  z  z   })|j'        |'         d         |(j2        |(j3        ff|j'        |'         d         dd          z   |j'        |'         d         f|j'        |'<   |j'        |'         d         |)j2        |)j3        ff|j'        |'         d         dd          z   |j'        |'         d         f|j'        |'<   tI                      }$t]          |$d          }|+                    |           tI                      }%t]          |%d          }|+                    |           |$j'        |_'        |%j'        |_'        WtI                      }3tI                      }4|j'        D ]!}5|3j'        4                    |5j'                   "7j'        D ]!}5|4j'        4                    |5j'                   "|3j+        |3_%        |4j+        |4_%        |3|<   |4|<   	 tC          ||          }|                     |dd)id |	|
t+          |                     n-# tj          $ r  |                     | j        |	|
           Y nw xY w|
| j        | j        z   z  }
n`| j        }6t          j6        |v r| j7        }6n+t          j8        |v r| j9        }6nt          j:        |v r| j;        }6|                     |6|	|
           |rN|                     ty          | j                  d| j=        | j        z
  | j        z
  | j        | j        d*           d S d S )+Nr   rU   c              3   &   K   | ]}|d          V  dS rU   Nr$   r9   r   s     r   	<genexpr>z1InterpolatablePlot.add_problem.<locals>.<genexpr>  &      DDGFODDDDDDr   c              3   $   K   | ]
}|k    V  d S r   r$   r9   ptr   s     r   r   z1InterpolatablePlot.add_problem.<locals>.<genexpr>  (      >>"2%>>>>>>r   z, c                     h | ]
}|d          S rU   r$   r   s     r   	<setcomp>z1InterpolatablePlot.add_problem.<locals>.<setcomp>  s    ,U,U,UWV_,U,U,Ur   zDrawing %s: %sr   )r   )r   r   c                 ,    g | ]}d          |         S )r   r$   )r9   rN   r   s     r   r;   z2InterpolatablePlot.add_problem.<locals>.<listcomp>  s!    >>>Q(1+a.>>>r   c              3   2   K   | ]\  }}|         |V  d S r   r$   )r9   imr   s      r   r   z1InterpolatablePlot.add_problem.<locals>.<genexpr>  s9          a1Y<;S;S;S;S;S   r   zGlyph name: T)rb   rc   r   r   rd   rJ   c              3   B   K   | ]}|                     d d          V  dS )r^   r   N)getr9   r   s     r   r   z1InterpolatablePlot.add_problem.<locals>.<genexpr>  s0      @@!k1--@@@@@@r   r   ztolerance: %.2fr<   )rb   rc   rF   r   rd   z
Problems: )rb   rc   rF   r   rd   r,   )rb   rc   r   rF   r   )rb   rc   c              3      K   | ]J}|t           j        t           j        t           j        t           j        t           j        t           j        fv V  Kd S r   )r   NOTHINGWRONG_START_POINTCONTOUR_ORDERKINKUNDERWEIGHT
OVERWEIGHTr9   r   s     r   r   z1InterpolatablePlot.add_problem.<locals>.<genexpr>  sf       
 
  %-%7%3%*%1%0
 
 
 
 
 
r   zmidway interpolationmidwayc                 h    g | ]/}|d          t           j        t           j        t           j        fv -|0S r   )r   r   r   r   r   s     r   r;   z2InterpolatablePlot.add_problem.<locals>.<listcomp>A  sP     	 	 	y-2-9-8    r   rb   rc   scalec              3   `   K   | ])}|t           j        t           j        t           j        fv V  *d S r   )r   r   r   r   r   s     r   r   z1InterpolatablePlot.add_problem.<locals>.<genexpr>S  sT       
 
  %7%3%*
 
 
 
 
 
r   zproposed fixglyphsetc                 *    g | ]}j         |         S r$   )rV   )r9   r   perContourPen2s     r   r;   z2InterpolatablePlot.add_problem.<locals>.<listcomp>u  s.     & & &45,Q/& & &r   value_2contourFreversedrV   fixed)rb   rc   rF   r   r   )>rU   listtuplerA   rZ   r   alljoinr   loginfor   MISSINGnext	enumerater?   insertrG   rr   
head_colorrK   minrF   rJ   r@   label_colorrH   r   
draw_glyphdraw_emoticonshrugrL   anyr   r   r   r   drawr   rV   r   r	   r   replayr   r   r   r   complexabsrealimagextend
ValueErrorr   underweightr   
overweightr   yayr   rI   )9r   r   r   r]   r   problem_typesmaster_keysmaster_indicessample_glyphrb   rc   r^   scaleswhichr   r  rg   	glyphset1	glyphset2midway_glyphsetoverriding1overriding2perContourPen1r   fixed_contourswrongContour1wrongContour2points1	converterpoints2proposed_startnew_points2reversedPen	beginPathendPathptssegment1segment2r   jpt0pt1j_prevpt0_prevpt1_prevj_nextpt0_nextpt1_nextr0r1r_midfixed1fixed2r  emoticonr  r   s9    ``                                                    @@r   r   zInterpolatablePlot.add_problem  s    >>$.. zH&/%:!"{6*DD8DDDDD>>>>>>>>> 	X99V,U,UH,U,U,U%V%VWWL!9l;;; x{** O1 	
 ?>>>+>>>0888        '77       L !!!\222HHY&/* 	 	
 	
 	
 @@x@@@@@	q==^=OO!I-j1tx</     	
T!DH,,<'*q48|+/ 	 	
 	
 	
 	
T^dhl**!*>!:!: 	? 	?E:~j1H:j)DOO&&     $(**A	".OOHi5AQROSS    ""4:a"888"T^3dh>>AA 
 
 $
 
 
 
 
 5	? 4++dh6AA%144A$(**A~a'89I~a'89I OO&o&     $(**A*9i@@OOO(#$	 	%	 	 	
 &kk#    ( "T^3dh>>A 
 
 $
 
 
 
 
 {	3 OOo&     $(**A(33K(33K5{  N 6{  N i %%n555i %%n555# : :6?&;&III& & & &9A!Y9O& & &N ,:N(# +M +M6?&;&MMM$2$89K$LM$2$89K$LM 011G 1'5 A AI!((333/11G 1'5 A AI!((333%,Y%7N z* Q&7&9&9&<[&I&I{333"-),W]););a)?.)P !(bqb 1I%mBCC0G!-"-Cnoo._n_1EEC$-Og$=GM  ,~~H 1(D A AINN9---+~~H 1(D A AINN9--- +3.M'*2.M'?LN();<?LN();<# A9 A96?&;&@@@$2$89K$LM$2$89K$LM 011G 1'5 A AI!((333/11G 1'5 A AI!((333(A AA!-*1-a0C!-*1-a0C!eGM(:(:Q(>?!CF&}V4Q7:H&}V4Q7:H!eGM(:(:Q(>?!CF&}V4Q7:H&}V4Q7:H!3-C!3-C&1H&1H&1H&1H S8^,,s8h3F/G/GGBS8^,,s8h3F/G/GGB"WME"Uh.A%BBC"Uh.A%BBC  a(+8SX.07=3CA3Fqrr3JJa(+(GM!$  a(+8SX.07=3CA3Fqrr3JJa(+(GM!$  ,~~H 1(D A AINN9---+~~H 1(D A AINN9--- +3.M'*2.M' "^^F!^^F)/ 3 3##GM2222)/ 3 3##GM2222 -FK -FK%+K	"%+K	"9".{K"H"H#W%f++        9 9 9""4:a"888889"TX--AA zH$0MAA+&1]BB?&.-??8x1222 	OOD$%%+.9jo      	 	s   0;l, ,'mmr   )r   r   r   F)rb   rc   r   r   rd   rF   rI   rJ   c                   || j         }|| j        }|	| j        }	t          j        | j                  }
|
                    dt          j        |rt          j        nt          j	                   |

                    |	           |
                                }|	|	z  |d         z  }	|

                    |	           |
                                } |
j        |  |
                    |          }|j         |k    rK|	||j         z  z  }	|

                    |	           |
                                }|
                    |          }|||j         z
  |z  z   }||d         z   }|
                    ||           |
                    |           d S )Nz@cairo:r<   r   )rF   rI   rJ   r   r   r   select_font_faceFONT_SLANT_NORMALFONT_WEIGHT_BOLDFONT_WEIGHT_NORMALset_font_sizefont_extentsr   text_extentsmove_to	show_text)r   labelrb   rc   r   r   rd   rF   rI   rJ   r   rV  extentslabel_xlabel_ys                  r   rr   zInterpolatablePlot.draw_label  s    =JE>[FI]4<((
#&*HE""0H	
 	
 	

 	###((	)LO;	
###((5!!//%((=5  ..IY'''??,,Looe,,G uw},55l1o%


7G$$$
Ur   r   c          	        "# t          |          t          t          fvr|g}t          d |D                       }|d         d         "t	          d |D                       #t          "fd#D                       sd"||         }	t                      }
|	                    |
           t          |          }|	                    |           t          |          }|
                    |           |j        }|d}|d         |d         z
  }|d	         |d
         z
  }|r%|| j        |z  }nt          || j        |z            }|r%|| j        |z  }nt          || j        |z            }|d
}t          j        | j                  }|                    ||           |                    | j        ||z  z
  dz  | j        ||z  z
  dz             |                    ||            |                    |d          |d	                     | j        rd |j        | j          |                    |d         |d
         ||           |                    | j        |z             |                                 | j        s| j        rt9          ||          }|
                    |           | j        r3"t:          j        k    r# |j        | j          |                                 | j        r@ |j        | j          |                    | j         |z             |!                                 |"                                 t:          j#        #v st:          j$        #v rtK          t          |          }|

                    |           |D ]{}|d         t:          j#        t:          j$        fv rY|j&        |d                  }|
                    t9          ||                      |j'        | j(          |)                                 |t          #fdt:          j*        t:          j+        t:          j,        hD                       rO|-                    t          j.                   |j&        D ]?\  }}|s|d         \  }}|/                    ||           |0                    ||           @ |j'        | j1          |                    | j2        |z             |                                 |j&        D ]D\  }}|s|d d         D ]1\  }}|/                    ||           |0                    ||           2E |j'        | j3          |                    | j4        |z             |                                 |j&        D ]\  }}|s|dv r |j/        |d           |dk    rC|D ]\  }}|0                    ||           |5                                  |j/        |d           f|dk    ri |j0        |d           |5                                  |j/        |d
            |j0        |d           |5                                  |j/        |d           Ռ |j'        | j6          |                    | j7        |z             |                                 d }|D ]}|d         t:          j8        k    r|d         }ts          | j:                  }tK          t          |          }|

                    |           tw          |j&                  D ]l\  }}||         |k    rty          |          }|
                    t9          ||                      |j'        g || j=        R   |)                                 m|D ]O}|d         t:          j*        t:          j>        fv r|?                    d          }||d
k    r d|v rtK          t          |          }|
                    |           t                      }t          |d          }|j&        ||n||                  
                    |           |j&        |d                  d         }|B                                  |j        |  |                    d
|z  d
|z             | C                    || jD        | jE                   |F                                 |dk    s|?                    d          s| jG        }n| jH        }d }d}|B                                 |j&        D ]Z\  }}|dk    r	|d         }||dk    r|} n|d         } |||k    r!|B                                 t          | }t          |  } t          | |z
            }!|                    |jK        |jL                   |!rv|M                    t          jO        | jL        |jL        z
  | jK        |jK        z
                       |                    d
|z  d
|z             | P                    ||           n9|                    d
|z  d
|z             | C                    || jD        |           |F                                 | n	d }|d
z  }\|F                                 |d         t:          jQ        k    r<|?                    d          }tK          t          |          }|
                    |           t                      }t          |d          }|j&        ||n||                  
                    |           |j&        |d                  d         }|B                                  |j        |  |                    d
|z  d
|z             |r)| R                    || jS        | jT        | jU                   n"| C                    || jV        | jW                   |F                                 Q|S )Nc              3   .   K   | ]}|d          dk    V  dS )rU   r   Nr$   r   s     r   r   z0InterpolatablePlot.draw_glyph.<locals>.<genexpr>M  s+      IIWWV_0IIIIIIr   r   rU   c              3   &   K   | ]}|d          V  dS r   r$   r   s     r   r   z0InterpolatablePlot.draw_glyph.<locals>.<genexpr>O  r   r   c              3   $   K   | ]
}|k    V  d S r   r$   r   s     r   r   z0InterpolatablePlot.draw_glyph.<locals>.<genexpr>P  r   r   mixed)r   r   r   r   r<   r=   r   r  r  c              3       K   | ]}|v V  	d S r   r$   )r9   tr'  s     r   r   z0InterpolatablePlot.draw_glyph.<locals>.<genexpr>  s<       
 
 
 
 
 
 
 
r   r	  )moveTolineToqCurveTocurveTor  F)r   r   r  re  	closePath)r   rV   )r   r   r   )XrU   r  r  r  r   r  r   r  r   r
   r  boundsrH   r  rL   r   r   r   	translater   border_colorr   r   r   border_widthstroker   r   r   r   	OPEN_PATHr   r   r   new_pathr   r   r   rV   r   r   r   r   
NODE_COUNTNODE_INCOMPATIBILITYset_line_capLINE_CAP_ROUNDrX  line_tooncurve_node_coloroncurve_node_diameteroffcurve_node_coloroffcurve_node_diameternew_sub_pathhandle_colorhandle_widthr   r   r   r  r  r   r   r   r   r   saver   r   r   restorer   r   r  r  r   r!  rotatemathatan2r   r   r   r   r   r   r   r   )$r   r  r   r   r,  rb   rc   r   r   r   	recordingdecomposedRecording	boundsPenrj  glyph_widthglyph_heightr   penperContourPenr   r  segmentargsmatchingcolorsr   r   idxpointsr7  targetPointfirst_pt	second_ptlengthr   r'  s$                                     @@r   r  zInterpolatablePlot.draw_glyphI  s   >>$.. zHIIIIIII{6*DD8DDDDD>>>>>>>>> 	#"L# NN	

95h??

&'''$X..	""9---!>!FQi&)+ay6!9, 	E}(;6E4#4|#CDD 	E})L8E4#4|#CDD=E]4<((
Q
e 33q8!55:	
 	
 	
 	
fQiZ&),,, 	Bt011LLF1I{LIIId/%7888IIKKK? 	d/ 	8R((C&&s+++ #<3H3R#R#R!!4?33  """  %!!4#455!!$"3e";<<<""$$$KKMMM "->>$/=@@4\HUUUM]+++#  6?)5)4'   ,1')2DEGNN8Hb#9#9:::&B&(GHHGGIII 
 
 
 
 &-%0%:
 
 
 
 
 7	 OOE0111 "5!: ! ! Bx1

1a   

1a    B 788d85@AAAIIKKK "5!: % %  "I % %DAqJJq!$$$JJq!$$$$% B 899d9EABBBIIKKK "5!:    444BJQ(((
** $ ) )1

1a((((OO%%%BJR)))	))BJQ((OO%%%BJQ((BJQ((OO%%%BJR)))B 122d/%7888IIKKK 	 	Gv"7"EEE"9-t233 8 8! ! !   ///"+M,?"@"@  JAw{a''  LLENN8Hb#9#9:::&B&BBt/ABBBBGGIIII o	 o	Gv%-%7#   kk),, ?uzzi76J6J$<$x% % %M (..}===466F 1&% @ @I!''/Xc]fY'''"(,wy/A"B1"EKGGIII BL+..HHQYE	222MM!%!@"> "   
 JJLLL A::W[[%<%<: 2EE 8E			%8%> ) )MGT(**#'7 ' +--$,		$(G	{a3hh			#*H#5$+Y$7	!$Y%9!:!:X]HMBBB! II $
$-NX]$B$-NX]$B!" !"   HHQYE	::: OOBeO<<<< HHQYE	::: MM ")-)H&+ *   
 

?!E#HFAA

v"7"<<<kk),, 8 8! ! ! $**=999022-fe<<	#8+;CC#OVV   %l77+;<Q?			k**UAI... $$!%!6%)%B"4	 %     MM!%!5"3 "   
 

r   
   )rb   rc   r   r   c                   |                                  |                    |           |                    t          j                   |                    ||           |                    ||           t          |          dk    r|dz   } |j        |  |	                                 |
                                 d S )Nr=   r   )r}  r   rs  r   rt  rX  ru  r   r   rn  r~  )r   r   rb   rc   r   r   s         r   r   zInterpolatablePlot.draw_dot[  s    
			
(###
,---


1a


1au::??DLEE""
		


r   )rb   rc   r   r   r   c                |   |                                  |                    |           |                    t          j                   |                    |||dz  ddt          j        z             t          |          dk    r|dz   } |j	        |  |
                                 |                                 d S )Nr<   r   r=   r  )r}  r   rs  r   LINE_CAP_SQUAREarcr  pir   r   rn  r~  )r   r   rb   rc   r   r   r   s          r   r   zInterpolatablePlot.draw_circleg  s     				
,'''
-...
q!X\1a$'k222u::??DLEE""
		


r   r   c                   |                                  t          |          dk    r|dz   } |j        |  |                    | j        |z   |           |                    dd           |                    | j         | j         dz             |                    | j         | j        dz             |                                 |                                 |	                                 d S )Nr=   r  r   r5   )
r}  r   r   rk  r   rX  ru  
close_pathr   r~  )r   r   rb   rc   r   s        r   r   zInterpolatablePlot.draw_arrowt  s    
			u::??DLEE""
T,q0!444


1a


$$$$s*	
 	
 	
 	

$$#c)	
 	
 	
 	
			


r   rb   rc   r   rF   rI   c                n   || j         }|| j        }|                                }t          j        | j                  } |j        |  |                    | j                   |	                    dt          j
        t          j                   d}d}	|                                }
|
d         }|
d         }|D ]1}|                    |          }t          ||j                  }|	|z  }	2|sd S |                    ||           t#          ||z  ||	z            }|                    |||z  z
  dz  ||	|z  z
  dz             |                    ||           |                    d|           |D ]C}|                    dd           |                    |           |                    d|           Dd S )Nz@cairo:monospacer   r<   )rF   rI   
splitlinesr   r   r   r   rU  rJ   rQ  rR  rT  rV  rW  max	x_advancerk  r  r   rX  rY  )r   textrb   rc   r   rF   rI   r   
text_widthtext_heightrV  font_font_sizefont_ascentliner[  r   s                   r   	draw_textzInterpolatablePlot.draw_text  s   =JE>[F  ]4<((5!!
(((
 79Q	
 	
 	
 
((%a"1o 	* 	*Dood++GZ):;;J>)KK 	F
QEJ&(<==
Z%''1,ve8K/Kq.P	
 	
 	
 	
Q$$$ 	, 	,DJJq!LLLLN++++	, 	,r   c           
      P   |                      | j        | j        | j        | j        | j        d| j        z  z
  dd| j                   |                     | j        | j        | j        | j        z   | j        d| j        z  z
  | j	        d| j        z  z
  | j        z
  | j
                   d S )Nr<   r,   T)rb   rc   r   rF   r   rd   rJ   )rb   rc   rF   rI   r   )rr   no_issues_labelrG   no_issues_label_colorrF   rK   r  cupcakerJ   rI   cupcake_colorrQ   s    r   draw_cupcakezInterpolatablePlot.draw_cupcake  s     hh,*q48|+* 	 		
 		
 		
 	Lhh'*q48|+;TX->$ 	 	
 	
 	
 	
 	
r   c                 Z    |                      |||| j        | j        | j                   d S )Nr  )r  emoticon_colorrH   rL   )r   rO  rb   rc   s       r   r  z InterpolatablePlot.draw_emoticon  sB    %"$ 	 	
 	
 	
 	
 	
r   r   )r   r   )@r!   r"   r#   rF   rI   rG   rK   rJ   rZ   r  r  rl  rm  r   r   r   rv  rw  rx  ry  r{  r|  r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r  r  r$  r%  r&  r   rR   rX   r[   r   r   r   r   r   r   r   r   rr   r  r   r   r   r  r  r  r$   r   r   r&   r&   '   s*       EF
COIK J!K"LL J"LL)*#LL"2!",&O% &WNM!/;O'!MG2 #NEK
J
 C
 
 
 
        (,ttD D D D DL -1DD F' F' F' F' F'P, , ,\  2I I IT T T 8<d  !  !  !  !  !F 6:DP P P P Pl
 
- - - - -^ EFRV P P P P Pd !"Qi" 
 
 
 
 
 AY!     #$q	     & $%$t $, $, $, $, $,L
 
 
*
 
 
 
 
 
r   r&   c                   $     e Zd Zd Z fdZ xZS )InterpolatablePostscriptLikec                 8    | j                                          d S r   )r   finishrT   s       r   rX   z%InterpolatablePostscriptLike.__exit__  s    r   c                 z    t                                                       | j                                         d S r   )superr[   r   r   	__class__s    r   r[   z&InterpolatablePostscriptLike.show_page  s3         r   )r!   r"   r#   rX   r[   __classcell__r  s   @r   r  r    sG          ! ! ! ! ! ! ! ! !r   r  c                       e Zd Zd ZdS )InterpolatablePSc                 Z    t          j        | j        | j        | j                  | _        | S r   )r   	PSSurfacer>   rF   rI   r   rQ   s    r   rR   zInterpolatablePS.__enter__  s"    txT[IIr   Nr!   r"   r#   rR   r$   r   r   r  r    s#            r   r  c                       e Zd Zd ZdS )InterpolatablePDFc                     t          j        | j        | j        | j                  | _        | j                            t           j        d           | j                            t           j        d           | S )Nzfonttools varLib.interpolatable )	r   
PDFSurfacer>   rF   rI   r   set_metadataPDF_METADATA_CREATORPDF_METADATA_CREATE_DATErQ   s    r   rR   zInterpolatablePDF.__enter__  sc    '$*dkJJ!!&(I	
 	
 	
 	!!%"@"EEEr   Nr  r$   r   r   r  r    s#            r   r  c                   *     e Zd Zd Zd Z fdZ xZS )InterpolatableSVGc                     t                      | _        t          j        | j        | j        | j                  | _        | S r   )r   sinkr   
SVGSurfacerF   rI   r   rQ   s    r   rR   zInterpolatableSVG.__enter__  s.    II	'	4:t{KKr   c                 @    | j         |                                  d S d S r   )r   r[   rT   s       r   rX   zInterpolatableSVG.__exit__  s(    <#NN $#r   c                 V   t                                                       | j                                         | j                            | j                                                   t                      | _        t          j
        | j        | j        | j                  | _        d S r   )r  r[   r   r  r>   r   r  getvaluer   r   r  rF   rI   r  s    r   r[   zInterpolatableSVG.show_page  sz    	**,,---II	'	4:t{KKr   )r!   r"   r#   rR   rX   r[   r  r  s   @r   r  r    s_          
  L L L L L L L L Lr   r  )'interpolatableHelpersfontTools.ttLibr   fontTools.ttLib.ttGlyphSetr   fontTools.pens.recordingPenr   r   r	   fontTools.pens.boundsPenr
   fontTools.pens.cairoPenr   fontTools.pens.pointPenr   r   r   &fontTools.varLib.interpolatableHelpersr   r   	itertoolsr   	functoolsr   ior   r   r  rt   logging	getLoggerr  dictr   r&   r  r  r  r  r$   r   r   <module>r     sq   $ $ $ $ " " " " " " 3 3 3 3 3 3         
 6 5 5 5 5 5 , , , , , ,         
                            				 g9::% % % % %T % % %c
 c
 c
 c
 c
 c
 c
 c
L%! ! ! ! !#5 ! ! !    3       4   L L L L L* L L L L Lr   