Statistiques
| Révision :

root / pobysoPythonSage / src / testPobyso.sage @ 221

Historique | Voir | Annoter | Télécharger (15,2 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_taylorform_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
        taylorformSo = pobyso_taylorform_so_so(functionSo,
88
                                               degreeSo,
89
                                               pointSo,
90
                                               intervalSo)
91
        pobyso_clear_taylorform_sa_so(taylorformSo)
92
    #
93
    wrapped = test_pobyso_wrapper(test,
94
                                  functionSo, 
95
                                  degreeSo, 
96
                                  pointSo, 
97
                                  intervalSo)
98
    timing = min(timeit.repeat(wrapped, repeat=repeat, number=number))
99
    #
100
    sollya_lib_clear_obj(functionSo)
101
    sollya_lib_clear_obj(degreeSo)
102
    sollya_lib_clear_obj(pointSo)
103
    sollya_lib_clear_obj(intervalSo)
104
    print "\t...", functionName, "done."
105
    return timing
106
# End test_pobyso_bounds_to_range_sa_so
107

    
108
def test_pobyso_float_poly_sa_so(repeat=100, number=10):
109
    functionName = inspect.stack()[0][3]
110
    print "Running", functionName,"..."
111
    polynomialsList = []
112
    
113
    i = var('i')
114
    RRR         = RealField(12)
115
    P_RRR       = RRR[i]
116
    polynomialsList.append(P_RRR(1/7 + 2/7*i + 3/7*i^2)) 
117
    RRR         = RealField(53)
118
    P_RRR       = RRR[i]
119
    polynomialsList.append(P_RRR(1/7 + 2/7*i + 3/7*i^2)) 
120
    RRR         = RealField(1024)
121
    P_RRR       = RRR[i]
122
    polynomialsList.append(P_RRR(1/7 + 2/7*i + 3/7*i^2)) 
123
    def test(polynomialsList):
124
        for polynomial in polynomialsList:
125
            polySo = pobyso_float_poly_sa_so(polynomial)
126
            sollya_lib_clear_obj(polySo)
127
    
128
    wrapped = test_pobyso_wrapper(test,
129
                                  polynomialsList)
130
    timing = min(timeit.repeat(wrapped, repeat=repeat, number=number))
131
    print "\t...", functionName, "done."
132
    return timing
133
# End test_pobyso_float_poly_sa_so
134

    
135
def test_pobyso_error_so(repeat=1000, number=10):
136
    functionName =  inspect.stack()[0][3]
137
    print "Running", inspect.stack()[0][3], "..."
138
    #
139
    def test():
140
        errorSo = pobyso_error_so()
141
        sollya_lib_clear_obj(errorSo)
142
    #
143
    wrapped = test_pobyso_wrapper(test)
144
    timing = min(timeit.repeat(wrapped, repeat=repeat, number=number))
145
    print "\t...", functionName, "done."
146
    return timing
147
# End test_pobyso_error_so
148

    
149
def test_pobyso_get_list_elements_so_so(repeat = 1000, number=10):
150
    functionName = inspect.stack()[0][3]
151
    print "Running", functionName, "..."
152
    def test():
153
        listSo = pobyso_parse_string_sa_so("[|0,1,2,3,4,5,6|];")
154
        (listSaSo, elementsNumSa, isEndEllipticSa) = \
155
            pobyso_get_list_elements(listSo)
156
        for elementSo in listSaSo:
157
            sollya_lib_clear_obj(elementSo)
158
        # Notice that we use sollya_lib_clear_obj and not
159
        # sollya_lib_clear_object_list.
160
        sollya_lib_clear_obj(listSo, None)
161
    #
162
    wrapped = test_pobyso_wrapper(test)
163
    timing = min(timeit.repeat(wrapped, repeat=repeat, number=number))
164
    print "\t...", functionName, "done."
165
    return timing
166
# End test_pobyso_get_list_elements    
167

    
168
def test_pobyso_get_prec_so_sa(repeat=1000, number=10):
169
    functionName = inspect.stack()[0][3]
170
    print "Running", functionName, "..."
171
    def test():
172
        precSa = pobyso_get_prec_so_sa()
173
    wrapped = test_pobyso_wrapper(test)
174
    timing = min(timeit.repeat(wrapped, repeat=repeat, number=number))
175
    print "\t...", functionName, "done."
176
    return timing
177
# End test_pobyso_get_prec_so_sa  
178

    
179
def test_pobyso_get_prec_of_constant_so_sa(repeat=1000, number=10):
180
    functionName = inspect.stack()[0][3]
181
    print "Running", functionName, "..."
182
    constSo = pobyso_constant_1_sa_so()
183
    def test():
184
        precSa = pobyso_get_prec_of_constant_so_sa(constSo)
185
    wrapped = test_pobyso_wrapper(test)
186
    timing = min(timeit.repeat(wrapped, repeat=repeat, number=number))
187
    print "\t...", functionName, "done."
188
    sollya_lib_clear_obj(constSo,None)
189
    return timing
190
# End test_pobyso_get_prec_of_constant_so_sa
191

    
192
def test_pobyso_guess_degree_sa_sa(repeat=10, number=10):
193
    functionName = inspect.stack()[0][3]
194
    print "Running", functionName, "..."
195
    funcExpSa(x) = exp(x)
196
    RRIF = RealIntervalField(113)
197
    intervalSa = RRIF(3/8 - 2^-68, 3/8 + 2^-68)
198
    print "Interval:", intervalSa.str(style='brackets')
199
    errorSa = RR(2^-227)
200
    weightSa(x) = 1
201
    degreeBoundSa = 150
202
    # Function definition
203
    def test():
204
        pobyso_guess_degree_sa_sa(funcExpSa, 
205
                                  intervalSa, 
206
                                  errorSa, 
207
                                  weightSa, 
208
                                  degreeBoundSa)
209
    wrapped = test_pobyso_wrapper(test)
210
    timing = min(timeit.repeat(wrapped, repeat=repeat, number=number))
211
    print "\t...", functionName, "done."
212
    return timing
213
# End test_pobyso_guess_degree_sa_sa
214

    
215
def test_pobyso_guess_degree_so_sa(repeat=1000, number=10):
216
    functionName = inspect.stack()[0][3]
217
    print "Running", functionName, "..."
218
    funcExpSo = pobyso_parse_string_sa_so("exp(x)")
219
    RRIF = RealIntervalField(113)
220
    intervalSa = RRIF(3/8 - 2^-68, 3/8 + 2^-68)
221
    print "Interval:", intervalSa.str(style='brackets')
222
    intervalSo = pobyso_interval_to_range_sa_so(intervalSa)
223
    errorSo = pobyso_constant_sa_so(RR(2^-227))
224
    weightSo=pobyso_parse_string_sa_so("1")
225
    degreeBoundSo = pobyso_constant_from_int_sa_so(150)
226
    # Function definition
227
    def test():
228
        pobyso_guess_degree_so_sa(funcExpSo, 
229
                                  intervalSo, 
230
                                  errorSo, 
231
                                  weightSo, 
232
                                  degreeBoundSo)                              
233
    """    
234
        pobyso_guess_degree_so_sa(funcExpSo, 
235
                                  intervalSo, 
236
                                  errorSo, 
237
                                  None, 
238
                                  None)
239
    """    
240
    wrapped = test_pobyso_wrapper(test)
241
    timing = min(timeit.repeat(wrapped, repeat=repeat, number=number))
242
    print "\t...", functionName, "done."
243
    sollya_lib_clear_obj(funcExpSo)
244
    sollya_lib_clear_obj(intervalSo)
245
    sollya_lib_clear_obj(errorSo)
246
    sollya_lib_clear_obj(weightSo)
247
    sollya_lib_clear_obj(degreeBoundSo)
248
    return timing
249
# End test_pobyso_guess_degree_so_sa
250

    
251
def test_pobyso_is_error_so_sa(repeat=1000, number=10):
252
    functionName =  inspect.stack()[0][3]
253
    print "Running", inspect.stack()[0][3], "..."
254
    #
255
    def test():
256
        errorSo = pobyso_error_so()
257
        if not pobyso_is_error_so_sa(errorSo):
258
            print "Error!"
259
        sollya_lib_clear_obj(errorSo)
260
    #
261
    wrapped = test_pobyso_wrapper(test)
262
    timing = min(timeit.repeat(wrapped, repeat=repeat, number=number))
263
    print "\t...", functionName, "done."
264
    return timing
265
# End test_pobyso_error_so
266

    
267
def test_pobyso_lib_init(repeat=1000, number=10):
268
    """
269
    Must be called exactly once. Leaks lots of memory otherwise.
270
    """
271
    functionName = inspect.stack()[0][3]
272
    print "Running", functionName,"..."
273
    def test():
274
        pobyso_lib_init()
275
        pobyso_lib_close()
276

    
277
    wrapped = test_pobyso_wrapper(test)
278
    timing = min(timeit.repeat(wrapped, repeat=repeat, number=number))
279
    print "\t...", functionName, "done."
280
    return timing
281
# End test_pobyso_lib_init
282

    
283
def test_pobyso_parse_string_sa_so(repeat=1000, number=10):
284
    functionName = inspect.stack()[0][3]
285
    print "Running", functionName,"..."
286
    stringToParse = "exp(x)^(2)/sin(x)*cos(x)"
287
    def test(stringToParseSa):
288
        expressionSo = pobyso_parse_string_sa_so(stringToParseSa)
289
        sollya_lib_clear_obj(expressionSo)
290
    
291
    wrapped = test_pobyso_wrapper(test,
292
                                  stringToParse)
293
    timing = min(timeit.repeat(wrapped, repeat=repeat, number=number))
294
    print "\t...", functionName, "done."
295
    return timing
296

    
297
# End test_pobyso_parse_string_sa_so
298

    
299
def test_pobyso_rat_poly_sa_so(repeat=100, number=10):
300
    functionName = inspect.stack()[0][3]
301
    print "Running", functionName,"..."
302
    precisionsList = [12, 53, 163, 1024]
303
    i = var('i')
304
    P_QQ        = QQ[i]
305
    pr          = P_QQ(1/7 + 2/7*i + 3/7*i^2) 
306
    def test(polynomial, precisionsList):
307
        for prec in precisionsList:
308
            polySo = pobyso_rat_poly_sa_so(polynomial, prec)
309
            sollya_lib_clear_obj(polySo)
310
    
311
    wrapped = test_pobyso_wrapper(test,
312
                                  pr,
313
                                  precisionsList)
314
    timing = min(timeit.repeat(wrapped, repeat=repeat, number=number))
315
    print "\t...", functionName, "done."
316
    return timing
317
# End test_pobyso_rat_poly_sa_so
318

    
319
def test_pobyso_taylor_expansion_no_change_var_so_so(repeat=1000, number=10):
320
    functionName = inspect.stack()[0][3]
321
    print "Running", functionName, "..."
322
    functionSo  = pobyso_parse_string('exp(x)')
323
    degreeSo    = pobyso_constant_from_int_sa_so(20)
324
    rangeSo     = pobyso_bounds_to_range_sa_so(RR(1),RR(2))
325
    errorTypeSo = pobyso_absolute_so_so()
326
    def test(functionSo, degreeSo, rangeSo, errorTypeSo):
327
        teSo = pobyso_taylor_expansion_no_change_var_so_so(functionSo,
328
                                                           degreeSo,
329
                                                           rangeSo,
330
                                                           errorTypeSo)
331
        sollya_lib_clear_obj(teSo[0])
332
        sollya_lib_clear_obj(teSo[1])
333
        sollya_lib_clear_obj(teSo[2])
334
    # End test
335
    wrapped = test_pobyso_wrapper(test, 
336
                                  functionSo, 
337
                                  degreeSo, 
338
                                  rangeSo, 
339
                                  errorTypeSo)
340
    timing = min(timeit.repeat(wrapped, repeat=repeat, number=number))
341
    sollya_lib_clear_obj(functionSo)
342
    sollya_lib_clear_obj(degreeSo)
343
    sollya_lib_clear_obj(rangeSo)
344
    sollya_lib_clear_obj(errorTypeSo)
345
    print "\t...", functionName, "done."
346
    return timing
347
# End test_pobyso_taylor_expansion_no_change_var_so_so
348

    
349
def test_pobyso_taylor_expansion_with_change_var_so_so(repeat=1000, number=10):
350
    functionName = inspect.stack()[0][3]
351
    print "Running", functionName, "..."
352
    functionSo  = pobyso_parse_string('exp(x)')
353
    degreeSo    = pobyso_constant_from_int_sa_so(20)
354
    rangeSo     = pobyso_bounds_to_range_sa_so(RR(1),RR(2))
355
    errorTypeSo = pobyso_absolute_so_so()
356
    def test(functionSo, degreeSo, rangeSo, errorTypeSo):
357
        teSo = pobyso_taylor_expansion_with_change_var_so_so(functionSo,
358
                                                             degreeSo,
359
                                                             rangeSo,
360
                                                             errorTypeSo)
361
        sollya_lib_clear_obj(teSo[0])
362
        sollya_lib_clear_obj(teSo[1])
363
        sollya_lib_clear_obj(teSo[2])
364
    # End test
365
    wrapped = test_pobyso_wrapper(test, 
366
                                  functionSo, 
367
                                  degreeSo, 
368
                                  rangeSo, 
369
                                  errorTypeSo)
370
    timing = min(timeit.repeat(wrapped, repeat=repeat, number=number))
371
    sollya_lib_clear_obj(functionSo)
372
    sollya_lib_clear_obj(degreeSo)
373
    sollya_lib_clear_obj(rangeSo)
374
    sollya_lib_clear_obj(errorTypeSo)
375
    print "\t...", functionName, "done."
376
    return timing
377
# End test_pobyso_taylor_expansion_with_change_var_so_so
378

    
379
def test_pobyso_taylorform_so_so_2(repeat=1000, number=10):
380
    functionName = inspect.stack()[0][3]
381
    print "Running", functionName, "..."
382
    functionSo  = pobyso_parse_string('exp(x)')
383
    degreeSo    = pobyso_constant_from_int_sa_so(20)
384
    rangeSo     = pobyso_bounds_to_range_sa_so(RR(1),RR(2))
385
    intervalCenterSo = sollya_lib_mid(rangeSo, None)
386
    errorTypeSo = pobyso_absolute_so_so()
387
    
388
    def test(functionSo, degreeSo, intervalCenterSo, errorTypeSo):
389
        taylorformSo = pobyso_taylorform_so_so(functionSo, 
390
                                               degreeSo, 
391
                                               intervalCenterSo, 
392
                                               errorTypeSo)
393
        sollya_lib_clear_obj(taylorformSo)
394

    
395
    wrapped = test_pobyso_wrapper(test, 
396
                                  functionSo, 
397
                                  degreeSo, 
398
                                  intervalCenterSo, 
399
                                  errorTypeSo)
400
    timing = min(timeit.repeat(wrapped, repeat=repeat, number=number))
401
    sollya_lib_clear_obj(functionSo, None)
402
    sollya_lib_clear_obj(degreeSo, None)
403
    sollya_lib_clear_obj(rangeSo, None)
404
    sollya_lib_clear_obj(intervalCenterSo, None)
405
    sollya_lib_clear_obj(errorTypeSo, None)
406
    return timing
407
# End   test_pobyso_taylor_so_so_2
408
 
409
def test_pobyso_dummy_test(iterationsNum=1, executionsNum=1):
410
    aString = "2+3"
411
    def test():
412
        return 2+3
413
    wrapped = test_pobyso_wrapper(test)
414
    timing = timeit.timeit(wrapped, number=executionsNum)
415
    return timing
416
print "\t...testPobyso loaded"