U
    ºmœdg  ã                   @   sd   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r`ddl	Z	ee	j
dd… ƒ 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	   úU/home/sam/Atlas/atlas_env/lib/python3.8/site-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| ||   | _}|| dkrÈtdƒ}	n|||  }	t|	ƒdkrä|	nd| _|dkrú|| ntdƒ}
t|
ƒdk�r|
nd| _d S )Né   g      à?r   ÚNaNgü©ñÒMbP?)Úarear   ÚmomentXr   ÚmomentYr   ÚmomentXXr   ÚmomentYYr   ÚmathÚcopysignÚabsr   r   ÚmomentXYr   Úfloatr   r   )r   r   r   r   r   r   r   r   r   r   r   r	   r	   r
   Z__update(   s"    
zStatisticsPen.__update)N)Ú__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 ]b}tƒ  td|ƒ | | }t| d�}|||d| ƒƒ}| |¡ dD ]}	td	|	t||	ƒf ƒ qlq&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glyphÚpenZtransformerÚitemr	   r	   r
   Ú_testJ   s    



r/   c                 C   sX   | sd S | d | dd …  }}ddl m} ||ƒ}|s>| ¡ }t| ¡ |d j|ƒ d S )Nr   é   )ÚTTFontÚhead)ZfontTools.ttLibr1   ZgetGlyphOrderr/   ZgetGlyphSetZ
unitsPerEm)ÚargsÚfilenamer,   r1   Zfontr	   r	   r
   Úmaink   s    r5   Ú__main__r0   )r&   r   ZfontTools.pens.momentsPenr   Ú__all__r   r/   r5   r#   ÚsysÚargvr	   r	   r	   r
   Ú<module>   s   A!