ó
    oñ:iÚj  ã                   ó  • S SK Jr  S SKJr  S SKJr  S SKJr  S SK	J
r
  S SKJrJr  S SKJr  S SKrS SKrS S	KJr  / S
Qr\R*                  " S5      r/ SQr/ SQr\" S \" SS5       5       5      r/ SQrSrS rS rS r S r!S r"S(S jr#S(S jr$S(S jr%S r&S r'S r(     S)S jr)      S*S jr*      S*S  jr+      S*S! jr,      S*S" jr-S# r.S$ r/      S+S% jr0S(S& jr1\2S':X  a  S SK3r3\3Rh                  " \1" 5       5        gg),é    )ÚnewTable)ÚAxis)ÚAreaPen)ÚNullPen)ÚStatisticsPen)ÚpiecewiseLinearMapÚnormalizeValue)ÚmakeOutputFileNameN)Úpformat)ÚplanWeightAxisÚplanWidthAxisÚplanSlantAxisÚplanOpticalSizeAxisÚplanAxisÚsanitizeWeightÚsanitizeWidthÚsanitizeSlantÚmeasureWeightÚmeasureWidthÚmeasureSlantÚnormalizeLinearÚnormalizeLogÚnormalizeDegreesÚinterpolateLinearÚinterpolateLogÚprocessAxisÚmakeDesignspaceSnippetÚaddEmptyAvarÚmainzfontTools.varLib.avar.plan)é2   éd   é–   éÈ   éú   i,  i^  i�  iÂ  iô  i&  iX  iŠ  i¼  iî  i   iR  i„  i¶  )g      9@g     ÀB@g      I@g     @O@g     ÀR@g     àU@g      Y@g      \@g     @_@g     0a@g     Àb@g     Pd@g     àe@g     pg@g      i@c              #   ó|   #   • U  H2  n[         R                  " [         R                  " US -  5      5      v •  M4     g7f)g      4@N)ÚmathÚdegreesÚatan)Ú.0Úds     Ú]/srv/projetos/modelo_ml_acdoc/venv/lib/python3.13/site-packages/fontTools/varLib/avar/plan.pyÚ	<genexpr>r,   M   s)   é € ÐHº°AŒd�lŠlœ4Ÿ9š9 Q¨¡XÓ.×/Ð/ºùs   ‚:<iìÿÿÿé   )é   é   é   é   é	   é
   é   é   é   é   é   é   é$   é0   é<   éH   é`   éx   é�   éÀ   éð   i   r1   c                 ó   • X-
  X!-
  -  $ )zOLinearly normalize value in [rangeMin, rangeMax] to [0, 1], with extrapolation.© )ÚvalueÚrangeMinÚrangeMaxs      r+   r   r   l   s   € àÑ Ñ!4Ñ5Ð5ó    c                 ó   • XX!-
  -  -   $ )zALinear interpolation between a and b, with t typically in [0, 1].rD   )ÚtÚaÚbs      r+   r   r   q   s   € à�A‘E‰{‰?ÐrH   c                 ó–   • [         R                  " U5      n[         R                  " U5      n[         R                  " U 5      U-
  XC-
  -  $ )zVLogarithmically normalize value in [rangeMin, rangeMax] to [0, 1], with extrapolation.)r&   Úlog)rE   rF   rG   ÚlogMinÚlogMaxs        r+   r   r   v   s8   € ä�XŠX�hÓ€FÜ�XŠX�hÓ€FÜ�HŠH�U‹O˜fÑ$¨©Ñ9Ð9rH   c                 ó”   • [         R                  " U5      n[         R                  " U5      n[         R                  " X0XC-
  -  -   5      $ )zFLogarithmic interpolation between a and b, with t typically in [0, 1].)r&   rN   Úexp)rJ   rK   rL   ÚlogAÚlogBs        r+   r   r   }   s5   € ä�8Š8�A‹;€DÜ�8Š8�A‹;€DÜ�8Š8�D ¡Ñ,Ñ,Ó-Ð-rH   c                 ó  • [         R                  " [         R                  " U5      5      n[         R                  " [         R                  " U5      5      n[         R                  " [         R                  " U 5      5      U-
  XC-
  -  $ )zPAngularly normalize value in [rangeMin, rangeMax] to [0, 1], with extrapolation.)r&   ÚtanÚradians)rE   rF   rG   ÚtanMinÚtanMaxs        r+   r   r   „   sT   € ä�XŠX”d—l’l 8Ó,Ó-€FÜ�XŠX”d—l’l 8Ó,Ó-€FÜ�HŠH”T—\’\ %Ó(Ó)¨FÑ2°v±ÑGÐGrH   c                 óV  • [        U[        5      (       a  UnOU Vs0 s H  o3S_M     nnS=pEU Hn  nUb  UR                  US5      nUS:X  a  M   OSnX   n[        U S9n	UR	                  U	5        UR
                  U-  n
XJ[        U	R                  5      -  -  nXZ-  nMp     XE-  $ s  snf )z:Measure the perceptual average weight of the given glyphs.é   r   ©Úglyphset)Ú
isinstanceÚdictÚgetr   ÚdrawÚwidthÚabsrE   )r]   ÚglyphsÚfrequenciesÚgÚwght_sumÚwdth_sumÚ
glyph_nameÚ	frequencyÚglyphÚpenÚmults              r+   r   r   ‹   sÀ   € ä�&œ$×ÑØ‰á%+Ó,¢V ˜!’t¡VˆÐ,àÐ€HÛˆ
ØÑ"Ø#Ÿ™¨
°AÓ6ˆIØ˜A‹~Ùð ð ˆIàÑ$ˆä˜xÑ(ˆØ�
‰
�3Œà�{‰{˜YÑ&ˆØœ3˜sŸy™y›>Ñ)Ñ)ˆØÑŠñ ð" ÑÐùò) -s   �B&c                 ó*  • [        U[        5      (       a  UnOU Vs0 s H  o3S_M     nnSnSnU HW  nUb  UR                  US5      nUS:X  a  M   OSnX   n[        5       n	UR	                  U	5        XHR
                  U-  -  nXW-  nMY     XE-  $ s  snf )z.Measure the average width of the given glyphs.r[   r   )r^   r_   r`   r   ra   rb   )
r]   rd   re   rf   rh   Úfreq_sumri   rj   rk   rl   s
             r+   r   r   §   s­   € ä�&œ$×ÑØ‰á%+Ó,¢V ˜!’t¡VˆÐ,à€HØ€HÛˆ
ØÑ"Ø#Ÿ™¨
°AÓ6ˆIØ˜A‹~Ùð ð ˆIàÑ$ˆä‹iˆØ�
‰
�3Œà—K‘K )Ñ+Ñ+ˆØÑŠñ ð  ÑÐùò) -s   �Bc                 ó˜  • [        U[        5      (       a  UnOU Vs0 s H  o3S_M     nnSnSnU He  nUb  UR                  US5      nUS:X  a  M   OSnX   n[        U S9n	UR	                  U	5        UR
                  U-  n
XJU	R                  -  -  nXZ-  nMg     [        R                  " [        R                  " XE-  5      5      * $ s  snf )z?Measure the perceptual average slant angle of the given glyphs.r[   r   r\   )
r^   r_   r`   r   ra   rb   Úslantr&   r'   r(   )r]   rd   re   rf   Úslnt_sumro   ri   rj   rk   rl   rm   s              r+   r   r   Ã   sÓ   € ä�&œ$×ÑØ‰á%+Ó,¢V ˜!’t¡VˆÐ,à€HØ€HÛˆ
ØÑ"Ø#Ÿ™¨
°AÓ6ˆIØ˜A‹~Ùð ð ˆIàÑ$ˆä XÑ.ˆØ�
‰
�3Œà�{‰{˜YÑ&ˆØ˜3Ÿ9™9Ñ$Ñ$ˆØÑŠñ ô" �LŠLœŸš 8Ñ#6Ó7Ó8Ð8Ð8ùò+ -s   �Cc                 ó°  • X1S      X1S      X1S      penU S   XE-  -  nU S   Xe-  -  n[         R                  " S/U Q76   [         R                  SUU S   U5        [        XpS   -
  5      U S   -  S:”  d  [        X€S   -
  5      U S   -  S:”  aH  [         R                  S5        [         R                  " S/U Q76   [         R                  S	UU S   U5        g
g)zSanitize the width axis limits.r   r[   é   z$Original width axis limits: %g:%g:%gz&Calculated width axis limits: %g:%g:%gçš™™™™™©?z6Calculated width axis min/max do not match user input.z%  Current width axis limits: %g:%g:%gz'  Suggested width axis limits: %g:%g:%gFT©rN   Úinforc   Úwarning)	Ú
userTripleÚdesignTripleÚpinsÚmeasurementsÚminValÚ
defaultValÚmaxValÚcalculatedMinValÚcalculatedMaxVals	            r+   r   r   à   s  € ð 	 !‘_Ñ%Ø !‘_Ñ%Ø !‘_Ñ%ð €Fð " !‘}¨Ñ(;Ñ<ÐØ! !‘}¨Ñ(;Ñ<Ðä‡H‚HÐ3ÐA°jÓAÜ‡H�HØ0ØØ�1‰Øô	ô 	Ð¨!™}Ñ,Ó-°
¸1±Ñ=ÀÓDÜÐ¨Q¡-Ñ/Ó0°:¸a±=Ñ@À4ÓGä�‰ÐLÔMÜ�ŠØ3ð	
àó	
ô 	�‰Ø5ØØ�q‰MØô		
ð àrH   c                 óp  • [        [        U 5      5      S:  a  gX1S      X1S      X1S      pen[        R                  " U5      n[        R                  " U5      n[        R                  " U5      n	U S   U S   -
  U S   U S   -
  -  n
[        R                  " XzX—-
  -  -   5      nX´-
  Xd-
  -  n
U S   X S   U S   -
  -  -   n[        R
                  " S/U Q76   [        R                  SU S   UU S   5        [        XÀS   -
  5      U S   -  S:”  Ga'  [        R                  S	5        [        R                  " S
/U Q76   [        R                  SU S   UU S   5        U S   U S   -
  U S   U S   -
  -  n
[        R                  " XzX‡-
  -  -   5      nX´-
  XT-
  -  n
U S   X S   U S   -
  -  -   n[        R                  SU S   U S   U5        U S   U S   -
  U S   U S   -
  -  n
[        R                  " XšX‰-
  -  -   5      nX¶-
  XV-
  -  n
U S   X S   U S   -
  -  -   n[        R                  SUU S   U S   5        gg)z Sanitize the weight axis limits.é   Tr   r[   rt   z%Original weight axis limits: %g:%g:%gz'Calculated weight axis limits: %g:%g:%gru   z9Calculated weight axis default does not match user input.z&  Current weight axis limits: %g:%g:%gz:  Suggested weight axis limits, changing default: %g:%g:%gz:  Suggested weight axis limits, changing maximum: %g:%g:%gz:  Suggested weight axis limits, changing minimum: %g:%g:%gF)ÚlenÚsetr&   rN   rR   rw   rc   rx   )ry   rz   r{   r|   r}   r~   r   rO   Ú
logDefaultrP   rJ   ÚyÚcalculatedDefaultValr�   r€   s                  r+   r   r   	  sŽ  € ô Œ3ˆz‹?Ó˜aÓØð 	 !‘_Ñ%Ø !‘_Ñ%Ø !‘_Ñ%ð €Fô �XŠX�fÓ€FÜ—’˜*Ó%€JÜ�XŠX�fÓ€Fà	�A‰˜ A™Ñ	&¨:°a©=¸:Àa¹=Ñ+HÑI€AÜ�Š�˜v™Ñ/Ñ/Ó0€AØ	
‰˜™Ñ(€AØ% a™=¨1¸1±À
È1ÁÑ0MÑ+NÑNÐä‡H‚HÐ4ÐB°zÓBÜ‡H�HØ1Ø�1‰ØØ�1‰ô	ô Ð¨Q¡-Ñ/Ó0°:¸a±=Ñ@À4ÔGÜ�‰ÐOÔPä�ŠØ4ð	
àó	
ô
 	�‰ØHØ�q‰MØ Ø�q‰Mô		
ð ˜‰]˜Z¨™]Ñ*¨z¸!©}¸zÈ!¹}Ñ/LÑMˆÜ�HŠH�V :Ñ#6Ñ7Ñ7Ó8ˆØ‰Z˜JÑ/Ñ0ˆØ% a™=¨1¸1±À
È1ÁÑ0MÑ+NÑNÐÜ�‰ØHØ�q‰MØ�q‰MØô		
ð ˜‰]˜Z¨™]Ñ*¨z¸!©}¸zÈ!¹}Ñ/LÑMˆÜ�HŠH�V :Ñ#6Ñ7Ñ7Ó8ˆØ‰Z˜JÑ/Ñ0ˆØ% a™=¨1¸1±À
È1ÁÑ0MÑ+NÑNÐÜ�‰ØHØØ�q‰MØ�q‰Mô		
ð àrH   c                 óÄ  • [         R                  " S/U Q76   [         R                  SX1S      X1S      X1S      5        [        X1S      U S   -
  5      S:”  d4  [        X1S      U S   -
  5      S:”  d  [        X1S      U S   -
  5      S:”  aT  [         R                  S5        [         R                  " S/U Q76   [         R                  SX1S      X1S      X1S      5        g	g
)zSanitize the slant axis limits.z$Original slant axis limits: %g:%g:%gz&Calculated slant axis limits: %g:%g:%gr   r[   rt   z>Calculated slant axis min/default/max do not match user input.z%  Current slant axis limits: %g:%g:%gz'  Suggested slant axis limits: %g:%g:%gFTrv   )ry   rz   r{   r|   s       r+   r   r   P  s÷   € ô ‡H‚HÐ3ÐA°jÓAÜ‡H�HØ0Ø !‘_Ñ%Ø !‘_Ñ%Ø !‘_Ñ%ô	ô 	ˆL a™Ñ)¨J°q©MÑ9Ó:¸QÓ>Üˆ|¨™OÑ,¨z¸!©}Ñ<Ó=ÀÓAÜˆ|¨™OÑ,¨z¸!©}Ñ<Ó=ÀÓAä�‰ÐTÔUÜ�ŠØ3ð	
àó	
ô 	�‰Ø5Ø a™Ñ)Ø a™Ñ)Ø a™Ñ)ô		
ð àrH   c           	      óš  • [        U[        5      (       a#  UR                  UR                  UR                  4nUu  pÍnUc  [
        nUc  U" 0 5      R                  5       nU
c  0 n
OU
R                  5       n
[        R                  SXÍU5        XÍU4nU	b  [        R                  " S/U	Q76   OUn	U
(       a-  [        R                  S[        U
R                  5       5      5        U
R                  XÉS   XÙS   XéS   05        0 n0 n0 n[        XÍU1[        U
R                  5       5      -  5       H  nU" UU0S9nU
U   nU " UU5      UU'   M     Ub   [        R                  S	U5        U" XùU
U5        [        R                  S
[        U5      5        [!        [#        [        U
R                  5       5      5      SS [#        [        U
R                  5       5      5      SS 5       GHà  u  u  nnu  nnU Vs1 s H  nUUs=:  a  U:  d  M  O  M  UiM     nnU(       d  M;  [%        UU5      n[%        UU5      n[%        UU	5      n[%        UU	5      n[        R                  S[        U5      5        [        R                  SUUU5        UR                  5       n ['        SUS-   5       HJ  n!UUU-
  U!-  US-   -  -   n[        R                  SU5        U" UU0S9n[)        UU
5      nU " UU5      U U'   ML     [        R                  S[        U 5      5        0 n"[        U 5       H  nUU"U U   '   M     UUU'   UUU'   [        U5       Hs  nU" UUU5      n#U" U#U U   U U   5      n$[)        U$U"5      n%[        R                  SUU%4-  5        U%UU'   UUU-
  UU-
  -  UU-
  -  -   n&UU%U-
  UU-
  -  UU-
  -  -   UU&'   Mu     UUU'   UUU'   GMã     [        R                  SU[        U5      5        [        R                  SU[        U5      5        [+        S UR                  5        5       5      (       a  [        R                  SU5        0 n0 nUU4$ s  snf )aÜ  Plan an axis.

measureFunc: callable that takes a glyphset and an optional
list of glyphnames, and returns the glyphset-wide measurement
to be used for the axis.

normalizeFunc: callable that takes a measurement and a minimum
and maximum, and normalizes the measurement into the range 0..1,
possibly extrapolating too.

interpolateFunc: callable that takes a normalized t value, and a
minimum and maximum, and returns the interpolated value,
possibly extrapolating too.

glyphSetFunc: callable that takes a variations "location" dictionary,
and returns a glyphset.

axisTag: the axis tag string.

axisLimits: a triple of minimum, default, and maximum values for
the axis. Or an `fvar` Axis object.

values: a list of output values to map for this axis.

samples: the number of samples to use when sampling. Default 8.

glyphs: a list of glyph names to use when sampling. Defaults to None,
which will process all glyphs.

designLimits: an optional triple of minimum, default, and maximum values
represenging the "design" limits for the axis. If not provided, the
axisLimits will be used.

pins: an optional dictionary of before/after mapping entries to pin in
the output.

sanitizeFunc: an optional callable to call to sanitize the axis limits.
Nz(Axis limits min %g / default %g / max %gz/Axis design-limits min %g / default %g / max %gzPins %sr   r[   rt   )Úlocationz/Sanitizing axis limit values for the `%s` axis.zCalculated average value:
%séÿÿÿÿzPlanning target values %s.z"Sampling %u points in range %g,%g.zSampling value %g.zSampled average value:
%szPlanned mapping value %g to %g.z%Planned mapping for the `%s` axis:
%sz0Planned normalized mapping for the `%s` axis:
%sc              3   óF   #   • U  H  u  p[        X-
  5      S :  v •  M     g7f)g{®Gáz„?N)rc   )r)   ÚkÚvs      r+   r,   ÚplanAxis.<locals>.<genexpr>  s   é € Ð
?Ò)>¡ Œ3ˆq‰u‹:˜ÖÒ)>ùs   ‚!z6Detected identity mapping for the `%s` axis. Dropping.)r^   ÚfvarAxisÚminValueÚdefaultValueÚmaxValueÚSAMPLESÚkeysÚcopyrN   rw   ÚsortedÚitemsÚupdater…   Údebugr   ÚzipÚlistr	   Úranger   Úall)'ÚmeasureFuncÚnormalizeFuncÚinterpolateFuncÚglyphSetFuncÚaxisTagÚ
axisLimitsÚvaluesÚsamplesrd   ÚdesignLimitsr{   ÚsanitizeFuncr’   r“   r”   ÚtripleÚoutÚoutNormalizedÚaxisMeasurementsrE   r]   ÚdesignValuerF   Ú	targetMinrG   Ú	targetMaxÚwÚtargetValuesÚnormalizedMinÚnormalizedMaxÚnormalizedTargetMinÚnormalizedTargetMaxÚvalueMeasurementsÚsampleÚmeasurementValuerJ   ÚtargetMeasurementÚtargetValueÚvalueNormalizeds'                                          r+   r   r   q  s�  € ôj �*œh×'Ñ'Ø ×)Ñ)¨:×+BÑ+BÀJ×DWÑDWÐXˆ
Ø'1Ñ$€H˜Hà�ÜˆØ�~Ù˜bÓ!×&Ñ&Ó(ˆØ�|Ø‰à�y‰y‹{ˆä‡H�HØ2°HÈHôð  hÐ/€FàÑÜ�ŠÐBÐRÀ\ÔRàˆæÜ�‰�œF 4§:¡:£<Ó0Ô1Ø‡K�Kà 1‘oØ q™/Ø 1‘oð	
ôð €CØ€MàÐÜ˜°Ð:¼SÀÇÁÃÓ=MÑMÖNˆÙ¨'°5Ð)9Ñ:ˆØ˜5‘kˆÙ(3°H¸fÓ(EÐ˜Ó%ñ Oð
 ÑÜ�‰ÐBÀGÔLÙ�V¨4Ð1AÔBä‡I�IÐ-¬wÐ7GÓ/HÔIä8;ÜŒV�D—J‘J“LÓ!Ó" 3 BÐ'ÜŒV�D—J‘J“LÓ!Ó" 1 2Ð&÷9Ñ4Ñˆ�9Ñ4 ¨)ñ $*ÓE¢6˜a¨X¸Õ-D¸HÑ-D›Ñ-D�¡6ˆÐEÞÙä& x°Ó8ˆÜ& x°Ó8ˆÜ,¨Y¸ÓEÐÜ,¨Y¸ÓEÐä�‰Ð-¬v°lÓ/CÔDÜ�‰Ð5°wÀÈ(ÔSØ,×1Ñ1Ó3ÐÜ˜A˜w¨™{Ö+ˆFØ ¨8Ñ 3°vÑ=ÀÈ1ÁÑMÑMˆEÜ�I‰IÐ*¨EÔ2Ù#¨g°uÐ-=Ñ>ˆHÜ,¨U°DÓ9ˆKÙ-8¸À6Ó-JÐ˜kÓ*ñ ,ô 	�	‰	Ð.´Ð8IÓ0JÔKàÐÜÐ-Ö.ˆEØ9>ÐÐ.¨uÑ5Ó6ñ /ð "ˆˆH‰Ø':ˆ�mÑ$Ü˜LÖ)ˆEÙ˜e X¨xÓ8ˆAÙ /ØÐ$ YÑ/Ð1BÀ9Ñ1Mó!Ðô -Ð->Ð@PÓQˆKÜ�I‰IÐ7¸5À+Ð:NÑNÔOØ$ˆC�‰JØ+¨u°xÑ/?Ø˜8Ñ#ñ/à Ñ.ñ/0ñ 0ˆOð .AØ˜iÑ'Ø˜YÑ&ñD(à+>ÐATÑ+TñDVñ .VˆM˜/Ó*ñ *ð "ˆˆH‰Ø':ˆ�mÔ$ñ[9ô^ ‡H�HÐ5°wÄÈÃÔMÜ‡H�HØ;ØÜ�Óôô Ñ
?¨×)<Ñ)<Ô)>Ó
?×?Ñ?Ü�‰ÐIÈ7ÔSØˆØˆà�ÐÐùòo Fs   Ç1QÈQÈ
Qc                 ór   • Uc  [         n[        [        [        [        U SUUUUUUU(       a  [
        S9$ SS9$ )zÿPlan a weight (`wght`) axis.

weights: A list of weight values to plan for. If None, the default
values are used.

This function simply calls planAxis with values=weights, and the appropriate
arguments. See documenation for planAxis for more information.
NÚwght©r¦   r§   rd   r¨   r{   r©   )ÚWEIGHTSr   r   r   r   r   )r£   r¥   Úweightsr§   rd   r¨   r{   Úsanitizes           r+   r   r     sP   € ð& �ÜˆäÜÜÜØØØØØØØ!ØÞ'/”^ñð ð 6:ñð rH   c                 ór   • Uc  [         n[        [        [        [        U SUUUUUUU(       a  [
        S9$ SS9$ )a	  Plan a width (`wdth`) axis.

widths: A list of width values (percentages) to plan for. If None, the default
values are used.

This function simply calls planAxis with values=widths, and the appropriate
arguments. See documenation for planAxis for more information.
NÚwdthr¿   )ÚWIDTHSr   r   r   r   r   )r£   r¥   Úwidthsr§   rd   r¨   r{   rÂ   s           r+   r   r   :  sP   € ð& �~ÜˆäÜÜÜØØØØØØØ!ØÞ&.”]ñð ð 59ñð rH   c                 ór   • Uc  [         n[        [        [        [        U SUUUUUUU(       a  [
        S9$ SS9$ )zøPlan a slant (`slnt`) axis.

slants: A list slant angles to plan for. If None, the default
values are used.

This function simply calls planAxis with values=slants, and the appropriate
arguments. See documenation for planAxis for more information.
NÚslntr¿   )ÚSLANTSr   r   r   r   r   )r£   r¥   Úslantsr§   rd   r¨   r{   rÂ   s           r+   r   r   `  sP   € ð& �~ÜˆäÜÜÜØØØØØØØ!ØÞ&.”]ñð ð 59ñð rH   c                 óR   • Uc  [         n[        [        [        [        U SUUUUUUS9$ )a  Plan a optical-size (`opsz`) axis.

sizes: A list of optical size values to plan for. If None, the default
values are used.

This function simply calls planAxis with values=sizes, and the appropriate
arguments. See documenation for planAxis for more information.
Úopsz)r¦   r§   rd   r¨   r{   )ÚSIZESr   r   r   r   )r£   r¥   Úsizesr§   rd   r¨   r{   rÂ   s           r+   r   r   †  s<   € ð& �}ÜˆäÜÜÜØØØØØØØ!Øñð rH   c                 ó˜   • SX4U-   -  nU(       a  US-  nOUS-  nUR                  5        H  u  pVUSXV4-  -  nM     U(       a  US-  nU$ )z-Make a designspace snippet for a single axis.zC    <axis tag="%s" name="%s" minimum="%g" default="%g" maximum="%g"z>
z/>z$      <map input="%g" output="%g"/>
z    </axis>)r™   )r¤   ÚaxisNameÚ	axisLimitÚmappingÚdesignspaceSnippetÚkeyrE   s          r+   r   r   «  ss   € ð 	NØÐ Ñ*ñ	,ð ö Ø˜eÑ#Ñà˜dÑ"Ðà—m‘m–o‰
ˆØÐEÈÈÑTÑTÒñ &ö Ø˜mÑ+ÐàÐrH   c                 ó‚   • [        S5      =U S'   nU S   R                   H  n0 UR                  UR                  '   M     g)z&Add an empty `avar` table to the font.ÚavarÚfvarN)r   ÚaxesÚsegmentsr¤   )ÚfontrÖ   Úaxiss      r+   r   r   À  s;   € ä" 6Ó*Ð*€Dˆ�L�4Ø�V‘×!Ô!ˆØ&(ˆ�‰�d—l‘lÓ#ò "rH   c                 ó6  • SnU S   R                    H  nUR                  U:X  d  M  Un  O   Uc  gUR                  UR                  UR                  4n[
        R                  SU5        SU ;   a%  U S   R                  U   n0 U S   R                  U'   OSnUb>  [        U[        5      (       a)  UR                  5        Vs/ s H  n[        U5      PM     nnUbk  [        U[        5      (       aV  UR                  S5       Vs/ s H  n[        U5      PM     nn[        U5      S:X  a  US   US	   s=::  a  US
   ::  d    e   eOSnUb\  [        U[        5      (       aG  0 nUR                  5        H.  nUR                  S5      u  nn[        U5      U[        U5      '   M0     UnAU" U R                  UUUUUUU	S9u  nnU
(       aN  SSKJn  UR!                  [#        U5      [#        U5       Vs/ s H  nUU   PM
     sn5        UR%                  5         Ub   [
        R                  SU['        U5      5        U(       a$  SU ;  a  [)        U 5        UU S   R                  U'   OSU ;   a  0 U S   R                  U'   [+        UUUU5      nU$ s  snf s  snf s  snf )zProcess a single axis.Nr×   Ú zPlanning %s axis.rÖ   Ú:rƒ   r   r[   rt   )r§   rd   r¨   r{   rÂ   )ÚpyplotzExisting %s mapping:
%s)rØ   r¤   r’   r“   r”   rN   rw   rÙ   r^   ÚstrÚsplitÚfloatr„   ÚgetGlyphSetÚ
matplotlibrß   Úplotr˜   Úshowr   r   r   )rÚ   ÚplanFuncr¤   rÐ   r¦   r§   rd   r¨   r{   rÂ   rå   r¥   rÛ   ÚexistingMappingr±   r*   ÚnewPinsÚpinÚbeforeÚafterrÒ   ÚmappingNormalizedrß   rŽ   rÓ   s                            r+   r   r   Ç  s§  € ð €JØ�V‘×!Ô!ˆØ�<‰<˜7Õ"ØˆJÙñ "ð ÑØØ×%Ñ% z×'>Ñ'>À
×@SÑ@SÐT€Jä‡H�HÐ  (Ô+à�ƒ~Ø˜v™,×/Ñ/°Ñ8ˆØ)+ˆˆV‰×Ñ˜gÒ&àˆàÑœj¨´×5Ñ5Ø$*§L¡L¤NÓ3¢N˜q”%˜–(¡NˆÐ3àÑ¤J¨|¼S×$AÑ$AØ*6×*<Ñ*<¸SÔ*AÓBÒ*A Qœ˜ažÑ*AˆÐBä�Ó Ó"Ø˜Q‘ <°¡?ÕE°lÀ1±oÔEð	
ðFØEð	
ðFØEð ˆàÑœJ t¬S×1Ñ1ØˆØ—:‘:–<ˆCØŸI™I c›N‰MˆF�EÜ%*¨5£\ˆG”E˜&“MÓ"ñ  ð ˆØá!)Ø×ÑØØØØØ!ØØñ	"Ñ€GÐö Ý%à�‰ÜÐ$Ó%Ü+1Ð2CÔ+DÓEÒ+D aÐ˜qÔ!Ñ+DÑEô	
ð 	�‰ŒàÑ"Ü�‰Ð+¨X´w¸Ó7OÔPæØ˜ÓÜ˜ÔØ):ˆˆV‰×Ñ˜gÒ&à�T‹>Ø-/ˆD�‰L×!Ñ! 'Ñ*ä/ØØØØó	Ðð Ðùòq 4ùò Cùò@ Fs   ÃJÄJÇ0J
c                 óÖ	  • U c  SSK nUR                  SS n SSKJn  SSKJn  SSKnUR                  SSS9nUR                  S	S
SS9  UR                  SS[        SS9  UR                  S[        SS9  UR                  S[        SS9  UR                  S[        SS9  UR                  S[        SS9  UR                  S[        SS9  UR                  SSSSS9  UR                  S S![        S"S9  UR                  S#[        S$S9  UR                  S%[        S&S9  UR                  S'[        S(S9  UR                  S)[        S*S9  UR                  S+[        S,S9  UR                  S-[        S.S9  UR                  S/[        S0S9  UR                  S1[        S2S9  UR                  S3S4SS5S9  UR                  S6S79nUR                  S8S9SS:S9  UR                  S;S<SS=S9  UR                  U 5      nU" UR                  (       a  S>OUR                  (       a  S?OS@SA9  U" UR                  5      nSBU;  a  [         R#                  SC5        gUR$                  bz  UR$                  R'                  5       n	SDUR$                  ;   aO  0 n	UR$                  R'                  5        H/  n
SDU
;   a"  U
R'                  SD5      u  p¼[)        U5      X›'   M+  SEXš'   M1     OSn	/ nUR+                  [-        U[.        SFSGUR0                  UR2                  U	UR4                  UR6                  UR8                  UR:                  SH95        UR+                  [-        U[<        SISJUR>                  UR2                  U	UR@                  URB                  UR8                  UR:                  SH95        UR+                  [-        U[D        SKSLURF                  UR2                  U	URH                  URJ                  UR8                  UR:                  SH95        UR+                  [-        U[L        SMSNURN                  UR2                  U	URP                  URR                  UR8                  UR:                  SH95        [         RU                  SO5        U H  nU(       d  M  [W        U5        M     URX                  c  [[        UR                  SPSQSR9nOURX                  nU(       a(  [         RU                  SSU5        UR]                  U5        gg)Tz3Plan the standard axis mappings for a variable fontNr   r[   )ÚconfigLogger)ÚTTFontzfonttools varLib.avar.planz#Plan `avar` table for variable font)ÚdescriptionrÚ   zvarfont.ttfzVariable-font file.)ÚmetavarÚhelpz-oz--output-filezOutput font file name.)Útyperó   z	--weightsz+Space-separate list of weights to generate.z--widthsz*Space-separate list of widths to generate.z--slantsz*Space-separate list of slants to generate.z--sizesz1Space-separate list of optical-sizes to generate.z	--sampleszNumber of samples.z-sz
--sanitizeÚ
store_truezSanitize axis limits)Úactionró   z-gz--glyphsz2Space-separate list of glyphs to use for sampling.z--weight-design-limitsz4min:default:max in design units for the `wght` axis.z--width-design-limitsz4min:default:max in design units for the `wdth` axis.z--slant-design-limitsz4min:default:max in design units for the `slnt` axis.z--optical-size-design-limitsz4min:default:max in design units for the `opsz` axis.z--weight-pinsz=Space-separate list of before:after pins for the `wght` axis.z--width-pinsz=Space-separate list of before:after pins for the `wdth` axis.z--slant-pinsz=Space-separate list of before:after pins for the `slnt` axis.z--optical-size-pinsz=Space-separate list of before:after pins for the `opsz` axis.z-pz--plotzPlot the resulting mapping.F)Úrequiredz-vz	--verbosezRun more verbosely.z-qz--quietzTurn verbosity off.ÚDEBUGÚWARNINGÚINFO)Úlevelr×   zNot a variable font.rÞ   g      ð?r¾   ÚWeight)r¦   r§   rd   r¨   r{   rÂ   rå   rÄ   ÚWidthrÈ   ÚSlantrÌ   ÚOpticalSizezDesignspace snippet:Tz.avar)Ú	overWriteÚsuffixz	Saving %s)/ÚsysÚargvÚ	fontToolsrï   ÚfontTools.ttLibrð   ÚargparseÚArgumentParserÚadd_argumentrà   ÚintÚadd_mutually_exclusive_groupÚ
parse_argsÚverboseÚquietrÚ   rN   Úerrorrd   rá   râ   Úappendr   r   rÁ   r§   Úweight_design_limitsÚweight_pinsrÂ   rå   r   rÆ   Úwidth_design_limitsÚ
width_pinsr   rÊ   Úslant_design_limitsÚ
slant_pinsr   rÎ   Úoptical_size_design_limitsÚoptical_size_pinsrw   ÚprintÚoutput_filer
   Úsave)Úargsr  rï   rð   r  ÚparserÚlogging_groupÚoptionsrÚ   rd   rf   rk   rj   ÚdesignspaceSnippetsÚsnippetÚoutfiles                   r+   r   r   #  s<  € ð �|Ûà�x‰x˜˜ˆ|ˆå&Ý&Ûà×$Ñ$Ø$Ø9ð %ð €Fð ×Ñ˜¨Ð<QÐÑRØ
×ÑØØÜØ%ð	 ñ ð ×ÑØœ#Ð$Qð ñ ð ×ÑØœÐ#Oð ñ ð ×ÑØœÐ#Oð ñ ð ×ÑØœÐ"Uð ñ ð ×Ñ˜¬#Ð4HÐÑIØ
×ÑØˆl <Ð6Lð ñ ð ×ÑØØÜØAð	 ñ ð ×ÑØ ÜØCð ñ ð
 ×ÑØÜØCð ñ ð
 ×ÑØÜØCð ñ ð
 ×ÑØ&ÜØCð ñ ð
 ×ÑØÜØLð ñ ð
 ×ÑØÜØLð ñ ð
 ×ÑØÜØLð ñ ð
 ×ÑØÜØLð ñ ð
 ×ÑØˆh˜|Ð2Oð ñ ð ×7Ñ7ÀÐ7ÐG€MØ×ÑØˆk ,Ð5Jð ñ ð ×ÑØˆi Ð3Hð ñ ð ×Ñ Ó%€GáØ!Ÿ/Ÿ/‰w¸G¿M¿M©yÈvòñ �'—,‘,Ó€DØ�T‹>Ü�	‰	Ð(Ô)Øà‡~�~Ñ!Ø—‘×%Ñ%Ó'ˆØ�'—.‘.Ó ØˆFØ—^‘^×)Ñ)Ö+�Ø˜!“8Ø'(§w¡w¨s£|Ñ$�EÜ$)¨)Ó$4�F“Mà #�F“Iñ ,øð ˆàÐà×ÑÜØÜØØØ—?‘?Ø—O‘OØØ ×5Ñ5Ø×$Ñ$Ø×%Ñ%Ø—‘ñ	
ôð ×ÑÜØÜØØØ—>‘>Ø—O‘OØØ ×4Ñ4Ø×#Ñ#Ø×%Ñ%Ø—‘ñ	
ôð ×ÑÜØÜØØØ—>‘>Ø—O‘OØØ ×4Ñ4Ø×#Ñ#Ø×%Ñ%Ø—‘ñ	
ôð ×ÑÜØÜØØØ—=‘=Ø—O‘OØØ ×;Ñ;Ø×*Ñ*Ø×%Ñ%Ø—‘ñ	
ôô  ‡H�HÐ#Ô$Û&ˆßˆ7Ü�'ŽNñ 'ð ×ÑÑ"Ü$ W§\¡\¸TÈ'ÑR‰à×%Ñ%ˆÞÜ�‰�˜gÔ&Ø�	‰	�'Õð rH   Ú__main__)N)NNNNN)NNNNNF)NNNNFF)5r  r   ÚfontTools.ttLib.tables._f_v_a_rr   r‘   ÚfontTools.pens.areaPenr   ÚfontTools.pens.basePenr   ÚfontTools.pens.statisticsPenr   ÚfontTools.varLib.modelsr   r	   ÚfontTools.misc.cliToolsr
   r&   ÚloggingÚpprintr   Ú__all__Ú	getLoggerrN   rÀ   rÅ   r�   rž   rÉ   rÍ   r•   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Ú__name__r  ÚexitrD   rH   r+   Ú<module>r/     sy  ðÝ $Ý <Ý *Ý *Ý 6ß FÝ 6Û Û Ý ò€ð. ×ÒÐ4Ó5€ò€ò,
€ñ$ 
ÑH¹¸sÀB¼ÓHÓ	H€ò	€ð4 €ò6ò
ò
:ò.òHôô8ô89ò:&òRDòNðR ØØØ	Øô`ðL ØØØØ	Øô#ðR ØØØØ	Øô#ðR ØØØØ	Øô#ðR ØØØØ	Øô"òJò*)ð ØØØ	ØØ	ôYôxCðL ˆzÓÛà‡H‚H‰T‹VÕð rH   