L i^ddlmZmZddlmZddlmZddlm Z ddl m Z m Z m Z mZddlmZddlmZddlmZmZej,Zeej._d ZGd d eZed d Zeej:_dZeej@_!dZ"e"ej._#GddeZ$dde%fdddZ&e&ej._'ddddZ(e(ej._)dZ*dZ+dZ,e,ejZ_.e,ej^_.dZ0dZ1e1ejZ_2e1ej^_2Gdd eZ3Gd!d"e4Z5d(d$Z6e6ej._7d)d&Z8e9d'k(r`dd%l:Z:e;e:jxd#kDre:jze8dd%l>Z>e:jze>j~jy%y%)*)noRoundotRound bit_count)otTables) supportScalar)buildVarRegionList buildVarStorebuildVarRegion buildVarData)partial) defaultdict)heappushheappopcLtt|jdS)Nc |dSNr)kvs _/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/fontTools/varLib/varStore.pyz!_getLocationKey..s BqEkey)tuplesorteditems)locs r_getLocationKeyrs  )9: ;;rc^eZdZdZdZdZd dZd dZeddZ eddZ edd Z edd Z y )OnlineVarStoreBuilderc||_i|_tg||_t |jg|_d|_d|_d|_i|_ i|_ d|_ yN) _axisTags _regionMapr _regionListr _store_data_model _supports_varDataIndices_varDataCaches_cache)selfaxisTagss r__init__zOnlineVarStoreBuilder.__init__s_!-b(;#D$4$4b9   !  rcH|j|j||_yr#) setSupportssupportsr))r.models rsetModelzOnlineVarStoreBuilder.setModel%s ( rcd|_t||_|jr|jds |jd=d|_d|_yr)r)listr*r-r()r.r3s rr2z!OnlineVarStoreBuilder.setSupports)s@ h >>$.."3q!  rc`t|jj|j_t|jj |j_|jj D].}t|j|_|j|0|jS)Noptimize) lenr&Region RegionCountr'VarData VarDataCountItem ItemCountcalculateNumShorts)r.r:datas rfinishzOnlineVarStoreBuilder.finish1s'*4+;+;+B+B'C$#&t{{':':#;  KK'' 7D ^DN  # #X # 6 7{{rc|j}|j}|j}g}|D]|}t|}|j |}|Kt ||j } t|jx}||<|jj| |j|~t|}|jj |} | `| |_ |jj| |_|j ||_t|jj$|zdkDrd} | t'|gd|_t|jj|_ |jjj|j|j|j|<||j vri|j |<|j ||_yy)NFr9)r%r&r*rgetr r$r;r<appendrr+_outerr'r>r(r,r-r@r ) r. num_items regionMap regionListregions regionIndicesregionridx varRegion varDataIdxs r _add_VarDataz"OnlineVarStoreBuilder._add_VarData9sOO %% ..  &F!&)C--$C{*64>>B '*:+<+<'==in!!((3   % &M"))--c2  !$DK,,Z8DJ--c2DK4::??#i/&8!  %mR%HDJdkk112DK KK   & &tzz 2(, D  %$---+-##C(--c2DK rroundc|jj||}|jd}||j|tfSNrTr)r) getDeltaspop storeDeltasr)r. master_valuesrUdeltasbases r storeMastersz"OnlineVarStoreBuilder.storeMasters\sC&&}E&Bzz!}T%%fG%<<s $A"A'c|Dcgc] }|| }}t|t|jdzk(rt|dd}n.t|t|jk(sJt|}|js|j |j j |}||St|jj}|dk(r'|j |j|tS|jj|t|jdz|z}||j |<|Scc}w)NrFrT) r;r*rr(rSr-rGr@rZraddItemrI)r.r\rUdvarIdxinners rrZz!OnlineVarStoreBuilder.storeDeltasis$*+q%(++ v;#dnn-1 16!":&Fv;#dnn"55 556]Fzz    (  MDJJOO$ F?    ##F'#: : 61++#u,$ F /,sEc |Dcgc]}|Dcgc] }|| c}}}}td|D}|js|jt||jj |}||St|jj }|t|zdkDr1|jt||j|tSt|D]J\}}|jj|t|jdz|z|z}||j|<L|jdz|z}||j|<|Scc}wcc}}w)Nc32K|]}t|ywr#)r).0r\s r z8OnlineVarStoreBuilder.storeDeltasMany..sDfE&MDsrFrTrg) rr(rSr;r-rGr@r`r enumeraterhrI)r.rbrUr\rirjrkis rr`z%OnlineVarStoreBuilder.storeDeltasManys=@KLf&1Qa1L LD DD zz   c+. /-  MDJJOO$ 3{# #f ,   c+. /'' 7'C C";/ )IAv JJ  vW  5kkR'5014F"(DKK   ) ++#u,#) K  12Ls EE EEN)T)rf) __name__ __module__ __qualname__r0r5r2rDrSrUr^rdrZr`rrrr!r!sF !3F49= =BK,145:rr!rTc0|Dcgc] }|| }}|j}t|}|dz|k(rt|dd}n||k(s J||ft|}|jj |t|j|_ycc}wNrf)VarRegionCountr;r7r@rHrA)r.r\rUricountUs countThems rVarData_addItemrzs & '1eAh 'F '!!GF I{ifQRj!)#9gy%99#fIIV^DN(sBct|jDcic]E\}}|jdk7r1||j|j|j|j fGc}}Scc}}wr)rp VarRegionAxis PeakCoordaxisTag StartCoordEndCoord)r. fvar_axesrqregs rVarRegion_get_supportrsa  2 23  As ==A  ! s~~s}}cllKK  sA A'c,t|jSr#)boolr>r.s rVarStore___bool__rs  rcDeZdZifdZdZdZdZedZdZ dZ y) VarStoreInstancerc||_||jdk(sJ|r |jng|_|r|jj ng|_|j|yrv)rFormatr>_varData VarRegionListr<_regions setLocation)r.varstorerlocations rr0zVarStoreInstancer.__init__sV"8??a#777,4((" 9A..55r  "rcDt||_|jyr#)dictr _clearCaches)r.rs rrzVarStoreInstancer.setLocationsX  rci|_yr#)_scalarsrs rrzVarStoreInstancer._clearCachess  rc|jj|}|M|j|j|j}t |j |}||j|<|Sr#)rrGr get_supportrrr)r. regionIdxscalarsupports r _getScalarzVarStoreInstancer._getScalars[""9- >mmI.::4>>JG"4==':F'-DMM) $ rcHd}t||D]\}}|s |||zz }|S)N)zip)r\scalarsdeltariss rinterpolateFromDeltasAndScalarsz1VarStoreInstancer.interpolateFromDeltasAndScalarss;( DAq QUNE  rc|dz |dz}}|tk(ry|j}||jDcgc]}|j|}}||j|}|j ||Scc}w)NrgrFr)NO_VARIATION_INDEXrVarRegionIndexrr@r)r.varidxmajorminorvarDatarirr\s r __getitem__zVarStoreInstancer.__getitem__s{|Vf_u ' '--181N1NO24??2&OO$$U+33FGDDPsA0c|j}||jDcgc]}|j|}}|j||Scc}wr#)rrrr)r. varDataIndexr\rrrs rinterpolateFromDeltasz'VarStoreInstancer.interpolateFromDeltassK--181F1U1UV24??2&VV33FGDDWsA N) rrrsrtr0rrr staticmethodrrrrrrrrs957#EErrTFr>)r>c tt}|D]*}|tk(r |dz }|dz} ||j| ,~t ||} g} tti} t | D]0\}} |j |}|t| }| j| | j}g}|dk(rK|rItt|D]1} |j| |vr|| ndgt|| z| | | <3nb|dk(rt|t||z z}n t|}|D]2} t|}|j|| |dz|z| |dz| z<4|| _ t| j| _ |dk(s| j|3t||| t||dzt| |j| S)NrgrFrr>r9Count)rsetraddgetattrrprGr;rHr@rangerrArBsetattr prune_regions)r.varIdxesr:retainFirstMapadvIdxesr>usedrjrrr newVarData varDataMaprC usedMinorsnewMajorrnewItemsminorsnewMinors rVarStore_subset_varidxesrs s D ' ' "  U    dG$GJ$&89J )7 tXXe_   z?$  A:.s5z* *$)Z$7E%LaS3uU|CT=T%* 5!  * z)F:3H,II + Px=e -5=^x4O ERK501 P  TYY i   # #X # 6;7> D':& D'G#S_5 rr)r>rct}t||D]}|j|jt||}|j}g}i}t |D]$} t ||| <|j|| &||_t |j|_t||D]$}|jD cgc]} ||  c} |_&ycc} w)zRemove unused VarRegions.N) rrupdaterr<rr;rHr=) r.r>r usedRegionsrCrLrM newRegionsrKrqs rVarStore_prune_regionsr<s%Kg&04../0}-JGJI K &: ! '!*%&#J !2!23Jg&J595H5HIy|IJIs Cct|tjk(r ||yt|tr|D]}t ||yt |drHt |ds<|jD](}t||jd}|t ||*yt|tjr,|jjD]}t ||yy)zqRecurse down from self, if type of an object is ot.Device, call func() on it. Works on otData-style classes. getConverterspostReadN) typeotDevice isinstancer7_visithasattrrrname ValueRecord__dict__values)r.functhatconvs rrrXs DzRYY T D$  D 4    'j0I&&( #D4D1DtT" # D".. )MM((* D 4   *rcz|jdk(r,|j|jdz|jzyy)z6Add VarIdx in this Device table (if any) to the set s.rgN) DeltaFormatr StartSizeEndSize)r.rs r_Device_recordVarIdxrns3 6! t~~#t||34"rc>tt|}t||y)N)r)r rr)r.varidxesadders rObject_collect_device_varidxesrts (H 5E 4rct||vry|jt||jdk(r4||jdz|jz}|dz |_|dz|_yy)z9Map VarIdx in this Device table (if any) through mapping.NrrgrF)idrrrr)r.mappingdonerjs r_Device_mapVarIdxr}sf $x4HHRX 6!$..B.$,,>?2 "rcPtt|t}t||y)N)rr)r rrr)r. varidxes_mapmappers rObject_remap_device_varidxesrs & 35 IF 4rcJeZdZdZdZdZdZedZedZ dZ y) _Encodingc||_t||_|j||_|j |j|_t|_yr#) charsrwidth_columnscolumns_characteristic_overheadoverheadrr)r.rs rr0z_Encoding.__init__sD u% }}U+ 55dllC U rc:|jj|yr#)rr)r.rows rrHz_Encoding.appends src:|jj|yr#)rr)r.lsts rextendz_Encoding.extends #rc2|j|jfSr#)rrrs rwidth_sort_keyz_Encoding.width_sort_keyszz4::%%rc,d}|t|dzz }|S)zOReturns overhead in bytes of encoding this characteristic as a VarData. r)rcs rrz"_Encoding._characteristic_overheads"  Yw ! ##rc@d}d}|r|dzr||z}|dz}|dz}|r|S)Nrrfr)rcolsrqs rrz_Encoding._columnss= v~  aKE !GA   rc||j|jz}t|}|j|jz}tj |}|j |j z|z ||j z t|jzz ||j z t|jzz }|Sr#) rrrrrrrr;r)r.other_encodingcombined_charscombined_widthcombined_columnscombined_overhead combined_gains rgain_from_mergingz_Encoding.gain_from_mergings'-- :">2<<.*@*@@%>>?OP ]]N%% &  *c$**o= > 4 44Nrr@r7rrUranyrrrrrrr rrrrrrHsortrrwrr=r?rAr:r)r.use_NO_VARIATION_INDEX quantizationnzeroes front_mapping encodingsrrCrNritemrrrtodoheaprqencodingjrcombining_gain_rcombined_encodingkenc back_mappingr varidx_maps rVarStore_optimizer0sX D   % %&AS1WFMI!.7 t++ $TYY/ 7KE4v,Cq $' t$<(LIq Na'N(%( t$<LIq Na,./,>N *C%c#h7; u{e34   c "36M5B;%/ 0' 772 )""$)*B*B CD D 8 8q1uc$i( 8A!!WN%77GN!A67  88 $-1a 7?d1go #'7DG.%Qa(-->%n5  0  !5!56o @FAs{yyN*!((3Q.@@EN!CI>? @ %&; >+/Gh(2FGIGL NNy//N0DL;x~~& %E::P 1 Q&)););)B)B%CD"DLL)D TYY    KHs =RRNcdddlm}ddlm}ddlm}ddlm}|dtj}|jdtd |jd |jd d |j|}|d|j}|j}|j} ||} | d} | j j"} |} | j%| | t'| j)}t+d|z| j-|}|} | j%| | t'| j)}t+d|z| O| j j/|d| vr| dj j/|| j1| yy)z&Optimize a font's GDEF variation storer)ArgumentParser) configLogger)TTFont) OTTableWriterzvarLib.varStore)prog descriptionz--quantizationrf)rdefaultfontfileoutfile?)nargsINFO)levelGDEFzBefore: %7d bytes)rzAfter: %7d bytesNGPOS)argparser2 fontToolsr3fontTools.ttLibr4fontTools.ttLib.tables.otBaser5main__doc__ add_argumentint parse_argsrr9r:tableVarStorecompiler; getAllDataprintr:remap_device_varidxessave)argsr2r3r4r5parseroptionsrr9r:fontgdefstorewritersizer/s rrErEsu'&&; !2 MF (sA>  #  -%Gv''LHooG ( D  L   4 4Z @ ' r__main__)Trfr#)AfontTools.misc.roundToolsrrfontTools.misc.intToolsrfontTools.ttLib.tablesrrfontTools.varLib.modelsrfontTools.varLib.builderr r r r functoolsr collectionsrheapqrrrrKrobjectr!rUrzr>rhr VarRegionrr__bool__rrrsubset_varidxesrrrrrr?collect_device_varidxesr@rrrOrrrr0r:rErrsysr;argvexitdoctesttestmodfailedrrrrms6-11 ##**!3 <DFDN,1 $% 1 ) ,E,Er U > >B7 -6_J23 ,5  #A"@' != <00f%D%P~B) )X z 388}q CHH_W__  % %&r