def canonical_tuple_path(tuple_path):
    """Make a Zope path the smallest possible. Unlike canonical_path
    it takes the path as a tuple.
    """
    canonical_path = []
    for item in tuple_path:
        if item == '..':
            if not canonical_path or not canonical_path[-1]:
                raise ValueError('Invalid path')
            canonical_path.pop()
        elif item != '.':
            if item == '' and canonical_path:
                continue
            canonical_path.append(item)
    return canonical_path
