getappmap / getappmap/appmap-python
matplotlib tests fail, expecting their decorator to be outermost
还没有人认领这个 Issue。
- 主要语言
- Python
- 星标
- 104
- 派生
- 17
- PR 合并指标
- 30 天内没有已合并 PR
描述
In the 3.5 version of this project: https://github.com/matplotlib/matplotlib
Revision de98877e3dc45de8dd441d008f23d88738dc015d
Create venv
pip install -r requirements/dev/dev-requirements.txt
pip install -r requirements/testing/all.txt
pip install pytest-xdist pytest appmap
pytest -vv
(most tests will pass)
run appmap-python pytest -vv - all tests will fail.
They all fail with the same error. Here is a single test example.
appmap-python pytest -n8 -vv lib/matplotlib/tests/test_type1font.py::test_Type1Font INT ✘ 3.9.19 matplotlib 17:12:42
=========================================================================================== test session starts ===========================================================================================
platform darwin -- Python 3.9.19, pytest-8.2.1, pluggy-1.5.0 -- /Users/petecheslock/repos/matplotlib/venv/bin/python
cachedir: .pytest_cache
rootdir: /Users/petecheslock/repos/matplotlib
configfile: pytest.ini
plugins: cov-5.0.0, xvfb-3.0.0, rerunfailures-14.0, appmap-2.0.4, timeout-2.3.1, xdist-3.6.1
8 workers [1 item]
scheduling tests via LoadScheduling
lib/matplotlib/tests/test_type1font.py::test_Type1Font
[gw0] [100%] ERROR lib/matplotlib/tests/test_type1font.py::test_Type1Font
================================================================================================= ERRORS ==================================================================================================
____________________________________________________________________________________ ERROR at setup of test_Type1Font _____________________________________________________________________________________
[gw0] darwin -- Python 3.9.19 /Users/petecheslock/repos/matplotlib/venv/bin/python
request = <SubRequest 'mpl_test_settings' for <Function test_Type1Font>>
@pytest.fixture(autouse=True)
def mpl_test_settings(request):
> from matplotlib.testing.decorators import _cleanup_cm
lib/matplotlib/testing/conftest.py:40:
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
venv/lib/python3.9/site-packages/_appmap/wrapt/wrappers.py:613: in __call__
return self._self_wrapper(self.__wrapped__, instance,
venv/lib/python3.9/site-packages/_appmap/importer.py:235: in wrapped_exec_module
exec_module(*args, **kwargs)
lib/matplotlib/testing/decorators.py:17: in <module>
from matplotlib import (_api, _pylab_helpers, cbook, ft2font, pyplot as plt,
venv/lib/python3.9/site-packages/_appmap/wrapt/wrappers.py:613: in __call__
return self._self_wrapper(self.__wrapped__, instance,
venv/lib/python3.9/site-packages/_appmap/importer.py:235: in wrapped_exec_module
exec_module(*args, **kwargs)
lib/matplotlib/pyplot.py:2603: in <module>
def imshow(
lib/matplotlib/pyplot.py:105: in _copy_docstring_and_deprecators
func = decorator(func)
venv/lib/python3.9/site-packages/_appmap/wrapt/wrappers.py:622: in __call__
return self._self_wrapper(self.__wrapped__, self._self_instance,
venv/lib/python3.9/site-packages/_appmap/instrument.py:131: in instrumented_fn
return call_instrumented(f, instance, args, kwargs)
venv/lib/python3.9/site-packages/_appmap/instrument.py:82: in call_instrumented
return f.fn(*args, **kwargs)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
since = '3.5', name = 'aspect', func = <function imshow at 0x1537dcca0>
def make_keyword_only(since, name, func=None):
"""
Decorator indicating that passing parameter *name* (or any of the following
ones) positionally to *func* is being deprecated.
When used on a method that has a pyplot wrapper, this should be the
outermost decorator, so that :file:`boilerplate.py` can access the original
signature.
"""
decorator = functools.partial(make_keyword_only, since, name)
if func is None:
return decorator
signature = inspect.signature(func)
POK = inspect.Parameter.POSITIONAL_OR_KEYWORD
KWO = inspect.Parameter.KEYWORD_ONLY
> assert (name in signature.parameters
and signature.parameters[name].kind == POK), (
f"Matplotlib internal error: {name!r} must be a positional-or-keyword "
f"parameter for {func.__name__}()")
E AssertionError: Matplotlib internal error: 'aspect' must be a positional-or-keyword parameter for imshow()
lib/matplotlib/_api/deprecation.py:434: AssertionError
========================================================================================= short test summary info =========================================================================================
ERROR lib/matplotlib/tests/test_type1font.py::test_Type1Font - AssertionError: Matplotlib internal error: 'aspect' must be a positional-or-keyword parameter for imshow()
贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
调研方向
使用 appmap-python pytest -vv 重现失败,然后检查 _appmap/importer.py 和 _appmap/instrument.py 中的插桩路径,以及所示的 Matplotlib 位置:lib/matplotlib/pyplot.py、lib/matplotlib/testing/decorators.py 和 lib/matplotlib/_api/deprecation.py。当重现的 Matplotlib 测试不再因为 decorator 顺序或包装后的签名无效而失败时,即表示完成。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- python
- 领域
- testing-qa, tooling
- Issue 类型
- 缺陷
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 活跃度
- 停滞
- 描述清晰度
- 基本清楚
- 新手友好度
- 35/100