
    jke2                         d dl mZ d dlmZ d dlmZ d dlZd dlZ ej                  d      Z	d Z
d Zd Zd	 Zd
 Zd Zd Zd Zd Zd Zd Z G d de      Z G d de      Z G d de      Zy)    timestampNow)DefaultTable)reduceNzfontTools.mergec                     t        |       } t        |       }t        |      t        fd|D              s
J d| z         S )Nc              3   (   K   | ]	  }|k(    y wN ).0itemfirsts     6/usr/lib/python3/dist-packages/fontTools/merge/util.py	<genexpr>zequal.<locals>.<genexpr>   s     +tu}+s   z"Expected all items to be equal: %s)listiternextall)lsttr   s     @r   equalr      sC    
s)CS	AGE+++W-QTW-WW+L    c                 *    t        t        |             S r	   )r   r   r   s    r   r   r      s    S	?r   c                     t         S r	   NotImplementedr   s    r   recalculater      s    r   c                     t               S r	   r   r   s    r   current_timer   "   s
    >r   c                 6    t        t        j                  |       S r	   )r   operatorand_r   s    r   bitwise_andr#   &   s    (--%%r   c                 6    t        t        j                  |       S r	   )r   r!   or_r   s    r   
bitwise_orr&   *   s    (,,$$r   c                 F    t        |       } t        |       t        |       z  S r	   )r   sumlenr   s    r   avg_intr*   .   s    
s)Cs8s3xr   c                       fd}|S )zReturns a filter func that when called with a list,
    only calls func on the non-NotImplemented items of the list,
    and only so if there's at least one item remaining.
    Otherwise returns NotImplemented.c                 ^    | D cg c]  }|t         us| }}|r |      S t         S c c}w r	   r   )r   r   itemsfuncs      r   wrapperzonlyExisting.<locals>.wrapper9   s4    "%D$^)CDD#tE{77 Es   **r
   )r.   r/   s   ` r   onlyExistingr0   3   s    8 Nr   c                 :    g }| D ]  }|j                  |        |S r	   )extend)r   lr   s      r   sumListsr4   @   &    
A 	Hr   c                 :    i }| D ]  }|j                  |        |S r	   )update)r   dr   s      r   sumDictsr9   G   r5   r   c                       fd}|S )Nc                     t        |       } d}t        d         D ]&  }	 |   }d|z   |fd| D              }|||z  z  }( |S # t        $ r% 	 d   }n# t        $ r t        d|z        w xY wY Ow xY w)Nr   size*zDon't know how to merge bit %s   c              3   :   K   | ]  }t        |z          y wr	   )bool)r   r   
shiftedBits     r   r   z-mergeBits.<locals>.wrapper.<locals>.<genexpr>[   s     $MT$*;%<$Ms   )r   rangeKeyError	Exception)r   returnValue	bitNumber
mergeLogicmergedValuerA   bitmaps        @r   r/   zmergeBits.<locals>.wrapperO   s    3ivf~. 
	4IR#I.
 iJ$$M$MMK;)33K
	4   RR!'J R#$Dy$PQQR Rs)   A			A7AA7A11A76A7r
   )rI   r/   s   ` r   	mergeBitsrJ   N   s      Nr   c                       e Zd ZdZd Zd Zy)AttendanceRecordingIdentityDictzYA dictionary-like object that records indices of items actually accessed
    from a list.c                     || _         t        |      D ci c]  \  }}t        |      | c}}| _        t	               | _        y c c}}w r	   )r3   	enumerateidr8   sets)selfr   ivs       r   __init__z(AttendanceRecordingIdentityDict.__init__f   s9    '0~6tq!"Q%(6 7s   Ac                 h    | j                   j                  | j                  t        |                |S r	   )rQ   addr8   rO   rR   rT   s     r   __getitem__z+AttendanceRecordingIdentityDict.__getitem__k   s#    

466"Q%=!r   N__name__
__module____qualname____doc__rU   rY   r
   r   r   rL   rL   b   s    
r   rL   c                       e Zd ZdZd Zd Zy)GregariousIdentityDictzrA dictionary-like object that welcomes guests without reservations and
    adds them to the end of the guest list.c                 @    || _         t        d |D              | _        y )Nc              3   2   K   | ]  }t        |        y wr	   )rO   )r   rT   s     r   r   z2GregariousIdentityDict.__init__.<locals>.<genexpr>v   s     (qRU(s   )r3   rP   rQ   )rR   r   s     r   rU   zGregariousIdentityDict.__init__t   s    (C((r   c                     t        |      | j                  vr?| j                  j                  t        |             | j                  j	                  |       |S r	   )rO   rQ   rW   r3   appendrX   s     r   rY   z"GregariousIdentityDict.__getitem__x   s;    a5FFJJr!uFFMM!r   NrZ   r
   r   r   r`   r`   p   s    /)r   r`   c                   *    e Zd ZdZddZd Zd Zd Zy)NonhashableDictz3A dictionary-like object mapping objects to values.Nc                     |.t        |      D ci c]  \  }}t        |      | c}}| _        y t        ||      D ci c]  \  }}t        |      | c}}| _        y c c}}w c c}}w r	   )rN   rO   r8   zip)rR   keysvaluesrS   rT   ks         r   rU   zNonhashableDict.__init__   sV    >+4T?;41abeQh;DF+.tV+<=41abeQh=DF <=s   A  A&c                 2    | j                   t        |         S r	   r8   rO   rR   rk   s     r   rY   zNonhashableDict.__getitem__   s    vvbe}r   c                 4    || j                   t        |      <   y r	   rm   )rR   rk   rT   s      r   __setitem__zNonhashableDict.__setitem__   s    r!ur   c                 0    | j                   t        |      = y r	   rm   rn   s     r   __delitem__zNonhashableDict.__delitem__   s    FF2a5Mr   r	   )r[   r\   r]   r^   rU   rY   rp   rr   r
   r   r   rf   rf      s    =>r   rf   )fontTools.misc.timeToolsr   #fontTools.ttLib.tables.DefaultTabler   	functoolsr   r!   logging	getLoggerlogr   r   r   r   r#   r&   r*   r0   r4   r9   rJ   objectrL   r`   rf   r
   r   r   <module>rz      s   
 2 <    g)*&% 

(f V f r   