+
    5i%                       ^ RI Ht ^ RIHt ^ RIHt ^ RIHt ^ RIH	t	 ^ RI
HtHtHtHt ^ RIt^ RIt]P"                  '       d   ^ RIHt ]]]]3,          R	3,          t R
 R lt ! R R4      t] ! R R4      4       tR# )    )annotations)Mapping)	dataclass)DesignSpaceDocument)TTFont)VariationModelnoRoundnormalizeValuepiecewiseLinearMapN)Self.c                    V ^8  d   QhRRRR/# )   locationMapping[str, float]returnLocationTuple )formats   "e/Users/agent/.openclaw/workspace/venv/lib/python3.14/site-packages/fontTools/feaLib/variableScalar.py__annotate__r      s     + +* +} +    c                F    \        \        V P                  4       4      4      # )z;Create a hashable location from a dictionary-like location.)tuplesorteditems)r   s   &r   Locationr      s    ()**r   c                  d    ] tR t^t$ RtR]R&    RR ltR t]R R l4       t	R	 R
 lt
RR ltRtR# )VariableScalarzFA scalar with different values at different points in the designspace.zdict[LocationTuple, int]valuesNc                	    T;'       g    / P                  4        UUu/ uF  w  r#\        V4      VbK  	  uppV n        . V n        R # u uppi N)r   r   r   axes)selflocation_valuer   values   &&  r   __init__VariableScalar.__init__%   sN     %3$8$8b#?#?#A
#A X%#A
 	
s   Ac                	p   . pV P                   P                  4        Fr  w  r#R P                  V UUu. uF6  w  rET R\        V4      P	                  4       '       d   \        V4      MT 2NK8  	  upp4      pVP                  RWc3,          4       Kt  	  RRP                  V4      ,           R,           # u uppi ),=z%s:%i( ))r   r   joinfloat
is_integerintappend)r#   r   r   r%   axcoordlocs   &      r   __repr__VariableScalar.__repr__.   s    #{{002OH(( &.%-	 d!%,*A*A*C*CCJOP%-C LLC</0  3 chhuo&,,s   <B2c                   V ^8  d   QhRR/# )r   r   boolr   )r   s   "r   r   VariableScalar.__annotate__;   s     7 74 7r   c                	   a \        V P                  P                  4       4      o\        ;QJ d&    V3R  lSR,           4       F  '       g   K   R# 	  R# ! V3R  lSR,           4       4      # )c              3  :   <"   T F  qS^ ,          8g  x  K  	  R# 5i)r   Nr   ).0vr   s   & r   	<genexpr>+VariableScalar.does_vary.<locals>.<genexpr>=   s     6:aq	>:s   :   NNTF)listr   any)r#   r   s   &@r   	does_varyVariableScalar.does_vary:   sK    dkk((*+s66":6ss6s6s66":666r   c                    V ^8  d   QhRRRR/# )r   r   r   r%   r1   r   )r   s   "r   r   r:   ?   s     0 0"5 0c 0r   c                	4    W P                   \        V4      &   R # r!   )r   r   )r#   r   r%   s   &&&r   	add_valueVariableScalar.add_value?   s    */HX&'r   c           	        \         P                  ! R\        ^R7       V P                  '       g   \	        R4      h\        V P                   Uu/ uF1  pVP                  VP                  VP                  VP                  3bK3  	  upVf   / M\        VP                  4      Ve   TM/ R7      pVP                  W4      # u upi )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()axis_triplesaxis_mappingsmodel_cache)warningswarnDeprecationWarningr"   
ValueErrorVariableScalarBuilderaxisTagminValuedefaultValuemaxValuedictsegmentsadd_to_variation_store)r#   store_builderrO   avarr3   builders   &&&&  r   r[   %VariableScalar.add_to_variation_storeB   s    J		
 yyy+  ( ))#B 

R[["//2;;GG# "&243F'2'>B
 --dBBs   7B?)r"   r   r!   )NN)__name__
__module____qualname____firstlineno____doc____annotations__r&   r6   propertyrD   rH   r[   __static_attributes__r   r   r   r   r      s?    P$$%
- 7 70C Cr   r   c                      ] tR t^Zt$ RtR]R&    R]R&    R]R&    ]R R	 l4       t]R
 R l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 R ltRtR# )rT   z|A helper class for building variable scalars, or otherwise interrogating
