+
    f7iE  c                   sP   ^ RI t ^ RIt^ RIHtHt ^ RIHt ^ RIHtH	t	 ^ RI
Ht ^ RIHt ^ RIHtHtHtHtHtHt ^ RIHt ^ R	IHtHt ^ R
IHt ^ RIHtHt ] P>                  ! ] 4      t!]]  R2,          t"Rt#]$! ]"PJ                  4      t&R R lt'R R lt(R R lt)R R lt*R R lt+R R lt,R R lt-]]]]$R3,          ]]$R3,          3,          ]]P\                  ]P\                  3,          3,          t/R R lt0R&R R  llt1]! R!. R'O4      t2] ! R" R#4      4       t3R(R$ R% llt4R# ))    N)defaultdict
namedtuple)	dataclass)cached_propertyreduce)chain)log2)DefaultDictDictIterableListSequenceTuple)OPTIONS)	bit_countbit_indices)TTFont)otBaseotTablesz:COMPRESSION_LEVELZFONTTOOLS_GPOS_COMPACT_MODEc                s$    V ^8  d   QhR\         /# )   return)intformat   "E/usr/lib64/python3.14/site-packages/fontTools/otlLib/optimize/gpos.py__annotate__r      s     E ES E    c                  s(   \         p \        \        P                  9   d>   ^ RIpVP                  R\         R2\        4       \        P                  \        ,          p \        V 4      ^8X  d   V R9   d   \        V 4      # \        R\         RV  24      h)r    NZ'z}' environment variable is deprecated. Please set the 'fontTools.otlLib.optimize.gpos:COMPRESSION_LEVEL' option in TTFont.cfg.Z
0123456789zBad Z=)
GPOS_COMPACT_MODE_DEFAULTGPOS_COMPACT_MODE_ENV_KEYosZenvironwarningsZwarnZDeprecationWarninglenr   Z
ValueError)Z	env_levelr    s     r   _compression_level_from_envr"      s    )I BJJ.)* +  		
 JJ89	
