
    ]Mhq                         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 Z G d de           Z!e"ddZ#e#e	j$        _%        d Z&e&e	j'        _(        d Z)e)e	j        _*         G d de           Z+d Z,d Z-e-e	j        _.        e,e	j        _/        d Z0e0e	j        _1        d Z2d Z3e2e	j4        _5        e3e	j4        _6        dS )    )noRoundotRound)	bit_count)Vector)otTables)supportScalarN)buildVarRegionListbuildSparseVarRegionListbuildSparseVarRegionbuildMultiVarStorebuildMultiVarData)batched)partial)defaultdict)heappushheappopc                 d    t          t          |                                 d                     S )Nc                     | d         S Nr    )kvs    ^/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/fontTools/varLib/multiVarStore.py<lambda>z!_getLocationKey.<locals>.<lambda>   s
    BqE     )key)tuplesorteditems)locs    r   _getLocationKeyr       s)    		)9)9:::;;;r   c                   D    e Zd Zd Zd Zd Zd Zd ZeddZ	eddZ
d	S )
OnlineMultiVarStoreBuilderc                     || _         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axisTagss     r   __init__z#OnlineMultiVarStoreBuilder.__init__   sf    !3BAA()92>>
! r   c                 H    |                      |j                   || _        d S r$   )setSupportssupportsr*   )r/   models     r   setModelz#OnlineMultiVarStoreBuilder.setModel)   s#    (((r   c                     d | _         t          |          | _        | j        d         s| j        d= d | _        d | _        d S r   )r*   listr+   r.   r)   )r/   r4   s     r   r3   z&OnlineMultiVarStoreBuilder.setSupports-   sA    h~a  	"q!


r   c                     t          | j        j                  | j        _        t          | j        j                  | j        _        | j        S r$   )lenr'   RegionRegionCountr(   MultiVarDataMultiVarDataCountr/   s    r   finishz!OnlineMultiVarStoreBuilder.finish5   s:    '*4+;+B'C'C$(+DK,D(E(E%{r   c                 V   | j         }| j        }| j        }g }|D ]}t          |          }|                    |          }|Ht          || j                  }t          |j                  x}||<   |j        	                    |           |	                    |           t          |          }| j                            |          }	|	O|	| _        | j        j        |	         | _        | j        |         | _        t          | j        j                  dk    rd }	|	t'          |g           | _        t          | j        j                  | _        | j        j        	                    | j                   | j        | j        |<   || j        vr
i | j        |<   | j        |         | _        d S d S )N  )r&   r'   r+   r    getr   r%   r:   r;   appendr   r,   _outerr(   r=   r)   r-   r.   Itemr   )
r/   	regionMap
regionListregionsregionIndicesregionr   idx	varRegion
varDataIdxs
             r   _add_MultiVarDataz,OnlineMultiVarStoreBuilder._add_MultiVarData:   s   O	%
