Repository URL to install this package:
|
Version:
0.36.2 ▾
|
import cProfile as profiler
import os
import pstats
import subprocess
import sys
import numpy as np
from numba import jit
from numba import unittest_support as unittest
from .test_linalg import needs_blas
def dot(a, b):
sum = 0
for i in range(len(a)):
sum += a[i]*b[i]
return sum
def np_dot(a, b):
return np.dot(a, b)
class TestProfiler(unittest.TestCase):
def check_profiler_dot(self, pyfunc):
"""
Make sure the jit-compiled function shows up in the profile stats
as a regular Python function.
"""
a = np.arange(16, dtype=np.float32)
b = np.arange(16, dtype=np.float32)
cfunc = jit(nopython=True)(pyfunc)
# Warm up JIT
cfunc(a, b)
p = profiler.Profile()
p.enable()
try:
cfunc(a, b)
finally:
p.disable()
stats = pstats.Stats(p).strip_dirs()
code = pyfunc.__code__
expected_key = (os.path.basename(code.co_filename),
code.co_firstlineno,
code.co_name,
)
self.assertIn(expected_key, stats.stats)
def test_profiler(self):
self.check_profiler_dot(dot)
@needs_blas
def test_profiler_np_dot(self):
# Issue #1786: initializing BLAS would crash when profiling
code = """if 1:
import cProfile as profiler
import numpy as np
from numba import jit
from numba.tests.test_profiler import np_dot
cfunc = jit(nopython=True)(np_dot)
a = np.arange(16, dtype=np.float32)
b = np.arange(16, dtype=np.float32)
p = profiler.Profile()
p.enable()
cfunc(a, b)
cfunc(a, b)
p.disable()
"""
subprocess.check_call([sys.executable, "-c", code])
if __name__ == '__main__':
unittest.main()