'Add one point to another point.'

def __add__(self, other):

    if (other == INFINITY):
        return self
    if (self == INFINITY):
        return other
    assert (self.__curve == other.__curve)
    if (self.__x == other.__x):
        if (((self.__y + other.__y) % self.__curve.p()) == 0):
            return INFINITY
        else:
            return self.double()
    p = self.__curve.p()
    l = (((other.__y - self.__y) * numbertheory.inverse_mod((other.__x - self.__x), p)) % p)
    x3 = ((((l * l) - self.__x) - other.__x) % p)
    y3 = (((l * (self.__x - x3)) - self.__y) % p)
    return Point(self.__curve, x3, y3)
