pub fn phi(&self) -> Self {
        let [x, y, z] = self.coordinates();
        // SAFETY:
        // - `conjugate()` preserves the validity of the field element.
        // - `unwrap()` is safe because the transformation follows
        //   **a known valid isomorphism** between the twist and E.
        let point = Self::new([
            x.conjugate() * GAMMA_12,
            y.conjugate() * GAMMA_13,
            z.conjugate(),
        ]);
        point.unwrap()
    }
phi morphism used to G2 subgroup check for twisted curve.
We also use phi at the last lines of the Miller Loop of the pairing.
phi(q) = (x^p, y^p, z^p), where (x, y, z) are the projective coordinates of q.
See https://hackmd.io/@Wimet/ry7z1Xj-2#Subgroup-Checks.

# Safety

- The function assumes `self` is a valid point on the BN254 twist curve.
- The transformation follows a known isomorphism and preserves validity.
crates/math/src/elliptic_curve/short_weierstrass/curves/bn_254/curve.rs