
    ]MhP&                         d Z ddlmZmZmZ ddlmZmZ ddlm	Z	 ddgZ
 G d d          Z G d	 dee	          Z G d
 dee          ZddddZd Zedk    rddlZ eej        dd                    dS dS )z~Pen calculating area, center of mass, variance and standard-deviation,
covariance and correlation, and slant, of glyph shapes.    )sqrtdegreesatan)BasePenOpenContourError)
MomentsPenStatisticsPenStatisticsControlPenc                        e Zd Zd Zd Zd ZdS )StatisticsBasec                 .    |                                   d S N)_zeroselfs    \/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/fontTools/pens/statisticsPen.py__init__zStatisticsBase.__init__   s    

    c                     d| _         d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _	        d S )Nr   )
areameanXmeanY	varianceX	varianceYstddevXstddevY
covariancecorrelationslantr   s    r   r   zStatisticsBase._zero   sM    	




r   c                     t          | j                  | _        t          | j                  | _        t          | j                  x| _        }t          | j                  x| _        }||z  dk    rt          d          }n+| j        ||z  z  }t          dt          d|                    }t          |          dk    r|nd| _
        | j        dk    r| j        | j        z  nt          d          }t          |          dk    r|nd| _        d S )Nr   NaN   gMbP?)absr   r   r   r   r   floatr   maxminr   r   )r   r   r   r   r   s        r   _updatezStatisticsBase._update   s    T^,,T^,,!%dn!5!55w!%dn!5!55w W!!,,KK
 /Ww->?Kb#a"5"566K*-k*:*:T*A*A;;q 15!0C0CDOdn,,u 	 "%jj4//UUQ


r   N)__name__
__module____qualname__r   r   r(    r   r   r   r      sA          
 
 
7 7 7 7 7r   r   c                   &    e Zd ZdZddZd Zd ZdS )r	   a:  Pen calculating area, center of mass, variance and
    standard-deviation, covariance and correlation, and slant,
    of glyph shapes.

    Note that if the glyph shape is self-intersecting, the values
    are not correct (but well-defined). Moreover, area will be
    negative if contour directions are clockwise.Nc                 f    t          j        | |           t                              |            d S )Nglyphset)r   r   r   r   r0   s     r   r   zStatisticsPen.__init__@   s2    D84444%%%%%r   c                 V    t          j        |            |                                  d S r   )r   
_closePathr(   r   s    r   r3   zStatisticsPen._closePathD   s$    d###r   c                 :   | j         }|s|                                  d S | j        |z  x| _        }| j        |z  x| _        }| j        |z  ||z  z
  | _        | j        |z  ||z  z
  | _	        | j
        |z  ||z  z
  | _        t                              |            d S r   )r   r   momentXr   momentYr   momentXXr   momentYYr   momentXYr   r   r(   )r   r   r   r   s       r   r(   zStatisticsPen._updateH   s    y 	JJLLLF "\D00
U!\D00
U -=-= -$.>t$$$$$r   r   )r)   r*   r+   __doc__r   r3   r(   r,   r   r   r	   r	   7   sP        5 5& & & &  % % % % %r   c                   D    e Zd ZdZddZd Zd Zd Zd Zd Z	d	 Z
d
 ZdS )r
   aZ  Pen calculating area, center of mass, variance and
    standard-deviation, covariance and correlation, and slant,
    of glyph shapes, using the control polygon only.

    Note that if the glyph shape is self-intersecting, the values
    are not correct (but well-defined). Moreover, area will be
    negative if contour directions are clockwise.Nc                 r    t          j        | |           t                              |            g | _        d S r   )r   r   r   _nodesr1   s     r   r   zStatisticsControlPen.__init__f   s4    x(((%%%r   c                 V    | j                             t          |            || _        d S r   )r=   appendcomplex_startPointr   pts     r   _moveTozStatisticsControlPen._moveTok   s*    7B<(((r   c                 H    | j                             t          |            d S r   r=   r?   r@   rB   s     r   _lineTozStatisticsControlPen._lineToo   s"    7B<(((((r   c                 V    ||fD ]#}| j                             t          |            $d S r   rF   )r   pt1pt2rC   s       r   _qCurveToOnez!StatisticsControlPen._qCurveToOner   s<    * 	- 	-BKw|,,,,	- 	-r   c                 X    |||fD ]#}| j                             t          |            $d S r   rF   )r   rI   rJ   pt3rC   s        r   _curveToOnez StatisticsControlPen._curveToOnev   s>    S/ 	- 	-BKw|,,,,	- 	-r   c                     |                                  }|| j        k    r|                     | j                   |                                  d S r   )_getCurrentPointrA   rG   r(   r   p0s     r   r3   zStatisticsControlPen._closePathz   sG    ""$$!!!LL)***r   c                     |                                  }|| j        k    rt          d          |                                  d S )Nz.Glyph statistics not defined on open contours.)rP   rA   r   r(   rQ   s     r   _endPathzStatisticsControlPen._endPath   sA    ""$$!!!"#STTTr   c           
         | j         }t          |          }t          d t          ||dd          |d d         z             D                       dz  | _        t          |          }|j        |z  x| _        }|j        |z  x| _        }|dk    rt          d |D                       |j        |j        z  |z  z
  |dz
  z  x| _	        }t          d |D                       |j        |j        z  |z  z
  |dz
  z  x| _
        }t          d |D                       |j        |j        z  |z  z
  |dz
  z  x| _        }ndx| _	        }dx| _
        }dx| _        }t                              |            d S )Nc              3   Z   K   | ]&\  }}|j         |j        z  |j         |j        z  z
  V  'd S r   realimag).0rR   p1s      r   	<genexpr>z/StatisticsControlPen._update.<locals>.<genexpr>   sQ        B 27"RWrw%66     r   r#      c              3   4   K   | ]}|j         |j         z  V  d S r   )rX   rZ   ps     r   r\   z/StatisticsControlPen._update.<locals>.<genexpr>   *      33AFQVO333333r   c              3   4   K   | ]}|j         |j         z  V  d S r   )rY   r_   s     r   r\   z/StatisticsControlPen._update.<locals>.<genexpr>   ra   r   c              3   4   K   | ]}|j         |j        z  V  d S r   rW   r_   s     r   r\   z/StatisticsControlPen._update.<locals>.<genexpr>   ra   r   r   )r=   lensumzipr   rX   r   rY   r   r   r   r   r   r(   )	r   nodesnsumNodesr   r   r   r   r   s	            r   r(   zStatisticsControlPen._update   s   JJ   !%qrrU2A2Y)>??     	 		 u::%]Q..
