Describe the bug
After upgrading to coverage >= 5,
coverage run outputs this error message for a Cython pxd file with certain conditions I describe below:
Can't add file tracer data for unmeasured file '/home/kai/tst/cy/kai.pxd'
Then coverage report fails with this error:
Couldn't parse '/home/kai/tst/cy/kai.pyx' as Python source: 'invalid syntax' at line 1
To Reproduce
- What version of coverage.py are you using? The output of
coverage debug sys is helpful.
-- sys -------------------------------------------------------
version: 5.1
coverage: /home/kai/tst/lib64/python3.7/site-packages/coverage/__init__.py
tracer: -none-
CTracer: available
plugins.file_tracers: Cython.Coverage.Plugin
plugins.configurers: -none-
plugins.context_switchers: -none-
configs_attempted: .coveragerc
setup.cfg
configs_read: /home/kai/tst/setup.cfg
config_file: /home/kai/tst/setup.cfg
config_contents: '[coverage:run]\n# http://blog.behnel.de/posts/coverage-analysis-for-cython-modules.html\nplugins = Cython.Coverage\n'
data_file: -none-
python: 3.7.6 (default, Feb 26 2020, 20:54:15) [GCC 7.3.1 20180712 (Red Hat 7.3.1-6)]
platform: Linux-4.19.76-linuxkit-x86_64-with-glibc2.2.5
implementation: CPython
executable: /home/kai/tst/bin/python3
def_encoding: utf-8
fs_encoding: utf-8
pid: 9474
cwd: /home/kai/tst
path: /home/kai/tst/bin
/usr/lib64/python37.zip
/usr/lib64/python3.7
/usr/lib64/python3.7/lib-dynload
/home/kai/tst/lib64/python3.7/site-packages
/home/kai/tst/lib/python3.7/site-packages
environment: -none-
command_line: /home/kai/tst/bin/coverage debug sys
sqlite3_version: 2.6.0
sqlite3_sqlite_version: 3.7.17
sqlite3_temp_store: 0
sqlite3_compile_options: DISABLE_DIRSYNC
ENABLE_COLUMN_METADATA
ENABLE_FTS3
ENABLE_RTREE
ENABLE_UNLOCK_NOTIFY
SECURE_DELETE
TEMP_STORE=1
THREADSAFE=1
- What versions of what packages do you have installed? The output of
pip freeze is helpful.
coverage==5.1
Cython==0.29.16
Tested with coverage 4.5.4 (OK), 5.0.4 (fail), 5.1 (fail)
- What code are you running? Give us a specific commit of a specific repo that we can check out.
cy/__init__.pxd (empty file)
cy/kai.pxd
cdef class Kai:
cdef readonly bint x
cpdef bint get_x(self)
cy/kai.pyx
cdef class Kai:
def __init__(self):
self.x = False
cpdef bint get_x(self):
return self.x
cy/setup.py
from Cython.Build import cythonize
from distutils.core import setup
from distutils.extension import Extension
define_macros = [('CYTHON_TRACE', '1')]
compiler_directives = {'always_allow_keywords': True, 'profile': True, 'linetrace': True}
extensions = [
Extension('cy.kai', ['cy/kai.pyx'], define_macros=define_macros),
]
setup(ext_modules=cythonize(extensions, nthreads=4, annotate=True, language_level="3", compiler_directives=compiler_directives))
runner.py
from cy import kai
k = kai.Kai()
print(k.get_x())
print(k.x)
- What commands did you run?
$ python3 cy/setup.py build_ext --inplace
$ coverage run runner.py
$ coverage report
Expected behavior
Coverage statistics for pyx and pxd files
Additional context
The problem manifests itself only when
- coverage >= 5
public or readonly members are in .pxd file, separate from .pyx file, and
- runner.py actually accesses the members directly
My understanding is readonly and public modifiers make Cython define wrapper functions for them transparently. coverage >= 5 seem to play badly with them.
Describe the bug
After upgrading to coverage >= 5,
coverage runoutputs this error message for a Cython pxd file with certain conditions I describe below:Then
coverage reportfails with this error:To Reproduce
coverage debug sysis helpful.pip freezeis helpful.Tested with coverage 4.5.4 (OK), 5.0.4 (fail), 5.1 (fail)
cy/__init__.pxd(empty file)cy/kai.pxd
cy/kai.pyx
cy/setup.py
runner.py
Expected behavior
Coverage statistics for pyx and pxd files
Additional context
The problem manifests itself only when
publicorreadonlymembers are in.pxdfile, separate from.pyxfile, andMy understanding is
readonlyandpublicmodifiers make Cython define wrapper functions for them transparently. coverage >= 5 seem to play badly with them.