Skip to content

matplotlib 3.3.0 debian amd64: tests errors #11324

Description

@sandrotosi

Hello,
i'm reporting here the errors produced by the test suite when running on debian amd64:

python 2.7.15:

=================================== FAILURES ===================================
_____________________________ test_log_scales[png] _____________________________

self = <CallInfo when='call' exception: Image sizes do not match expected size: (600, 800, 3) actual size (600, 800, 4)>
func = <function <lambda> at 0x7f13fab3e410>, when = 'call'

    def __init__(self, func, when):
        #: context of invocation: one of "setup", "call",
        #: "teardown", "memocollect"
        self.when = when
        self.start = time()
        try:
>           self.result = func()

/usr/lib/python2.7/dist-packages/_pytest/runner.py:189: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   return CallInfo(lambda: ihook(item=item, **kwds), when=when)

/usr/lib/python2.7/dist-packages/_pytest/runner.py:175: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <_HookCaller 'pytest_runtest_call'>, args = ()
kwargs = {'item': <Function 'test_log_scales[png]'>}, notincall = set([])

    def __call__(self, *args, **kwargs):
        if args:
            raise TypeError("hook calling supports only keyword arguments")
        assert not self.is_historic()
        if self.argnames:
            notincall = set(self.argnames) - set(['__multicall__']) - set(
                kwargs.keys())
            if notincall:
                warnings.warn(
                    "Argument(s) {} which are declared in the hookspec "
                    "can not be found in this hook call"
                    .format(tuple(notincall)),
                    stacklevel=2,
                )
>       return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)

/usr/lib/python2.7/dist-packages/pluggy/__init__.py:617: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <_pytest.config.PytestPluginManager object at 0x7f140b120f50>
hook = <_HookCaller 'pytest_runtest_call'>
methods = [<pluggy.HookImpl object at 0x7f140a075a10>, <pluggy.HookImpl object at 0x7f1409fb5ad0>, <pluggy.HookImpl object at 0x7f1409fc27d0>]
kwargs = {'item': <Function 'test_log_scales[png]'>}

    def _hookexec(self, hook, methods, kwargs):
        # called from all hookcaller instances.
        # enable_tracing will set its own wrapping function at self._inner_hookexec
>       return self._inner_hookexec(hook, methods, kwargs)

/usr/lib/python2.7/dist-packages/pluggy/__init__.py:222: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

hook = <_HookCaller 'pytest_runtest_call'>
methods = [<pluggy.HookImpl object at 0x7f140a075a10>, <pluggy.HookImpl object at 0x7f1409fb5ad0>, <pluggy.HookImpl object at 0x7f1409fc27d0>]
kwargs = {'item': <Function 'test_log_scales[png]'>}

    self._inner_hookexec = lambda hook, methods, kwargs: \
        hook.multicall(
            methods, kwargs,
>           firstresult=hook.spec_opts.get('firstresult'),
        )

/usr/lib/python2.7/dist-packages/pluggy/__init__.py:216: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

item = <Function 'test_log_scales[png]'>

    def pytest_runtest_call(item):
        _update_current_test_var(item, 'call')
        try:
>           item.runtest()

/usr/lib/python2.7/dist-packages/_pytest/runner.py:106: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <Function 'test_log_scales[png]'>

    def runtest(self):
        """ execute the underlying test function. """
>       self.ihook.pytest_pyfunc_call(pyfuncitem=self)

/usr/lib/python2.7/dist-packages/_pytest/python.py:1171: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <_HookCaller 'pytest_pyfunc_call'>, args = ()
kwargs = {'pyfuncitem': <Function 'test_log_scales[png]'>}, notincall = set([])

    def __call__(self, *args, **kwargs):
        if args:
            raise TypeError("hook calling supports only keyword arguments")
        assert not self.is_historic()
        if self.argnames:
            notincall = set(self.argnames) - set(['__multicall__']) - set(
                kwargs.keys())
            if notincall:
                warnings.warn(
                    "Argument(s) {} which are declared in the hookspec "
                    "can not be found in this hook call"
                    .format(tuple(notincall)),
                    stacklevel=2,
                )
>       return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)

/usr/lib/python2.7/dist-packages/pluggy/__init__.py:617: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <_pytest.config.PytestPluginManager object at 0x7f140b120f50>
hook = <_HookCaller 'pytest_pyfunc_call'>
methods = [<pluggy.HookImpl object at 0x7f140a086090>, <pluggy.HookImpl object at 0x7f140a028090>]
kwargs = {'pyfuncitem': <Function 'test_log_scales[png]'>}

    def _hookexec(self, hook, methods, kwargs):
        # called from all hookcaller instances.
        # enable_tracing will set its own wrapping function at self._inner_hookexec
>       return self._inner_hookexec(hook, methods, kwargs)

/usr/lib/python2.7/dist-packages/pluggy/__init__.py:222: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

hook = <_HookCaller 'pytest_pyfunc_call'>
methods = [<pluggy.HookImpl object at 0x7f140a086090>, <pluggy.HookImpl object at 0x7f140a028090>]
kwargs = {'pyfuncitem': <Function 'test_log_scales[png]'>}

    self._inner_hookexec = lambda hook, methods, kwargs: \
        hook.multicall(
            methods, kwargs,
>           firstresult=hook.spec_opts.get('firstresult'),
        )

/usr/lib/python2.7/dist-packages/pluggy/__init__.py:216: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

pyfuncitem = <Function 'test_log_scales[png]'>

    @hookimpl(trylast=True)
    def pytest_pyfunc_call(pyfuncitem):
        testfunction = pyfuncitem.obj
        if pyfuncitem._isyieldedfunction():
            testfunction(*pyfuncitem._args)
        else:
            funcargs = pyfuncitem.funcargs
            testargs = {}
            for arg in pyfuncitem._fixtureinfo.argnames:
                testargs[arg] = funcargs[arg]
>           testfunction(**testargs)

/usr/lib/python2.7/dist-packages/_pytest/python.py:147: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

expected = '/build/matplotlib-2.2.2/result_images/test_axes/log_scales-expected.png'
actual = '/build/matplotlib-2.2.2/result_images/test_axes/log_scales.png'
tol = 0.306, in_decorator = True

    def compare_images(expected, actual, tol, in_decorator=False):
        """
        Compare two "image" files checking differences within a tolerance.
    
        The two given filenames may point to files which are convertible to
        PNG via the `.converter` dictionary. The underlying RMS is calculated
        with the `.calculate_rms` function.
    
        Parameters
        ----------
        expected : str
            The filename of the expected image.
        actual :str
            The filename of the actual image.
        tol : float
            The tolerance (a color value difference, where 255 is the
            maximal difference).  The test fails if the average pixel
            difference is greater than this value.
        in_decorator : bool
            If called from image_comparison decorator, this should be
            True. (default=False)
    
        Examples
        --------
        img1 = "./baseline/plot.png"
        img2 = "./output/plot.png"
        compare_images( img1, img2, 0.001 ):
    
        """
        if not os.path.exists(actual):
            raise Exception("Output image %s does not exist." % actual)
    
        if os.stat(actual).st_size == 0:
            raise Exception("Output image file %s is empty." % actual)
    
        # Convert the image to png
        extension = expected.split('.')[-1]
    
        if not os.path.exists(expected):
            raise IOError('Baseline image %r does not exist.' % expected)
    
        if extension != 'png':
            actual = convert(actual, False)
            expected = convert(expected, True)
    
        # open the image files and remove the alpha channel (if it exists)
        expectedImage = _png.read_png_int(expected)
        actualImage = _png.read_png_int(actual)
        expectedImage = expectedImage[:, :, :3]
        actualImage = actualImage[:, :, :3]
    
        actualImage, expectedImage = crop_to_same(
            actual, actualImage, expected, expectedImage)
    
        diff_image = make_test_filename(actual, 'failed-diff')
    
        if tol <= 0.0:
            if np.array_equal(expectedImage, actualImage):
                return None
    
        # convert to signed integers, so that the images can be subtracted without
        # overflow
        expectedImage = expectedImage.astype(np.int16)
        actualImage = actualImage.astype(np.int16)
    
        rms = calculate_rms(expectedImage, actualImage)
    
        if rms <= tol:
            return None
    
>       save_diff_image(expected, actual, diff_image)

build/lib.linux-x86_64-2.7/matplotlib/testing/compare.py:444: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

expected = '/build/matplotlib-2.2.2/result_images/test_axes/log_scales-expected.png'
actual = '/build/matplotlib-2.2.2/result_images/test_axes/log_scales.png'
output = '/build/matplotlib-2.2.2/result_images/test_axes/log_scales-failed-diff.png'

    def save_diff_image(expected, actual, output):
        expectedImage = _png.read_png(expected)
        actualImage = _png.read_png(actual)
        actualImage, expectedImage = crop_to_same(
            actual, actualImage, expected, expectedImage)
        expectedImage = np.array(expectedImage).astype(float)
        actualImage = np.array(actualImage).astype(float)
        if expectedImage.shape != actualImage.shape:
            raise ImageComparisonFailure(
                "Image sizes do not match expected size: {0} "
>               "actual size {1}".format(expectedImage.shape, actualImage.shape))
E           ImageComparisonFailure: Image sizes do not match expected size: (600, 800, 3) actual size (600, 800, 4)

build/lib.linux-x86_64-2.7/matplotlib/testing/compare.py:471: ImageComparisonFailure
__________________ test_bbox_inches_tight_suptile_legend[png] __________________

self = <CallInfo when='call' exception: Image sizes do not match expected size: (593, 921, 3) actual size (592, 921, 3)>
func = <function <lambda> at 0x7f13f9af5ed8>, when = 'call'

    def __init__(self, func, when):
        #: context of invocation: one of "setup", "call",
        #: "teardown", "memocollect"
        self.when = when
        self.start = time()
        try:
>           self.result = func()

/usr/lib/python2.7/dist-packages/_pytest/runner.py:189: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   return CallInfo(lambda: ihook(item=item, **kwds), when=when)

/usr/lib/python2.7/dist-packages/_pytest/runner.py:175: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <_HookCaller 'pytest_runtest_call'>, args = ()
kwargs = {'item': <Function 'test_bbox_inches_tight_suptile_legend[png]'>}
notincall = set([])

    def __call__(self, *args, **kwargs):
        if args:
            raise TypeError("hook calling supports only keyword arguments")
        assert not self.is_historic()
        if self.argnames:
            notincall = set(self.argnames) - set(['__multicall__']) - set(
                kwargs.keys())
            if notincall:
                warnings.warn(
                    "Argument(s) {} which are declared in the hookspec "
                    "can not be found in this hook call"
                    .format(tuple(notincall)),
                    stacklevel=2,
                )
>       return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)

/usr/lib/python2.7/dist-packages/pluggy/__init__.py:617: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <_pytest.config.PytestPluginManager object at 0x7f140b120f50>
hook = <_HookCaller 'pytest_runtest_call'>
methods = [<pluggy.HookImpl object at 0x7f140a075a10>, <pluggy.HookImpl object at 0x7f1409fb5ad0>, <pluggy.HookImpl object at 0x7f1409fc27d0>]
kwargs = {'item': <Function 'test_bbox_inches_tight_suptile_legend[png]'>}

    def _hookexec(self, hook, methods, kwargs):
        # called from all hookcaller instances.
        # enable_tracing will set its own wrapping function at self._inner_hookexec
>       return self._inner_hookexec(hook, methods, kwargs)

/usr/lib/python2.7/dist-packages/pluggy/__init__.py:222: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

hook = <_HookCaller 'pytest_runtest_call'>
methods = [<pluggy.HookImpl object at 0x7f140a075a10>, <pluggy.HookImpl object at 0x7f1409fb5ad0>, <pluggy.HookImpl object at 0x7f1409fc27d0>]
kwargs = {'item': <Function 'test_bbox_inches_tight_suptile_legend[png]'>}

    self._inner_hookexec = lambda hook, methods, kwargs: \
        hook.multicall(
            methods, kwargs,
>           firstresult=hook.spec_opts.get('firstresult'),
        )

/usr/lib/python2.7/dist-packages/pluggy/__init__.py:216: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

