pub fn add(&self, rhs: &G2Projective) -> G2Projective {
        // Algorithm 7, https://eprint.iacr.org/2015/1060.pdf

        let t0 = self.x * rhs.x;
        let t1 = self.y * rhs.y;
        let t2 = self.z * rhs.z;
        let t3 = self.x + self.y;
        let t4 = rhs.x + rhs.y;
        let t3 = t3 * t4;
        let t4 = t0 + t1;
        let t3 = t3 - t4;
        let t4 = self.y + self.z;
        let x3 = rhs.y + rhs.z;
        let t4 = t4 * x3;
        let x3 = t1 + t2;
        let t4 = t4 - x3;
        let x3 = self.x + self.z;
        let y3 = rhs.x + rhs.z;
        let x3 = x3 * y3;
        let y3 = t0 + t2;
        let y3 = x3 - y3;
        let x3 = t0 + t0;
        let t0 = x3 + t0;
        let t2 = mul_by_3b(t2);
        let z3 = t1 + t2;
        let t1 = t1 - t2;
        let y3 = mul_by_3b(y3);
        let x3 = t4 * y3;
        let t2 = t3 * t1;
        let x3 = t2 - x3;
        let y3 = y3 * t0;
        let t1 = t1 * z3;
        let y3 = t1 + y3;
        let t0 = t0 * t3;
        let z3 = z3 * t4;
        let z3 = z3 + t0;

        G2Projective {
            x: x3,
            y: y3,
            z: z3,
        }
    }
/// Adds this point to another point.
Adds this point to another point.
Adds this point to another point .
pub fn add(&self, rhs: &G2Projective) -> G2Projective {
        // Algorithm 7, https://eprint.iacr.org/2015/1060.pdf
        let t0 = self.x * rhs.x;
        let t1 = self.y * rhs.y;
        let t2 = self.z * rhs.z;
        let t3 = self.x + self.y;
        let t4 = rhs.x + rhs.y;
        let t3 = t3 * t4;
        let t4 = t0 + t1;
        let t3 = t3 - t4;
        let t4 = self.y + self.z;
        let x3 = rhs.y + rhs.z;
        let t4 = t4 * x3;
        let x3 = t1 + t2;
        let t4 = t4 - x3;
        let x3 = self.x + self.z;
        let y3 = rhs.x + rhs.z;
        let x3 = x3 * y3;
        let y3 = t0 + t2;
        let y3 = x3 - y3;
        let x3 = t0 + t0;
        let t0 = x3 + t0;
        let t2 = mul_by_3b(t2);
        let z3 = t1 + t2;
        let t1 = t1 - t2;
        let y3 = mul_by_3b(y3);
        let x3 = t4 * y3;
        let t2 = t3 * t1;
        let x3 = t2 - x3;
        let y3 = y3 * t0;
        let t1 = t1 * z3;
        let y3 = t1 + y3;
        let t0 = t0 * t3;
        let z3 = z3 * t4;
        let z3 = z3 + t0;
        G2Projective {
            x: x3,
            y: y3,
            z: z3,
        }
    }
pub fn add ( & self , rhs : & G2Projective ) -> G2Projective { // Algorithm 7, https://eprint.iacr.org/2015/1060.pdf let t0 = self . x * rhs . x ; let t1 = self . y * rhs . y ; let t2 = self . z * rhs . z ; let t3 = self . x + self . y ; let t4 = rhs . x + rhs . y ; let t3 = t3 * t4 ; let t4 = t0 + t1 ; let t3 = t3 - t4 ; let t4 = self . y + self . z ; let x3 = rhs . y + rhs . z ; let t4 = t4 * x3 ; let x3 = t1 + t2 ; let t4 = t4 - x3 ; let x3 = self . x + self . z ; let y3 = rhs . x + rhs . z ; let x3 = x3 * y3 ; let y3 = t0 + t2 ; let y3 = x3 - y3 ; let x3 = t0 + t0 ; let t0 = x3 + t0 ; let t2 = mul_by_3b ( t2 ) ; let z3 = t1 + t2 ; let t1 = t1 - t2 ; let y3 = mul_by_3b ( y3 ) ; let x3 = t4 * y3 ; let t2 = t3 * t1 ; let x3 = t2 - x3 ; let y3 = y3 * t0 ; let t1 = t1 * z3 ; let y3 = t1 + y3 ; let t0 = t0 * t3 ; let z3 = z3 * t4 ; let z3 = z3 + t0 ; G2Projective { x : x3 , y : y3 , z : z3 , } }
Adds this point to another point.
Adds this point to another point .
&self
rhs
&G2Projective
&self
rhs
&G2Projective