a
    w=ic”  ã                   @   sÊ   d dl mZ d dlmZ d dlmZ d dlZd dlZe d¡Z	dd„ Z
dd	„ Zd
d„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ Zdd„ ZG dd„ deƒZG dd„ deƒZG d d!„ d!eƒZdS )"é    ©ÚtimestampNow)ÚDefaultTable)ÚreduceNzfontTools.mergec                    s>   t | ƒ} t| ƒ}t|ƒ‰ t‡ fdd„|D ƒƒs:J d|  ƒ‚ˆ S )Nc                 3   s   | ]}|ˆ kV  qd S ©N© ©Ú.0Úitem©Úfirstr   úe/home/droni/.local/share/virtualenvs/DPS-5Je3_V2c/lib/python3.9/site-packages/fontTools/merge/util.pyÚ	<genexpr>   ó    zequal.<locals>.<genexpr>z"Expected all items to be equal: %s)ÚlistÚiterÚnextÚall)ÚlstÚtr   r   r   Úequal   s
    "r   c                 C   s   t t| ƒƒS r   )r   r   ©r   r   r   r   r      s    r   c                 C   s   t S r   ©ÚNotImplementedr   r   r   r   Úrecalculate   s    r   c                 C   s   t ƒ S r   r   r   r   r   r   Úcurrent_time   s    r   c                 C   s   t tj| ƒS r   )r   ÚoperatorÚand_r   r   r   r   Úbitwise_and!   s    r   c                 C   s   t tj| ƒS r   )r   r   Úor_r   r   r   r   Ú
bitwise_or$   s    r    c                 C   s   t | ƒ} t| ƒt| ƒ S r   )r   ÚsumÚlenr   r   r   r   Úavg_int'   s    r#   c                    s   ‡ fdd„}|S )zÉReturns 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                    s   dd„ | D ƒ}|rˆ |ƒS t S )Nc                 S   s   g | ]}|t ur|‘qS r   r   r   r   r   r   Ú
<listcomp>2   r   z1onlyExisting.<locals>.wrapper.<locals>.<listcomp>r   )r   Úitems©Úfuncr   r   Úwrapper1   s    zonlyExisting.<locals>.wrapperr   )r'   r(   r   r&   r   ÚonlyExisting+   s    r)   c                 C   s   g }| D ]}|  |¡ q|S r   )Úextend)r   Úlr
   r   r   r   ÚsumLists7   s    r,   c                 C   s   i }| D ]}|  |¡ q|S r   )Úupdate)r   Údr
   r   r   r   ÚsumDicts=   s    r/   c                    s   ‡ fdd„}|S )Nc                    s˜   t | ƒ} d}tˆd ƒD ]z}zˆ| }W n> tyf   zˆd }W n ty`   td| ƒ‚Y n0 Y n0 d|> ‰ |‡ fdd„| D ƒƒ}|||> O }q|S )Nr   ÚsizeÚ*zDon't know how to merge bit %sé   c                 3   s   | ]}t |ˆ @ ƒV  qd S r   )Úboolr   ©Z
shiftedBitr   r   r   Q   r   z-mergeBits.<locals>.wrapper.<locals>.<genexpr>)r   ÚrangeÚKeyErrorÚ	Exception)r   ZreturnValueZ	bitNumberZ
mergeLogicZmergedValue©Úbitmapr4   r   r(   E   s    zmergeBits.<locals>.wrapperr   )r9   r(   r   r8   r   Ú	mergeBitsC   s    r:   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚAttendanceRecordingIdentityDictzVA dictionary-like object that records indices of items actually accessed
	from a list.c                 C   s&   || _ dd„ t|ƒD ƒ| _tƒ | _d S )Nc                 S   s   i | ]\}}t |ƒ|“qS r   ©Úid©r	   ÚiÚvr   r   r   Ú
<dictcomp>^   r   z<AttendanceRecordingIdentityDict.__init__.<locals>.<dictcomp>)r+   Ú	enumerater.   ÚsetÚs©Úselfr   r   r   r   Ú__init__\   s    z(AttendanceRecordingIdentityDict.__init__c                 C   s   | j  | jt|ƒ ¡ |S r   )rD   Úaddr.   r=   ©rF   r@   r   r   r   Ú__getitem__a   s    z+AttendanceRecordingIdentityDict.__getitem__N©Ú__name__Ú
__module__Ú__qualname__Ú__doc__rG   rJ   r   r   r   r   r;   X   s   r;   c                   @   s    e Zd ZdZdd„ Zdd„ ZdS )ÚGregariousIdentityDictzoA dictionary-like object that welcomes guests without reservations and
	adds them to the end of the guest list.c                 C   s   || _ tdd„ |D ƒƒ| _d S )Nc                 s   s   | ]}t |ƒV  qd S r   r<   )r	   r@   r   r   r   r   k   r   z2GregariousIdentityDict.__init__.<locals>.<genexpr>)r+   rC   rD   rE   r   r   r   rG   i   s    zGregariousIdentityDict.__init__c                 C   s.   t |ƒ| jvr*| j t |ƒ¡ | j |¡ |S r   )r=   rD   rH   r+   ÚappendrI   r   r   r   rJ   m   s    z"GregariousIdentityDict.__getitem__NrK   r   r   r   r   rP   e   s   rP   c                   @   s2   e Zd ZdZddd„Zdd„ Zdd„ Zd	d
„ ZdS )ÚNonhashableDictz3A dictionary-like object mapping objects to values.Nc                 C   s8   |d u rdd„ t |ƒD ƒ| _ndd„ t||ƒD ƒ| _d S )Nc                 S   s   i | ]\}}t |ƒ|“qS r   r<   r>   r   r   r   rA   x   r   z,NonhashableDict.__init__.<locals>.<dictcomp>c                 S   s   i | ]\}}t |ƒ|“qS r   r<   )r	   Úkr@   r   r   r   rA   z   r   )rB   r.   Úzip)rF   ÚkeysÚvaluesr   r   r   rG   v   s    zNonhashableDict.__init__c                 C   s   | j t|ƒ S r   ©r.   r=   ©rF   rS   r   r   r   rJ   |   s    zNonhashableDict.__getitem__c                 C   s   || j t|ƒ< d S r   rW   )rF   rS   r@   r   r   r   Ú__setitem__   s    zNonhashableDict.__setitem__c                 C   s   | j t|ƒ= d S r   rW   rX   r   r   r   Ú__delitem__‚   s    zNonhashableDict.__delitem__)N)rL   rM   rN   rO   rG   rJ   rY   rZ   r   r   r   r   rR   s   s
   
rR   )ZfontTools.misc.timeToolsr   Z#fontTools.ttLib.tables.DefaultTabler   Ú	functoolsr   r   ÚloggingÚ	getLoggerÚlogr   r   r   r   r   r    r#   r)   r,   r/   r:   Úobjectr;   rP   rR   r   r   r   r   Ú<module>   s&   