item = <Function 'test_bbox_inches_tight_suptile_legend[png]'>

    def pytest_runtest_call(item):
        _update_current_test_var(item, 'call')
        try:
>           item.runtest()

/usr/lib/python2.7/dist-packages/_pytest/runner.py:106: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <Function 'test_bbox_inches_tight_suptile_legend[png]'>

    def runtest(self):
        """ execute the underlying test function. """
>       self.ihook.pytest_pyfunc_call(pyfuncitem=self)

/usr/lib/python2.7/dist-packages/_pytest/python.py:1171: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <_HookCaller 'pytest_pyfunc_call'>, args = ()
kwargs = {'pyfuncitem': <Function 'test_bbox_inches_tight_suptile_legend[png]'>}
notincall = set([])

    def __call__(self, *args, **kwargs):
        if args:
            raise TypeError("hook calling supports only keyword arguments")
        assert not self.is_historic()
        if self.argnames:
            notincall = set(self.argnames) - set(['__multicall__']) - set(
                kwargs.keys())
            if notincall:
                warnings.warn(
                    "Argument(s) {} which are declared in the hookspec "
                    "can not be found in this hook call"
                    .format(tuple(notincall)),
                    stacklevel=2,
                )
>       return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)

/usr/lib/python2.7/dist-packages/pluggy/__init__.py:617: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <_pytest.config.PytestPluginManager object at 0x7f140b120f50>
hook = <_HookCaller 'pytest_pyfunc_call'>
methods = [<pluggy.HookImpl object at 0x7f140a086090>, <pluggy.HookImpl object at 0x7f140a028090>]
kwargs = {'pyfuncitem': <Function 'test_bbox_inches_tight_suptile_legend[png]'>}

    def _hookexec(self, hook, methods, kwargs):
        # called from all hookcaller instances.
        # enable_tracing will set its own wrapping function at self._inner_hookexec
>       return self._inner_hookexec(hook, methods, kwargs)

/usr/lib/python2.7/dist-packages/pluggy/__init__.py:222: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

hook = <_HookCaller 'pytest_pyfunc_call'>
methods = [<pluggy.HookImpl object at 0x7f140a086090>, <pluggy.HookImpl object at 0x7f140a028090>]
kwargs = {'pyfuncitem': <Function 'test_bbox_inches_tight_suptile_legend[png]'>}

    self._inner_hookexec = lambda hook, methods, kwargs: \
        hook.multicall(
            methods, kwargs,
>           firstresult=hook.spec_opts.get('firstresult'),
        )

/usr/lib/python2.7/dist-packages/pluggy/__init__.py:216: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

pyfuncitem = <Function 'test_bbox_inches_tight_suptile_legend[png]'>

    @hookimpl(trylast=True)
    def pytest_pyfunc_call(pyfuncitem):
        testfunction = pyfuncitem.obj
        if pyfuncitem._isyieldedfunction():
            testfunction(*pyfuncitem._args)
        else:
            funcargs = pyfuncitem.funcargs
            testargs = {}
            for arg in pyfuncitem._fixtureinfo.argnames:
                testargs[arg] = funcargs[arg]
>           testfunction(**testargs)

/usr/lib/python2.7/dist-packages/_pytest/python.py:147: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

expected = '/build/matplotlib-2.2.2/result_images/test_bbox_tight/bbox_inches_tight_suptile_legend-expected.png'
actual = '/build/matplotlib-2.2.2/result_images/test_bbox_tight/bbox_inches_tight_suptile_legend.png'
tol = 0.306, in_decorator = True

    def compare_images(expected, actual, tol, in_decorator=False):
        """
        Compare two "image" files checking differences within a tolerance.
    
        The two given filenames may point to files which are convertible to
        PNG via the `.converter` dictionary. The underlying RMS is calculated
        with the `.calculate_rms` function.
    
        Parameters
        ----------
        expected : str
            The filename of the expected image.
        actual :str
            The filename of the actual image.
        tol : float
            The tolerance (a color value difference, where 255 is the
            maximal difference).  The test fails if the average pixel
            difference is greater than this value.
        in_decorator : bool
            If called from image_comparison decorator, this should be
            True. (default=False)
    
        Examples
        --------
        img1 = "./baseline/plot.png"
        img2 = "./output/plot.png"
        compare_images( img1, img2, 0.001 ):
    
        """
        if not os.path.exists(actual):
            raise Exception("Output image %s does not exist." % actual)
    
        if os.stat(actual).st_size == 0:
            raise Exception("Output image file %s is empty." % actual)
    
        # Convert the image to png
        extension = expected.split('.')[-1]
    
        if not os.path.exists(expected):
            raise IOError('Baseline image %r does not exist.' % expected)
    
        if extension != 'png':
            actual = convert(actual, False)
            expected = convert(expected, True)
    
        # open the image files and remove the alpha channel (if it exists)
        expectedImage = _png.read_png_int(expected)
        actualImage = _png.read_png_int(actual)
        expectedImage = expectedImage[:, :, :3]
        actualImage = actualImage[:, :, :3]
    
        actualImage, expectedImage = crop_to_same(
            actual, actualImage, expected, expectedImage)
    
        diff_image = make_test_filename(actual, 'failed-diff')
    
        if tol <= 0.0:
            if np.array_equal(expectedImage, actualImage):
                return None
    
        # convert to signed integers, so that the images can be subtracted without
        # overflow
        expectedImage = expectedImage.astype(np.int16)
        actualImage = actualImage.astype(np.int16)
    
>       rms = calculate_rms(expectedImage, actualImage)

build/lib.linux-x86_64-2.7/matplotlib/testing/compare.py:439: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

expectedImage = array([[[255, 255, 255],
        [255, 255, 255],
        [255, 255, 255],
   ...55, 255, 255],
        [255, 255, 255],
        [255, 255, 255]]], dtype=int16)
actualImage = array([[[255, 255, 255],
        [255, 255, 255],
        [255, 255, 255],
   ...55, 255, 255],
        [255, 255, 255],
        [255, 255, 255]]], dtype=int16)

    def calculate_rms(expectedImage, actualImage):
        "Calculate the per-pixel errors, then compute the root mean square error."
        if expectedImage.shape != actualImage.shape:
            raise ImageComparisonFailure(
                "Image sizes do not match expected size: {0} "
>               "actual size {1}".format(expectedImage.shape, actualImage.shape))
E           ImageComparisonFailure: Image sizes do not match expected size: (593, 921, 3) actual size (592, 921, 3)

build/lib.linux-x86_64-2.7/matplotlib/testing/compare.py:369: ImageComparisonFailure
__________________ test_nose_image_comparison[failing figure] __________________

self = <CallInfo when='call' exception: assert '...' == 'FFF'
  - ...
  + FFF>
func = <function <lambda> at 0x7f13fa2209b0>, when = 'call'

    def __init__(self, func, when):
        #: context of invocation: one of "setup", "call",
        #: "teardown", "memocollect"
        self.when = when
        self.start = time()
        try:
>           self.result = func()

/usr/lib/python2.7/dist-packages/_pytest/runner.py:189: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   return CallInfo(lambda: ihook(item=item, **kwds), when=when)

/usr/lib/python2.7/dist-packages/_pytest/runner.py:175: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <_HookCaller 'pytest_runtest_call'>, args = ()
kwargs = {'item': <Function 'test_nose_image_comparison[failing figure]'>}
notincall = set([])

    def __call__(self, *args, **kwargs):
        if args:
            raise TypeError("hook calling supports only keyword arguments")
        assert not self.is_historic()
        if self.argnames:
            notincall = set(self.argnames) - set(['__multicall__']) - set(
                kwargs.keys())
            if notincall:
                warnings.warn(
                    "Argument(s) {} which are declared in the hookspec "
                    "can not be found in this hook call"
                    .format(tuple(notincall)),
                    stacklevel=2,
                )
>       return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)

/usr/lib/python2.7/dist-packages/pluggy/__init__.py:617: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <_pytest.config.PytestPluginManager object at 0x7f140b120f50>
hook = <_HookCaller 'pytest_runtest_call'>
methods = [<pluggy.HookImpl object at 0x7f140a075a10>, <pluggy.HookImpl object at 0x7f1409fb5ad0>, <pluggy.HookImpl object at 0x7f1409fc27d0>]
kwargs = {'item': <Function 'test_nose_image_comparison[failing figure]'>}

    def _hookexec(self, hook, methods, kwargs):
        # called from all hookcaller instances.
        # enable_tracing will set its own wrapping function at self._inner_hookexec
>       return self._inner_hookexec(hook, methods, kwargs)

/usr/lib/python2.7/dist-packages/pluggy/__init__.py:222: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

hook = <_HookCaller 'pytest_runtest_call'>
methods = [<pluggy.HookImpl object at 0x7f140a075a10>, <pluggy.HookImpl object at 0x7f1409fb5ad0>, <pluggy.HookImpl object at 0x7f1409fc27d0>]
kwargs = {'item': <Function 'test_nose_image_comparison[failing figure]'>}

    self._inner_hookexec = lambda hook, methods, kwargs: \
        hook.multicall(
            methods, kwargs,
>           firstresult=hook.spec_opts.get('firstresult'),
        )

/usr/lib/python2.7/dist-packages/pluggy/__init__.py:216: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

item = <Function 'test_nose_image_comparison[failing figure]'>

    def pytest_runtest_call(item):
        _update_current_test_var(item, 'call')
        try:
>           item.runtest()

/usr/lib/python2.7/dist-packages/_pytest/runner.py:106: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <Function 'test_nose_image_comparison[failing figure]'>

    def runtest(self):
        """ execute the underlying test function. """
>       self.ihook.pytest_pyfunc_call(pyfuncitem=self)

/usr/lib/python2.7/dist-packages/_pytest/python.py:1171: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <_HookCaller 'pytest_pyfunc_call'>, args = ()
kwargs = {'pyfuncitem': <Function 'test_nose_image_comparison[failing figure]'>}
notincall = set([])

    def __call__(self, *args, **kwargs):
        if args:
            raise TypeError("hook calling supports only keyword arguments")
        assert not self.is_historic()
        if self.argnames:
            notincall = set(self.argnames) - set(['__multicall__']) - set(
                kwargs.keys())
            if notincall:
                warnings.warn(
                    "Argument(s) {} which are declared in the hookspec "
                    "can not be found in this hook call"
                    .format(tuple(notincall)),
                    stacklevel=2,
                )
>       return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)

/usr/lib/python2.7/dist-packages/pluggy/__init__.py:617: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <_pytest.config.PytestPluginManager object at 0x7f140b120f50>
hook = <_HookCaller 'pytest_pyfunc_call'>
methods = [<pluggy.HookImpl object at 0x7f140a086090>, <pluggy.HookImpl object at 0x7f140a028090>]
kwargs = {'pyfuncitem': <Function 'test_nose_image_comparison[failing figure]'>}

    def _hookexec(self, hook, methods, kwargs):
        # called from all hookcaller instances.
        # enable_tracing will set its own wrapping function at self._inner_hookexec
>       return self._inner_hookexec(hook, methods, kwargs)

/usr/lib/python2.7/dist-packages/pluggy/__init__.py:222: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

hook = <_HookCaller 'pytest_pyfunc_call'>
methods = [<pluggy.HookImpl object at 0x7f140a086090>, <pluggy.HookImpl object at 0x7f140a028090>]
kwargs = {'pyfuncitem': <Function 'test_nose_image_comparison[failing figure]'>}

    self._inner_hookexec = lambda hook, methods, kwargs: \
        hook.multicall(
            methods, kwargs,
>           firstresult=hook.spec_opts.get('firstresult'),
        )

/usr/lib/python2.7/dist-packages/pluggy/__init__.py:216: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

pyfuncitem = <Function 'test_nose_image_comparison[failing figure]'>

    @hookimpl(trylast=True)
    def pytest_pyfunc_call(pyfuncitem):
        testfunction = pyfuncitem.obj
        if pyfuncitem._isyieldedfunction():
            testfunction(*pyfuncitem._args)
        else:
            funcargs = pyfuncitem.funcargs
            testargs = {}
            for arg in pyfuncitem._fixtureinfo.argnames:
                testargs[arg] = funcargs[arg]
>           testfunction(**testargs)

/usr/lib/python2.7/dist-packages/_pytest/python.py:147: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

