U
    i2es                     @   sf   d Z ddlZddlmZ dgZG dd deZdddZd	d
 Zedkrbd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	   @/tmp/pip-unpacked-wheel-txsm8jh_/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rt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   NaNgMbP?)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
   

Fc                 C   s  ddl m} ddlm} d}d}d}d}	d}
|D ]}| | }t| d}|||d| }|| |t|j7 }|t|j|j 7 }||j7 }|	|j	7 }	|
|j	|j 7 }
|rq0t
  t
d| dD ]}t
d|t||f  qq0|st
  t
d	 t
d
|| |   t
d||   t
d|| t|   |	t| }t
d|  t
dtt|   |
| }t
d|  t
dtt|   d S )Nr   )TransformPen)Scaler   g      ?zglyph:)r   r   r   r   r   r!   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)ZfontTools.pens.transformPenr'   ZfontTools.misc.transformr(   r   Zdrawr    r   widthr   printgetattrlenr   degreesatan)r   Zupemglyphsquietr'   r(   Zwght_sumZwght_sum_perceptualZwdth_sumZslnt_sumZslnt_sum_perceptualZ
glyph_nameZglyphZpenZtransformeritemr   Zslant_perceptualr	   r	   r
   _testI   sF    




r2   c                 C   s<  | dkrddl }|jdd } ddl}|jdd d}|jdddd	 |jd
dddd |jdddd	 |jddddd |jddddd || }|j}|jdk	rt|jnd}i }|j	
 D ].}|
d}	|	d  }
t|	d }|||
< qddlm} ||j|d}|s| }t|j|d|d  j||jd! dS )"z.Report font glyph shape geometricsl statisticsNr      zfonttools pens.statisticsPen)descriptionfontzfont.ttfz
Font file.)metavarhelpr/   z
glyph-namezGlyph names.*)r6   r7   nargsz-yz<number>z1Face index into a collection to open. Zero based.z-qz--quiet
store_truez!Only report font-wide statistics.)actionr7   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.)r6   defaultr7   =)TTFont)
fontNumber)locationhead)r0   )sysargvargparseArgumentParseradd_argument
parse_argsr/   yintZ
variationssplitstripZfontTools.ttLibr?   r5   ZgetGlyphOrderr2   ZgetGlyphSetZ
unitsPerEmr0   )argsrC   rE   parseroptionsr/   r@   rA   Ztag_vfieldstagvr?   r5   r	   r	   r
   main   s\       	



rS   __main__r3   )F)r&   r   ZfontTools.pens.momentsPenr   __all__r   r2   rS   r#   rC   rD   r	   r	   r	   r
   <module>   s   @
=: