a
    èÝEb  ã                   @   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	   ú\/home/ja/django-apps/lartica_env/lib/python3.9/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| ||   | _}|||  }	t|	ƒdkrÎ|	nd| _|| }
t|
ƒdkrì|
nd| _d S )Né   g      à?gü©ñÒMbP?r   )Úarear   ÚmomentXr   ÚmomentYr   ÚmomentXXr   ÚmomentYYr   ÚmathÚ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.__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 ]p}tƒ  td|ƒ | | }t| d�}|||d| ƒƒ}| |¡ dD ](}	|	d d	kr~qlt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
   Ú_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ÚIÚslashÚEÚzeroÚeightÚminusÚequal)ÚTTFontÚhead)ZfontTools.ttLibr9   r.   ZgetGlyphSetZ
unitsPerEm)ÚargsÚfilenamer+   r9   Úfontr	   r	   r
   ÚmainX   s    r>   Ú__main__r/   )r$   r   ZfontTools.pens.momentsPenr   Ú__all__r   r.   r>   r!   ÚsysÚargvr	   r	   r	   r
   Ú<module>   s   >