func = <function nosetest_simple_figure at 0x7f13fa4bc938>
kwargs = {'baseline_images': ['simple'], 'extensions': ['png', 'png', 'png']}
errors = []
failures = [(<class 'matplotlib.testing.exceptions.ImageComparisonFailure'>, 'images not close'), (<class 'matplotlib.testing.exc...onFailure'>, 'images not close'), (<class 'matplotlib.testing.exceptions.ImageComparisonFailure'>, 'images not close')]
dots = 'FFF'
monkeypatch = <_pytest.monkeypatch.MonkeyPatch instance at 0x7f13fb26e128>

    @pytest.mark.parametrize(
        'func, kwargs, errors, failures, dots',
        [
            (nosetest_empty, {'baseline_images': []}, [], [], ''),
            (nosetest_empty, {'baseline_images': ['foo']},
             [(AssertionError,
               'Test generated 0 images but there are 1 baseline images')],
             [],
             'E'),
            (nosetest_simple_figure,
             {'baseline_images': ['basn3p02'], 'extensions': ['png'],
              'remove_text': True},
             [],
             [(ImageComparisonFailure, 'Image sizes do not match expected size:')],
             'F'),
            (nosetest_simple_figure,
             {'baseline_images': ['simple']},
             [],
             [(ImageComparisonFailure, 'images not close')] * 3,
             'FFF'),
            (nosetest_simple_figure,
             {'baseline_images': ['simple'], 'remove_text': True},
             [],
             [],
             '...'),
            (nosetest_manual_text_removal,
             {'baseline_images': ['simple']},
             [],
             [],
             '...'),
        ],
        ids=[
            'empty',
            'extra baselines',
            'incorrect shape',
            'failing figure',
            'passing figure',
            'manual text removal',
        ])
    def test_nose_image_comparison(func, kwargs, errors, failures, dots,
                                   monkeypatch):
        nose = pytest.importorskip('nose')
        monkeypatch.setattr('matplotlib._called_from_pytest', False)
    
        class TestResultVerifier(nose.result.TextTestResult):
            def __init__(self, *args, **kwargs):
                super(TestResultVerifier, self).__init__(*args, **kwargs)
                self.error_count = 0
                self.failure_count = 0
    
            def addError(self, test, err):
                super(TestResultVerifier, self).addError(test, err)
    
                if self.error_count < len(errors):
                    assert err[0] is errors[self.error_count][0]
                    assert errors[self.error_count][1] in str(err[1])
                else:
                    raise err[1]
                self.error_count += 1
    
            def addFailure(self, test, err):
                super(TestResultVerifier, self).addFailure(test, err)
    
                assert self.failure_count < len(failures), err[1]
                assert err[0] is failures[self.failure_count][0]
                assert failures[self.failure_count][1] in str(err[1])
                self.failure_count += 1
    
        # Make sure that multiple extensions work, but don't require LaTeX or
        # Inkscape to do so.
        kwargs.setdefault('extensions', ['png', 'png', 'png'])
    
        func = image_comparison(**kwargs)(func)
        loader = nose.loader.TestLoader()
        suite = loader.loadTestsFromGenerator(
            func,
            'matplotlib.tests.test_compare_images')
        if six.PY2:
            output = io.BytesIO()
        else:
            output = io.StringIO()
        result = TestResultVerifier(stream=output, descriptions=True, verbosity=1)
        with warnings.catch_warnings():
            # Nose uses deprecated stuff; we don't care about it.
            warnings.simplefilter('ignore', DeprecationWarning)
            suite.run(result=result)
    
>       assert output.getvalue() == dots
E       AssertionError: assert '...' == 'FFF'
E         - ...
E         + FFF

build/lib.linux-x86_64-2.7/matplotlib/tests/test_compare_images.py:199: AssertionError
----------------------------- Captured stdout call -----------------------------
images not close (RMS 12.955):
	result_images/test_compare_images/simple.png
	result_images/test_compare_images/simple-expected.png 
images not close (RMS 12.955):
	result_images/test_compare_images/simple.png
	result_images/test_compare_images/simple-expected.png 
images not close (RMS 12.955):
	result_images/test_compare_images/simple.png
	result_images/test_compare_images/simple-expected.png 
------------------------------ Captured log call -------------------------------
importer.py                143 DEBUG    Add path /build/matplotlib-2.2.2
suite.py                   418 DEBUG    Create suite for <function generate at 0x7f13fb0b9398>
suite.py                   420 DEBUG    tests <function generate at 0x7f13fb0b9398> context <function nosetest_simple_figure at 0x7f13fa4bc938>
suite.py                   148 DEBUG    Context suite for <function generate at 0x7f13fb0b9398> (<function nosetest_simple_figure at 0x7f13fa4bc938>) (139723701656336)
suite.py                   481 DEBUG    suite <nose.suite.ContextSuite context=nosetest_simple_figure> has context nosetest_simple_figure
suite.py                   435 DEBUG    get ancestry <function nosetest_simple_figure at 0x7f13fa4bc938>
suite.py                   452 DEBUG     <function nosetest_simple_figure at 0x7f13fa4bc938> ancestors ['matplotlib', 'tests', 'test_compare_images']
util.py                    311 DEBUG    __import__ matplotlib.tests.test_compare_images
util.py                    320 DEBUG    resolve: ['tests', 'test_compare_images'], matplotlib.tests.test_compare_images, <module 'matplotlib' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7/matplotlib/__init__.py'>, <module 'matplotlib' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7/matplotlib/__init__.py'>
suite.py                   485 DEBUG    suite <nose.suite.ContextSuite context=nosetest_simple_figure> has ancestor matplotlib.tests.test_compare_images
suite.py                   452 DEBUG     <function nosetest_simple_figure at 0x7f13fa4bc938> ancestors ['matplotlib', 'tests']
util.py                    311 DEBUG    __import__ matplotlib.tests
util.py                    320 DEBUG    resolve: ['tests'], matplotlib.tests, <module 'matplotlib' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7/matplotlib/__init__.py'>, <module 'matplotlib' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7/matplotlib/__init__.py'>
suite.py                   485 DEBUG    suite <nose.suite.ContextSuite context=nosetest_simple_figure> has ancestor matplotlib.tests
suite.py                   452 DEBUG     <function nosetest_simple_figure at 0x7f13fa4bc938> ancestors ['matplotlib']
util.py                    311 DEBUG    __import__ matplotlib
util.py                    320 DEBUG    resolve: [], matplotlib, <module 'matplotlib' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7/matplotlib/__init__.py'>, <module 'matplotlib' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7/matplotlib/__init__.py'>
suite.py                   485 DEBUG    suite <nose.suite.ContextSuite context=nosetest_simple_figure> has ancestor matplotlib
suite.py                   201 DEBUG    suite 139723701656336 (<nose.suite.ContextSuite context=nosetest_simple_figure>) run called, tests: <generator object _get_wrapped_tests at 0x7f13f9f8eaf0>
suite.py                   269 DEBUG    suite 139723701656336 setUp called, tests: <generator object _get_wrapped_tests at 0x7f13fa3ce4b0>
suite.py                    79 DEBUG    tests in 139723701656336?
suite.py                   288 DEBUG    ancestor <module 'matplotlib' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7/matplotlib/__init__.py'> may need setup
suite.py                   291 DEBUG    ancestor <module 'matplotlib' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7/matplotlib/__init__.py'> does need setup
suite.py                   302 DEBUG    <nose.suite.ContextSuite context=nosetest_simple_figure> setup context <module 'matplotlib' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7/matplotlib/__init__.py'>
suite.py                   288 DEBUG    ancestor <module 'matplotlib.tests' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7/matplotlib/tests/__init__.py'> may need setup
suite.py                   291 DEBUG    ancestor <module 'matplotlib.tests' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7/matplotlib/tests/__init__.py'> does need setup
suite.py                   302 DEBUG    <nose.suite.ContextSuite context=nosetest_simple_figure> setup context <module 'matplotlib.tests' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7/matplotlib/tests/__init__.py'>
util.py                    470 DEBUG    call fixture <module 'matplotlib.tests' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7/matplotlib/tests/__init__.py'>.setup
suite.py                   288 DEBUG    ancestor <module 'matplotlib.tests.test_compare_images' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7/matplotlib/tests/test_compare_images.py'> may need setup
suite.py                   291 DEBUG    ancestor <module 'matplotlib.tests.test_compare_images' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7/matplotlib/tests/test_compare_images.py'> does need setup
suite.py                   302 DEBUG    <nose.suite.ContextSuite context=nosetest_simple_figure> setup context <module 'matplotlib.tests.test_compare_images' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7/matplotlib/tests/test_compare_images.py'>
suite.py                   288 DEBUG    ancestor <function nosetest_simple_figure at 0x7f13fa4bc938> may need setup
suite.py                   291 DEBUG    ancestor <function nosetest_simple_figure at 0x7f13fa4bc938> does need setup
suite.py                   302 DEBUG    <nose.suite.ContextSuite context=nosetest_simple_figure> setup context <function nosetest_simple_figure at 0x7f13fa4bc938>
util.py                    470 DEBUG    call fixture <function nosetest_simple_figure at 0x7f13fa4bc938>.setup
suite.py                   298 DEBUG    completed suite setup
suite.py                    94 DEBUG    precache is [matplotlib.tests.test_compare_images.nosetest_simple_figure(0, 'simple', 'png')]
suite.py                   323 DEBUG    context teardown
suite.py                   341 DEBUG    ancestor <function nosetest_simple_figure at 0x7f13fa4bc938> may need teardown
suite.py                   349 DEBUG    <nose.suite.ContextSuite context=nosetest_simple_figure> setup ancestor <function nosetest_simple_figure at 0x7f13fa4bc938>
suite.py                   356 DEBUG    <nose.suite.ContextSuite context=nosetest_simple_figure> teardown context <function nosetest_simple_figure at 0x7f13fa4bc938>
util.py                    470 DEBUG    call fixture <function nosetest_simple_figure at 0x7f13fa4bc938>.teardown
suite.py                   341 DEBUG    ancestor <module 'matplotlib.tests.test_compare_images' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7/matplotlib/tests/test_compare_images.py'> may need teardown
suite.py                   349 DEBUG    <nose.suite.ContextSuite context=nosetest_simple_figure> setup ancestor <module 'matplotlib.tests.test_compare_images' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7/matplotlib/tests/test_compare_images.py'>
suite.py                   356 DEBUG    <nose.suite.ContextSuite context=nosetest_simple_figure> teardown context <module 'matplotlib.tests.test_compare_images' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7/matplotlib/tests/test_compare_images.py'>
suite.py                   341 DEBUG    ancestor <module 'matplotlib.tests' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7/matplotlib/tests/__init__.py'> may need teardown
suite.py                   349 DEBUG    <nose.suite.ContextSuite context=nosetest_simple_figure> setup ancestor <module 'matplotlib.tests' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7/matplotlib/tests/__init__.py'>
suite.py                   356 DEBUG    <nose.suite.ContextSuite context=nosetest_simple_figure> teardown context <module 'matplotlib.tests' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7/matplotlib/tests/__init__.py'>
suite.py                   341 DEBUG    ancestor <module 'matplotlib' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7/matplotlib/__init__.py'> may need teardown
suite.py                   349 DEBUG    <nose.suite.ContextSuite context=nosetest_simple_figure> setup ancestor <module 'matplotlib' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7/matplotlib/__init__.py'>
suite.py                   356 DEBUG    <nose.suite.ContextSuite context=nosetest_simple_figure> teardown context <module 'matplotlib' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7/matplotlib/__init__.py'>
suite.py                   341 DEBUG    ancestor <function nosetest_simple_figure at 0x7f13fa4bc938> may need teardown
suite.py                   346 DEBUG    ancestor <function nosetest_simple_figure at 0x7f13fa4bc938> already torn down
=============================== warnings summary ===============================
build/lib.linux-x86_64-2.7/matplotlib/tests/test_axes.py::test_fill_units[png]
  /build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7/matplotlib/axes/_base.py:2504: RuntimeWarning: invalid value encountered in double_scalars
    delta = (x1t - x0t) * margin

