)Ej&ddlmZddlmZddlmZddlmZddlm Z ddl m Z m Z m Z mZddlZddlZejrddlmZeeeefd fZ ddZGddZeGddZdS)) annotations)Mapping) dataclass)DesignSpaceDocument)TTFont)VariationModelnoRoundnormalizeValuepiecewiseLinearMapN)Self.locationMapping[str, float]return LocationTuplec^tt|S)z;Create a hashable location from a dictionary-like location.)tuplesorteditems)r s QC:\PYTHON\MyICR_Suite\python\Lib\site-packages\fontTools/feaLib/variableScalar.pyLocationrs" (()) * **cVeZdZUdZded< ddZdZedd ZddZ ddZ dS)VariableScalarzFA scalar with different values at different points in the designspace.zdict[LocationTuple, int]valuesNc^d|piD|_g|_dS)Nc4i|]\}}t||S)r).0r values r z+VariableScalar.__init__..&s6   % X     r)rraxes)selflocation_values r__init__zVariableScalar.__init__%s@  $2$8b#?#?#A#A     rcg}|jD]>\}}dd|D}|d||fz?dd|zdzS)N,cg|]<\}}|dt|rt|n|=S)=)float is_integerint)raxcoords r z+VariableScalar.__repr__..2s[!EPP%,,*A*A*C*CNCJJJPPrz%s:%i( ))rrjoinappend)r"rr rlocs r__repr__zVariableScalar.__repr__.s#{0022 1 1OHe((%-C LLC</ 0 0 0 0chhuoo&,,rrboolct|jtfdddDS)Nc30K|]}|dkVdS)rNr)rvrs r z+VariableScalar.does_vary..=s+66a1q >666666r)listrany)r"rs @r does_varyzVariableScalar.does_vary:sIdk((**++66666!"":666666rr rrr+c4||jt|<dSN)rr)r"r rs r add_valuezVariableScalar.add_value?s*/ HX&&'''rctjdtd|jst dt d|jD|int |j||ni}|||S)zGDeprecated: use VariableScalarBuilder.add_to_variation_store() instead.zrVariableScalar.add_to_variation_store() is deprecated. Use VariableScalarBuilder.add_to_variation_store() instead.) stacklevelzP.axes must be defined on variable scalar before calling add_to_variation_store()cBi|]}|j|j|j|jfSraxisTagminValue defaultValuemaxValue)rr,s rr z9VariableScalar.add_to_variation_store..Ps9 R["/2;GrN axis_triples axis_mappings model_cache) warningswarnDeprecationWarningr! ValueErrorVariableScalarBuilderdictsegmentsadd_to_variation_store)r" store_builderrNavarbuilders rrVz%VariableScalar.add_to_variation_storeBs  J      y + ()"&224 3F3F'2'> B    --dMBBBrr@)rr6)r rrr+)NN) __name__ __module__ __qualname____doc____annotations__r$r5propertyr>rArVrrrrrsPP$$$$% - - -777X70000CCCCCCrrceZdZUdZded< ded< ded< ed#d Zed$dZd%dZd&dZ d'dZ d(dZ d)dZ d*dZ d+dZd,d!Zd"S)-rSzA helper class for building variable scalars, or otherwise interrogating their variation model for interpolation or similar.z%dict[str, tuple[float, float, float]]rLz dict[str, Mapping[float, float]]rMz/dict[tuple[LocationTuple, ...], VariationModel]rNttfrrr c|d|djD|dx}in"d|jDiS)NcBi|]}|j|j|j|jfSrrFraxiss rr z2VariableScalarBuilder.from_ttf..ms: t}d.?OrfvarrXci|]\}}|| Srr)rrerUs rr z2VariableScalarBuilder.from_ttf..tsQQQxdHQQQrrK)r!getrUr)clsrarXs rfrom_ttfzVariableScalarBuilder.from_ttfjs~sK,  GGFOO+D4QQ4=;N;N;P;PQQQ    rdocrcZ|d|jDd|jDiS)NcBi|]}|j|j|j|jfSr)tagminimumdefaultmaximumrds rr z:VariableScalarBuilder.from_designspace..|s94<t|DrcPi|]"j jfdjD#S)c i|]\}}t|jjjft|jjjfSr)r rorprq map_forward)ruserdesignres rr zEVariableScalarBuilder.from_designspace...s   %f#t|T\4<H% ,,T\:: ,,T\:: ,,T\::   r)maprnrds @rr z:VariableScalarBuilder.from_designspace..s_8    )-   rrK)r!)rirks rfrom_designspacez&VariableScalarBuilder.from_designspaceys^sH H"-    rr rci}|D](\}}||jvrtd|d||||<)|jD]\}\}}}||vr|||<t|S)zsValidate and fully-specify a user-space location by filling in missing axes with their user-space defaults.z Unknown axis z in )rLrRrr)r"r fullaxtagr_ axis_defaults r_fully_specify_locationz-VariableScalarBuilder._fully_specify_locations$  LE5D--- jEEE88!LMMMDKK+/+<+B+B+D+D + + 'E'A|QD  *U ~~rdict[str, float]ci}|D]Z\}}|j|\}}}t||||f}|j|} | t || }|||<[|S)zNormalize a user-space location, applying avar mappings if present. TODO: This only handles avar1 (per-axis piecewise linear mappings), not avar2 (multi-dimensional mappings). )rLr rMrhr ) r"r resultr{raxis_minr}axis_max normalizedmappings r_normalize_locationz)VariableScalarBuilder._normalize_locations$ ' 'LE5/3/@/G ,HlH',/QRRJ(,,U33G"/ GDD &F5MM rscalarrlist[tuple[LocationTuple, int]]cNfd|jDS)zzReturn a list of (fully-specified user-space location, value) pairs, preserving order and length of scalar.values.cDg|]\}}||fSr)r~)rr4valr"s rr.zDVariableScalarBuilder._full_locations_and_values..s@   S ) )# . . 4   r)rr)r"rs` r_full_locations_and_valuesz0VariableScalarBuilder._full_locations_and_valuess<     "M//11    rr+ctd|jD}||D]\}}||kr|cSt d)z+Get the default value of a variable scalar.c"i|] \}\}}}|| Srr)rrnr|rps rr z7VariableScalarBuilder.default_value..s% P P P2c?AwS' P P Prz Default value could not be found)rrLrrrR)r"r default_locr rs r default_valuez#VariableScalarBuilder.default_values P Pd6G6M6M6O6O P P P   $>>vFF  OHe;&& ';<<.s***&!S#***rNz,Insufficient number of values to interpolate)r~rrmodelinterpolateFromMastersrR) r"rr pairsr4rrnormalized_locationrs rvalue_at_locationz'VariableScalarBuilder.value_at_locations //99//77  HCh +*E***"66x@@ 6""99:MvVV =KLL L rrc>|}td|D}j|}||Sfd|D}t j}t||x}j|<|S)zReturn a variation model based on a scalar's values. Variable scalars with the same fully-specified user-locations will use the same cached variation model.c3 K|] \}}|V dSr@r)rr4r|s rr:z.VariableScalarBuilder.model..s&22&#q#222222rNc@g|]\}}|Sr)r)rr4r|r"s rr.z/VariableScalarBuilder.model..s+RRR&#q 8 8 = =RRRr) axisOrder)rrrNrhr<rLkeysr)r"rr cache_key cached_modelnormalized_locationsrrs` rrzVariableScalarBuilder.models //7722E22222 '++I66  # RRRRERRR*//1122 .< I/ / /   + rct|j}|||tS)zACalculate deltas and supports from this scalar's variation model.round)r<rrgetDeltasAndSupportsr)r"rrs rget_deltas_and_supportsz-VariableScalarBuilder.get_deltas_and_supportssBfm**,,--zz&!!66vU6KKKrtuple[int, int]c||\}}||||t}t |||fS)zlSerialize this scalar's variation model to a store, returning the default value and variation index.r)r setSupports storeDeltasr r+r)r"rrWdeltassupportsindexs rrVz,VariableScalarBuilder.add_to_variation_storesk  77??!!(+++))&)@@4%%f--..55rN)rarrr )rkrrr )r rrr)r rrr)rrrr)rrrr+)rrr rrr))rrrr)rr)rrrr)rZr[r\r]r^ classmethodrjrxr~rrrrrrrVrrrrSrSZs;;;8777J3333A@@@L    [     [ 4 $      = = = =,*LLLL 6 6 6 6 6 6rrS)r rrr) __future__rcollections.abcr dataclassesrfontTools.designspaceLibrfontTools.ttLib.ttFontrfontTools.varLib.modelsrr r r typingrO TYPE_CHECKINGr rstrr)rrrrSrrrrst""""""######!!!!!!888888))))))  eCJ',- ++++ 9C9C9C9C9C9C9C9Cx n6n6n6n6n6n6n6 n6n6n6r