o
    ¡¿¯ië  ã                   @   s>   d dl Z d dlZd dlmZ ddd„ZG dd„ de jjƒZdS )é    N)Úmultiprocessingc                    sÌ   t  | ¡}ˆ du rtƒ ‰ t| ƒ}|ˆ v rdS ˆ  |¡ t| tƒr@|t‡ fdd„|  ¡ D ƒƒ7 }|t‡ fdd„|  	¡ D ƒƒ7 }|S t
| dƒrO|t| jˆ ƒ7 }|S t| tttfƒrd|t‡ fdd„| D ƒƒ7 }|S )z\Recursively finds size of objects

    Taken from https://github.com/bosswissam/pysize

    Nr   c                    ó   g | ]}t |ˆ ƒ‘qS © ©Úget_size)Ú.0Úv©Úseenr   úL/home/ubuntu/.local/lib/python3.10/site-packages/espnet2/utils/sized_dict.pyÚ
<listcomp>   ó    zget_size.<locals>.<listcomp>c                    r   r   r   )r   Úkr	   r   r   r      r   Ú__dict__c                    r   r   r   )r   Úir	   r   r   r       r   )ÚsysÚ	getsizeofÚsetÚidÚaddÚ
isinstanceÚdictÚsumÚvaluesÚkeysÚhasattrr   r   ÚlistÚtuple)Úobjr
   ÚsizeÚobj_idr   r	   r   r      s"   



ûýr   c                   @   sP   e Zd Zddedefdd„Zdd„ Zd	d
„ Zdd„ Zdd„ Z	dd„ Z
dd„ ZdS )Ú	SizedDictFNÚsharedÚdatac                 C   sH   |d u ri }|rt  ¡ jdi |¤Ž| _nd | _tdi |¤Ž| _d| _d S )Nr   r   )r   ÚManagerr   ÚcacheÚmanagerr   )Úselfr"   r#   r   r   r   Ú__init__&   s   
zSizedDict.__init__c                 C   sX   || j v r|  jt| j | ƒ8  _n
|  jt |¡7  _|  jt|ƒ7  _|| j |< d S ©N)r%   r   r   r   r   )r'   ÚkeyÚvaluer   r   r   Ú__setitem__4   s
   
zSizedDict.__setitem__c                 C   s
   | j | S r)   ©r%   ©r'   r*   r   r   r   Ú__getitem__<   ó   
zSizedDict.__getitem__c                 C   s8   |  j t| j| ƒ8  _ |  j t |¡8  _ | j|= d S r)   )r   r   r%   r   r   r.   r   r   r   Ú__delitem__?   s   zSizedDict.__delitem__c                 C   ó
   t | jƒS r)   )Úiterr%   ©r'   r   r   r   Ú__iter__D   r0   zSizedDict.__iter__c                 C   s
   || j v S r)   r-   r.   r   r   r   Ú__contains__G   r0   zSizedDict.__contains__c                 C   r2   r)   )Úlenr%   r4   r   r   r   Ú__len__J   r0   zSizedDict.__len__)FN)Ú__name__Ú
__module__Ú__qualname__Úboolr   r(   r,   r/   r1   r5   r6   r8   r   r   r   r   r!   %   s    r!   r)   )Úcollectionsr   Útorchr   r   ÚabcÚMutableMappingr!   r   r   r   r   Ú<module>   s
    