build/lib.linux-x86_64-2.7/matplotlib/tests/test_axes.py::test_pyplot_axes
  /build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7/matplotlib/cbook/deprecation.py:107: MatplotlibDeprecationWarning: Using pyplot.axes(ax) with ax an Axes argument is deprecated. Please use pyplot.sca(ax) instead.
    warnings.warn(message, mplDeprecation, stacklevel=1)

build/lib.linux-x86_64-2.7/matplotlib/tests/test_image.py::test_empty_imshow[make_norm2]
  /build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7/matplotlib/colors.py:1133: RuntimeWarning: invalid value encountered in greater
    masked = np.abs(a) > self.linthresh

build/lib.linux-x86_64-2.7/matplotlib/tests/test_image.py::test_full_invalid
  /build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7/matplotlib/image.py:405: UserWarning: Warning: converting a masked element to nan.
    dv = (np.float64(self.norm.vmax) -
  /build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7/matplotlib/image.py:406: UserWarning: Warning: converting a masked element to nan.
    np.float64(self.norm.vmin))
  /build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7/matplotlib/image.py:412: UserWarning: Warning: converting a masked element to nan.
    a_min = np.float64(newmin)
  /build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7/matplotlib/image.py:417: UserWarning: Warning: converting a masked element to nan.
    a_max = np.float64(newmax)
  /build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7/matplotlib/colors.py:916: UserWarning: Warning: converting a masked element to nan.
    dtype = np.min_scalar_type(value)
  /usr/lib/python2.7/dist-packages/numpy/ma/core.py:716: UserWarning: Warning: converting a masked element to nan.
    data = np.array(a, copy=False, subok=subok)

-- Docs: http://doc.pytest.org/en/latest/warnings.html

python 2.7.15 debug flavor:

=================================== FAILURES ===================================
_______________ test_save_animation_smoketest[pillow-movie.gif] ________________

self = <CallInfo when='call' exception: list index out of range>
func = <function <lambda> at 0x7f4fd42b1e28>, when = 'call'

    def __init__(self, func, when):
        #: context of invocation: one of "setup", "call",
        #: "teardown", "memocollect"
        self.when = when
        self.start = time()
        try:
>           self.result = func()

/usr/lib/python2.7/dist-packages/_pytest/runner.py:189: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   return CallInfo(lambda: ihook(item=item, **kwds), when=when)

/usr/lib/python2.7/dist-packages/_pytest/runner.py:175: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <_HookCaller 'pytest_runtest_call'>, args = ()
kwargs = {'item': <Function 'test_save_animation_smoketest[pillow-movie.gif]'>}
notincall = set([])

    def __call__(self, *args, **kwargs):
        if args:
            raise TypeError("hook calling supports only keyword arguments")
        assert not self.is_historic()
        if self.argnames:
            notincall = set(self.argnames) - set(['__multicall__']) - set(
                kwargs.keys())
            if notincall:
                warnings.warn(
                    "Argument(s) {} which are declared in the hookspec "
                    "can not be found in this hook call"
                    .format(tuple(notincall)),
                    stacklevel=2,
                )
>       return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)

/usr/lib/python2.7/dist-packages/pluggy/__init__.py:617: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <_pytest.config.PytestPluginManager object at 0x7f4fdcda3b50>
hook = <_HookCaller 'pytest_runtest_call'>
methods = [<pluggy.HookImpl object at 0x7f4fdba3a370>, <pluggy.HookImpl object at 0x7f4fdb93c530>, <pluggy.HookImpl object at 0x7f4fdb944bc0>]
kwargs = {'item': <Function 'test_save_animation_smoketest[pillow-movie.gif]'>}

    def _hookexec(self, hook, methods, kwargs):
        # called from all hookcaller instances.
        # enable_tracing will set its own wrapping function at self._inner_hookexec
>       return self._inner_hookexec(hook, methods, kwargs)

/usr/lib/python2.7/dist-packages/pluggy/__init__.py:222: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

hook = <_HookCaller 'pytest_runtest_call'>
methods = [<pluggy.HookImpl object at 0x7f4fdba3a370>, <pluggy.HookImpl object at 0x7f4fdb93c530>, <pluggy.HookImpl object at 0x7f4fdb944bc0>]
kwargs = {'item': <Function 'test_save_animation_smoketest[pillow-movie.gif]'>}

    self._inner_hookexec = lambda hook, methods, kwargs: \
        hook.multicall(
            methods, kwargs,
>           firstresult=hook.spec_opts.get('firstresult'),
        )

/usr/lib/python2.7/dist-packages/pluggy/__init__.py:216: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

item = <Function 'test_save_animation_smoketest[pillow-movie.gif]'>

    def pytest_runtest_call(item):
        _update_current_test_var(item, 'call')
        try:
>           item.runtest()

/usr/lib/python2.7/dist-packages/_pytest/runner.py:106: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <Function 'test_save_animation_smoketest[pillow-movie.gif]'>

    def runtest(self):
        """ execute the underlying test function. """
>       self.ihook.pytest_pyfunc_call(pyfuncitem=self)

/usr/lib/python2.7/dist-packages/_pytest/python.py:1171: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <_HookCaller 'pytest_pyfunc_call'>, args = ()
kwargs = {'pyfuncitem': <Function 'test_save_animation_smoketest[pillow-movie.gif]'>}
notincall = set([])

    def __call__(self, *args, **kwargs):
        if args:
            raise TypeError("hook calling supports only keyword arguments")
        assert not self.is_historic()
        if self.argnames:
            notincall = set(self.argnames) - set(['__multicall__']) - set(
                kwargs.keys())
            if notincall:
                warnings.warn(
                    "Argument(s) {} which are declared in the hookspec "
                    "can not be found in this hook call"
                    .format(tuple(notincall)),
                    stacklevel=2,
                )
>       return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)

/usr/lib/python2.7/dist-packages/pluggy/__init__.py:617: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <_pytest.config.PytestPluginManager object at 0x7f4fdcda3b50>
hook = <_HookCaller 'pytest_pyfunc_call'>
methods = [<pluggy.HookImpl object at 0x7f4fdba3ae60>, <pluggy.HookImpl object at 0x7f4fdb9f7290>]
kwargs = {'pyfuncitem': <Function 'test_save_animation_smoketest[pillow-movie.gif]'>}

    def _hookexec(self, hook, methods, kwargs):
        # called from all hookcaller instances.
        # enable_tracing will set its own wrapping function at self._inner_hookexec
>       return self._inner_hookexec(hook, methods, kwargs)

/usr/lib/python2.7/dist-packages/pluggy/__init__.py:222: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

hook = <_HookCaller 'pytest_pyfunc_call'>
methods = [<pluggy.HookImpl object at 0x7f4fdba3ae60>, <pluggy.HookImpl object at 0x7f4fdb9f7290>]
kwargs = {'pyfuncitem': <Function 'test_save_animation_smoketest[pillow-movie.gif]'>}

    self._inner_hookexec = lambda hook, methods, kwargs: \
        hook.multicall(
            methods, kwargs,
>           firstresult=hook.spec_opts.get('firstresult'),
        )

/usr/lib/python2.7/dist-packages/pluggy/__init__.py:216: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

pyfuncitem = <Function 'test_save_animation_smoketest[pillow-movie.gif]'>

    @hookimpl(trylast=True)
    def pytest_pyfunc_call(pyfuncitem):
        testfunction = pyfuncitem.obj
        if pyfuncitem._isyieldedfunction():
            testfunction(*pyfuncitem._args)
        else:
            funcargs = pyfuncitem.funcargs
            testargs = {}
            for arg in pyfuncitem._fixtureinfo.argnames:
                testargs[arg] = funcargs[arg]
>           testfunction(**testargs)

/usr/lib/python2.7/dist-packages/_pytest/python.py:147: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

tmpdir = local('/tmp/pytest-of-pbuilder/pytest-1/test_save_animation_smoketest_6')
writer = 'pillow', output = 'movie.gif'

    @pytest.mark.parametrize('writer, output', WRITER_OUTPUT)
    def test_save_animation_smoketest(tmpdir, writer, output):
        try:
            # for ImageMagick the rcparams must be patched to account for
            # 'convert' being a built in MS tool, not the imagemagick
            # tool.
            writer._init_from_registry()
        except AttributeError:
            pass
        if not animation.writers.is_available(writer):
            pytest.skip("writer '%s' not available on this system" % writer)
        fig, ax = plt.subplots()
        line, = ax.plot([], [])
    
        ax.set_xlim(0, 10)
        ax.set_ylim(-1, 1)
    
        dpi = None
        codec = None
        if writer == 'ffmpeg':
            # Issue #8253
            fig.set_size_inches((10.85, 9.21))
            dpi = 100.
            codec = 'h264'
    
        def init():
            line.set_data([], [])
            return line,
    
        def animate(i):
            x = np.linspace(0, 10, 100)
            y = np.sin(x + i)
            line.set_data(x, y)
            return line,
    
        # Use temporary directory for the file-based writers, which produce a file
        # per frame with known names.
        with tmpdir.as_cwd():
            anim = animation.FuncAnimation(fig, animate, init_func=init, frames=5)
            try:
                anim.save(output, fps=30, writer=writer, bitrate=500, dpi=dpi,
>                         codec=codec)

