From: <jo...@us...> - 2009-09-27 19:06:47
|
Revision: 7830 http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7830&view=rev Author: jouni Date: 2009-09-27 19:06:37 +0000 (Sun, 27 Sep 2009) Log Message: ----------- Beginnings of a capability to test the pdf backend. Modified Paths: -------------- trunk/matplotlib/CHANGELOG trunk/matplotlib/lib/matplotlib/testing/compare.py trunk/matplotlib/lib/matplotlib/testing/decorators.py Added Paths: ----------- trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/axhspan_epoch.pdf trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/axvspan_epoch.pdf trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/const_xy.pdf trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/fill_units.pdf trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/formatter_ticker_001.pdf trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/formatter_ticker_002.pdf trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/formatter_ticker_003.pdf trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/formatter_ticker_004.pdf trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/formatter_ticker_005.pdf trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/hexbin_extent.pdf trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/nonfinite_limits.pdf trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/offset_points.pdf trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/polar_axes.pdf trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/polar_coords.pdf trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/polar_units.pdf trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/polar_wrap_180.pdf trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/polar_wrap_360.pdf trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/shaped_data.pdf trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/single_date.pdf trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/single_point.pdf trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_dates/DateFormatter_fractionalSeconds.pdf trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_dates/RRuleLocator_bounds.pdf trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_dates/date_axhline.pdf trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_dates/date_axhspan.pdf trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_dates/date_axvline.pdf trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_dates/date_axvspan.pdf trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_dates/date_empty.pdf trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_image/image_interps.pdf trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_simplification/clipping.pdf trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_simplification/clipping_diamond.pdf trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_simplification/overflow.pdf trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_simplification/simplify_curve.pdf trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_spines/spines_axes_positions.pdf Modified: trunk/matplotlib/CHANGELOG =================================================================== --- trunk/matplotlib/CHANGELOG 2009-09-27 12:41:23 UTC (rev 7829) +++ trunk/matplotlib/CHANGELOG 2009-09-27 19:06:37 UTC (rev 7830) @@ -1,3 +1,5 @@ +2009-09-27 Beginnings of a capability to test the pdf backend. - JKS + 2009-09-27 Add a savefig.extension rcparam to control the default filename extension used by savefig. - JKS Modified: trunk/matplotlib/lib/matplotlib/testing/compare.py =================================================================== --- trunk/matplotlib/lib/matplotlib/testing/compare.py 2009-09-27 12:41:23 UTC (rev 7829) +++ trunk/matplotlib/lib/matplotlib/testing/compare.py 2009-09-27 19:06:37 UTC (rev 7830) @@ -8,6 +8,7 @@ import os import numpy as np import shutil +import subprocess #======================================================================= @@ -73,6 +74,33 @@ return None #----------------------------------------------------------------------- +# A dictionary that maps filename extensions to functions that map +# parameters old and new to a list that can be passed to Popen to +# convert files with that extension to png format. +converter = { 'pdf': lambda old, new: \ + ['gs', '-q', '-sDEVICE=png16m', '-dNOPAUSE', '-dBATCH', + '-sOutputFile=' + new, old], + } +def convert(filename): + '''Convert the named file into a png file. + Returns the name of the created file. + ''' + base, extension = filename.rsplit('.', 1) + if extension not in converter: + raise KeyError, "Don't know how to convert %s files to png" % extension + newname = base + '_' + extension + '.png' + cmd = converter[extension](filename, newname) + pipe = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) + stdout, stderr = pipe.communicate() + if not os.path.exists(newname): + msg = "Conversion command failed:\n%s\n" % ' '.join(cmd) + if stdout: + msg += "Standard output:\n%s\n" % stdout + if stderr: + msg += "Standard error:\n%s\n" % stderr + raise IOError, msg + return newname + def compare_images( expected, actual, tol, in_decorator=False ): '''Compare two image files - not the greatest, but fast and good enough. @@ -99,8 +127,16 @@ "be installed. To run tests without using PIL, then use " \ "the '--without-tag=PIL' command-line option.\n" \ "Importing PIL failed with the following error:\n%s" % e - return msg + if in_decorator: + raise NotImplementedError, e + else: + return msg + # Convert the image to png + extension = expected.split('.')[-1] + if extension != 'png': + expected, actual = convert(expected), convert(actual) + # open the image files and remove the alpha channel (if it exists) expectedImage = Image.open( expected ).convert("RGB") actualImage = Image.open( actual ).convert("RGB") Modified: trunk/matplotlib/lib/matplotlib/testing/decorators.py =================================================================== --- trunk/matplotlib/lib/matplotlib/testing/decorators.py 2009-09-27 12:41:23 UTC (rev 7829) +++ trunk/matplotlib/lib/matplotlib/testing/decorators.py 2009-09-27 19:06:37 UTC (rev 7830) @@ -2,6 +2,7 @@ KnownFailureDidNotFailTest, ImageComparisonFailure import os, sys import nose +import matplotlib import matplotlib.tests from matplotlib.testing.compare import compare_images @@ -48,42 +49,54 @@ raise ValueError('baseline_images must be specified') def compare_images_decorator(func): def decorated_compare_images(*args,**kwargs): - result = func(*args,**kwargs) - extension = '.png' # TODO: test more backends - for fname in baseline_images: - # FIXME: place "actual", or current images, images in - # a more reasonable location than the current - # directory. Also, perhaps put them in sub-directory - # according to the name of the test module like the - # baseline images. - actual = fname + extension - # compute filename for baseline image - module_name = func.__module__ - if module_name=='__main__': - # FIXME: this won't work for nested packages in matplotlib.tests - import warnings - warnings.warn('test module run as script. guessing baseline image locations') - script_name = sys.argv[0] - basedir = os.path.abspath(os.path.dirname(script_name)) - subdir = os.path.splitext(os.path.split(script_name)[1])[0] - else: - mods = module_name.split('.') - assert mods.pop(0)=='matplotlib' - assert mods.pop(0)=='tests' - subdir = os.path.join(*mods) - basedir = os.path.dirname(matplotlib.tests.__file__) - baseline_dir = os.path.join(basedir,'baseline_images',subdir) - expected = os.path.join(baseline_dir,fname) + extension + # compute baseline image directory + module_name = func.__module__ + if module_name=='__main__': + # FIXME: this won't work for nested packages in matplotlib.tests + import warnings + warnings.warn('test module run as script. guessing baseline image locations') + script_name = sys.argv[0] + basedir = os.path.abspath(os.path.dirname(script_name)) + subdir = os.path.splitext(os.path.split(script_name)[1])[0] + else: + mods = module_name.split('.') + assert mods.pop(0)=='matplotlib' + assert mods.pop(0)=='tests' + subdir = os.path.join(*mods) + basedir = os.path.dirname(matplotlib.tests.__file__) + baseline_dir = os.path.join(basedir,'baseline_images',subdir) + result_dir = os.path.join(basedir,'current_images',subdir) + if not os.path.exists(result_dir): + try: + # make the current_images directory first + os.mkdir(os.path.join(basedir,'current_images')) + except OSError: + pass # probably exists already + os.mkdir(result_dir) - # compare the images - tol=1e-3 # default tolerance - err = compare_images( expected, actual, tol, - in_decorator=True ) - if err: - raise ImageComparisonFailure( - 'images not close: %(actual)s vs. %(expected)s ' - '(RMS %(rms).3f)'%err) - return result + for extension in ['png', 'pdf']: + # set the default format of savefig + matplotlib.rc('savefig', extension=extension) + # change to the result directory for the duration of the test + old_dir = os.getcwd() + os.chdir(result_dir) + try: + last_result = func(*args,**kwargs) # actually call the test function + finally: + os.chdir(old_dir) + for fname in baseline_images: + actual = os.path.join(result_dir, fname) + '.' + extension + expected = os.path.join(baseline_dir,fname) + '.' + extension + + # compare the images + tol=1e-3 # default tolerance + err = compare_images( expected, actual, tol, + in_decorator=True ) + if err: + raise ImageComparisonFailure( + 'images not close: %(actual)s vs. %(expected)s ' + '(RMS %(rms).3f)'%err) + return last_result return nose.tools.make_decorator(func)(decorated_compare_images) return compare_images_decorator Added: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/axhspan_epoch.pdf =================================================================== (Binary files differ) Property changes on: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/axhspan_epoch.pdf ___________________________________________________________________ Added: svn:mime-type + application/pdf Added: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/axvspan_epoch.pdf =================================================================== (Binary files differ) Property changes on: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/axvspan_epoch.pdf ___________________________________________________________________ Added: svn:mime-type + application/pdf Added: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/const_xy.pdf =================================================================== (Binary files differ) Property changes on: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/const_xy.pdf ___________________________________________________________________ Added: svn:mime-type + application/pdf Added: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/fill_units.pdf =================================================================== (Binary files differ) Property changes on: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/fill_units.pdf ___________________________________________________________________ Added: svn:mime-type + application/pdf Added: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/formatter_ticker_001.pdf =================================================================== (Binary files differ) Property changes on: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/formatter_ticker_001.pdf ___________________________________________________________________ Added: svn:mime-type + application/pdf Added: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/formatter_ticker_002.pdf =================================================================== (Binary files differ) Property changes on: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/formatter_ticker_002.pdf ___________________________________________________________________ Added: svn:mime-type + application/pdf Added: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/formatter_ticker_003.pdf =================================================================== (Binary files differ) Property changes on: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/formatter_ticker_003.pdf ___________________________________________________________________ Added: svn:mime-type + application/pdf Added: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/formatter_ticker_004.pdf =================================================================== (Binary files differ) Property changes on: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/formatter_ticker_004.pdf ___________________________________________________________________ Added: svn:mime-type + application/pdf Added: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/formatter_ticker_005.pdf =================================================================== (Binary files differ) Property changes on: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/formatter_ticker_005.pdf ___________________________________________________________________ Added: svn:mime-type + application/pdf Added: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/hexbin_extent.pdf =================================================================== (Binary files differ) Property changes on: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/hexbin_extent.pdf ___________________________________________________________________ Added: svn:mime-type + application/pdf Added: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/nonfinite_limits.pdf =================================================================== (Binary files differ) Property changes on: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/nonfinite_limits.pdf ___________________________________________________________________ Added: svn:mime-type + application/pdf Added: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/offset_points.pdf =================================================================== (Binary files differ) Property changes on: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/offset_points.pdf ___________________________________________________________________ Added: svn:mime-type + application/pdf Added: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/polar_axes.pdf =================================================================== (Binary files differ) Property changes on: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/polar_axes.pdf ___________________________________________________________________ Added: svn:mime-type + application/pdf Added: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/polar_coords.pdf =================================================================== (Binary files differ) Property changes on: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/polar_coords.pdf ___________________________________________________________________ Added: svn:mime-type + application/pdf Added: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/polar_units.pdf =================================================================== (Binary files differ) Property changes on: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/polar_units.pdf ___________________________________________________________________ Added: svn:mime-type + application/pdf Added: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/polar_wrap_180.pdf =================================================================== (Binary files differ) Property changes on: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/polar_wrap_180.pdf ___________________________________________________________________ Added: svn:mime-type + application/pdf Added: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/polar_wrap_360.pdf =================================================================== (Binary files differ) Property changes on: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/polar_wrap_360.pdf ___________________________________________________________________ Added: svn:mime-type + application/pdf Added: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/shaped_data.pdf =================================================================== (Binary files differ) Property changes on: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/shaped_data.pdf ___________________________________________________________________ Added: svn:mime-type + application/pdf Added: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/single_date.pdf =================================================================== (Binary files differ) Property changes on: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/single_date.pdf ___________________________________________________________________ Added: svn:mime-type + application/pdf Added: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/single_point.pdf =================================================================== (Binary files differ) Property changes on: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_axes/single_point.pdf ___________________________________________________________________ Added: svn:mime-type + application/pdf Added: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_dates/DateFormatter_fractionalSeconds.pdf =================================================================== (Binary files differ) Property changes on: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_dates/DateFormatter_fractionalSeconds.pdf ___________________________________________________________________ Added: svn:mime-type + application/pdf Added: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_dates/RRuleLocator_bounds.pdf =================================================================== (Binary files differ) Property changes on: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_dates/RRuleLocator_bounds.pdf ___________________________________________________________________ Added: svn:mime-type + application/pdf Added: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_dates/date_axhline.pdf =================================================================== (Binary files differ) Property changes on: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_dates/date_axhline.pdf ___________________________________________________________________ Added: svn:mime-type + application/pdf Added: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_dates/date_axhspan.pdf =================================================================== (Binary files differ) Property changes on: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_dates/date_axhspan.pdf ___________________________________________________________________ Added: svn:mime-type + application/pdf Added: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_dates/date_axvline.pdf =================================================================== (Binary files differ) Property changes on: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_dates/date_axvline.pdf ___________________________________________________________________ Added: svn:mime-type + application/pdf Added: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_dates/date_axvspan.pdf =================================================================== (Binary files differ) Property changes on: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_dates/date_axvspan.pdf ___________________________________________________________________ Added: svn:mime-type + application/pdf Added: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_dates/date_empty.pdf =================================================================== (Binary files differ) Property changes on: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_dates/date_empty.pdf ___________________________________________________________________ Added: svn:mime-type + application/pdf Added: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_image/image_interps.pdf =================================================================== (Binary files differ) Property changes on: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_image/image_interps.pdf ___________________________________________________________________ Added: svn:mime-type + application/pdf Added: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_simplification/clipping.pdf =================================================================== (Binary files differ) Property changes on: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_simplification/clipping.pdf ___________________________________________________________________ Added: svn:mime-type + application/pdf Added: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_simplification/clipping_diamond.pdf =================================================================== (Binary files differ) Property changes on: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_simplification/clipping_diamond.pdf ___________________________________________________________________ Added: svn:mime-type + application/pdf Added: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_simplification/overflow.pdf =================================================================== (Binary files differ) Property changes on: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_simplification/overflow.pdf ___________________________________________________________________ Added: svn:mime-type + application/pdf Added: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_simplification/simplify_curve.pdf =================================================================== (Binary files differ) Property changes on: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_simplification/simplify_curve.pdf ___________________________________________________________________ Added: svn:mime-type + application/pdf Added: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_spines/spines_axes_positions.pdf =================================================================== (Binary files differ) Property changes on: trunk/matplotlib/lib/matplotlib/tests/baseline_images/test_spines/spines_axes_positions.pdf ___________________________________________________________________ Added: svn:mime-type + application/pdf This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |