
    hP&                         S r SSKJrJrJr  SSKJrJr  SSKJ	r	  SS/r
 " S S5      r " S	 S\\	5      r " S
 S\\5      rSSS.S jjrS r\S:X  a  SSKr\" \R$                  SS 5        gg)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                   &    \ rS rSrS rS rS rSrg)StatisticsBase   c                 $    U R                  5         g N)_zeroselfs    N/var/www/html/env/lib/python3.13/site-packages/fontTools/pens/statisticsPen.py__init__StatisticsBase.__init__   s    

    c                     SU l         SU l        SU l        SU l        SU l        SU l        SU l        SU l        SU l        SU l	        g )Nr   )
areameanXmeanY	varianceX	varianceYstddevXstddevY
covariancecorrelationslantr   s    r   r   StatisticsBase._zero   sI    	


r   c                 $   [        U R                  5      U l        [        U R                  5      U l        [        U R                  5      =U l        n[        U R                  5      =U l        nX-  S:X  a  [        S5      nO'U R                  X-  -  n[        S[        SU5      5      n[        U5      S:  a  UOSU l
        U R                  S:w  a  U R                  U R                  -  O
[        S5      n[        U5      S:  a  X@l        g SU l        g )Nr   NaN   gMbP?)absr   r   r   r   r   floatr   maxminr    r!   )r   r   r   r    r!   s        r   _updateStatisticsBase._update   s     T^^,T^^,!%dnn!55w!%dnn!55w !,K
 //W->?Kb#a"56K*-k*:T*A;q 15!0CDOOdnn,u 	 "%j4/U
Q
r   )
r   r    r   r   r   r!   r   r   r   r   N)__name__
__module____qualname____firstlineno__r   r   r+   __static_attributes__ r   r   r   r      s    
7r   r   c                   .    \ rS rSrSrSS jrS rS rSrg)	r	   7   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                 V    [         R                  " XS9  [        R                  U 5        g )Nglyphset)r   r   r   r   r7   s     r   r   StatisticsPen.__init__@   s    D4%r   c                 P    [         R                  " U 5        U R                  5         g r   )r   
_closePathr+   r   s    r   r;   StatisticsPen._closePathD   s    d#r   c                 d   U R                   nU(       d  U R                  5         g U R                  U-  =U l        nU R                  U-  =U l        nU R                  U-  X"-  -
  U l        U R                  U-  X3-  -
  U l	        U R                  U-  X#-  -
  U l        [        R                  U 5        g r   )r   r   momentXr   momentYr   momentXXr   momentYYr   momentXYr   r   r+   )r   r   r   r   s       r   r+   StatisticsPen._updateH   s    yyJJL "\\D00
U!\\D00
U -=-= --$.>t$r   )r   r   r   r   r   r   )	r-   r.   r/   r0   __doc__r   r;   r+   r1   r2   r   r   r	   r	   7   s    5&%r   c                   L    \ rS rSrSrSS jrS rS rS rS r	S	 r
S
 rS rSrg)r
   ]   aF  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                 h    [         R                  " X5        [        R                  U 5        / U l        g r   )r   r   r   _nodesr8   s     r   r   StatisticsControlPen.__init__f   s%    (%r   c                 R    U R                   R                  [        U6 5        Xl        g r   )rH   appendcomplex_startPointr   pts     r   _moveToStatisticsControlPen._moveTok   s    7B<(r   c                 F    U R                   R                  [        U6 5        g r   rH   rK   rL   rN   s     r   _lineToStatisticsControlPen._lineToo   s    7B<(r   c                 Z    X4 H$  nU R                   R                  [        U6 5        M&     g r   rS   )r   pt1pt2rO   s       r   _qCurveToOne!StatisticsControlPen._qCurveToOner   s$    *BKKw|, r   c                 \    XU4 H$  nU R                   R                  [        U6 5        M&     g r   rS   )r   rW   rX   pt3rO   s        r   _curveToOne StatisticsControlPen._curveToOnev   s&    S/BKKw|, "r   c                     U R                  5       nXR                  :w  a  U R                  U R                  5        U R                  5         g r   )_getCurrentPointrM   rT   r+   r   p0s     r   r;   StatisticsControlPen._closePathz   s7    ""$!!!LL))*r   c                 x    U R                  5       nXR                  :w  a  [        S5      eU R                  5         g )Nz.Glyph statistics not defined on open contours.)r`   rM   r   r+   ra   s     r   _endPathStatisticsControlPen._endPath   s1    ""$!!!"#STTr   c           
         U R                   n[        U5      n[        S [        XSS  US S -   5       5       5      S-  U l        [        U5      nUR
                  U-  =U l        nUR                  U-  =U l        nUS:  a  [        S U 5       5      UR
                  UR
                  -  U-  -
  US-
  -  =U l	        n[        S U 5       5      UR                  UR                  -  U-  -
  US-
  -  =U l
        n[        S U 5       5      UR
                  UR                  -  U-  -
  US-
  -  =U l        nOS=U l	        nS=U l
        nS=U l        n[        R                  U 5        g )Nc              3      #    U  H:  u  pUR                   UR                  -  UR                   UR                  -  -
  v   M<     g 7fr   realimag).0rb   p1s      r   	<genexpr>/StatisticsControlPen._update.<locals>.<genexpr>   s8      ?FB 277"RWWrww%66?s   AAr&      c              3   R   #    U  H  oR                   UR                   -  v   M     g 7fr   )rj   rl   ps     r   rn   ro           3UFFQVVOU   %'c              3   R   #    U  H  oR                   UR                   -  v   M     g 7fr   )rk   rr   s     r   rn   ro      rt   ru   c              3   R   #    U  H  oR                   UR                  -  v   M     g 7fr   ri   rr   s     r   rn   ro      rt   ru   r   )rH   lensumzipr   rj   r   rk   r   r   r   r   r   r+   )	r   nodesnsumNodesr   r   r   r   r   s	            r   r+   StatisticsControlPen._update   s   J  !%qrU2AY)>?  	 		 u:%]]Q..
U%]]Q..
Uq5 3U33==8==0A56Q* DNY
 3U33==8==0A56Q* DNY 3U33==8==0A56Q, DOj
 *+*DNY)**DNY+,,DOjt$r   )rH   rM   r   r   r   r   r   r   r   )r-   r.   r/   r0   rD   r   rP   rT   rY   r]   r;   re   r+   r1   r2   r   r   r
   r
   ]   s/    5
)--)%r   F)controlc          
         SSK Jn  SSKJn  SnSnSn	Sn
SnU H  nX   nU(       a
  [	        U S9nO	[        U S9nU" X" SU-  5      5      nUR                  U5        [        UR                  5      nUR                  nUU-  nXR                  U-  -  nU	U-  n	XR                  -  n
XR                  U-  -  nU(       a  M  [        5         [        SU5        S H  n[        SU[        UU5      4-  5        M     M     U(       d  [        5         [        S	5        [        S
Xq-  U	-  -  5        [        SX-  -  5        [        SX-  [        U5      -  -  5        U
[        U5      -  n[        SU-  5        [        S[        [        U5      5      * -  5        X-  n[        SU-  5        [        S[        [        U5      5      * -  5        g )Nr   )TransformPen)Scaler6   g      ?zglyph:)r   r>   r?   r@   rA   rB   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.transformPenr   fontTools.misc.transformr   r
   r	   drawr'   r   widthr!   printgetattrrx   r   r   )r7   upemglyphsquietr   r   r   wght_sumwght_sum_perceptualwdth_sumslnt_sumslnt_sum_perceptual
glyph_nameglyphpentransformerr   r   itemr!   slant_perceptuals                        r   _testr      s   8.HHH
$&9C2C"3cDj(9:

;388}Dxx%//EIIyy500h
#
D" (dGC$6778#
/ T g	,(/H4
56	
#':'E
FG	,(/CK7
89s6{"E	,
	
U 44
45*5	
#&6
67	
)WT:J5K-L,L
LMr   c                 2   U c  SSK nUR                  SS n SSKnUR                  SS S9nUR	                  SSSS	9  UR	                  S
SSSS9  UR	                  SSSS	9  UR	                  SSSSS9  UR	                  SSSSS9  UR	                  SSSSS9  UR                  U 5      nUR                  nUR                  b  [        UR                  5      OSn0 nUR                  R                  5        H9  nUR                  S5      n	U	S   R                  5       n
[        U	S   5      nXU
'   M;     SS KJn  U" UR                  US!9nU(       d  UR                  5       n[!        UR#                  US"9US#   R$                  UUR&                  UR(                  S$9  g)%z.Report font glyph shape geometricsl statisticsNr   r&   zfonttools pens.statisticsPen)descriptionfontzfont.ttfz
Font file.)metavarhelpr   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)r   r   )sysargvargparseArgumentParseradd_argument
parse_argsr   yint
variationssplitstripfontTools.ttLibr   r   getGlyphOrderr   getGlyphSet
unitsPerEmr   r   )argsr   r   parseroptionsr   r   r   tag_vfieldstagvr   r   s                 r   mainr      s    |xx|$$&D % F 
F
,^SVW
@  
 C	   i3V   L	   %G^^F#*99#8WYYaJH##))+S!Qiooq	N	 , '',,:6D##%	(+Vmmr   __main__Nr&   )F)rD   mathr   r   r   fontTools.pens.basePenr   r   fontTools.pens.momentsPenr   __all__r   r	   r
   r   r   r-   r   r   r2   r   r   <module>r      s   ; % $ < 02
3)7 )7X#%NJ #%LR%>7 R%j?N% ?ND>B z!" r   