
    <`              	       `   d dl mZ d dlmZ d dlmZ d dlZd dlZdZ	 ej
        dd          \  ZZZ ej
        d	d
          Z e ej
        de	dz   z  d                    Z e ej
        de	dz   z  d                    Z e ed dD                        Z e ej
        de	dz   z  d
                    ZdgZ ede	dz             D ]IZed         Z ed  e ee                    D                       dz   Ze                    e           J ed eD                       Z[[ ed  ee          D                       Z ed  ee          D                       Z ed  ee          D                       Zd Z  G d de!          Z" G d de          Z# ee#d          Z$ ee#e          Z% ee#e          Z& ee#eez            Z' ee#eez            Z( ee#eez            Z)ej*        fdZ+e,d k    r e$            Z-e-.                    d!           e-/                    d"           e-/                    d#           e-0                    d$d%d&           e-/                    d'           e-1                                  e2e-j3                   dS dS )(    )BasePen)partial)countN   zt x yTrealcFzx:%d   zy:%dc              #   \   K   | ]'}t          j        d t          dz   |fz  d          V  (dS )zp:%d[%s]r
   Tr   N)spsymbolsn).0ws     6lib/python3.11/site-packages/fontTools/misc/symfont.py	<genexpr>r      s>      HHa
:qs1g-D999HHHHHH    01zc:%d)r
   r   c              #   R   K   | ]"}t           |d z
           t           |         z   V  #dS r
   N)last)r   js     r   r   r      s3      ::Ad1Q3iQ::::::r   r   c              #   D   K   | ]}t          |d d                   V  d S )Nr   )tuple)r   items     r   r   r      s2      MME$ss),,MMMMMMr   c              #   n   K   | ]/\  }t          fd t          |          D                       V  0dS )c              3   Z   K   | ]%\  }}|t           |z  z  d t           z
  |z
  z  z  V  &dS r   )t)r   ir	   r   s      r   r   z<genexpr>.<genexpr>   s@      <<31Qq1a4x1Q3!A#,<<<<<<r   N)r   	enumerate)r   coeffsr   s     @r   r   r      s`       1 1Qv <<<<)F*;*;<<<<<1 1 1 1 1 1r   c              #   n   K   | ]/\  }t          fd t          d          D                       V  0dS )c              3   j   K   | ],t          fd t                    D                       V  -dS )c              3   J   K   | ]\  }}t           |                  |z  V  d S N)P)r   r!   	bernsteinr   s      r   r   z<genexpr>.<genexpr>.<genexpr>   s4      
F
F91Q479
F
F
F
F
F
Fr   Nsumr"   )r   r   
bernsteinss    @r   r   z<genexpr>.<genexpr>   s]         
F
F
F
F	*0E0E
F
F
FFF      r      N)r   ranger   r   r,   s     @r   r   r      ss       5 5 Qz     88    5 5 5 5 5 5r   c              #   h   K   | ]-\  }}t          d  t          |          D                       V  .dS )c              3   <   K   | ]\  }}t           |         |z  V  d S r'   )C)r   r!   r)   s      r   r   z<genexpr>.<genexpr>#   s.      ==)QqT)^======r   Nr*   r/   s      r   r   r   "   sY       5 5Qz ==y'<'<=====5 5 5 5 5 5r   c                 :   t          j        t          j        |           t                     } |                     t
          |d         t          |d         i          } t          j        | t          j        |d         t                    z  t          ddf          } | S )Nr   r
   )r   	integratesympifyysubsxdiffr    )fcurveXYs     r   greenr<   '   sq    l2:a==!$$$VVQwqz1WQZ())\!bggaj!,,,q!Qi88	r   c                       e Zd Zd Zd ZdS )_BezierFuncsLazyc                 "    || _         i | _        d S r'   )_symfunc	_bezfuncs)selfsymfuncs     r   __init__z_BezierFuncsLazy.__init__0   s    $-$...r   c                    d t          |dz             D             }t          | j        t          |                   }t	          j        |                    t          t          d                              }t	          j	        ||          S )Nc                     g | ]}d |z  S )zp%d )r   ds     r   