build/lib.linux-x86_64-2.7-pydebug/matplotlib/tests/test_animation.py:174: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <matplotlib.animation.FuncAnimation object at 0x7f4fcf6047d0>
filename = 'movie.gif'
writer = <matplotlib.animation.PillowWriter object at 0x7f4fcf604b50>, fps = 30
dpi = 100.0, codec = 'mpeg4', bitrate = 500, extra_args = None, metadata = None
extra_anim = None, savefig_kwargs = {}

    def save(self, filename, writer=None, fps=None, dpi=None, codec=None,
             bitrate=None, extra_args=None, metadata=None, extra_anim=None,
             savefig_kwargs=None):
        '''Saves a movie file by drawing every frame.
    
            Parameters
            ----------
    
            filename : str
                The output filename, e.g., :file:`mymovie.mp4`.
    
            writer : :class:`MovieWriter` or str, optional
                A `MovieWriter` instance to use or a key that identifies a
                class to use, such as 'ffmpeg'. If ``None``, defaults to
                :rc:`animation.writer`.
    
            fps : number, optional
               Frames per second in the movie. Defaults to ``None``, which will use
               the animation's specified interval to set the frames per second.
    
            dpi : number, optional
               Controls the dots per inch for the movie frames.  This combined with
               the figure's size in inches controls the size of the movie.  If
               ``None``, defaults to :rc:`savefig.dpi`.
    
            codec : str, optional
               The video codec to be used. Not all codecs are supported
               by a given :class:`MovieWriter`. If ``None``, default to
               :rc:`animation.codec`.
    
            bitrate : number, optional
               Specifies the number of bits used per second in the compressed
               movie, in kilobits per second. A higher number means a higher
               quality movie, but at the cost of increased file size. If ``None``,
               defaults to :rc:`animation.bitrate`.
    
            extra_args : list, optional
               List of extra string arguments to be passed to the underlying movie
               utility. If ``None``, defaults to :rc:`animation.extra_args`.
    
            metadata : Dict[str, str], optional
               Dictionary of keys and values for metadata to include in
               the output file. Some keys that may be of use include:
               title, artist, genre, subject, copyright, srcform, comment.
    
            extra_anim : list, optional
               Additional `Animation` objects that should be included
               in the saved movie file. These need to be from the same
               `matplotlib.figure.Figure` instance. Also, animation frames will
               just be simply combined, so there should be a 1:1 correspondence
               between the frames from the different animations.
    
            savefig_kwargs : dict, optional
               Is a dictionary containing keyword arguments to be passed
               on to the `savefig` command which is called repeatedly to
               save the individual frames.
    
            Notes
            -----
            fps, codec, bitrate, extra_args, metadata are used to
            construct a :class:`MovieWriter` instance and can only be
            passed if `writer` is a string.  If they are passed as
            non-`None` and ``writer`` is a :class:`MovieWriter`, a
            `RuntimeError` will be raised.
    
            '''
        # If the writer is None, use the rc param to find the name of the one
        # to use
        if writer is None:
            writer = rcParams['animation.writer']
        elif (not isinstance(writer, six.string_types) and
                any(arg is not None
                    for arg in (fps, codec, bitrate, extra_args, metadata))):
            raise RuntimeError('Passing in values for arguments '
                               'fps, codec, bitrate, extra_args, or metadata '
                               'is not supported when writer is an existing '
                               'MovieWriter instance. These should instead be '
                               'passed as arguments when creating the '
                               'MovieWriter instance.')
    
        if savefig_kwargs is None:
            savefig_kwargs = {}
    
        # Need to disconnect the first draw callback, since we'll be doing
        # draws. Otherwise, we'll end up starting the animation.
        if self._first_draw_id is not None:
            self._fig.canvas.mpl_disconnect(self._first_draw_id)
            reconnect_first_draw = True
        else:
            reconnect_first_draw = False
    
        if fps is None and hasattr(self, '_interval'):
            # Convert interval in ms to frames per second
            fps = 1000. / self._interval
    
        # Re-use the savefig DPI for ours if none is given
        if dpi is None:
            dpi = rcParams['savefig.dpi']
        if dpi == 'figure':
            dpi = self._fig.dpi
    
        if codec is None:
            codec = rcParams['animation.codec']
    
        if bitrate is None:
            bitrate = rcParams['animation.bitrate']
    
        all_anim = [self]
        if extra_anim is not None:
            all_anim.extend(anim
                            for anim
                            in extra_anim if anim._fig is self._fig)
    
        # If we have the name of a writer, instantiate an instance of the
        # registered class.
        if isinstance(writer, six.string_types):
            if writer in writers.avail:
                writer = writers[writer](fps, codec, bitrate,
                                         extra_args=extra_args,
                                         metadata=metadata)
            else:
                _log.warning("MovieWriter %s unavailable.", writer)
    
                try:
                    writer = writers[writers.list()[0]](fps, codec, bitrate,
                                                        extra_args=extra_args,
                                                        metadata=metadata)
                except IndexError:
                    raise ValueError("Cannot save animation: no writers are "
                                     "available. Please install ffmpeg to "
                                     "save animations.")
        _log.info('Animation.save using %s', type(writer))
    
        if 'bbox_inches' in savefig_kwargs:
            _log.warning("Warning: discarding the 'bbox_inches' argument in "
                         "'savefig_kwargs' as it may cause frame size "
                         "to vary, which is inappropriate for animation.")
            savefig_kwargs.pop('bbox_inches')
    
        # Create a new sequence of frames for saved data. This is different
        # from new_frame_seq() to give the ability to save 'live' generated
        # frame information to be saved later.
        # TODO: Right now, after closing the figure, saving a movie won't work
        # since GUI widgets are gone. Either need to remove extra code to
        # allow for this non-existent use case or find a way to make it work.
        with rc_context():
            if rcParams['savefig.bbox'] == 'tight':
                _log.info("Disabling savefig.bbox = 'tight', as it may cause "
                          "frame size to vary, which is inappropriate for "
                          "animation.")
                rcParams['savefig.bbox'] = None
            with writer.saving(self._fig, filename, dpi):
                for anim in all_anim:
                    # Clear the initial frame
                    anim._init_draw()
                for data in zip(*[a.new_saved_frame_seq() for a in all_anim]):
                    for anim, d in zip(all_anim, data):
                        # TODO: See if turning off blit is really necessary
                        anim._draw_next_frame(d, blit=False)
>                   writer.grab_frame(**savefig_kwargs)

build/lib.linux-x86_64-2.7-pydebug/matplotlib/animation.py:1200: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <contextlib.GeneratorContextManager object at 0x7f4fcf604ca0>
type = <type 'exceptions.ImportError'>
value = ImportError('/usr/lib/python2.7/dist-packages/PIL/_imaging.x86_64-linux-gnu.so: undefined symbol: Py_InitModule4_64',)
traceback = <traceback object at 0x7f4fcf4b8588>

    def __exit__(self, type, value, traceback):
        if type is None:
            try:
                self.gen.next()
            except StopIteration:
                return
            else:
                raise RuntimeError("generator didn't stop")
        else:
            if value is None:
                # Need to force instantiation so we can reliably
                # tell if we get the same exception back
                value = type()
            try:
>               self.gen.throw(type, value, traceback)

/usr/lib/python2.7/contextlib.py:35: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <matplotlib.animation.PillowWriter object at 0x7f4fcf604b50>
fig = <Figure size 640x480 with 1 Axes>, outfile = 'movie.gif', dpi = 100.0
args = (), kwargs = {}

    @contextlib.contextmanager
    def saving(self, fig, outfile, dpi, *args, **kwargs):
        '''
            Context manager to facilitate writing the movie file.
    
            ``*args, **kw`` are any parameters that should be passed to `setup`.
            '''
        # This particular sequence is what contextlib.contextmanager wants
        self.setup(fig, outfile, dpi, *args, **kwargs)
        try:
            yield self
        finally:
>           self.finish()

build/lib.linux-x86_64-2.7-pydebug/matplotlib/animation.py:241: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <matplotlib.animation.PillowWriter object at 0x7f4fcf604b50>

    def finish(self):
>       self._frames[0].save(
            self._outfile, save_all=True, append_images=self._frames[1:],
            duration=int(1000 / self.fps))
E       IndexError: list index out of range

build/lib.linux-x86_64-2.7-pydebug/matplotlib/animation.py:610: IndexError
------------------------------ Captured log call -------------------------------
animation.py              1172 INFO     Animation.save using <class 'matplotlib.animation.PillowWriter'>
_____________________________ test_log_scales[png] _____________________________

self = <CallInfo when='call' exception: Image sizes do not match expected size: (600, 800, 3) actual size (600, 800, 4)>
func = <function <lambda> at 0x7f4fd446c258>, when = 'call'

    def __init__(self, func, when):
        #: context of invocation: one of "setup", "call",
        #: "teardown", "memocollect"
        self.when = when
        self.start = time()
        try:
>           self.result = func()

/usr/lib/python2.7/dist-packages/_pytest/runner.py:189: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   return CallInfo(lambda: ihook(item=item, **kwds), when=when)

/usr/lib/python2.7/dist-packages/_pytest/runner.py:175: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <_HookCaller 'pytest_runtest_call'>, args = ()
kwargs = {'item': <Function 'test_log_scales[png]'>}, notincall = set([])

    def __call__(self, *args, **kwargs):
        if args:
            raise TypeError("hook calling supports only keyword arguments")
        assert not self.is_historic()
        if self.argnames:
            notincall = set(self.argnames) - set(['__multicall__']) - set(
                kwargs.keys())
            if notincall:
                warnings.warn(
                    "Argument(s) {} which are declared in the hookspec "
                    "can not be found in this hook call"
                    .format(tuple(notincall)),
                    stacklevel=2,
                )
>       return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)

/usr/lib/python2.7/dist-packages/pluggy/__init__.py:617: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <_pytest.config.PytestPluginManager object at 0x7f4fdcda3b50>
hook = <_HookCaller 'pytest_runtest_call'>
methods = [<pluggy.HookImpl object at 0x7f4fdba3a370>, <pluggy.HookImpl object at 0x7f4fdb93c530>, <pluggy.HookImpl object at 0x7f4fdb944bc0>]
kwargs = {'item': <Function 'test_log_scales[png]'>}

    def _hookexec(self, hook, methods, kwargs):
        # called from all hookcaller instances.
        # enable_tracing will set its own wrapping function at self._inner_hookexec
>       return self._inner_hookexec(hook, methods, kwargs)

/usr/lib/python2.7/dist-packages/pluggy/__init__.py:222: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

hook = <_HookCaller 'pytest_runtest_call'>
methods = [<pluggy.HookImpl object at 0x7f4fdba3a370>, <pluggy.HookImpl object at 0x7f4fdb93c530>, <pluggy.HookImpl object at 0x7f4fdb944bc0>]
kwargs = {'item': <Function 'test_log_scales[png]'>}

    self._inner_hookexec = lambda hook, methods, kwargs: \
        hook.multicall(
            methods, kwargs,
>           firstresult=hook.spec_opts.get('firstresult'),
        )

/usr/lib/python2.7/dist-packages/pluggy/__init__.py:216: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

item = <Function 'test_log_scales[png]'>

    def pytest_runtest_call(item):
        _update_current_test_var(item, 'call')
        try:
>           item.runtest()

/usr/lib/python2.7/dist-packages/_pytest/runner.py:106: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <Function 'test_log_scales[png]'>

    def runtest(self):
        """ execute the underlying test function. """
>       self.ihook.pytest_pyfunc_call(pyfuncitem=self)

/usr/lib/python2.7/dist-packages/_pytest/python.py:1171: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <_HookCaller 'pytest_pyfunc_call'>, args = ()
kwargs = {'pyfuncitem': <Function 'test_log_scales[png]'>}, notincall = set([])

    def __call__(self, *args, **kwargs):
        if args:
            raise TypeError("hook calling supports only keyword arguments")
        assert not self.is_historic()
        if self.argnames:
            notincall = set(self.argnames) - set(['__multicall__']) - set(
                kwargs.keys())
            if notincall:
                warnings.warn(
                    "Argument(s) {} which are declared in the hookspec "
                    "can not be found in this hook call"
                    .format(tuple(notincall)),
                    stacklevel=2,
                )
>       return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)

/usr/lib/python2.7/dist-packages/pluggy/__init__.py:617: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <_pytest.config.PytestPluginManager object at 0x7f4fdcda3b50>
hook = <_HookCaller 'pytest_pyfunc_call'>
methods = [<pluggy.HookImpl object at 0x7f4fdba3ae60>, <pluggy.HookImpl object at 0x7f4fdb9f7290>]
kwargs = {'pyfuncitem': <Function 'test_log_scales[png]'>}

    def _hookexec(self, hook, methods, kwargs):
        # called from all hookcaller instances.
        # enable_tracing will set its own wrapping function at self._inner_hookexec
>       return self._inner_hookexec(hook, methods, kwargs)

/usr/lib/python2.7/dist-packages/pluggy/__init__.py:222: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

hook = <_HookCaller 'pytest_pyfunc_call'>
methods = [<pluggy.HookImpl object at 0x7f4fdba3ae60>, <pluggy.HookImpl object at 0x7f4fdb9f7290>]
kwargs = {'pyfuncitem': <Function 'test_log_scales[png]'>}

    self._inner_hookexec = lambda hook, methods, kwargs: \
        hook.multicall(
            methods, kwargs,
>           firstresult=hook.spec_opts.get('firstresult'),
        )

/usr/lib/python2.7/dist-packages/pluggy/__init__.py:216: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

pyfuncitem = <Function 'test_log_scales[png]'>

    @hookimpl(trylast=True)
    def pytest_pyfunc_call(pyfuncitem):
        testfunction = pyfuncitem.obj
        if pyfuncitem._isyieldedfunction():
            testfunction(*pyfuncitem._args)
        else:
            funcargs = pyfuncitem.funcargs
            testargs = {}
            for arg in pyfuncitem._fixtureinfo.argnames:
                testargs[arg] = funcargs[arg]
>           testfunction(**testargs)

/usr/lib/python2.7/dist-packages/_pytest/python.py:147: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

