root / pobysoPythonSage / src / sageSLZ / runSLZ-53-binade.sage @ 303
Historique | Voir | Annoter | Télécharger (5,31 ko)
1 | 253 | storres | #! /opt/sage/sage |
---|---|---|---|
2 | 253 | storres | # @file runSLZ-113proj.sage |
3 | 253 | storres | # |
4 | 253 | storres | #@par Changes from runSLZ-113.sage |
5 | 253 | storres | # LLL reduction is not performed on the matrix itself but rather on the |
6 | 253 | storres | # product of the matrix with a uniform random matrix. |
7 | 253 | storres | # The reduced matrix obtained is discarded but the transformation matrix |
8 | 253 | storres | # obtained is used to multiply the original matrix in order to reduced it. |
9 | 253 | storres | # If a sufficient level of reduction is obtained, we stop here. If not |
10 | 253 | storres | # the product matrix obtained above is LLL reduced. But as it has been |
11 | 253 | storres | # pre-reduced at the above step, reduction is supposed to be much faster. |
12 | 253 | storres | # |
13 | 253 | storres | # Both reductions combined should hopefully be faster than a straight single |
14 | 253 | storres | # reduction. |
15 | 253 | storres | # |
16 | 253 | storres | # Run SLZ for p=113 |
17 | 253 | storres | #from scipy.constants.codata import precision |
18 | 253 | storres | def initialize_env(): |
19 | 253 | storres | """ |
20 | 253 | storres | Load all necessary modules. |
21 | 253 | storres | """ |
22 | 253 | storres | compiledSpyxDir = "/home/storres/recherche/arithmetique/pobysoPythonSage/compiledSpyx" |
23 | 253 | storres | if compiledSpyxDir not in sys.path: |
24 | 253 | storres | sys.path.append(compiledSpyxDir) |
25 | 253 | storres | if not 'mpfi' in sage.misc.cython.standard_libs: |
26 | 253 | storres | sage.misc.cython.standard_libs.append('mpfi') |
27 | 253 | storres | load("/home/storres/recherche/arithmetique/pobysoPythonSage/src/sollya_lib.sage") |
28 | 253 | storres | # load("/home/storres/recherche/arithmetique/pobysoPythonSage/src/sageMpfr.spyx") |
29 | 253 | storres | # load("/home/storres/recherche/arithmetique/pobysoPythonSage/src/sageGMP.spyx") |
30 | 253 | storres | load("/home/storres/recherche/arithmetique/pobysoPythonSage/src/pobyso.py") |
31 | 253 | storres | load("/home/storres/recherche/arithmetique/pobysoPythonSage/src/sageSLZ/sageSLZ.sage") |
32 | 253 | storres | load("/home/storres/recherche/arithmetique/pobysoPythonSage/src/sageSLZ/sageNumericalOperations.sage") |
33 | 253 | storres | load("/home/storres/recherche/arithmetique/pobysoPythonSage/src/sageSLZ/sageRationalOperations.sage") |
34 | 253 | storres | # Matrix operations are loaded by polynomial operations. |
35 | 253 | storres | load("/home/storres/recherche/arithmetique/pobysoPythonSage/src/sageSLZ/sagePolynomialOperations.sage") |
36 | 253 | storres | load("/home/storres/recherche/arithmetique/pobysoPythonSage/src/sageSLZ/sageRunSLZ.sage") |
37 | 253 | storres | |
38 | 253 | storres | |
39 | 253 | storres | print "Running SLZ..." |
40 | 253 | storres | initialize_env() |
41 | 253 | storres | from sageMpfr import * |
42 | 253 | storres | from sageGMP import * |
43 | 253 | storres | import sys |
44 | 253 | storres | from subprocess import call |
45 | 253 | storres | # |
46 | 253 | storres | ## Main variables and parameters. |
47 | 253 | storres | x = var('x') |
48 | 253 | storres | func(x) = exp(x) |
49 | 253 | storres | precision = 53 |
50 | 253 | storres | emin = -1022 |
51 | 253 | storres | emax = 1023 |
52 | 253 | storres | RRR = RealField(precision) |
53 | 253 | storres | degree = 0 |
54 | 253 | storres | alpha = 0 |
55 | 253 | storres | htrn = 0 |
56 | 253 | storres | signAsString = "" |
57 | 253 | storres | binade = 0 |
58 | 253 | storres | debugMode = False |
59 | 253 | storres | ## Local functions |
60 | 253 | storres | # |
61 | 253 | storres | def usage(): |
62 | 253 | storres | write = sys.stderr.write |
63 | 253 | storres | write("\nUsage:\n") |
64 | 253 | storres | write(" " + scriptName + " <degree> <alpha> <htrn> <intervalCenter>\n") |
65 | 253 | storres | write(" <numberOfNumbers> [debug]\n") |
66 | 253 | storres | write("\nArguments:\n") |
67 | 253 | storres | write(" degree the degree of the polynomial (integer)\n") |
68 | 253 | storres | write(" alpha alpha (integer)\n") |
69 | 253 | storres | write(" htrn hardness-to-round - a number of bits (integer)\n") |
70 | 253 | storres | write(" binade the binade we want to explore\n") |
71 | 253 | storres | write(" as a positive integral expression\n") |
72 | 253 | storres | write(" sign the sign of the interval we want to expolore\n") |
73 | 253 | storres | write(" either \"pos\" or \"neg\"\n") |
74 | 253 | storres | write(" debug debug mode (\"debug\", in any case)\n\n") |
75 | 253 | storres | sys.exit(2) |
76 | 253 | storres | # End usage. |
77 | 253 | storres | # |
78 | 253 | storres | argsCount = len(sys.argv) |
79 | 253 | storres | scriptName = os.path.basename(__file__) |
80 | 253 | storres | if argsCount < 6: |
81 | 253 | storres | usage() |
82 | 253 | storres | for index in xrange(1,argsCount): |
83 | 253 | storres | if index == 1: |
84 | 253 | storres | degree = int(sys.argv[index]) |
85 | 253 | storres | elif index == 2: |
86 | 253 | storres | alpha = int(sys.argv[index]) |
87 | 253 | storres | elif index == 3: |
88 | 253 | storres | htrn = int(eval(sys.argv[index])) |
89 | 253 | storres | elif index == 4: |
90 | 253 | storres | binade = int(eval(sys.argv[index])) |
91 | 253 | storres | elif index == 5: |
92 | 253 | storres | signAsString = sys.argv[index] |
93 | 254 | storres | signAsString = signAsString.lower() |
94 | 253 | storres | elif index == 6: |
95 | 253 | storres | debugMode = sys.argv[index].upper() |
96 | 253 | storres | debugMode = (debugMode == "DEBUG") |
97 | 253 | storres | # Done with command line arguments collection. |
98 | 253 | storres | # |
99 | 253 | storres | ## Set the terminal window title. |
100 | 253 | storres | terminalWindowTitle = ['stt', |
101 | 253 | storres | str(degree), |
102 | 253 | storres | str(alpha), |
103 | 253 | storres | str(htrn), |
104 | 253 | storres | str(binade), |
105 | 253 | storres | signAsString] |
106 | 253 | storres | call(terminalWindowTitle) |
107 | 253 | storres | # |
108 | 253 | storres | binadeUlp = 2^(binade - precision + 1) |
109 | 253 | storres | if signAsString == "pos": |
110 | 253 | storres | lowerBound = RRR(2^binade) |
111 | 253 | storres | upperBound = RRR(2^(binade+1)) - binadeUlp |
112 | 253 | storres | elif signAsString == "neg": |
113 | 253 | storres | lowerBound = -RRR(2^(binade+1)) + binadeUlp |
114 | 253 | storres | upperBound = -RRR(2^binade) |
115 | 253 | storres | else: |
116 | 253 | storres | exceptionErrorMess = "\"" + signAsString + "\" is an invalid sign." \ |
117 | 253 | storres | ". Aborting!\n" |
118 | 253 | storres | raise Exception(exceptionErrorMess) |
119 | 254 | storres | # |
120 | 254 | storres | ## Debug printing |
121 | 254 | storres | print "degree :", degree |
122 | 254 | storres | print "alpha :", alpha |
123 | 254 | storres | print "htrn :", htrn |
124 | 254 | storres | print "binade :", binade |
125 | 254 | storres | print "lower bound :", lowerBound.str(truncate=False) |
126 | 254 | storres | print "upper bound :", upperBound.str(truncate=False) |
127 | 254 | storres | print "sign :", signAsString |
128 | 254 | storres | print "debug mode :", debugMode |
129 | 254 | storres | |
130 | 254 | storres | # |
131 | 253 | storres | srs_run_SLZ_v05(inputFunction=func, |
132 | 253 | storres | inputLowerBound = lowerBound, |
133 | 253 | storres | inputUpperBound = upperBound, |
134 | 253 | storres | alpha = alpha, |
135 | 253 | storres | degree = degree, |
136 | 253 | storres | precision = precision, |
137 | 253 | storres | emin = emin, |
138 | 253 | storres | emax = emax, |
139 | 253 | storres | targetHardnessToRound = htrn, |
140 | 253 | storres | debug = debugMode) |