. 	& 	&F!&))C--$$C{0HH	'*:+<'='==in!((333  %%%% M"")--c22
!$DK1*=DJ-c2DK4:?##v--!
*="==DJdk677DKK$++DJ777(,D %$---+-#C(-c2DKKK r   roundc                    | j                             ||          }|                    d          }||                     |t                    fS )NrP   r   )r*   	getDeltaspopstoreDeltasr   )r/   master_valuesrQ   deltasbases        r   storeMastersz'OnlineMultiVarStoreBuilder.storeMasters]   sI    &&}E&BBzz!}}T%%fG%<<<<r   c                   t          fd|D                       }t          |          st          S t          d |D                       }| j        s|                                  | j                            |          }||S t          | j        j                  }|dk    r0|                                  | 	                    |t                    S | j                            |t                     | j        dz  |z   }|| j        |<   |S )Nc              3   .   K   | ]} |          V  d S r$   r   .0drQ   s     r   	<genexpr>z9OnlineMultiVarStoreBuilder.storeDeltas.<locals>.<genexpr>c   s+      00AuuQxx000000r   c              3   4   K   | ]}t          |          V  d S r$   )r   )r]   r^   s     r   r_   z9OnlineMultiVarStoreBuilder.storeDeltas.<locals>.<genexpr>h   s(      66!U1XX666666r   rB   rP      )r   anyNO_VARIATION_INDEXr)   rO   r.   rC   r:   rF   rU   r   addItemrE   )r/   rW   rQ   deltas_tuplevarIdxinners     `   r   rU   z&OnlineMultiVarStoreBuilder.storeDeltasb   s   0000000006{{ 	&%%66v66666z 	%""$$$..MDJO$$F??""$$$##F'#:::
6111+#u,$*L!r   N)__name__
__module____qualname__r1   r6   r3   r@   rO   rQ   rY   rU   r   r   r   r"   r"      s        
 
 
      
!3 !3 !3F 49 = = = = =
 ,1       r   r"   rP   c                   t          fd|D                       }t          |          | j        k    sJ g }|D ]}|                    |           | j                            |           t          | j                  | _        d S )Nc              3   .   K   | ]} |          V  d S r$   r   r\   s     r   r_   z'MultiVarData_addItem.<locals>.<genexpr>~   s+      ,,5588,,,,,,r   )r   r:   VarRegionCountextendrF   rD   	ItemCount)r/   rW   rQ   valuesr^   s     `  r   MultiVarData_addItemrq   }   s    ,,,,V,,,,,Fv;;$-----F  aIV^^DNNNr   c                 *    fd| j         D             S )Nc                 Z    i | ]'}|j                  j        |j        |j        |j        f(S r   )	AxisIndexaxisTag
StartCoord	PeakCoordEndCoord)r]   reg	fvar_axess     r   
<dictcomp>z/SparseVarRegion_get_support.<locals>.<dictcomp>   sB        	#- (3>3=#,*W  r   )SparseVarRegionAxis)r/   rz   s    `r   SparseVarRegion_get_supportr}      s1       +   r   c                 *    t          | j                  S r$   )boolr=   r?   s    r   MultiVarStore___bool__r      s    !"""r   c                   L    e Zd Zi fdZd Zd Zd Zed             Zd Z	d Z
dS )	MultiVarStoreInstancerc                     || _         ||j        dk    sJ |r|j        ng | _        |r|j        j        ng | _        |                     |           d S )N   )rz   Formatr=   _varDataSparseVarRegionListr;   _regionssetLocation)r/   multivarstorerz   locations       r   r1   zMultiVarStoreInstancer.__init__   sl    "$(<(A(A(A(A6CK228EMM-442 	 	"""""r   c                 V    t          |          | _        |                                  d S r$   )dictr   _clearCaches)r/   r   s     r   r   z"MultiVarStoreInstancer.setLocation   s'    Xr   c                     i | _         d S r$   )_scalarsr?   s    r   r   z#MultiVarStoreInstancer._clearCaches   s    r   c                     | j                             |          }|D| j        |                             | j                  }t          | j        |          }|| j         |<   |S r$   )r   rC   r   get_supportrz   r   r   )r/   	regionIdxscalarsupports       r   
_getScalarz!MultiVarStoreInstancer._getScalar   sZ    ""9-->mI.::4>JJG"4='::F'-DM)$r   c                    | st          g           S t          |           t          |          z  dk    s&J t          |           t          |          f            t          |           t          |          z  }t          dg|z            }t          t          | |          |          D ]\  }}|s|t          |          |z  z  }|S r   )r   r:   zipr   )rW   scalarsmdeltar^   ss         r   interpolateFromDeltasAndScalarsz6MultiVarStoreInstancer.interpolateFromDeltasAndScalars   s     	"::6{{S\\)Q...Vc'll0K...KK3w<<'sQw**G44 	# 	#DAq VAYY]"EEr   c                      |dz	  |dz  }}|t           k    rt          g           S  j        } fd||         j        D             }||         j        |         }                     ||          S )Nra   rB   c                 :    g | ]}                     |          S r   r   r]   rir/   s     r   
<listcomp>z6MultiVarStoreInstancer.__getitem__.<locals>.<listcomp>   s%    OOO24??2&&OOOr   )rc   r   r   VarRegionIndexrF   r   )r/   varidxmajorminorvarDatar   rW   s   `      r   __getitem__z"MultiVarStoreInstancer.__getitem__   sz    |Vf_u'''"::-OOOO1NOOO$U+33FGDDDr   c                 p      j         } fd||         j        D             }                     ||          S )Nc                 :    g | ]}                     |          S r   r   r   s     r   r   z@MultiVarStoreInstancer.interpolateFromDeltas.<locals>.<listcomp>   s%    VVV24??2&&VVVr   )r   r   r   )r/   varDataIndexrW   r   r   s   `    r   interpolateFromDeltasz,MultiVarStoreInstancer.interpolateFromDeltas   sA    -VVVV1F1UVVV33FGDDDr   N)rh   ri   rj   r1   r   r   r   staticmethodr   r   r   r   r   r   r   r      s        :< # # # #       
 
 \
E E EE E E E Er   r   c                 F    t           j                            | |d          S )Nr=   )VarData)otVarStoresubset_varidxes)r/   varIdxess     r   MultiVarStore_subset_varidxesr      s    ;&&tX~&NNNr   c                 F    t           j                            | dd          S )Nr=   r   )r   VarRegionList)r   r   prune_regionsr?   s    r   MultiVarStore_prune_regionsr      s)    ;$$n4I %   r   c                     g }| j         |         }|j        D ]>}| j        j        |         }|                    |          }|                    |           ?|S r$   )r=   r   r   r;   r   rD   )r/   r   fvarAxesr4   r   r   rK   r   s           r   MultiVarStore_get_supportsr      sc    H&G+ ! !	)0;$$X..    Or   c                     | j         j        D ]@}|j        D ]6}|                    |j                   |                    |j                   7Ad S r$   )VarCompositeGlyphsVarCompositeGlyph
componentsaddaxisValuesVarIndextransformVarIndex)r/   varidxesglyph	components       r   VARC_collect_varidxesr      se    (: 6 6) 	6 	6ILL5666LL45555	66 6r   c                     | j         j        D ]0}|j        D ]&}||j                 |_        ||j                 |_        '1d S r$   )r   r   r   r   r   )r/   varidxes_mapr   r   s       r   VARC_remap_varidxesr      sb    (: T T) 	T 	TI+7	8T+UI(*6y7R*SI''	TT T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   rc   MultiVarStorer    objectr"   rQ   rq   r=   rd   r}   SparseVarRegionr   r   __bool__r   r   r   r   r   r   get_supportsr   r   VARCcollect_varidxesremap_varidxesr   r   r   <module>r      s   6 6 6 6 6 6 6 6 - - - - - - ( ( ( ( ( ( 1 1 1 1 1 1 1 1 1 1 1 1                      - , , , , ,       # # # # # # # # # # # # # # * &8  #< < <^ ^ ^ ^ ^ ^ ^ ^B 16 
$ 
$ 
$ 
$ 
$ /    "=  # # # 3  2E 2E 2E 2E 2EV 2E 2E 2EjO O O   "=  #@      !;  6 6 6T T T 1 ,   r   