import itertools


def possible_pairs(s, mirrors=True):
    """Return possible pairs from a set of values.

    Assume `s = ['a', 'b']`. Then return examples for the following calls are:

        * `possible_pairs(s)` returns `[('a', 'b'), ('b', 'a')]`
        * `possible_pairs(s, mirros=False)` returns `[('a', 'b')]`

    :param s: Names of the elements from which the pairs will be created.
    :type s: set or list or tuple
    :param mirrors: Include mirrors or not.
    :type mirrors: bool
    :return: List of pairs as tuples.
    :rtype: list of tuples of str
    """
    if len(s) != len(set(s)):
        raise ValueError('duplicates found, but not allowed')
    return list(itertools.permutations(s, 2)) if mirrors else list(itertools.combinations(s, 2))