Utility functions for p-adic polynomials

Utility functions for p-adic roots

dual_pairs.padic_roots.integral_basis_generator(f)

TODO

dual_pairs.padic_roots.kummer_dedekind(f)

TODO

dual_pairs.padic_roots.lift_root(f, a, K)

TODO

dual_pairs.padic_roots.padic_aut(K, r)

Return a map that sends an element of K to its image under the automorphism that maps K.gen() to r.

TESTS:

sage: from dual_pairs.padic_roots import padic_aut
sage: R.<x> = QQ[]
sage: K.<a> = Qp(23).extension(x^2 + 23)
sage: padic_aut(K, -a)(a)
22*a + a^3 + O(a^41)
sage: padic_aut(K, -a)(a^2 + 4*a - 5) == a^2 - 4*a - 5
True
dual_pairs.padic_roots.padic_roots(f, K)

Return the roots of f in the p-adic field K.

TESTS:

sage: from dual_pairs.padic_roots import padic_roots
sage: R.<x> = PolynomialRing(QQ)
sage: K.<a> = Qp(23, 20).extension(x^2 + 23)
sage: padic_roots(x, K)
[0]
sage: padic_roots(x^3 - x - 1, K)
[3 + 8*a^2 + 18*a^4 + 21*a^8 + 2*a^10 + 21*a^12 + 2*a^16 + 17*a^18 + 10*a^20 + 10*a^22 + 20*a^24 + 18*a^26 + 22*a^28 + 18*a^30 + 18*a^32 + 16*a^34 + 21*a^36 + 8*a^38 + O(a^40),
 10 + 19*a + 8*a^2 + 19*a^3 + 3*a^4 + 18*a^5 + 12*a^6 + a^7 + 13*a^8 + 7*a^9 + 6*a^11 + a^12 + 5*a^13 + 12*a^14 + 7*a^15 + 11*a^16 + 15*a^17 + 15*a^18 + 12*a^19 + 19*a^20 + 16*a^21 + 19*a^22 + 18*a^23 + 14*a^24 + 19*a^25 + 15*a^26 + 4*a^27 + 13*a^28 + a^29 + 15*a^30 + 20*a^31 + 15*a^32 + 7*a^33 + 16*a^34 + 12*a^35 + 2*a^36 + 8*a^38 + O(a^39),
 10 + 4*a + 8*a^2 + 5*a^3 + 3*a^4 + 6*a^5 + 12*a^6 + 13*a^8 + 16*a^9 + 18*a^11 + a^12 + 19*a^13 + 12*a^14 + 17*a^15 + 11*a^16 + 9*a^17 + 15*a^18 + 12*a^19 + 19*a^20 + 8*a^21 + 19*a^22 + 6*a^23 + 14*a^24 + 5*a^25 + 15*a^26 + 20*a^27 + 13*a^28 + 15*a^30 + 3*a^31 + 15*a^32 + 17*a^33 + 16*a^34 + 12*a^35 + 2*a^36 + a^37 + 8*a^38 + O(a^39)]
sage: padic_roots(x^6 - 6*x^4 + 9*x^2 + 23, K)
[15*a + 14*a^3 + 12*a^5 + a^7 + 14*a^9 + 12*a^11 + 10*a^13 + 14*a^15 + 7*a^17 + 8*a^21 + 12*a^23 + 14*a^25 + 7*a^27 + 2*a^29 + 17*a^31 + 13*a^33 + a^35 + 22*a^37 + 16*a^39 + O(a^41),
 8*a + 10*a^3 + 12*a^5 + 9*a^9 + 12*a^11 + 14*a^13 + 10*a^15 + 17*a^17 + a^19 + 15*a^21 + 12*a^23 + 10*a^25 + 17*a^27 + 22*a^29 + 7*a^31 + 11*a^33 + a^37 + 8*a^39 + O(a^41),
 16 + 19*a + a^2 + 19*a^3 + 15*a^4 + 18*a^5 + 11*a^6 + a^7 + 9*a^8 + 7*a^9 + 2*a^10 + 6*a^11 + 20*a^12 + 5*a^13 + 11*a^14 + 7*a^15 + 15*a^16 + 15*a^17 + 3*a^18 + 12*a^19 + 14*a^20 + 16*a^21 + 15*a^22 + 18*a^23 + 7*a^24 + 19*a^25 + 3*a^26 + 4*a^27 + 9*a^28 + a^29 + 3*a^30 + 20*a^31 + 3*a^32 + 7*a^33 + 12*a^35 + 19*a^36 + O(a^39),
 16 + 4*a + a^2 + 5*a^3 + 15*a^4 + 6*a^5 + 11*a^6 + 9*a^8 + 16*a^9 + 2*a^10 + 18*a^11 + 20*a^12 + 19*a^13 + 11*a^14 + 17*a^15 + 15*a^16 + 9*a^17 + 3*a^18 + 12*a^19 + 14*a^20 + 8*a^21 + 15*a^22 + 6*a^23 + 7*a^24 + 5*a^25 + 3*a^26 + 20*a^27 + 9*a^28 + 3*a^30 + 3*a^31 + 3*a^32 + 17*a^33 + 12*a^35 + 19*a^36 + a^37 + O(a^39),
 7 + 19*a + 19*a^3 + 8*a^4 + 18*a^5 + 13*a^6 + a^7 + 15*a^8 + 7*a^9 + 22*a^10 + 6*a^11 + 4*a^12 + 5*a^13 + 13*a^14 + 7*a^15 + 9*a^16 + 15*a^17 + 21*a^18 + 12*a^19 + 10*a^20 + 16*a^21 + 9*a^22 + 18*a^23 + 17*a^24 + 19*a^25 + 21*a^26 + 4*a^27 + 15*a^28 + a^29 + 21*a^30 + 20*a^31 + 21*a^32 + 7*a^33 + a^34 + 12*a^35 + 4*a^36 + a^38 + O(a^39),
 7 + 4*a + 5*a^3 + 8*a^4 + 6*a^5 + 13*a^6 + 15*a^8 + 16*a^9 + 22*a^10 + 18*a^11 + 4*a^12 + 19*a^13 + 13*a^14 + 17*a^15 + 9*a^16 + 9*a^17 + 21*a^18 + 12*a^19 + 10*a^20 + 8*a^21 + 9*a^22 + 6*a^23 + 17*a^24 + 5*a^25 + 21*a^26 + 20*a^27 + 15*a^28 + 21*a^30 + 3*a^31 + 21*a^32 + 17*a^33 + a^34 + 12*a^35 + 4*a^36 + a^37 + a^38 + O(a^39)]
dual_pairs.padic_roots.reduce_element(a, K)

TODO

dual_pairs.padic_roots.reduce_poly(f, K)

TODO

dual_pairs.padic_roots.rootpadic(f, a, K)

Return the roots of f in K that are congruent to a modulo the maximal ideal.

dual_pairs.padic_roots.roots_mod_m(f, K)

TODO