def METHOD_NAME(c, attributes="all", out=None):
    """
    Print the difference.
    Given a diffset for A and a diffset for B, print red/green diffs to show
    the differences.
    """
    # Default to standard out unless another stream is provided
    out = out or sys.stdout
    A = c["b_not_a"]
    B = c["a_not_b"]
    cprint("@R{--- %s}" % c["a_name"])  # bright red
    cprint("@G{+++ %s}" % c["b_name"])  # bright green
    # Cut out early if we don't have any differences!
    if not A and not B:
        print("No differences\n")
        return
    def group_by_type(diffset):
        grouped = {}
        for entry in diffset:
            if entry[0] not in grouped:
                grouped[entry[0]] = []
            grouped[entry[0]].append(entry[1])
        # Sort by second value to make comparison slightly closer
        for key, values in grouped.items():
            values.sort()
        return grouped
    A = group_by_type(A)
    B = group_by_type(B)
    # print a directionally relevant diff
    keys = list(A) + list(B)
    category = None
    for key in keys:
        if "all" not in attributes and key not in attributes:
            continue
        # Write the attribute, B is subtraction A is addition
        subtraction = [] if key not in B else B[key]
        addition = [] if key not in A else A[key]
        # Bail out early if we don't have any entries
        if not subtraction and not addition:
            continue
        # If we have a new category, create a new section
        if category != key:
            category = key
            # print category in bold, colorized
            cprint("@*b{@@ %s @@}" % category)  # bold blue
        # Print subtractions first
        while subtraction:
            cprint("@R{-  %s}" % subtraction.pop(0))  # bright red
            if addition:
                cprint("@G{+  %s}" % addition.pop(0))  # bright green
        # Any additions left?
        while addition:
            cprint("@G{+  %s}" % addition.pop(0))