# HG changeset patch
# User Jean-Pierre Flori <jean-pierre.flor@ssi.gouv.fr>
# Date 1338366773 -7200
# Node ID cf16366e70db65bc29e666e0d3422ddb3fd199fc
# Parent 66470af30f19d47d5af032b859136c0d3e63ab52
imported patch flint2.3-jp.diff
diff --git a/sage/all.py b/sage/all.py
a
|
b
|
|
231 | 231 | import sage.matrix.matrix_mod2_dense |
232 | 232 | sage.matrix.matrix_mod2_dense.free_m4ri() |
233 | 233 | |
234 | | import sage.libs.flint.flint |
235 | | sage.libs.flint.flint.free_flint_stack() |
| 234 | pari._unsafe_deallocate_pari_stack() |
236 | 235 | |
237 | | pari._unsafe_deallocate_pari_stack() |
238 | | |
239 | 236 | ### The following is removed -- since it would cleanup |
240 | 237 | ### the tmp directory that the sage cleaner depends upon. |
241 | 238 | # The following code close all open file descriptors, |
… |
… |
|
271 | 268 | import sage.algebras.quatalg.quaternion_algebra_element |
272 | 269 | sage.algebras.quatalg.quaternion_algebra_element._clear_globals() |
273 | 270 | |
274 | | from sage.libs.all import symmetrica |
275 | | symmetrica.end() |
276 | | |
| 271 | # Free flint allocated integers |
| 272 | import sage.libs.flint.flint |
| 273 | sage.libs.flint.flint.free_flint_stack() |
| 274 | |
| 275 | from sage.libs.all import symmetrica |
| 276 | symmetrica.end() |
| 277 | |
277 | 278 | def _quit_sage_(self): |
278 | 279 | import sage.misc.preparser_ipython |
279 | 280 | if sage.misc.preparser_ipython.interface != None: |
diff --git a/sage/libs/flint/flint.pxd b/sage/libs/flint/flint.pxd
a
|
b
|
|
1 | | cdef extern from "flint.h": |
| 1 | cdef extern from "FLINT/flint.h": |
2 | 2 | |
3 | 3 | cdef long FLINT_BITS |
4 | 4 | cdef long FLINT_D_BITS |
5 | 5 | |
6 | 6 | cdef unsigned long FLINT_BIT_COUNT(unsigned long) |
7 | | void flint_stack_cleanup() |
| 7 | void _fmpz_cleanup() |
diff --git a/sage/libs/flint/flint.pyx b/sage/libs/flint/flint.pyx
a
|
b
|
|
14 | 14 | include "../../ext/cdefs.pxi" |
15 | 15 | |
16 | 16 | def free_flint_stack(): |
17 | | flint_stack_cleanup() |
| 17 | _fmpz_cleanup() |
diff --git a/sage/libs/flint/ulong_extras.pxd b/sage/libs/flint/ulong_extras.pxd
a
|
b
|
|
8 | 8 | |
9 | 9 | ctypedef struct n_factor_t: |
10 | 10 | int num |
| 11 | unsigned long exp[15] |
11 | 12 | unsigned long p[15] |
12 | | unsigned long exp[15] |
13 | 13 | |
14 | 14 | cdef int n_jacobi(long x, unsigned long y) |
15 | 15 | |
… |
… |
|
18 | 18 | cdef unsigned long n_gcd(long x, long y) |
19 | 19 | |
20 | 20 | cdef void n_factor(n_factor_t * factors, unsigned long n, int proved) |
| 21 | cdef void n_factor_init(n_factor_t * factors) |
diff --git a/sage/rings/integer.pyx b/sage/rings/integer.pyx
a
|
b
|
|
3369 | 3369 | if proof is None: |
3370 | 3370 | from sage.structure.proof.proof import get_flag |
3371 | 3371 | proof = get_flag(proof, "arithmetic") |
| 3372 | n_factor_init(&f) |
3372 | 3373 | n_factor(&f, mpz_get_ui(n.value), proof) |
3373 | 3374 | F = [(Integer(f.p[i]), int(f.exp[i])) for i from 0 <= i < f.num] |
3374 | 3375 | F.sort() |
diff --git a/sage/rings/polynomial/padics/polynomial_padic_capped_relative_dense.py b/sage/rings/polynomial/padics/polynomial_padic_capped_relative_dense.py
a
|
b
|
|
27 | 27 | class Polynomial_padic_capped_relative_dense(Polynomial_generic_domain): |
28 | 28 | def __init__(self, parent, x=None, check=True, is_gen=False, construct = False, absprec = infinity, relprec = infinity): |
29 | 29 | """ |
30 | | TESTS: |
| 30 | TESTS:: |
| 31 | |
31 | 32 | sage: K = Qp(13,7) |
32 | 33 | sage: R.<t> = K[] |
33 | 34 | sage: R([K(13), K(1)]) |
… |
… |
|
183 | 184 | """ |
184 | 185 | Recomputes the list of coefficients. |
185 | 186 | |
186 | | EXAMPLES: |
187 | | sage: K = Qp(13,7) |
188 | | sage: R.<t> = K[] |
189 | | sage: a = t[0:1] |
190 | | sage: a._comp_list() |
191 | | sage: a |
192 | | 0 |
| 187 | EXAMPLES:: |
| 188 | |
| 189 | sage: K = Qp(13,7) |
| 190 | sage: R.<t> = K[] |
| 191 | sage: a = t[0:1] |
| 192 | sage: a._comp_list() |
| 193 | sage: a |
| 194 | 0 |
193 | 195 | """ |
194 | 196 | if self.degree() == -1 and self._valbase == infinity: |
195 | 197 | self._list = [] |
… |
… |
|
283 | 285 | than expected since it includes any leading zeros |
284 | 286 | that have finite absolute precision. |
285 | 287 | |
286 | | EXAMPLES: |
287 | | sage: K = Qp(13,7) |
288 | | sage: R.<t> = K[] |
289 | | sage: a = 2*t^3 + 169*t - 1 |
290 | | sage: a |
291 | | (2 + O(13^7))*t^3 + (13^2 + O(13^9))*t + (12 + 12*13 + 12*13^2 + 12*13^3 + 12*13^4 + 12*13^5 + 12*13^6 + O(13^7)) |
292 | | sage: a.list() |
293 | | [12 + 12*13 + 12*13^2 + 12*13^3 + 12*13^4 + 12*13^5 + 12*13^6 + O(13^7), |
294 | | 13^2 + O(13^9), |
295 | | 0, |
296 | | 2 + O(13^7)] |
| 288 | EXAMPLES:: |
| 289 | |
| 290 | sage: K = Qp(13,7) |
| 291 | sage: R.<t> = K[] |
| 292 | sage: a = 2*t^3 + 169*t - 1 |
| 293 | sage: a |
| 294 | (2 + O(13^7))*t^3 + (13^2 + O(13^9))*t + (12 + 12*13 + 12*13^2 + 12*13^3 + 12*13^4 + 12*13^5 + 12*13^6 + O(13^7)) |
| 295 | sage: a.list() |
| 296 | [12 + 12*13 + 12*13^2 + 12*13^3 + 12*13^4 + 12*13^5 + 12*13^6 + O(13^7), |
| 297 | 13^2 + O(13^9), |
| 298 | 0, |
| 299 | 2 + O(13^7)] |
297 | 300 | """ |
298 | 301 | |
299 | 302 | if self._list is None: |
… |
… |
|
302 | 305 | |
303 | 306 | def _repr(self, name=None): |
304 | 307 | """ |
305 | | TESTS: |
| 308 | TESTS:: |
| 309 | |
306 | 310 | sage: k = Qp(5,10) |
307 | 311 | sage: R.<x> = k[] |
308 | 312 | sage: f = R([k(0,-3), 0, k(0,-1)]); f |
… |
… |
|
349 | 353 | |
350 | 354 | The content of the exact zero polynomial is zero. |
351 | 355 | |
352 | | EXAMPLES: |
353 | | sage: K = Zp(13,7) |
354 | | sage: R.<t> = K[] |
355 | | sage: a = 13^7*t^3 + K(169,4)*t - 13^4 |
356 | | sage: a.content() |
357 | | 13^2 + O(13^9) |
358 | | sage: R(0).content() |
359 | | 0 |
360 | | sage: P.<x> = ZZ[] |
361 | | sage: f = x + 2 |
362 | | sage: f.content() |
363 | | 1 |
364 | | sage: fp = f.change_ring(pAdicRing(2, 10)) |
365 | | sage: fp |
366 | | (1 + O(2^10))*x + (2 + O(2^11)) |
367 | | sage: fp.content() |
368 | | 1 + O(2^10) |
369 | | sage: (2*fp).content() |
370 | | 2 + O(2^11) |
| 356 | EXAMPLES:: |
| 357 | |
| 358 | sage: K = Zp(13,7) |
| 359 | sage: R.<t> = K[] |
| 360 | sage: a = 13^7*t^3 + K(169,4)*t - 13^4 |
| 361 | sage: a.content() |
| 362 | 13^2 + O(13^9) |
| 363 | sage: R(0).content() |
| 364 | 0 |
| 365 | sage: P.<x> = ZZ[] |
| 366 | sage: f = x + 2 |
| 367 | sage: f.content() |
| 368 | 1 |
| 369 | sage: fp = f.change_ring(pAdicRing(2, 10)) |
| 370 | sage: fp |
| 371 | (1 + O(2^10))*x + (2 + O(2^11)) |
| 372 | sage: fp.content() |
| 373 | 1 + O(2^10) |
| 374 | sage: (2*fp).content() |
| 375 | 2 + O(2^11) |
371 | 376 | """ |
372 | 377 | if self.base_ring().is_field(): |
373 | 378 | raise TypeError, "ground ring is a field. Answer is only defined up to units." |
… |
… |
|
385 | 390 | the same coefficients (ie same values and precisions): it will depend on how |
386 | 391 | the polynomials are created. |
387 | 392 | |
388 | | EXAMPLES: |
389 | | sage: K = Qp(13,7) |
390 | | sage: R.<t> = K[] |
391 | | sage: a = 13^7*t^3 + K(169,4)*t - 13^4 |
392 | | sage: a.lift() |
393 | | 62748517*t^3 + 169*t - 28561 |
| 393 | EXAMPLES:: |
| 394 | |
| 395 | sage: K = Qp(13,7) |
| 396 | sage: R.<t> = K[] |
| 397 | sage: a = 13^7*t^3 + K(169,4)*t - 13^4 |
| 398 | sage: a.lift() |
| 399 | 62748517*t^3 + 169*t - 28561 |
394 | 400 | """ |
395 | 401 | return self.base_ring().prime_pow(self._valbase) * self._poly |
396 | 402 | |
… |
… |
|
401 | 407 | |
402 | 408 | EXAMPLES:: |
403 | 409 | |
404 | | sage: K = Qp(13,7) |
405 | | sage: R.<t> = K[] |
406 | | sage: a = 13^7*t^3 + K(169,4)*t - 13^4 |
407 | | sage: a[1] |
408 | | 13^2 + O(13^4) |
409 | | sage: a[1:2] |
410 | | (13^2 + O(13^4))*t |
| 410 | sage: K = Qp(13,7) |
| 411 | sage: R.<t> = K[] |
| 412 | sage: a = 13^7*t^3 + K(169,4)*t - 13^4 |
| 413 | sage: a[1] |
| 414 | 13^2 + O(13^4) |
| 415 | sage: a[1:2] |
| 416 | (13^2 + O(13^4))*t |
411 | 417 | """ |
412 | 418 | if isinstance(n, slice): |
413 | 419 | start, stop = n.start, n.stop |
… |
… |
|
445 | 451 | """ |
446 | 452 | Returns the sum of self and right. |
447 | 453 | |
448 | | EXAMPLES: |
449 | | sage: K = Qp(13,7) |
450 | | sage: R.<t> = K[] |
451 | | sage: a = t^4 + 17*t^2 + 1 |
452 | | sage: b = -t^4 + 9*t^2 + 13*t - 1 |
453 | | sage: c = a + b; c |
454 | | (O(13^7))*t^4 + (2*13 + O(13^7))*t^2 + (13 + O(13^8))*t + (O(13^7)) |
455 | | sage: c.list() |
456 | | [O(13^7), 13 + O(13^8), 2*13 + O(13^7), 0, O(13^7)] |
| 454 | EXAMPLES:: |
| 455 | |
| 456 | sage: K = Qp(13,7) |
| 457 | sage: R.<t> = K[] |
| 458 | sage: a = t^4 + 17*t^2 + 1 |
| 459 | sage: b = -t^4 + 9*t^2 + 13*t - 1 |
| 460 | sage: c = a + b; c |
| 461 | (O(13^7))*t^4 + (2*13 + O(13^7))*t^2 + (13 + O(13^8))*t + (O(13^7)) |
| 462 | sage: c.list() |
| 463 | [O(13^7), 13 + O(13^8), 2*13 + O(13^7), 0, O(13^7)] |
457 | 464 | """ |
458 | 465 | selfpoly = self._poly |
459 | 466 | rightpoly = right._poly |
… |
… |
|
478 | 485 | """ |
479 | 486 | Returns the sum of self and right. |
480 | 487 | |
481 | | EXAMPLES: |
482 | | sage: K = Qp(13,7) |
483 | | sage: R.<t> = K[] |
484 | | sage: a = t^4 + 17*t^2 + 1 |
485 | | sage: b = t^4 - 9*t^2 - 13*t + 1 |
486 | | sage: c = a - b; c |
487 | | (O(13^7))*t^4 + (2*13 + O(13^7))*t^2 + (13 + O(13^8))*t + (O(13^7)) |
488 | | sage: c.list() |
489 | | [O(13^7), 13 + O(13^8), 2*13 + O(13^7), 0, O(13^7)] |
| 488 | EXAMPLES:: |
| 489 | |
| 490 | sage: K = Qp(13,7) |
| 491 | sage: R.<t> = K[] |
| 492 | sage: a = t^4 + 17*t^2 + 1 |
| 493 | sage: b = t^4 - 9*t^2 - 13*t + 1 |
| 494 | sage: c = a - b; c |
| 495 | (O(13^7))*t^4 + (2*13 + O(13^7))*t^2 + (13 + O(13^8))*t + (O(13^7)) |
| 496 | sage: c.list() |
| 497 | [O(13^7), 13 + O(13^8), 2*13 + O(13^7), 0, O(13^7)] |
490 | 498 | """ |
491 | 499 | selfpoly = self._poly |
492 | 500 | rightpoly = right._poly |
… |
… |
|
549 | 557 | may very well change as we do more tests on the relative time |
550 | 558 | requirements of these operations. |
551 | 559 | |
552 | | EXAMPLES: |
553 | | sage: K = Qp(13,7) |
554 | | sage: R.<t> = K[] |
555 | | sage: a = t^4 + 17*t^2 + 1 |
556 | | sage: b = -t^4 + 9*t^2 + 13*t - 1 |
557 | | sage: c = a + b; c |
558 | | (O(13^7))*t^4 + (2*13 + O(13^7))*t^2 + (13 + O(13^8))*t + (O(13^7)) |
559 | | sage: d = R([K(1,4), K(2, 6), K(1, 5)]); d |
560 | | (1 + O(13^5))*t^2 + (2 + O(13^6))*t + (1 + O(13^4)) |
561 | | sage: e = c * d; e |
562 | | (O(13^7))*t^6 + (O(13^7))*t^5 + (2*13 + O(13^6))*t^4 + (5*13 + O(13^6))*t^3 + (4*13 + O(13^5))*t^2 + (13 + O(13^5))*t + (O(13^7)) |
563 | | sage: e.list() |
564 | | [O(13^7), |
565 | | 13 + O(13^5), |
566 | | 4*13 + O(13^5), |
567 | | 5*13 + O(13^6), |
568 | | 2*13 + O(13^6), |
569 | | O(13^7), |
570 | | O(13^7)] |
| 560 | EXAMPLES:: |
| 561 | |
| 562 | sage: K = Qp(13,7) |
| 563 | sage: R.<t> = K[] |
| 564 | sage: a = t^4 + 17*t^2 + 1 |
| 565 | sage: b = -t^4 + 9*t^2 + 13*t - 1 |
| 566 | sage: c = a + b; c |
| 567 | (O(13^7))*t^4 + (2*13 + O(13^7))*t^2 + (13 + O(13^8))*t + (O(13^7)) |
| 568 | sage: d = R([K(1,4), K(2, 6), K(1, 5)]); d |
| 569 | (1 + O(13^5))*t^2 + (2 + O(13^6))*t + (1 + O(13^4)) |
| 570 | sage: e = c * d; e |
| 571 | (O(13^7))*t^6 + (O(13^7))*t^5 + (2*13 + O(13^6))*t^4 + (5*13 + O(13^6))*t^3 + (4*13 + O(13^5))*t^2 + (13 + O(13^5))*t + (O(13^7)) |
| 572 | sage: e.list() |
| 573 | [O(13^7), |
| 574 | 13 + O(13^5), |
| 575 | 4*13 + O(13^5), |
| 576 | 5*13 + O(13^6), |
| 577 | 2*13 + O(13^6), |
| 578 | O(13^7), |
| 579 | O(13^7)] |
571 | 580 | """ |
572 | 581 | self._normalize() |
573 | 582 | right._normalize() |
… |
… |
|
591 | 600 | """ |
592 | 601 | Returns self multiplied by a constant |
593 | 602 | |
594 | | EXAMPLES: |
595 | | sage: K = Qp(13,7) |
596 | | sage: R.<t> = K[] |
597 | | sage: a = t^4 + K(13,5)*t^2 + 13 |
598 | | sage: K(13,7) * a |
599 | | (13 + O(13^7))*t^4 + (13^2 + O(13^6))*t^2 + (13^2 + O(13^8)) |
| 603 | EXAMPLES:: |
| 604 | |
| 605 | sage: K = Qp(13,7) |
| 606 | sage: R.<t> = K[] |
| 607 | sage: a = t^4 + K(13,5)*t^2 + 13 |
| 608 | sage: K(13,7) * a |
| 609 | (13 + O(13^7))*t^4 + (13^2 + O(13^6))*t^2 + (13^2 + O(13^8)) |
600 | 610 | """ |
601 | 611 | return None |
602 | 612 | # The code below has never been tested and is somehow subtly broken. |
… |
… |
|
617 | 627 | """ |
618 | 628 | Returns the negation of self. |
619 | 629 | |
620 | | EXAMPLES: |
621 | | sage: K = Qp(13,2) |
622 | | sage: R.<t> = K[] |
623 | | sage: a = t^4 + 13*t^2 + 4 |
624 | | sage: -a |
625 | | (12 + 12*13 + O(13^2))*t^4 + (12*13 + 12*13^2 + O(13^3))*t^2 + (9 + 12*13 + O(13^2)) |
| 630 | EXAMPLES:: |
| 631 | |
| 632 | sage: K = Qp(13,2) |
| 633 | sage: R.<t> = K[] |
| 634 | sage: a = t^4 + 13*t^2 + 4 |
| 635 | sage: -a |
| 636 | (12 + 12*13 + O(13^2))*t^4 + (12*13 + 12*13^2 + O(13^3))*t^2 + (9 + 12*13 + O(13^2)) |
626 | 637 | """ |
627 | 638 | return Polynomial_padic_capped_relative_dense(self.parent(), (-self._poly, self._valbase, self._relprecs, False, self._valaddeds, None), construct = True) |
628 | 639 | |
… |
… |
|
630 | 641 | """ |
631 | 642 | Returns a new polynomials whose coefficients are multiplied by p^shift. |
632 | 643 | |
633 | | EXAMPLES: |
634 | | sage: K = Qp(13, 4) |
635 | | sage: R.<t> = K[] |
636 | | sage: a = t + 52 |
637 | | sage: a.lshift_coeffs(3) |
638 | | (13^3 + O(13^7))*t + (4*13^4 + O(13^8)) |
| 644 | EXAMPLES:: |
| 645 | |
| 646 | sage: K = Qp(13, 4) |
| 647 | sage: R.<t> = K[] |
| 648 | sage: a = t + 52 |
| 649 | sage: a.lshift_coeffs(3) |
| 650 | (13^3 + O(13^7))*t + (4*13^4 + O(13^8)) |
639 | 651 | """ |
640 | 652 | if shift < 0: |
641 | 653 | return self.rshift_coeffs(-shift, no_list) |
… |
… |
|
651 | 663 | |
652 | 664 | NOTES: Type Qp(5)(0).__rshift__? for more information. |
653 | 665 | |
654 | | EXAMPLES: |
655 | | sage: K = Zp(13, 4) |
656 | | sage: R.<t> = K[] |
657 | | sage: a = t^2 + K(13,3)*t + 169; a |
658 | | (1 + O(13^4))*t^2 + (13 + O(13^3))*t + (13^2 + O(13^6)) |
659 | | sage: b = a.rshift_coeffs(1); b |
660 | | (O(13^3))*t^2 + (1 + O(13^2))*t + (13 + O(13^5)) |
661 | | sage: b.list() |
662 | | [13 + O(13^5), 1 + O(13^2), O(13^3)] |
663 | | sage: b = a.rshift_coeffs(2); b |
664 | | (O(13^2))*t^2 + (O(13))*t + (1 + O(13^4)) |
665 | | sage: b.list() |
666 | | [1 + O(13^4), O(13), O(13^2)] |
| 666 | EXAMPLES:: |
| 667 | |
| 668 | sage: K = Zp(13, 4) |
| 669 | sage: R.<t> = K[] |
| 670 | sage: a = t^2 + K(13,3)*t + 169; a |
| 671 | (1 + O(13^4))*t^2 + (13 + O(13^3))*t + (13^2 + O(13^6)) |
| 672 | sage: b = a.rshift_coeffs(1); b |
| 673 | (O(13^3))*t^2 + (1 + O(13^2))*t + (13 + O(13^5)) |
| 674 | sage: b.list() |
| 675 | [13 + O(13^5), 1 + O(13^2), O(13^3)] |
| 676 | sage: b = a.rshift_coeffs(2); b |
| 677 | (O(13^2))*t^2 + (O(13))*t + (1 + O(13^4)) |
| 678 | sage: b.list() |
| 679 | [1 + O(13^4), O(13), O(13^2)] |
667 | 680 | """ |
668 | 681 | if shift < 0: |
669 | 682 | return self.lshift_coeffs(-shift, no_list) # We can't just absorb this into the next if statement because we allow rshift to preserve _normalized |
… |
… |
|
763 | 776 | Returns the degree of self, i.e., the largest $n$ so that the |
764 | 777 | coefficient of $x^n$ does not compare equal to $0$. |
765 | 778 | |
766 | | EXAMPLES: |
| 779 | EXAMPLES:: |
| 780 | |
767 | 781 | sage: K = Qp(3,10) |
768 | 782 | sage: x = O(3^5) |
769 | 783 | sage: li =[3^i * x for i in range(0,5)]; li |
… |
… |
|
873 | 887 | If n is None, defaults to the degree of self. |
874 | 888 | If n is smaller than the degree of self, some coefficients will be discarded. |
875 | 889 | |
876 | | EXAMPLES: |
877 | | sage: K = Qp(13,7) |
878 | | sage: R.<t> = K[] |
879 | | sage: f = t^3 + 4*t; f |
880 | | (1 + O(13^7))*t^3 + (4 + O(13^7))*t |
881 | | sage: f.reverse() |
882 | | (4 + O(13^7))*t^2 + (1 + O(13^7)) |
883 | | sage: f.reverse(3) |
884 | | (4 + O(13^7))*t^2 + (1 + O(13^7)) |
885 | | sage: f.reverse(2) |
886 | | (4 + O(13^7))*t |
887 | | sage: f.reverse(4) |
888 | | (4 + O(13^7))*t^3 + (1 + O(13^7))*t |
889 | | sage: f.reverse(6) |
890 | | (4 + O(13^7))*t^5 + (1 + O(13^7))*t^3 |
| 890 | EXAMPLES:: |
| 891 | |
| 892 | sage: K = Qp(13,7) |
| 893 | sage: R.<t> = K[] |
| 894 | sage: f = t^3 + 4*t; f |
| 895 | (1 + O(13^7))*t^3 + (4 + O(13^7))*t |
| 896 | sage: f.reverse() |
| 897 | (4 + O(13^7))*t^2 + (1 + O(13^7)) |
| 898 | sage: f.reverse(3) |
| 899 | (4 + O(13^7))*t^2 + (1 + O(13^7)) |
| 900 | sage: f.reverse(2) |
| 901 | (4 + O(13^7))*t |
| 902 | sage: f.reverse(4) |
| 903 | (4 + O(13^7))*t^3 + (1 + O(13^7))*t |
| 904 | sage: f.reverse(6) |
| 905 | (4 + O(13^7))*t^5 + (1 + O(13^7))*t^3 |
891 | 906 | """ |
892 | 907 | if n is None: |
893 | 908 | n = self._poly.degree() |
… |
… |
|
913 | 928 | |
914 | 929 | NOTE: Need to write this function for integer polynomials before this works. |
915 | 930 | |
916 | | EXAMPLES: |
| 931 | EXAMPLES:: |
| 932 | |
917 | 933 | sage: K = Zp(13, 5) |
918 | 934 | sage: R.<t> = K[] |
919 | 935 | sage: f = t^3 + K(13, 3) * t |
… |
… |
|
987 | 1003 | """ |
988 | 1004 | Returns a list of the Newton slopes of this polynomial. These are the valuations of the roots of this polynomial. |
989 | 1005 | |
990 | | EXAMPLES: |
991 | | sage: K = Qp(13) |
992 | | sage: R.<t> = K[] |
993 | | sage: f = t^4 + 13^5*t^2 + 4*13^2*t - 13^7 |
994 | | sage: f.newton_polygon() |
995 | | [(0, 7), (1, 2), (4, 0)] |
996 | | sage: f.newton_slopes() |
997 | | [5, 2/3, 2/3, 2/3] |
| 1006 | EXAMPLES:: |
| 1007 | |
| 1008 | sage: K = Qp(13) |
| 1009 | sage: R.<t> = K[] |
| 1010 | sage: f = t^4 + 13^5*t^2 + 4*13^2*t - 13^7 |
| 1011 | sage: f.newton_polygon() |
| 1012 | [(0, 7), (1, 2), (4, 0)] |
| 1013 | sage: f.newton_slopes() |
| 1014 | [5, 2/3, 2/3, 2/3] |
998 | 1015 | """ |
999 | 1016 | polygon = self.newton_polygon() |
1000 | 1017 | if polygon == []: |
… |
… |
|
1013 | 1030 | NOTES: |
1014 | 1031 | The vertices are listed so that the first coordinates are strictly increasing, up to the polynomial's degree (not the limit of available precision information). Also note that if some coefficients have very low precision an error is raised. |
1015 | 1032 | |
1016 | | EXAMPLES: |
1017 | | sage: K = Qp(13) |
1018 | | sage: R.<t> = K[] |
1019 | | sage: f = t^4 + 13^5*t^2 + 4*13^2*t - 13^7 |
1020 | | sage: f.newton_polygon() |
1021 | | [(0, 7), (1, 2), (4, 0)] |
| 1033 | EXAMPLES:: |
| 1034 | |
| 1035 | sage: K = Qp(13) |
| 1036 | sage: R.<t> = K[] |
| 1037 | sage: f = t^4 + 13^5*t^2 + 4*13^2*t - 13^7 |
| 1038 | sage: f.newton_polygon() |
| 1039 | [(0, 7), (1, 2), (4, 0)] |
1022 | 1040 | """ |
1023 | 1041 | if self._poly == 0: |
1024 | 1042 | return [] |
diff --git a/sage/rings/polynomial/polynomial_integer_dense_flint.pyx b/sage/rings/polynomial/polynomial_integer_dense_flint.pyx
a
|
b
|
|
204 | 204 | degree = i |
205 | 205 | try: |
206 | 206 | sig_on() |
207 | | fmpz_poly_realloc(self.__poly, degree) |
| 207 | fmpz_poly_realloc(self.__poly, degree + 1) |
208 | 208 | sig_off() |
209 | 209 | except RuntimeError: |
210 | 210 | raise OverflowError, "Cannot allocate memory!" |
diff --git a/sage/schemes/elliptic_curves/descent_two_isogeny.pyx b/sage/schemes/elliptic_curves/descent_two_isogeny.pyx
a
|
b
|
|
1227 | 1227 | p_list_mpz = <mpz_t *> sage_malloc(20 * sizeof(mpz_t)) |
1228 | 1228 | mpz_init_set_ui(p_list_mpz[0], ui2) |
1229 | 1229 | p_list_len = 1 |
| 1230 | n_factor_init(&fact) |
1230 | 1231 | n_factor(&fact, mpz_get_ui(d_mpz), proof) |
1231 | 1232 | for i from 0 <= i < fact.num: |
1232 | 1233 | p = fact.p[i] |
diff --git a/sage/schemes/elliptic_curves/ell_padic_field.py b/sage/schemes/elliptic_curves/ell_padic_field.py
a
|
b
|
|
39 | 39 | def __init__(self, x, y=None): |
40 | 40 | """ |
41 | 41 | Constructor from [a1,a2,a3,a4,a6] or [a4,a6]. |
42 | | EXAMPLES: |
43 | | sage: Qp=pAdicField(17) |
44 | | sage: E=EllipticCurve(Qp,[2,3]); E |
45 | | Elliptic Curve defined by y^2 = x^3 + (2+O(17^20))*x + (3+O(17^20)) over 17-adic Field with capped relative precision 20 |
46 | | sage: E == loads(dumps(E)) |
47 | | True |
| 42 | |
| 43 | EXAMPLES:: |
| 44 | |
| 45 | sage: Qp=pAdicField(17) |
| 46 | sage: E=EllipticCurve(Qp,[2,3]); E |
| 47 | Elliptic Curve defined by y^2 = x^3 + (2+O(17^20))*x + (3+O(17^20)) over 17-adic Field with capped relative precision 20 |
| 48 | sage: E == loads(dumps(E)) |
| 49 | True |
48 | 50 | """ |
49 | 51 | if y is None: |
50 | 52 | if isinstance(x, list): |
… |
… |
|
71 | 73 | Returns the Frobenius as a function on the group of points of |
72 | 74 | this elliptic curve. |
73 | 75 | |
74 | | EXAMPLE: |
| 76 | EXAMPLE:: |
| 77 | |
75 | 78 | sage: Qp=pAdicField(13) |
76 | 79 | sage: E=EllipticCurve(Qp,[1,1]) |
77 | 80 | sage: type(E.frobenius()) |
… |
… |
|
86 | 89 | K = self.base_field() |
87 | 90 | p = K.prime() |
88 | 91 | x = PolynomialRing(K, 'x').gen(0) |
89 | | |
| 92 | |
90 | 93 | a1, a2, a3, a4, a6 = self.a_invariants() |
91 | 94 | if a1 != 0 or a2 != 0: |
92 | 95 | raise NotImplementedError, "Curve must be in weierstrass normal form." |
93 | | |
| 96 | |
94 | 97 | f = x*x*x + a2*x*x + a4*x + a6 |
95 | 98 | h = (f(x**p) - f**p) |
96 | 99 | |
… |
… |
|
104 | 107 | if (yres-y0).valuation() == 0: |
105 | 108 | yres=-yres |
106 | 109 | return self.point([xres,yres, K(1)]) |
107 | | |
| 110 | |
108 | 111 | self._frob = _frob |
109 | | |
| 112 | |
110 | 113 | if P is None: |
111 | 114 | return _frob |
112 | 115 | else: |
113 | | return _frob(P) |
| 116 | return _frob(P) |