Skip to content

Commit cf800a6

Browse files
committed
reviewer comments
1 parent 282e9f7 commit cf800a6

File tree

1 file changed

+36
-16
lines changed

1 file changed

+36
-16
lines changed

src/sage/schemes/elliptic_curves/ell_point.py

Lines changed: 36 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -560,39 +560,59 @@ def has_order(self, n):
560560
sage: P._order
561561
7
562562
563+
It also works with a :class:`~sage.structure.factorization.Factorization` object::
564+
565+
sage: E = EllipticCurve(GF(419), [1,0])
566+
sage: P = E(-33, 8)
567+
sage: P.has_order(factor(21))
568+
True
569+
sage: P._order
570+
21
571+
563572
This method can be much faster than computing the order and comparing::
564573
574+
sage: # not tested -- timings are different each time
565575
sage: p = 4 * prod(primes(3,377)) * 587 - 1
566576
sage: E = EllipticCurve(GF(p), [1,0])
567-
sage: %timeit P = E.random_point(); P.set_order(multiple=p+1) # not tested
577+
sage: %timeit P = E.random_point(); P.set_order(multiple=p+1)
568578
72.4 ms ± 773 µs per loop (mean ± std. dev. of 7 runs, 1 loop each)
569-
sage: %timeit P = E.random_point(); P.has_order(p+1) # not tested
579+
sage: %timeit P = E.random_point(); P.has_order(p+1)
570580
32.8 ms ± 3.12 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
571581
sage: fac = factor(p+1)
572-
sage: %timeit P = E.random_point(); P.has_order(fac) # not tested
582+
sage: %timeit P = E.random_point(); P.has_order(fac)
573583
30.6 ms ± 3.48 ms per loop (mean ± std. dev. of 7 runs, 10 loops each)
574584
575-
The order is cached once it has been confirmed once::
585+
The order is cached once it has been confirmed once, and the cache is
586+
shared with :meth:`order`::
576587
588+
sage: # not tested -- timings are different each time
577589
sage: P, = E.gens()
578590
sage: delattr(P, '_order')
579-
sage: %time P.has_order(p+1) # not tested
580-
CPU times: user 62.1 ms, sys: 6.27 ms, total: 68.3 ms
581-
Wall time: 68.8 ms
591+
sage: %time P.has_order(p+1)
592+
CPU times: user 83.6 ms, sys: 30 µs, total: 83.6 ms
593+
Wall time: 83.8 ms
582594
True
583-
sage: %time P.has_order(p+1) # not tested
584-
CPU times: user 5 µs, sys: 0 ns, total: 5 µs
585-
Wall time: 5.48 µs
595+
sage: %time P.has_order(p+1)
596+
CPU times: user 31 µs, sys: 2 µs, total: 33 µs
597+
Wall time: 37.9 µs
586598
True
599+
sage: %time P.order()
600+
CPU times: user 11 µs, sys: 0 ns, total: 11 µs
601+
Wall time: 16 µs
602+
5326738796327623094747867617954605554069371494832722337612446642054009560026576537626892113026381253624626941643949444792662881241621373288942880288065660
587603
sage: delattr(P, '_order')
588-
sage: %time P.has_order(fac) # not tested
589-
CPU times: user 69.7 ms, sys: 14 µs, total: 69.8 ms
590-
Wall time: 70.3 ms
604+
sage: %time P.has_order(fac)
605+
CPU times: user 68.6 ms, sys: 17 µs, total: 68.7 ms
606+
Wall time: 68.7 ms
591607
True
592-
sage: %time P.has_order(fac) # not tested
593-
CPU times: user 15 µs, sys: 0 ns, total: 15 µs
594-
Wall time: 17.4 µs
608+
sage: %time P.has_order(fac)
609+
CPU times: user 92 µs, sys: 0 ns, total: 92 µs
610+
Wall time: 97.5 µs
595611
True
612+
sage: %time P.order()
613+
CPU times: user 10 µs, sys: 1e+03 ns, total: 11 µs
614+
Wall time: 14.5 µs
615+
5326738796327623094747867617954605554069371494832722337612446642054009560026576537626892113026381253624626941643949444792662881241621373288942880288065660
596616
"""
597617
if hasattr(self, '_order'): # already known
598618
if not isinstance(n, Integer):

0 commit comments

Comments
 (0)