
    <`                         d Z ddlZddlmZ dgZ G d de          Z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.    N)
MomentsPenStatisticsPenc                   ,    e Zd ZdZddZ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 all the calculated values are 'signed'. Ie. if the
	glyph shape is self-intersecting, the values are not correct
	(but well-defined). As such, area will be negative if contour
	directions are clockwise.  Moreover, variance might be negative
	if the shapes are self-intersecting in certain ways.Nc                 Z    t          j        | |           |                                  d S )Nglyphset)r   __init___StatisticsPen__zero)selfr   s     <lib/python3.11/site-packages/fontTools/pens/statisticsPen.pyr	   zStatisticsPen.__init__   s)    dX....++-----    c                 V    t          j        |            |                                  d S N)r   
_closePath_StatisticsPen__updater   s    r   r   zStatisticsPen._closePath   s$    --/////r   c                     d| _         d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        d S )Nr   )	meanXmeanY	varianceX	varianceYstddevXstddevY
covariancecorrelationslantr   s    r   __zerozStatisticsPen.__zero   sF    $*$*$.$.$,$,$/$$***r   c                 L   | j         }|s|                                  d S | j        |z  x| _        }| j        |z  x| _        }| j        |z  |dz  z
  x| _        }| j        |z  |dz  z
  x| _	        }t          j        t          |          dz  |          x| _        }t          j        t          |          dz  |          x| _        }| j        |z  ||z  z
  x| _        }|||z  z  }	t          |	          dk    r|	nd| _        ||z  }
t          |
          dk    r|
nd| _        d S )N   g      ?gMbP?r   )arear
   momentXr   momentYr   momentXXr   momentYYr   mathcopysignabsr   r   momentXYr   r   r   )r   r    r   r   r   r   r   r   r   r   r   s              r   __updatezStatisticsPen.__update(   sA   	$	 
;;===	6 |d**$*u|d**$*u  $}t3eQh>>$.9#}t3eQh>>$.9=Y);YGGG$,=Y);YGGG$, "&!5e!CC$/J g/0+$'$4$4t$;$;[[$
y
 %E

T))uuq$***r   r   )__name__
__module____qualname____doc__r	   r   r
   r    r   r   r   r   	   s_        9 9     	 	 	1 1 1 1 1r   c           
      v   ddl m} ddlm} t	          d|           |D ]}t	                       t	          d|           | |         }t          |           } || |d|z                      }|                    |           dD ]1}	|	d         d	k    rt	          d
|	t          ||	          fz             2d S )Nr   )TransformPen)Scaleupemzglyph:r   g      ?)r    r!   r"   r#   r$   r(   r   r   r   r   r   r   r   r   r   _z%s: %g)fontTools.pens.transformPenr0   fontTools.misc.transformr1   printr   drawgetattr)
r   r2   glyphsr0   r1   
glyph_nameglyphpentransformeritems
             r   _testr?   G   s    555555++++++vt 	1 	1Z'''*
:
%x(((#S%%4..11+**[ y 1 1d
1gnnh(dGC../
/00001	1 	1r   c                     | sd S | d         | dd          }}|sg d}ddl m}  ||          }t          |                                |d         j        |           d S )Nr      )	eoIslashEzeroeightminusequal)TTFonthead)fontTools.ttLibrK   r?   getGlyphSet
unitsPerEm)argsfilenamer9   rK   fonts        r   mainrS   X   s     	&GT!""X6 LKKK&######xt4<2F;;;;;r   __main__rA   )r-   r%   fontTools.pens.momentsPenr   __all__r   r?   rS   r*   sysargvr.   r   r   <module>rY      s   ; ;  0 0 0 0 0 0
;1 ;1 ;1 ;1 ;1J ;1 ;1 ;1|1 1 1"< < < zchqrrl r   