9~yL89~
t56a	{C
DDr   c                s<    V ^8  d   QhR\         R\        R\         /# )r   fontlevelr   )r   r   r   r   r   r   r   +   s!      &   r   c                 sF   V P                  R 4      pVf   V # VP                  P                  P                   Fe  pVP                  ^8X  d   \        WV4       K"  VP                  ^	8X  g   K5  VP                  ^ ,          P                  ^8X  g   KY  \        WV4       Kg  	  V # )ZGPOS)	getZtableZ
LookupListLookupZ
LookupTypecompact_lookupSubTableZExtensionLookupTypecompact_ext_lookup)r#   r$   Zgposlookups   &&  r   compactr+   +   s     88FD |**''..!4/!#(:(N(NRS(StF3	 / Kr   c                T    V ^8  d   QhR\         R\        R\        P                  RR/# r   r#   r$   r*   r   Nr   r   r   r&   r   r   r   r   r   H   s,     . . . .X__ . .r   c                 s^    \        WVP                  4      pW2n        \        V4      Vn        R # N)compact_pair_posr(   r!   SubTableCount)r#   r$   r*   new_subtabless   &&& r   r'   r'   H   s$    $T&//BM#O}-Fr   c                r,   r-   r.   r   r   r   r   r   N   s,     2 2V 2C 2 2T 2r   c                 s   \        YVP                   Uu. uF  q3P                  NK  	  up4      p. pV F6  p\        P                  ! 4       p^Vn        Wcn        VP                  V4       K8  	  WRn        \        V4      Vn        R# u upi    N)	r0   r(   ZExtSubTabler   ZExtensionPosFormatappendr!   r1   )r#   r$   r*   Zext_subtabler2   Znew_ext_subtablessubtables   &&&    r   r)   r)   N   s    $6??S?<..?SM !,,.#+   .	 "
 (O01F Ts   Bc          	      s    V ^8  d   QhR\         R\        R\        \        P                  ,          R\        \        P                  ,          /# )r   r#   r$   	subtablesr   )r   r   r   r   PairPosr   r   r   r   r   \   sB     
 



)1(2B2B)C
h
r   c                 s    . pV FU  pVP                   ^8X  d   VP                  V4       K'  VP                   ^8X  g   K:  VP                  \        WV4      4       KW  	  V# r4   )r5   r6   Zextendcompact_class_pairs)r#   r$   r8   r2   r7   s   &&&  r   r0   r0   \   sW     M??a  *__!  !4T(!KL  r   c          	      s    V ^8  d   QhR\         R\        R\        P                  R\        \        P                  ,          /# )r   r#   r$   r7   r   )r   r   r   r9   r   r   r   r   r   r   i   s=      
(0(8(8	(

r   c                 s>   ^ RI Hp . p\        \        4      pVP                  P
                   F>  pWRP                  P                  P                  V^ 4      ,          P                  V4       K@  	  \        \        4      pVP                  P                  P                  4        F  w  rhWx,          P                  V4       K  	  / p	\        VP                  4       F  w  r\        V
P                  4       Fg  w  r\        V4      '       d   K  \!        VRR4      \!        VRR4      3V	\#        \%        WX,          4      4      \#        \%        W{,          4      4      3&   Ki  	  K  	  \'        W	V4      pV F(  pVP                  V! WP)                  4       4      4       K*  	  V# )r    )buildPairPosClassesSubtableValue1NValue2)ZfontTools.otlLib.builderr<   r   ZlistZCoverageZglyphsZ	ClassDef1Z	classDefsr%   r6   Z	ClassDef2items	enumerateZClass1RecordClass2Recordis_really_zerogetattrZtuplesorted,cluster_pairs_by_class2_coverage_custom_costgetReverseGlyphMap)r#   r$   r7   r<   r8   Zclasses1ZgZclasses2iZ	all_pairsclass1jclass2Zgrouped_pairspairss   &&&            r   r;   r;   i   sR    EI,7,=H%%##--11!Q78??B &,7,=H"",,2241 5Ix445	"6#6#67IAf%%$/$/SIuVHK0159L3MNO 8 6 ARWXM4U<S<S<UVW r   c                sD    V ^8  d   QhR\         P                  R\        /# )r   rJ   r   )r   rA   Zboolr   r   r   r   r      s       800 T r   c                 s    \        V R R4      p\        V RR4      pVRJ ;'       g    VP                  4       ^ 8H  ;'       d     VRJ ;'       g    VP                  4       ^ 8H  # )r=   Nr>   )rC   getEffectiveFormat)rJ   Zv1Zv2s   &  r   rB   rB      sg    	4	(B	4	(B$J66"//1Q6  
d
22b++-2r   .c                s:    V ^8  d   QhR\         \        ,          /# )r   glyphIDs)r
   r   r   r   r   r   r      s     
- 
-hsm 
-r   c                 s   \        V 4      p V ^ ,          pV..pV R,           F<  pW1^,           8w  d+   VR,          P                  V4       VP                  V.4       TpK>  	  VR,          P                  V4       W ^ ,          V R,          3# )r    r4   NNi)rD   r6   )rM   lastrangesZglyphIDs   &   r   _getClassRangesrQ      s    hHA;DfXFB<<Qh2Jd#MM7)$	  
 2JdA;,,r   c                s    V ^8  d   QhR\         \        \         \        \        \        3,          ,          \        \        3,          ,          R\         \        ,          /# )r   
class_data	class_ids)r   r   r   r   r   r   r   r      s>     - -U4c3h0#s:;<-Cy-r   c                 sn   V'       g   ^ # W^ ,          ,          w  r4p\        V4      pVR,           FH  pW,          pV\        V^ ,          4      ,          p\        WH^,          4      p\        WX^,          4      pKJ  	  WT,
          ^,           p	^V	^,          ,           p
^V^,          ,           p\        W4      # )r    rN   )r!   minmax)rR   rS   ZcoverageZfirst_rangesZmin_glyph_idZmax_glyph_idZrange_countrG   ZdataZ
glyphCountformat1_bytesformat2_bytess   &&&         r   _classDef_bytesrX      s    
 /9A,/G,Ll#Kr]]}s47|#<a1<a1	 
 ,q0J
Q&Ma'M},,r   ClusteringContextc                   s   a  ] tR t^t o ]R 4       t]R 4       t]R 4       t]R 4       t	]R 4       t
]R 4       t]R 4       tV 3R ltR	tV tR
# )Clusterc                s,    \        V P                  4      # r/   )r   indices_bitmaskself   &r   indicesZCluster.indices   s    4//00r   c                sv   a  \        \        P                  V 3R  lS P                   4       4      p\	        V4      # )c              3   s^   <"   T F"  pSP                   P                  V,          x  K$  	  R # 5ir/   )ctxlines.0rG   r]      & r   	<genexpr>Z)Cluster.column_indices.<locals>.<genexpr>   s!     %NAdhhnnQ&7&7s   *-)r   r   Z__or__r_   r   )r]   Zbitmasks   f r   column_indicesZCluster.column_indices   s*     %N%NO7##r   c                s:    \        V P                  4      ^,           # r:   )r!   rf   r\   r^   r   widthZCluster.width   s     4&&'!++r   c                s   ^V P                   ,           ^,           ^,           ^,           V P                  ,           ^,           V P                  ,           ^,           ^,           V P                  P                  V P                  P
                  ,           \        V P                  4      ,          V P                  ,          ,           # )r   )	coverage_bytesclassDef1_bytesclassDef2_bytesr`   valueFormat1_bytesvalueFormat2_bytesr!   r_   rg   r\   r^   r   costZCluster.cost   s     !!" 	   ""#  !" ""##& '* +. xx**TXX-H-HH$,, jj/	
r   c                sP  a  ^\        V 3R lS P                   4       4      ^,          ,           p\        \        P                  ! V 3R lS P                   4       4      4      p^ pRpV F!  w  rVVe   WT^,           8w  d
   V^,          pTpK#  	  ^V^,          ,           p\        W4      # )i   c              3   sp   <"   T F+  p\        SP                  P                  V,          4      x  K-  	  R # 5ir/   r!   r`   
all_class1rb   rd   r   re   )Cluster.coverage_bytes.<locals>.<genexpr>  s(     D|!#dhh))!,--|s   36c              3   sl   <"   T F)  pSP                   P                  V,          ^ ,          x  K+  	  R# 5ir    N)r`   all_class1_datarb   rd   r   re   rp     s(     U1 8 8 ;A > >s   14N)sumr_   rD   r   Zfrom_iterablerT   )r]   rV   rP   Zmerged_range_countrO   ZstartZendrW   s   f       r   rh   ZCluster.coverage_bytes   s     Dt||DDqHI	 	 UUU
  JEEAX$5"a'"D ! 
 !1$%	 	 =00r   c                s   a  \        S P                  V 3R  lR7      p\        S P                  P                  S P                   Uu. uF  q"V8w  g   K  VNK  	  up4      # u upi )c                 sP   < \        SP                  P                  V ,          4      # r/   rn   )rG   r]   s   &r   Z<lambda>Z)Cluster.classDef1_bytes.<locals>.<lambda>   s    DHH<O<OPQ<R8Sr   )Zkey)rU   r_   rX   r`   rr   )r]   Zbiggest_indexrG   s   f  r   ri   ZCluster.classDef1_bytes  sO     DLL.STHH$$$,,&U,Q}BTqq,&U
 	
&Us   A
A
c                sV    \        V P                  P                  V P                  4      # r/   )rX   r`   all_class2_datarf   r\   r^   r   rj   ZCluster.classDef2_bytes%  s!     txx779L9LMMr   c                s2   < V ^8  d   Qh/ S[ ;R&   S[;R&   # )r   r`   r[   )rY   r   )r   __classdict__s   "r   r   ZCluster.__annotate__   s     	   r    N)__name__Z
__module__Z__qualname__Z__firstlineno__r   r_   rf   Zpropertyrg   rm   rh   ri   rj   Z__annotate_func__Z__static_attributes__Z__classdictcell__)ru   s   @r   rZ   rZ      s     
 1 1 $ $ , , 
 
