o
    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   r/var/www/html/construction_image-detection-poc/venv/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)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 ])}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   r1   r2   appendr   r&   _outerr"   r4   r#   r'   r(   Itemr   )
r)   	regionMap
regionListregionsregionIndicesregionr   idx	varRegion
varDataIdxr   r   r   _add_MultiVarData:   s:   


z,OnlineMultiVarStoreBuilder._add_MultiVarDataroundc                C   s,   | j j||d}|d}|| j|tdfS )NrF   r   )r$   	getDeltaspopstoreDeltasr   )r)   master_valuesrG   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drF   r   r   	<genexpr>c       z9OnlineMultiVarStoreBuilder.storeDeltas.<locals>.<genexpr>c                 s   s    | ]}t |V  qd S r   )r   rP   r   r   r   rS   h   rT   r8   rF      )r   anyNO_VARIATION_INDEXr#   rE   r(   r9   r1   r<   rJ   r   addItemr;   )r)   rL   rG   deltas_tuplevarIdxinnerr   rF   r   rJ   b   s"   
z&OnlineMultiVarStoreBuilder.storeDeltasN)__name__
__module____qualname__r+   r/   r,   r7   rE   rG   rN   rJ   r   r   r   r   r      s    #r   rF   c                   s\   t  fdd|D }t|| jksJ g }|D ]}|| q| j| t| j| _d S )Nc                 3   rO   r   r   rP   rF   r   r   rS   ~   rT   z'MultiVarData_addItem.<locals>.<genexpr>)r   r1   VarRegionCountextendr<   r:   	ItemCount)r)   rL   rG   valuesrR   r   rF   r   MultiVarData_addItem}   s   rc   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)   rk   r   rj   r   SparseVarRegion_get_support   s   
rn   c                 C   s
   t | jS r   )boolr4   r6   r   r   r   MultiVarStore___bool__      
rp   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   )rk   Formatr4   _varDataSparseVarRegionListr2   _regionssetLocation)r)   multivarstorerk   locationr   r   r   r+      s   zMultiVarStoreInstancer.__init__c                 C   s   t || _|   d S r   )dictrz   _clearCaches)r)   rz   r   r   r   rx      s   
z"MultiVarStoreInstancer.setLocationc                 C   s
   i | _ d S r   )_scalarsr6   r   r   r   r|      rq   z#MultiVarStoreInstancer._clearCachesc                 C   s@   | j |}|d u r| j| | j}t| j|}|| j |< |S r   )r}   r9   rw   get_supportrk   r   rz   )r)   	regionIdx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   r1   zipr   )rL   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 )NrU   r8   c                       g | ]}  |qS r   r   rQ   rir6   r   r   
<listcomp>       z6MultiVarStoreInstancer.__getitem__.<locals>.<listcomp>)rW   r   ru   VarRegionIndexr<   r   )r)   varidxmajorminorvarDatar   rL   r   r6   r   __getitem__   s   z"MultiVarStoreInstancer.__getitem__c                    s*    j } fdd|| jD } ||S )Nc                    r   r   r   r   r6   r   r   r      r   z@MultiVarStoreInstancer.interpolateFromDeltas.<locals>.<listcomp>)ru   r   r   )r)   varDataIndexrL   r   r   r   r6   r   interpolateFromDeltas   s   z,MultiVarStoreInstancer.interpolateFromDeltasN)r\   r]   r^   r+   rx   r|   r   staticmethodr   r   r   r   r   r   r   rr      s    	
	rr   c                 C   s   t jj| |ddS )Nr4   )VarData)otVarStoresubset_varidxes)r)   varIdxesr   r   r   MultiVarStore_subset_varidxes   s   r   c                 C   s   t jj| dddS )Nr4   rv   )r   VarRegionList)r   r   prune_regionsr6   r   r   r   MultiVarStore_prune_regions   s   r   c                 C   s>   g }| j | }|jD ]}| jj| }||}|| q
|S r   )r4   r   rv   r2   r~   r:   )r)   r   fvarAxesr-   r   r   rA   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      
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   r   r   )7fontTools.misc.roundToolsr   r   fontTools.misc.intToolsr   fontTools.misc.vectorr   fontTools.ttLib.tablesr   r   fontTools.varLib.modelsr   fontTools.varLib.varStore	fontToolsfontTools.varLib.builderr   r	   r
   r   r   fontTools.misc.iterToolsr   	functoolsr   collectionsr   heapqr   r   rW   MultiVarStorer   objectr   rG   rc   r4   rX   rn   SparseVarRegionr~   rp   __bool__rr   r   r   r   r   r   get_supportsr   r   VARCcollect_varidxesremap_varidxesr   r   r   r   <module>   s@    a5
