'Arguments:
name (str): The name of the metric.
group (str): The logical group name of the metrics to which this
metric belongs.
description (str, optional): A human-readable description to
include in the metric.
tags (dict, optional): Additional key/val attributes of the metric.'

def __init__(self, name, group, description=None, tags=None):

    if (not (name and group)):
        raise Exception('name    and    group    must    be    non-empty.')
    if ((tags is not None) and (not isinstance(tags, dict))):
        raise Exception('tags    must    be    a    dict    if    present.')
    self._name = name
    self._group = group
    self._description = description
    self._tags = copy.copy(tags)
    self._hash = 0
