U
    Sc                     @   s&   d dl mZ dgZG dd deZdS )    )errorNamedValuesc                   @   s   e Zd Z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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,S )-r   a  Create named values object.

    The |NamedValues| object represents a collection of string names
    associated with numeric IDs. These objects are used for giving
    names to otherwise numerical values.

    |NamedValues| objects are immutable and duck-type Python
    :class:`dict` object mapping ID to name and vice-versa.

    Parameters
    ----------
    *args: variable number of two-element :py:class:`tuple`

        name: :py:class:`str`
            Value label

        value: :py:class:`int`
            Numeric value

    Keyword Args
    ------------
    name: :py:class:`str`
        Value label

    value: :py:class:`int`
        Numeric value

    Examples
    --------

    .. code-block:: pycon

        >>> nv = NamedValues('a', 'b', ('c', 0), d=1)
        >>> nv
        >>> {'c': 0, 'd': 1, 'a': 2, 'b': 3}
        >>> nv[0]
        'c'
        >>> nv['a']
        2
    c              	   O   sx  i | _ i | _g }|D ]}t|ttfrZz|\}}W qf tk
rV   td|f Y qfX n|| q|| j krtd|f || jkrtd||f || j |< || j|< q|	 D ]R\}}|| j krtd|f || jkrtd||f || j |< || j|< q|rt| jr,t
| jd p.d}|D ]>}|| j krTtd|f || j |< || j|< |d7 }q4d S )Nz$Not a proper attribute-value pair %rzDuplicate name %szDuplicate number  %s=%s   r   )_NamedValues__names_NamedValues__numbers
isinstancetuplelist
ValueErrorr   PyAsn1Errorappenditemsmax)selfargskwargsZanonymousNamesZ
namedValuenamenumber r   8/tmp/pip-unpacked-wheel-hsjy238j/pyasn1/type/namedval.py__init__7   s@    








zNamedValues.__init__c                 C   sP   d dd |  D }t|dkr@|d d d |dd   }d| jj|f S )	Nz, c                 S   s   g | ]}d | qS )z%s=%dr   ).0xr   r   r   
<listcomp>k   s     z(NamedValues.__repr__.<locals>.<listcomp>@       z...iz<%s object, enums %s>)joinr   len	__class____name__)r   Zrepresentationr   r   r   __repr__j   s     zNamedValues.__repr__c                 C   s   t | |kS Ndictr   otherr   r   r   __eq__s   s    zNamedValues.__eq__c                 C   s   t | |kS r!   r"   r$   r   r   r   __ne__v   s    zNamedValues.__ne__c                 C   s   t | |k S r!   r"   r$   r   r   r   __lt__y   s    zNamedValues.__lt__c                 C   s   t | |kS r!   r"   r$   r   r   r   __le__|   s    zNamedValues.__le__c                 C   s   t | |kS r!   r"   r$   r   r   r   __gt__   s    zNamedValues.__gt__c                 C   s   t | |kS r!   r"   r$   r   r   r   __ge__   s    zNamedValues.__ge__c                 C   s   t |  S r!   )hashr   r   r   r   r   __hash__   s    zNamedValues.__hash__c                 C   s0   z| j | W S  tk
r*   | j|  Y S X d S r!   )r   KeyErrorr   r   keyr   r   r   __getitem__   s    zNamedValues.__getitem__c                 C   s
   t | jS r!   )r   r   r-   r   r   r   __len__   s    zNamedValues.__len__c                 C   s   || j kp|| jkS r!   )r   r   r0   r   r   r   __contains__   s    zNamedValues.__contains__c                 C   s
   t | jS r!   iterr   r-   r   r   r   __iter__   s    zNamedValues.__iter__c                 C   s
   t | jS r!   )r6   r   r-   r   r   r   values   s    zNamedValues.valuesc                 C   s
   t | jS r!   r5   r-   r   r   r   keys   s    zNamedValues.keysc                 c   s    | j D ]}|| j | fV  qd S r!   r   r   r   r   r   r   r      s    
zNamedValues.itemsc                 C   s   | j t|  t|   S r!   )r   r   r   )r   ZnamedValuesr   r   r   __add__   s    zNamedValues.__add__c                 O   s   | j ||}| | S r!   )r   )r   r   r   newr   r   r   clone   s    zNamedValues.clonec                 C   s   || j kr| j | S d S r!   )r   )r   valuer   r   r   getName   s    
zNamedValues.getNamec                 C   s   || j kr| j | S d S r!   r:   r;   r   r   r   getValue   s    
zNamedValues.getValuec              	      sJ   z fdd|D W S  t k
rD   tdt| jf Y nX d S )Nc                    s   g | ]} j | qS r   r:   )r   r   r-   r   r   r      s     z)NamedValues.getValues.<locals>.<listcomp>zUnknown bit identifier(s): %s)r/   r   r   set
differencer   )r   namesr   r-   r   	getValues   s    zNamedValues.getValuesN)r   
__module____qualname____doc__r   r    r&   r'   r(   r)   r*   r+   r.   r2   r3   r4   r7   r8   r9   r   r<   r>   r@   rA   rE   r   r   r   r   r      s,   (3	N)Zpyasn1r   __all__objectr   r   r   r   r   <module>	   s   