'An unordered sequence specific comparison. It asserts that
actual_seq and expected_seq have the same element counts.
Equivalent to::
self.assertEqual(Counter(iter(actual_seq)),
Counter(iter(expected_seq)))
Asserts that each element has the same count in both sequences.
Example:
- [0, 1, 1] and [1, 0, 1] compare equal.
- [0, 0, 1] and [0, 1] compare unequal.'

def assertItemsEqual(self, expected_seq, actual_seq, msg=None):

    (first_seq, second_seq) = (list(actual_seq), list(expected_seq))
    with warnings.catch_warnings():
        if sys.py3kwarning:
            for _msg in ['(code|dict|type)    inequality    comparisons', 'builtin_function_or_method    order    comparisons', 'comparing    unequal    types']:
                warnings.filterwarnings('ignore', _msg, DeprecationWarning)
        try:
            first = collections.Counter(first_seq)
            second = collections.Counter(second_seq)
        except TypeError:
            differences = _count_diff_all_purpose(first_seq, second_seq)
        else:
            if (first == second):
                return
            differences = _count_diff_hashable(first_seq, second_seq)
    if differences:
        standardMsg = 'Element    counts    were    not    equal:\n'
        lines = [('First    has    %d,    Second    has    %d:        %r' % diff) for diff in differences]
        diffMsg = '\n'.join(lines)
        standardMsg = self._truncateMessage(standardMsg, diffMsg)
        msg = self._formatMessage(msg, standardMsg)
        self.fail(msg)
