Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

matplotlib tests fail, expecting their decorator to be outermost #331

Open
petecheslock opened this issue May 29, 2024 · 1 comment
Open
Labels
bug Something isn't working

Comments

@petecheslock
Copy link
Contributor

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()
@apotterri
Copy link
Contributor

A clue to this failure here might well be described in the comment:

        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.

If the function it's checking has been instrumented, make_keyword_only won't be the outermost decorator, the wrapt wrapper the agent applies will be.

@apotterri apotterri assigned apotterri and unassigned zermelo-wisen Jul 30, 2024
@apotterri apotterri changed the title Test failures in matplotlib project for all tests matplotlib tests fail, expecting their decorator to be outermost Jul 30, 2024
@apotterri apotterri added the bug Something isn't working label Jul 30, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

3 participants