a
    —ÆàgP&  ã                   @   s¬   d Z ddlmZmZmZ ddlmZmZ ddlm	Z	 ddgZ
G dd„ dƒZG d	d„ dee	ƒZG d
d„ deeƒZdddœ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.é    )ÚsqrtÚdegreesÚatan)ÚBasePenÚOpenContourError)Ú
MomentsPenÚStatisticsPenÚStatisticsControlPenc                   @   s$   e Zd Zdd„ Zdd„ Zdd„ ZdS )ÚStatisticsBasec                 C   s   |   ¡  d S ©N)Ú_zero©Úself© r   úU/var/www/sistema_ama/venv/lib/python3.9/site-packages/fontTools/pens/statisticsPen.pyÚ__init__   s    zStatisticsBase.__init__c                 C   s@   d| _ d| _d| _d| _d| _d| _d| _d| _d| _d| _	d S )Nr   )
ÚareaÚmeanXÚmeanYÚ	varianceXÚ	varianceYÚstddevXÚstddevYÚ
covarianceÚcorrelationÚslantr   r   r   r   r      s    zStatisticsBase._zeroc                 C   sº   t | jƒ| _t | jƒ| _t| jƒ | _}t| jƒ | _}|| dkrNtdƒ}n| j||  }tdt	d|ƒƒ}t |ƒdkr||nd| _
| jdkr˜| j| j ntdƒ}t |ƒdkr°|nd| _d S )Nr   ÚNaNéÿÿÿÿé   gü©ñÒMbP?)Úabsr   r   r   r   r   Úfloatr   ÚmaxÚminr   r   )r   r   r   r   r   r   r   r   Ú_update   s    
ÿzStatisticsBase._updateN)Ú__name__Ú
__module__Ú__qualname__r   r   r#   r   r   r   r   r
      s   r
   c                   @   s*   e Zd ZdZd	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 if the glyph shape is self-intersecting, the values
    are not correct (but well-defined). Moreover, area will be
    negative if contour directions are clockwise.Nc                 C   s   t j| |d� t | ¡ d S )N©Úglyphset)r   r   r
   ©r   r(   r   r   r   r   @   s    zStatisticsPen.__init__c                 C   s   t  | ¡ |  ¡  d S r   )r   Ú
_closePathr#   r   r   r   r   r*   D   s    
zStatisticsPen._closePathc                 C   s€   | j }|s|  ¡  d S | j|  | _}| j|  | _}| j| ||  | _| j| ||  | _	| j
| ||  | _t | ¡ d S r   )r   r   ÚmomentXr   ÚmomentYr   ÚmomentXXr   ÚmomentYYr   ÚmomentXYr   r
   r#   )r   r   r   r   r   r   r   r#   H   s    zStatisticsPen._update)N)r$   r%   r&   Ú__doc__r   r*   r#   r   r   r   r   r   7   s   
c                   @   sR   e Zd ZdZddd„Zdd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ ZdS )r	   aZ  Pen calculating area, center of mass, variance and
    standard-deviation, covariance and correlation, and slant,
    of glyph shapes, using the control polygon only.

    Note that if the glyph shape is self-intersecting, the values
    are not correct (but well-defined). Moreover, area will be
    negative if contour directions are clockwise.Nc                 C   s    t  | |¡ t | ¡ g | _d S r   )r   r   r
   Ú_nodesr)   r   r   r   r   f   s    