> 1 1> 	
 	
 N NE  r   rZ   c          	      s^    V ^8  d   QhR\         R\        R\        R\        \        ,          /# )r   r#   rK   compressionr   )r   Pairsr   r   r   r   r   r   r   +  s:     L L
LL L 
%[	Lr   c           	      s.  aaa$a%a&a' S'       g   S.# \        \        R  S 4       4      4      p\        \        R S 4       4      4      pV Uau. uF"  o\        VV3R l\        V4       4       4      NK$  	  ppV P	                  4       o'V Uu. uF  p\        V'3R lV 4       4      NK  	  ppV Uu. uF  p\        V'3R lV 4       4      NK  	  p	p^ p
^ pSP                  4        Fa  w  rY^ ,          '       d   V^ ,          P                  4       M^ ,          p
Y^,          '       d   V^,          P                  4       M^ ,          pKc  	  \        V
4      ^,          p\        V4      ^,          p\        VVVV	VV4      o%/ o$R V$V%3R llo&R V&3R llp\        \        V4      4       Uu. uF  pS&! ^V,          4      NK  	  ppS&! ^\        V4      ,          ^,
          4      P                  p\        P                  R	\        V4       24       \        V4      ^8  EdP   R
pR
pR
pR
p\        V4       F  w  pp\        VV^,           R
 4       F`  w  ppV! VV4      pVP                  VP                  ,
          VP                  ,
          pVe
   VV8  g   KJ  TpTpV^,           V,           pTpKb  	  K  	  Vf   Q hVf   Q hVf   Q hVf   Q hV^ 8  d   \        R V 4       4      p^VV,          ,
          p\        ^V,
          4      ) V,          p\        P                  R\        V4      R RVR RV 24       V^	8X  d   \        V4      p\        V4      V^,           8:  d   MVV VVV&   EK`  \!        \"        4      p SP                  4        F  w  pp!V!V V^ ,          ,          V&   K  	  . p"V FR  p\#        4       p#VP$                   F$  pVV,          oV#P'                  V S,          4       K&  	  V"P)                  V#4       KT  	  V"# u upi u upi u upi u upi )c              3   s2   "   T F  q^ ,          x  K  	  R# 5irq   rv   rc   pair   & r   re   ?cluster_pairs_by_class2_coverage_custom_cost.<locals>.<genexpr>5       6GG   c              3   s2   "   T F  q^,          x  K  	  R# 5ir3   rv   rz   r|   r   re   r}   6  r~   r   c              3   sP   <"   T F  w  rSV3S9   d
   ^V,          M^ x  K  	  R# 5ir3   rv   )rc   rG   rJ   rH   rK   s   &  r   re   r}   :  s/      
2	 v&%/AFQ62s   #&c              3   6   <"   T F  pSV,          x  K  	  R # 5ir/   rv   rc   Zname
name_to_idrd   r   re   r}   E       9ST
4((S   c              3   r   r/   rv   r   rd   r   re   r}   H  r   r   c                s0    V ^8  d   QhR\         R\        /# )r   r_   r   )r   rZ   r   r   r   r   Bcluster_pairs_by_class2_coverage_custom_cost.<locals>.__annotate__^  s      c g r   c                 sZ   < SP                  V R 4      pVe   V# \        SV 4      pVSV &   V# r/   )r%   rZ   )r_   clustercluster_cacher`   s   & r   make_clusterZBcluster_pairs_by_class2_coverage_custom_cost.<locals>.make_cluster^  s;    ##GT2N#w'!(gr   c                s<    V ^8  d   QhR\         R\         R\         /# )r   r   otherr   )rZ   r   r   r   r   r   f  s&     M Mw Mw M7 Mr   c                 sJ   < S! V P                   VP                   ,          4      # r/   )r[   )r   r   r   s   &&r   mergeZ;cluster_pairs_by_class2_coverage_custom_cost.<locals>.mergef  s    G33e6K6KKLLr   z        len(clusters) = Nc              3   s8   "   T F  qP                   x  K  	  R # 5ir/   )rm   )rc   Zcr|   r   re   r}     s     &@x!vvxs   z            len(clusters) = Z3dz    size_reduction=z5.2fz    max_new_subtables=)rD   Zsetrs   r@   rF   rQ   r?   rL   r   rY   Zranger!   rm   logZdebugr   r   Zdictr_   Zupdater6   )(r#   rK   rx   ro   Z
all_class2rH   ra   Zclsrr   rt   Zformat1Zformat2r{   Zvaluerk   rl   r   rG   ZclustersZcost_before_splittingZlowest_cost_changeZbest_cluster_indexZbest_other_indexZbest_mergedr   rI   r   ZmergedZcost_changeZcost_after_splittingZsize_reductionZmax_new_subtablesZpairs_by_class1ZvaluesZpairs_groupsZpairs_groupr   r`   r   r   s(   &f&  `                              @@@@r   rE   rE   +  s<   
 w 6667J6667J !
 !F	 	 
&z2
 	
 ! 
  ((*J FPEOc9S99Z   FPEOc9S99Z   GG{{}!HH58..0!C!HH58..0!C % #7+a/"7+a/
C )+M M M /4CJ.?@.?Q!V$.?H@ )!s5z/Q)>?DDII(X89
h-!
!!#H-JAw%hq1uw&785w.$kkGLL85::E%-?Q1Q)4&)*&'(1uqy$"(K 9 . "---!---+++&&& ! $'&@x&@#@  !58M!MMN "&a.&8!9 9K GII.s8}R.@@STbcgShh~  @Q  R  S a$'M! 8} 1A 55 %&'2#$ 5@4EOf)/Q & & "L!VA]Fv67 ! 	K(  }L As   (PP/P'P)F)ra   ro   rr   rt   rk   rl   )i   )5Zloggingr   Zcollectionsr   r   Zdataclassesr   Z	functoolsr   r   Z	itertoolsr   Zmathr   Ztypingr   r	   r
   r   r   r   ZfontTools.configr   ZfontTools.misc.intToolsr   r   ZfontTools.ttLibr   ZfontTools.ttLib.tablesr   r   Z	getLoggerrw   r   ZCOMPRESSION_LEVELr   ZstrZdefaultr   r"   r+   r'   r)   r0   r;   rB   ZValueRecordry   rQ   rX   rY   rZ   rE   rv   r   r   <module>r      s    	 / ! -   E E $ : " 3!xj(:;<  :  1 9 9: E$:.2
6 		%S/5c?
*+	&

f00
013	
--, 
  cN cN cNLL Lr   