-
-
Notifications
You must be signed in to change notification settings - Fork 480
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
Îlu algorithm: asymptotically faster elliptic-curve isogenies #34303
Comments
Author: Lorenz Panny |
Commit: |
This comment has been minimized.
This comment has been minimized.
comment:2
I have a question: although I know that the application of greatest interest involves curves over finite fields, I assume that the faster algorithm also works in characteristic 0, so that isogenies between curves defined over number fields will also be affected by this? I hope so. |
comment:3
That's a good question. The Îlu speedup works best if you have an actual rational kernel point as input, which requires big field extensions for large isogeny degrees over number fields. There is a variant of the algorithm for rational kernels made up of irrational points, but the speedup is smaller in that case. Do you have an application in mind? Which field and isogeny degree, and how is the input given? It shouldn't be hard to make this work for number fields, but I'm not sure if it helps at all, which is why I restricted the current implementation to finite fields. |
comment:4
I was hoping we could get this into the upcoming release so that other people can play around with it. This is opt-in and marked as experimental, so a minimum viable review basically consists of checking that it doesn't do any harm. Could someone please spare a few minutes to have a look? |
comment:5
Replying to @yyyyx4:
The isogenies I compute are mostly over number fields and of small prime degree ell, where "small" mostly means <50. And for most of these ell, I have implemented special code for them (which works over finte fields too, except characteristic ell). As for the input, it's just the curve and ell and I need all the ell-isogenous curves; there are easy necessary conditions for an ell-isogeny to exist so I would rarely try to compute one when it does not exist. |
comment:6
Replying to @yyyyx4:
I had a first look, and will come back to it tomorrow. |
Reviewer: John Cremona |
Work Issues: document parameters for all methods and functions |
comment:7
Here are some comments made as I read the code, so not in order of importance. Point 4 about documenting parameters is the most important -- otherwise docstrings, examples ans tests are very good.
I would suggest
I see that the code here is not called from elsewhere -- in particular, not called by default by isogeny methods of elliptic curve classes -- so is certainly harmless to include. |
Branch pushed to git repo; I updated commit sha1. New commits:
|
comment:9
Thank you for the comments! I added I also made comparison work using the same code as for composite isogenies (by reducing to evaluation), and added a (purely opt-in) call path from the About your other remarks:
|
Changed work issues from document parameters for all methods and functions to none |
comment:10
Replying to @JohnCremona:
One comment on this: To make it more publicly visible, it can be useful to have the inputs for One additional comment to John's, the INPUT:
- - `n` -- odd integer `\geq 5`
+ - ``n`` -- odd integer `\geq 5` In (n-1).sqrtrem()[0] // 2 As a general programming note, I prefer to avoid similar variable names, such as |
Branch pushed to git repo; I updated commit sha1. New commits:
|
comment:12
Thanks! All done. |
comment:13
Thanks for making all these changes, and answering my comments. I am happy with this, so if Travis is too he can add his name to the reviewers list and set it to "positive review". |
comment:20
Thanks, done! I've also created #34409, which (inspired by your comments here) suggests to remove the experimental warning for composite elliptic-curve isogenies. |
comment:21
Replying to @tscrim:
Fixed. Thanks. It was awful. |
Changed reviewer from John Cremona, Travis Scrimshaw to John Cremona, Travis Scrimshaw, Kwankyu Lee |
comment:22
Replying to @yyyyx4:
Thank you. It was perhaps your being modest. But Sage should always deliver reliable code, and I think we should avoid including experimental code in Sage. |
comment:23
Thanks a lot everyone! (Indeed, I'm reasonably convinced that the code is correct. I added the experimental warning not because I feared things were broken, but because it'd make it easier to tweak the API later. Presumably though, this won't be necessary anyway.) |
Changed branch from public/velusqrt_algorithm_for_elliptic_curve_isogenies to |
Changed commit from |
comment:25
Got a test failure with a specific random seed
|
comment:26
and the linter now requires a blank line before nested definitions |
… point orders This is a follow-up to sagemath#32786 with the following changes: - Copy curve orders between domain and codomain for all `EllipticCurveHom` instances of nonzero degree, rather than (previously) just `EllipticCurveIsogeny` objects. - Copy point orders when pushing a point through an isomorphism. - Copy point orders when pushing a point through an isogeny of degree coprime to the point order. - Rearrange some computations in the √élu code (sagemath#34303, sagemath#34614) to make (better) use of cached orders; in particular, this unbreaks the use of `.set_order()` on the kernel point prior to passing it to `EllipticCurveHom_velusqrt`. [Thanks to Jonathan Komada Eriksen for reporting this last issue.] URL: https://trac.sagemath.org/34732 Reported by: lorenz Ticket author(s): Lorenz Panny Reviewer(s): Travis Scrimshaw
…age.rings.generic The class `ProductTree` and the function `prod_with_derivative()` were introduced in sagemath#34303. Both are fully generic in principle, but they remained in `hom_velusqrt.py` in the heat of the moment. We should move them to a more suitable place; it seems `sage.rings.generic` is an appropriate choice. Slight tweaks to `ProductTree` while we're at it. URL: https://trac.sagemath.org/34791 Reported by: lorenz Ticket author(s): Lorenz Panny Reviewer(s): Kwankyu Lee
Sage currently computes an isogeny of prime degree
ℓ
usingϴ(ℓ)
base-field operations. We can achieve the same task inÕ(√ℓ)
operations using the Îlu algorithm; see https://velusqrt.isogeny.org.This patch adds a fairly reasonable implementation of the algorithm to Sage. It works for odd-degree isogenies over all finite fields and can outperform the current
EllipticCurveIsogeny
class starting from degrees around 100, depending on the concrete performance of the underlying base-field and polynomial arithmetic.The new code is marked as experimental and isn't used anywhere by default. After some real-world testing and careful benchmarking, we can (and should) let Sage automatically decide which implementation to use for a given input.
CC: @defeo @JohnCremona @categorie @sagetrac-bensmith @sagetrac-tanja @tscrim @videlec @slel @kwankyu
Component: elliptic curves
Author: Lorenz Panny
Branch:
a0f4c4a
Reviewer: John Cremona, Travis Scrimshaw, Kwankyu Lee
Issue created by migration from https://trac.sagemath.org/ticket/34303
The text was updated successfully, but these errors were encountered: