File: //opt/alt/python37/lib/python3.7/site-packages/exabgp/vendoring/__pycache__/counter.cpython-37.pyc
B
RP�e�) � @ s d Z ddlT G dd� de�ZdS )z-
counter.py
From python2.7 standard library
� )�*c s� e Zd ZdZd!� fdd� Zdd� Zd"dd�Zd d
� Zed#dd��Z d$� fd
d� Z
d%dd�Zdd� Zdd� Z
� fdd�Zdd� Zdd� Zdd� Zdd� Zdd � Z� ZS )&�Countera� Dict subclass for counting hashable items. Sometimes called a bag
or multiset. Elements are stored as dictionary keys and their counts
are stored as dictionary values.
>>> c = Counter('abcdeabcdabcaba') # count elements from a string
>>> c.most_common(3) # three most common elements
[('a', 5), ('b', 4), ('c', 3)]
>>> sorted(c) # list all unique elements
['a', 'b', 'c', 'd', 'e']
>>> ''.join(sorted(c.elements())) # list elements with repetitions
'aaaaabbbbcccdde'
>>> sum(c.values()) # total of all counts
15
>>> c['a'] # count of letter 'a'
5
>>> for elem in 'shazam': # update counts from an iterable
... c[elem] += 1 # by adding 1 to each element's count
>>> c['a'] # now there are seven 'a'
7
>>> del c['b'] # remove all 'b'
>>> c['b'] # now there are zero 'b'
0
>>> d = Counter('simsalabim') # make another counter
>>> c.update(d) # add in the second counter
>>> c['a'] # now there are nine 'a'
9
>>> c.clear() # empty the counter
>>> c
Counter()
Note: If a count is set to zero or reduced to zero, it will remain
in the counter until the entry is deleted or the counter is cleared:
>>> c = Counter('aaabbc')
>>> c['b'] -= 2 # reduce the count of 'b' by two
>>> c.most_common() # 'b' is still in, but its count is zero
[('a', 3), ('c', 1), ('b', 0)]
Nc s t t| ��� | j|f|� dS )a Create a new, empty Counter object. And if given, count elements
from an input iterable. Or, initialize the count from another mapping
of elements to their counts.
>>> c = Counter() # a new, empty counter
>>> c = Counter('gallahad') # a new counter from an iterable
>>> c = Counter({'a': 4, 'b': 2}) # a new counter from a mapping
>>> c = Counter(a=4, b=2) # a new counter from keyword args
N)�superr �__init__�update)�self�iterable�kwds)� __class__� �I/opt/alt/python37/lib/python3.7/site-packages/exabgp/vendoring/counter.pyr ? s zCounter.__init__c C s dS )z1The count of elements not in the Counter is zero.r r )r �keyr r r �__missing__M s zCounter.__missing__c C s6 |dkrt | �� td�dd�S tj|| �� td�d�S )z�List the n most common elements and their counts from the most
common to the least. If n is None, then list all element counts.
>>> Counter('abcdeabcdabcaba').most_common(3)
[('a', 5), ('b', 4), ('c', 3)]
N� T)r
�reverse)r
)�sorted� iteritems�_itemgetter�_heapq�nlargest)r �nr r r �most_commonR s zCounter.most_commonc C s t �tt| �� ��S )a� Iterator over elements repeating each as many times as its count.
>>> c = Counter('ABCABC')
>>> sorted(c.elements())
['A', 'A', 'B', 'B', 'C', 'C']
# Knuth's example for prime factors of 1836: 2**2 * 3**3 * 17**1
>>> prime_factors = Counter({2: 2, 3: 3, 17: 1})
>>> product = 1
>>> for factor in prime_factors.elements(): # loop over factors
... product *= factor # and multiply them
>>> product
1836
Note, if an element's count has been set to zero or is a negative
number, elements() will ignore it.
)�_chain�
from_iterable�_starmap�_repeatr )r r r r �elements_ s zCounter.elementsc C s t d��d S )Nz@Counter.fromkeys() is undefined. Use Counter(iterable) instead.)�NotImplementedError)�clsr �vr r r �fromkeysw s zCounter.fromkeysc s� |dk r~t |t�rX| rF| j}x8|�� D ]\}}||d�| | |<