'Like dict.update() but subtracts counts instead of replacing them.
Counts can be reduced below zero.  Both the inputs and outputs are
allowed to contain zero and negative counts.
Source can be an iterable, a dictionary, or another Counter instance.
>>> c = Counter(\'which\')
>>> c.subtract(\'witch\')             # subtract elements from another iterable
>>> c.subtract(Counter(\'watch\'))    # subtract elements from another counter
>>> c[\'h\']                          # 2 in which, minus 1 in witch, minus 1 in watch
0
>>> c[\'w\']                          # 1 in which, minus 1 in witch, minus 1 in watch
-1'

def subtract(*args, **kwds):

    if (not args):
        raise TypeError("descriptor    'subtract'    of    'Counter'    object    needs    an    argument")
    self = args[0]
    args = args[1:]
    if (len(args) > 1):
        raise TypeError(('expected    at    most    1    arguments,    got    %d' % len(args)))
    iterable = (args[0] if args else None)
    if (iterable is not None):
        self_get = self.get
        if isinstance(iterable, Mapping):
            for (elem, count) in iterable.items():
                self[elem] = (self_get(elem, 0) - count)
        else:
            for elem in iterable:
                self[elem] = (self_get(elem, 0) - 1)
    if kwds:
        self.subtract(kwds)
