a
    ZXhq                      @   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   c/var/www/viveiro_mudafortebrasil/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)selfZ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"   RegionZRegionCountr#   MultiVarDataZ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    r1   r2   appendr   r'   _outerr#   r3   r$   r(   r)   Itemr   )
r*   Z	regionMapZ
regionListZregionsZregionIndicesregionr   idxZ	varRegionZ
varDataIdxr   r   r   _add_MultiVarData:   s8    


z,OnlineMultiVarStoreBuilder._add_MultiVarDataroundc                C   s,   | j j||d}|d}|| j|tdfS )Nr>   r   )r%   Z	getDeltaspopstoreDeltasr   )r*   Zmaster_valuesr?   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dr>   r   r   	<genexpr>c   r   z9OnlineMultiVarStoreBuilder.storeDeltas.<locals>.<genexpr>c                 s   s   | ]}t |V  qd S r   )r   rE   r   r   r   rH   h   r   r6   r>      )r   anyNO_VARIATION_INDEXr$   r=   r)   r7   r1   r:   rA   r   addItemr9   )r*   rB   r?   Zdeltas_tupleZvarIdxinnerr   r>   r   rA   b   s"    
z&OnlineMultiVarStoreBuilder.storeDeltasN)__name__
__module____qualname__r+   r/   r,   r5   r=   r?   rD   rA   r   r   r   r   r      s   #r   r>   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   rE   r>   r   r   rH   ~   r   z'MultiVarData_addItem.<locals>.<genexpr>)r   r1   ZVarRegionCountextendr:   r8   Z	ItemCount)r*   rB   r?   valuesrG   r   r>   r   MultiVarData_addItem}   s    rS   c                    s    fdd| j D S )Nc                    s&   i | ]} |j  j|j|j|jfqS r   )Z	AxisIndexZaxisTagZ
StartCoordZ	PeakCoordZEndCoord)rF   reg	fvar_axesr   r   
<dictcomp>   s   z/SparseVarRegion_get_support.<locals>.<dictcomp>)ZSparseVarRegionAxis)r*   rV   r   rU   r   SparseVarRegion_get_support   s    
rX   c                 C   s
   t | jS r   )boolr3   r4   r   r   r   MultiVarStore___bool__   s    rZ   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   )rV   ZFormatr3   _varDataSparseVarRegionListr2   _regionssetLocation)r*   ZmultivarstorerV   locationr   r   r   r+      s    zMultiVarStoreInstancer.__init__c                 C   s   t || _|   d S r   )dictra   _clearCaches)r*   ra   r   r   r   r`      s    
z"MultiVarStoreInstancer.setLocationc                 C   s
   i | _ d S r   )_scalarsr4   r   r   r   rc      s    z#MultiVarStoreInstancer._clearCachesc                 C   s@   | j |}|d u r<| j| | j}t| j|}|| j |< |S r   )rd   r7   r_   get_supportrV   r   ra   )r*   	regionIdxZ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   r1   zipr   )rB   scalarsmdeltarG   sr   r   r   interpolateFromDeltasAndScalars   s    (z6MultiVarStoreInstancer.interpolateFromDeltasAndScalarsc                    sZ   |d? |d@  }}|t kr"tg S  j} fdd|| jD }|| j| } ||S )NrI   r6   c                    s   g | ]}  |qS r   rh   rF   rir4   r   r   
<listcomp>   r   z6MultiVarStoreInstancer.__getitem__.<locals>.<listcomp>)rK   r   r]   VarRegionIndexr:   rn   )r*   ZvaridxmajorminorvarDatarj   rB   r   r4   r   __getitem__   s    z"MultiVarStoreInstancer.__getitem__c                    s*    j } fdd|| jD } ||S )Nc                    s   g | ]}  |qS r   ro   rp   r4   r   r   rr      r   z@MultiVarStoreInstancer.interpolateFromDeltas.<locals>.<listcomp>)r]   rs   rn   )r*   ZvarDataIndexrB   rv   rj   r   r4   r   interpolateFromDeltas   s    z,MultiVarStoreInstancer.interpolateFromDeltasN)rN   rO   rP   r+   r`   rc   rh   staticmethodrn   rw   rx   r   r   r   r   r[      s   	
	r[   c                 C   s   t jj| |ddS )Nr3   )VarData)otVarStoresubset_varidxes)r*   ZvarIdxesr   r   r   MultiVarStore_subset_varidxes   s    r~   c                 C   s   t jj| dddS )Nr3   r^   )rz   ZVarRegionList)r{   r|   prune_regionsr4   r   r   r   MultiVarStore_prune_regions   s    r   c                 C   s>   g }| j | }|jD ]$}| jj| }||}|| q|S r   )r3   rs   r^   r2   re   r8   )r*   rt   ZfvarAxesr-   rv   rf   r;   rg   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*   Z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*   Zvaridxes_mapr   r   r   r   r   VARC_remap_varidxes   s    
r   )7ZfontTools.misc.roundToolsr   r   ZfontTools.misc.intToolsr   ZfontTools.misc.vectorr   ZfontTools.ttLib.tablesr   r{   ZfontTools.varLib.modelsr   ZfontTools.varLib.varStoreZ	fontToolsZfontTools.varLib.builderr   r	   r
   r   r   ZfontTools.misc.iterToolsr   	functoolsr   collectionsr   heapqr   r   rK   ZMultiVarStorer   objectr   r?   rS   r3   rL   rX   ZSparseVarRegionre   rZ   __bool__r[   r~   r   r   r}   r   Zget_supportsr   r   ZVARCZcollect_varidxesZremap_varidxesr   r   r   r   <module>   s>   a5
