def filter_unique_views(viewnames):
    """
    Returns the view names that that give different results in linear imaging.

    If views AB-CD and DC-BA are in 'viewnames' in this order, DC-BA will not
    be in the filtered list. Order is unchanged.

    Remove views that would give the same result because of time reciprocity
    (under linear assumption). 

    Parameters
    ----------
    viewnames : list[tuple[str]]

    Returns
    -------
    list[tuple[str]]

    Examples
    --------

    >>> filter_unique_views([('AB', 'CD'), ('DC', 'BA'), ('X', 'YZ'), ('ZY', 'X')])
    ... [('AB', 'CD'), ('X', 'YZ')]

    """
    unique_views = []
    seen_so_far = set()
    for view in viewnames:
        tx, rx = view
        rev_view = (rx[::-1], tx[::-1])
        if rev_view in seen_so_far:
            continue
        else:
            seen_so_far.add(view)
            unique_views.append(view)
    return unique_views