o
    nĎih                     @   s.   d dl mZmZmZ dd ZG dd dZdS )    )VariationModelnormalizeValuepiecewiseLinearMapc                 C   s   t t|  S N)tuplesorteditems)loc r
   [/home/jeff/fluffinator/venv/lib/python3.10/site-packages/fontTools/feaLib/variableScalar.pyLocation   s   r   c                   @   s   e Zd ZdZi fddZdd Zedd Zedd	 Zd
d Z	dd Z
dd Zdd Zedd ZdddZdddZdddZdddZdS )VariableScalarzFA scalar with different values at different points in the designspace.c                 C   s.   i | _ i | _| D ]
\}}| || q
d S r   )valuesaxesr   	add_value)selflocation_valuelocationvaluer
   r
   r   __init__   s
   zVariableScalar.__init__c                 C   sP   g }| j  D ]\}}ddd |D }|d||f  qdd| d S )N,c                 S   s2   g | ]\}}| d t | rt|n| qS )=)float
is_integerint).0axcoordr
   r
   r   
<listcomp>   s     z+VariableScalar.__repr__.<locals>.<listcomp>z%s:%i( ))r   r   joinappend)r   r   r   r   r	   r
   r
   r   __repr__   s   zVariableScalar.__repr__c                    s,   t | j  t fdd dd  D S )Nc                 3   s    | ]	}| d  kV  qdS )r   Nr
   )r   vr   r
   r   	<genexpr>    s    z+VariableScalar.does_vary.<locals>.<genexpr>   )listr   anyr   r
   r&   r   	does_vary   s   zVariableScalar.does_varyc                 C   s   | j stddd | j D S )Nz=.axes must be defined on variable scalar before interpolatingc                 S   s   i | ]}|j |qS r
   )axisTagr   r   r
   r
   r   
<dictcomp>(   s    z,VariableScalar.axes_dict.<locals>.<dictcomp>)r   
ValueErrorr+   r
   r
   r   	axes_dict"   s
   zVariableScalar.axes_dictc                 C   sf   |  |}i }| D ]#}|| jvrtd||f | j| }t|| |j|j|jf||< qt|S )NzUnknown axis %s in %s)	fix_locationkeysr1   r0   r   minValuedefaultValuemaxValuer   )r   r   normalized_locationaxtagaxisr
   r
   r   _normalized_location*   s   



z#VariableScalar._normalized_locationc                 C   s2   t |}| j D ]\}}||vr|j||< q	|S r   )dictr1   r   r5   )r   r   tagr9   r
   r
   r   r2   7   s   
zVariableScalar.fix_locationc                 C   s"   | j r| |}|| jt|< d S r   )r   r2   r   r   )r   r   r   r
   r
   r   r   >   s   
zVariableScalar.add_valuec                    s    fdd j  D  _ d S )Nc                    s    i | ]\}}t  ||qS r
   )r   r2   )r   lr%   r+   r
   r   r/   E   s    z4VariableScalar.fix_all_locations.<locals>.<dictcomp>)r   r   r+   r
   r+   r   fix_all_locationsD   s   
z VariableScalar.fix_all_locationsc                 C   s8   |    tdd | jD }|| jvrtd| j| S )Nc                 S   s   i | ]}|j |jqS r
   )r-   r5   r.   r
   r
   r   r/   L   s    z*VariableScalar.default.<locals>.<dictcomp>z Default value could not be found)r>   r   r   r   r0   )r   keyr
   r
   r   defaultI   s
   

zVariableScalar.defaultNc                 C   sP   t |}|| j v r| j| S t| j }t| |}| ||||S r   )r   r   r3   r)   r;   r:   modelinterpolateFromMasters)r   r   model_cacheavarr	   r   r
   r
   r   value_at_locationR   s   
z VariableScalar.value_at_locationc                    sz   |d urt j }||v r|| S fddj D }|d ur/|j  fdd|D }t|}|d ur;|||< |S )Nc                    s   g | ]	}t  |qS r
   )r;   r:   )r   kr+   r
   r   r   _   s    z(VariableScalar.model.<locals>.<listcomp>c                    s"   g | ]} fd d|  D qS )c                    s,   i | ]\}}|| v rt | | n|qS r
   )r   )r   rF   r%   mappingr
   r   r/   c   s    z3VariableScalar.model.<locals>.<listcomp>.<dictcomp>)r   )r   r   rG   r
   r   r   b   s    
)r   r   r3   segmentsr   )r   rC   rD   r?   	locationsmr
   )rH   r   r   rA   Z   s   
zVariableScalar.modelc                 C   s    t | j }| |||S r   )r)   r   rA   getDeltasAndSupports)r   rC   rD   r   r
   r
   r   get_deltas_and_supportsn   s   z&VariableScalar.get_deltas_and_supportsc                 C   s2   |  ||\}}|| ||}t| j|fS r   )rM   setSupportsstoreDeltasr   r@   )r   store_builderrC   rD   deltassupportsindexr
   r
   r   add_to_variation_storer   s   

z%VariableScalar.add_to_variation_store)NN)__name__
__module____qualname____doc__r   r$   propertyr,   r1   r:   r2   r   r>   r@   rE   rA   rM   rT   r
   r
   r
   r   r      s$    





r   N)fontTools.varLib.modelsr   r   r   r   r   r
   r
   r
   r   <module>   s    