a
    ¥Q•hq   ã                   @   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r¾d }	|	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
