U
    f»{jø  ã                   @   s€   d Z ddlmZ G dd„ deƒZG dd„ deƒZG dd„ deƒZG d	d
„ d
eƒZdd„ Z	G dd„ dee
ƒZG dd„ deeƒZdS )zBunch-related classes.é    )Údeepcopyc                   @   s   e Zd ZdZdd„ ZdS )ÚBunchz;Dictionary-like object that exposes its keys as attributes.c                 K   s   t  | |¡ | | _d S ©N)ÚdictÚ__init__Ú__dict__)ÚselfÚkwargs© r
   úO/var/www/html/bwave/python/venv/lib/python3.8/site-packages/mne/utils/_bunch.pyr      s    zBunch.__init__N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r
   r
   r
   r   r      s   r   c                       s    e Zd ZdZ‡ fdd„Z‡  ZS )Ú
BunchConstz5Class to prevent us from re-defining constants (DRY).c                    s6   |dkr$|| kr$t dt|ƒ› d�ƒ‚tƒ  ||¡ d S )Nr   z
Attribute z already set)ÚAttributeErrorÚreprÚsuperÚ__setitem__)r   ÚkeyÚval©Ú	__class__r
   r   r      s    zBunchConst.__setitem__)r   r   r   r   r   Ú__classcell__r
   r
   r   r   r      s   r   c                       s    e Zd ZdZ‡ fdd„Z‡  ZS )ÚBunchConstNamedzvClass to provide nice __repr__ for our integer constants.

    Only supports string keys and int or float values.
    c                    sb   t |tƒst‚t |tƒr$t||ƒ}n,t |tƒr:t||ƒ}nt |tƒsPtt|ƒƒ‚t	ƒ  
||¡ d S r   )Ú
isinstanceÚstrÚAssertionErrorÚintÚNamedIntÚfloatÚ
NamedFloatr   Útyper   Ú__setattr__)r   Úattrr   r   r
   r   r#   ,   s    

zBunchConstNamed.__setattr__)r   r   r   r   r#   r   r
   r
   r   r   r   &   s   r   c                   @   s<   e Zd ZdZdd„ Zdd„ ZeZdd„ Zdd	„ Zd
d„ Z	dS )Ú_NamedzBProvide shared methods for giving named-representation subclasses.c                 C   s   t | ƒ | |¡}||_|S r   )Ú_named_subclassÚ__new__Ú_name)ÚclsÚnamer   Úoutr
   r
   r   r'   :   s    z_Named.__new__c                 C   s    dt | j ¡ d | ƒƒ| jf S )Nz%s (%s)éþÿÿÿ)r   r   Úmror(   ©r   r
   r
   r   Ú__str__?   s    z_Named.__str__c                 C   s"   | j }| |¡}|j | j¡ |S r   )r   r'   r   Úupdate)r   r)   Úresultr
   r
   r   Ú__copy__E   s    
z_Named.__copy__c                 C   sL   | j }| || j| ¡}||t| ƒ< | j ¡ D ]\}}t||t||ƒƒ q,|S r   )r   r'   r(   Úidr   ÚitemsÚsetattrr   )r   Úmemor)   r1   ÚkÚvr
   r
   r   Ú__deepcopy__K   s    z_Named.__deepcopy__c                 C   s   | j t| ƒ| ƒfS r   )r(   r&   r.   r
   r
   r   Ú__getnewargs__S   s    z_Named.__getnewargs__N)
r   r   r   r   r'   r/   Ú__repr__r2   r9   r:   r
   r
   r
   r   r%   7   s   r%   c                 C   s0   t | tƒs| j} |  ¡ d }|ttfks,t‚|S )Nr,   )r   r"   r   r-   r   r    r   )ÚklassZsubklassr
   r
   r   r&   W   s
    
r&   c                   @   s   e Zd ZdZdS )r   zInt with a name in __repr__.N©r   r   r   r   r
   r
   r
   r   r   _   s   r   c                   @   s   e Zd ZdZdS )r!   zFloat with a name in __repr__.Nr=   r
   r
   r
   r   r!   e   s   r!   N)r   Úcopyr   r   r   r   r   Úobjectr%   r&   r   r   r    r!   r
   r
   r
   r   Ú<module>   s    