I'm not sure that I'm ready to force all Point arguments to be Points; most (all?) accept a tuple or a Point. If you leave the `p = Point(p)` there, it assures you that p is now a Point *and* does checking for imaginary parts there.