getappmap / getappmap/appmap-python

matplotlib tests fail, expecting their decorator to be outermost

Open
#331 1 comment 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug
Dominant language
Python
Stars
104
Forks
17
PR merge metrics
No merged PRs in 30d

Description

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()

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Reproduce the failure with appmap-python pytest -vv, then inspect the instrumentation path in _appmap/importer.py and _appmap/instrument.py alongside the Matplotlib locations shown: lib/matplotlib/pyplot.py, lib/matplotlib/testing/decorators.py, and lib/matplotlib/_api/deprecation.py. Done means the reproduced Matplotlib test no longer fails because the decorator order or wrapped signature is invalid.

Written by the indexing model from the issue text.

Assessment

Tech stack
python
Domain
testing-qa, tooling
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.