Statistiques
| Révision :

root / pobysoPythonSage / src / testPobyso.sage @ 283

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"