o
    a                     @   sh   d Z ddlZddlmZ dgZG dd deZdd Zdd	 Zed
kr2d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                   @   s2   e Zd ZdZdddZdd Zdd Zd	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                 C   s   t j| |d |   d S )Nglyphset)r   __init___StatisticsPen__zero)selfr    r	   >/usr/lib/python3/dist-packages/fontTools/pens/statisticsPen.pyr      s   zStatisticsPen.__init__c                 C   s   t |  |   d S N)r   
_closePath_StatisticsPen__updater   r	   r	   r
   r      s   
zStatisticsPen._closePathc                 C   s:   d| _ d| _d| _d| _d| _d| _d| _d| _d| _d S )Nr   )	meanXmeanY	varianceX	varianceYstddevXstddevY
covariancecorrelationslantr   r	   r	   r
   Z__zero   s   
zStatisticsPen.__zeroc                 C   s   | j }|s|   d S | j|  | _}| j|  | _}| j| |d   | _}| j| |d   | _	}t
t|d | | _}t
t|d | | _}| j| ||   | _}|||  }	t|	dkrg|	nd| _|| }
t|
dkry|
| _d S d| _d S )N   g      ?gMbP?r   )arear   momentXr   momentYr   momentXXr   momentYYr   mathZcopysignabsr   r   momentXYr   r   r   )r   r   r   r   r   r   r   r   r   r   r   r	   r	   r
   Z__update(   s    zStatisticsPen.__updater   )__name__
__module____qualname____doc__r   r   r   r   r	   r	   r	   r
   r   	   s    

c           
      C   s   ddl m} ddlm} td| |D ]8}t  td| | | }t| d}|||d| }|| dD ]}	|	d d	kr?q6td
|	t||	f  q6qd 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)ZfontTools.pens.transformPenr%   ZfontTools.misc.transformr&   printr   Zdrawgetattr)
r   r'   glyphsr%   r&   Z
glyph_nameZglyphZpenZtransformeritemr	   r	   r
   _testG   s   



r-   c                 C   sX   | sd S | d | dd  }}|sg d}ddl m} ||}t| |d j| d S )Nr      )	eoIZslashEZzeroZeightZminusZequal)TTFonthead)ZfontTools.ttLibr3   r-   ZgetGlyphSetZ
unitsPerEm)argsfilenamer+   r3   Zfontr	   r	   r
   mainX   s   r7   __main__r.   )r$   r   ZfontTools.pens.momentsPenr   __all__r   r-   r7   r!   sysargvr	   r	   r	   r
   <module>   s    >
