iaperftest - Comparação de Performance

Date: 13/04/2013

Código-fonte

 1 import iaOPF.iaperftest
 2 
 3 class PerfTest(iaOPF.iaperftest.PerfTest):
 4     vet_testers = []
 5     vet_funcs = []
 6 
 7     def __init__(self):
 8         self.vet_tests = []
 9         self.vet_fncs = []
10         self.vet_testers = []
11         self.vet_funcs = []
12 
13     def addTester(self, name, fun, args=[], show_results=True):
14         self.show_r = show_results
15         self.vet_testers.append([name, fun, args])
16 
17     def addTest(self, author, name, fun, args=[], kwargs={}, pprocs=[]):
18         self.vet_funcs.append([author, name, fun, args, kwargs, pprocs])
19 
20     def setLists(self):
21         listF = []
22         listT = []
23         for tname, tester, targs in self.vet_testers:
24             listT.append([tname, (tester, targs)])
25         for author, name, fun, args, kwargs, pprocs in self.vet_funcs:
26             if len(pprocs) == 0:
27                 pprocs = [lambda x,y: y]
28             def myfun(x, fun=fun, args=args, kwargs=kwargs):
29                 tester = x[0]
30                 targs = x[1]
31                 return tester([fun, args, kwargs], *targs)
32             listF.append([author, name, myfun, pprocs])
33         return listF, listT
34 
35     def runTests(self, n=1):
36         listF, self.vet_tests = self.setLists()
37         return iaOPF.iaperftest.PerfTest.runTests(self, listF, n)

Exemplo de Utilização

Página de Definição dos Testes

 1 import iaperftest
 2 
 3 tester = iaperftest.PerfTest()
 4 tester.setup(xsPackage, xsModule)
 5 
 6 # --------------------------
 7 # Função que executa o teste
 8 # --------------------------
 9 def check_binary(userfun, id):
10     from iaLPR import lprGetPhoto
11     fun, args, kwargs = userfun
12     image, _ = lprGetPhoto(id)
13     return fun(image, *args, **kwargs).dtype == bool
14 
15 # ----------------------
16 # Registra cada testador
17 # ----------------------
18 # def addTester(descr, fun, args=[])
19 
20 tester.addTester('imagem 1', check_binary, [300])
21 tester.addTester('imagem 2', check_binary, [400])
22 tester.addTester('imagem 3', check_binary, [500])

Página de Execução dos Testes

 1 # ------------------------
 2 # Funções a serem testadas
 3 # ------------------------
 4 def binarize(image, t=100):
 5     return image > t
 6 
 7 def binarize2(image, t=100):
 8     return image + t
 9 
10 # -------------------
11 # Registra cada teste
12 # -------------------
13 # def addTest(author, fun_descr, fun, args=[], kwargs={}, postproc=[])
14 
15 tester.addTest('rubens', 'binarize 100',  binarize)
16 tester.addTest('rubens', 'binarize2 100', binarize2)
17 
18 tester.addTest('rubens', 'binarize 150',  binarize, args=[150])
19 tester.addTest('rubens', 'binarize 180',  binarize, kwargs=dict(t=180))
20 tester.addTest('rubens', 'binarize 190',  binarize, [], dict(t=190), [lambda x,y: ['ERROR', 'OK'][y]])
21 tester.addTest('rubens', 'binarize2 290', binarize2, pprocs=[lambda x,y: True])
22 
23 # -----------------
24 # Executa os testes
25 # -----------------
26 vet_result = tester.runTests()

gravando arquivo: /home/rubens/www/media/Attachments/iaLPR/iaperftest/testperf.pkl

Autor Funcao imagem 1   imagem 2   imagem 3  
rubens binarize 100 5.537 ms True 1.745 ms True 1.795 ms True
rubens binarize2 100 1.638 ms False 1.553 ms False 1.534 ms False
rubens binarize 150 1.588 ms True 1.574 ms True 1.57 ms True
rubens binarize 180 1.582 ms True 1.56 ms True 1.554 ms True
rubens binarize 190 1.559 ms OK 1.551 ms OK 1.543 ms OK
rubens binarize2 290 1.498 ms True 1.505 ms True 1.482 ms True