Return a sequence of strings naming the element of the tallyable object.

    :Examples:
    >>> var_str((5,))
    ['v1', 'v2', 'v3', 'v4', 'v5']

    >>> var_str((2,2))
    ['v1_1', 'v1_2', 'v2_1', 'v2_2']

def var_str(shape):
    """Return a sequence of strings naming the element of the tallyable object.

    :Examples:
    >>> var_str((5,))
    ['v1', 'v2', 'v3', 'v4', 'v5']

    >>> var_str((2,2))
    ['v1_1', 'v1_2', 'v2_1', 'v2_2']
    """

    if shape in [None, ()]:
        return ['v1', ]

    size = np.prod(shape)
    indices = (np.indices(shape) + 1).reshape(-1, size)
    return ['v' + '_'.join(list(map(str, i))) for i in zip(*indices)]