Revision: 7218
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=7218&view=rev
Author: jouni
Date: 2009-06-14 05:38:11 +0000 (Sun, 14 Jun 2009)
Log Message:
-----------
Extend backend_driver.py to support running only some test directories
Modified Paths:
--------------
trunk/matplotlib/CHANGELOG
trunk/matplotlib/examples/tests/backend_driver.py
Modified: trunk/matplotlib/CHANGELOG
===================================================================
--- trunk/matplotlib/CHANGELOG 2009-06-14 01:32:20 UTC (rev 7217)
+++ trunk/matplotlib/CHANGELOG 2009-06-14 05:38:11 UTC (rev 7218)
@@ -1,3 +1,6 @@
+2009-06-14 Add new command line options to backend_driver.py to support
+ running only some directories of tests - JKS
+
2009-06-13 partial cleanup of mlab and its importation in pylab - EF
2009-06-13 Introduce a rotation_mode property for the Text artist. See
Modified: trunk/matplotlib/examples/tests/backend_driver.py
===================================================================
--- trunk/matplotlib/examples/tests/backend_driver.py 2009-06-14 01:32:20 UTC
(rev 7217)
+++ trunk/matplotlib/examples/tests/backend_driver.py 2009-06-14 05:38:11 UTC
(rev 7218)
@@ -3,30 +3,40 @@
This is used to drive many of the examples across the backends, for
regression testing, and comparing backend efficiency.
-The script takes one or more arguments specifying backends
-to be tested, e.g.
+You can specify the backends to be tested either via the --backends
+switch, which takes a comma-separated list, or as separate arguments,
+e.g.
python backend_driver.py agg ps cairo.png cairo.ps
-would test the agg and ps backends, and the cairo backend with
-output to png and ps files.
+would test the agg and ps backends, and the cairo backend with output
+to png and ps files. If no arguments are given, a default list of
+backends will be tested.
-If no arguments are given, a default list of backends will be
-tested.
+Interspersed with the backend arguments can be switches for the Python
+interpreter executing the tests. If entering such arguments causes an
+option parsing error with the driver script, separate them from driver
+switches with a --.
"""
from __future__ import division
-import os, time, sys, glob
-
+import os, time, sys, glob, string
+from optparse import OptionParser
import matplotlib.rcsetup as rcsetup
+from matplotlib.cbook import Bunch, dedent
all_backends = list(rcsetup.all_backends) # to leave the original list alone
all_backends.extend(['cairo.png', 'cairo.ps', 'cairo.pdf', 'cairo.svg'])
-pylab_dir = os.path.join('..', 'pylab_examples')
-pylab_files = [
+# actual physical directory for each dir
+dirs = dict(pylab = os.path.join('..', 'pylab_examples'),
+ api = os.path.join('..', 'api'),
+ units = os.path.join('..', 'units'),
+ mplot3d = os.path.join('..', 'mplot3d'))
-
+# files in each dir
+files = dict()
+files['pylab'] = [
'accented_text.py',
'alignment_test.py',
'annotation_demo.py',
@@ -196,8 +206,7 @@
]
-api_dir = os.path.join('..', 'api')
-api_files = [
+files['api'] = [
'agg_oo.py',
'barchart_demo.py',
'bbox_intersect.py',
@@ -228,8 +237,7 @@
'watermark_text.py',
]
-units_dir = os.path.join('..', 'units')
-units_files = [
+files['units'] = [
'annotate_with_units.py',
#'artist_tests.py', # broken, fixme
'bar_demo2.py',
@@ -241,8 +249,7 @@
]
-mplot3d_dir = os.path.join('..', 'mplot3d')
-mplot3d_files = [
+files['mplot3d'] = [
'2dcollections3d_demo.py',
'bars3d_demo.py',
'contour3d_demo.py',
@@ -263,8 +270,8 @@
# examples that generate multiple figures
excluded = {
- pylab_dir : ['__init__.py', 'toggle_images.py',],
- units_dir : ['__init__.py', 'date_support.py',],
+ 'pylab' : ['__init__.py', 'toggle_images.py',],
+ 'units' : ['__init__.py', 'date_support.py',],
}
def report_missing(dir, flist):
@@ -278,24 +285,16 @@
flist = set(flist)
missing = list(pyfiles-flist-exclude)
missing.sort()
- print '%s files not tested: %s'%(dir, ', '.join(missing))
+ if missing:
+ print '%s files not tested: %s'%(dir, ', '.join(missing))
+def report_all_missing(directories):
+ for f in directories:
+ report_missing(dirs[f], files[f])
-report_missing(pylab_dir, pylab_files)
-report_missing(api_dir, api_files)
-report_missing(units_dir, units_files)
-report_missing(mplot3d_dir, mplot3d_files)
-files = (
- [os.path.join(api_dir, fname) for fname in api_files] +
- [os.path.join(pylab_dir, fname) for fname in pylab_files] +
- [os.path.join(units_dir, fname) for fname in units_files] +
- [os.path.join(mplot3d_dir, fname) for fname in mplot3d_files]
- )
-
# tests known to fail on a given backend
-
failbackend = dict(
svg = ('tex_demo.py', ),
agg = ('hyperlinks.py', ),
@@ -317,7 +316,7 @@
def run(arglist):
os.system(' '.join(arglist))
-def drive(backend, python=['python'], switches = []):
+def drive(backend, directories, python=['python'], switches = []):
exclude = failbackend.get(backend, [])
# Clear the destination directory for the examples
@@ -329,8 +328,12 @@
else:
os.mkdir(backend)
failures = []
- for fullpath in files:
+ testcases = [os.path.join(dirs[d], fname)
+ for d in directories
+ for fname in files[d]]
+
+ for fullpath in testcases:
print ('\tdriving %-40s' % (fullpath)),
sys.stdout.flush()
@@ -376,21 +379,64 @@
tmpfile.close()
start_time = time.time()
program = [x % {'name': basename} for x in python]
- ret = run(program + [tmpfile_name, switchstring])
+ ret = run(program + [tmpfile_name] + switches)
end_time = time.time()
print (end_time - start_time), ret
- #os.system('%s %s %s' % (python, tmpfile_name, switchstring))
+ #os.system('%s %s %s' % (python, tmpfile_name, ' '.join(switches)))
os.remove(tmpfile_name)
if ret:
failures.append(fullpath)
return failures
+def parse_options():
+ doc = __doc__.split('\n\n')
+ op = OptionParser(description=doc[0].strip(),
+ usage='%prog [options] [--] [backends and switches]',
+ epilog='\n'.join(doc[1:]))
+ op.disable_interspersed_args()
+ op.set_defaults(dirs='pylab,api,units,mplot3d',
+ clean=False, coverage=False, valgrind=False)
+ op.add_option('-d', '--dirs', '--directories', type='string',
+ dest='dirs', help=dedent('''
+ Run only the tests in these directories; comma-separated list of
+ one or more of: pylab (or pylab_examples), api, units, mplot3d'''))
+ op.add_option('-b', '--backends', type='string', dest='backends',
+ help=dedent('''
+ Run tests only for these backends; comma-separated list of
+ one or more of: agg, ps, svg, pdf, template, cairo,
+ cairo.png, cairo.ps, cairo.pdf, cairo.svg. Default is everything
+ except cairo.'''))
+ op.add_option('--clean', action='store_true', dest='clean',
+ help='Remove result directories, run no tests')
+ op.add_option('-c', '--coverage', action='store_true', dest='coverage',
+ help='Run in coverage.py')
+ op.add_option('-v', '--valgrind', action='store_true', dest='valgrind',
+ help='Run in valgrind')
+ options, args = op.parse_args()
+ switches = [x for x in args if x.startswith('--')]
+ backends = [x.lower() for x in args if not x.startswith('--')]
+ if options.backends:
+ backends += map(string.lower, options.backends.split(','))
+
+ result = Bunch(
+ dirs = options.dirs.split(','),
+ backends = backends or ['agg', 'ps', 'svg', 'pdf', 'template'],
+ clean = options.clean,
+ coverage = options.coverage,
+ valgrind = options.valgrind,
+ switches = switches)
+ if 'pylab_examples' in result.dirs:
+ result.dirs[result.dirs.index('pylab_examples')] = 'pylab'
+ #print result
+ return result
+
if __name__ == '__main__':
times = {}
failures = {}
- default_backends = ['agg', 'ps', 'svg', 'pdf', 'template']
- if len(sys.argv)==2 and sys.argv[1]=='--clean':
+ options = parse_options()
+
+ if options.clean:
localdirs = [d for d in glob.glob('*') if os.path.isdir(d)]
all_backends_set = set(all_backends)
for d in localdirs:
@@ -405,38 +451,31 @@
print 'all clean...'
raise SystemExit
- if '--coverage' in sys.argv:
+ if options.coverage:
python = ['coverage.py', '-x']
- sys.argv.remove('--coverage')
- elif '--valgrind' in sys.argv:
+ elif options.valgrind:
python = ['valgrind', '--tool=memcheck', '--leak-check=yes',
'--log-file=%(name)s', 'python']
- sys.argv.remove('--valgrind')
elif sys.platform == 'win32':
python = [r'c:\Python24\python.exe']
else:
python = ['python']
- backends = []
- switches = []
- if sys.argv[1:]:
- backends = [b.lower() for b in sys.argv[1:] if b.lower() in
all_backends]
- switches = [s for s in sys.argv[1:] if s.startswith('--')]
- if not backends:
- backends = default_backends
- for backend in backends:
- switchstring = ' '.join(switches)
- print 'testing %s %s' % (backend, switchstring)
+
+ report_all_missing(options.dirs)
+ for backend in options.backends:
+ print 'testing %s %s' % (backend, ' '.join(options.switches))
t0 = time.time()
- failures[backend] = drive(backend, python, switches)
+ failures[backend] = \
+ drive(backend, options.dirs, python, options.switches)
t1 = time.time()
times[backend] = (t1-t0)/60.0
# print times
for backend, elapsed in times.items():
- print 'Backend %s took %1.2f minutes to complete' % ( backend, elapsed)
+ print 'Backend %s took %1.2f minutes to complete' % (backend, elapsed)
failed = failures[backend]
if failed:
print ' Failures: ', failed
- if 'Template' in times:
+ if 'template' in times:
print '\ttemplate ratio %1.3f, template residual %1.3f' % (
- elapsed/times['Template'], elapsed-times['Template'])
+ elapsed/times['template'], elapsed-times['template'])
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
------------------------------------------------------------------------------
Crystal Reports - New Free Runtime and 30 Day Trial
Check out the new simplified licensing option that enables unlimited
royalty-free distribution of the report engine for externally facing
server and web deployment.
http://p.sf.net/sfu/businessobjects
_______________________________________________
Matplotlib-checkins mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/matplotlib-checkins