their variation model for interpolation or similar.z%dict[str, tuple[float, float, float]]rM   z dict[str, Mapping[float, float]]rN   z/dict[tuple[LocationTuple, ...], VariationModel]rO   c                    V ^8  d   QhRRRR/# )r   ttfr   r   r   r   )r   s   "r   r   "VariableScalarBuilder.__annotate__k   s     
 
6 
d 
r   c           	     	Z   T ! VR ,          P                    Uu/ uF1  pVP                  VP                  VP                  VP                  3bK3  	  upVP                  R4      ;pf	   / / R7      # VP                  P                  4        UUu/ uF  w  r$W$bK	  	  upp/ R7      # u upi u uppi )fvarr]   rL   )r"   rU   rV   rW   rX   getrZ   r   )clsrj   axisr]   rZ   s   &&   r   from_ttfVariableScalarBuilder.from_ttfj   s      K,,,D t}}d.?.?OO,  GGFO+D4  
 	
 <@==;N;N;PQ;Pdn;PQ
 	
 Rs   7B"B'c                    V ^8  d   QhRRRR/# )r   docr   r   r   r   )r   s   "r   r   rk   z   s     
 
#6 
4 
r   c                	   T ! VP                    Uu/ uF1  pVP                  VP                  VP                  VP                  3bK3  	  upVP                    UUUu/ uF  pVP
                  '       g   K  VP                  VP
                   UUu/ uF  w  r4\        W2P                  VP                  VP                  34      \        VVP                  VP                  4      VP                  VP                  4      VP                  VP                  4      34      bK  	  uppbK  	  uppp/ R 7      # u upi u uppi u upppi )rL   )r"   tagminimumdefaultmaximummapr
   map_forward)ro   rt   rp   userdesigns   &&   r   from_designspace&VariableScalarBuilder.from_designspacey   s$     HH$D 4<<t||DD$$  HH %D88 )- )1 #||T\\4<<H% ,,T\\: ,,T\\: ,,T\\:	 )1  %" -
 	

s$   7D0D;3D;BD5D;5D;c                    V ^8  d   QhRRRR/# )r   r   r   r   r   )r   s   "r   r   rk      s       - r   c                    / pV F,  w  r4W0P                   9  d   \        RV: RV: 24      hWBV&   K.  	  V P                   P                  4        F  w  pw  rVpW29  g   K  WbV&   K  	  \        V4      # )zkValidate and fully-specify a user-space location by filling in
missing axes with their user-space defaults.zUnknown axis z in )rM   rS   r   r   )r#   r   fullaxtagr%   _axis_defaults   &&     r   _fully_specify_location-VariableScalarBuilder._fully_specify_location   sw     $LE--- E8!LMMK %
 ,0+<+<+B+B+D'E'AQ *U ,E ~r   c                    V ^8  d   QhRRRR/# )r   r   r   r   zdict[str, float]r   )r   s   "r   r   rk      s      M >N r   c                    / pV FV  w  r4V P                   V,          w  rVp\        WEWg34      pV P                  P                  V4      p	V	e   \	        W4      pWV&   KX  	  V# )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).
)rM   r
   rN   rn   r   )
r#   r   resultr   r%   axis_minr   axis_max
normalizedmappings
   &&        r   _normalize_location)VariableScalarBuilder._normalize_location   sm     $LE/3/@/@/G,HH',/QRJ((,,U3G"/
D
&5M % r   c                    V ^8  d   QhRRRR/# )r   scalarr   r   zlist[tuple[LocationTuple, int]]r   )r   s   "r   r   rk      s     	
 	
$	
	(	
r   c                    VP                   P                  4        UUu. uF  w  r#V P                  V4      V3NK  	  upp# u uppi )zrReturn a list of (fully-specified user-space location, value) pairs,
preserving order and length of scalar.values.)r   r   r   )r#   r   r5   vals   &&  r   _full_locations_and_values0VariableScalarBuilder._full_locations_and_values   sH     #MM//1
1 ))#.41
 	
 
s   A c                    V ^8  d   QhRRRR/# )r   r   r   r   r1   r   )r   s   "r   r   rk      s     
= 
=N 
=s 
=r   c           
         \        V P                  P                  4        UUUu/ uF  w  pw  r4q2VbK  	  uppp4      pV P                  V4       F  w  rgWe8X  g   K  Vu # 	  \	        R4      hu upppi )z+Get the default value of a variable scalar.z Default value could not be found)r   rM   r   r   rS   )r#   r   rv   r   rx   default_locr   r%   s   &&      r   default_value#VariableScalarBuilder.default_value   su     6:6G6G6M6M6OP6O2c?A'\6OP
  $>>vFOH&  G ;<< Qs   A-c               $    V ^8  d   QhRRRRRR/# )r   r   r   r   r   r   r/   r   )r   s   "r   r   rk      s$      $0=	r   c                *   V P                  V4      pV P                  V4      pV F  w  rEWB8X  g   K  Vu # 	  V UUu. uF  w  reVNK	  	  pppV P                  V4      pV P                  V4      P	                  W4      p	V	f   \        R4      hV	# u uppi )z7Interpolate the value of a scalar from a user-location.z,Insufficient number of values to interpolate)r   r   r   modelinterpolateFromMastersrS   )
r#   r   r   pairsr5   r   r   r   normalized_locationr%   s
   &&&       r   value_at_location'VariableScalarBuilder.value_at_location   s    
 //9//7 HC
  %**E&!#E*"66x@

6"99:MV=KLL +s   Bc                    V ^8  d   QhRRRR/# )r   r   r   r   r   r   )r   s   "r   r   rk      s      N ~ r   c                   V P                  V4      p\        ;QJ d    . R V 4       F  NK  	  5M! R V 4       4      pV P                  P                  V4      pVe   V# V UUu. uF  w  rVV P	                  V4      NK  	  ppp\        V P                  P                  4       4      p\        WxR7      ;qP                  V&   V	# u uppi )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.c              3  *   "   T F	  w  rVx  K  	  R # 5ir!   r   )r=   r5   r   s   &  r   r?   .VariableScalarBuilder.model.<locals>.<genexpr>   s     2E&##Es   )	axisOrder)	r   r   rO   rn   r   rB   rM   keysr   )
r#   r   r   	cache_keycached_modelr5   r   normalized_locationsr   r   s
   &&        r   r   VariableScalarBuilder.model   s     //7E2E2EE2E22	''++I6#LQRE&# 8 8 =ER**//12	.< /
 	
  +   Ss   $Cc                   V ^8  d   QhRR/# )r   r   r   r   )r   s   "r   r   rk      s     L Ln Lr   c                    \        VP                  P                  4       4      pV P                  V4      P                  V\        R7      # )zACalculate deltas and supports from this scalar's variation model.round)rB   r   r   getDeltasAndSupportsr   )r#   r   r   s   && r   get_deltas_and_supports-VariableScalarBuilder.get_deltas_and_supports   s8    fmm**,-zz&!66vU6KKr   c                    V ^8  d   QhRRRR/# )r   r   r   r   ztuple[int, int]r   )r   s   "r   r   rk      s     6 6$6	6r   c                    V P                  V4      w  r4VP                  V4       VP                  V\        R7      p\	        V P                  V4      4      V3# )zdSerialize this scalar's variation model to a store, returning the
default value and variation index.r   )r   setSupportsstoreDeltasr	   r1   r   )r#   r   r\   deltassupportsindexs   &&&   r   r[   ,VariableScalarBuilder.add_to_variation_store   sW      77?!!(+))&)@ 4%%f-.55r   r   N)r`   ra   rb   rc   rd   re   classmethodrq   r~   r   r   r   r   r   r   r   r[   rg   r   r   r   rT   rT   Z   s    ; 87J33 A@L 
 
 
 
4 $	

=,*L
6 6r   rT   )
__future__r   collections.abcr   dataclassesr   fontTools.designspaceLibr   fontTools.ttLib.ttFontr   fontTools.varLib.modelsr   r	   r
   r   typingrP   TYPE_CHECKINGr   r   strr/   r   r   r   rT   r   r   r   <module>r      s~    " # ! 8 )   	eCJ',- +
9C 9Cx n6 n6 n6r   