from functools import reduce


def geometric_mean(data):
    """
    The `geometric mean`_ uses the product of a set of numbers to determine their central tendency,
    as opposed to the regular arithmetic mean which uses their sum.

    .. _`geometric mean`: https://en.wikipedia.org/wiki/Geometric_mean

    Equation:
        .. math::
            \\sqrt[n]{x_1 x_2 \\dotso x_n}

    Args:
        data: A list of numeric objects.

    Returns:
        A float object.

    Examples:
        >>> geometric_mean([1])
        1.0
        >>> geometric_mean([1, 10])
        3.1622776601683795
    """
    return pow(reduce(lambda v, mem: v * mem, data, 1.0), 1 / float(len(data)))