-
-
Notifications
You must be signed in to change notification settings - Fork 482
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Enable Binder environment for PRs #36245
base: develop
Are you sure you want to change the base?
Conversation
357629e
to
7cca95a
Compare
547dee1
to
5930e3d
Compare
8bc5b18
to
cd97a1b
Compare
cd97a1b
to
2f3753a
Compare
<!-- ^^^^^ 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
<!-- ^^^^^ 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
Documentation preview for this PR (built with commit 3a05362; changes) is ready! 🎉 |
The branches that this creates -- they do not contain the Sage sources, correct? |
No. It adds a Dockerfile and a directory |
It creates a branch of the PR branch in |
A recent example is in #35467 |
<!-- 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 ``` [![Binder](https://mybinder.org/badge_logo.svg)](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
<!-- 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 ``` [![Binder](https://mybinder.org/badge_logo.svg)](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
<!-- 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 ``` [![Binder](https://mybinder.org/badge_logo.svg)](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
<!-- 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 ``` [![Binder](https://mybinder.org/badge_logo.svg)](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
<!-- 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 ``` [![Binder](https://mybinder.org/badge_logo.svg)](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
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. Thenotebooks
directory 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
-binder
is 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