|
From: <fer...@us...> - 2008-08-19 09:35:08
|
Revision: 6044
http://matplotlib.svn.sourceforge.net/matplotlib/?rev=6044&view=rev
Author: fer_perez
Date: 2008-08-19 09:35:03 +0000 (Tue, 19 Aug 2008)
Log Message:
-----------
Update examples and skeletons in py4science.
- Fixes after previous feedback so they are all syntactically correct.
- Switch to using nose instead of unittest for an eaiser workflow.
Modified Paths:
--------------
trunk/py4science/examples/fft_imdenoise.py
trunk/py4science/examples/qsort.py
trunk/py4science/examples/skel/fft_imdenoise_skel.py
trunk/py4science/examples/skel/qsort_skel.py
trunk/py4science/examples/skel/trapezoid_skel.py
trunk/py4science/examples/skel/wallis_pi_skel.py
trunk/py4science/examples/skel/wordfreqs_skel.py
trunk/py4science/examples/trapezoid.py
Modified: trunk/py4science/examples/fft_imdenoise.py
===================================================================
--- trunk/py4science/examples/fft_imdenoise.py 2008-08-18 21:06:56 UTC (rev 6043)
+++ trunk/py4science/examples/fft_imdenoise.py 2008-08-19 09:35:03 UTC (rev 6044)
@@ -20,58 +20,64 @@
print M.shape, M.dtype
plt.imshow(M, plt.cm.Blues)
-try:
- # Read in original image, convert to floating point for further
- # manipulation; imread returns a MxNx4 RGBA image. Since the
- # image is grayscale, just extrac the 1st channel
- im = plt.imread('data/moonlanding.png').astype(float)[:,:,0]
-except:
- print "Could not open image."
- sys.exit(-1)
-# Compute the 2d FFT of the input image
-F = np.fft.fft2(im)
+if __name__ == '__main__':
-# Now, make a copy of the original spectrum and truncate coefficients.
-keep_fraction = 0.1
+ try:
+ # Read in original image, convert to floating point for further
+ # manipulation; imread returns a MxNx4 RGBA image. Since the image is
+ # grayscale, just extrac the 1st channel
+ im = plt.imread('data/moonlanding.png').astype(float)[:,:,0]
+ except:
+ print "Could not open image."
+ sys.exit(-1)
-# Call ff a copy of the original transform. Numpy arrays have a copy method
-# for this purpose.
-ff = F.copy()
+ # Compute the 2d FFT of the input image
+ F = np.fft.fft2(im)
-# Set r and c to be the number of rows and columns of the array.
-r,c = ff.shape
+ # Now, make a copy of the original spectrum and truncate coefficients.
+ keep_fraction = 0.1
-# Set to zero all rows with indices between r*keep_fraction and
-# r*(1-keep_fraction):
-ff[r*keep_fraction:r*(1-keep_fraction)] = 0
+ # Call ff a copy of the original transform. Numpy arrays have a copy
+ # method for this purpose.
+ ff = F.copy()
-# Similarly with the columns:
-ff[:, c*keep_fraction:c*(1-keep_fraction)] = 0
+ # Set r and c to be the number of rows and columns of the array.
+ r,c = ff.shape
-# Reconstruct the denoised image from the filtered spectrum, keep only the real
-# part for display
-im_new = np.fft.ifft2(ff).real
+ # Set to zero all rows with indices between r*keep_fraction and
+ # r*(1-keep_fraction):
+ ff[r*keep_fraction:r*(1-keep_fraction)] = 0
-# Show the results
-plt.figure()
+ # Similarly with the columns:
+ ff[:, c*keep_fraction:c*(1-keep_fraction)] = 0
-plt.subplot(221)
-plt.title('Original image')
-plt.imshow(im, plt.cm.gray)
+ # Reconstruct the denoised image from the filtered spectrum, keep only the
+ # real part for display
+ im_new = np.fft.ifft2(ff).real
-plt.subplot(222)
-plt.title('Fourier transform')
-plot_spectrum(F)
+ # Show the results
+ plt.figure()
-plt.subplot(224)
-plt.title('Filtered Spectrum')
-plot_spectrum(ff)
+ plt.subplot(221)
+ plt.title('Original image')
+ plt.imshow(im, plt.cm.gray)
-plt.subplot(223)
-plt.title('Reconstructed Image')
-plt.imshow(im_new, plt.cm.gray)
+ plt.subplot(222)
+ plt.title('Fourier transform')
+ plot_spectrum(F)
-plt.savefig('fft_imdenoise.png', dpi=150)
-plt.savefig('fft_imdenoise.eps')
-plt.show()
+ plt.subplot(224)
+ plt.title('Filtered Spectrum')
+ plot_spectrum(ff)
+
+ plt.subplot(223)
+ plt.title('Reconstructed Image')
+ plt.imshow(im_new, plt.cm.gray)
+
+ plt.savefig('fft_imdenoise.png', dpi=150)
+ plt.savefig('fft_imdenoise.eps')
+
+ # Adjust the spacing between subplots for readability
+ plt.subplots_adjust(hspace=0.32)
+ plt.show()
Modified: trunk/py4science/examples/qsort.py
===================================================================
--- trunk/py4science/examples/qsort.py 2008-08-18 21:06:56 UTC (rev 6043)
+++ trunk/py4science/examples/qsort.py 2008-08-19 09:35:03 UTC (rev 6044)
@@ -18,22 +18,28 @@
return qsort(less_than) + [pivot] + qsort(greater_equal)
-if __name__ == '__main__':
- from unittest import main, TestCase
- import random
- class qsortTestCase(TestCase):
- def test_sorted(self):
- seq = range(10)
- sseq = qsort(seq)
- self.assertEqual(seq,sseq)
+#-----------------------------------------------------------------------------
+# Tests
+#-----------------------------------------------------------------------------
+import random
- def test_random(self):
- tseq = range(10)
- rseq = range(10)
- random.shuffle(rseq)
- sseq = qsort(rseq)
- print tseq
- print sseq
- self.assertEqual(tseq,sseq)
- main()
+import nose, nose.tools as nt
+
+def test_sorted():
+ seq = range(10)
+ sseq = qsort(seq)
+ nt.assert_equal(seq,sseq)
+
+def test_random():
+ tseq = range(10)
+ rseq = range(10)
+ random.shuffle(rseq)
+ sseq = qsort(rseq)
+ nt.assert_equal(tseq,sseq)
+
+# If called from the command line, run all the tests
+if __name__ == '__main__':
+ # This call form is ipython-friendly
+ nose.runmodule(argv=['-s','--with-doctest'],
+ exit=False)
Modified: trunk/py4science/examples/skel/fft_imdenoise_skel.py
===================================================================
--- trunk/py4science/examples/skel/fft_imdenoise_skel.py 2008-08-18 21:06:56 UTC (rev 6043)
+++ trunk/py4science/examples/skel/fft_imdenoise_skel.py 2008-08-19 09:35:03 UTC (rev 6044)
@@ -1,10 +1,11 @@
#!/usr/bin/env python
"""Image denoising example using 2-dimensional FFT."""
-import numpy as N
-import pylab as P
-import scipy as S
+XXX = None # a sentinel for missing pieces
+import numpy as np
+from matplotlib import pyplot as plt
+
def mag_phase(F):
"""Return magnitude and phase components of spectrum F."""
@@ -13,7 +14,7 @@
def plot_spectrum(F, amplify=1000):
"""Normalise, amplify and plot an amplitude spectrum."""
- M = # XXX use mag_phase to get the magnitude...
+ M = XXX # use mag_phase to get the magnitude...
# XXX Now, rescale M by amplify/maximum_of_M. Numpy arrays can be scaled
# in-place with ARR *= number. For the max of an array, look for its max
@@ -25,56 +26,58 @@
# Display: this one already works, if you did everything right with M
- P.imshow(M, P.cm.Blues)
+ plt.imshow(M, plt.cm.Blues)
-# 'main' script
+if __name__ == '__main__':
+ im = XXX # make an image array from the file 'moonlanding.png', using the
+ # pylab imread() function. You will need to just extract the red
+ # channel from the MxNx4 RGBA matrix to represent the grayscale
+ # intensities
-im = # XXX make an image array from the file 'moonlanding.png', using the
- # pylab imread() function. You will need to just extract the red
- # channel from the MxNx4 RGBA matrix to represent the grayscale
- # intensities
+ F = XXX # Compute the 2d FFT of the input image. Look for a 2-d FFT in
+ # np.fft.
-F = # Compute the 2d FFT of the input image. Look for a 2-d FFT in N.fft.
+ # Define the fraction of coefficients (in each direction) we keep
+ keep_fraction = 0.1
-# Define the fraction of coefficients (in each direction) we keep
-keep_fraction = 0.1
+ # XXX Call ff a copy of the original transform. Numpy arrays have a copy
+ # method for this purpose.
-# XXX Call ff a copy of the original transform. Numpy arrays have a copy method
-# for this purpose.
+ # XXX Set r and c to be the number of rows and columns of the array. Look
+ # for the shape attribute...
-# XXX Set r and c to be the number of rows and columns of the array. Look for
-# the shape attribute...
+ # Set to zero all rows with indices between r*keep_fraction and
+ # r*(1-keep_fraction):
-# Set to zero all rows with indices between r*keep_fraction and
-# r*(1-keep_fraction):
+ # Similarly with the columns:
-# Similarly with the columns:
+ # Reconstruct the denoised image from the filtered spectrum. There's an
+ # inverse 2d fft in the dft module as well. Call the result im_new
-# Reconstruct the denoised image from the filtered spectrum. There's an
-# inverse 2d fft in the dft module as well. Call the result im_new
+ # Show the results.
-# Show the results.
+ # The code below already works, if you did everything above right.
+ plt.figure()
-# The code below already works, if you did everything above right.
-P.figure()
+ plt.subplot(221)
+ plt.title('Original image')
+ plt.imshow(im, plt.cm.gray)
-P.subplot(221)
-P.title('Original image')
-P.imshow(im, P.cm.gray)
+ plt.subplot(222)
+ plt.title('Fourier transform')
+ plot_spectrum(F)
-P.subplot(222)
-P.title('Fourier transform')
-plot_spectrum(F)
+ plt.subplot(224)
+ plt.title('Filtered Spectrum')
+ plot_spectrum(ff)
-P.subplot(224)
-P.title('Filtered Spectrum')
-plot_spectrum(ff)
+ plt.subplot(223)
+ plt.title('Reconstructed Image')
+ plt.imshow(im_new, plt.cm.gray)
-P.subplot(223)
-P.title('Reconstructed Image')
-P.imshow(im_new, P.cm.gray)
-
-P.show()
+ # Adjust the spacing between subplots for readability
+ plt.subplots_adjust(hspace=0.32)
+ plt.show()
Modified: trunk/py4science/examples/skel/qsort_skel.py
===================================================================
--- trunk/py4science/examples/skel/qsort_skel.py 2008-08-18 21:06:56 UTC (rev 6043)
+++ trunk/py4science/examples/skel/qsort_skel.py 2008-08-19 09:35:03 UTC (rev 6044)
@@ -1,24 +1,45 @@
-"""Simple quicksort implementation."""
+"""Simple quicksort implementation.
+From http://en.wikipedia.org/wiki/Quicksort:
+
+function quicksort(array)
+ var list less, greater
+ if length(array) ≤ 1
+ return array
+ select and remove a pivot value pivot from array
+ for each x in array
+ if x ≤ pivot then append x to less
+ else append x to greater
+ return concatenate(quicksort(less), pivot, quicksort(greater))
+"""
+
def qsort(lst):
"""Return a sorted copy of the input list."""
raise NotImplementedError
-if __name__ == '__main__':
- from unittest import main, TestCase
- import random
+#-----------------------------------------------------------------------------
+# Tests
+#-----------------------------------------------------------------------------
+import random
- class qsortTestCase(TestCase):
- def test_sorted(self):
- seq = range(10)
- sseq = qsort(seq)
- self.assertEqual(seq,sseq)
+import nose.tools as nt
- def test_random(self):
- tseq = range(10)
- rseq = range(10)
- random.shuffle(rseq)
- sseq = qsort(rseq)
- self.assertEqual(tseq,sseq)
- main()
+def test_sorted():
+ seq = range(10)
+ sseq = qsort(seq)
+ nt.assert_equal(seq,sseq)
+
+def test_random():
+ tseq = range(10)
+ rseq = range(10)
+ random.shuffle(rseq)
+ sseq = qsort(rseq)
+ nt.assert_equal(tseq,sseq)
+
+if __name__ == '__main__':
+ # From the command line, run the test suite
+ import nose
+ # This call form is ipython-friendly
+ nose.runmodule(argv=['-s','--with-doctest'],
+ exit=False)
Modified: trunk/py4science/examples/skel/trapezoid_skel.py
===================================================================
--- trunk/py4science/examples/skel/trapezoid_skel.py 2008-08-18 21:06:56 UTC (rev 6043)
+++ trunk/py4science/examples/skel/trapezoid_skel.py 2008-08-19 09:35:03 UTC (rev 6044)
@@ -39,29 +39,32 @@
# x?
raise NotImplementedError
-if __name__ == '__main__':
- # Simple tests for trapezoid integrator, when this module is called as a
- # script from the command line.
- import unittest
- import numpy.testing as ntest
+#-----------------------------------------------------------------------------
+# Tests
+#-----------------------------------------------------------------------------
+import nose, nose.tools as nt
+import numpy.testing as nptest
- def square(x): return x**2
+def square(x): return x**2
- class trapzTestCase(unittest.TestCase):
- def test_err(self):
- self.assertRaises(ValueError,trapz,range(2),range(3))
+def test_err():
+ nt.assert_raises(ValueError,trapz,range(2),range(3))
- def test_call(self):
- x = N.linspace(0,1,100)
- y = N.array(map(square,x))
- ntest.assert_almost_equal(trapz(x,y),1./3,4)
+def test_call():
+ x = np.linspace(0,1,100)
+ y = np.array(map(square,x))
+ nptest.assert_almost_equal(trapz(x,y),1./3,4)
- class trapzfTestCase(unittest.TestCase):
- def test_square(self):
- ntest.assert_almost_equal(trapzf(square,0,1),1./3,4)
+def test_square():
+ nptest.assert_almost_equal(trapzf(square,0,1),1./3,4)
- def test_square2(self):
- ntest.assert_almost_equal(trapzf(square,0,3,350),9.0,4)
+def test_square2():
+ nptest.assert_almost_equal(trapzf(square,0,3,350),9.0,4)
- unittest.main()
+
+# If called from the command line, run all the tests
+if __name__ == '__main__':
+ # This call form is ipython-friendly
+ nose.runmodule(argv=['-s','--with-doctest'],
+ exit=False)
Modified: trunk/py4science/examples/skel/wallis_pi_skel.py
===================================================================
--- trunk/py4science/examples/skel/wallis_pi_skel.py 2008-08-18 21:06:56 UTC (rev 6043)
+++ trunk/py4science/examples/skel/wallis_pi_skel.py 2008-08-19 09:35:03 UTC (rev 6044)
@@ -8,6 +8,8 @@
from decimal import Decimal
+XXX = None # a sentinel for missing pieces
+
def pi(n):
"""Compute pi using n terms of Wallis' product.
@@ -15,7 +17,7 @@
pi(n) = 2 \prod_{i=1}^{n}\frac{4i^2}{4i^2-1}."""
- XXX
+ raise NotImplementedError
# This part only executes when the code is run as a script, not when it is
# imported as a library
Modified: trunk/py4science/examples/skel/wordfreqs_skel.py
===================================================================
--- trunk/py4science/examples/skel/wordfreqs_skel.py 2008-08-18 21:06:56 UTC (rev 6043)
+++ trunk/py4science/examples/skel/wordfreqs_skel.py 2008-08-19 09:35:03 UTC (rev 6044)
@@ -1,10 +1,14 @@
#!/usr/bin/env python
"""Word frequencies - count word frequencies in a string."""
+XXX = None # a sentinel for missing pieces
+
def word_freq(text):
"""Return a dictionary of word frequencies for the given text."""
- # XXX you need to write this
+ # you need to write this
+ return XXX
+
def print_vk(lst):
"""Print a list of value/key pairs nicely formatted in key/value order."""
@@ -17,6 +21,7 @@
for v,k in lst:
print fmt % (k,v)
+
def freq_summ(freqs,n=10):
"""Print a simple summary of a word frequencies dictionary.
@@ -26,10 +31,10 @@
Optional inputs:
- n: the number of items to print"""
- words,counts = # XXX look at the keys and values methods of dicts
+ words,counts = XXX # look at the keys and values methods of dicts
# Sort by count
- items = # XXX think of a list, look at zip() and think of sort()
+ items = XXX # think of a list, look at zip() and think of sort()
print 'Number of words:',len(freqs)
print
@@ -39,10 +44,12 @@
print '%d most frequent words:' % n
print_vk(items[-n:])
+
if __name__ == '__main__':
- text = # XXX
- # You need to read the contents of the file HISTORY.gz. Do NOT unzip it
- # manually, look at the gzip module from the standard library and the
- # read() method of file objects.
+ # You need to read the contents of the file HISTORY.gz and store it in the
+ # variable named 'text'. Do NOT unzip it manually, look at the gzip module
+ # from the standard library and the read() method of file objects.
+ text = XXX
+
freqs = word_freq(text)
freq_summ(freqs,20)
Modified: trunk/py4science/examples/trapezoid.py
===================================================================
--- trunk/py4science/examples/trapezoid.py 2008-08-18 21:06:56 UTC (rev 6043)
+++ trunk/py4science/examples/trapezoid.py 2008-08-19 09:35:03 UTC (rev 6044)
@@ -1,7 +1,7 @@
#!/usr/bin/env python
"""Simple trapezoid-rule integrator."""
-import numpy as N
+import numpy as np
def trapz(x, y):
"""Simple trapezoid integrator for sequence-based innput.
@@ -40,43 +40,41 @@
- The value of the trapezoid-rule approximation to the integral."""
# Generate an equally spaced grid to sample the function at
- x = N.linspace(a,b,npts)
+ x = np.linspace(a,b,npts)
# For an equispaced grid, the x spacing can just be read off from the first
# two points and factored out of the summation.
dx = x[1]-x[0]
# Sample the input function at all values of x
- y = N.array(map(f,x))
+ y = np.array(map(f,x))
# Compute the trapezoid rule sum for the final result
return 0.5*dx*(y[1:]+y[:-1]).sum()
-if __name__ == '__main__':
- # Simple tests for trapezoid integrator, when this module is called as a
- # script from the command line. From ipython, run it via:
- #
- # run -e trapezoid
- #
- # so that ipython ignores the SystemExit exception automatically raised by
- # the unittest module at the end.
- import unittest
- import numpy.testing as ntest
+#-----------------------------------------------------------------------------
+# Tests
+#-----------------------------------------------------------------------------
+import nose, nose.tools as nt
+import numpy.testing as nptest
- def square(x): return x**2
+def square(x): return x**2
- class trapzTestCase(unittest.TestCase):
- def test_err(self):
- self.assertRaises(ValueError,trapz,range(2),range(3))
+def test_err():
+ nt.assert_raises(ValueError,trapz,range(2),range(3))
- def test_call(self):
- x = N.linspace(0,1,100)
- y = N.array(map(square,x))
- ntest.assert_almost_equal(trapz(x,y),1./3,4)
+def test_call():
+ x = np.linspace(0,1,100)
+ y = np.array(map(square,x))
+ nptest.assert_almost_equal(trapz(x,y),1./3,4)
- class trapzfTestCase(unittest.TestCase):
- def test_square(self):
- ntest.assert_almost_equal(trapzf(square,0,1),1./3,4)
+def test_square():
+ nptest.assert_almost_equal(trapzf(square,0,1),1./3,4)
- def test_square2(self):
- ntest.assert_almost_equal(trapzf(square,0,3,350),9.0,4)
+def test_square2():
+ nptest.assert_almost_equal(trapzf(square,0,3,350),9.0,4)
- unittest.main()
+
+# If called from the command line, run all the tests
+if __name__ == '__main__':
+ # This call form is ipython-friendly
+ nose.runmodule(argv=['-s','--with-doctest'],
+ exit=False)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|