L iE <ddlZddlZddlmZmZddlmZddlmZm Z ddl m Z ddl m Z ddlmZmZmZmZmZmZddlmZdd lmZmZdd lmZdd lmZmZej>e Z!ee d Z"d Z#e$e"jJZ&de'fdZ(dede'defdZ)dede'dejTddfdZ+dede'dejTddfdZ,dede'deejZdeejZfdZ.dede'dejZdeejZfdZ/dej`de1fdZ2eeee$dfee$dffeejfejfffZ4dee'fdZ5 d)deeeee'e'fe'e'fd ee'fd!Z6ed"gd#Z7eGd$d%Z8 d*ded&e4d'e'dee4fd(Z9y)+N) defaultdict namedtuple) dataclass)cached_propertyreduce)chain)log2) DefaultDictDictIterableListSequenceTuple)OPTIONS) bit_count bit_indices)TTFont)otBaseotTablesz:COMPRESSION_LEVELFONTTOOLS_GPOS_COMPACT_MODEreturnct}ttjvr9ddl}|j dtdt tjt}t|dk(r|dvr t|Stdtd|)Nr'z}' environment variable is deprecated. Please set the 'fontTools.otlLib.optimize.gpos:COMPRESSION_LEVEL' option in TTFont.cfg. 0123456789zBad =) GPOS_COMPACT_MODE_DEFAULTGPOS_COMPACT_MODE_ENV_KEYosenvironwarningswarnDeprecationWarninglenint ValueError) env_levelr!s d/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/fontTools/otlLib/optimize/gpos.py_compression_level_from_envr)s)I BJJ. )*+    JJ89  9~yL89~ t56a {C DDfontlevelc(|jd}||S|jjjD]Y}|jdk(rt ||| |jdk(s0|j djdk(sMt|||[|S)NGPOS r) gettable LookupListLookup LookupTypecompact_lookupSubTableExtensionLookupTypecompact_ext_lookup)r+r,gposlookups r(compactr<+s 88F D | **''..4    ! 4 /   ! #(:(N(NRS(S tUF 3 4 Kr*r;c`t|||j}||_t||_yN)compact_pair_posr7r$ SubTableCount)r+r,r; new_subtabless r(r6r6Hs($T5&//BM#FO}-Fr*ct|||jDcgc]}|jc}}g}|D]5}tj}d|_||_|j |7||_t||_ycc}wNr) r?r7 ExtSubTabler ExtensionPosFormatappendr$r@)r+r,r; ext_subtablerAnew_ext_subtablessubtables r(r9r9Ns$ e6??S)rrselfs r(indiceszCluster.indicess4//00r*ctttjfdjD}t |S)Nc3PK|]}jj|ywr>)rr.0rgrs r( z)Cluster.column_indices..s%NAdhhnnQ&7%Ns#&)rr%__or__rr)rbitmasks` r(column_indiceszCluster.column_indicess*%N%NO7##r*c2t|jdzSrC)r$rrs r(widthz Cluster.widths4&&'!++r*cd|jzdzdzdz|jzdz|jzdzdz|jj|jj zt |jz|jzzS)Nr|r/) coverage_bytesclassDef1_bytesclassDef2_bytesrrrr$rrrs r(costz Cluster.costs !! "   "" # ! """# #&' *+ .xx**TXX-H-HH$,, jj/  r*cdtfdjDdzz}ttjfdjD}d}d}|D]\}}| ||dzk7r|dz }|}d|dzz}t ||S)Nr}c3bK|]&}tjj|(ywr>r$rrrs r(rz)Cluster.coverage_bytes..s%D!#dhh))!,-Ds,/r/c3VK|] }jj|d"ywrN)rrrs r(rz)Cluster.coverage_bytes..s%U1 8 8 ;A >Us&)rrr|)sumrrar from_iterabler~)rrrvmerged_range_countrustartendrs` r(rzCluster.coverage_bytess Dt||DDqH I    U U U   JE3ETAX$5"a'"D   !1$  % =-00r*ctjfd}tjjjDcgc] }||k7s | c}Scc}w)NcHtjj|Sr>r)rgrs r(z)Cluster.classDef1_bytes.. sDHH)rrrrrs r(rzCluster.classDef2_bytes%s!txx779L9LMMr*N)__name__ __module__ __qualname__r__annotations__r%rrrpropertyrrrrrr*r(rrs 11$$ ,,  >11>    NNr*rrm compressionc :$%&'sgSttdD}ttdD}|Dcgc] tfdt|D"}}|j '|Dcgc]}t 'fd|D}}|Dcgc]}t 'fd|D} }d} d} j D]?\} } | | dr| djndz} | | dr| djndz} At| dz}t| dz}t|||| ||%i$d td tf$%fd &d td td tf&fd }tt|Dcgc] }&d|z}}&dt|zdz j}tj!dt|t|dkDrd}d}d}d}t|D]c\}}t||dzdD]J\}}|||}|j|jz |jz }|||ks=|}|}|dz|z}|}Le|J|J|J|J|dkDrwtd|D}d||z z }t#d|z  |z}tj!dt|dd|dd||dk(r t|}t||dzkrn||=|||<t|dkDrt%t&} j D]\} }!|!| | d| <g}"|D]G}t'}#|j(D]}|||#j+| |"j-|#I|"Scc}wcc}wcc}wcc}w)Nc3&K|] }|d ywrrrpairs r(rz?cluster_pairs_by_class2_coverage_custom_cost..56DG6c3&K|] }|d yw)rNrrs r(rz?cluster_pairs_by_class2_coverage_custom_cost..6rrc3>K|]\}}|fvrd|zndyw)rrNr)rrgrkrirms r(rz?cluster_pairs_by_class2_coverage_custom_cost..:s2 6v&%/AFQ 6 sc3(K|] }| ywr>rrname name_to_ids r(rz?cluster_pairs_by_class2_coverage_custom_cost..E9T 4(9c3(K|] }| ywr>rrs r(rz?cluster_pairs_by_class2_coverage_custom_cost..Hrrrrr/rrcVj|d}||St|}||<|Sr>)r1r)rcluster cluster_cachers r( make_clusterzBcluster_pairs_by_class2_coverage_custom_cost..make_cluster^s;##GT2  N#w'!( gr*rothercB|j|jzSr>)r)rrrs r(mergez;cluster_pairs_by_class2_coverage_custom_cost..mergefsG33e6K6KKLLr*z len(clusters) = c34K|]}|jywr>)r)rcs r(rz?cluster_pairs_by_class2_coverage_custom_cost..s&@!qvv&@sz len(clusters) = 3dz size_reduction=z5.2fz max_new_subtables=r0)rasetrr[rcrxrZrorrr%rranger$rlogdebugr rdictrupdaterG)(r+rmrr all_class2rirclsrrformat1format2rvaluerrrrgclusterscost_before_splittinglowest_cost_changebest_cluster_indexbest_other_index best_mergedrrjrmerged cost_changecost_after_splittingsize_reductionmax_new_subtablespairs_by_class1values pairs_groups pairs_grouprrrrs( ` ` @@@@r(rbrb+s} w6667J6667J!     &z2   E ((*JFP>A9S99OFP>A9S99OGG{{}D eE!H58..0!CE!H58..0!CD#7+a/"7+a/    C)+McgMwMwM7M/4CJ.?@ Q!V$@H@)!s5z/Q)>?DDII(X89 h-! !! #H- )JAw%hq1uw&78 )5w.$kkGLL85::E %-?Q1Q)4&)*&'(1uqy$"(K ) )"---!---+++&&&  !$'&@x&@#@ !58M!MMN"&a.&8!9 9K G  II.s8}R.@@STbcgShh~@QRS a$'M!8} 1A 55 % &'2#$m h-! r5@4EO 0 f)/Q &0 "L)!V  8A]F   v6 7 8 K( ) } LAs%N N#NN)F)):loggingr collectionsrr dataclassesr functoolsrr itertoolsrmathr typingr r r r rrfontTools.configrfontTools.misc.intToolsrrfontTools.ttLibrfontTools.ttLib.tablesrr getLoggerrrCOMPRESSION_LEVELrstrdefaultrr%r)r<r4r6r9PairPosr?rNr]boolr^ ValueRecordPairsrxrrrrbrr*r(rsf /!-EE$:"3g!xj(:;<: 1 9 9:ESE$&:...X__.. 2V 2C 2 2T 2    )1(2B2B)C  h  (0(8(8 (  6800T  %S/5c? *+ &  f00 013  -hsm -"-U4c3h0#s:;<-Cy-,  cNcN cNRL L LL %[ Lr*