Hide keyboard shortcuts

Hot-keys on this page

r m x p   toggle line displays

j k   next/prev highlighted chunk

0   (zero) top of page

1   (one) first highlighted chunk

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

""" 

p-adic Flat Polynomials 

""" 

 

#***************************************************************************** 

# Distributed under the terms of the GNU General Public License (GPL) 

# as published by the Free Software Foundation; either version 2 of 

# the License, or (at your option) any later version. 

# http://www.gnu.org/licenses/ 

#***************************************************************************** 

import six 

from six.moves import range 

 

from sage.rings.polynomial.polynomial_element import Polynomial_generic_dense, Polynomial 

from sage.rings.polynomial.padics.polynomial_padic import Polynomial_padic 

from sage.rings.infinity import infinity 

from sage.libs.all import pari_gen 

import sage.rings.padics.misc 

 

class Polynomial_padic_flat(Polynomial_generic_dense, Polynomial_padic): 

def __init__(self, parent, x=None, check=True, is_gen=False, construct=False, absprec=None): 

""" 

TESTS: 

 

Check that :trac:`13620` has been fixed:: 

 

sage: K = ZpFM(3) 

sage: R.<t> = K[] 

sage: R(R.zero()) 

0 

 

""" 

if x is None: 

Polynomial_generic_dense.__init__(self, parent, x, check, is_gen, construct) 

return 

R = parent.base_ring() 

if sage.rings.fraction_field_element.is_FractionFieldElement(x): 

if x.denominator() != 1: 

raise TypeError("denominator must be 1") 

else: 

x = x.numerator() 

if isinstance(x, Polynomial): 

if x.base_ring() is R: 

x = list(x.list()) 

else: 

x = [R(a) for a in x.list()] 

elif isinstance(x, list): 

if check: 

x = [R(a) for a in x] 

elif isinstance(x, dict): 

if check: 

m = infinity 

zero = R(0) 

n = max(x.keys()) if x else 0 

v = [zero] * (n + 1) 

for i, z in six.iteritems(x): 

v[i] = R(z) 

m = min(m, v[i].precision_absolute()) 

x = v 

else: 

m = sage.rings.padics.misc.min(a.precision_absolute() for a in x.values()) 

if not absprec is None: 

m = min(m, absprec) 

Polynomial_generic_dense.__init__(self, parent, x, absprec = m) 

return 

elif isinstance(x, pari_gen): 

x = [R(w) for w in x.list()] 

else: 

x = [R(x)] 

if absprec is None: 

absprec = infinity 

m = min([a.precision_absolute() for a in x] + [absprec]) 

Polynomial_generic_dense.__init__(self, parent, x, absprec = m)