pub fn double(&self) -> G1Projective {
        // http://www.hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#doubling-dbl-2009-l
        //
        // There are no points of order 2.

        let a = self.x.square();
        let b = self.y.square();
        let c = b.square();
        let d = self.x + b;
        let d = d.square();
        let d = d - a - c;
        let d = d + d;
        let e = a + a + a;
        let f = e.square();
        let z3 = self.z * self.y;
        let z3 = z3 + z3;
        let x3 = f - (d + d);
        let c = c + c;
        let c = c + c;
        let c = c + c;
        let y3 = e * (d - x3) - c;

        let tmp = G1Projective {
            x: x3,
            y: y3,
            z: z3,
        };

        G1Projective::conditional_select(&tmp, &G1Projective::identity(), self.is_identity())
    }
/// Computes the doubling of this point.
Computes the doubling of this point.
Computes the doubling of this point .
pub fn double(&self) -> G1Projective {
        // http://www.hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#doubling-dbl-2009-l
        //
        // There are no points of order 2.
        let a = self.x.square();
        let b = self.y.square();
        let c = b.square();
        let d = self.x + b;
        let d = d.square();
        let d = d - a - c;
        let d = d + d;
        let e = a + a + a;
        let f = e.square();
        let z3 = self.z * self.y;
        let z3 = z3 + z3;
        let x3 = f - (d + d);
        let c = c + c;
        let c = c + c;
        let c = c + c;
        let y3 = e * (d - x3) - c;
        let tmp = G1Projective {
            x: x3,
            y: y3,
            z: z3,
        };
        G1Projective::conditional_select(&tmp, &G1Projective::identity(), self.is_identity())
    }
pub fn double ( & self ) -> G1Projective { // http://www.hyperelliptic.org/EFD/g1p/auto-shortw-jacobian-0.html#doubling-dbl-2009-l // // There are no points of order 2. let a = self . x . square ( ) ; let b = self . y . square ( ) ; let c = b . square ( ) ; let d = self . x + b ; let d = d . square ( ) ; let d = d - a - c ; let d = d + d ; let e = a + a + a ; let f = e . square ( ) ; let z3 = self . z * self . y ; let z3 = z3 + z3 ; let x3 = f - ( d + d ) ; let c = c + c ; let c = c + c ; let c = c + c ; let y3 = e * ( d - x3 ) - c ; let tmp = G1Projective { x : x3 , y : y3 , z : z3 , } ; G1Projective :: conditional_select ( & tmp , & G1Projective :: identity ( ) , self . is_identity ( ) ) }
Computes the doubling of this point.
Computes the doubling of this point .
&self
&self