-
-
Notifications
You must be signed in to change notification settings - Fork 554
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
Improved algorithm choice for isogeny computation #37242
Conversation
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Some small suggestions throughout and a comment about the representation of "composite but prime degree isogenies".
Very nice work, thank you for implementing this.
Thank you! I applied all your suggestions (my |
I was about to mark this as completed, but somehow |
Sorry, I keep messing up with git. I deleted it with a new commit, is that fine? Or should I do something different? |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Great addition to the isogeny functionality. Thanks for also fixing the small clean up with ell_point. Appreciated.
Thanks! |
Test failure, see the CI at https://github.com/sagemath/sage/actions/runs/7805562652 |
Fixed, I also noticed another failure in the coding style so I fixed that one as well. |
If CI passes then it's all good. This already has |
Documentation preview for this PR (built with commit b4408ab; changes) is ready! 🎉 |
sagemathgh-37242: Improved algorithm choice for isogeny computation Improved the logic for algorithm choice in `EllipticCurve_field.isogeny()`: - if we have multiple points, `factored` is used; - if the order is known and composite, `factored` is used; - if the order is known and (pseudo-)prime, we chose between the traditional Velù formulae and Velù-sqrt, depending on a parameter; this parameter may be supplied by the user with the `velu_sqrt_bound` argument, and if `None` a global parameter is used (see below); - in all the other cases we fall back to the traditional isogeny algorithm. The new `velu_sqrt_bound`: - can be supplied as a parameter when calling `.isogeny()`; - if supplied, is recursively passed to all calls to `factored`, such that each single isogeny computation has the same bound; - if not supplied, a global value is used instead; this is stored in the object `_velu_sqrt_bound` from `sage.schemes.elliptic_curves.hom_velusqrt`, and is initially set to 1000 (due to empirical observations) but can be manually set at runtime by the user #sd123 URL: sagemath#37242 Reported by: Riccardo Invernizzi Reviewer(s): Giacomo Pope, grhkm21, Riccardo Invernizzi
sagemathgh-37242: Improved algorithm choice for isogeny computation Improved the logic for algorithm choice in `EllipticCurve_field.isogeny()`: - if we have multiple points, `factored` is used; - if the order is known and composite, `factored` is used; - if the order is known and (pseudo-)prime, we chose between the traditional Velù formulae and Velù-sqrt, depending on a parameter; this parameter may be supplied by the user with the `velu_sqrt_bound` argument, and if `None` a global parameter is used (see below); - in all the other cases we fall back to the traditional isogeny algorithm. The new `velu_sqrt_bound`: - can be supplied as a parameter when calling `.isogeny()`; - if supplied, is recursively passed to all calls to `factored`, such that each single isogeny computation has the same bound; - if not supplied, a global value is used instead; this is stored in the object `_velu_sqrt_bound` from `sage.schemes.elliptic_curves.hom_velusqrt`, and is initially set to 1000 (due to empirical observations) but can be manually set at runtime by the user #sd123 URL: sagemath#37242 Reported by: Riccardo Invernizzi Reviewer(s): Giacomo Pope, grhkm21, Riccardo Invernizzi
Improved the logic for algorithm choice in
EllipticCurve_field.isogeny()
:factored
is used;factored
is used;velu_sqrt_bound
argument, and ifNone
a global parameter is used (see below);The new
velu_sqrt_bound
:.isogeny()
;factored
, such that each single isogeny computation has the same bound;_velu_sqrt_bound
fromsage.schemes.elliptic_curves.hom_velusqrt
, and is initially set to 1000 (due to empirical observations) but can be manually set at runtime by the user#sd123