L i} ddlmZmZmZmZm Z ddl m Z ddl Z ddl mZmZddlZddlZddlZddlZdZdZdZdZd Zd Zd Zd ZdZd ZdZd Zd Z ejBe"Z#Gdde$Z%dZ&e dzfdZ' ddddZ(dZ)dZ*dZ+y)) fixedToFloat floatToFixedfloatToFixedToStrstrToFixedToFloatotRound)safeEvalN)Counter defaultdictii@i @?ic8eZdZdZdZdZdZdZdZdZ idfd d d Z d Z d Z e dZe dZe dZd dZe d!d d dZe dZe d dZe d dZe d dZe d"dZe dZdZdZdZdZd#dZdZdZy)$TupleVariationcN|j|_t||_yN)copyaxeslist coordinates)selfrrs k/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/fontTools/ttLib/tables/TupleVariation.py__init__zTupleVariation.__init__(sIIK  ,c djt|jjDcgc] \}}|d|c}}}d|d|jdScc}}w)N,=z)joinsortedritemsr)rnamevaluers r__repr__zTupleVariation.__repr__,sPxx ARS utU+S T ,01A1ABBTsAcj|j|jk(xr|j|jk(Sr)rr)rothers r__eq__zTupleVariation.__eq__2s+5#4#44Pejj9PPrcd|jvr tStt|jDcgc] \}}| | c}}}|r|SdScc}}wr)r frozenset enumerate)ripuseds r getUsedPointszTupleVariation.getUsedPoints5sS t'' ';  $2B2B(CU1q}!UVt%%Vs A A c:td|jDS)zReturns True if this TupleVariation has any visible impact. If the result is False, the TupleVariation can be omitted from the font without making any visible difference. c3$K|]}|du ywr.0cs r z+TupleVariation.hasImpact..Cs;Q1D=;)anyr)rs r hasImpactzTupleVariation.hasImpact=s ;$*:*:;;;rc  |jd|j|D]}|jj|}|!|\}}}t |d}t |d}||k(r$||k(r|j d|t|dn>d|fdt|dfdt|dfd t|dfg} |j d| |jd } t|jD]\} } t| tk(rr@r%r?r=rArBrDrFrGrHrIzbad delta format: %sz, ) str2flrArBrLrrrrRwarningr!r"keys)rr$r\_contentr@r%rZr[rXrYpointrGrHrIs rfromXMLzTupleVariation.fromXMLns$ 7?=D5>2.E!%oO!%oOeii?DHeii?DH'9DIIdO W_u} t-U3Z(U3Z(+,a&  '%uU|, w0(-  % 2TYYvejjl?S5TTUrNT optimizeSizec t|jjt|ks"Jd|jj|fg}g}|$|j}|y|j |}|j |}|j |} | t} |j||j|} | | tz} |j| |r| tz} |j||j|j|dj|}|jdtj dt#|| dj||fS)NzUnknown axis tag found.)rrrfrr>HH)setrrbr0 compilePoints compileCoordrLEMBEDDED_PEAK_TUPLEappendcompileIntermediateCoordINTERMEDIATE_REGIONPRIVATE_POINT_NUMBERS compileDeltasr!insertstructpackrP) rrWsharedCoordIndices pointDatarg tupleDataauxData usedPointsr>flagsintermediateCoords rcompilezTupleVariation.compilesa499>>#$H 5 % IINN  8  5    ++-J!**:6I!!(+"&&u- ='E   U # 99(C  ( ( (E   . /  * *E NN9 %t))|)DE((7#FKKs7|UCDxx "G++rc g}|j}|D]Y}|j|}||jd(|jtjdt |dd[dj |S)Ns>hrEr?r)rrLrnrtrufl2fir!)rrWresultrr@triples rrlzTupleVariation.compileCoordsryy GDXXd^F~ g& fkk$fQi0DEF  G xxrc d}|D]H}|jj|d\}}}t|d}t|d}||k7s||k7sFd}n|syg} g} |D]}|jj|d\}}}| j t j dt|d| j t j dt|ddj| | zS)NFr=r=r=r=Trr?r) rrLrArBrnrtrurr!) rrWneededr@rXr%rYrZr[ minCoords maxCoordss rroz'TupleVariation.compileIntermediateCoords D(, dO(L %HeX!%oO!%oOO+_1L     ED(, dO(L %HeX   V[[uXr/BC D   V[[uXr/BC D Exx I-..rc i}|}|D]3}ttjd|||dzdd||<|dz }5||fS)NrrCrr?)fi2flrtunpack)rWdataoffsetr>posr@s rdecompileCoord_zTupleVariation.decompileCoord_s[ D dDsQw4G H KRPE$K 1HC czrc|syt|}|jt|}t}|dkr|j |n+|j |dz dz|j |dzd}d}d}||krd}t|}|j dd}||kr||kr|||} | |z } |d| cxkxrdknc}|r | dkDs| dkrnS|r|j | n(|j | dz |j | dz| }|dz }|dz }||kr||kr||r |dz ||<n|dz t z||<||kr|S)Nr rrrE)rsortrP bytearrayrnPOINTS_ARE_WORDS) points numPointsrMAX_RUN_LENGTHr lastValue runLength headerPosuseByteEncodingcurValuerDs rrkzTupleVariation.compilePointssvf K  t  MM) $ MM9>T1 2 MM)d* + IoIF I MM! "O /i>&A!#; 9,"*&'5&8D&8O"  #MM%(MM%1*-MM%$,/$ qQ # /i>&A$$-My!%.]6F$Fy!9Io< rcF|dvsJ|}||}|dz }|tzdk7r|tzdz||z}|dz }|dk(r t||fSg}t||kr||}|dz }|tzdz}d} |tzdk7rt jd} |dz} nt jd} |} | j |||| zt jdk7r| jt| |k(sJ|| z }|j| t||krg} d} |D]}| |z } | j| | }~ |Dchc]}|dks||k\st|}}|r4tjd d jt|d |d ||fScc}w) zJ(numPoints, data, offset, tableTag) --> ([point1, point2, ...], newOffset)cvargvarrErrHrCBbigzpoint rz out of range in 'z' table)rPOINT_RUN_COUNT_MASKrangerParray frombytessys byteorderbyteswapextendrnstrrRrar!r")rrrtableTagrnumPointsInDatar runHeadernumPointsInRunrdr pointsSizeabsolutecurrentrDr. badPointss rdecompilePoints_zTupleVariation.decompilePoints_s++++s) q . .1 4.1EE!KdSViWO 1HC a )$c* *&kO+S I 1HC'*>>!CNE,,2S)+a/ S)+   T#j(89 :}}%!v;.0 00 : C MM& !%&kO+* %E u G OOG $ % %+Gq1uYSVG G  KK88F9-.: } Hs F Fc\g}g}|jdk(r=|jD]-}||j|d|j|d/n%|jD]}||j|t}|j ||||j ||||S)NrCrrErf) getCoordWidthrrnrcompileDeltaValues_)rrgdeltaXdeltaYr6bytearrs rrrzTupleVariation.compileDeltasGs    1 $%% $9 ad# ad#  $ %% !9 a  !+   | L   | Lrc| t}d}t|}|r||kr=||}|dk(rtj|||}ncd|cxkrdkrnntj |||}n=d|cxkrdkrnntj |||}ntj |||}||krnt|t|}}|dcxk(r|k(rnntj|||}nud|cxkr |cxkrdkrnntj |||d}nGd|cxkr |cxkrdkrnntj |||d}ntj |||d}||k(s J||f|S)a[value1, value2, value3, ...] --> bytearray Emits a sequence of runs. Each run starts with a byte-sized header whose 6 least significant bits (header & 0x3F) indicate how many values are encoded in this run. The stored length is the actual length minus one; run lengths are thus in the range [1..64]. If the header byte has its most significant bit (0x80) set, all values in this run are zero, and no data follows. Otherwise, the header byte is followed by ((header & 0x3F) + 1) signed values. If (header & 0x40) is clear, the delta values are stored as signed bytes; if (header & 0x40) is set, the delta values are signed 16-bit integers. rrFrf) rrPrencodeDeltaRunAsZeroes_encodeDeltaRunAsBytes_encodeDeltaRunAsWords_encodeDeltaRunAsLongs_rArB)deltasrrgr numDeltasr%minValmaxVals rrz"TupleVariation.compileDeltaValues_Zs" ?kGK  /s A:(@@gVCU)c)(??WUCu--(??WUC(??WUC /![#f+FF$f$$<? @ rc|}t|}||krS||}|r|dk(rnF|r+d|cxkrdkr nn|dz|krd||dzcxkrdkrnnnd|cxkrdksnn |dz }||krS||z }|dk\rx|jtdztjd |||dz}tj d k7r|j |j||dz }|dz}|dk\rx|rh|jt|dz ztjd |||}tj d k7r|j |j||S) NrrrrErrr rhr)rPrnDELTAS_ARE_WORDSrrrrr rrrrgrrr%ras rrz%TupleVariation.encodeDeltaRunAsWords_sYK Io3KE U)c)!Gi'VC!G_33e,u, 1HC=Io>&L 2o NN+b0 1 C"!=>A}}% NN1  bLF OI2o  NN+y1}= > Cs!34A}}% NN1  rcD|}t|}||kr!||}|rd|cxkrdkrnnn |dz }||kr!||z }|dk\rx|jtdztjd|||dz}tj dk7r|j |j||dz }|dz}|dk\rx|rh|jt|dz ztjd|||}tj dk7r|j |j||S)NrrrEr rr-r)rPrnDELTAS_ARE_LONGSrrrrrrs rrz%TupleVariation.encodeDeltaRunAsLongs_sK Io3KE% 85 8 1HC Io &L 2o NN+b0 1 C"!=>A}}% NN1  bLF OI2o  NN+y1}= > Cs!34A}}% NN1  rcg}|}|t||krLn|t|kr<||}|dz }|tzdz}|tztk(r|j dg|zn|tzt k(rt j d}|dz}nB|tztk(rt j d}|dz}nt j d}|}|j||||ztjdk7r|jt||k(sJt||f||z }|j ||t||kr+n|t|kr<|t||k(sJ||fS) z>(numDeltas, data, offset) --> ([delta, delta, ...], newOffset)rErr-rrCrr) rPDELTA_RUN_COUNT_MASKDELTAS_SIZE_MASKrrrrrrrrr) rrrrrrnumDeltasInRunr deltasSizes rdecompileDeltas_zTupleVariation.decompileDeltas_ss)2)>c&kI%C#d)OS I 1HC'*>>!CN,,@ qcN23 005EE"[[-F!/!!3J"227GG"[[-F!/!!3J"[[-F!/J  cC*,==E)OO%6{n4Ss6{N6SS4z! f%+*3)>c&kI%C#d)O, CK9$<<<}rcZd}|tzdk7r||dzz }|tzdk7r||dzz }|S)NrrrC)rmrp)r{ axisCountsizes r getTupleSize_zTupleVariation.getTupleSize_.sD ' 'A - IM !D ' 'A - IM !D rctd|jDd}|yt|ttfvryt|t urt |dk(rytd|z)zmReturn 2 if coordinates are (x, y) as in gvar, 1 if single values as in cvar, or 0 if empty. c3&K|] }|| ywrr3r4s rr7z/TupleVariation.getCoordWidth..;sH!-1HsNrrErCzSinvalid type of delta; expected (int or float) number, or Tuple[number, number]: %r)nextrrOrQfloatr<rP TypeError)r firstDeltas rrzTupleVariation.getCoordWidth7snHd&6&6H$O    U| +  u $ZA)= (*4 5  rc|dk(ry|j}|jDcgc] }|dn|dk(r||zn|d|z|d|zf"c}|_ycc}w)Ng?rEr)rr)rscalar coordWidthds r scaleDeltaszTupleVariation.scaleDeltasGsu S= '') %%  9#-?QZ1!v 8VW  s%Ac|j}|jDcgc]2}|dn+|dk(r t|nt|dt|df4c}|_ycc}wNrEr)rrr)rrrs r roundDeltaszTupleVariation.roundDeltasTsn'') %%  9#-?WQZ1PQRSPT 8VW  s7Ac6ddlm}|jdk(r tdd|jvrgt |jt |k7r,t dt |jt |fz||j|||_yy)Nr) iup_deltarEz3Only 'gvar' TupleVariation can have inferred deltasz(Expected len(origCoords) == %d; found %d)fontTools.varLib.iuprrrrrP ValueError)r origCoordsendPtsrs rcalcInferredDeltasz!TupleVariation.calcInferredDeltas_s2    1 $QR R 4## #4##$J7 >4++,c*o>? ))9)9:vND  $rcddlm}d|jvry||j|||}d|vr|r(td|Drdgdgt |dz zz}t |j |}t|j j}|j|\} } t | t | z} |j|\} } t | t | z} | | kr|j|_yyy)Nr)iup_delta_optimize) tolerancec3$K|]}|du ywrr3)r5rs rr7z*TupleVariation.optimize..vs"?19"?r8)rrrE) rrrallrPrrr"rbr}) rrrr isCompositerdeltaOptvarOptrWrxryunoptimizedLengthoptimizedLengths roptimizezTupleVariation.optimizels; 4## # %   j&I  8 s"?h"??#8tfH 0A&BB#DIIx8Fdiinn./H!%h!7 Iw #IW = !'!9 Iw!)ns7|;O!22#)#5#5 3 rc(|j||Sr)r)rrs r__imul__zTupleVariation.__imul__s   rct|tstS|j}t |}|j}t ||k7r t d|j dk(r>tt||D]$\}}||} |d|dz|d|dzf||<&|Stt||D]"\}}||}| | ||z||<|||||<$|S#t$r t dwxYw)Nz7cannot sum TupleVariation deltas with different lengthsrCrrEz+cannot sum gvar deltas with inferred points) isinstancerNotImplementedrrPrrziprr)rr(deltas1lengthdeltas2r-d2d1s r__iadd__zTupleVariation.__iadd__s/%0! !""W## w<6 !VW W    1 $U6]G4 T2QZT"$Q%"Q%-AA!?GAJ T U6]G4 $2QZ>bn!#bGAJZBN!#GAJ  $ !T$%RSSTs C  C5Tr)r)g?F) __name__ __module__ __qualname__rr&r)r0r:r^rer}rlro staticmethodrrkrrrrrrrrrrrrrrrrr r3rrrr'sE-C Q&<'RV.,.&,OS&,P  /&>>@00d&4$44l    D11f2:     O66rrcg}t|D]-}tj|||\}}|j|/|Sr)rrrrn)rWsharedTupleCountrrr_ts rdecompileSharedTuplesrsG F # $"228T6J 6 a MrrEct}|D] }|j|}||xxdz cc<"t|j|d}|Dcgc]}|ddkDs |dc}Scc}w)NrEc|d |dfSrr3)items rz%compileSharedTuples..s47(DG,rkeyr)r rlr" most_common)rW variationsMAX_NUM_SHARED_COORDS coordCountvarr> sharedCoordsr6s rcompileSharedTuplesr!s|J  *5Q 45 ,L' 3Q!A$(AaD 33 3s  A)A)TrfcP~g}g}d}tt} |D]D} | j} | | | xxdz cc<|j| |j| F|}~|syt |dj t fd|DsJd| D cic]} | tj| c} t |} g}g}|r@fd}t| j|d}|j|| tz} |D cgc]} | |k7r| nd}} t||D]?\} }| j|||| \}}|j||j|Adj|}dj|}| ||fScc} wcc} w) NrE)rrrrc3NK|]}t|jk(ywr)rPr)r5vns rr7z-compileTupleVariationStore..s$$%AMMas"%z#Variation sets have different sizesc@|d}|d}t||dz zS)NrrE)rP)pnpointSetcountcompiledPointss rrz'compileTupleVariationStore..keys.!uHqEE~h/0EAI> >rrr)rwrg)r rQr0rnrPrrrrkrBr#TUPLES_SHARE_POINT_NUMBERSrr}r!)r pointCountrWsharedTupleIndicesuseSharedPointsrg newVariations pointDatas sharedPoints pointSetCountr$rr(tupleVariationCounttuplesrrr. thisTuplethisDatar*r%s @@rcompileTupleVariationStorer7s MJL $M "" > f"Q&! "J  JqM % %&A )3 -,-  JW=E...x88Nj/ F D ? =..0c:1=  N<0199 ! #)L"8vcAJ J +1ii (AL(  8  i  H XXf F 88D>D  ,,I*s FF#c t|}g} |tzdk7rtj||||\} }ng} t |t zD]q} t jd|||dz\} } tj| |}||||z}|||| z}| jt||| ||||||z }|| z }s| S)Nrrir) rPr+rrrTUPLE_COUNT_MASKrtrrrndecompileTupleVariation_)rrWr3r, sharedTuplesrrdataPosnumAxesrr1rdataSizer{ tupleSizerxpointDeltaDatas rdecompileTupleVariationStorerAs(mG F88Q> . ? ? gx!  g &)99 : --tC#'/BC%"00@ sY/ g((:; $   y8#$ Mrc|dvsJ|tjd|ddd}d}|tzdk(r ||tz} ntj |||\} }|t zdk7r5tj |||\} }tj |||\} }nt| \} } i} |D]} | | | | | | f}|dk7s|| | <d}|tzdk7rtj||||\}}n|}dg|z}|dk(rLtjt|||\}}t||D]\}}d|cxkr|ksn|||<nw|dk(rrtjt|||\}}tjt|||\}}t|||D]\}}}d|cxkr|ksn||f||<t | |S) Nrz>HrCrrrrr) rtrrmTUPLE_INDEX_MASKrrrp inferRegion_rqrrrPr)r,r;r1rrWrrxr{rpeakstartendrr@regionrr deltas_cvtr.rDdeltas_xdeltas_yrGrHs rr:r:7s ' '11 ' MM$Qq *1 -E C ##)E$445"228T3G c ##)#33HdCH s!11(D#FS!$' s D td4j#d)3 _ $DJ  C %%!+$55  3 Vj F6(99#f+yRUV CFJ/ "HAuA" "!q  " V &77F YPST #&77F YPST #68X6 #GAq!A" "Fq  # $ ''rc~ii}}|jD]#\}}t|d||<t|d||<%||fS)aInfer start and end for a (non-intermediate) region This helper function computes the applicability region for variation tuples whose INTERMEDIATE_REGION flag is not set in the TupleVariationHeader structure. Variation tuples apply only to certain regions of the variation space; outside that region, the tuple has no effect. To make the binary encoding more compact, TupleVariationHeaders can omit the intermediateStartTuple and intermediateEndTuple fields. r=)r#rArB)rErFrGr@r%s rrDrDesPR3Ezz|$ e%od sOD $ 3<rr ),fontTools.misc.fixedToolsrrrrrrNrr`rfontTools.misc.textToolsrr collectionsr r iologgingrtrrmrprqrrrrrrrr+r9rC getLoggerr rRobjectrrr!r7rAr:rDr3rrrTs. ,  #g!C VC L1A10D 4* H-H-V$N+(\r