U%]Q..
Uq55 33U33333=8=0A56Q* DNY
 33U33333=8=0A56Q* DNY 33U33333=8=0A56Q, DOjj
 *+*DNY)**DNY+,,DOjt$$$$$r   r   )r)   r*   r+   r:   r   rD   rG   rK   rN   r3   rT   r(   r,   r   r   r
   r
   ]   s        5 5   
  ) ) )- - -- - -    )% )% )% )% )%r   F)controlc          
         ddl m} ddlm} d}d}d}	d}
d}|D ]}| |         }|rt	          |           }nt          |           } || |d|z                      }|                    |           t          |j                  }|j	        }||z  }||j        |z  z  }|	|z  }	|
|j
        z  }
||j
        |z  z  }|rt                       t          d|           dD ]$}t          d|t          ||          fz             %|st                       t          d	           t          d
||z  |	z  z             t          d||	z  z             t          d|	|z  t          |          z  z             |
t          |          z  }t          d|z             t          dt          t          |                     z             ||	z  }t          d|z             t          dt          t          |                     z             d S )Nr   )TransformPen)Scaler/   g      ?zglyph:)r   r5   r6   r7   r8   r9   r   r   r   r   r   r   r   r   r   z%s: %gzfont:z
weight: %gzweight (perceptual): %gz
width:  %gz
slant:  %gzslant angle:  %gzslant (perceptual):  %gzslant (perceptual) angle:  %g)fontTools.pens.transformPenrl   fontTools.misc.transformrm   r
   r	   drawr$   r   widthr   printgetattrrd   r   r   )r0   upemglyphsquietrj   rl   rm   wght_sumwght_sum_perceptualwdth_sumslnt_sumslnt_sum_perceptual
glyph_nameglyphpentransformerr   rq   itemr   slant_perceptuals                        r   _testr      sz   888888......HHH (9 (9
$ 	3&999CC222C"l3cDj(9(9::

;38}}Dsx%//ECIsy500 	h
###
 	9 	9D" (dGC$6$6778888#	9&  g	,(T/H4
5666	
#':X'E
FGGG	,(T/CKK7
8999s6{{"E	,
	
U 4 44
4555*X5	
#&6
6777	
)WT:J5K5K-L-L,L
LMMMMMr   c                    | ddl }|j        dd         } ddl}|                    dd           }|                    ddd	           |                    d
ddd           |                    ddd	           |                    dddd           |                    dddd           |                    dddd           |                    |           }|j        }|j        t          |j                  nd}i }|j	        
                                D ]K}|
                    d          }	|	d                                         }
t          |	d                   }|||
<   Ldd lm}  ||j        |!          }|s|                                }t!          |                    |"          |d#         j        ||j        |j        $           dS )%z.Report font glyph shape geometricsl statisticsNr   r#   zfonttools pens.statisticsPen)descriptionfontzfont.ttfz
Font file.)metavarhelpru   z
glyph-namezGlyph names.*)r   r   nargsz-yz<number>z1Face index into a collection to open. Zero based.z-cz	--control
store_truez4Use the control-box pen instead of the Green therem.)actionr   z-qz--quietz!Only report font-wide statistics.z--variationszAXIS=LOC zList of space separated locations. A location consist in the name of a variation axis, followed by '=' and a number. E.g.: wght=700 wdth=80. The default is the location of the base master.)r   defaultr   =)TTFont)
fontNumber)locationhead)rv   rj   )sysargvargparseArgumentParseradd_argument
parse_argsru   yint
variationssplitstripfontTools.ttLibr   r   getGlyphOrderr   getGlyphSet
unitsPerEmrv   rj   )argsr   r   parseroptionsru   r   r   tag_vfieldstagvr   r   s                 r   mainr      sO    |


x|OOO$$&D %  F 
FFF
,^SVWWW
@    
 C	     i3V     L	     %%G^F#*9#8WYaJH#))++  S!!Qiooq	NN&&&&&&6',:666D &##%%	(++Vm     r   __main__Nr#   )F)r:   mathr   r   r   fontTools.pens.basePenr   r   fontTools.pens.momentsPenr   __all__r   r	   r
   r   r   r)   r   r   r,   r   r   <module>r      sd  ; ; % $ $ $ $ $ $ $ $ $ < < < < < < < < 0 0 0 0 0 02
3)7 )7 )7 )7 )7 )7 )7 )7X#% #% #% #% #%NJ #% #% #%LR% R% R% R% R%>7 R% R% R%j?N% ?N ?N ?N ?N ?ND> > >B zJJJD!"" r   