--- /dev/null
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+"""Minimal test script to check for modules needed in python workshop.
+
+Execute this code at the command line by typing:
+
+python workshop_checklist.py
+
+How to get a command line:
+
+- On OSX run this with the Terminal application.
+
+- On Windows, go to the Start menu, select 'Run' and type 'cmd' (without the
+quotes) to run the cmd.exe Windows Command Prompt.
+
+Run the script and follow the instructions it prints at the end.
+"""
+
+##############################################################################
+# Config here
+
+# Modules whose imports we're going to validate
+MODULES = ['IPython',
+ 'numpy',
+ 'scipy',
+ 'scipy.io',
+ 'matplotlib','pylab',
+ # 'sympy', 'Cython', 'networkx', 'mayavi.mlab',
+ # 'setuptools',
+ ]
+
+##############################################################################
+# Code begins
+
+# Standard library imports
+import glob
+import os
+import platform
+import sys
+
+from StringIO import StringIO
+
+# Third-party imports
+import nose
+import nose.tools as nt
+
+#-----------------------------------------------------------------------------
+# Generic utility functions
+def sys_info():
+ """Summarize some info about the system"""
+
+ print '=================='
+ print 'System information'
+ print '=================='
+ print 'os.name :',os.name
+ try:
+ print 'os.uname :',os.uname()
+ except:
+ pass
+ print 'platform :',sys.platform
+ print 'platform+ :',platform.platform()
+ print 'prefix :',sys.prefix
+ print 'exec_prefix :',sys.exec_prefix
+ print 'executable :',sys.executable
+ print 'version_info :',sys.version_info
+ print 'version :',sys.version
+ print '=================='
+
+
+#-----------------------------------------------------------------------------
+# Tests
+
+def check_import(mname):
+ "Check that the given name imports correctly"
+ exec "import %s as m" % mname
+
+ if mname == 'matplotlib':
+ m.use('Agg')
+ m.rcParams['figure.subplot.top']= 0.85
+
+ try:
+ vinfo = m.__version__
+ except AttributeError:
+ vinfo = '*no info*'
+
+ print 'MOD: %s, version: %s' % (mname,vinfo)
+
+
+# Test generators are best written without docstrings, because nose can then
+# show the parameters being used.
+def test_imports():
+ for mname in MODULES:
+ yield check_import, mname
+
+
+# Test generator, don't put a docstring in it
+def test_loadtxt():
+ import numpy as np
+ import numpy.testing as npt
+
+ # Examples taken from the loadtxt docstring
+ array = np.array
+
+ c = StringIO("0 1\n2 3")
+ a1 = np.loadtxt(c)
+ a2 = np.array([[ 0., 1.],
+ [ 2., 3.]])
+ yield npt.assert_array_equal,a1,a2
+
+ d = StringIO("M 21 72\nF 35 58")
+ a1 = np.loadtxt(d, dtype={'names': ('gender', 'age', 'weight'),
+ 'formats': ('S1', 'i4', 'f4')})
+
+ a2 = np.array([('M', 21, 72.0), ('F', 35, 58.0)],
+ dtype=[('gender', '|S1'), ('age', '<i4'), ('weight', '<f4')])
+ yield npt.assert_array_equal,a1,a2
+
+ c = StringIO("1,0,2\n3,0,4")
+ x,y = np.loadtxt(c, delimiter=',', usecols=(0,2), unpack=True)
+ yield npt.assert_array_equal,x,np.array([ 1., 3.])
+ yield npt.assert_array_equal,y,np.array([ 2., 4.])
+
+
+def test_plot():
+ "Simple plot generation."
+ from matplotlib import pyplot as plt
+ plt.figure()
+ plt.plot([1,2,3])
+ plt.xlabel('some numbers')
+ plt.savefig('tmp_test_plot.png')
+
+
+def test_plot_math():
+ "Plots with math"
+ from matplotlib import pyplot as plt
+ plt.figure()
+ plt.plot([1,2,3],label='data')
+ t=(r'And X is $\sum_{i=0}^\infty \gamma_i + \frac{\alpha^{i^2}}{\gamma}'
+ r'+ \cos(2 \theta^2)$')
+ plt.title(t)
+ plt.legend()
+ plt.grid()
+ plt.savefig('tmp_test_plot_math.png')
+
+
+def cleanup_pngs():
+ """Remove temporary pngs made by our plotting tests"""
+
+ for f in glob.glob('tmp_test_plot*.png'):
+ try:
+ os.remove(f)
+ except OSError:
+ print '*** Error: could not remove file',f
+
+
+#-----------------------------------------------------------------------------
+# Main routine, executed when this file is run as a script
+#
+if __name__ == '__main__':
+ print "Running tests:"
+ # This call form is ipython-friendly
+ nose.runmodule(argv=[__file__,'-vvs'],
+ exit=False)
+ print """
+***************************************************************************
+ TESTS FINISHED
+***************************************************************************
+
+If the printout above did not finish in 'OK' but instead says 'FAILED', copy
+and send the *entire* output (all info above and summary below) to the
+instructor for help.
+"""
+ sys_info()