Revision: 7646
          http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7646&view=rev
Author:   astraw
Date:     2009-09-06 01:43:05 +0000 (Sun, 06 Sep 2009)

Log Message:
-----------
testing: move image comparison functions into matplotlib.testing

Modified Paths:
--------------
    trunk/matplotlib/test/mplTest/MplTestCase.py

Added Paths:
-----------
    trunk/matplotlib/lib/matplotlib/testing/compare.py

Removed Paths:
-------------
    trunk/matplotlib/test/mplTest/compare.py

Copied: trunk/matplotlib/lib/matplotlib/testing/compare.py (from rev 7645, 
trunk/matplotlib/test/mplTest/compare.py)
===================================================================
--- trunk/matplotlib/lib/matplotlib/testing/compare.py                          
(rev 0)
+++ trunk/matplotlib/lib/matplotlib/testing/compare.py  2009-09-06 01:43:05 UTC 
(rev 7646)
@@ -0,0 +1,138 @@
+#=======================================================================
+""" A set of utilities for comparing results.
+"""
+#=======================================================================
+
+import math
+import operator
+import os
+import numpy as np
+
+#=======================================================================
+
+__all__ = [
+            'compareFloat',
+            'compareImages',
+          ]
+
+#-----------------------------------------------------------------------
+def compareFloat( expected, actual, relTol = None, absTol = None ):
+   """Fail if the floating point values are not close enough, with
+      the givem message.
+
+   You can specify a relative tolerance, absolute tolerance, or both.
+   """
+   if relTol is None and absTol is None:
+      exMsg = "You haven't specified a 'relTol' relative tolerance "
+      exMsg += "or a 'absTol' absolute tolerance function argument.  "
+      exMsg += "You must specify one."
+      raise ValueError, exMsg
+
+   msg = ""
+
+   if absTol is not None:
+      absDiff = abs( expected - actual )
+      if absTol < absDiff:
+         expectedStr = str( expected )
+         actualStr = str( actual )
+         absDiffStr = str( absDiff )
+         absTolStr = str( absTol )
+
+         msg += "\n"
+         msg += "  Expected: " + expectedStr + "\n"
+         msg += "  Actual:   " + actualStr + "\n"
+         msg += "  Abs Diff: " + absDiffStr + "\n"
+         msg += "  Abs Tol:  " + absTolStr + "\n"
+
+   if relTol is not None:
+      # The relative difference of the two values.  If the expected value is
+      # zero, then return the absolute value of the difference.
+      relDiff = abs( expected - actual )
+      if expected:
+         relDiff = relDiff / abs( expected )
+
+      if relTol < relDiff:
+
+         # The relative difference is a ratio, so it's always unitless.
+         relDiffStr = str( relDiff )
+         relTolStr = str( relTol )
+
+         expectedStr = str( expected )
+         actualStr = str( actual )
+
+         msg += "\n"
+         msg += "  Expected: " + expectedStr + "\n"
+         msg += "  Actual:   " + actualStr + "\n"
+         msg += "  Rel Diff: " + relDiffStr + "\n"
+         msg += "  Rel Tol:  " + relTolStr + "\n"
+
+   if msg:
+      return msg
+   else:
+      return None
+
+#-----------------------------------------------------------------------
+def compareImages( expected, actual, tol ):
+   '''Compare two image files - not the greatest, but fast and good enough.
+
+   = EXAMPLE
+
+   # img1 = "./baseline/plot.png"
+   # img2 = "./output/plot.png"
+   #            
+   # compareImage( img1, img2, 0.001 ):
+
+   = INPUT VARIABLES
+   - expected  The filename of the expected image.
+   - actual    The filename of the actual image.
+   - tol       The tolerance (a unitless float).  This is used to
+               determinte the 'fuzziness' to use when comparing images.
+   '''
+
+   try:
+      from PIL import Image, ImageOps, ImageFilter
+   except ImportError, e:
+      msg = "Image Comparison requires the Python Imaging Library to " \
+            "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
+
+   # open the image files and remove the alpha channel (if it exists)
+   expectedImage = Image.open( expected ).convert("RGB")
+   actualImage = Image.open( actual ).convert("RGB")
+
+   # normalize the images
+   expectedImage = ImageOps.autocontrast( expectedImage, 2 )
+   actualImage = ImageOps.autocontrast( actualImage, 2 )
+
+   # compare the resulting image histogram functions
+   h1 = expectedImage.histogram()
+   h2 = actualImage.histogram()
+   rms = math.sqrt( reduce(operator.add, map(lambda a,b: (a-b)**2, h1, h2)) / 
len(h1) )
+
+   if ( (rms / 10000.0) <= tol ):
+      return None
+   else:
+      diff_image = os.path.join(os.path.dirname(actual),
+                                'failed-diff-'+os.path.basename(actual))
+      saveDiffImage( expected, actual, diff_image )
+
+      msg = "  Error: Image files did not match.\n"       \
+            "  RMS Value: " + str( rms / 10000.0 ) + "\n" \
+            "  Expected:\n    " + str( expected ) + "\n"  \
+            "  Actual:\n    " + str( actual ) + "\n"      \
+            "  Difference:\n    " + str( diff_image ) + "\n"      \
+            "  Tolerance: " + str( tol ) + "\n"
+      return msg
+
+def saveDiffImage( expected, actual, output ):
+   from PIL import Image
+   expectedImage = np.array(Image.open( expected 
).convert("RGB")).astype(np.float)
+   actualImage = np.array(Image.open( actual ).convert("RGB")).astype(np.float)
+   absDiffImage = abs(expectedImage-actualImage)
+   # expand differences in luminance domain
+   absDiffImage *= 10
+   save_image_np = absDiffImage.astype(np.uint8)
+   save_image = Image.fromarray(save_image_np)
+   save_image.save(output)

