a
    Qhq                      @   sX  d dl mZ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Zd dlmZmZmZmZmZ d dlmZ d d	lmZ d d
lmZ d dlmZmZ e	jZee	j_dd ZG dd de Z!e"dddZ#e#e	j$_%dd Z&e&e	j'_(dd Z)e)e	j_*G dd de Z+dd Z,dd Z-e-e	j_.e,e	j_/dd Z0e0e	j_1dd  Z2d!d" Z3e2e	j4_5e3e	j4_6dS )#    )noRoundotRound)	bit_count)Vector)otTables)supportScalarN)buildVarRegionListbuildSparseVarRegionListbuildSparseVarRegionbuildMultiVarStorebuildMultiVarData)batched)partial)defaultdict)heappushheappopc                 C   s   t t|  dd dS )Nc                 S   s   | d S Nr    )kvr   r   W/var/www/sistema_ama/venv/lib/python3.9/site-packages/fontTools/varLib/multiVarStore.py<lambda>       z!_getLocationKey.<locals>.<lambda>)key)tuplesorteditems)locr   r   r   _getLocationKey   s    r   c                   @   sP   e Zd Zdd Zdd Zdd Zdd Zd	d
 ZedddZ	edddZ
dS )OnlineMultiVarStoreBuilderc                 C   sN   || _ i | _tg || _t| jg | _d | _d | _d | _i | _	i | _
d | _d S N)	_axisTags
_regionMapr	   _regionListr   _store_data_model	_supports_varDataIndices_varDataCaches_cache)selfaxisTagsr   r   r   __init__   s    z#OnlineMultiVarStoreBuilder.__init__c                 C   s   |  |j || _d S r   )setSupportssupportsr%   )r*   modelr   r   r   setModel)   s    z#OnlineMultiVarStoreBuilder.setModelc                 C   s2   d | _ t|| _| jd s"| jd= d | _d | _d S r   )r%   listr&   r)   r$   )r*   r.   r   r   r   r-   -   s    

z&OnlineMultiVarStoreBuilder.setSupportsc                 C   s&   t | jj| j_t | jj| j_| jS r   )lenr"   RegionRegionCountr#   MultiVarDataMultiVarDataCountr*   r   r   r   finish5   s    z!OnlineMultiVarStoreBuilder.finishc           
      C   s$  | j }| j}| j}g }|D ]R}t|}||}|d u rbt|| j}t|j }||< |j	| |	| qt
|}| j|}	|	d ur|	| _| jj|	 | _| j| | _t| jjdkrd }	|	d u r t|g | _t| jj| _| jj	| j | j| j|< || jvri | j|< | j| | _d S )N  )r!   r"   r&   r   getr
   r    r2   r3   appendr   r'   _outerr#   r5   r$   r(   r)   Itemr   )
r*   	regionMap
regionListregionsregionIndicesregionr   idx	varRegion
varDataIdxr   r   r   _add_MultiVarData:   s8    


z,OnlineMultiVarStoreBuilder._add_MultiVarDataroundc                C   s,   | j j||d}|d}|| j|tdfS )NrG   r   )r%   	getDeltaspopstoreDeltasr   )r*   master_valuesrH   deltasbaser   r   r   storeMasters]   s    
z'OnlineMultiVarStoreBuilder.storeMastersc                   s   t  fdd|D }t|s"tS t dd |D }| jsB|   | j|}|d urZ|S t| jj}|dkr|   | j	|t
dS | jj|t
d | jd> | }|| j|< |S )Nc                 3   s   | ]} |V  qd S r   r   .0drG   r   r   	<genexpr>c   r   z9OnlineMultiVarStoreBuilder.storeDeltas.<locals>.<genexpr>c                 s   s   | ]}t |V  qd S r   )r   rP   r   r   r   rS   h   r   r9   rG      )r   anyNO_VARIATION_INDEXr$   rF   r)   r:   r2   r=   rK   r   addItemr<   )r*   rM   rH   Zdeltas_tuplevarIdxinnerr   rG   r   rK   b   s"    
z&OnlineMultiVarStoreBuilder.storeDeltasN)__name__
__module____qualname__r,   r0   r-   r8   rF   rH   rO   rK   r   r   r   r   r      s   #r   rG   c                   s\   t  fdd|D }t|| jks(J g }|D ]}|| q0| j| t| j| _d S )Nc                 3   s   | ]} |V  qd S r   r   rP   rG   r   r   rS   ~   r   z'MultiVarData_addItem.<locals>.<genexpr>)r   r2   VarRegionCountextendr=   r;   	ItemCount)r*   rM   rH   valuesrR   r   rG   r   MultiVarData_addItem}   s    ra   c                    s    fdd| j D S )Nc                    s&   i | ]} |j  j|j|j|jfqS r   )	AxisIndexaxisTag
StartCoord	PeakCoordEndCoord)rQ   reg	fvar_axesr   r   
<dictcomp>   s   z/SparseVarRegion_get_support.<locals>.<dictcomp>)SparseVarRegionAxis)r*   ri   r   rh   r   SparseVarRegion_get_support   s    
rl   c                 C   s
   t | jS r   )boolr5   r7   r   r   r   MultiVarStore___bool__   s    rn   c                   @   sL   e Zd Zi fddZdd Zdd Zdd Zed	d
 Zdd Z	dd Z
