Statistiques
| Révision :

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

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

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