
    	jP*                        % S r SSKrSSKJr  SSKJrJrJrJrJ	r	  SSSSS	.r
\\\4   \S
'    " S S\5      r S$S\S\S\S\	\\   \4   4S jjrS\S\S\S\S\S\	\\   \4   4S jrS\\   S\4S jrS\S\S\4S jrS\S\	\\4   4S jrS\S\S\4S jrS\\   S\S\S\4S jrS\S\S\4S jr " S  S!5      r " S" S#5      rg)%zSparse Bit Set encoding/decoding for IFT (Incremental Font Transfer).

Implements the sparse bit set format defined in the W3C IFT specification:
https://w3c.github.io/IFT/Overview.html#sparse-bit-set-decoding
    N)deque)DictIterableOptionalSetTuple                         _BF_MAX_HEIGHTc                       \ rS rSrSrg)SparseBitSetDecodeError    N)__name__
__module____qualname____firstlineno____static_attributes__r       fC:\Users\13-19\Desktop\pythonwaitwaitwait\beer_env\Lib\site-packages\fontTools/misc/iftSparseBitSet.pyr   r      s    r   r   databiasmaxValuereturnc                     U (       d  [        S5      e[        U S   5      u  p4[        U   nXE:  a  [        SU SU SU 35      e[        XXAU5      $ )a1  Decode a sparse bit set from binary data.

Args:
    data: bytes-like object containing the sparse bit set encoding.
    bias: integer added to each decoded value.

Returns:
    A tuple (values, bytesConsumed) where values is a set of integers
    and bytesConsumed is the number of bytes read from data.
z
Empty datar   zHeight z exceeds max z for branch factor )r   _decodeHeaderr   _decodeImpl)r   r   r    branchFactorheight	maxHeights         r   decoder(      sh     %l33(a1L|,I%fX]9+5HW
 	
 t6BBr   r%   r&   c                    US:X  a  [        5       S4$ [        X5      n[        5       n[        5       nUR                  S5        U(       Ga  UR	                  5       u  pUR                  5       n
U
c  [        S5      eU
S:X  aV  X)-
  S-   nX-  nX-   nX:  a  MT  [        XHU-   S-
  U-   5      nUS:  a  SnX::  a  UR                  [        XS-   5      5        M  X)-
  nX-  n [        U
S5      nUS:X  a  OeX:X  a7  UU-   U-   nUU:  a  UR                  5         OAUS:  a  UR                  U5        OUU-  nUR                  UU-   U	S-   45        U
SU-  ) -  n
Mx  U(       a  GM  XeR                  5       4$ )Nr      )r   r*   zUnexpected end of datar   )set_InputBitStreamr   appendpopleftnextr   minupdaterange_trailingZerosclearaddbytesConsumed)r   r%   r&   r   r    	bitStreamresultqueuestartdepthbitsexpnodeSize	fillStartfillEndnextNodeSizebitIndexval
startDeltas                      r   r$   r$   1   s    {qz3IuF %*GE	LL
}}~~<)*BCC 19.1$C#(HI#(H$4q$84$?@G1}	#eI{;< n#(%dB/H2~h&->KKM!8JJsO%4
ej0%!)<=a8m$$D 1 %P ++-..r   valuesc                 6   [        [        U 5      5      nU(       d  [        SS5      $ US   n[        U5      nSnS HH  n[        XR5      nU[        U   :  a  M  [        X5U5      nUb  [        U5      [        U5      :  d  MF  UnMJ     Uc  [        SU 35      eU$ )zEncode a set of integers as a sparse bit set.

Tries all branching factors and returns the shortest encoding.

Args:
    values: iterable of non-negative integers.

Returns:
    bytes containing the sparse bit set encoding.
r   r   Nr   zCannot encode max value )sortedr+   _encodeHeader_treeHeightr   _encodeWithBflen
ValueError)rE   valuesSortedr    valueSetbestr%   r&   encodeds           r   encoderR   j   s     #f+&LQ""BH< H D%\4N<00?<3w<#d)3D & |3H:>??Kr   c                 8    SSSSS.n[        US-  X    -  /5      $ )Nr   r*   r      r   )bytes)r%   r&   branchFactorToIds      r   rI   rI      s,    qa06Q;"2"@@ABBr   
headerBytec                 6    U S-  nSSSSS.nU S-	  S-  nX!   U4$ )NrT   r   r   r   r   )r   r*   r   rT   r	   r   )rW   ididToBranchFactorr&   s       r   r#   r#      s7    	d	BqR0Ao%F''r   c                 8    SnU nX1::  a  X0-  nUS-  nX1::  a  M  U$ )z<Return the minimum tree height needed to represent maxValue.r*   r   )r%   r    r&   capacitys       r   rJ   rJ      s2    FH

 ! 
 Mr   rO   c                 B  ^ US:X  a  [        US5      $ 0 /nU  H.  nXA-  nXA-  nXSS   ;  a  SUS   U'   US   U==   SU-  -  ss'   M0     [        SU5       HT  nUS   n0 n	UR                  5        H%  u  pZXQ-  nXQ-  nX;  a  SX'   X==   SU-  -  ss'   M'     UR                  U	5        MV     [	        U 5      mS[
        S[
        S[
        4U4S jjn[        U5      nX-  n[        SSSUS-
  4/5      nU(       Ga  UR                  5       u  nnnnUS-
  U-
  nSUs=::  a  [        U5      :  a  O  OUU   R                  US5      OSn
UUS-
  :  a&  U" UU5      UU-
  S-   :X  a  UR                  S5        M  UR                  U
5        U
S:w  aj  UUS-
  :  aa  UU-
  S-   U-  nU
nU(       aM  [        US5      nXQ-  U-   nUUU-  -   nUU-   S-
  nUR                  UUS-   UU45        USU-  ) -  nU(       a  MM  U(       a  GM  [        X5      UR                  5       -   $ )	Nr   r*   rG   lohir!   c                 b   > [         R                  " TU5      [         R                  " TU 5      -
  $ N)bisectbisect_rightbisect_left)r^   r_   rN   s     r   
rangeCount!_encodeWithBf.<locals>.rangeCount   s/    ""<4v7I7I"8
 
 	
r   r   )rI   r2   itemsr-   rH   int_OutputBitStreamr   r.   rL   getwriter3   toBytes)rO   r%   r&   layersv	nodeIndexbitPos_	prevLayernewLayerbitmaskparentIndexre   streamsubtreeSizer9   r;   
rangeStartrangeEndlayerIdx	childSizer<   rB   
childIndex
childStartchildEndrN   s                             @r   rK   rK      s|   {\1-- %'4F%	!1I%#$F1Ii q	)V+  1f2J	#%"+//"3I#3K-F*()%!Q&[0! #4 	h  (#L
s 
 
 
 l+F&K.3aA{Q5O4P.QE
16.	5*hA:% 34x2M#f+2MF8  A.ST 	 FQJ:x0Hz4IA4MMLLOWa<EFQJ.!J.2|CID)$3&5@
'(Y*>>
%	1A5j%!)ZJK!x-(( $/ %> .1AAAr   rC   maxBitsc                 V    U S:X  a  U$ SnU S-  S:X  a  U S-  n US-  nU S-  S:X  a  M  U$ Nr   r*   r   )rC   r   counts      r   r3   r3      sD    
axE7q.	
 7q. Lr   c                   L    \ rS rSrSrS\S\4S jrS\\   4S jr	S\4S jr
S	rg
)r,      zBReads bit nodes from a byte array, starting after the header byte.r   r%   c                 8    Xl         X l        SU l        SU l        g )Nr*   r   )r   r%   	byteIndexsubIndex)selfr   r%   s      r   __init___InputBitStream.__init__   s    	(r   r!   c                 Z   U R                   S;   a  U R                  [        U R                  5      :  a  g SU R                   -  S-
  nU R                  U R                     U R                  -	  U-  nU =R                  U R                   -  sl        U R                  S:  a  SU l        U =R                  S-  sl        U$ U R                   S:X  aT  U R                  [        U R                  5      :  a  g U R                  U R                     nU =R                  S-  sl        U$ U R                   S:X  a{  U R                  S-   [        U R                  5      :  a  g U R                  nU R                  nX4   X4S-      S-  -  X4S-      S-  -  X4S-      S	-  -  nU =R                  S
-  sl        U$ g )Nr   r   r*   r   r   r   rT   r   r
      r   )r%   r   rL   r   r   )r   maskrC   bis        r   r/   _InputBitStream.next   sf   &~~TYY/***a/D99T^^,=ECMMT...M}}! !!#J!#~~TYY/))DNN+CNNaNJ"$~~!S^3		AA$!E(a-(A!eHN;qQx2~NCNNaNJr   c                 H    U R                   U R                  S:  a  S-   $ S-   $ r   )r   r   r   s    r   r6   _InputBitStream.bytesConsumed  s$    ~~dmma&7??Q??r   )r%   r   r   r   N)r   r   r   r   __doc__rU   rh   r   r   r/   r6   r   r   r   r   r,   r,      s6    LU # hsm 6@s @r   r,   c                   F    \ rS rSrSrS\4S jrS\SS4S jrS\4S	 jr	S
r
g)ri   i  z#Writes bit nodes into a byte array.r%   c                 <    Xl         [        5       U l        SU l        g )Nr   )r%   	bytearrayr   r   )r   r%   s     r   r   _OutputBitStream.__init__  s    (K	r   valuer!   Nc                    U R                   S;   a  SU R                   -  S-
  nX-  nU R                  S:X  a  U R                  R                  S5        U R                  S==   XR                  -  -  ss'   U =R                  U R                   -  sl        U R                  S:  a  SU l        g g U R                   S:X  a  U R                  R                  US-  5        g U R                   S:X  a  U R                  R                  US-  5        U R                  R                  US-	  S-  5        U R                  R                  US-	  S-  5        U R                  R                  US	-	  S-  5        g g )
Nr   r*   r   rG   r      r   r
   r   )r%   r   r   r-   )r   r   r   s      r   rk   _OutputBitStream.write$  s-   &***a/DME}}!		  #IIbMUmm33MMMT...M}}! ! "!#IIUT\*"$IIUT\*IIeqjD01IIerkT12IIerkT12	 %r   c                 ,    [        U R                  5      $ ra   )rU   r   r   s    r   rl   _OutputBitStream.toBytes6  s    TYYr   )r%   r   r   )r   r   r   r   r   rh   r   rk   rU   rl   r   r   r   r   ri   ri     s0    -S 
33 34 3$   r   ri   )r   l    )r   rb   collectionsr   typingr   r   r   r   r   r   rh   __annotations__	Exceptionr   rU   r(   r$   rR   rI   r#   rJ   rK   r3   r,   ri   r   r   r   <module>r      s     7 7 &(B21!=S#X =	i 	
 1;C
CC*-C
3s8S=C66/
6/"6/,/6/7:6/FI6/
3s8S=6/r8C= U @C CS CU C
(c (eCHo (c S S GBCH GBC GB GB GBT c c %@ %@P   r   