U
    Dvf                     @   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
   C/tmp/pip-unpacked-wheel-qlge9rch/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)selfZ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   s   g | ]\}}d ||f qS )z%s=%ir
   ).0axr	   r
   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 ]F}|| jkr4td||f | j| }t|| |j|j|jf||< qt|S )NzUnknown axis %s in %s)	fix_locationkeysr+   r*   r   ZminValuedefaultValueZmaxValuer   )r   r   Znormalized_locationZaxtagaxisr
   r
   r   _normalized_location%   s    


 
z#VariableScalar._normalized_locationc                 C   s2   t |}| j D ]\}}||kr|j||< q|S r   )dictr+   r   r.   )r   r   tagr/   r
   r
   r   r,   2   s
    zVariableScalar.fix_locationc                 C   s"   | j r| |}|| jt|< d S r   )r   r,   r   r   )r   r   r   r
   r
   r   r   9   s    
zVariableScalar.add_valuec                    s    fdd j  D  _ d S )Nc                    s    i | ]\}}t  ||qS r
   )r   r,   )r   lr   r%   r
   r   r)   @   s     z4VariableScalar.fix_all_locations.<locals>.<dictcomp>)r   r   r%   r
   r%   r   fix_all_locations?   s    
z VariableScalar.fix_all_locationsc                 C   s8   |    tdd | jD }|| jkr.td| j| S )Nc                 S   s   i | ]}|j |jqS r
   )r'   r.   r(   r
   r
   r   r)   G   s      z*VariableScalar.default.<locals>.<dictcomp>z Default value could not be found)r4   r   r   r   r*   )r   keyr
   r
   r   defaultD   s
    
zVariableScalar.defaultNc                 C   s>   |}|| j  kr| j | S t| j   }| ||||S r   )r   r-   r#   modelZinterpolateFromMasters)r   r   model_cacheavarr	   r   r
   r
   r   value_at_locationM   s
    
z VariableScalar.value_at_locationc                    sz   |d k	r&t j }||kr&|| S fddj D }|d k	r^|j  fdd|D }t|}|d k	rv|||< |S )Nc                    s   g | ]}t  |qS r
   )r1   r0   )r   kr%   r
   r   r   Y   s     z(VariableScalar.model.<locals>.<listcomp>c                    s"   g | ]} fd d|  D qS )c                    s,   i | ]$\}}|| kr$t | | n|qS r
   )r   )r   r;   r   mappingr
   r   r)   ]   s    z3VariableScalar.model.<locals>.<listcomp>.<dictcomp>)r   )r   r   r<   r
   r   r   \   s   
)r   r   r-   segmentsr   )r   r8   r9   r5   	locationsmr
   )r=   r   r   r7   T   s    
zVariableScalar.modelc                 C   s    t | j }| |||S r   )r#   r   r7   ZgetDeltasAndSupports)r   r8   r9   r   r
   r
   r   get_deltas_and_supportsh   s    z&VariableScalar.get_deltas_and_supportsc                 C   s2   |  ||\}}|| ||}t| j|fS r   )rA   ZsetSupportsZstoreDeltasintr6   )r   Zstore_builderr8   r9   ZdeltasZsupportsindexr
   r
   r   add_to_variation_storel   s    

z%VariableScalar.add_to_variation_store)NN)NN)NN)NN)__name__
__module____qualname____doc__r   r   propertyr&   r+   r0   r,   r   r4   r6   r:   r7   rA   rD   r
   r
   r
   r   r      s"   





r   N)ZfontTools.varLib.modelsr   r   r   r   r   r
   r
   r
   r   <module>   s   