dS )MultiVarStoreInstancerc                 C   sL   || _ |d u s|jdksJ |r&|jng | _|r8|jjng | _| | d S )N   )ri   Formatr5   _varDataSparseVarRegionListr3   _regionssetLocation)r*   Zmultivarstoreri   locationr   r   r   r,      s    zMultiVarStoreInstancer.__init__c                 C   s   t || _|   d S r   )dictrv   _clearCaches)r*   rv   r   r   r   ru      s    
z"MultiVarStoreInstancer.setLocationc                 C   s
   i | _ d S r   )_scalarsr7   r   r   r   rx      s    z#MultiVarStoreInstancer._clearCachesc                 C   s@   | j |}|d u r<| j| | j}t| j|}|| j |< |S r   )ry   r:   rt   get_supportri   r   rv   )r*   	regionIdxscalarsupportr   r   r   
_getScalar   s    
z!MultiVarStoreInstancer._getScalarc                 C   s   | st g S t| t| dks4J t| t|ft| t| }t dg| }tt| ||D ]\}}|spqb|t || 7 }qb|S r   )r   r2   zipr   )rM   scalarsmdeltarR   sr   r   r   interpolateFromDeltasAndScalars   s    (z6MultiVarStoreInstancer.interpolateFromDeltasAndScalarsc                    sZ   |d? |d@  }}|t kr"tg S  j} fdd|| jD }|| j| } ||S )NrT   r9   c                    s   g | ]}  |qS r   r~   rQ   rir7   r   r   
<listcomp>   r   z6MultiVarStoreInstancer.__getitem__.<locals>.<listcomp>)rV   r   rr   VarRegionIndexr=   r   )r*   varidxmajorminorvarDatar   rM   r   r7   r   __getitem__   s    z"MultiVarStoreInstancer.__getitem__c                    s*    j } fdd|| jD } ||S )Nc                    s   g | ]}  |qS r   r   r   r7   r   r   r      r   z@MultiVarStoreInstancer.interpolateFromDeltas.<locals>.<listcomp>)rr   r   r   )r*   varDataIndexrM   r   r   r   r7   r   interpolateFromDeltas   s    z,MultiVarStoreInstancer.interpolateFromDeltasN)rZ   r[   r\   r,   ru   rx   r~   staticmethodr   r   r   r   r   r   r   ro      s   	
	ro   c                 C   s   t jj| |ddS )Nr5   )VarData)otVarStoresubset_varidxes)r*   varIdxesr   r   r   MultiVarStore_subset_varidxes   s    r   c                 C   s   t jj| dddS )Nr5   rs   )r   VarRegionList)r   r   prune_regionsr7   r   r   r   MultiVarStore_prune_regions   s    r   c                 C   s>   g }| j | }|jD ]$}| jj| }||}|| q|S r   )r5   r   rs   r3   rz   r;   )r*   r   fvarAxesr.   r   r{   rB   r}   r   r   r   MultiVarStore_get_supports   s    


r   c                 C   s6   | j jD ](}|jD ]}||j ||j qqd S r   )VarCompositeGlyphsVarCompositeGlyph
componentsaddaxisValuesVarIndextransformVarIndex)r*   varidxesglyph	componentr   r   r   VARC_collect_varidxes   s    
r   c                 C   s6   | j jD ](}|jD ]}||j |_||j |_qqd S r   )r   r   r   r   r   )r*   varidxes_mapr   r   r   r   r   VARC_remap_varidxes   s    
r   )7fontTools.misc.roundToolsr   r   fontTools.misc.intToolsr   fontTools.misc.vectorr   fontTools.ttLib.tablesr   r   fontTools.varLib.modelsr   fontTools.varLib.varStore	fontToolsZfontTools.varLib.builderr   r	   r
   r   r   ZfontTools.misc.iterToolsr   	functoolsr   collectionsr   heapqr   r   rV   MultiVarStorer   objectr   rH   ra   r5   rW   rl   SparseVarRegionrz   rn   __bool__ro   r   r   r   r   r   Zget_supportsr   r   VARCcollect_varidxesremap_varidxesr   r   r   r   <module>   s>   a5
