ó
    oñ:iº  ã                   ó0  • S r SSKJr  SSKJr  SSKJr  SSKJr  SS/r	 " S S	\
5      r\SS
4S jrS rS rS rSS jr\S:X  aQ  SSKr\" \R(                  5      S:X  a/  SSKr\R,                  " \R.                  " 5       R0                  5        \" 5         gg)aF  T2CharString glyph width optimizer.

CFF glyphs whose width equals the CFF Private dictionary's ``defaultWidthX``
value do not need to specify their width in their charstring, saving bytes.
This module determines the optimum ``defaultWidthX`` and ``nominalWidthX``
values for a font, when provided with a list of glyph widths.é    )ÚTTFont)Údefaultdict)Úadd)ÚreduceÚoptimizeWidthsÚmainc                   ó    • \ rS rSrS rS rSrg)Úmissingdicté   c                 ó   • Xl         g ©N©Úmissing_func)Úselfr   s     ÚY/srv/projetos/modelo_ml_acdoc/venv/lib/python3.13/site-packages/fontTools/cffLib/width.pyÚ__init__Úmissingdict.__init__   s   € Ø(Õó    c                 ó$   • U R                  U5      $ r   r   )r   Úvs     r   Ú__missing__Úmissingdict.__missing__   s   € Ø× Ñ  Ó#Ð#r   r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r   Ú__static_attributes__© r   r   r
   r
      s   † ò)õ$r   r
   Fc                 óB  ^^
