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