<listcomp>z0_BezierFuncsLazy.__missing__.<locals>.<listcomp>5   s    	&	&	&a%'	&	&	&r   r
   rG   )
r.   r<   r@   BezierCurver   	gcd_termscollectr+   r(   lambdify)rB   r!   argsr:   s       r   __missing__z_BezierFuncsLazy.__missing__4   si    	&	&51::	&	&	&$DM;q>**!l199S2YY''((!	T1		r   N)__name__
__module____qualname__rD   rO   rG   r   r   r>   r>   .   s2              r   r>   c                   T    e Zd Zi Zed             Zd
dZd Zd Zd Z	d Z
d Zd	 ZdS )GreenPenc                 z    t          |          }|| j        vrt          |          | j        |<   | j        |         S r'   )str_BezierFuncsr>   )celffuncfuncstrs      r   _getGreenBezierFuncszGreenPen._getGreenBezierFuncs>   s>    II'	D%	%	% 0 6 64W		7	##r   Nc                 r    t          j        | |           |                     |          | _        d| _        d S )Nr   )r   rD   r[   _funcsvalue)rB   rY   glyphsets      r   rD   zGreenPen.__init__E   s5    	4"""))$//$+$***r   c                     || _         d S r'   )_GreenPen__startPointrB   p0s     r   _moveTozGreenPen._moveToJ   s    $r   c                 |    |                                  }|| j        k    r|                     | j                   d S d S r'   )_getCurrentPointra   _lineTorb   s     r   
_closePathzGreenPen._closePathM   sD    "4<<!""""" r   c                 R    |                                  }|| j        k    rt          d S r'   )rf   ra   NotImplementedErrorrb   s     r   _endPathzGreenPen._endPathR   s/    "4	 r   c                 x    |                                  }| xj         | j        d         ||          z  c_        d S )Nr
   rf   r^   r]   )rB   p1rc   s      r   rg   zGreenPen._lineToX   s9    "**Ar2&&&****r   c                 z    |                                  }| xj         | j        d         |||          z  c_        d S )Nr-   rm   )rB   rn   p2rc   s       r   _qCurveToOnezGreenPen._qCurveToOne\   s;    "**Ar2r*******r   c                 |    |                                  }| xj         | j        d         ||||          z  c_        d S )Nr   rm   )rB   rn   rp   p3rc   s        r   _curveToOnezGreenPen._curveToOne`   s=    "**Ar2r2...****r   r'   )rP   rQ   rR   rW   classmethodr[   rD   rd   rh   rk   rg   rq   rt   rG   r   r   rT   rT   :   s        $ $ +$   
  # # #
  ' ' '+ + +/ / / / /r   rT   )rY   c           	        	
 t          d| z  |           |D ]\  }}t          d|z  |           t          dd|           dD ]$		dk    rt          d	|           n/	d
k    rt          d|           n	dk    rt          d|           d t          	dz             D             
	fd|D             }d |D             }
fd|D             }t          j        |dd t	                      D                       \  }}|D ]\  }}t          d|d||           t          |           t          d |D             |          D ]\  }}t          d|d||           &t          d| z  |           |D ]*\  }}t          d|dt          |          d|           +t          d|           d S )Nzfrom fontTools.pens.basePen import BasePen

class %s(BasePen):

	def __init__(self, glyphset=None):
		BasePen.__init__(self, glyphset)
)filez		self.%s = 0aN  
	def _moveTo(self, p0):
		self.__startPoint = p0

	def _closePath(self):
		p0 = self._getCurrentPoint()
		if p0 != self.__startPoint:
			self._lineTo(self.__startPoint)

	def _endPath(self):
		p0 = self._getCurrentPoint()
		if p0 != self.__startPoint:
			# Green theorem is not defined on open contours.
			raise NotImplementedError
 )endrw   )r
   r-   r   r
   zH
	def _lineTo(self, p1):
		x0,y0 = self._getCurrentPoint()
		x1,y1 = p1
r-   z^
	def _qCurveToOne(self, p1, p2):
		x0,y0 = self._getCurrentPoint()
		x1,y1 = p1
		x2,y2 = p2
r   zn
	def _curveToOne(self, p1, p2, p3):
		x0,y0 = self._getCurrentPoint()
		x1,y1 = p1
		x2,y2 = p2
		x3,y3 = p3
c                     i | ]@}t          d           D ].}t          |         |         t          t          g|         |         /AS )r-   )r.   r(   XY)r   r!   r   s      r   
<dictcomp>z!printGreenPen.<locals>.<dictcomp>   sA    	F	F	FAU1XX	F	F!A$q'Aq6!9Q<	F	F	F	Fr   c                 L    g | ] \  }}t          |t                             !S rG   )r<   rJ   )r   namer:   r   s      r   rI   z!printGreenPen.<locals>.<listcomp>   s+    999aE![^$$999r   c           
          g | ]<}t          j        |                    t          t          d                               =S )rG   )r   rK   rL   r+   r(   r   r:   s     r   rI   z!printGreenPen.<locals>.<listcomp>   s6    ???1BL3q99--..???r   c                 :    g | ]}|                               S rG   )r7   )r   r:   r7   s     r   rI   z!printGreenPen.<locals>.<listcomp>   s#    )))QAFF4LL)))r   basicc              3   D   K   | ]}t          j        d |z            V  dS )zr%dN)r   Symbol)r   r!   s     r   r   z printGreenPen.<locals>.<genexpr>   s0      66")E!G$$666666r   )optimizationsr   z		z = c                     g | ]
}|d          S r   rG   r   s     r   rI   z!printGreenPen.<locals>.<listcomp>   s    ---!1---r   z		self.z += zj
if __name__ == '__main__':
	from fontTools.misc.symfont import x, y, printGreenPen
	printGreenPen('%s', [z
		      ('z', z),z			     ]))printr.   r   cser   ziprV   )penNamefuncsrw   r   r:   greensdefsexprsr^   r   r7   s            @@r   printGreenPenr   o   s          + +VT!$T*****  
$      "7 "7Q!VV 
 	    
 	Avv 

      	Avv 
     
G	Fqs	F	F	F$99995999&?????&))))&)))&v66egg6668 8 8+$  1 1jd55ee	$400000T--u---u55 7 7jd55dddEE	*666667   "" )-. . . .  ; ;VT!%s1vvvv.T:::::{r   __main__)d   r   )r      )r   r   )r      ),  r   )r   i^  )r   r   )4fontTools.pens.basePenr   	functoolsr   	itertoolsr   sympyr   sysr   r   r    r8   r6   r	   r   r{   r|   r   r(   r2   BinomialCoefficientr.   r!   r   lenthisappendr"   BernsteinPolynomialrJ   BezierCurveCr<   dictr>   rT   AreaPen
MomentXPen
MomentYPenMomentXXPenMomentYYPenMomentXYPenstdoutr   rP   penmoveTolineTocurveTo	closePathr   r^   rG   r   r   <module>r      s"   * * * * * *                 




"*W4
(
(
(1aBJs	E*"*VQqS\
-
-
-..	E*"*VQqS\
-
-
-..	E##HH4HHH
IJJ	E*"*VQqS\
.
.
.// h 	q!A# " "AB::ss4yy)9)9:::::4?D!!!!eMM9LMMMMM $e 1 1.//1 1 1 1 1  e 5 5 Y2335 5 5 5 5 u 5 5Y2335 5 5 5 5

 
 

 
 
 
 
t 
 
 
(/ (/ (/ (/ (/w (/ (/ (/Z '(
#
#
#WXA&&&
WXA&&&
ghQqS)))ghQqS)))ghQqS))) (+z F F F FR zwyyIIIYy+++Isy r   