Open
Conversation
357629e to
7cca95a
Compare
547dee1 to
5930e3d
Compare
5 tasks
8bc5b18 to
cd97a1b
Compare
cd97a1b to
2f3753a
Compare
vbraun
pushed a commit
to vbraun/sage
that referenced
this pull request
Dec 10, 2023
sagemathgh-36815: Add badges to README.md <!-- ^^^^^ Please provide a concise, informative and self-explanatory title. Don't put issue numbers in there, do this in the PR body below. For example, instead of "Fixes sagemath#1234" use "Introduce new method to calculate 1+1" --> <!-- Describe your changes here in detail --> for those who want to play with Sage instantly, and also as a preparation for sagemath#36245. See this [REAME.md](https://github.com/kwankyu/sage/tree/p/add-binder- badge-to-readme). <!-- Why is this change required? What problem does it solve? --> <!-- If this PR resolves an open issue, please link to it here. For example "Fixes sagemath#12345". --> <!-- If your change requires a documentation PR, please link it appropriately. --> ### 📝 Checklist <!-- Put an `x` in all the boxes that apply. --> <!-- If your change requires a documentation PR, please link it appropriately --> <!-- If you're unsure about any of these, don't hesitate to ask. We're here to help! --> <!-- Feel free to remove irrelevant items. --> - [x] The title is concise, informative, and self-explanatory. - [x] The description explains in detail what this PR is about. - [x] I have linked a relevant issue or discussion. - [ ] I have created tests covering the changes. - [ ] I have updated the documentation accordingly. ### ⌛ Dependencies <!-- List all open PRs that this PR logically depends on - sagemath#12345: short description why this is a dependency - sagemath#34567: ... --> <!-- If you're unsure about any of these, don't hesitate to ask. We're here to help! --> URL: sagemath#36815 Reported by: Kwankyu Lee Reviewer(s): Matthias Köppe
vbraun
pushed a commit
to vbraun/sage
that referenced
this pull request
Dec 13, 2023
sagemathgh-36815: Add badges to README.md <!-- ^^^^^ Please provide a concise, informative and self-explanatory title. Don't put issue numbers in there, do this in the PR body below. For example, instead of "Fixes sagemath#1234" use "Introduce new method to calculate 1+1" --> <!-- Describe your changes here in detail --> for those who want to play with Sage instantly, and also as a preparation for sagemath#36245. See this [REAME.md](https://github.com/kwankyu/sage/tree/p/add-binder- badge-to-readme). <!-- Why is this change required? What problem does it solve? --> <!-- If this PR resolves an open issue, please link to it here. For example "Fixes sagemath#12345". --> <!-- If your change requires a documentation PR, please link it appropriately. --> ### 📝 Checklist <!-- Put an `x` in all the boxes that apply. --> <!-- If your change requires a documentation PR, please link it appropriately --> <!-- If you're unsure about any of these, don't hesitate to ask. We're here to help! --> <!-- Feel free to remove irrelevant items. --> - [x] The title is concise, informative, and self-explanatory. - [x] The description explains in detail what this PR is about. - [x] I have linked a relevant issue or discussion. - [ ] I have created tests covering the changes. - [ ] I have updated the documentation accordingly. ### ⌛ Dependencies <!-- List all open PRs that this PR logically depends on - sagemath#12345: short description why this is a dependency - sagemath#34567: ... --> <!-- If you're unsure about any of these, don't hesitate to ask. We're here to help! --> URL: sagemath#36815 Reported by: Kwankyu Lee Reviewer(s): Matthias Köppe
8d4f219 to
ee50dc0
Compare
11dfcd7 to
4e558f9
Compare
86faf2a to
f5c436c
Compare
f5c436c to
2a1dc21
Compare
5 tasks
|
Documentation preview for this PR (built with commit 3a05362; changes) is ready! 🎉 |
Contributor
|
The branches that this creates -- they do not contain the Sage sources, correct? |
Collaborator
Author
|
No. It adds a Dockerfile and a directory |
Collaborator
Author
|
It creates a branch of the PR branch in |
Collaborator
Author
|
A recent example is in #35467 |
vbraun
pushed a commit
to vbraun/sage
that referenced
this pull request
Apr 17, 2024
sagemathgh-35467: Attach Jacobians to function fields and curves <!-- Please provide a concise, informative and self-explanatory title. --> <!-- Don't put issue numbers in the title. Put it in the Description below. --> <!-- For example, instead of "Fixes sagemath#12345", use "Add a new method to multiply two integers" --> ### 📚 Description We attach Jacobians to function fields and curves, enabling arithmetic with the points of the Jacobian. Fixes sagemath#34232. A point of Jacobian is represented by an effective divisor `D` such that the point is the divisor class of `D - B` (of degree 0) with a fixed base divisor `B`. There are two models for Jacobian arithmetic: - Hess model: `D` is internally represented by a pair of certain ideals and arithmetic relies on divisor reduction using Riemann-Roch space computation by Hess' algorithm. - Khuri-Makdisi model: `D` is internally represented by a linear subspace `W_D` of a linear space `V` and arithmetic uses Khuri-Makdisi's linear algebra algorithms. For implementation, sagemath#15113 was referenced. An example with non-hyperelliptic genus 3 curve: ```sage sage: A2.<x,y> = AffineSpace(QQ, 2) sage: f = y^3 + x^4 - 5*x^2*y + 2*x*y - x^2 - 5*y - 4*x + 1 sage: C = Curve(f, A2) sage: X = C.projective_closure() sage: X.genus() 3 sage: X.rational_points(bound=5) [(0 : 0 : 1), (1/3 : 1/3 : 1)] sage: Q = X(0,0,1).place() sage: P = X(1,1,3).place() sage: D = P - Q sage: D.degree() 0 sage: J = X.jacobian(model='hess', base_div=3*Q) sage: G = J.group() sage: p = G.point(D) sage: 2*p + 3*p == 5*p True ``` An example with elliptic curve: ```sage sage: k.<a> = GF((5,2)) sage: E = EllipticCurve(k,[1,0]); E Elliptic Curve defined by y^2 = x^3 + x over Finite Field in a of size 5^2 sage: E.order() 32 sage: P = E([a, 2*a + 4]) sage: P (a : 2*a + 4 : 1) sage: P.order() 8 sage: p = P.point_of_jacobian_of_curve() sage: p [Place (x + 4*a, y + 3*a + 1)] sage: p.order() 8 sage: Q = 3*P sage: q = Q.point_of_jacobian_of_curve() sage: q == 3*p True sage: G = p.parent() sage: G.order() 32 sage: G Group of rational points of Jacobian over Finite Field in a of size 5^2 (Hess model) sage: J = G.parent(); J Jacobian of Projective Plane Curve over Finite Field in a of size 5^2 defined by x^2*y + y^3 - x*z^2 (Hess model) sage: J.curve() == E.affine_patch(2).projective_closure() True ``` An example with hyperelliptic curve: ```sage sage: R.<x> = PolynomialRing(GF(11)) sage: f = x^6 + x + 1 sage: H = HyperellipticCurve(f) sage: J = H.jacobian() sage: D = J(H.lift_x(1)) sage: D # divisor in Mumford representation (x + 10, y + 6) sage: jacobian_order = sum(H.frobenius_polynomial()) sage: jacobian_order 234 sage: p = D.point_of_jacobian_of_curve(); p sage: p # Jacobian point represented by an effective divisor [Place (1/x0, 1/x0^3*x1 + 1) + Place (x0 + 10, x1 + 6)] sage: p.order() 39 sage: 234*p == 0 True sage: G = p.parent() sage: G Group of rational points of Jacobian over Finite Field of size 11 (Hess model) sage: J = G.parent() sage: J Jacobian of Projective Plane Curve over Finite Field of size 11 defined by x0^6 + x0^5*x1 + x1^6 - x0^4*x2^2 (Hess model) sage: C = J.curve() sage: C Projective Plane Curve over Finite Field of size 11 defined by x0^6 + x0^5*x1 + x1^6 - x0^4*x2^2 sage: C.affine_patch(0) == H.affine_patch(2) True ``` [](https://mybinder.org/v2 /gh/kwankyu/sage/p/35467/add-jacobian-groups-notebook-binder) prepared with sagemath#36245 <!-- Describe your changes here in detail. --> <!-- Why is this change required? What problem does it solve? --> <!-- If this PR resolves an open issue, please link to it here. For example "Fixes sagemath#12345". --> <!-- If your change requires a documentation PR, please link it appropriately. --> ### 📝 Checklist <!-- Put an `x` in all the boxes that apply. It should be `[x]` not `[x ]`. --> - [x] The title is concise, informative, and self-explanatory. - [x] The description explains in detail what this PR is about. - [x] I have linked a relevant issue or discussion. - [x] I have created tests covering the changes. - [x] I have updated the documentation accordingly. ### ⌛ Dependencies <!-- List all open PRs that this PR logically depends on - sagemath#12345: short description why this is a dependency - sagemath#34567: ... --> <!-- If you're unsure about any of these, don't hesitate to ask. We're here to help! --> URL: sagemath#35467 Reported by: Kwankyu Lee Reviewer(s): Kwankyu Lee, Matthias Köppe
vbraun
pushed a commit
to vbraun/sage
that referenced
this pull request
Apr 17, 2024
<!-- Please provide a concise, informative and self-explanatory title. --> <!-- Don't put issue numbers in the title. Put it in the Description below. --> <!-- For example, instead of "Fixes sagemath#12345", use "Add a new method to multiply two integers" --> ### 📚 Description We attach Jacobians to function fields and curves, enabling arithmetic with the points of the Jacobian. Fixes sagemath#34232. A point of Jacobian is represented by an effective divisor `D` such that the point is the divisor class of `D - B` (of degree 0) with a fixed base divisor `B`. There are two models for Jacobian arithmetic: - Hess model: `D` is internally represented by a pair of certain ideals and arithmetic relies on divisor reduction using Riemann-Roch space computation by Hess' algorithm. - Khuri-Makdisi model: `D` is internally represented by a linear subspace `W_D` of a linear space `V` and arithmetic uses Khuri-Makdisi's linear algebra algorithms. For implementation, sagemath#15113 was referenced. An example with non-hyperelliptic genus 3 curve: ```sage sage: A2.<x,y> = AffineSpace(QQ, 2) sage: f = y^3 + x^4 - 5*x^2*y + 2*x*y - x^2 - 5*y - 4*x + 1 sage: C = Curve(f, A2) sage: X = C.projective_closure() sage: X.genus() 3 sage: X.rational_points(bound=5) [(0 : 0 : 1), (1/3 : 1/3 : 1)] sage: Q = X(0,0,1).place() sage: P = X(1,1,3).place() sage: D = P - Q sage: D.degree() 0 sage: J = X.jacobian(model='hess', base_div=3*Q) sage: G = J.group() sage: p = G.point(D) sage: 2*p + 3*p == 5*p True ``` An example with elliptic curve: ```sage sage: k.<a> = GF((5,2)) sage: E = EllipticCurve(k,[1,0]); E Elliptic Curve defined by y^2 = x^3 + x over Finite Field in a of size 5^2 sage: E.order() 32 sage: P = E([a, 2*a + 4]) sage: P (a : 2*a + 4 : 1) sage: P.order() 8 sage: p = P.point_of_jacobian_of_curve() sage: p [Place (x + 4*a, y + 3*a + 1)] sage: p.order() 8 sage: Q = 3*P sage: q = Q.point_of_jacobian_of_curve() sage: q == 3*p True sage: G = p.parent() sage: G.order() 32 sage: G Group of rational points of Jacobian over Finite Field in a of size 5^2 (Hess model) sage: J = G.parent(); J Jacobian of Projective Plane Curve over Finite Field in a of size 5^2 defined by x^2*y + y^3 - x*z^2 (Hess model) sage: J.curve() == E.affine_patch(2).projective_closure() True ``` An example with hyperelliptic curve: ```sage sage: R.<x> = PolynomialRing(GF(11)) sage: f = x^6 + x + 1 sage: H = HyperellipticCurve(f) sage: J = H.jacobian() sage: D = J(H.lift_x(1)) sage: D # divisor in Mumford representation (x + 10, y + 6) sage: jacobian_order = sum(H.frobenius_polynomial()) sage: jacobian_order 234 sage: p = D.point_of_jacobian_of_curve(); p sage: p # Jacobian point represented by an effective divisor [Place (1/x0, 1/x0^3*x1 + 1) + Place (x0 + 10, x1 + 6)] sage: p.order() 39 sage: 234*p == 0 True sage: G = p.parent() sage: G Group of rational points of Jacobian over Finite Field of size 11 (Hess model) sage: J = G.parent() sage: J Jacobian of Projective Plane Curve over Finite Field of size 11 defined by x0^6 + x0^5*x1 + x1^6 - x0^4*x2^2 (Hess model) sage: C = J.curve() sage: C Projective Plane Curve over Finite Field of size 11 defined by x0^6 + x0^5*x1 + x1^6 - x0^4*x2^2 sage: C.affine_patch(0) == H.affine_patch(2) True ``` [](https://mybinder.org/v2 /gh/kwankyu/sage/p/35467/add-jacobian-groups-notebook-binder) prepared with sagemath#36245 <!-- Describe your changes here in detail. --> <!-- Why is this change required? What problem does it solve? --> <!-- If this PR resolves an open issue, please link to it here. For example "Fixes sagemath#12345". --> <!-- If your change requires a documentation PR, please link it appropriately. --> ### 📝 Checklist <!-- Put an `x` in all the boxes that apply. It should be `[x]` not `[x ]`. --> - [x] The title is concise, informative, and self-explanatory. - [x] The description explains in detail what this PR is about. - [x] I have linked a relevant issue or discussion. - [x] I have created tests covering the changes. - [x] I have updated the documentation accordingly. ### ⌛ Dependencies <!-- List all open PRs that this PR logically depends on - sagemath#12345: short description why this is a dependency - sagemath#34567: ... --> <!-- If you're unsure about any of these, don't hesitate to ask. We're here to help! --> URL: sagemath#35467 Reported by: Kwankyu Lee Reviewer(s): Kwankyu Lee, Matthias Köppe
vbraun
pushed a commit
to vbraun/sage
that referenced
this pull request
Apr 18, 2024
sagemathgh-35467: Attach Jacobians to function fields and curves <!-- Please provide a concise, informative and self-explanatory title. --> <!-- Don't put issue numbers in the title. Put it in the Description below. --> <!-- For example, instead of "Fixes sagemath#12345", use "Add a new method to multiply two integers" --> ### 📚 Description We attach Jacobians to function fields and curves, enabling arithmetic with the points of the Jacobian. Fixes sagemath#34232. A point of Jacobian is represented by an effective divisor `D` such that the point is the divisor class of `D - B` (of degree 0) with a fixed base divisor `B`. There are two models for Jacobian arithmetic: - Hess model: `D` is internally represented by a pair of certain ideals and arithmetic relies on divisor reduction using Riemann-Roch space computation by Hess' algorithm. - Khuri-Makdisi model: `D` is internally represented by a linear subspace `W_D` of a linear space `V` and arithmetic uses Khuri-Makdisi's linear algebra algorithms. For implementation, sagemath#15113 was referenced. An example with non-hyperelliptic genus 3 curve: ```sage sage: A2.<x,y> = AffineSpace(QQ, 2) sage: f = y^3 + x^4 - 5*x^2*y + 2*x*y - x^2 - 5*y - 4*x + 1 sage: C = Curve(f, A2) sage: X = C.projective_closure() sage: X.genus() 3 sage: X.rational_points(bound=5) [(0 : 0 : 1), (1/3 : 1/3 : 1)] sage: Q = X(0,0,1).place() sage: P = X(1,1,3).place() sage: D = P - Q sage: D.degree() 0 sage: J = X.jacobian(model='hess', base_div=3*Q) sage: G = J.group() sage: p = G.point(D) sage: 2*p + 3*p == 5*p True ``` An example with elliptic curve: ```sage sage: k.<a> = GF((5,2)) sage: E = EllipticCurve(k,[1,0]); E Elliptic Curve defined by y^2 = x^3 + x over Finite Field in a of size 5^2 sage: E.order() 32 sage: P = E([a, 2*a + 4]) sage: P (a : 2*a + 4 : 1) sage: P.order() 8 sage: p = P.point_of_jacobian_of_curve() sage: p [Place (x + 4*a, y + 3*a + 1)] sage: p.order() 8 sage: Q = 3*P sage: q = Q.point_of_jacobian_of_curve() sage: q == 3*p True sage: G = p.parent() sage: G.order() 32 sage: G Group of rational points of Jacobian over Finite Field in a of size 5^2 (Hess model) sage: J = G.parent(); J Jacobian of Projective Plane Curve over Finite Field in a of size 5^2 defined by x^2*y + y^3 - x*z^2 (Hess model) sage: J.curve() == E.affine_patch(2).projective_closure() True ``` An example with hyperelliptic curve: ```sage sage: R.<x> = PolynomialRing(GF(11)) sage: f = x^6 + x + 1 sage: H = HyperellipticCurve(f) sage: J = H.jacobian() sage: D = J(H.lift_x(1)) sage: D # divisor in Mumford representation (x + 10, y + 6) sage: jacobian_order = sum(H.frobenius_polynomial()) sage: jacobian_order 234 sage: p = D.point_of_jacobian_of_curve(); p sage: p # Jacobian point represented by an effective divisor [Place (1/x0, 1/x0^3*x1 + 1) + Place (x0 + 10, x1 + 6)] sage: p.order() 39 sage: 234*p == 0 True sage: G = p.parent() sage: G Group of rational points of Jacobian over Finite Field of size 11 (Hess model) sage: J = G.parent() sage: J Jacobian of Projective Plane Curve over Finite Field of size 11 defined by x0^6 + x0^5*x1 + x1^6 - x0^4*x2^2 (Hess model) sage: C = J.curve() sage: C Projective Plane Curve over Finite Field of size 11 defined by x0^6 + x0^5*x1 + x1^6 - x0^4*x2^2 sage: C.affine_patch(0) == H.affine_patch(2) True ``` [](https://mybinder.org/v2 /gh/kwankyu/sage/p/35467/add-jacobian-groups-notebook-binder) prepared with sagemath#36245 <!-- Describe your changes here in detail. --> <!-- Why is this change required? What problem does it solve? --> <!-- If this PR resolves an open issue, please link to it here. For example "Fixes sagemath#12345". --> <!-- If your change requires a documentation PR, please link it appropriately. --> ### 📝 Checklist <!-- Put an `x` in all the boxes that apply. It should be `[x]` not `[x ]`. --> - [x] The title is concise, informative, and self-explanatory. - [x] The description explains in detail what this PR is about. - [x] I have linked a relevant issue or discussion. - [x] I have created tests covering the changes. - [x] I have updated the documentation accordingly. ### ⌛ Dependencies <!-- List all open PRs that this PR logically depends on - sagemath#12345: short description why this is a dependency - sagemath#34567: ... --> <!-- If you're unsure about any of these, don't hesitate to ask. We're here to help! --> URL: sagemath#35467 Reported by: Kwankyu Lee Reviewer(s): Kwankyu Lee, Matthias Köppe
vbraun
pushed a commit
to vbraun/sage
that referenced
this pull request
Apr 20, 2024
sagemathgh-35467: Attach Jacobians to function fields and curves <!-- Please provide a concise, informative and self-explanatory title. --> <!-- Don't put issue numbers in the title. Put it in the Description below. --> <!-- For example, instead of "Fixes sagemath#12345", use "Add a new method to multiply two integers" --> ### 📚 Description We attach Jacobians to function fields and curves, enabling arithmetic with the points of the Jacobian. Fixes sagemath#34232. A point of Jacobian is represented by an effective divisor `D` such that the point is the divisor class of `D - B` (of degree 0) with a fixed base divisor `B`. There are two models for Jacobian arithmetic: - Hess model: `D` is internally represented by a pair of certain ideals and arithmetic relies on divisor reduction using Riemann-Roch space computation by Hess' algorithm. - Khuri-Makdisi model: `D` is internally represented by a linear subspace `W_D` of a linear space `V` and arithmetic uses Khuri-Makdisi's linear algebra algorithms. For implementation, sagemath#15113 was referenced. An example with non-hyperelliptic genus 3 curve: ```sage sage: A2.<x,y> = AffineSpace(QQ, 2) sage: f = y^3 + x^4 - 5*x^2*y + 2*x*y - x^2 - 5*y - 4*x + 1 sage: C = Curve(f, A2) sage: X = C.projective_closure() sage: X.genus() 3 sage: X.rational_points(bound=5) [(0 : 0 : 1), (1/3 : 1/3 : 1)] sage: Q = X(0,0,1).place() sage: P = X(1,1,3).place() sage: D = P - Q sage: D.degree() 0 sage: J = X.jacobian(model='hess', base_div=3*Q) sage: G = J.group() sage: p = G.point(D) sage: 2*p + 3*p == 5*p True ``` An example with elliptic curve: ```sage sage: k.<a> = GF((5,2)) sage: E = EllipticCurve(k,[1,0]); E Elliptic Curve defined by y^2 = x^3 + x over Finite Field in a of size 5^2 sage: E.order() 32 sage: P = E([a, 2*a + 4]) sage: P (a : 2*a + 4 : 1) sage: P.order() 8 sage: p = P.point_of_jacobian_of_curve() sage: p [Place (x + 4*a, y + 3*a + 1)] sage: p.order() 8 sage: Q = 3*P sage: q = Q.point_of_jacobian_of_curve() sage: q == 3*p True sage: G = p.parent() sage: G.order() 32 sage: G Group of rational points of Jacobian over Finite Field in a of size 5^2 (Hess model) sage: J = G.parent(); J Jacobian of Projective Plane Curve over Finite Field in a of size 5^2 defined by x^2*y + y^3 - x*z^2 (Hess model) sage: J.curve() == E.affine_patch(2).projective_closure() True ``` An example with hyperelliptic curve: ```sage sage: R.<x> = PolynomialRing(GF(11)) sage: f = x^6 + x + 1 sage: H = HyperellipticCurve(f) sage: J = H.jacobian() sage: D = J(H.lift_x(1)) sage: D # divisor in Mumford representation (x + 10, y + 6) sage: jacobian_order = sum(H.frobenius_polynomial()) sage: jacobian_order 234 sage: p = D.point_of_jacobian_of_curve(); p sage: p # Jacobian point represented by an effective divisor [Place (1/x0, 1/x0^3*x1 + 1) + Place (x0 + 10, x1 + 6)] sage: p.order() 39 sage: 234*p == 0 True sage: G = p.parent() sage: G Group of rational points of Jacobian over Finite Field of size 11 (Hess model) sage: J = G.parent() sage: J Jacobian of Projective Plane Curve over Finite Field of size 11 defined by x0^6 + x0^5*x1 + x1^6 - x0^4*x2^2 (Hess model) sage: C = J.curve() sage: C Projective Plane Curve over Finite Field of size 11 defined by x0^6 + x0^5*x1 + x1^6 - x0^4*x2^2 sage: C.affine_patch(0) == H.affine_patch(2) True ``` [](https://mybinder.org/v2 /gh/kwankyu/sage/p/35467/add-jacobian-groups-notebook-binder) prepared with sagemath#36245 <!-- Describe your changes here in detail. --> <!-- Why is this change required? What problem does it solve? --> <!-- If this PR resolves an open issue, please link to it here. For example "Fixes sagemath#12345". --> <!-- If your change requires a documentation PR, please link it appropriately. --> ### 📝 Checklist <!-- Put an `x` in all the boxes that apply. It should be `[x]` not `[x ]`. --> - [x] The title is concise, informative, and self-explanatory. - [x] The description explains in detail what this PR is about. - [x] I have linked a relevant issue or discussion. - [x] I have created tests covering the changes. - [x] I have updated the documentation accordingly. ### ⌛ Dependencies <!-- List all open PRs that this PR logically depends on - sagemath#12345: short description why this is a dependency - sagemath#34567: ... --> <!-- If you're unsure about any of these, don't hesitate to ask. We're here to help! --> URL: sagemath#35467 Reported by: Kwankyu Lee Reviewer(s): Kwankyu Lee, Matthias Köppe
vbraun
pushed a commit
to vbraun/sage
that referenced
this pull request
Apr 25, 2024
sagemathgh-35467: Attach Jacobians to function fields and curves <!-- Please provide a concise, informative and self-explanatory title. --> <!-- Don't put issue numbers in the title. Put it in the Description below. --> <!-- For example, instead of "Fixes sagemath#12345", use "Add a new method to multiply two integers" --> ### 📚 Description We attach Jacobians to function fields and curves, enabling arithmetic with the points of the Jacobian. Fixes sagemath#34232. A point of Jacobian is represented by an effective divisor `D` such that the point is the divisor class of `D - B` (of degree 0) with a fixed base divisor `B`. There are two models for Jacobian arithmetic: - Hess model: `D` is internally represented by a pair of certain ideals and arithmetic relies on divisor reduction using Riemann-Roch space computation by Hess' algorithm. - Khuri-Makdisi model: `D` is internally represented by a linear subspace `W_D` of a linear space `V` and arithmetic uses Khuri-Makdisi's linear algebra algorithms. For implementation, sagemath#15113 was referenced. An example with non-hyperelliptic genus 3 curve: ```sage sage: A2.<x,y> = AffineSpace(QQ, 2) sage: f = y^3 + x^4 - 5*x^2*y + 2*x*y - x^2 - 5*y - 4*x + 1 sage: C = Curve(f, A2) sage: X = C.projective_closure() sage: X.genus() 3 sage: X.rational_points(bound=5) [(0 : 0 : 1), (1/3 : 1/3 : 1)] sage: Q = X(0,0,1).place() sage: P = X(1,1,3).place() sage: D = P - Q sage: D.degree() 0 sage: J = X.jacobian(model='hess', base_div=3*Q) sage: G = J.group() sage: p = G.point(D) sage: 2*p + 3*p == 5*p True ``` An example with elliptic curve: ```sage sage: k.<a> = GF((5,2)) sage: E = EllipticCurve(k,[1,0]); E Elliptic Curve defined by y^2 = x^3 + x over Finite Field in a of size 5^2 sage: E.order() 32 sage: P = E([a, 2*a + 4]) sage: P (a : 2*a + 4 : 1) sage: P.order() 8 sage: p = P.point_of_jacobian_of_curve() sage: p [Place (x + 4*a, y + 3*a + 1)] sage: p.order() 8 sage: Q = 3*P sage: q = Q.point_of_jacobian_of_curve() sage: q == 3*p True sage: G = p.parent() sage: G.order() 32 sage: G Group of rational points of Jacobian over Finite Field in a of size 5^2 (Hess model) sage: J = G.parent(); J Jacobian of Projective Plane Curve over Finite Field in a of size 5^2 defined by x^2*y + y^3 - x*z^2 (Hess model) sage: J.curve() == E.affine_patch(2).projective_closure() True ``` An example with hyperelliptic curve: ```sage sage: R.<x> = PolynomialRing(GF(11)) sage: f = x^6 + x + 1 sage: H = HyperellipticCurve(f) sage: J = H.jacobian() sage: D = J(H.lift_x(1)) sage: D # divisor in Mumford representation (x + 10, y + 6) sage: jacobian_order = sum(H.frobenius_polynomial()) sage: jacobian_order 234 sage: p = D.point_of_jacobian_of_curve(); p sage: p # Jacobian point represented by an effective divisor [Place (1/x0, 1/x0^3*x1 + 1) + Place (x0 + 10, x1 + 6)] sage: p.order() 39 sage: 234*p == 0 True sage: G = p.parent() sage: G Group of rational points of Jacobian over Finite Field of size 11 (Hess model) sage: J = G.parent() sage: J Jacobian of Projective Plane Curve over Finite Field of size 11 defined by x0^6 + x0^5*x1 + x1^6 - x0^4*x2^2 (Hess model) sage: C = J.curve() sage: C Projective Plane Curve over Finite Field of size 11 defined by x0^6 + x0^5*x1 + x1^6 - x0^4*x2^2 sage: C.affine_patch(0) == H.affine_patch(2) True ``` [](https://mybinder.org/v2 /gh/kwankyu/sage/p/35467/add-jacobian-groups-notebook-binder) prepared with sagemath#36245 <!-- Describe your changes here in detail. --> <!-- Why is this change required? What problem does it solve? --> <!-- If this PR resolves an open issue, please link to it here. For example "Fixes sagemath#12345". --> <!-- If your change requires a documentation PR, please link it appropriately. --> ### 📝 Checklist <!-- Put an `x` in all the boxes that apply. It should be `[x]` not `[x ]`. --> - [x] The title is concise, informative, and self-explanatory. - [x] The description explains in detail what this PR is about. - [x] I have linked a relevant issue or discussion. - [x] I have created tests covering the changes. - [x] I have updated the documentation accordingly. ### ⌛ Dependencies <!-- List all open PRs that this PR logically depends on - sagemath#12345: short description why this is a dependency - sagemath#34567: ... --> <!-- If you're unsure about any of these, don't hesitate to ask. We're here to help! --> URL: sagemath#35467 Reported by: Kwankyu Lee Reviewer(s): Kwankyu Lee, Matthias Köppe
4ba1a99 to
5a59a1e
Compare
5a59a1e to
3a05362
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Solves sagemath/sage-binder-env#3, but now on GitHub platform.
The author of a PR can use (workflow-dispatch) "Create Binder branch" workflow in her own forked repo to create a new branch "contribution-binder" for a PR branch "contribution". Then she can post the new "contribution-binder" branch or just the Binder badge on the PR description. The reviewers can click the Binder badge to open the Binder environment to test the Sage built with the PR.
Specifically the procedure is
(1) Go to your forked Sage repo
(2) In the Actions tab, find "Create Binder branch" workflow
(3) Run the workflow with your PR branch named say "contribution"
(4) Wait for the workflow run to finish
(5) In the Code tab, select the new "contribution-binder" branch
(6) Edit the generated Dockerfile as you need (and commit)
(7) Find the Binder badge in README.md
(8) Copy the Binder badge from README.md (in edit mode)
(9) Paste the Binder badge into the description of your PR in the sagemath/sage repo
(10) Click the Binder badge to start creating the Binder environment
(11) Leave it open and come back after an hour.
(12) The Binder badge is now ready for reviewers of your PR
The Binder environment branch has Dockerfile, README.md, and a directory
notebooks. The Dockerfile builds Sage incrementally with the PR branch. The README.md is the official Sage readme file, but has the Binder badge. Thenotebooksdirectory can be used to put some testing Jupyter notebooks provided by the PR author. The notebooks are available in the invoked JupyterLab.The PR author is supposed to run the Binder badge once so that Binder builds the Docker image. This step takes the longest time, but reasonably fast as it is incremental build. Subsequent runs of the Binder badge take much less time.
For example, this
https://github.com/kwankyu/sage/tree/p/binder-enabled-repo-binder
is the Binder environment branch for this PR. Note that
-binderis suffixed to the PR branchp/binder-enabled-repo, and this is the Binder badgefor the Binder environment built with this PR branch. This badge is taken from the README.md file of the above Binder environment branch.
📝 Checklist
⌛ Dependencies