Modified: trunk/matplotlib/test/mplTest/MplTestCase.py
===================================================================
--- trunk/matplotlib/test/mplTest/MplTestCase.py        2009-09-06 01:42:52 UTC 
(rev 7645)
+++ trunk/matplotlib/test/mplTest/MplTestCase.py        2009-09-06 01:43:05 UTC 
(rev 7646)
@@ -6,7 +6,7 @@
 import os.path
 import unittest
 
-import compare
+import matplotlib.testing.compare as compare
 import path_utils
 
 #=======================================================================

Deleted: trunk/matplotlib/test/mplTest/compare.py
===================================================================
--- trunk/matplotlib/test/mplTest/compare.py    2009-09-06 01:42:52 UTC (rev 
7645)
+++ trunk/matplotlib/test/mplTest/compare.py    2009-09-06 01:43:05 UTC (rev 
7646)
@@ -1,138 +0,0 @@
-#=======================================================================
-""" A set of utilities for comparing results.
-"""
-#=======================================================================
-
-import math
-import operator
-import os
-import numpy as np
-
-#=======================================================================
-
-__all__ = [
-            'compareFloat',
-            'compareImages',
-          ]
-
-#-----------------------------------------------------------------------
-def compareFloat( expected, actual, relTol = None, absTol = None ):
-   """Fail if the floating point values are not close enough, with
-      the givem message.
-
-   You can specify a relative tolerance, absolute tolerance, or both.
-   """
-   if relTol is None and absTol is None:
-      exMsg = "You haven't specified a 'relTol' relative tolerance "
-      exMsg += "or a 'absTol' absolute tolerance function argument.  "
-      exMsg += "You must specify one."
-      raise ValueError, exMsg
-
-   msg = ""
-
-   if absTol is not None:
-      absDiff = abs( expected - actual )
-      if absTol < absDiff:
-         expectedStr = str( expected )
-         actualStr = str( actual )
-         absDiffStr = str( absDiff )
-         absTolStr = str( absTol )
-
-         msg += "\n"
-         msg += "  Expected: " + expectedStr + "\n"
-         msg += "  Actual:   " + actualStr + "\n"
-         msg += "  Abs Diff: " + absDiffStr + "\n"
-         msg += "  Abs Tol:  " + absTolStr + "\n"
-
-   if relTol is not None:
-      # The relative difference of the two values.  If the expected value is
-      # zero, then return the absolute value of the difference.
-      relDiff = abs( expected - actual )
-      if expected:
-         relDiff = relDiff / abs( expected )
-
-      if relTol < relDiff:
-
-         # The relative difference is a ratio, so it's always unitless.
-         relDiffStr = str( relDiff )
-         relTolStr = str( relTol )
-
-         expectedStr = str( expected )
-         actualStr = str( actual )
-
-         msg += "\n"
-         msg += "  Expected: " + expectedStr + "\n"
-         msg += "  Actual:   " + actualStr + "\n"
-         msg += "  Rel Diff: " + relDiffStr + "\n"
-         msg += "  Rel Tol:  " + relTolStr + "\n"
-
-   if msg:
-      return msg
-   else:
-      return None
-
-#-----------------------------------------------------------------------
-def compareImages( expected, actual, tol ):
-   '''Compare two image files - not the greatest, but fast and good enough.
-
-   = EXAMPLE
-
-   # img1 = "./baseline/plot.png"
-   # img2 = "./output/plot.png"
-   #            
-   # compareImage( img1, img2, 0.001 ):
-
-   = INPUT VARIABLES
-   - expected  The filename of the expected image.
-   - actual    The filename of the actual image.
-   - tol       The tolerance (a unitless float).  This is used to
-               determinte the 'fuzziness' to use when comparing images.
-   '''
-
-   try:
-      from PIL import Image, ImageOps, ImageFilter
-   except ImportError, e:
-      msg = "Image Comparison requires the Python Imaging Library to " \
-            "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
-
-   # open the image files and remove the alpha channel (if it exists)
-   expectedImage = Image.open( expected ).convert("RGB")
-   actualImage = Image.open( actual ).convert("RGB")
-
-   # normalize the images
-   expectedImage = ImageOps.autocontrast( expectedImage, 2 )
-   actualImage = ImageOps.autocontrast( actualImage, 2 )
-
-   # compare the resulting image histogram functions
-   h1 = expectedImage.histogram()
-   h2 = actualImage.histogram()
-   rms = math.sqrt( reduce(operator.add, map(lambda a,b: (a-b)**2, h1, h2)) / 
len(h1) )
-
-   if ( (rms / 10000.0) <= tol ):
-      return None
-   else:
-      diff_image = os.path.join(os.path.dirname(actual),
-                                'failed-diff-'+os.path.basename(actual))
-      saveDiffImage( expected, actual, diff_image )
-
-      msg = "  Error: Image files did not match.\n"       \
-            "  RMS Value: " + str( rms / 10000.0 ) + "\n" \
-            "  Expected:\n    " + str( expected ) + "\n"  \
-            "  Actual:\n    " + str( actual ) + "\n"      \
-            "  Difference:\n    " + str( diff_image ) + "\n"      \
-            "  Tolerance: " + str( tol ) + "\n"
-      return msg
-
-def saveDiffImage( expected, actual, output ):
-   from PIL import Image
-   expectedImage = np.array(Image.open( expected 
).convert("RGB")).astype(np.float)
-   actualImage = np.array(Image.open( actual ).convert("RGB")).astype(np.float)
-   absDiffImage = abs(expectedImage-actualImage)
-   # expand differences in luminance domain
-   absDiffImage *= 10
-   save_image_np = absDiffImage.astype(np.uint8)
-   save_image = Image.fromarray(save_image_np)
-   save_image.save(output)


This was sent by the SourceForge.net collaborative development platform, the 
world's largest Open Source development site.

------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day 
trial. Simplify your report design, integration and deployment - and focus on 
what you do best, core application coding. Discover what's new with 
Crystal Reports now.  http://p.sf.net/sfu/bobj-july
_______________________________________________
Matplotlib-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins

Reply via email to