expected = '/build/matplotlib-2.2.2/result_images/test_axes/log_scales-expected.png'
actual = '/build/matplotlib-2.2.2/result_images/test_axes/log_scales.png'
tol = 0.306, in_decorator = True

    def compare_images(expected, actual, tol, in_decorator=False):
        """
        Compare two "image" files checking differences within a tolerance.
    
        The two given filenames may point to files which are convertible to
        PNG via the `.converter` dictionary. The underlying RMS is calculated
        with the `.calculate_rms` function.
    
        Parameters
        ----------
        expected : str
            The filename of the expected image.
        actual :str
            The filename of the actual image.
        tol : float
            The tolerance (a color value difference, where 255 is the
            maximal difference).  The test fails if the average pixel
            difference is greater than this value.
        in_decorator : bool
            If called from image_comparison decorator, this should be
            True. (default=False)
    
        Examples
        --------
        img1 = "./baseline/plot.png"
        img2 = "./output/plot.png"
        compare_images( img1, img2, 0.001 ):
    
        """
        if not os.path.exists(actual):
            raise Exception("Output image %s does not exist." % actual)
    
        if os.stat(actual).st_size == 0:
            raise Exception("Output image file %s is empty." % actual)
    
        # Convert the image to png
        extension = expected.split('.')[-1]
    
        if not os.path.exists(expected):
            raise IOError('Baseline image %r does not exist.' % expected)
    
        if extension != 'png':
            actual = convert(actual, False)
            expected = convert(expected, True)
    
        # open the image files and remove the alpha channel (if it exists)
        expectedImage = _png.read_png_int(expected)
        actualImage = _png.read_png_int(actual)
        expectedImage = expectedImage[:, :, :3]
        actualImage = actualImage[:, :, :3]
    
        actualImage, expectedImage = crop_to_same(
            actual, actualImage, expected, expectedImage)
    
        diff_image = make_test_filename(actual, 'failed-diff')
    
        if tol <= 0.0:
            if np.array_equal(expectedImage, actualImage):
                return None
    
        # convert to signed integers, so that the images can be subtracted without
        # overflow
        expectedImage = expectedImage.astype(np.int16)
        actualImage = actualImage.astype(np.int16)
    
        rms = calculate_rms(expectedImage, actualImage)
    
        if rms <= tol:
            return None
    
>       save_diff_image(expected, actual, diff_image)

build/lib.linux-x86_64-2.7-pydebug/matplotlib/testing/compare.py:444: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

expected = '/build/matplotlib-2.2.2/result_images/test_axes/log_scales-expected.png'
actual = '/build/matplotlib-2.2.2/result_images/test_axes/log_scales.png'
output = '/build/matplotlib-2.2.2/result_images/test_axes/log_scales-failed-diff.png'

    def save_diff_image(expected, actual, output):
        expectedImage = _png.read_png(expected)
        actualImage = _png.read_png(actual)
        actualImage, expectedImage = crop_to_same(
            actual, actualImage, expected, expectedImage)
        expectedImage = np.array(expectedImage).astype(float)
        actualImage = np.array(actualImage).astype(float)
        if expectedImage.shape != actualImage.shape:
            raise ImageComparisonFailure(
                "Image sizes do not match expected size: {0} "
>               "actual size {1}".format(expectedImage.shape, actualImage.shape))
E           ImageComparisonFailure: Image sizes do not match expected size: (600, 800, 3) actual size (600, 800, 4)

build/lib.linux-x86_64-2.7-pydebug/matplotlib/testing/compare.py:471: ImageComparisonFailure
__________________ test_bbox_inches_tight_suptile_legend[png] __________________

self = <CallInfo when='call' exception: Image sizes do not match expected size: (593, 921, 3) actual size (592, 921, 3)>
func = <function <lambda> at 0x7f4fd3bdf1b0>, when = 'call'

    def __init__(self, func, when):
        #: context of invocation: one of "setup", "call",
        #: "teardown", "memocollect"
        self.when = when
        self.start = time()
        try:
>           self.result = func()

/usr/lib/python2.7/dist-packages/_pytest/runner.py:189: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   return CallInfo(lambda: ihook(item=item, **kwds), when=when)

/usr/lib/python2.7/dist-packages/_pytest/runner.py:175: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <_HookCaller 'pytest_runtest_call'>, args = ()
kwargs = {'item': <Function 'test_bbox_inches_tight_suptile_legend[png]'>}
notincall = set([])

    def __call__(self, *args, **kwargs):
        if args:
            raise TypeError("hook calling supports only keyword arguments")
        assert not self.is_historic()
        if self.argnames:
            notincall = set(self.argnames) - set(['__multicall__']) - set(
                kwargs.keys())
            if notincall:
                warnings.warn(
                    "Argument(s) {} which are declared in the hookspec "
                    "can not be found in this hook call"
                    .format(tuple(notincall)),
                    stacklevel=2,
                )
>       return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)

/usr/lib/python2.7/dist-packages/pluggy/__init__.py:617: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <_pytest.config.PytestPluginManager object at 0x7f4fdcda3b50>
hook = <_HookCaller 'pytest_runtest_call'>
methods = [<pluggy.HookImpl object at 0x7f4fdba3a370>, <pluggy.HookImpl object at 0x7f4fdb93c530>, <pluggy.HookImpl object at 0x7f4fdb944bc0>]
kwargs = {'item': <Function 'test_bbox_inches_tight_suptile_legend[png]'>}

    def _hookexec(self, hook, methods, kwargs):
        # called from all hookcaller instances.
        # enable_tracing will set its own wrapping function at self._inner_hookexec
>       return self._inner_hookexec(hook, methods, kwargs)

/usr/lib/python2.7/dist-packages/pluggy/__init__.py:222: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

hook = <_HookCaller 'pytest_runtest_call'>
methods = [<pluggy.HookImpl object at 0x7f4fdba3a370>, <pluggy.HookImpl object at 0x7f4fdb93c530>, <pluggy.HookImpl object at 0x7f4fdb944bc0>]
kwargs = {'item': <Function 'test_bbox_inches_tight_suptile_legend[png]'>}

    self._inner_hookexec = lambda hook, methods, kwargs: \
        hook.multicall(
            methods, kwargs,
>           firstresult=hook.spec_opts.get('firstresult'),
        )

/usr/lib/python2.7/dist-packages/pluggy/__init__.py:216: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

item = <Function 'test_bbox_inches_tight_suptile_legend[png]'>

    def pytest_runtest_call(item):
        _update_current_test_var(item, 'call')
        try:
>           item.runtest()

/usr/lib/python2.7/dist-packages/_pytest/runner.py:106: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <Function 'test_bbox_inches_tight_suptile_legend[png]'>

    def runtest(self):
        """ execute the underlying test function. """
>       self.ihook.pytest_pyfunc_call(pyfuncitem=self)

/usr/lib/python2.7/dist-packages/_pytest/python.py:1171: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <_HookCaller 'pytest_pyfunc_call'>, args = ()
kwargs = {'pyfuncitem': <Function 'test_bbox_inches_tight_suptile_legend[png]'>}
notincall = set([])

    def __call__(self, *args, **kwargs):
        if args:
            raise TypeError("hook calling supports only keyword arguments")
        assert not self.is_historic()
        if self.argnames:
            notincall = set(self.argnames) - set(['__multicall__']) - set(
                kwargs.keys())
            if notincall:
                warnings.warn(
                    "Argument(s) {} which are declared in the hookspec "
                    "can not be found in this hook call"
                    .format(tuple(notincall)),
                    stacklevel=2,
                )
>       return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)

/usr/lib/python2.7/dist-packages/pluggy/__init__.py:617: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <_pytest.config.PytestPluginManager object at 0x7f4fdcda3b50>
hook = <_HookCaller 'pytest_pyfunc_call'>
methods = [<pluggy.HookImpl object at 0x7f4fdba3ae60>, <pluggy.HookImpl object at 0x7f4fdb9f7290>]
kwargs = {'pyfuncitem': <Function 'test_bbox_inches_tight_suptile_legend[png]'>}

    def _hookexec(self, hook, methods, kwargs):
        # called from all hookcaller instances.
        # enable_tracing will set its own wrapping function at self._inner_hookexec
>       return self._inner_hookexec(hook, methods, kwargs)

/usr/lib/python2.7/dist-packages/pluggy/__init__.py:222: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

hook = <_HookCaller 'pytest_pyfunc_call'>
methods = [<pluggy.HookImpl object at 0x7f4fdba3ae60>, <pluggy.HookImpl object at 0x7f4fdb9f7290>]
kwargs = {'pyfuncitem': <Function 'test_bbox_inches_tight_suptile_legend[png]'>}

    self._inner_hookexec = lambda hook, methods, kwargs: \
        hook.multicall(
            methods, kwargs,
>           firstresult=hook.spec_opts.get('firstresult'),
        )

/usr/lib/python2.7/dist-packages/pluggy/__init__.py:216: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

pyfuncitem = <Function 'test_bbox_inches_tight_suptile_legend[png]'>

    @hookimpl(trylast=True)
    def pytest_pyfunc_call(pyfuncitem):
        testfunction = pyfuncitem.obj
        if pyfuncitem._isyieldedfunction():
            testfunction(*pyfuncitem._args)
        else:
            funcargs = pyfuncitem.funcargs
            testargs = {}
            for arg in pyfuncitem._fixtureinfo.argnames:
                testargs[arg] = funcargs[arg]
>           testfunction(**testargs)

/usr/lib/python2.7/dist-packages/_pytest/python.py:147: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

expected = '/build/matplotlib-2.2.2/result_images/test_bbox_tight/bbox_inches_tight_suptile_legend-expected.png'
actual = '/build/matplotlib-2.2.2/result_images/test_bbox_tight/bbox_inches_tight_suptile_legend.png'
tol = 0.306, in_decorator = True

    def compare_images(expected, actual, tol, in_decorator=False):
        """
        Compare two "image" files checking differences within a tolerance.
    
        The two given filenames may point to files which are convertible to
        PNG via the `.converter` dictionary. The underlying RMS is calculated
        with the `.calculate_rms` function.
    
        Parameters
        ----------
        expected : str
            The filename of the expected image.
        actual :str
            The filename of the actual image.
        tol : float
            The tolerance (a color value difference, where 255 is the
            maximal difference).  The test fails if the average pixel
            difference is greater than this value.
        in_decorator : bool
            If called from image_comparison decorator, this should be
            True. (default=False)
    
        Examples
        --------
        img1 = "./baseline/plot.png"
        img2 = "./output/plot.png"
        compare_images( img1, img2, 0.001 ):
    
        """
        if not os.path.exists(actual):
            raise Exception("Output image %s does not exist." % actual)
    
        if os.stat(actual).st_size == 0:
            raise Exception("Output image file %s is empty." % actual)
    
        # Convert the image to png
        extension = expected.split('.')[-1]
    
        if not os.path.exists(expected):
            raise IOError('Baseline image %r does not exist.' % expected)
    
        if extension != 'png':
            actual = convert(actual, False)
            expected = convert(expected, True)
    
        # open the image files and remove the alpha channel (if it exists)
        expectedImage = _png.read_png_int(expected)
        actualImage = _png.read_png_int(actual)
        expectedImage = expectedImage[:, :, :3]
        actualImage = actualImage[:, :, :3]
    
        actualImage, expectedImage = crop_to_same(
            actual, actualImage, expected, expectedImage)
    
        diff_image = make_test_filename(actual, 'failed-diff')
    
        if tol <= 0.0:
            if np.array_equal(expectedImage, actualImage):
                return None
    
        # convert to signed integers, so that the images can be subtracted without
        # overflow
        expectedImage = expectedImage.astype(np.int16)
        actualImage = actualImage.astype(np.int16)
    
>       rms = calculate_rms(expectedImage, actualImage)

build/lib.linux-x86_64-2.7-pydebug/matplotlib/testing/compare.py:439: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

expectedImage = array([[[255, 255, 255],
        [255, 255, 255],
        [255, 255, 255],
   ...55, 255, 255],
        [255, 255, 255],
        [255, 255, 255]]], dtype=int16)
actualImage = array([[[255, 255, 255],
        [255, 255, 255],
        [255, 255, 255],
   ...55, 255, 255],
        [255, 255, 255],
        [255, 255, 255]]], dtype=int16)

    def calculate_rms(expectedImage, actualImage):
        "Calculate the per-pixel errors, then compute the root mean square error."
        if expectedImage.shape != actualImage.shape:
            raise ImageComparisonFailure(
                "Image sizes do not match expected size: {0} "
>               "actual size {1}".format(expectedImage.shape, actualImage.shape))
E           ImageComparisonFailure: Image sizes do not match expected size: (593, 921, 3) actual size (592, 921, 3)

build/lib.linux-x86_64-2.7-pydebug/matplotlib/testing/compare.py:369: ImageComparisonFailure
__________________ test_nose_image_comparison[failing figure] __________________

self = <CallInfo when='call' exception: assert '...' == 'FFF'
  - ...
  + FFF>
func = <function <lambda> at 0x7f4fd45b0a38>, when = 'call'

    def __init__(self, func, when):
        #: context of invocation: one of "setup", "call",
        #: "teardown", "memocollect"
        self.when = when
        self.start = time()
        try:
>           self.result = func()

