root / pobysoPythonSage / src / testPobyso.sage
Historique | Voir | Annoter | Télécharger (15,41 ko)
1 |
""" |
---|---|
2 |
Test module for pobyso.py functions. |
3 |
|
4 |
AUTHORS: |
5 |
- S.T. (2014-02-26): initial version |
6 |
|
7 |
TODO: |
8 |
- almost everything! |
9 |
|
10 |
""" |
11 |
print "testPobyso loading..." |
12 |
# |
13 |
import inspect |
14 |
import resource |
15 |
import timeit |
16 |
|
17 |
|
18 |
def memory_usage_resource(): |
19 |
rusage_denom = RR("1024") |
20 |
if sys.platform == 'darwin': |
21 |
# ... it seems that in OSX the output is different units ... |
22 |
rusage_denom = rusage_denom^2 |
23 |
mem = resource.getrusage(resource.RUSAGE_SELF).ru_maxrss / rusage_denom |
24 |
return mem |
25 |
# End memory_usage_resource() |
26 |
|
27 |
def test_pobyso_wrapper(func, *args, **kwargs): |
28 |
def wrapped(): |
29 |
return func(*args, **kwargs) |
30 |
return wrapped |
31 |
|
32 |
# |
33 |
def test_pobyso_absolute_so_so(repeat=10000, number=100): |
34 |
functionName = inspect.stack()[0][3] |
35 |
print "Running", inspect.stack()[0][3], "..." |
36 |
# |
37 |
def test(): |
38 |
absoluteSo = pobyso_absolute_so_so() |
39 |
sollya_lib_clear_obj(absoluteSo) |
40 |
# |
41 |
wrapped = test_pobyso_wrapper(test) |
42 |
timing = min(timeit.repeat(wrapped, repeat=repeat, number=number)) |
43 |
print "\t...", functionName, "done." |
44 |
return timing |
45 |
# End test_absolute_so_so |
46 |
|
47 |
def test_pobyso_autoprint_so_so(iterationsNum=1000): |
48 |
absoluteSo = pobyso_absolute_so_so() |
49 |
for index in xrange(0,iterationsNum): |
50 |
pobyso_autoprint(absoluteSo) |
51 |
sollya_lib_clear_obj(absoluteSo) |
52 |
# End test_pobyso_autoprint |
53 |
|
54 |
def test_pobyso_bounds_to_range_sa_so(repeat=1000, number=10): |
55 |
functionName = inspect.stack()[0][3] |
56 |
print "Running", inspect.stack()[0][3], "..." |
57 |
lowerBoundSa = RR(1) |
58 |
upperBoundSa = RR(2) |
59 |
precSo = pobyso_get_prec_so() |
60 |
#pobyso_autoprint(precSo) |
61 |
# |
62 |
def test(lowerBoundSa, upperBoundSa): |
63 |
rangeSo = pobyso_bounds_to_range_sa_so(lowerBoundSa, upperBoundSa) |
64 |
sollya_lib_clear_obj(rangeSo) |
65 |
# |
66 |
wrapped = test_pobyso_wrapper(test,lowerBoundSa, upperBoundSa) |
67 |
timing = min(timeit.repeat(wrapped, repeat=repeat, number=number)) |
68 |
# |
69 |
precSo = pobyso_get_prec_so() |
70 |
#pobyso_autoprint(precSo) |
71 |
sollya_lib_clear_obj(precSo) |
72 |
print "\t...", functionName, "done." |
73 |
return timing |
74 |
# End test_pobyso_bounds_to_range_sa_so |
75 |
|
76 |
def test_pobyso_clear_full_list_elements_sa_so(repeat=1000, number=10): |
77 |
functionName = inspect.stack()[0][3] |
78 |
print "Running", inspect.stack()[0][3], "..." |
79 |
intervalSa = RIF(1,2) |
80 |
functionSo = pobyso_parse_string("exp(x)") |
81 |
degreeSo = pobyso_constant_from_int_sa_so(4) |
82 |
#RealIntervalField |
83 |
pointSo = pobyso_constant_sa_so(RR("1.5")) |
84 |
intervalSo = pobyso_interval_to_range_sa_so(intervalSa) |
85 |
# |
86 |
def test(functionSo, degreeSo, pointSo, intervalSo): |
87 |
""" |
88 |
We use Taylor models to generate the lists. |
89 |
""" |
90 |
taylorformSo = pobyso_taylorform_so_so(functionSo, |
91 |
degreeSo, |
92 |
pointSo, |
93 |
intervalSo) |
94 |
taylorformSaSo = pobyso_get_list_elements_so_so(taylorformSo) |
95 |
pobyso_clear_full_list_elements_sa_so(taylorformSaSo) |
96 |
sollya_lib_clear_obj(taylorformSo) |
97 |
# |
98 |
wrapped = test_pobyso_wrapper(test, |
99 |
functionSo, |
100 |
degreeSo, |
101 |
pointSo, |
102 |
intervalSo) |
103 |
timing = min(timeit.repeat(wrapped, repeat=repeat, number=number)) |
104 |
# |
105 |
sollya_lib_clear_obj(functionSo) |
106 |
sollya_lib_clear_obj(degreeSo) |
107 |
sollya_lib_clear_obj(pointSo) |
108 |
sollya_lib_clear_obj(intervalSo) |
109 |
print "\t...", functionName, "done." |
110 |
return timing |
111 |
# End test_pobyso_clear_full_list_elements_sa_so |
112 |
|
113 |
def test_pobyso_float_poly_sa_so(repeat=100, number=10): |
114 |
functionName = inspect.stack()[0][3] |
115 |
print "Running", functionName,"..." |
116 |
polynomialsList = [] |
117 |
|
118 |
i = var('i') |
119 |
RRR = RealField(12) |
120 |
P_RRR = RRR[i] |
121 |
polynomialsList.append(P_RRR(1/7 + 2/7*i + 3/7*i^2)) |
122 |
RRR = RealField(53) |
123 |
P_RRR = RRR[i] |
124 |
polynomialsList.append(P_RRR(1/7 + 2/7*i + 3/7*i^2)) |
125 |
RRR = RealField(1024) |
126 |
P_RRR = RRR[i] |
127 |
polynomialsList.append(P_RRR(1/7 + 2/7*i + 3/7*i^2)) |
128 |
def test(polynomialsList): |
129 |
for polynomial in polynomialsList: |
130 |
polySo = pobyso_float_poly_sa_so(polynomial) |
131 |
sollya_lib_clear_obj(polySo) |
132 |
|
133 |
wrapped = test_pobyso_wrapper(test, |
134 |
polynomialsList) |
135 |
timing = min(timeit.repeat(wrapped, repeat=repeat, number=number)) |
136 |
print "\t...", functionName, "done." |
137 |
return timing |
138 |
# End test_pobyso_float_poly_sa_so |
139 |
|
140 |
def test_pobyso_error_so(repeat=1000, number=10): |
141 |
functionName = inspect.stack()[0][3] |
142 |
print "Running", inspect.stack()[0][3], "..." |
143 |
# |
144 |
def test(): |
145 |
errorSo = pobyso_error_so() |
146 |
sollya_lib_clear_obj(errorSo) |
147 |
# |
148 |
wrapped = test_pobyso_wrapper(test) |
149 |
timing = min(timeit.repeat(wrapped, repeat=repeat, number=number)) |
150 |
print "\t...", functionName, "done." |
151 |
return timing |
152 |
# End test_pobyso_error_so |
153 |
|
154 |
def test_pobyso_get_list_elements_so_so(repeat = 1000, number=10): |
155 |
functionName = inspect.stack()[0][3] |
156 |
print "Running", functionName, "..." |
157 |
def test(): |
158 |
listSo = pobyso_parse_string_sa_so("[|0,1,2,3,4,5,6|];") |
159 |
(listSaSo, elementsNumSa, isEndEllipticSa) = \ |
160 |
pobyso_get_list_elements(listSo) |
161 |
for elementSo in listSaSo: |
162 |
sollya_lib_clear_obj(elementSo) |
163 |
# Notice that we use sollya_lib_clear_obj and not |
164 |
# sollya_lib_clear_object_list. |
165 |
sollya_lib_clear_obj(listSo, None) |
166 |
# |
167 |
wrapped = test_pobyso_wrapper(test) |
168 |
timing = min(timeit.repeat(wrapped, repeat=repeat, number=number)) |
169 |
print "\t...", functionName, "done." |
170 |
return timing |
171 |
# End test_pobyso_get_list_elements |
172 |
|
173 |
def test_pobyso_get_prec_so_sa(repeat=1000, number=10): |
174 |
functionName = inspect.stack()[0][3] |
175 |
print "Running", functionName, "..." |
176 |
def test(): |
177 |
precSa = pobyso_get_prec_so_sa() |
178 |
wrapped = test_pobyso_wrapper(test) |
179 |
timing = min(timeit.repeat(wrapped, repeat=repeat, number=number)) |
180 |
print "\t...", functionName, "done." |
181 |
return timing |
182 |
# End test_pobyso_get_prec_so_sa |
183 |
|
184 |
def test_pobyso_get_prec_of_constant_so_sa(repeat=1000, number=10): |
185 |
functionName = inspect.stack()[0][3] |
186 |
print "Running", functionName, "..." |
187 |
constSo = pobyso_constant_1_sa_so() |
188 |
def test(): |
189 |
precSa = pobyso_get_prec_of_constant_so_sa(constSo) |
190 |
wrapped = test_pobyso_wrapper(test) |
191 |
timing = min(timeit.repeat(wrapped, repeat=repeat, number=number)) |
192 |
print "\t...", functionName, "done." |
193 |
sollya_lib_clear_obj(constSo,None) |
194 |
return timing |
195 |
# End test_pobyso_get_prec_of_constant_so_sa |
196 |
|
197 |
def test_pobyso_guess_degree_sa_sa(repeat=10, number=10): |
198 |
functionName = inspect.stack()[0][3] |
199 |
print "Running", functionName, "..." |
200 |
funcExpSa(x) = exp(x) |
201 |
RRIF = RealIntervalField(113) |
202 |
intervalSa = RRIF(3/8 - 2^-68, 3/8 + 2^-68) |
203 |
print "Interval:", intervalSa.str(style='brackets') |
204 |
errorSa = RR(2^-227) |
205 |
weightSa(x) = 1 |
206 |
degreeBoundSa = 150 |
207 |
# Function definition |
208 |
def test(): |
209 |
pobyso_guess_degree_sa_sa(funcExpSa, |
210 |
intervalSa, |
211 |
errorSa, |
212 |
weightSa, |
213 |
degreeBoundSa) |
214 |
wrapped = test_pobyso_wrapper(test) |
215 |
timing = min(timeit.repeat(wrapped, repeat=repeat, number=number)) |
216 |
print "\t...", functionName, "done." |
217 |
return timing |
218 |
# End test_pobyso_guess_degree_sa_sa |
219 |
|
220 |
def test_pobyso_guess_degree_so_sa(repeat=1000, number=10): |
221 |
functionName = inspect.stack()[0][3] |
222 |
print "Running", functionName, "..." |
223 |
funcExpSo = pobyso_parse_string_sa_so("exp(x)") |
224 |
RRIF = RealIntervalField(113) |
225 |
intervalSa = RRIF(3/8 - 2^-68, 3/8 + 2^-68) |
226 |
print "Interval:", intervalSa.str(style='brackets') |
227 |
intervalSo = pobyso_interval_to_range_sa_so(intervalSa) |
228 |
errorSo = pobyso_constant_sa_so(RR(2^-227)) |
229 |
weightSo=pobyso_parse_string_sa_so("1") |
230 |
degreeBoundSo = pobyso_constant_from_int_sa_so(150) |
231 |
# Function definition |
232 |
def test(): |
233 |
pobyso_guess_degree_so_sa(funcExpSo, |
234 |
intervalSo, |
235 |
errorSo, |
236 |
weightSo, |
237 |
degreeBoundSo) |
238 |
""" |
239 |
pobyso_guess_degree_so_sa(funcExpSo, |
240 |
intervalSo, |
241 |
errorSo, |
242 |
None, |
243 |
None) |
244 |
""" |
245 |
wrapped = test_pobyso_wrapper(test) |
246 |
timing = min(timeit.repeat(wrapped, repeat=repeat, number=number)) |
247 |
print "\t...", functionName, "done." |
248 |
sollya_lib_clear_obj(funcExpSo) |
249 |
sollya_lib_clear_obj(intervalSo) |
250 |
sollya_lib_clear_obj(errorSo) |
251 |
sollya_lib_clear_obj(weightSo) |
252 |
sollya_lib_clear_obj(degreeBoundSo) |
253 |
return timing |
254 |
# End test_pobyso_guess_degree_so_sa |
255 |
|
256 |
def test_pobyso_is_error_so_sa(repeat=1000, number=10): |
257 |
functionName = inspect.stack()[0][3] |
258 |
print "Running", inspect.stack()[0][3], "..." |
259 |
# |
260 |
def test(): |
261 |
errorSo = pobyso_error_so() |
262 |
if not pobyso_is_error_so_sa(errorSo): |
263 |
print "Error!" |
264 |
sollya_lib_clear_obj(errorSo) |
265 |
# |
266 |
wrapped = test_pobyso_wrapper(test) |
267 |
timing = min(timeit.repeat(wrapped, repeat=repeat, number=number)) |
268 |
print "\t...", functionName, "done." |
269 |
return timing |
270 |
# End test_pobyso_error_so |
271 |
|
272 |
def test_pobyso_lib_init(repeat=1000, number=10): |
273 |
""" |
274 |
Must be called exactly once. Leaks lots of memory otherwise. |
275 |
""" |
276 |
functionName = inspect.stack()[0][3] |
277 |
print "Running", functionName,"..." |
278 |
def test(): |
279 |
pobyso_lib_init() |
280 |
pobyso_lib_close() |
281 |
|
282 |
wrapped = test_pobyso_wrapper(test) |
283 |
timing = min(timeit.repeat(wrapped, repeat=repeat, number=number)) |
284 |
print "\t...", functionName, "done." |
285 |
return timing |
286 |
# End test_pobyso_lib_init |
287 |
|
288 |
def test_pobyso_parse_string_sa_so(repeat=1000, number=10): |
289 |
functionName = inspect.stack()[0][3] |
290 |
print "Running", functionName,"..." |
291 |
stringToParse = "exp(x)^(2)/sin(x)*cos(x)" |
292 |
def test(stringToParseSa): |
293 |
expressionSo = pobyso_parse_string_sa_so(stringToParseSa) |
294 |
sollya_lib_clear_obj(expressionSo) |
295 |
|
296 |
wrapped = test_pobyso_wrapper(test, |
297 |
stringToParse) |
298 |
timing = min(timeit.repeat(wrapped, repeat=repeat, number=number)) |
299 |
print "\t...", functionName, "done." |
300 |
return timing |
301 |
|
302 |
# End test_pobyso_parse_string_sa_so |
303 |
|
304 |
def test_pobyso_rat_poly_sa_so(repeat=100, number=10): |
305 |
functionName = inspect.stack()[0][3] |
306 |
print "Running", functionName,"..." |
307 |
precisionsList = [12, 53, 163, 1024] |
308 |
i = var('i') |
309 |
P_QQ = QQ[i] |
310 |
pr = P_QQ(1/7 + 2/7*i + 3/7*i^2) |
311 |
def test(polynomial, precisionsList): |
312 |
for prec in precisionsList: |
313 |
polySo = pobyso_rat_poly_sa_so(polynomial, prec) |
314 |
sollya_lib_clear_obj(polySo) |
315 |
|
316 |
wrapped = test_pobyso_wrapper(test, |
317 |
pr, |
318 |
precisionsList) |
319 |
timing = min(timeit.repeat(wrapped, repeat=repeat, number=number)) |
320 |
print "\t...", functionName, "done." |
321 |
return timing |
322 |
# End test_pobyso_rat_poly_sa_so |
323 |
|
324 |
def test_pobyso_taylor_expansion_no_change_var_so_so(repeat=1000, number=10): |
325 |
functionName = inspect.stack()[0][3] |
326 |
print "Running", functionName, "..." |
327 |
functionSo = pobyso_parse_string('exp(x)') |
328 |
degreeSo = pobyso_constant_from_int_sa_so(20) |
329 |
rangeSo = pobyso_bounds_to_range_sa_so(RR(1),RR(2)) |
330 |
errorTypeSo = pobyso_absolute_so_so() |
331 |
def test(functionSo, degreeSo, rangeSo, errorTypeSo): |
332 |
teSo = pobyso_taylor_expansion_no_change_var_so_so(functionSo, |
333 |
degreeSo, |
334 |
rangeSo, |
335 |
errorTypeSo) |
336 |
sollya_lib_clear_obj(teSo[0]) |
337 |
sollya_lib_clear_obj(teSo[1]) |
338 |
sollya_lib_clear_obj(teSo[2]) |
339 |
# End test |
340 |
wrapped = test_pobyso_wrapper(test, |
341 |
functionSo, |
342 |
degreeSo, |
343 |
rangeSo, |
344 |
errorTypeSo) |
345 |
timing = min(timeit.repeat(wrapped, repeat=repeat, number=number)) |
346 |
sollya_lib_clear_obj(functionSo) |
347 |
sollya_lib_clear_obj(degreeSo) |
348 |
sollya_lib_clear_obj(rangeSo) |
349 |
sollya_lib_clear_obj(errorTypeSo) |
350 |
print "\t...", functionName, "done." |
351 |
return timing |
352 |
# End test_pobyso_taylor_expansion_no_change_var_so_so |
353 |
|
354 |
def test_pobyso_taylor_expansion_with_change_var_so_so(repeat=1000, number=10): |
355 |
functionName = inspect.stack()[0][3] |
356 |
print "Running", functionName, "..." |
357 |
functionSo = pobyso_parse_string('exp(x)') |
358 |
degreeSo = pobyso_constant_from_int_sa_so(20) |
359 |
rangeSo = pobyso_bounds_to_range_sa_so(RR(1),RR(2)) |
360 |
errorTypeSo = pobyso_absolute_so_so() |
361 |
def test(functionSo, degreeSo, rangeSo, errorTypeSo): |
362 |
teSo = pobyso_taylor_expansion_with_change_var_so_so(functionSo, |
363 |
degreeSo, |
364 |
rangeSo, |
365 |
errorTypeSo) |
366 |
sollya_lib_clear_obj(teSo[0]) |
367 |
sollya_lib_clear_obj(teSo[1]) |
368 |
sollya_lib_clear_obj(teSo[2]) |
369 |
# End test |
370 |
wrapped = test_pobyso_wrapper(test, |
371 |
functionSo, |
372 |
degreeSo, |
373 |
rangeSo, |
374 |
errorTypeSo) |
375 |
timing = min(timeit.repeat(wrapped, repeat=repeat, number=number)) |
376 |
sollya_lib_clear_obj(functionSo) |
377 |
sollya_lib_clear_obj(degreeSo) |
378 |
sollya_lib_clear_obj(rangeSo) |
379 |
sollya_lib_clear_obj(errorTypeSo) |
380 |
print "\t...", functionName, "done." |
381 |
return timing |
382 |
# End test_pobyso_taylor_expansion_with_change_var_so_so |
383 |
|
384 |
def test_pobyso_taylorform_so_so_2(repeat=1000, number=10): |
385 |
functionName = inspect.stack()[0][3] |
386 |
print "Running", functionName, "..." |
387 |
functionSo = pobyso_parse_string('exp(x)') |
388 |
degreeSo = pobyso_constant_from_int_sa_so(20) |
389 |
rangeSo = pobyso_bounds_to_range_sa_so(RR(1),RR(2)) |
390 |
intervalCenterSo = sollya_lib_mid(rangeSo, None) |
391 |
errorTypeSo = pobyso_absolute_so_so() |
392 |
|
393 |
def test(functionSo, degreeSo, intervalCenterSo, errorTypeSo): |
394 |
taylorformSo = pobyso_taylorform_so_so(functionSo, |
395 |
degreeSo, |
396 |
intervalCenterSo, |
397 |
errorTypeSo) |
398 |
sollya_lib_clear_obj(taylorformSo) |
399 |
|
400 |
wrapped = test_pobyso_wrapper(test, |
401 |
functionSo, |
402 |
degreeSo, |
403 |
intervalCenterSo, |
404 |
errorTypeSo) |
405 |
timing = min(timeit.repeat(wrapped, repeat=repeat, number=number)) |
406 |
sollya_lib_clear_obj(functionSo, None) |
407 |
sollya_lib_clear_obj(degreeSo, None) |
408 |
sollya_lib_clear_obj(rangeSo, None) |
409 |
sollya_lib_clear_obj(intervalCenterSo, None) |
410 |
sollya_lib_clear_obj(errorTypeSo, None) |
411 |
return timing |
412 |
# End test_pobyso_taylor_so_so_2 |
413 |
|
414 |
def test_pobyso_dummy_test(iterationsNum=1, executionsNum=1): |
415 |
aString = "2+3" |
416 |
def test(): |
417 |
return 2+3 |
418 |
wrapped = test_pobyso_wrapper(test) |
419 |
timing = timeit.timeit(wrapped, number=executionsNum) |
420 |
return timing |
421 |
print "\t...testPobyso loaded" |