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") |