/usr/lib/python2.7/dist-packages/_pytest/runner.py:189: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

>   return CallInfo(lambda: ihook(item=item, **kwds), when=when)

/usr/lib/python2.7/dist-packages/_pytest/runner.py:175: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <_HookCaller 'pytest_runtest_call'>, args = ()
kwargs = {'item': <Function 'test_nose_image_comparison[failing figure]'>}
notincall = set([])

    def __call__(self, *args, **kwargs):
        if args:
            raise TypeError("hook calling supports only keyword arguments")
        assert not self.is_historic()
        if self.argnames:
            notincall = set(self.argnames) - set(['__multicall__']) - set(
                kwargs.keys())
            if notincall:
                warnings.warn(
                    "Argument(s) {} which are declared in the hookspec "
                    "can not be found in this hook call"
                    .format(tuple(notincall)),
                    stacklevel=2,
                )
>       return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)

/usr/lib/python2.7/dist-packages/pluggy/__init__.py:617: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <_pytest.config.PytestPluginManager object at 0x7f4fdcda3b50>
hook = <_HookCaller 'pytest_runtest_call'>
methods = [<pluggy.HookImpl object at 0x7f4fdba3a370>, <pluggy.HookImpl object at 0x7f4fdb93c530>, <pluggy.HookImpl object at 0x7f4fdb944bc0>]
kwargs = {'item': <Function 'test_nose_image_comparison[failing figure]'>}

    def _hookexec(self, hook, methods, kwargs):
        # called from all hookcaller instances.
        # enable_tracing will set its own wrapping function at self._inner_hookexec
>       return self._inner_hookexec(hook, methods, kwargs)

/usr/lib/python2.7/dist-packages/pluggy/__init__.py:222: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

hook = <_HookCaller 'pytest_runtest_call'>
methods = [<pluggy.HookImpl object at 0x7f4fdba3a370>, <pluggy.HookImpl object at 0x7f4fdb93c530>, <pluggy.HookImpl object at 0x7f4fdb944bc0>]
kwargs = {'item': <Function 'test_nose_image_comparison[failing figure]'>}

    self._inner_hookexec = lambda hook, methods, kwargs: \
        hook.multicall(
            methods, kwargs,
>           firstresult=hook.spec_opts.get('firstresult'),
        )

/usr/lib/python2.7/dist-packages/pluggy/__init__.py:216: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

item = <Function 'test_nose_image_comparison[failing figure]'>

    def pytest_runtest_call(item):
        _update_current_test_var(item, 'call')
        try:
>           item.runtest()

/usr/lib/python2.7/dist-packages/_pytest/runner.py:106: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <Function 'test_nose_image_comparison[failing figure]'>

    def runtest(self):
        """ execute the underlying test function. """
>       self.ihook.pytest_pyfunc_call(pyfuncitem=self)

/usr/lib/python2.7/dist-packages/_pytest/python.py:1171: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <_HookCaller 'pytest_pyfunc_call'>, args = ()
kwargs = {'pyfuncitem': <Function 'test_nose_image_comparison[failing figure]'>}
notincall = set([])

    def __call__(self, *args, **kwargs):
        if args:
            raise TypeError("hook calling supports only keyword arguments")
        assert not self.is_historic()
        if self.argnames:
            notincall = set(self.argnames) - set(['__multicall__']) - set(
                kwargs.keys())
            if notincall:
                warnings.warn(
                    "Argument(s) {} which are declared in the hookspec "
                    "can not be found in this hook call"
                    .format(tuple(notincall)),
                    stacklevel=2,
                )
>       return self._hookexec(self, self._nonwrappers + self._wrappers, kwargs)

/usr/lib/python2.7/dist-packages/pluggy/__init__.py:617: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <_pytest.config.PytestPluginManager object at 0x7f4fdcda3b50>
hook = <_HookCaller 'pytest_pyfunc_call'>
methods = [<pluggy.HookImpl object at 0x7f4fdba3ae60>, <pluggy.HookImpl object at 0x7f4fdb9f7290>]
kwargs = {'pyfuncitem': <Function 'test_nose_image_comparison[failing figure]'>}

    def _hookexec(self, hook, methods, kwargs):
        # called from all hookcaller instances.
        # enable_tracing will set its own wrapping function at self._inner_hookexec
>       return self._inner_hookexec(hook, methods, kwargs)

/usr/lib/python2.7/dist-packages/pluggy/__init__.py:222: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

hook = <_HookCaller 'pytest_pyfunc_call'>
methods = [<pluggy.HookImpl object at 0x7f4fdba3ae60>, <pluggy.HookImpl object at 0x7f4fdb9f7290>]
kwargs = {'pyfuncitem': <Function 'test_nose_image_comparison[failing figure]'>}

    self._inner_hookexec = lambda hook, methods, kwargs: \
        hook.multicall(
            methods, kwargs,
>           firstresult=hook.spec_opts.get('firstresult'),
        )

/usr/lib/python2.7/dist-packages/pluggy/__init__.py:216: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

pyfuncitem = <Function 'test_nose_image_comparison[failing figure]'>

    @hookimpl(trylast=True)
    def pytest_pyfunc_call(pyfuncitem):
        testfunction = pyfuncitem.obj
        if pyfuncitem._isyieldedfunction():
            testfunction(*pyfuncitem._args)
        else:
            funcargs = pyfuncitem.funcargs
            testargs = {}
            for arg in pyfuncitem._fixtureinfo.argnames:
                testargs[arg] = funcargs[arg]
>           testfunction(**testargs)

/usr/lib/python2.7/dist-packages/_pytest/python.py:147: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

func = <function nosetest_simple_figure at 0x7f4fd4d83ae0>
kwargs = {'baseline_images': ['simple'], 'extensions': ['png', 'png', 'png']}
errors = []
failures = [(<class 'matplotlib.testing.exceptions.ImageComparisonFailure'>, 'images not close'), (<class 'matplotlib.testing.exc...onFailure'>, 'images not close'), (<class 'matplotlib.testing.exceptions.ImageComparisonFailure'>, 'images not close')]
dots = 'FFF'
monkeypatch = <_pytest.monkeypatch.MonkeyPatch instance at 0x7f4fd5651420>

    @pytest.mark.parametrize(
        'func, kwargs, errors, failures, dots',
        [
            (nosetest_empty, {'baseline_images': []}, [], [], ''),
            (nosetest_empty, {'baseline_images': ['foo']},
             [(AssertionError,
               'Test generated 0 images but there are 1 baseline images')],
             [],
             'E'),
            (nosetest_simple_figure,
             {'baseline_images': ['basn3p02'], 'extensions': ['png'],
              'remove_text': True},
             [],
             [(ImageComparisonFailure, 'Image sizes do not match expected size:')],
             'F'),
            (nosetest_simple_figure,
             {'baseline_images': ['simple']},
             [],
             [(ImageComparisonFailure, 'images not close')] * 3,
             'FFF'),
            (nosetest_simple_figure,
             {'baseline_images': ['simple'], 'remove_text': True},
             [],
             [],
             '...'),
            (nosetest_manual_text_removal,
             {'baseline_images': ['simple']},
             [],
             [],
             '...'),
        ],
        ids=[
            'empty',
            'extra baselines',
            'incorrect shape',
            'failing figure',
            'passing figure',
            'manual text removal',
        ])
    def test_nose_image_comparison(func, kwargs, errors, failures, dots,
                                   monkeypatch):
        nose = pytest.importorskip('nose')
        monkeypatch.setattr('matplotlib._called_from_pytest', False)
    
        class TestResultVerifier(nose.result.TextTestResult):
            def __init__(self, *args, **kwargs):
                super(TestResultVerifier, self).__init__(*args, **kwargs)
                self.error_count = 0
                self.failure_count = 0
    
            def addError(self, test, err):
                super(TestResultVerifier, self).addError(test, err)
    
                if self.error_count < len(errors):
                    assert err[0] is errors[self.error_count][0]
                    assert errors[self.error_count][1] in str(err[1])
                else:
                    raise err[1]
                self.error_count += 1
    
            def addFailure(self, test, err):
                super(TestResultVerifier, self).addFailure(test, err)
    
                assert self.failure_count < len(failures), err[1]
                assert err[0] is failures[self.failure_count][0]
                assert failures[self.failure_count][1] in str(err[1])
                self.failure_count += 1
    
        # Make sure that multiple extensions work, but don't require LaTeX or
        # Inkscape to do so.
        kwargs.setdefault('extensions', ['png', 'png', 'png'])
    
        func = image_comparison(**kwargs)(func)
        loader = nose.loader.TestLoader()
        suite = loader.loadTestsFromGenerator(
            func,
            'matplotlib.tests.test_compare_images')
        if six.PY2:
            output = io.BytesIO()
        else:
            output = io.StringIO()
        result = TestResultVerifier(stream=output, descriptions=True, verbosity=1)
        with warnings.catch_warnings():
            # Nose uses deprecated stuff; we don't care about it.
            warnings.simplefilter('ignore', DeprecationWarning)
            suite.run(result=result)
    
>       assert output.getvalue() == dots
E       AssertionError: assert '...' == 'FFF'
E         - ...
E         + FFF

build/lib.linux-x86_64-2.7-pydebug/matplotlib/tests/test_compare_images.py:199: AssertionError
----------------------------- Captured stdout call -----------------------------
images not close (RMS 12.955):
	result_images/test_compare_images/simple.png
	result_images/test_compare_images/simple-expected.png 
images not close (RMS 12.955):
	result_images/test_compare_images/simple.png
	result_images/test_compare_images/simple-expected.png 
images not close (RMS 12.955):
	result_images/test_compare_images/simple.png
	result_images/test_compare_images/simple-expected.png 
