We call a `Point`

an element of the elliptic curve group, which we can represent with its coordinates. Let's define a `Point`

class to encapsulate the $x$ and $y$ coordinates in the generalised curve equation of $y^2 = x^3 + ax + b$**.**

@dataclassclass Point:x: inty: intcurve: EllipticCurvedef __post_init__(self):# Ignore validation for Iif self.x is None and self.y is None:return# Encapsulate int coordinates in FieldElementself.x = FieldElement(self.x, self.curve.field)self.y = FieldElement(self.y, self.curve.field)# Verify if the point satisfies the curve equationif self not in self.curve:raise ValueError

**Point-compression:** To reduce the storage size for a curve point, one can also store a sign and the`x `

coordinate. It is then possible to reconstruct the `y`

by calculating `sign * sqrt(x^3+a*x+b).`