def determine_triad(triad, shorthand=False, no_inversions=False,
        placeholder=None):
    """Name the triad; return answers in a list.

    The third argument should not be given. If shorthand is True the answers
    will be in abbreviated form.

    This function can determine major, minor, diminished and suspended
    triads. Also knows about invertions.

    Examples:
    >>> determine_triad(['A', 'C', 'E'])
    'A minor triad'
    >>> determine_triad(['C', 'E', 'A'])
    'A minor triad, first inversion'
    >>> determine_triad(['A', 'C', 'E'], True)
    'Am'
    """
    if len(triad) != 3:
        # warning: raise exception: not a triad
        return False

    def inversion_exhauster(triad, shorthand, tries, result):
        """Run tries every inversion and save the result."""
        intval1 = intervals.determine(triad[0], triad[1], True)
        intval2 = intervals.determine(triad[0], triad[2], True)

        def add_result(short):
            result.append((short, tries, triad[0]))

        intval = intval1 + intval2
        if intval == '25':
            add_result('sus2')
        elif intval == '3b7':
            add_result('dom7')  # changed from just '7'
        elif intval == '3b5':
            add_result('7b5')  # why not b5?
        elif intval == '35':
            add_result('M')
        elif intval == '3#5':
            add_result('aug')
        elif intval == '36':
            add_result('M6')
        elif intval == '37':
            add_result('M7')
        elif intval == 'b3b5':
            add_result('dim')
        elif intval == 'b35':
            add_result('m')
        elif intval == 'b36':
            add_result('m6')
        elif intval == 'b3b7':
            add_result('m7')
        elif intval == 'b37':
            add_result('m/M7')
        elif intval == '45':
            add_result('sus4')
        elif intval == '5b7':
            add_result('m7')
        elif intval == '57':
            add_result('M7')
        if tries != 3 and not no_inversions:
            return inversion_exhauster([triad[-1]] + triad[:-1], shorthand,
                                       tries + 1, result)
        else:
            res = []
            for r in result:
                if shorthand:
                    res.append(r[2] + r[0])
                else:
                    res.append(r[2] + chord_shorthand_meaning[r[0]] +
                            int_desc(r[1]))
            return res
    return inversion_exhauster(triad, shorthand, 1, [])
Name the triad; return answers in a list.

    The third argument should not be given. If shorthand is True the answers
    will be in abbreviated form.

    This function can determine major, minor, diminished and suspended
    triads. Also knows about invertions.

    Examples:
    >>> determine_triad(['A', 'C', 'E'])
    'A minor triad'
    >>> determine_triad(['C', 'E', 'A'])
    'A minor triad, first inversion'
    >>> determine_triad(['A', 'C', 'E'], True)
    'Am'