Statistiques
| Révision :

root / pobysoPythonSage / src / sageSLZ / sageRationalOperations.sage @ 272

Historique | Voir | Annoter | Télécharger (3,2 ko)

1 115 storres
r"""
2 115 storres
Some small tools needed to manipulate lists of rational numbers.
3 70 storres
4 70 storres
AUTHORS:
5 115 storres
- S.T. (2013-04): initial version
6 70 storres
7 115 storres
Examples:
8 115 storres
    TODO
9 70 storres
"""
10 246 storres
sys.stderr.write("sageRationalOperations loading...\n")
11 80 storres
def sro_denominators(rationalList = None):
12 69 storres
    """
13 69 storres
    Compute the list of the denominators of a rational numbers list.
14 69 storres
    """
15 69 storres
    # No argument.
16 69 storres
    if rationalList is None:
17 69 storres
        raise TypeError('numerators takes a list of rationals.')
18 69 storres
    try:
19 69 storres
        listLength = len(rationalList)
20 69 storres
    except Exception:
21 69 storres
        print "denominators:", rationalList, \
22 69 storres
                "does not understand the len() function."
23 159 storres
        return []
24 69 storres
    if listLength == 0:
25 159 storres
        return []
26 69 storres
    if listLength == 1:
27 69 storres
        try:
28 173 storres
            return [QQ(rationalList[0]).denominator()]
29 69 storres
        except Exception:
30 69 storres
            print "denominators:", rationalList[0], \
31 69 storres
                    "has no \"denominator()\" member."
32 159 storres
            return []
33 69 storres
    denominatorsList = []
34 69 storres
    for i in xrange(listLength):
35 69 storres
        try:
36 69 storres
            denominatorsList.append(QQ(rationalList[i]).denominator())
37 69 storres
        except Exception:
38 69 storres
            print "denominators:", rationalList[i], \
39 69 storres
                    "has no \"denominator()\" member."
40 159 storres
            return []
41 170 storres
    return denominatorsList
42 80 storres
# End sro_denominators
43 69 storres
44 80 storres
def sro_lcmm(rationalList = None):
45 70 storres
    """
46 70 storres
    Compute the lcm of an sequence (list, tuple) of rational numbers.
47 87 storres
    In fact, we can (should and do) use lcm instead: it accepts a list argument.
48 87 storres
    Kept here has a model for this kind of functions.
49 70 storres
    """
50 70 storres
    # No argument.
51 70 storres
    if rationalList is None:
52 70 storres
        raise TypeError('lcmm takes a list of rationals')
53 70 storres
    # Try the len function.
54 70 storres
    try:
55 70 storres
        listLength = len(rationalList)
56 70 storres
    except Exception:
57 70 storres
        print "lcmm:", rationalList, "does not understand the len() function."
58 70 storres
        return(0)
59 70 storres
    # An empty list: return 0
60 70 storres
    if listLength == 0:
61 70 storres
        return(0)
62 70 storres
    # Only one element, return it, wahtever it is.
63 70 storres
    if listLength == 1:
64 70 storres
        return(rationalList[0])
65 70 storres
    try:
66 70 storres
        return(reduce(lcm, rationalList))
67 70 storres
    except Exception:
68 70 storres
        print "Exception raised in lcmm!"
69 70 storres
        return(0)
70 80 storres
# End sro_lcmm
71 80 storres
72 80 storres
def sro_numerators(rationalList = None):
73 69 storres
    """
74 69 storres
    Compute the list of the numerators of a rational numbers list.
75 69 storres
    """
76 69 storres
    # No argument.
77 69 storres
    if rationalList is None:
78 69 storres
        raise TypeError('numerators takes a list of rationals.')
79 69 storres
    try:
80 69 storres
        listLength = len(rationalList)
81 69 storres
    except Exception:
82 69 storres
        print "numerators:", rationalList, \
83 69 storres
                "does not understand the len() function."
84 159 storres
        return []
85 69 storres
    if listLength == 0:
86 159 storres
        return []
87 69 storres
    if listLength == 1:
88 69 storres
        try:
89 69 storres
            return(QQ(rationalList[0]).numerator())
90 69 storres
        except Exception:
91 69 storres
            print "denominators:", rationalList[0], \
92 69 storres
                    "has no \"numerator()\" member."
93 159 storres
            return []
94 69 storres
    numeratorsList = []
95 69 storres
    for i in xrange(listLength):
96 69 storres
        try:
97 69 storres
            numeratorsList.append(QQ(rationalList[i]).numerator())
98 69 storres
        except Exception:
99 69 storres
            print "numerators:", rationalList[i], \
100 69 storres
                    "has no \"numerator()\" member."
101 159 storres
            return []
102 159 storres
    return numeratorsList
103 81 storres
# End sro_numerators
104 81 storres
105 246 storres
sys.stderr.write("\t...sageRationalOperations loaded.\n")