canonical
The canonical representative of this line — useful for unoriented equivalence.
a.canonical == b.canonical detects the same point set under opposed orientations. The canonical orientation makes the first non-zero of (gx, gy) positive; the sign decision reads rounded components, so a == b implies a.canonical == b.canonical. At infinity the point set is unique, so canonicalization is scale-blind as well as sign-blind: an at-infinity line whose gz doesn't round to zero at the SCALE quantum maps to Line(0, 0, 1); one that rounds all-zero stays itself. The representative is rebuilt through copy, so a subclass comes back as its own class; an already-canonical line returns this.