### Navigation

- index
- modules |
- next |
- previous |
- Schemes »

# Weierstrass for Elliptic Curves in Higher Codimension

The `weierstrass` module lets you transform a genus-one curve, given as a hypersurface in a toric surface, into Weierstrass form. The purpose of this module is to extend this to higher codimension subschemes of toric varieties. In general, this is an unsolved problem. However, for certain special cases this is known.

The simplest codimension-two case is the complete intersection of two quadratic equations in \(\mathbb{P}^3\)

    sage: R.<w,x,y,z> = QQ[]
    sage: quadratic1 = w^2+x^2+y^2
    sage: quadratic2 = z^2 + w*x
    sage: WeierstrassForm([quadratic1, quadratic2])
    (-1/4, 0)

Hence, the Weierstrass form of this complete intersection is \(Y^2 = X^3 - \frac{1}{4} X Z^4\).

`sage.schemes.toric.weierstrass_higher.``WeierstrassForm2`(polynomial, variables=None, transformation=False)

  Helper function for `WeierstrassForm()`

  Currently, only the case of the complete intersection of two quadratic equations in \(\mathbb{P}^3\) is supported.

  INPUT / OUTPUT:

  See `WeierstrassForm()`

  TESTS:

      sage: from sage.schemes.toric.weierstrass_higher import WeierstrassForm2
      sage: R.<w,x,y,z> = QQ[]
      sage: quadratic1 = w^2+x^2+y^2
      sage: quadratic2 = z^2 + w*x
      sage: WeierstrassForm2([quadratic1, quadratic2])
      (-1/4, 0)

`sage.schemes.toric.weierstrass_higher.``WeierstrassForm_P3`(quadratic1, quadratic2, variables=None)

  Bring a complete intersection of two quadratics into Weierstrass form.

  Input/output is the same as `sage.schemes.toric.weierstrass.WeierstrassForm()`, except that the two input polynomials must be quadratic polynomials in \(\mathbb{P}^3\).

  EXAMPLES:

      sage: from sage.schemes.toric.weierstrass_higher import WeierstrassForm_P3
      sage: R.<w,x,y,z> = QQ[]
      sage: quadratic1 = w^2+x^2+y^2
      sage: quadratic2 = z^2 + w*x
      sage: WeierstrassForm_P3(quadratic1, quadratic2)
      (-1/4, 0)

  TESTS:

      sage: R.<w,x,y,z,a0,a1,a2,a3,b0,b1,b2,b3,b4,b5> = QQ[]
      sage: p1 = w^2 + x^2 + y^2 + z^2
      sage: p2 = a0*w^2 + a1*x^2 + a2*y^2 + a3*z^2
      sage: p2 += b0*x*y + b1*x*z + b2*x*w + b3*y*z + b4*y*w + b5*z*w
      sage: a, b = WeierstrassForm_P3(p1, p2, [w,x,y,z])
      sage: a.total_degree(), len(a.coefficients())
      (4, 107)
      sage: b.total_degree(), len(b.coefficients())
      (6, 648)

`sage.schemes.toric.weierstrass_higher.``WeierstrassMap_P3`(quadratic1, quadratic2, variables=None)

  Bring a complete intersection of two quadratics into Weierstrass form.

  Input/output is the same as `sage.schemes.toric.weierstrass.WeierstrassForm()`, except that the two input polynomials must be quadratic polynomials in \(\mathbb{P}^3\).

  EXAMPLES:

      sage: from sage.schemes.toric.weierstrass_higher import \
      ....:     WeierstrassMap_P3, WeierstrassForm_P3
      sage: R.<w,x,y,z> = QQ[]
      sage: quadratic1 = w^2+x^2+y^2
      sage: quadratic2 = z^2 + w*x
      sage: X, Y, Z = WeierstrassMap_P3(quadratic1, quadratic2)
      sage: X
      1/1024*w^8 + 3/256*w^6*x^2 + 19/512*w^4*x^4 + 3/256*w^2*x^6 + 1/1024*x^8
      sage: Y
      1/32768*w^12 - 7/16384*w^10*x^2 - 145/32768*w^8*x^4 - 49/8192*w^6*x^6
      - 145/32768*w^4*x^8 - 7/16384*w^2*x^10 + 1/32768*x^12
      sage: Z
      -1/8*w^2*y*z + 1/8*x^2*y*z

      sage: a, b = WeierstrassForm_P3(quadratic1, quadratic2);  a, b
      (-1/4, 0)

      sage: ideal = R.ideal(quadratic1, quadratic2)
      sage: (-Y^2 + X^3 + a*X*Z^4 + b*Z^6).reduce(ideal)
      0

  TESTS:

      sage: R.<w,x,y,z,a0,a1,a2,a3> = GF(101)[]
      sage: p1 = w^2 + x^2 + y^2 + z^2
      sage: p2 = a0*w^2 + a1*x^2 + a2*y^2 + a3*z^2
      sage: X, Y, Z = WeierstrassMap_P3(p1, p2, [w,x,y,z])
      sage: X.total_degree(), len(X.coefficients())
      (22, 4164)
      sage: Y.total_degree(), len(Y.coefficients())
      (33, 26912)
      sage: Z.total_degree(), len(Z.coefficients())
      (10, 24)
      sage: Z
      w*x*y*z*a0^3*a1^2*a2 - w*x*y*z*a0^2*a1^3*a2 - w*x*y*z*a0^3*a1*a2^2
      + w*x*y*z*a0*a1^3*a2^2 + w*x*y*z*a0^2*a1*a2^3 - w*x*y*z*a0*a1^2*a2^3
      - w*x*y*z*a0^3*a1^2*a3 + w*x*y*z*a0^2*a1^3*a3 + w*x*y*z*a0^3*a2^2*a3
      - w*x*y*z*a1^3*a2^2*a3 - w*x*y*z*a0^2*a2^3*a3 + w*x*y*z*a1^2*a2^3*a3
      + w*x*y*z*a0^3*a1*a3^2 - w*x*y*z*a0*a1^3*a3^2 - w*x*y*z*a0^3*a2*a3^2
      + w*x*y*z*a1^3*a2*a3^2 + w*x*y*z*a0*a2^3*a3^2 - w*x*y*z*a1*a2^3*a3^2
      - w*x*y*z*a0^2*a1*a3^3 + w*x*y*z*a0*a1^2*a3^3 + w*x*y*z*a0^2*a2*a3^3
      - w*x*y*z*a1^2*a2*a3^3 - w*x*y*z*a0*a2^2*a3^3 + w*x*y*z*a1*a2^2*a3^3

### Navigation

- index
- modules |
- next |
- previous |
- Schemes »