':param other:
A PrimePoint object
:return:
A PrimePoint object'

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) * 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 PrimePoint(self.curve, x3, y3)
