getappmap / getappmap/appmap-python

matplotlib tests fail, expecting their decorator to be outermost

未關閉
#331 1 則留言 0 個 reaction 已指派 0 人 在 GitHub 檢視

還沒有人認領這個 Issue。

bug
主要語言
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()

貢獻指南

開啟貢獻指南

從這裡開始

  1. 先讀完整個 Issue,再讀專案的貢獻指南。
  2. 在 Issue 下留言說明你要接手 —— 這能避免兩個人做同樣的事。
  3. Fork 儲存庫,在一個分支上完成修改。
  4. 送出 Pull Request,並在描述裡引用這個 Issue 編號。

研究方向

使用 appmap-python pytest -vv 重現失敗,接著檢查 _appmap/importer.py_appmap/instrument.py 中的插樁路徑,以及所示的 Matplotlib 位置:lib/matplotlib/pyplot.pylib/matplotlib/testing/decorators.pylib/matplotlib/_api/deprecation.py。當重現的 Matplotlib 測試不再因為 decorator 順序或包裝後的簽名無效而失敗時,即表示完成。

由索引模型根據 Issue 內容生成。

評估

技術堆疊
python
領域
testing-qa, tooling
Issue 類型
缺陷
難度
4/5
預估耗時
3-5 天
活躍度
停滯
描述清晰度
基本清楚
新手友好度
35/100

把新 issue 寄到你的電子郵件信箱

精選適合新手參與的 GitHub issue 摘要。