o
    h2                     @   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   h/var/www/html/construction_image-detection-poc/venv/lib/python3.10/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         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      t tj| S r   )r   operatorand_r   r   r   r   bitwise_and&   r   r    c                 C   r   r   )r   r   or_r   r   r   r   
bitwise_or*   r   r"   c                 C   s   t | } t| t|  S r   )r   sumlenr   r   r   r   avg_int.   s   r%   c                        fd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                    s   dd | D }|r |S t S )Nc                 S   s   g | ]}|t ur|qS r   r   r   r   r   r   
<listcomp>:   s    z1onlyExisting.<locals>.wrapper.<locals>.<listcomp>r   )r   itemsfuncr   r   wrapper9   s   zonlyExisting.<locals>.wrapperr   )r*   r+   r   r)   r   onlyExisting3   s   r,   c                 C   s   g }| D ]}| | q|S r   )extend)r   lr
   r   r   r   sumLists@      r/   c                 C   s   i }| D ]}| | q|S r   )update)r   dr
   r   r   r   sumDictsG   r0   r3   c                    r&   )Nc                    s   t | } d}td D ];}z| }W n ty1   zd }W n ty.   td| w Y nw 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   
shiftedBitr   r   r   [   s    z-mergeBits.<locals>.wrapper.<locals>.<genexpr>)r   rangeKeyError	Exception)r   returnValue	bitNumber
mergeLogicmergedValuebitmapr8   r   r+   O   s"   zmergeBits.<locals>.wrapperr   )rB   r+   r   rA   r   	mergeBitsN   s   rC   c                   @       e Zd ZdZdd Zdd ZdS )AttendanceRecordingIdentityDictzYA 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      i | ]	\}}t ||qS r   idr	   ivr   r   r   
<dictcomp>h       z<AttendanceRecordingIdentityDict.__init__.<locals>.<dictcomp>)r.   	enumerater2   setsselfr   r   r   r   __init__f   s   z(AttendanceRecordingIdentityDict.__init__c                 C   s   | j | jt|  |S r   )rP   addr2   rH   rR   rK   r   r   r   __getitem__k   s   z+AttendanceRecordingIdentityDict.__getitem__N__name__
__module____qualname____doc__rS   rV   r   r   r   r   rE   b   s    rE   c                   @   rD   )GregariousIdentityDictzrA 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   rG   )r	   rK   r   r   r   r   v   r   z2GregariousIdentityDict.__init__.<locals>.<genexpr>)r.   rO   rP   rQ   r   r   r   rS   t   s   zGregariousIdentityDict.__init__c                 C   s.   t || jvr| jt | | j| |S r   )rH   rP   rT   r.   appendrU   r   r   r   rV   x   s   z"GregariousIdentityDict.__getitem__NrW   r   r   r   r   r\   p   s    r\   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   s:   |d u rdd t |D | _d S dd t||D | _d S )Nc                 S   rF   r   rG   rI   r   r   r   rL      rM   z,NonhashableDict.__init__.<locals>.<dictcomp>c                 S   s   i | ]	\}}t ||qS r   rG   )r	   krK   r   r   r   rL      rM   )rN   r2   zip)rR   keysvaluesr   r   r   rS      s   zNonhashableDict.__init__c                 C   s   | j t| S r   r2   rH   rR   r_   r   r   r   rV      s   zNonhashableDict.__getitem__c                 C   s   || j t|< d S r   rc   )rR   r_   rK   r   r   r   __setitem__   s   zNonhashableDict.__setitem__c                 C   s   | j t|= d S r   rc   rd   r   r   r   __delitem__   s   zNonhashableDict.__delitem__r   )rX   rY   rZ   r[   rS   rV   re   rf   r   r   r   r   r^      s    
r^   )fontTools.misc.timeToolsr   #fontTools.ttLib.tables.DefaultTabler   	functoolsr   r   logging	getLoggerlogr   r   r   r   r    r"   r%   r,   r/   r3   rC   objectrE   r\   r^   r   r   r   r   <module>   s(   
