
    #Vf                         d Z ddlZddlmZ dgZ G d de      Zd
dZd Zedk(  rddl	Z	 ee	j                  d	d        yy)z~Pen calculating area, center of mass, variance and standard-deviation,
covariance and correlation, and slant, of glyph shapes.    N)
MomentsPenStatisticsPenc                   *    e Zd ZdZddZd Zd Zd Zy)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                 R    t        j                  | |       | j                          y )Nglyphset)r   __init___StatisticsPen__zero)selfr   s     e/var/www/html/software/conda/envs/catlas/lib/python3.12/site-packages/fontTools/pens/statisticsPen.pyr	   zStatisticsPen.__init__   s    D84    c                 N    t        j                  |        | j                          y N)r   
_closePath_StatisticsPen__updater   s    r   r   zStatisticsPen._closePath   s    d#r   c                     d| _         d| _        d| _        d| _        d| _        d| _        d| _        d| _        d| _        y )Nr   )	meanXmeanY	varianceX	varianceYstddevXstddevY
covariancecorrelationslantr   s    r   __zerozStatisticsPen.__zero   sB    


r   c                    | j                   }|s| j                          y | j                  |z  x| _        }| j                  |z  x| _        }| j                  |z  |dz  z
  x| _        }| j                  |z  |dz  z
  x| _	        }t        j                  t        |      dz  |      x| _        }t        j                  t        |      dz  |      x| _        }| j                  |z  ||z  z
  x| _        }||z  dk(  rt#        d      }	n|||z  z  }	t        |	      dkD  r|	nd| _        |dk7  r||z  n
t#        d      }
t        |
      dkD  r|
| _        y d| _        y )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   s              r   __updatezStatisticsPen.__update(   sO   yyKKM "\\D00
U!\\D00
U &*]]T%9E1H%DD%)]]T%9E1H%DD!%s9~/Di!PPw!%s9~/Di!PPw (,}}t';eem'KK* W!,K$'(9:K*-k*:T*A;q*3q.
Y&eEl!%j4/U
Q
r   r   )__name__
__module____qualname____doc__r	   r   r
   r    r   r   r   r   	   s    <	7r   c           
         ddl m} ddlm} d}d}d}d}	d}
|D ]  }| |   }t	        |       } || |d|z              }|j                  |       t        |j                        }|j                  }||z  }||j                  |z  z  }||z  }|	|j                  z  }	|
|j                  |z  z  }
|rt                t        d|       dD ]  }t        d|t        ||      fz           |st                t        d	       t        d
||z  |z  z         t        d||z  z         t        d||z  t        |      z  z         |	t        |      z  }t        d|z         t        dt        j                  t        j                  |             z         |
|z  }t        d|z         t        dt        j                  t        j                  |             z         y )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)fontTools.pens.transformPenr2   fontTools.misc.transformr3   r   drawr(   r!   widthr   printgetattrlenr&   degreesatan)r   upemglyphsquietr2   r3   wght_sumwght_sum_perceptualwdth_sumslnt_sumslnt_sum_perceptual
glyph_nameglyphpentransformerr!   r7   itemr   slant_perceptuals                       r   _testrK   I   s   8.HHH %9
$X."3cDj(9:

;388}Dsxx%//ECIIsyy500h
#
 	9D" (dGC$6778#	9)%9N g	,(T/H4
56	
#':X'E
FG	,(T/CK7
89s6{"E	,
	
TYYu-= >>
>?*X5	
#&6
67	
)T\\$))DT:U-V,V
VWr   c                    | ddl }|j                  dd } ddl}|j                  dd       }|j	                  ddd	       |j	                  d
ddd       |j	                  ddd	       |j	                  dddd       |j	                  dddd       |j                  |       }|j                  }|j                  t        |j                        nd}i }|j                  j                         D ]9  }|j                  d      }	|	d   j                         }
t        |	d         }|||
<   ; ddlm}  ||j                  |      }|s|j                         }t!        |j#                  |      |d    j$                  ||j&                  !       y)"z.Report font glyph shape geometricsl statisticsNr      zfonttools pens.statisticsPen)descriptionfontzfont.ttfz
Font file.)metavarhelpr>   z
glyph-namezGlyph names.*)rP   rQ   nargsz-yz<number>z1Face index into a collection to open. Zero based.z-qz--quiet
store_truez!Only report font-wide statistics.)actionrQ   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.)rP   defaultrQ   =)TTFont)
fontNumber)locationhead)r?   )sysargvargparseArgumentParseradd_argument
parse_argsr>   yint
variationssplitstripfontTools.ttLibrY   rO   getGlyphOrderrK   getGlyphSet
unitsPerEmr?   )argsr]   r_   parseroptionsr>   rZ   r[   tag_vfieldstagvrY   rO   s                 r   mainrs      s    |xx|$$&D % F 
F
,^SVW
@  
 i3V   L	   %G^^F#*99#8WYYaJH##))+ S!Qiooq	N	 '',,:6D##%	(+Vmm	r   __main__rM   )F)r/   r&   fontTools.pens.momentsPenr   __all__r   rK   rs   r,   r]   r^   r0   r   r   <module>rw      sV   ;  0
=7J =7@<X~7t z!" r   