Blame tests/run/line_profile_test.srctree

Packit Service 99d393
PYTHON setup.py build_ext --inplace
Packit Service 99d393
PYTHON test_profile.py
Packit Service 99d393
Packit Service 99d393
######## setup.py ###########
Packit Service 99d393
Packit Service 99d393
from distutils.extension import Extension
Packit Service 99d393
from distutils.core import setup
Packit Service 99d393
from Cython.Build import cythonize
Packit Service 99d393
Packit Service 99d393
extensions = [
Packit Service 99d393
    Extension("collatz", ["collatz.pyx"], define_macros=[('CYTHON_TRACE', '1')])
Packit Service 99d393
]
Packit Service 99d393
Packit Service 99d393
setup(
Packit Service 99d393
    ext_modules = cythonize(extensions)
Packit Service 99d393
)
Packit Service 99d393
Packit Service 99d393
######## test_profile.py ###########
Packit Service 99d393
Packit Service 99d393
try:
Packit Service 99d393
    import line_profiler
Packit Service 99d393
except ImportError:
Packit Service 99d393
    print("No line profiler, skipping test.")
Packit Service 99d393
    import sys
Packit Service 99d393
    sys.exit(0)
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
def assert_stats(profile, name):
Packit Service 99d393
    profile.print_stats()
Packit Service 99d393
    stats = profile.get_stats()
Packit Service 99d393
    assert len(stats.timings) > 0, "No profile stats."
Packit Service 99d393
    for key, timings in stats.timings.items():
Packit Service 99d393
        if key[-1] == name:
Packit Service 99d393
            assert len(timings) > 0
Packit Service 99d393
            break
Packit Service 99d393
    else:
Packit Service 99d393
        raise ValueError("No stats for %s." % name)
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
from collatz import collatz
Packit Service 99d393
func = collatz
Packit Service 99d393
profile = line_profiler.LineProfiler(func)
Packit Service 99d393
profile.runcall(func, 19)
Packit Service 99d393
assert_stats(profile, func.__name__)
Packit Service 99d393
Packit Service 99d393
from collatz import cp_collatz
Packit Service 99d393
func = cp_collatz
Packit Service 99d393
profile = line_profiler.LineProfiler(func)
Packit Service 99d393
profile.runcall(func, 19)
Packit Service 99d393
assert_stats(profile, func.__name__)
Packit Service 99d393
Packit Service 99d393
from collatz import run_generator, cy_generator
Packit Service 99d393
func = cy_generator
Packit Service 99d393
profile = line_profiler.LineProfiler(func)
Packit Service 99d393
profile.runcall(run_generator, 19)
Packit Service 99d393
assert_stats(profile, func.__name__)
Packit Service 99d393
Packit Service 99d393
from collatz import run_coro, cy_coro
Packit Service 99d393
func = cy_coro
Packit Service 99d393
profile = line_profiler.LineProfiler(func)
Packit Service 99d393
profile.runcall(run_coro, 19)
Packit Service 99d393
assert_stats(profile, func.__name__)
Packit Service 99d393
Packit Service 99d393
from collatz import PyClass
Packit Service 99d393
obj = PyClass()
Packit Service 99d393
func = obj.py_pymethod
Packit Service 99d393
profile = line_profiler.LineProfiler(func)
Packit Service 99d393
profile.runcall(func)
Packit Service 99d393
assert_stats(profile, func.__name__)
Packit Service 99d393
Packit Service 99d393
from collatz import CClass
Packit Service 99d393
obj = CClass()
Packit Service 99d393
func = obj.c_pymethod
Packit Service 99d393
profile = line_profiler.LineProfiler(func)
Packit Service 99d393
profile.runcall(func)
Packit Service 99d393
assert_stats(profile, func.__name__)
Packit Service 99d393
Packit Service 99d393
func = obj.cp_pymethod
Packit Service 99d393
profile = line_profiler.LineProfiler(func)
Packit Service 99d393
profile.runcall(func, 19)
Packit Service 99d393
assert_stats(profile, func.__name__)
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
######## collatz.pyx ###########
Packit Service 99d393
# cython: linetrace=True
Packit Service 99d393
Packit Service 99d393
cimport cython
Packit Service 99d393
Packit Service 99d393
@cython.binding(True)
Packit Service 99d393
def collatz(n):
Packit Service 99d393
    while n > 1:
Packit Service 99d393
        if n % 2 == 0:
Packit Service 99d393
            n //= 2
Packit Service 99d393
        else:
Packit Service 99d393
            n = 3*n+1
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
@cython.binding(True)
Packit Service 99d393
cpdef cp_collatz(n):
Packit Service 99d393
    while n > 1:
Packit Service 99d393
        if n % 2 == 0:
Packit Service 99d393
            n //= 2
Packit Service 99d393
        else:
Packit Service 99d393
            n = 3*n+1
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
@cython.binding(True)
Packit Service 99d393
def cy_generator(int n):
Packit Service 99d393
   x = 1
Packit Service 99d393
   for i in range(n):
Packit Service 99d393
       yield x + 2
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
@cython.binding(True)
Packit Service 99d393
def run_generator(n):
Packit Service 99d393
    assert len(list(cy_generator(n))) == n
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
@cython.binding(True)
Packit Service 99d393
async def cy_coro(int n):
Packit Service 99d393
    while n > 1:
Packit Service 99d393
        if n % 2 == 0:
Packit Service 99d393
            n //= 2
Packit Service 99d393
        else:
Packit Service 99d393
            n = 3*n+1
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
@cython.binding(True)
Packit Service 99d393
def run_coro(n):
Packit Service 99d393
    coro = cy_coro(n)
Packit Service 99d393
    try:
Packit Service 99d393
        coro.send(None)
Packit Service 99d393
    except StopIteration:
Packit Service 99d393
        assert True
Packit Service 99d393
    else:
Packit Service 99d393
        assert False, "Coroutine did not raise"
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
@cython.binding(True)
Packit Service 99d393
class PyClass(object):
Packit Service 99d393
    def py_pymethod(self):
Packit Service 99d393
        x = 1
Packit Service 99d393
        for i in range(10):
Packit Service 99d393
            a = x + 2
Packit Service 99d393
        return a * 3
Packit Service 99d393
Packit Service 99d393
Packit Service 99d393
@cython.binding(True)
Packit Service 99d393
cdef class CClass:
Packit Service 99d393
    def c_pymethod(self, c=2):
Packit Service 99d393
        for i in range(10):
Packit Service 99d393
            a = c + 1
Packit Service 99d393
        y = self.cmethod(c + a)
Packit Service 99d393
        return y * 4
Packit Service 99d393
Packit Service 99d393
    cpdef cp_pymethod(self, r):
Packit Service 99d393
        for i in range(10):
Packit Service 99d393
            a = r + 1
Packit Service 99d393
        z = self.c_pymethod(a) + self.cmethod(r)
Packit Service 99d393
        return z * 2
Packit Service 99d393
Packit Service 99d393
    cdef cmethod(self, s):
Packit Service 99d393
        for i in range(10):
Packit Service 99d393
            p = s + 3
Packit Service 99d393
        return p * 5