o
    iq                      @   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   m/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/fontTools/varLib/multiVarStore.py<lambda>   s    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 ])}t|}||}|d u r1t|| j}t|j }||< |j	| |	| qt
|}| j|}	|	d ur_|	| _| jj|	 | _| j| | _t| jjdkr_d }	|	d u rt|g | _t| jj| _| jj	| j | j| j|< || jvri | j|< | j| | _d S d S )N  )r    r!   r%   r   getr
   r   r0   r1   appendr   r&   _outerr"   r2   r#   r'   r(   Itemr   )
r)   Z	regionMapZ
regionListZregionsZregionIndicesregionr   idxZ	varRegionZ
varDataIdxr   r   r   _add_MultiVarData:   s:   


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s!|   | j|}|d ur-|S t| jj}|dkrB|   | j	|t
dS | jj|t
d | jd> | }|| j|< |S )Nc                 3       | ]} |V  qd S r   r   .0dr=   r   r   	<genexpr>c       z9OnlineMultiVarStoreBuilder.storeDeltas.<locals>.<genexpr>c                 s   s    | ]}t |V  qd S r   )r   rE   r   r   r   rH   h   rI   r5   r=      )r   anyNO_VARIATION_INDEXr#   r<   r(   r6   r0   r9   r@   r   addItemr8   )r)   rA   r>   Zdeltas_tupleZvarIdxinnerr   r=   r   r@   b   s"   
z&OnlineMultiVarStoreBuilder.storeDeltasN)__name__
__module____qualname__r*   r.   r+   r4   r<   r>   rC   r@   r   r   r   r   r      s    #r   r=   c                   s\   t  fdd|D }t|| jksJ g }|D ]}|| q| j| t| j| _d S )Nc                 3   rD   r   r   rE   r=   r   r   rH   ~   rI   z'MultiVarData_addItem.<locals>.<genexpr>)r   r0   ZVarRegionCountextendr9   r7   Z	ItemCount)r)   rA   r>   valuesrG   r   r=   r   MultiVarData_addItem}   s   rT   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)   rW   r   rV   r   SparseVarRegion_get_support   s   
rY   c                 C   s
   t | jS r   )boolr2   r3   r   r   r   MultiVarStore___bool__      
r[   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 | _|r|jjng | _| | d S )N   )rW   ZFormatr2   _varDataSparseVarRegionListr1   _regionssetLocation)r)   ZmultivarstorerW   locationr   r   r   r*      s   zMultiVarStoreInstancer.__init__c                 C   s   t || _|   d S r   )dictrc   _clearCaches)r)   rc   r   r   r   rb      s   
z"MultiVarStoreInstancer.setLocationc                 C   s
   i | _ d S r   )_scalarsr3   r   r   r   re      r\   z#MultiVarStoreInstancer._clearCachesc                 C   s@   | j |}|d u r| j| | j}t| j|}|| j |< |S r   )rf   r6   ra   get_supportrW   r   rc   )r)   	regionIdxZscalarsupportr   r   r   
_getScalar   s   
z!MultiVarStoreInstancer._getScalarc                 C   s   | st g S t| t| dksJ t| t|ft| t| }t dg| }tt| ||D ]\}}|s8q1|t || 7 }q1|S r   )r   r0   zipr   )rA   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 )NrJ   r5   c                       g | ]}  |qS r   rj   rF   rir3   r   r   
<listcomp>       z6MultiVarStoreInstancer.__getitem__.<locals>.<listcomp>)rL   r   r_   VarRegionIndexr9   rp   )r)   ZvaridxmajorminorvarDatarl   rA   r   r3   r   __getitem__   s   z"MultiVarStoreInstancer.__getitem__c                    s*    j } fdd|| jD } ||S )Nc                    rq   r   rr   rs   r3   r   r   ru      rv   z@MultiVarStoreInstancer.interpolateFromDeltas.<locals>.<listcomp>)r_   rw   rp   )r)   ZvarDataIndexrA   rz   rl   r   r3   r   interpolateFromDeltas   s   z,MultiVarStoreInstancer.interpolateFromDeltasN)rO   rP   rQ   r*   rb   re   rj   staticmethodrp   r{   r|   r   r   r   r   r]      s    	
	r]   c                 C   s   t jj| |ddS )Nr2   )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 )Nr2   r`   )r~   ZVarRegionList)r   r   prune_regionsr3   r   r   r   MultiVarStore_prune_regions   s   r   c                 C   s>   g }| j | }|jD ]}| jj| }||}|| q
|S r   )r2   rw   r`   r1   rg   r7   )r)   rx   ZfvarAxesr,   rz   rh   r:   ri   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      
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   r   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   rL   ZMultiVarStorer   objectr   r>   rT   r2   rM   rY   ZSparseVarRegionrg   r[   __bool__r]   r   r   r   r   r   Zget_supportsr   r   ZVARCZcollect_varidxesZremap_varidxesr   r   r   r   <module>   s@    a5