------------------------------ Captured log call -------------------------------
importer.py                143 DEBUG    Add path /build/matplotlib-2.2.2
suite.py                   418 DEBUG    Create suite for <function generate at 0x7f4fd49e3d80>
suite.py                   420 DEBUG    tests <function generate at 0x7f4fd49e3d80> context <function nosetest_simple_figure at 0x7f4fd4d83ae0>
suite.py                   148 DEBUG    Context suite for <function generate at 0x7f4fd49e3d80> (<function nosetest_simple_figure at 0x7f4fd4d83ae0>) (139980834420128)
suite.py                   481 DEBUG    suite <nose.suite.ContextSuite context=nosetest_simple_figure> has context nosetest_simple_figure
suite.py                   435 DEBUG    get ancestry <function nosetest_simple_figure at 0x7f4fd4d83ae0>
suite.py                   452 DEBUG     <function nosetest_simple_figure at 0x7f4fd4d83ae0> ancestors ['matplotlib', 'tests', 'test_compare_images']
util.py                    311 DEBUG    __import__ matplotlib.tests.test_compare_images
util.py                    320 DEBUG    resolve: ['tests', 'test_compare_images'], matplotlib.tests.test_compare_images, <module 'matplotlib' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7-pydebug/matplotlib/__init__.py'>, <module 'matplotlib' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7-pydebug/matplotlib/__init__.py'>
suite.py                   485 DEBUG    suite <nose.suite.ContextSuite context=nosetest_simple_figure> has ancestor matplotlib.tests.test_compare_images
suite.py                   452 DEBUG     <function nosetest_simple_figure at 0x7f4fd4d83ae0> ancestors ['matplotlib', 'tests']
util.py                    311 DEBUG    __import__ matplotlib.tests
util.py                    320 DEBUG    resolve: ['tests'], matplotlib.tests, <module 'matplotlib' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7-pydebug/matplotlib/__init__.py'>, <module 'matplotlib' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7-pydebug/matplotlib/__init__.py'>
suite.py                   485 DEBUG    suite <nose.suite.ContextSuite context=nosetest_simple_figure> has ancestor matplotlib.tests
suite.py                   452 DEBUG     <function nosetest_simple_figure at 0x7f4fd4d83ae0> ancestors ['matplotlib']
util.py                    311 DEBUG    __import__ matplotlib
util.py                    320 DEBUG    resolve: [], matplotlib, <module 'matplotlib' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7-pydebug/matplotlib/__init__.py'>, <module 'matplotlib' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7-pydebug/matplotlib/__init__.py'>
suite.py                   485 DEBUG    suite <nose.suite.ContextSuite context=nosetest_simple_figure> has ancestor matplotlib
suite.py                   201 DEBUG    suite 139980834420128 (<nose.suite.ContextSuite context=nosetest_simple_figure>) run called, tests: <generator object _get_wrapped_tests at 0x7f4fd5629ce0>
suite.py                   269 DEBUG    suite 139980834420128 setUp called, tests: <generator object _get_wrapped_tests at 0x7f4fd3a837e0>
suite.py                    79 DEBUG    tests in 139980834420128?
suite.py                   288 DEBUG    ancestor <module 'matplotlib' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7-pydebug/matplotlib/__init__.py'> may need setup
suite.py                   291 DEBUG    ancestor <module 'matplotlib' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7-pydebug/matplotlib/__init__.py'> does need setup
suite.py                   302 DEBUG    <nose.suite.ContextSuite context=nosetest_simple_figure> setup context <module 'matplotlib' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7-pydebug/matplotlib/__init__.py'>
suite.py                   288 DEBUG    ancestor <module 'matplotlib.tests' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7-pydebug/matplotlib/tests/__init__.py'> may need setup
suite.py                   291 DEBUG    ancestor <module 'matplotlib.tests' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7-pydebug/matplotlib/tests/__init__.py'> does need setup
suite.py                   302 DEBUG    <nose.suite.ContextSuite context=nosetest_simple_figure> setup context <module 'matplotlib.tests' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7-pydebug/matplotlib/tests/__init__.py'>
util.py                    470 DEBUG    call fixture <module 'matplotlib.tests' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7-pydebug/matplotlib/tests/__init__.py'>.setup
suite.py                   288 DEBUG    ancestor <module 'matplotlib.tests.test_compare_images' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7-pydebug/matplotlib/tests/test_compare_images.py'> may need setup
suite.py                   291 DEBUG    ancestor <module 'matplotlib.tests.test_compare_images' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7-pydebug/matplotlib/tests/test_compare_images.py'> does need setup
suite.py                   302 DEBUG    <nose.suite.ContextSuite context=nosetest_simple_figure> setup context <module 'matplotlib.tests.test_compare_images' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7-pydebug/matplotlib/tests/test_compare_images.py'>
suite.py                   288 DEBUG    ancestor <function nosetest_simple_figure at 0x7f4fd4d83ae0> may need setup
suite.py                   291 DEBUG    ancestor <function nosetest_simple_figure at 0x7f4fd4d83ae0> does need setup
suite.py                   302 DEBUG    <nose.suite.ContextSuite context=nosetest_simple_figure> setup context <function nosetest_simple_figure at 0x7f4fd4d83ae0>
util.py                    470 DEBUG    call fixture <function nosetest_simple_figure at 0x7f4fd4d83ae0>.setup
suite.py                   298 DEBUG    completed suite setup
suite.py                    94 DEBUG    precache is [matplotlib.tests.test_compare_images.nosetest_simple_figure(0, 'simple', 'png')]
suite.py                   323 DEBUG    context teardown
suite.py                   341 DEBUG    ancestor <function nosetest_simple_figure at 0x7f4fd4d83ae0> may need teardown
suite.py                   349 DEBUG    <nose.suite.ContextSuite context=nosetest_simple_figure> setup ancestor <function nosetest_simple_figure at 0x7f4fd4d83ae0>
suite.py                   356 DEBUG    <nose.suite.ContextSuite context=nosetest_simple_figure> teardown context <function nosetest_simple_figure at 0x7f4fd4d83ae0>
util.py                    470 DEBUG    call fixture <function nosetest_simple_figure at 0x7f4fd4d83ae0>.teardown
suite.py                   341 DEBUG    ancestor <module 'matplotlib.tests.test_compare_images' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7-pydebug/matplotlib/tests/test_compare_images.py'> may need teardown
suite.py                   349 DEBUG    <nose.suite.ContextSuite context=nosetest_simple_figure> setup ancestor <module 'matplotlib.tests.test_compare_images' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7-pydebug/matplotlib/tests/test_compare_images.py'>
suite.py                   356 DEBUG    <nose.suite.ContextSuite context=nosetest_simple_figure> teardown context <module 'matplotlib.tests.test_compare_images' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7-pydebug/matplotlib/tests/test_compare_images.py'>
suite.py                   341 DEBUG    ancestor <module 'matplotlib.tests' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7-pydebug/matplotlib/tests/__init__.py'> may need teardown
suite.py                   349 DEBUG    <nose.suite.ContextSuite context=nosetest_simple_figure> setup ancestor <module 'matplotlib.tests' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7-pydebug/matplotlib/tests/__init__.py'>
suite.py                   356 DEBUG    <nose.suite.ContextSuite context=nosetest_simple_figure> teardown context <module 'matplotlib.tests' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7-pydebug/matplotlib/tests/__init__.py'>
suite.py                   341 DEBUG    ancestor <module 'matplotlib' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7-pydebug/matplotlib/__init__.py'> may need teardown
suite.py                   349 DEBUG    <nose.suite.ContextSuite context=nosetest_simple_figure> setup ancestor <module 'matplotlib' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7-pydebug/matplotlib/__init__.py'>
suite.py                   356 DEBUG    <nose.suite.ContextSuite context=nosetest_simple_figure> teardown context <module 'matplotlib' from '/build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7-pydebug/matplotlib/__init__.py'>
suite.py                   341 DEBUG    ancestor <function nosetest_simple_figure at 0x7f4fd4d83ae0> may need teardown
suite.py                   346 DEBUG    ancestor <function nosetest_simple_figure at 0x7f4fd4d83ae0> already torn down
=============================== warnings summary ===============================
build/lib.linux-x86_64-2.7-pydebug/matplotlib/tests/test_axes.py::test_fill_units[png]
  /build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7-pydebug/matplotlib/axes/_base.py:2504: RuntimeWarning: invalid value encountered in double_scalars
    delta = (x1t - x0t) * margin

build/lib.linux-x86_64-2.7-pydebug/matplotlib/tests/test_axes.py::test_pyplot_axes
  /build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7-pydebug/matplotlib/cbook/deprecation.py:107: MatplotlibDeprecationWarning: Using pyplot.axes(ax) with ax an Axes argument is deprecated. Please use pyplot.sca(ax) instead.
    warnings.warn(message, mplDeprecation, stacklevel=1)

build/lib.linux-x86_64-2.7-pydebug/matplotlib/tests/test_image.py::test_empty_imshow[make_norm2]
  /build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7-pydebug/matplotlib/colors.py:1133: RuntimeWarning: invalid value encountered in greater
    masked = np.abs(a) > self.linthresh

build/lib.linux-x86_64-2.7-pydebug/matplotlib/tests/test_image.py::test_full_invalid
  /build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7-pydebug/matplotlib/image.py:405: UserWarning: Warning: converting a masked element to nan.
    dv = (np.float64(self.norm.vmax) -
  /build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7-pydebug/matplotlib/image.py:406: UserWarning: Warning: converting a masked element to nan.
    np.float64(self.norm.vmin))
  /build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7-pydebug/matplotlib/image.py:412: UserWarning: Warning: converting a masked element to nan.
    a_min = np.float64(newmin)
  /build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7-pydebug/matplotlib/image.py:417: UserWarning: Warning: converting a masked element to nan.
    a_max = np.float64(newmax)
  /build/matplotlib-2.2.2/build/lib.linux-x86_64-2.7-pydebug/matplotlib/colors.py:916: UserWarning: Warning: converting a masked element to nan.
    dtype = np.min_scalar_type(value)
  /usr/lib/python2.7/dist-packages/numpy/ma/core.py:716: UserWarning: Warning: converting a masked element to nan.
    data = np.array(a, copy=False, subok=subok)

-- Docs: http://doc.pytest.org/en/latest/warnings.html

python 3.6.5

 ERROR collecting build/lib.linux-x86_64-3.6/mpl_toolkits/tests/test_axisartist_angle_helper.py 
/usr/lib/python3/dist-packages/_pytest/python.py:403: in _importtestmodule
    mod = self.fspath.pyimport(ensuresyspath=importmode)
/usr/lib/python3/dist-packages/py/_path/local.py:668: in pyimport
    __import__(modname)
<frozen importlib._bootstrap>:971: in _find_and_load
    ???
<frozen importlib._bootstrap>:955: in _find_and_load_unlocked
    ???
<frozen importlib._bootstrap>:656: in _load_unlocked
    ???
<frozen importlib._bootstrap>:626: in _load_backward_compatible
    ???
/usr/lib/python3/dist-packages/_pytest/assertion/rewrite.py:213: in load_module
    py.builtin.exec_(co, mod.__dict__)
build/lib.linux-x86_64-3.6/mpl_toolkits/tests/test_axisartist_angle_helper.py:9: in <module>
    from mpl_toolkits.axisartist.angle_helper import (
E     File "/build/matplotlib-2.2.2/build/lib.linux-x86_64-3.6/mpl_toolkits/axisartist/angle_helper.py", line 212
E       deg_mark = "^{\circ}"
E                 ^
E   SyntaxError: invalid escape sequence \c
 ERROR collecting build/lib.linux-x86_64-3.6/mpl_toolkits/tests/test_axisartist_floating_axes.py 
/usr/lib/python3/dist-packages/_pytest/python.py:403: in _importtestmodule
    mod = self.fspath.pyimport(ensuresyspath=importmode)
/usr/lib/python3/dist-packages/py/_path/local.py:668: in pyimport
    __import__(modname)
<frozen importlib._bootstrap>:971: in _find_and_load
    ???
<frozen importlib._bootstrap>:955: in _find_and_load_unlocked
    ???
<frozen importlib._bootstrap>:656: in _load_unlocked
    ???
<frozen importlib._bootstrap>:626: in _load_backward_compatible
    ???
/usr/lib/python3/dist-packages/_pytest/assertion/rewrite.py:213: in load_module
    py.builtin.exec_(co, mod.__dict__)
build/lib.linux-x86_64-3.6/mpl_toolkits/tests/test_axisartist_floating_axes.py:15: in <module>
    from mpl_toolkits.axisartist import angle_helper
E     File "/build/matplotlib-2.2.2/build/lib.linux-x86_64-3.6/mpl_toolkits/axisartist/angle_helper.py", line 212
E       deg_mark = "^{\circ}"
E                 ^
E   SyntaxError: invalid escape sequence \c
 ERROR collecting build/lib.linux-x86_64-3.6/mpl_toolkits/tests/test_axisartist_grid_helper_curvelinear.py 
/usr/lib/python3/dist-packages/_pytest/python.py:403: in _importtestmodule
    mod = self.fspath.pyimport(ensuresyspath=importmode)
/usr/lib/python3/dist-packages/py/_path/local.py:668: in pyimport
    __import__(modname)
<frozen importlib._bootstrap>:971: in _find_and_load
    ???
<frozen importlib._bootstrap>:955: in _find_and_load_unlocked
    ???
<frozen importlib._bootstrap>:656: in _load_unlocked
    ???
<frozen importlib._bootstrap>:626: in _load_backward_compatible
    ???
/usr/lib/python3/dist-packages/_pytest/assertion/rewrite.py:213: in load_module
    py.builtin.exec_(co, mod.__dict__)
build/lib.linux-x86_64-3.6/mpl_toolkits/tests/test_axisartist_grid_helper_curvelinear.py:15: in <module>
    from mpl_toolkits.axisartist import angle_helper
E     File "/build/matplotlib-2.2.2/build/lib.linux-x86_64-3.6/mpl_toolkits/axisartist/angle_helper.py", line 212
E       deg_mark = "^{\circ}"
E                 ^
E   SyntaxError: invalid escape sequence \c
------------------------------- Captured stderr --------------------------------
/build/matplotlib-2.2.2/build/lib.linux-x86_64-3.6/matplotlib/cbook/deprecation.py:107: MatplotlibDeprecationWarning: The mpl_toolkits.axes_grid module was deprecated in version 2.1. Use mpl_toolkits.axes_grid1 and mpl_toolkits.axisartist provies the same functionality instead.
  warnings.warn(message, mplDeprecation, stacklevel=1)
!!!!!!!!!!!!!!!!!!! Interrupted: 3 errors during collection !!!!!!!!!!!!!!!!!!!!

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions