§
    ¢”jÇ%  ã                  óö   — d dl mZ d dlmZ d dlmZ d dlmZ d dlm	Z	 d dl
mZmZmZmZ d dlZd dlZej        rd dlmZ eeeef         d	f         Z	 dd„Z G d„ d¦  «        Ze G d„ d¦  «        ¦   «         ZdS )é    )Úannotations)ÚMapping)Ú	dataclass)ÚDesignSpaceDocument)ÚTTFont)ÚVariationModelÚnoRoundÚnormalizeValueÚpiecewiseLinearMapN)ÚSelf.ÚlocationúMapping[str, float]ÚreturnÚLocationTuplec                ó^   — t          t          |                      ¦   «         ¦  «        ¦  «        S )z;Create a hashable location from a dictionary-like location.)ÚtupleÚsortedÚitems)r   s    ún/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/fontTools/feaLib/variableScalar.pyÚLocationr      s"   € å•˜ŸšÑ(Ô(Ñ)Ô)Ñ*Ô*Ð*ó    c                  óV   — e Zd ZU dZded<   	 dd„Zd„ Zedd	„¦   «         Zdd„Z	dd„Z
dS )ÚVariableScalarzFA scalar with different values at different points in the designspace.zdict[LocationTuple, int]ÚvaluesNc                ó^   — d„ |pi                       ¦   «         D ¦   «         | _        g | _        d S )Nc                ó4   — i | ]\  }}t          |¦  «        |“ŒS © )r   )Ú.0r   Úvalues      r   ú
<dictcomp>z+VariableScalar.__init__.<locals>.<dictcomp>&   s6   € ð 
ð 
ð 
á�˜%õ �XÑÔ ð
ð 
ð 
r   )r   r   Úaxes)ÚselfÚlocation_values     r   Ú__init__zVariableScalar.__init__%   s@   € ð
ð 
à$2Ð$8°b×#?Ò#?Ñ#AÔ#Að
ñ 
ô 
ˆŒð ˆŒ	ˆ	ˆ	r   c                óì   — g }| j                              ¦   «         D ]>\  }}d                     d„ |D ¦   «         ¦  «        }|                     d||fz  ¦  «         Œ?dd                     |¦  «        z   dz   S )Nú,c                ó‚   — g | ]<\  }}|› d t          |¦  «                             ¦   «         rt          |¦  «        n|› �‘Œ=S )ú=)ÚfloatÚ
is_integerÚint)r   ÚaxÚcoords      r   ú
<listcomp>z+VariableScalar.__repr__.<locals>.<listcomp>2   s[   € ð ð ð á!˜˜Eð ÐPÐP­%°©,¬,×*AÒ*AÑ*CÔ*CÐN�C ™JœJ˜JÈÐPÐPðð ð r   z%s:%iú(ú ú))r   r   ÚjoinÚappend)r"   r   r   r   Úlocs        r   Ú__repr__zVariableScalar.__repr__.   s‘   € ØˆØ#œ{×0Ò0Ñ2Ô2ð 	1ð 	1‰OˆH�eØ—(’(ðð à%-ðñ ô ñô ˆCð �LŠL˜ C¨ <Ñ/Ñ0Ô0Ð0Ð0Ø�c—h’h˜u‘o”oÑ&¨Ñ,Ð,r   r   Úboolc                ó–   ‡— t          | j                             ¦   «         ¦  «        Št          ˆfd„‰dd …         D ¦   «         ¦  «        S )Nc              3  ó0   •K  — | ]}|‰d          k    V — ŒdS )r   Nr   )r   Úvr   s     €r   ú	<genexpr>z+VariableScalar.does_vary.<locals>.<genexpr>=   s+   øè è € Ð6Ð6 a�1˜˜qœ	’>Ð6Ð6Ð6Ð6Ð6Ð6r   é   )Úlistr   Úany)r"   r   s    @r   Ú	does_varyzVariableScalar.does_vary:   sI   ø€ å�d”k×(Ò(Ñ*Ô*Ñ+Ô+ˆÝÐ6Ð6Ð6Ð6¨6°!°"°"¬:Ð6Ñ6Ô6Ñ6Ô6Ð6r   r   r   r   r+   c                ó4   — || j         t          |¦  «        <   d S ©N)r   r   )r"   r   r   s      r   Ú	add_valuezVariableScalar.add_value?   s   € Ø*/ˆŒ•H˜XÑ&Ô&Ñ'Ð'Ð'r   c                ó  — t          j        dt          d¬¦  «         | j        st	          d¦  «        ‚t          d„ | j        D ¦   «         |€i nt          |j        ¦  «        |�|ni ¬¦  «        }|                     | |¦  «        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()c                óB   — i | ]}|j         |j        |j        |j        f“ŒS r   ©ÚaxisTagÚminValueÚdefaultValueÚmaxValue)r   r,   s     r   r    z9VariableScalar.add_to_variation_store.<locals>.<dictcomp>P   s9   € ð ð ð àð ”
˜Rœ[¨"¬/¸2¼;ÐGðð ð r   N©Úaxis_triplesÚaxis_mappingsÚmodel_cache)	ÚwarningsÚwarnÚDeprecationWarningr!   Ú
ValueErrorÚVariableScalarBuilderÚdictÚsegmentsÚadd_to_variation_store)r"   Ústore_builderrN   ÚavarÚbuilders        r   rV   z%VariableScalar.add_to_variation_storeB   s¹   € åŒðJåØð		
ñ 	
ô 	
ð 	
ð Œyð 	Ýð+ñô ð õ (ðð àœ)ðñ ô ð "& ˜2˜2µ4¸¼Ñ3FÔ3FØ'2Ð'>˜˜ÀBð
ñ 
ô 
ˆð ×-Ò-¨d°MÑBÔBÐBr   r@   )r   r6   )r   r   r   r+   )NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__r$   r5   Úpropertyr>   rA   rV   r   r   r   r   r      sž   € € € € € € ØPÐPà$Ð$Ð$Ñ$ð%ðð ð ð ð
-ð 
-ð 
-ð ð7ð 7ð 7ñ „Xð7ð0ð 0ð 0ð 0ðCð Cð Cð Cð Cð Cr   r   c                  ó¨   — e Zd ZU dZded<   	 ded<   	 ded<   	 ed#d„¦   «         Zed$d„¦   «         Zd%d„Zd&d„Z	d'd„Z
d(d„Zd)d„Zd*d„Zd+d„Zd,d!„Zd"S )-rS   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]]rL   z dict[str, Mapping[float, float]]rM   z/dict[tuple[LocationTuple, ...], VariationModel]rN   Úttfr   r   r   c                ó¼   —  | d„ |d         j         D ¦   «         |                     d¦  «        x}€i n"d„ |j                             ¦   «         D ¦   «         i ¬¦  «        S )Nc                óB   — i | ]}|j         |j        |j        |j        f“ŒS r   rF   ©r   Úaxiss     r   r    z2VariableScalarBuilder.from_ttf.<locals>.<dictcomp>m   s:   € ð ð ð àð ”˜tœ}¨dÔ.?ÀÄÐOðð ð r   ÚfvarrX   c                ó   — i | ]\  }}||“Œ	S r   r   )r   re   rU   s      r   r    z2VariableScalarBuilder.from_ttf.<locals>.<dictcomp>t   s   € ÐQÐQÐQ©¨¨x�d˜HÐQÐQÐQr   rK   )r!   ÚgetrU   r   )Úclsra   rX   s      r   Úfrom_ttfzVariableScalarBuilder.from_ttfj   s~   € àˆsðð à œKÔ,ðñ ô ð  ŸGšG F™OœOÐ+�DÐ4ð �àQÐQ¸4¼=×;NÒ;NÑ;PÔ;PÐQÑQÔQàð
ñ 
ô 
ð 	
r   Údocr   c                óZ   —  | d„ |j         D ¦   «         d„ |j         D ¦   «         i ¬¦  «        S )Nc                óB   — i | ]}|j         |j        |j        |j        f“ŒS r   )ÚtagÚminimumÚdefaultÚmaximumrd   s     r   r    z:VariableScalarBuilder.from_designspace.<locals>.<dictcomp>|   s9   € ð ð ð àð ”˜4œ<¨¬°t´|ÐDðð ð r   c                óP   ‡— i | ]"Š‰j         ¯	‰j        ˆfd „‰j         D ¦   «         “Œ#S )c                ó  •— i | ]�\  }}t          |‰j        ‰j        ‰j        f¦  «        t          |‰                     ‰j        ¦  «        ‰                     ‰j        ¦  «        ‰                     ‰j        ¦  «        f¦  «        “Œ‚S r   )r
   ro   rp   rq   Úmap_forward)r   ÚuserÚdesignre   s      €r   r    zEVariableScalarBuilder.from_designspace.<locals>.<dictcomp>.<dictcomp>�   s™   ø€ ð ð ð ñ %˜˜fõ #Ø˜tœ|¨T¬\¸4¼<ÐHñô å%Øà ×,Ò,¨T¬\Ñ:Ô:Ø ×,Ò,¨T¬\Ñ:Ô:Ø ×,Ò,¨T¬\Ñ:Ô:ðñô ðð ð r   )Úmaprn   rd   s    @r   r    z:VariableScalarBuilder.from_designspace.<locals>.<dictcomp>€   s_   ø€ ð ð ð ð Ø”8ðØ”ð ð ð ð ð )-¬ðñ ô ðð ð r   rK   )r!   )ri   rk   s     r   Úfrom_designspacez&VariableScalarBuilder.from_designspacey   s^   € àˆsðð àœHðñ ô ðð ð  œHðñ ô ð" ð-
ñ 
ô 
ð 	
r   r   r   c                óÒ   — i }|D ](\  }}|| j         vrt          d|›d|›�¦  «        ‚|||<   Œ)| j                              ¦   «         D ]\  }\  }}}||vr|||<   Œ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 )rL   rR   r   r   )r"   r   ÚfullÚaxtagr   Ú_Úaxis_defaults          r   Ú_fully_specify_locationz-VariableScalarBuilder._fully_specify_location”   s›   € ð ˆØ$ð 	 ð 	 ‰LˆE�5Ø˜DÔ-Ð-Ð-Ý �j¸E¸E¸EÀ8À8Ð!LÑMÔMÐMØˆD�‰KˆKà+/Ô+<×+BÒ+BÑ+DÔ+Dð 	+ð 	+Ñ'ˆEÑ'�A�| QØ˜DÐ Ð Ø*��U‘øå˜‰~Œ~Ðr   údict[str, float]c                óÄ   — i }|D ]Z\  }}| j         |         \  }}}t          ||||f¦  «        }| j                             |¦  «        }	|	�t	          ||	¦  «        }|||<   Œ[|S )zÉNormalize a user-space location, applying avar mappings if present.

        TODO: This only handles avar1 (per-axis piecewise linear mappings),
        not avar2 (multi-dimensional mappings).
        )rL   r
   rM   rh   r   )
r"   r   Úresultr{   r   Úaxis_minr}   Úaxis_maxÚ
normalizedÚmappings
             r   Ú_normalize_locationz)VariableScalarBuilder._normalize_location¤   s�   € ð ˆØ$ð 	'ð 	'‰LˆE�5Ø/3Ô/@ÀÔ/GÑ,ˆH�l HÝ'¨°¸,ÈÐ/QÑRÔRˆJØÔ(×,Ò,¨UÑ3Ô3ˆGØÐ"Ý/°
¸GÑDÔD�
Ø&ˆF�5‰MˆMàˆr   Úscalarr   úlist[tuple[LocationTuple, int]]c                óN   ‡ — ˆ fd„|j                              ¦   «         D ¦   «         S )zzReturn a list of (fully-specified user-space location, value) pairs,
        preserving order and length of scalar.values.c                óD   •— g | ]\  }}‰                      |¦  «        |f‘ŒS r   )r~   )r   r4   Úvalr"   s      €r   r.   zDVariableScalarBuilder._full_locations_and_values.<locals>.<listcomp>¼   s@   ø€ ð 
ð 
ð 
á��Sð ×)Ò)¨#Ñ.Ô.°Ð4ð
ð 
ð 
r   )r   r   )r"   r‡   s   ` r   Ú_full_locations_and_valuesz0VariableScalarBuilder._full_locations_and_values¶   s<   ø€ ð
ð 
ð 
ð 
à"œM×/Ò/Ñ1Ô1ð
ñ 
ô 
ð 	
r   r+   c                óÊ   — t          d„ | j                             ¦   «         D ¦   «         ¦  «        }|                      |¦  «        D ]\  }}||k    r|c S Œt	          d¦  «        ‚)z+Get the default value of a variable scalar.c                ó"   — i | ]\  }\  }}}||“ŒS r   r   )r   rn   r|   rp   s       r   r    z7VariableScalarBuilder.default_value.<locals>.<dictcomp>Å   s%   € ÐPÐPÐPÑ2˜c¡? A w°ˆS�'ÐPÐPÐPr   z Default value could not be found)r   rL   r   rŒ   rR   )r"   r‡   Údefault_locr   r   s        r   Údefault_valuez#VariableScalarBuilder.default_valueÁ   s€   € õ ØPÐP°dÔ6G×6MÒ6MÑ6OÔ6OÐPÑPÔPñ
ô 
ˆð  $×>Ò>¸vÑFÔFð 	ð 	‰OˆH�eØ˜;Ò&Ð&Ø���ð 'õ Ð;Ñ<Ô<Ð<r   r)   c                ó4  — |                       |¦  «        }|                      |¦  «        }|D ]\  }}||k    r|c S Œd„ |D ¦   «         }|                      |¦  «        }|                      |¦  «                             ||¦  «        }|€t          d¦  «        ‚|S )z7Interpolate the value of a scalar from a user-location.c                ó   — g | ]\  }}|‘ŒS r   r   )r   r|   r‹   s      r   r.   z;VariableScalarBuilder.value_at_location.<locals>.<listcomp>Ú   s   € Ð*Ð*Ð*™&˜!˜S�#Ð*Ð*Ð*r   Nz,Insufficient number of values to interpolate)r~   rŒ   r†   ÚmodelÚinterpolateFromMastersrR   )	r"   r‡   r   Úpairsr4   r‹   r   Únormalized_locationr   s	            r   Úvalue_at_locationz'VariableScalarBuilder.value_at_locationÍ   sº   € ð
 ×/Ò/°Ñ9Ô9ˆØ×/Ò/°Ñ7Ô7ˆð ð 	ð 	‰HˆC�Ø�hŠˆØ�
�
�
ð ð +Ð* EÐ*Ñ*Ô*ˆØ"×6Ò6°xÑ@Ô@Ðà—
’
˜6Ñ"Ô"×9Ò9Ð:MÈvÑVÔVˆØˆ=ÝÐKÑLÔLÐLàˆr   r   c                ó>  ‡ — ‰                       |¦  «        }t          d„ |D ¦   «         ¦  «        }‰ j                             |¦  «        }|�|S ˆ fd„|D ¦   «         }t	          ‰ j                             ¦   «         ¦  «        }t          ||¬¦  «        x}‰ j        |<   |S )z­Return 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  ó    K  — | ]	\  }}|V — Œ
d S r@   r   )r   r4   r|   s      r   r:   z.VariableScalarBuilder.model.<locals>.<genexpr>ê   s&   è è € Ð2Ð2¡& # q˜#Ð2Ð2Ð2Ð2Ð2Ð2r   Nc                ó@   •— g | ]\  }}‰                      |¦  «        ‘ŒS r   )r†   )r   r4   r|   r"   s      €r   r.   z/VariableScalarBuilder.model.<locals>.<listcomp>ð   s+   ø€ ÐRÐRÐRÁ&À#Àq × 8Ò 8¸Ñ =Ô =ÐRÐRÐRr   )Ú	axisOrder)rŒ   r   rN   rh   r<   rL   Úkeysr   )r"   r‡   r•   Ú	cache_keyÚcached_modelÚnormalized_locationsr›   r“   s   `       r   r“   zVariableScalarBuilder.modelã   s»   ø€ ð ×/Ò/°Ñ7Ô7ˆÝÐ2Ð2¨EÐ2Ñ2Ô2Ñ2Ô2ˆ	àÔ'×+Ò+¨IÑ6Ô6ˆØÐ#ØÐàRÐRÐRÐRÈEÐRÑRÔRÐÝ˜Ô*×/Ò/Ñ1Ô1Ñ2Ô2ˆ	Ý.<Ø ¨Ið/
ñ /
ô /
ð 	
ˆ�Ô  Ñ+ð ˆr   c                ó¬   — t          |j                             ¦   «         ¦  «        }|                      |¦  «                             |t          ¬¦  «        S )zACalculate deltas and supports from this scalar's variation model.©Úround)r<   r   r“   ÚgetDeltasAndSupportsr¢   )r"   r‡   r   s      r   Úget_deltas_and_supportsz-VariableScalarBuilder.get_deltas_and_supportsø   sB   € å�f”m×*Ò*Ñ,Ô,Ñ-Ô-ˆØ�zŠz˜&Ñ!Ô!×6Ò6°vÅUÐ6ÑKÔKÐKr   útuple[int, int]c                óÜ   — |                       |¦  «        \  }}|                     |¦  «         |                     |t          ¬¦  «        }t	          |                      |¦  «        ¦  «        |fS )zlSerialize this scalar's variation model to a store, returning the
        default value and variation index.r¡   )r¤   ÚsetSupportsÚstoreDeltasr	   r+   r�   )r"   r‡   rW   ÚdeltasÚsupportsÚindexs         r   rV   z,VariableScalarBuilder.add_to_variation_storeý   sk   € ð  ×7Ò7¸Ñ?Ô?Ñˆ�Ø×!Ò! (Ñ+Ô+Ð+Ø×)Ò)¨&½Ð)Ñ@Ô@ˆõ �4×%Ò% fÑ-Ô-Ñ.Ô.°Ð5Ð5r   N)ra   r   r   r   )rk   r   r   r   )r   r   r   r   )r   r   r   r   )r‡   r   r   rˆ   )r‡   r   r   r+   )r‡   r   r   r   r   r)   )r‡   r   r   r   )r‡   r   )r‡   r   r   r¥   )rZ   r[   r\   r]   r^   Úclassmethodrj   rx   r~   r†   rŒ   r�   r—   r“   r¤   rV   r   r   r   rS   rS   Z   s;  € € € € € € ð;ð ;ð 8Ð7Ð7Ñ7ØJØ3Ð3Ð3Ñ3ðð AÐ@Ð@Ñ@ðLð ð
ð 
ð 
ñ „[ð
ð ð
ð 
ð 
ñ „[ð
ð4ð ð ð ð ð ð ð ð$	
ð 	
ð 	
ð 	
ð
=ð 
=ð 
=ð 
=ðð ð ð ð,ð ð ð ð*Lð Lð Lð Lð
6ð 6ð 6ð 6ð 6ð 6r   rS   )r   r   r   r   )Ú
__future__r   Úcollections.abcr   Údataclassesr   ÚfontTools.designspaceLibr   ÚfontTools.ttLib.ttFontr   ÚfontTools.varLib.modelsr   r	   r
   r   ÚtypingrO   ÚTYPE_CHECKINGr   r   Ústrr)   r   r   r   rS   r   r   r   ú<module>r¶      st  ðØ "Ð "Ð "Ð "Ð "Ð "à #Ð #Ð #Ð #Ð #Ð #Ø !Ð !Ð !Ð !Ð !Ð !à 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø )Ð )Ð )Ð )Ð )Ð )ðð ð ð ð ð ð ð ð ð ð ð ð €€€Ø €€€à	Ôð ØÐÐÐÐÐà�e˜C ˜JÔ'¨Ð,Ô-€Ø ð+ð +ð +ð +ð
9Cð 9Cð 9Cð 9Cð 9Cñ 9Cô 9Cð 9Cðx ðn6ð n6ð n6ð n6ð n6ñ n6ô n6ñ „ðn6ð n6ð n6r   