zStatisticsControlPen.__init__c                 C   s   | j  t|Ž ¡ || _d S r   )r1   ÚappendÚcomplexÚ_startPoint©r   Úptr   r   r   Ú_moveTok   s    zStatisticsControlPen._moveToc                 C   s   | j  t|Ž ¡ d S r   ©r1   r2   r3   r5   r   r   r   Ú_lineToo   s    zStatisticsControlPen._lineToc                 C   s"   ||fD ]}| j  t|Ž ¡ qd S r   r8   )r   Úpt1Úpt2r6   r   r   r   Ú_qCurveToOner   s    z!StatisticsControlPen._qCurveToOnec                 C   s$   |||fD ]}| j  t|Ž ¡ q
d S r   r8   )r   r:   r;   Zpt3r6   r   r   r   Ú_curveToOnev   s    z StatisticsControlPen._curveToOnec                 C   s*   |   ¡ }|| jkr|  | j¡ |  ¡  d S r   )Ú_getCurrentPointr4   r9   r#   ©r   Úp0r   r   r   r*   z   s    
zStatisticsControlPen._closePathc                 C   s&   |   ¡ }|| jkrtdƒ‚|  ¡  d S )Nz.Glyph statistics not defined on open contours.)r>   r4   r   r#   r?   r   r   r   Ú_endPath€   s    
zStatisticsControlPen._endPathc           	      C   s0  | j }t|ƒ}tdd„ t||dd … |d d…  ƒD ƒƒd | _t|ƒ}|j|  | _}|j|  | _}|dk�rtdd„ |D ƒƒ|j|j |  |d   | _	}tdd„ |D ƒƒ|j|j |  |d   | _
}tdd„ |D ƒƒ|j|j |  |d   | _}nd | _	}d | _
}d | _}t | ¡ d S )	Nc                 s   s*   | ]"\}}|j |j |j |j  V  qd S r   ©ÚrealÚimag)Ú.0r@   Úp1r   r   r   Ú	<genexpr>Œ   s   ÿz/StatisticsControlPen._update.<locals>.<genexpr>r   é   c                 s   s   | ]}|j |j  V  qd S r   )rC   ©rE   Úpr   r   r   rG   �   ó    c                 s   s   | ]}|j |j  V  qd S r   )rD   rI   r   r   r   rG   ¡   rK   c                 s   s   | ]}|j |j V  qd S r   rB   rI   r   r   r   rG   §   rK   r   )r1   ÚlenÚsumÚzipr   rC   r   rD   r   r   r   r   r
   r#   )	r   ÚnodesÚnZsumNodesr   r   r   r   r   r   r   r   r#   †   s>    þüÿ

ÿý
ÿý
ÿý


zStatisticsControlPen._update)N)r$   r%   r&   r0   r   r7   r9   r<   r=   r*   rA   r#   r   r   r   r   r	   ]   s   
F)Úcontrolc                C   sœ  ddl m} ddlm} d}d}d}	d}
d}|D ]¾}| | }|rLt| d�}n
t| d�}|||d| ƒƒ}| |¡ t|jƒ}|j	}||7 }||j| 7 }|	|7 }	|
|j
7 }
||j
| 7 }|r¾q0tƒ  td|ƒ dD ]}td|t||ƒf ƒ qÒq0|�stƒ  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.transformPenrR   ZfontTools.misc.transformrS   r	   r   Zdrawr   r   Úwidthr   ÚprintÚgetattrrL   r   r   )r(   ZupemÚglyphsÚquietrQ   rR   rS   Zwght_sumZwght_sum_perceptualZwdth_sumZslnt_sumZslnt_sum_perceptualZ
glyph_nameZglyphZpenZtransformerr   rT   Úitemr   Zslant_perceptualr   r   r   Ú_test²   sN    




rZ   c                 C   sR  | du 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ddddd� | | ¡}|j}|jdurÀt|jƒnd}i }|j	 
¡ D ].}| 
d¡}	|	d  ¡ }
t|	d ƒ}|||
< qÒdd lm} ||j|d!�}|�s*| ¡ }t|j|d"�|d# j||j|jd$� dS )%z.Report font glyph shape geometricsl statisticsNr   r   zfonttools pens.statisticsPen)ÚdescriptionÚfontzfont.ttfz
Font file.)ÚmetavarÚhelprW   z
glyph-namezGlyph names.Ú*)r]   r^   Únargsz-yz<number>z1Face index into a collection to open. Zero based.z-cz	--controlÚ
store_truez4Use the control-box pen instead of the Green therem.)Úactionr^   z-qz--quietz!Only report font-wide statistics.z--variationszAXIS=LOCÚ z¼List 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.)r]   Údefaultr^   ú=)ÚTTFont)Ú
fontNumber)ÚlocationÚhead)rX   rQ   )ÚsysÚargvÚargparseÚArgumentParserÚadd_argumentÚ
parse_argsrW   ÚyÚintZ
variationsÚsplitÚstripZfontTools.ttLibrf   r\   ZgetGlyphOrderrZ   ZgetGlyphSetZ
unitsPerEmrX   rQ   )Úargsrj   rl   ÚparserÚoptionsrW   rg   rh   Ztag_vÚfieldsÚtagÚvrf   r\   r   r   r   Úmainô   sd    þýüÿü	



ûrz   Ú__main__Nr   )F)r0   Úmathr   r   r   ZfontTools.pens.basePenr   r   ZfontTools.pens.momentsPenr   Ú__all__r
   r   r	   rZ   rz   r$   rj   rk   r   r   r   r   Ú<module>   s   ,&UBA