^^• [        U R                  5       5      nUS   US   smm
[        XR                  5       T5      mU(       a  U
UU4S jn[	        T
TS-
  S5      nOUUU4S jn[	        TT
S-   5      n[        U5      nTnU H  n	U" X€U	   5      nX‡U	'   M     U$ )Nr   éÿÿÿÿc                 ó   >• U T:”  a  T$ T$ r   r   )ÚxÚmaxxÚstartÚtotals    €€€r   Ú<lambda>ÚcumSum.<locals>.<lambda>"   ó   ø€  Q¨£X˜EÐ8°5Ð8r   é   c                 ó   >• U T:  a  T$ T$ r   r   )r"   Úminxr$   r%   s    €€€r   r&   r'   %   r(   r   )ÚsortedÚkeysr   ÚvaluesÚranger
   )ÚfÚopr$   Ú
decreasingr-   ÚmissingÚdomainÚoutr   r"   r#   r+   r%   s     `       @@@r   ÚcumSumr6      s›   û€ Ü�!—&‘&“(Ó€DØ�a‘˜$˜r™(€J€Dˆ$ä�2—x‘x“z 5Ó)€EæÞ8ˆÜ�t˜T A™X rÓ*‰æ8ˆÜ�t˜T A™XÓ&ˆä
�gÓ
€Cà€AÛˆÙˆq�A‘$‹KˆØˆA‹ñ ð €Jr   c                 ó  • [        U S5      (       d&  [        [        5      nU  H  nX4==   S-  ss'   M     Un SnU R                  5        H;  u  pFXA:X  a  M  [	        XB-
  5      nUS::  a  XV-  nM%  US::  a	  XVS-  -  nM4  XVS-  -  nM=     U$ )NÚitemsr)   r   ék   ik  é   é   )Úhasattrr   Úintr8   Úabs)ÚwidthsÚdefaultÚnominalÚdÚwÚcostÚfreqÚdiffs           r   ÚbyteCostrG   2   s’   € Ü�6˜7×#Ñ#ÜœÓˆÛˆAØ‹D�A‰I�Dñ àˆà€DØ—<‘<–>‰ˆØ‹<ÙÜ�1‘;ÓˆØ�3‹;Ø‰LŠDØ�T‹\Ø˜1‘HÑŠDà˜1‘HÑŠDñ "ð €Kr   c                 ó°  ^ • [        [        5      nT  H  nX==   S-  ss'   M     S[        UR                  5       5      -  n[	        T 5      [        T 5      pT[        [        XES-   5      5      n[	        U 4S jU 5       5      n[        T 5      S-  S-   nU H:  n	[        T SU	5      Xƒ-   :”  a  M  U H  n
[        T X©5      nX¸:  d  M  UnU
nU	nM     M<     WW4$ )zSBruteforce version.  Veeeeeeeeeeeeeeeeery slow.  Only works for smallests of fonts.r)   r;   c              3   ó>   >#   • U  H  n[        TS U5      v •  M     g 7fr   ©rG   )Ú.0rA   r?   s     €r   Ú	<genexpr>Ú+optimizeWidthsBruteforce.<locals>.<genexpr>T   s   øé € Ð WÒPVÀW¤¨&°$¸×!@Ð!@ÒPVùs   ƒN)	r   r=   Úmaxr.   ÚminÚlistr/   ÚlenrG   )r?   rB   rC   ÚmaxDefaultAdvantageÚminwÚmaxwr4   ÚbestCostWithoutDefaultÚbestCostrA   r@   rD   ÚbestDefaultÚbestNominals   `             r   ÚoptimizeWidthsBruteforcerY   G   sÙ   ø€ ô 	”CÓ€AÛˆØ	‹�‰	�ñ ð œc !§(¡(£*›oÑ-Ðä�V“œc &›kˆ$Ü”%˜ Q™hÓ'Ó(€Fä Ô WÑPVÓ WÓWÐä�6‹{˜Q‰ Ñ"€HÛˆÜ�F˜D 'Ó*¨XÑ-KÓKÙÛˆGÜ˜F GÓ5ˆDØ�Ø�Ø%�Ø%’ó ñ ð ˜Ð#Ð#r   c                 ó<  ^ ^^^^^^^^^^^^• [        T S5      (       d&  [        [        5      nT  H  nX==   S-  ss'   M     Um [        T R	                  5       5      nUS   US   pT[        [        XES-   5      5      n[        T [        S9m[        T [        S9m[        T [        SS9m[        T [        SS9m[        U4S j5      m[        U4S	 j5      m[        UUU 4S
 j5      m[        U4S j5      m[        U4S j5      m[        UU4S j5      m[        UU4S j5      m[        UU4S jS9mTT   nTT   TT   -
  n/ n	UTT   :X  a_  TTS-
  TS-
  /n
U
 HM  nTU   (       a/  TU   TUS-
     :X  a   US-  nTU   (       a  TU   TUS-
     :X  a  M   U	R                  U5        MO     O^TTS-   TS-   /n
U
 HM  nTU   (       a/  TU   TUS-      :X  a   US-  nTU   (       a  TU   TUS-      :X  a  M   U	R                  U5        MO     [        U	UU 4S jS9nUT4$ )zËGiven a list of glyph widths, or dictionary mapping glyph width to number of
glyphs having that, returns a tuple of best CFF default and nominal glyph widths.

This algorithm is linear in UPEM+numGlyphs.r8   r)   r   r    )r1   T)r1   r2   c                 ó8   >• TU    TU S-
     -   TU S-
     S-  -   $ ©Nél   él  é   r   )r"   ÚcumFrqUs    €r   r&   Ú optimizeWidths.<locals>.<lambda>|   ó*   ø€ �'˜!‘*˜w q¨3¡wÑ/Ñ/°'¸!¸d¹(Ñ2CÀaÑ2GÒGr   c                 ó8   >• TU    TU S-      -   TU S-      S-  -   $ r\   r   )r"   ÚcumFrqDs    €r   r&   ra      rb   r   c                 ó&   >• TU    TU    -   TU    -
  $ r   r   )r"   Ú	nomnCostDÚ	nomnCostUr?   s    €€€r   r&   ra   �   s   ø€  Y¨q¡\°I¸a±LÑ%@À6È!Á9Ò%Lr   c                 óH   >• [        TU    TU S-
     S-  TU S-
     S-  5      $ ©Nr]   r:   r^   r;   ©rN   )r"   ÚcumMaxUs    €r   r&   ra   …   ó.   ø€ ”#�g˜a‘j '¨!¨c©'Ñ"2°QÑ"6¸ÀÀDÁÑ8IÈAÑ8MÔNr   c                 óH   >• [        TU    TU S-      S-  TU S-      S-  5      $ ri   rj   )r"   ÚcumMaxDs    €r   r&   ra   ˆ   rl   r   c                 ó(   >• [        TU    TU    5      $ r   rj   )r"   Ú	dfltCostDÚ	dfltCostUs    €€r   r&   ra   Š   s   ø€ ¤S¨°1©°yÀ±|Ô%Dr   c                 ó   >• TU    TU    -
  $ r   r   )r"   ÚdfltCostÚnomnCosts    €€r   r&   ra   �   s   ø€  X¨a¡[°8¸A±;Ò%>r   c                 ó   >• TU    $ r   r   )r"   rV   s    €r   r&   ra   �   s	   ø€ ¨°ªr   )Úkeyr]   r^   c                 ó   >• [        TU T5      $ r   rJ   )r@   rA   r?   s    €€r   r&   ra   ¢   s   ø€ ¬H°V¸WÀgÔ,Nr   )r<   r   r=   r,   r-   rP   r/   r6   r   rN   r
   rO   Úappend)r?   rB   rC   r-   rS   rT   r4   ÚbestCÚdfltCÚendsÚstartsr$   r@   rV   rd   r`   rn   rk   rs   rp   rq   rA   rt   rf   rg   s   `            @@@@@@@@@@@@r   r   r   d   s5  ÿü€ ô �6˜7×#Ñ#ÜœÓˆÛˆAØ‹D�A‰I�Dñ àˆä�&—+‘+“-Ó €DØ�a‘˜$˜r™(ˆ$Ü”%˜ Q™hÓ'Ó(€Fô �V¤Ñ$€GÜ�V¤Ñ$€GÜ�V¤°Ñ5€GÜ�V¤°Ñ5€Gô ÜGó€Iô ÜGó€Iô ÖLÓM€Hô ÜNó€Iô ÜNó€Iô ÕDÓE€Hô Õ>Ó?€Hô �&Ô3Ñ4€Gð �WÑ€EØ�WÑ ¨Ñ 1Ñ1€EØ€DØ�	˜'Ñ"Ó"Ø˜7 S™=¨'°D©.Ð9ˆÛˆEØ˜%—. W¨U¡^°w¸uÀq¹yÑ7IÓ%IØ˜‘
�ð ˜%—. W¨U¡^°w¸uÀq¹yÑ7IÕ%Ià�K‰K˜Öò ð
 ˜7 S™=¨'°D©.Ð9ˆÛˆEØ˜%—. W¨U¡^°w¸uÀq¹yÑ7IÓ%IØ˜‘
�ð ˜%—. W¨U¡^°w¸uÀq¹yÑ7IÕ%Ià�K‰K˜Öñ ô �$ÕNÑO€Gà�GÐÐr   Nc                 ó  • SSK nUR                  S[        R                  S9nUR	                  SS[
        SSS	9  UR	                  S
SSSSS9  UR                  U 5      n U R                   H�  n[        U5      nUS   nUR                  R                  5        Vs/ s H  ofS   PM	     nnU R                  (       a  [        U5      u  p‰O[        U5      u  p‰[        S[        U5      X‰[!        XxU	5      4-  5        M‘     gs  snf )z4Calculate optimum defaultWidthX/nominalWidthX valuesr   Nzfonttools cffLib.width)ÚdescriptionÚinputsÚFILEÚ+zInput TTF files)ÚmetavarÚtypeÚnargsÚhelpz-bz--brute-forceÚbruteÚ
store_truez$Use brute-force approach (VERY slow))ÚdestÚactionr…   Úhmtxz+glyphs=%d default=%d nominal=%d byteCost=%d)ÚargparseÚArgumentParserr   Ú__doc__Úadd_argumentÚstrÚ
parse_argsr   r   Úmetricsr.   r†   rY   r   ÚprintrQ   rG   )
Úargsr‹   ÚparserÚfontfileÚfontrŠ   Úmr?   r@   rA   s
             r   r   r   §   s  € ó à×$Ñ$Ø Ü—L‘Lð %ð €Fð ×ÑØ˜&¤s°#Ð<Mð ñ ð ×ÑØØØØØ3ð ñ ð ×Ñ˜TÓ"€Dà—K”KˆÜ�hÓˆØ�F‰|ˆØ $§¡× 3Ñ 3Ô 5Ó6Ò 5˜1�A”$Ñ 5ˆÐ6Ø�:�:Ü7¸Ó?ÑˆG�Wä-¨fÓ5ÑˆGÜØ9Ü�6‹{˜G¬h°vÈÓ.PÐQñRö	
ò  ùò 7s   ÂC>Ú__main__r)   r   )r�   ÚfontTools.ttLibr   Úcollectionsr   Úoperatorr   Ú	functoolsr   Ú__all__Údictr
   r6   rG   rY   r   r   r   ÚsysrQ   ÚargvÚdoctestÚexitÚtestmodÚfailedr   r   r   Ú<module>r¥      s™   ðñAõ #Ý #Ý Ý ð ˜VÐ
$€ô$�$ô $ð ˜A¨%ô ò.ò*$ò:@ôF!
ðH ˆzÓÛá
ˆ3�8‰8ƒ}˜ÓÛà�Š�—’Ó"×)Ñ)Ô*Ù…Fð r   