fn operate_with(&self, other: &Self) -> Self {
        if other.is_neutral_element() {
            self.clone()
        } else if self.is_neutral_element() {
            other.clone()
        } else {
            let [px, py, pz] = self.coordinates();
            let [qx, qy, qz] = other.coordinates();
            let u1 = qy * pz;
            let u2 = py * qz;
            let v1 = qx * pz;
            let v2 = px * qz;
            if v1 == v2 {
                if u1 != u2 || *py == FieldElement::zero() {
                    Self::neutral_element()
                } else {
                    self.double()
                }
            } else {
                let u = u1 - &u2;
                let v = v1 - &v2;
                let w = pz * qz;

                let u_square = &u * &u;
                let v_square = &v * &v;
                let v_cube = &v * &v_square;
                let v_square_v2 = &v_square * &v2;

                let a = &u_square * &w - &v_cube - (&v_square_v2 + &v_square_v2);

                let xp = &v * &a;
                let yp = u * (&v_square_v2 - a) - &v_cube * u2;
                let zp = &v_cube * w;

                debug_assert_eq!(
                    E::defining_equation_projective(&xp, &yp, &zp),
                    FieldElement::<E::BaseField>::zero()
                );
                // SAFETY: The values `x_p, y_p, z_p` are computed correctly to be on the curve.
                // The assertion above verifies that the resulting point is valid.
                Self::new([xp, yp, zp]).unwrap()
            }
        }
    }
Computes the addition of `self` and `other`.
Taken from "Moonmath" (Algorithm 7, page 89)
crates/math/src/elliptic_curve/short_weierstrass/point.rs