'Returns a sympy.sets.Set of intersection objects,
if possible.'

def _intersect(self, o):

    from sympy.sets import Set, FiniteSet, Union
    from sympy.geometry import Point
    try:
        if o.is_FiniteSet:
            inter = FiniteSet(*(p for p in o if self.contains(p)))
        else:
            inter = self.intersection(o)
    except NotImplementedError:
        return None
    points = FiniteSet(*[p for p in inter if isinstance(p, Point)])
    non_points = [p for p in inter if (not isinstance(p, Point))]
    return Union(*(non_points + [points]))
