From: Andy R. Terrel <[EMAIL PROTECTED]>

---
 examples/advanced/fem.py                |   66 ++++++++++++++----
 examples/advanced/fem_test.py           |   40 -----------
 examples/advanced/gibbs_phenomenon.py   |   57 ++++++++-------
 examples/advanced/pidigits.py           |   14 +++-
 examples/advanced/plotting.py           |    8 +-
 examples/advanced/qft.py                |  109 +++++++++++++++--------------
 examples/advanced/relativity.py         |   30 ++++++++-
 examples/advanced/tensors.py            |   69 ++++++++++---------
 examples/all.py                         |  116 +++++++++++++++++++++++++++++++
 examples/beginner/basic.py              |   21 ++++--
 examples/beginner/differentiation.py    |   27 +++++---
 examples/beginner/expansion.py          |   22 ++++--
 examples/beginner/functions.py          |   28 +++++---
 examples/beginner/limits_examples.py    |   46 ++++++++----
 examples/beginner/plotting_nice_plot.py |   16 ++++-
 examples/beginner/precision.py          |   14 +++-
 examples/beginner/print_pretty.py       |   49 +++++++------
 examples/beginner/series.py             |   26 +++++---
 examples/beginner/substitution.py       |   32 ++++++---
 examples/iam_sympy_example.py           |   12 ---
 examples/intermediate/mplot2d.py        |   13 +++-
 examples/intermediate/mplot3d.py        |   13 +++-
 examples/intermediate/print_gtk.py      |   19 +++--
 examples/intermediate/trees.py          |   14 ++--
 examples/intermediate/vandermonde.py    |   42 +++++++-----
 25 files changed, 587 insertions(+), 316 deletions(-)
 delete mode 100755 examples/advanced/fem_test.py
 create mode 100755 examples/all.py
 delete mode 100644 examples/iam_sympy_example.py

diff --git a/examples/advanced/fem.py b/examples/advanced/fem.py
index aad5d32..ceab838 100644
--- a/examples/advanced/fem.py
+++ b/examples/advanced/fem.py
@@ -1,5 +1,19 @@
+"""FEM library
+
+Demonstrates some simple finite element definitions, and computes a mass matrix
+
+$ python fem_test.py
+[  1/60,     0, -1/360,     0, -1/90, -1/360]
+[     0,  4/45,      0,  2/45,  2/45,  -1/90]
+[-1/360,     0,   1/60, -1/90,     0, -1/360]
+[     0,  2/45,  -1/90,  4/45,  2/45,      0]
+[ -1/90,  2/45,      0,  2/45,  4/45,      0]
+[-1/360, -1/90, -1/360,     0,     0,   1/60]
+
+"""
+
 from sympy import symbols, Symbol, factorial, Rational, zeros, div, eye, \
-        integrate
+        integrate, diff, pprint
 
 x, y, z = symbols('x y z')
 
@@ -43,10 +57,8 @@ def bernstein_space(order, nsd):
            for o2 in range(0,order+1):
                if o1 + o2  == order:
                    aij = Symbol("a_%d_%d" % (o1,o2))
-                   sum += aij*binomial(order,o1)*pow(b1, o1)*pow(b2,
-o2)
-                   basis.append(binomial(order,o1)*pow(b1,
-o1)*pow(b2, o2))
+                   sum += aij*binomial(order,o1)*pow(b1, o1)*pow(b2, o2)
+                   basis.append(binomial(order,o1)*pow(b1, o1)*pow(b2, o2))
                    coeff.append(aij)
 
 
@@ -57,11 +69,9 @@ o1)*pow(b2, o2))
                for o3 in range(0,order+1):
                    if o1 + o2 + o3 == order:
                        aij = Symbol("a_%d_%d_%d" % (o1,o2,o3))
-                       fac = factorial(order)/ 
(factorial(o1)*factorial(o2)*factorial(o3))
-                       sum += aij*fac*pow(b1, o1)*pow(b2, o2)*pow(b3,
-o3)
-                       basis.append(fac*pow(b1, o1)*pow(b2,
-o2)*pow(b3, o3))
+                       fac = factorial(order) / 
(factorial(o1)*factorial(o2)*factorial(o3))
+                       sum += aij*fac*pow(b1, o1)*pow(b2, o2)*pow(b3, o3)
+                       basis.append(fac*pow(b1, o1)*pow(b2, o2)*pow(b3, o3))
                        coeff.append(aij)
 
    if nsd == 3:
@@ -71,12 +81,10 @@ o2)*pow(b3, o3))
                for o3 in range(0,order+1):
                    for o4 in range(0,order+1):
                        if o1 + o2 + o3 + o4 == order:
-                           aij = Symbol("a_%d_%d_%d_%d" %
-(o1,o2,o3,o4))
+                           aij = Symbol("a_%d_%d_%d_%d" % (o1,o2,o3,o4))
                            fac = factorial(order)/ 
(factorial(o1)*factorial(o2)*factorial(o3)*factorial(o4))
                            sum += aij*fac*pow(b1, o1)*pow(b2, o2)*pow(b3, 
o3)*pow(b4, o4)
-                           basis.append(fac*pow(b1, o1)*pow(b2,
-o2)*pow(b3, o3)*pow(b4, o4))
+                           basis.append(fac*pow(b1, o1)*pow(b2, o2)*pow(b3, 
o3)*pow(b4, o4))
                            coeff.append(aij)
 
 
@@ -166,3 +174,33 @@ class Lagrange:
            N.append(Ni)
 
        self.N = N
+
+
+def main():
+   t = ReferenceSimplex(2)
+   fe = Lagrange(2,2)
+
+   u = 0
+   #compute u = sum_i u_i N_i
+   us = []
+   for i in range(0, fe.nbf()):
+      ui = Symbol("u_%d" % i)
+      us.append(ui)
+      u += ui*fe.N[i]
+
+
+   J = zeros(fe.nbf())
+   for i in range(0, fe.nbf()):
+      Fi = u*fe.N[i]
+      print Fi
+      for j in range(0, fe.nbf()):
+         uj = us[j]
+         integrands = diff(Fi, uj)
+         print integrands
+         J[j,i] = t.integrate(integrands)
+
+   pprint(J)
+
+
+if __name__ == "__main__":
+   main()
diff --git a/examples/advanced/fem_test.py b/examples/advanced/fem_test.py
deleted file mode 100755
index ba68f66..0000000
--- a/examples/advanced/fem_test.py
+++ /dev/null
@@ -1,40 +0,0 @@
-#!/usr/bin/env python
-import iam_sympy_example
-
-"""
-Go to the sympy root directory and execute:
-
-$ python examples/fem_test.py
-[  1/60,     0, -1/360,     0, -1/90, -1/360]
-[     0,  4/45,      0,  2/45,  2/45,  -1/90]
-[-1/360,     0,   1/60, -1/90,     0, -1/360]
-[     0,  2/45,  -1/90,  4/45,  2/45,      0]
-[ -1/90,  2/45,      0,  2/45,  4/45,      0]
-[-1/360, -1/90, -1/360,     0,     0,   1/60]
-"""
-
-from sympy import Symbol, zeros, diff, pprint
-from fem import ReferenceSimplex, Lagrange
-
-t = ReferenceSimplex(2)
-fe = Lagrange(2,2)
-
-u = 0
-#compute u = sum_i u_i N_i
-us = []
-for i in range(0, fe.nbf()):
-   ui = Symbol("u_%d" % i)
-   us.append(ui)
-   u += ui*fe.N[i]
-
-
-J = zeros(fe.nbf())
-for i in range(0, fe.nbf()):
-   Fi = u*fe.N[i]
-   for j in range(0, fe.nbf()):
-       uj = us[j]
-       integrands = diff(Fi, uj)
-       J[j,i] = t.integrate(integrands)
-
-
-pprint(J)
diff --git a/examples/advanced/gibbs_phenomenon.py 
b/examples/advanced/gibbs_phenomenon.py
index 64f8c02..e12a074 100755
--- a/examples/advanced/gibbs_phenomenon.py
+++ b/examples/advanced/gibbs_phenomenon.py
@@ -8,9 +8,10 @@ It also calculates the Wilbraham-Gibbs constant by two 
approaches:
 1) calculating the fourier series of the step function and determining the
 first maximum.
 2) evaluating the integral for si(pi).
-"""
 
-import iam_sympy_example
+See:
+ * http://en.wikipedia.org/wiki/Gibbs_phenomena
+"""
 
 from sympy import var, sqrt, integrate, conjugate, seterr, abs, pprint, I, pi,\
         sin, cos, sign, Plot, msolve, lambdify, Integral, S
@@ -70,24 +71,15 @@ def l2_gram_schmidt(list, lim):
         r.append(v/v_norm)
     return r
 
-#l = l2_gram_schmidt([1, cos(x), sin(x), cos(2*x), sin(2*x)], (x, -pi, pi))
-#l = l2_gram_schmidt([1, cos(x), sin(x)], (x, -pi, pi))
-# the code below is equivalen to l2_gram_schmidt(), but faster:
-l = [1/sqrt(2)]
-for i in range(1, 100):
-    l.append(cos(i*x))
-    l.append(sin(i*x))
-l = [f/sqrt(pi) for f in l]
-
 def integ(f):
     return integrate(f, (x, -pi, 0)) + integrate(-f, (x, 0, pi))
 
-def series(l):
+def series(L):
     """
     Normalizes the series.
     """
     r = 0
-    for b in l:
+    for b in L:
         r += integ(b)*b
     return r
 
@@ -116,16 +108,29 @@ def msolve(f, x):
             x_min = x0
     return x0
 
-f = series(l)
-print "Fourier series of the step function"
-pprint(f)
-#Plot(f.diff(x), [x, -5, 5, 3000])
-x0 = msolve(f.diff(x), x)
-
-print "x-value of the maximum:", x0
-max = f.subs(x, x0).evalf()
-print "y-value of the maximum:", max
-g = max*pi/2
-print "Wilbraham-Gibbs constant        :", g.evalf()
-print "Wilbraham-Gibbs constant (exact):", \
-    Integral(sin(x)/x, (x, 0, pi)).evalf()
+def main():
+    #L = l2_gram_schmidt([1, cos(x), sin(x), cos(2*x), sin(2*x)], (x, -pi, pi))
+    #L = l2_gram_schmidt([1, cos(x), sin(x)], (x, -pi, pi))
+    # the code below is equivalen to l2_gram_schmidt(), but faster:
+    L = [1/sqrt(2)]
+    for i in range(1, 100):
+        L.append(cos(i*x))
+        L.append(sin(i*x))
+    L = [f/sqrt(pi) for f in L]
+
+    f = series(L)
+    print "Fourier series of the step function"
+    pprint(f)
+    #Plot(f.diff(x), [x, -5, 5, 3000])
+    x0 = msolve(f.diff(x), x)
+
+    print "x-value of the maximum:", x0
+    max = f.subs(x, x0).evalf()
+    print "y-value of the maximum:", max
+    g = max*pi/2
+    print "Wilbraham-Gibbs constant        :", g.evalf()
+    print "Wilbraham-Gibbs constant (exact):", \
+        Integral(sin(x)/x, (x, 0, pi)).evalf()
+
+if __name__ == "__main__":
+    main()
diff --git a/examples/advanced/pidigits.py b/examples/advanced/pidigits.py
index 5c6b793..60b59ca 100755
--- a/examples/advanced/pidigits.py
+++ b/examples/advanced/pidigits.py
@@ -1,5 +1,8 @@
 #!/usr/bin/env python
-import iam_sympy_example
+"""Pi digits example
+
+Example shows the computation of the digits of pi.
+"""
 
 #from sympy.numerics import *
 #from sympy.numerics.utils_ import *
@@ -68,4 +71,11 @@ def interactive():
     calculateit(pi_float, base, digits, tofile)
     raw_input("\nPress enter to close this script.")
 
-interactive()
+def main():
+    base = 10
+    digits = 10000
+    tofile = None
+    calculateit(pi_float, base, digits, tofile)
+
+if __name__ == "__main__":
+    interactive()
diff --git a/examples/advanced/plotting.py b/examples/advanced/plotting.py
index ca2b8d4..7d98794 100755
--- a/examples/advanced/plotting.py
+++ b/examples/advanced/plotting.py
@@ -1,6 +1,4 @@
 #!/usr/bin/env python
-import iam_sympy_example
-
 """
 Plotting Examples
 
@@ -17,8 +15,7 @@ from sympy import sin, cos, pi, sqrt, exp
 
 from time import sleep, clock
 
-if __name__ == "__main__":
-
+def main():
     x,y,z = symbols('xyz')
 
     # toggle axes visibility with F5, colors with F6
@@ -219,3 +216,6 @@ if __name__ == "__main__":
         #cProfile.run("p.append(x**2+y**2)", 'plot.profile2')
         #s = Stats('plot.profile2')
         #s.sort_stats('cumulative').print_stats(20)
+
+if __name__ == "__main__":
+    main()
diff --git a/examples/advanced/qft.py b/examples/advanced/qft.py
index 36f6269..9586ecd 100755
--- a/examples/advanced/qft.py
+++ b/examples/advanced/qft.py
@@ -1,5 +1,8 @@
 #!/usr/bin/env python
-import iam_sympy_example
+"""Quantum field theory example
+
+* http://en.wikipedia.org/wiki/Quantum_field_theory
+"""
 
 from sympy import Basic,exp,Symbol,sin,Rational,I,Mul, Matrix, \
     ones, sqrt, pprint, simplify, trim, Eq, sympify
@@ -59,63 +62,67 @@ def Tr(M):
         t+=M[i,i]
     return t
 
-a=Symbol("a", real=True)
-b=Symbol("b", real=True)
-c=Symbol("c", real=True)
+def xprint(lhs, rhs):
+    pprint( Eq(sympify(lhs), rhs ) )
 
-p = (a,b,c)
+def main():
+    a=Symbol("a", real=True)
+    b=Symbol("b", real=True)
+    c=Symbol("c", real=True)
 
-assert u(p, 1).D * u(p, 2) == Matrix(1, 1, [0])
-assert u(p, 2).D * u(p, 1) == Matrix(1, 1, [0])
+    p = (a,b,c)
 
-p1,p2,p3 =[Symbol(x, real=True) for x in ["p1","p2","p3"]]
-pp1,pp2,pp3 =[Symbol(x, real=True) for x in ["pp1","pp2","pp3"]]
-k1,k2,k3 =[Symbol(x, real=True) for x in ["k1","k2","k3"]]
-kp1,kp2,kp3 =[Symbol(x, real=True) for x in ["kp1","kp2","kp3"]]
+    assert u(p, 1).D * u(p, 2) == Matrix(1, 1, [0])
+    assert u(p, 2).D * u(p, 1) == Matrix(1, 1, [0])
 
-p = (p1,p2,p3)
-pp = (pp1,pp2,pp3)
+    p1,p2,p3 =[Symbol(x, real=True) for x in ["p1","p2","p3"]]
+    pp1,pp2,pp3 =[Symbol(x, real=True) for x in ["pp1","pp2","pp3"]]
+    k1,k2,k3 =[Symbol(x, real=True) for x in ["k1","k2","k3"]]
+    kp1,kp2,kp3 =[Symbol(x, real=True) for x in ["kp1","kp2","kp3"]]
 
-k = (k1,k2,k3)
-kp = (kp1,kp2,kp3)
+    p = (p1,p2,p3)
+    pp = (pp1,pp2,pp3)
 
-mu = Symbol("mu")
+    k = (k1,k2,k3)
+    kp = (kp1,kp2,kp3)
 
-e = (pslash(p)+m*ones(4))*(pslash(k)-m*ones(4))
-f = pslash(p)+m*ones(4)
-g = pslash(p)-m*ones(4)
+    mu = Symbol("mu")
 
+    e = (pslash(p)+m*ones(4))*(pslash(k)-m*ones(4))
+    f = pslash(p)+m*ones(4)
+    g = pslash(p)-m*ones(4)
 
-def xprint(lhs, rhs):
-    pprint( Eq(sympify(lhs), rhs ) )
 
-#pprint(e)
-xprint( 'Tr(f*g)', Tr(f*g) )
-#print Tr(pslash(p) * pslash(k)).expand()
-
-M0 = [ ( v(pp, 1).D * mgamma(mu) * u(p, 1) ) * ( u(k, 1).D * mgamma(mu,True) * 
\
-        v(kp, 1) ) for mu in range(4)]
-M = M0[0]+M0[1]+M0[2]+M0[3]
-M = M[0]
-assert isinstance(M, Basic)
-#print M
-#print trim(M)
-
-d=Symbol("d", real=True) #d=E+m
-
-xprint('M', M)
-print "-"*40
-M = ((M.subs(E,d-m)).expand() * d**2 ).expand()
-xprint('M2', 1/(E+m)**2 * M)
-print "-"*40
-x,y= M.as_real_imag()
-xprint('Re(M)', x)
-xprint('Im(M)', y)
-e = x**2+y**2
-xprint('abs(M)**2', e)
-print "-"*40
-xprint('Expand(abs(M)**2)', e.expand())
-
-#print Pauli(1)*Pauli(1)
-#print Pauli(1)**2
-#print Pauli(1)*2*Pauli(1)
+    #pprint(e)
+    xprint( 'Tr(f*g)', Tr(f*g) )
+    #print Tr(pslash(p) * pslash(k)).expand()
+
+    M0 = [ ( v(pp, 1).D * mgamma(mu) * u(p, 1) ) * ( u(k, 1).D * 
mgamma(mu,True) * \
+             v(kp, 1) ) for mu in range(4)]
+    M = M0[0]+M0[1]+M0[2]+M0[3]
+    M = M[0]
+    assert isinstance(M, Basic)
+    #print M
+    #print trim(M)
+
+    d=Symbol("d", real=True) #d=E+m
+
+    xprint('M', M)
+    print "-"*40
+    M = ((M.subs(E,d-m)).expand() * d**2 ).expand()
+    xprint('M2', 1/(E+m)**2 * M)
+    print "-"*40
+    x,y= M.as_real_imag()
+    xprint('Re(M)', x)
+    xprint('Im(M)', y)
+    e = x**2+y**2
+    xprint('abs(M)**2', e)
+    print "-"*40
+    xprint('Expand(abs(M)**2)', e.expand())
+
+    #print Pauli(1)*Pauli(1)
+    #print Pauli(1)**2
+    #print Pauli(1)*2*Pauli(1)
+
+if __name__ == "__main__":
+    main()
diff --git a/examples/advanced/relativity.py b/examples/advanced/relativity.py
index f884ed2..12d43da 100755
--- a/examples/advanced/relativity.py
+++ b/examples/advanced/relativity.py
@@ -1,5 +1,4 @@
 #!/usr/bin/env python
-import iam_sympy_example
 
 """
 This example calculates the Ricci tensor from the metric and does this
@@ -139,6 +138,35 @@ def pprint_Gamma_udd(i,k,l):
 def pprint_Rmn_dd(i,j):
     pprint( Eq(Symbol('R_%i%i' % (i,j)), Rmn.dd(i,j))    )
 
+
+# from Differential Equations example
+def eq1():
+    r = Symbol("r")
+    e = Rmn.dd(0,0)
+    e = e.subs(nu(r), -lam(r))
+    print dsolve(e, [lam(r)])
+
+def eq2():
+    r = Symbol("r")
+    e = Rmn.dd(1,1)
+    C = Symbol("CC")
+    e = e.subs(nu(r), -lam(r))
+    print dsolve(e, [lam(r)])
+
+def eq3():
+    r = Symbol("r")
+    e = Rmn.dd(2,2)
+    e = e.subs(nu(r), -lam(r))
+    print dsolve(e, [lam(r)])
+
+def eq4():
+    r = Symbol("r")
+    e = Rmn.dd(3,3)
+    e = e.subs(nu(r), -lam(r))
+    print dsolve(e, [lam(r)])
+
+
+
 def main():
 
     print "Initial metric:"
diff --git a/examples/advanced/tensors.py b/examples/advanced/tensors.py
index 4eda747..71d8d8d 100755
--- a/examples/advanced/tensors.py
+++ b/examples/advanced/tensors.py
@@ -1,7 +1,6 @@
 #!/usr/bin/env python
-import iam_sympy_example
+""" Tensor example
 
-"""
 http://www.lncc.br/~portugal/Canon.html
 http://www.lncc.br/~portugal/Invar.html
 http://www.ginac.de/tutorial/Indexed-objects.html
@@ -50,34 +49,38 @@ class Idx(Symbol):
     def values(self):
         return range(self._dim)
 
-t=Symbol("t")
-r=Symbol("r")
-theta=Symbol(r"\theta")
-phi=Symbol(r"\phi")
-
-class nu(Function):
-    pass
-class lam(Function):
-    pass
-
-gdd=Matrix((
-    (-exp(nu(r)),0,0,0),
-    (0, exp(lam(r)), 0, 0),
-    (0, 0, r**2, 0),
-    (0, 0, 0, r**2*sin(theta)**2)
-    ))
-
-mu = Idx("mu")
-nu = Idx("mu")
-i = Idx("i")
-m = Idx("m")
-k = Idx("k")
-l = Idx("l")
-g = Indexed(Symbol("A"), [mu,nu])
-Chr = g[i.up, m.up]/2 * (g[m.dn, k.dn].diff(l.up) + g[m.dn,l.dn].diff(k.up) \
-        - g[k.dn, l.dn].diff(m.up))
-#G = g.uu(i,m)/2 * (g.dd(m,k).diff(x[l])+g.dd(m,l).diff(x[k]) \
-#                    - g.dd(k,l).diff(x[m]))
-
-print g
-print Chr
+def main():
+    t=Symbol("t")
+    r=Symbol("r")
+    theta=Symbol(r"\theta")
+    phi=Symbol(r"\phi")
+
+    class nu(Function):
+        pass
+    class lam(Function):
+        pass
+
+    gdd=Matrix((
+            (-exp(nu(r)),0,0,0),
+            (0, exp(lam(r)), 0, 0),
+            (0, 0, r**2, 0),
+            (0, 0, 0, r**2*sin(theta)**2)
+            ))
+
+    mu = Idx("mu")
+    nu = Idx("mu")
+    i = Idx("i")
+    m = Idx("m")
+    k = Idx("k")
+    l = Idx("l")
+    g = Indexed(Symbol("A"), [mu,nu])
+    Chr = g[i.up, m.up]/2 * (g[m.dn, k.dn].diff(l.up) + 
g[m.dn,l.dn].diff(k.up) \
+                                 - g[k.dn, l.dn].diff(m.up))
+    #G = g.uu(i,m)/2 * (g.dd(m,k).diff(x[l])+g.dd(m,l).diff(x[k]) \
+    #                    - g.dd(k,l).diff(x[m]))
+
+    print g
+    print Chr
+
+if __name__ == "__main__":
+    main()
diff --git a/examples/all.py b/examples/all.py
new file mode 100755
index 0000000..4e1c80f
--- /dev/null
+++ b/examples/all.py
@@ -0,0 +1,116 @@
+#!/usr/bin/env python
+"""Runner script
+
+Runs all the known working examples.
+
+ Usage:
+
+ When all examples run:
+   $ ./all > out
+   $
+
+ When some examples fail:
+   $ ./all > out
+   Traceback (most recent call last):
+     File "./limits_examples.py", line 17, in ?
+   [...]
+   $
+
+ Obviously, we want to achieve the first result.
+"""
+
+import imp
+import os
+import sys
+import traceback
+
+WORKING_EXAMPLES = [
+    "beginner.basic",
+    "beginner.differentiation",
+    "beginner.expansion",
+    "beginner.functions",
+    "beginner.limits_examples",
+    #"beginner.plotting_nice_plot",
+    "beginner.precision",
+    "beginner.print_pretty",
+    "beginner.series",
+    "beginner.substitution",
+    "beginner.expansion",
+    #"intermediate.differential_equations",
+    #"intermediate.mplot2d",
+    #"intermediate.mplot3d",
+    #"intermediate.print_gtk",
+    "intermediate.trees",
+    "intermediate.vandermonde",
+    "advanced.fem",
+    "advanced.gibbs_phenomenon",
+    #"advanced.pidigits",
+    #"advanced.plotting",
+    #"advanced.qft",
+    "advanced.relativity",
+    #"advanced.tensors",
+    ]
+
+example_dir = os.path.dirname(__file__)
+example_modules = []
+
+def __import__(name, globals=None, locals=None, fromlist=None):
+    """An alternative to the import function so that we can import
+    modules defined as strings.
+
+    This code was taken from: http://docs.python.org/lib/examples-imp.html
+    """
+    # Fast path: see if the module has already been imported.
+    try:
+        return sys.modules[name]
+    except KeyError:
+        pass
+
+    # If any of the following calls raises an exception,
+    # there's a problem we can't handle -- let the caller handle it.
+    module_name = name.split('.')[-1]
+    module_path = os.path.join(example_dir, *name.split('.')[:-1])
+
+    fp, pathname, description = imp.find_module(module_name, [module_path])
+
+    try:
+        return imp.load_module(module_name, fp, pathname, description)
+    finally:
+        # Since we may exit via an exception, close fp explicitly.
+        if fp:
+            fp.close()
+
+def load_example_modules ():
+    """Loads modules based upon the given package name"""
+    global example_modules
+
+    for entry in WORKING_EXAMPLES:
+        mod = __import__(entry)
+        example_modules.append(mod)
+
+def setup_path ():
+    """Put example directories in the path to load easily"""
+    sys.path.insert(0,example_dir)
+
+def run_examples():
+    success = []
+    fail = []
+    for mod in example_modules:
+        print "="*79
+        print "Running: ", mod.__name__
+        try:
+            mod.main()
+            success.append(mod.__name__)
+        except:
+            traceback.print_exc()
+            fail.append(mod.__name__)
+    print "SUCCESS: ", success
+    print "FAIL: ", fail
+
+def main (*args, **kws):
+    setup_path()
+    load_example_modules()
+    run_examples()
+
+if __name__ == "__main__":
+    main(*sys.argv[1:])
diff --git a/examples/beginner/basic.py b/examples/beginner/basic.py
index 11dae75..5a51544 100755
--- a/examples/beginner/basic.py
+++ b/examples/beginner/basic.py
@@ -1,9 +1,18 @@
 #!/usr/bin/env python
-import iam_sympy_example
+"""Basic example
+
+Demonstrates how to create symbols and print some algebra operations.
+"""
 
 import sympy
-a=sympy.Symbol('a')
-b=sympy.Symbol('b')
-c=sympy.Symbol('c')
-e=( a*b*b+2*b*a*b )**c
-print e
+
+def main():
+    a = sympy.Symbol('a')
+    b = sympy.Symbol('b')
+    c = sympy.Symbol('c')
+    e = ( a*b*b + 2*b*a*b )**c
+
+    print e
+
+if __name__ == "__main__":
+    main()
diff --git a/examples/beginner/differentiation.py 
b/examples/beginner/differentiation.py
index 4ddb533..bcc1b80 100755
--- a/examples/beginner/differentiation.py
+++ b/examples/beginner/differentiation.py
@@ -1,12 +1,21 @@
 #!/usr/bin/env python
-import iam_sympy_example
+"""Differentiation example
+
+Demonstrates some differentiation operations.
+"""
 
 import sympy
-a=sympy.Symbol('a')
-b=sympy.Symbol('b')
-e=(a+2*b)**5
-print e
-print e.diff(a)
-print e.diff(b)
-print e.diff(b).diff(a,3)
-print e.expand().diff(b).diff(a,3)
+
+def main():
+    a = sympy.Symbol('a')
+    b = sympy.Symbol('b')
+    e = (a + 2*b)**5
+
+    print e
+    print e.diff(a)
+    print e.diff(b)
+    print e.diff(b).diff(a, 3)
+    print e.expand().diff(b).diff(a, 3)
+
+if __name__ == "__main__":
+    main()
diff --git a/examples/beginner/expansion.py b/examples/beginner/expansion.py
index 1e56a29..297a838 100755
--- a/examples/beginner/expansion.py
+++ b/examples/beginner/expansion.py
@@ -1,9 +1,17 @@
-#!/usr/bin/env python
-import iam_sympy_example
+"""Expansion Example
+
+Demonstrates how to expand expressions.
+"""
 
 import sympy
-a=sympy.Symbol('a')
-b=sympy.Symbol('b')
-e=(a+b)**5
-print e
-print e.expand()
+
+def main():
+    a = sympy.Symbol('a')
+    b = sympy.Symbol('b')
+    e = (a + b)**5
+
+    print e
+    print e.expand()
+
+if __name__ == "__main__":
+    main(*sys.argv[1:])
diff --git a/examples/beginner/functions.py b/examples/beginner/functions.py
index da12cad..35e7c45 100755
--- a/examples/beginner/functions.py
+++ b/examples/beginner/functions.py
@@ -1,12 +1,22 @@
 #!/usr/bin/env python
-import iam_sympy_example
+"""Functions example
+
+Demonstrates sympy defined functions.
+"""
 
 import sympy
-a=sympy.Symbol('a')
-b=sympy.Symbol('b')
-e=sympy.log((a+b)**5)
-print e
-e=sympy.exp(e)
-print e
-e=sympy.log(sympy.exp((a+b)**5))
-print e
+
+def main():
+    a = sympy.Symbol('a')
+    b = sympy.Symbol('b')
+    e = sympy.log((a + b)**5)
+    print e
+
+    e = sympy.exp(e)
+    print e
+
+    e = sympy.log(sympy.exp((a + b)**5))
+    print e
+
+if __name__ == "__main__":
+    main()
diff --git a/examples/beginner/limits_examples.py 
b/examples/beginner/limits_examples.py
index 7839451..26c0927 100755
--- a/examples/beginner/limits_examples.py
+++ b/examples/beginner/limits_examples.py
@@ -1,23 +1,37 @@
 #!/usr/bin/env python
-import iam_sympy_example
+"""Limits Example
 
-from sympy import exp,log,Symbol,Rational,sin,limit, sqrt,oo
+Demonstrates limits.
+"""
 
-x=Symbol("x")
-a=Symbol("a")
-h=Symbol("h")
+from sympy import exp,log,Symbol,Rational,sin,limit, sqrt,oo
 
 def sqrt3(x):
-    return x**Rational(1,3)
+    return x**Rational(1, 3)
 
 def show(computed, correct):
-    print "computed:",computed,"correct:",correct
-
-show( limit(sqrt(x**2-5*x+6)-x,x,oo) , -Rational(5)/2 )
-#show( limit(x*(sqrt(x**2+1)-x),x,oo) , Rational(1)/2 )
-show( limit(x-sqrt3(x**3-1),x,oo) , Rational(0) )
-show( limit(log(1+exp(x))/x,x,-oo) , Rational(0) )
-show( limit(log(1+exp(x))/x,x,oo) , Rational(1) )
-show( limit(sin(3*x)/x,x,0) , Rational(3) )
-show( limit(sin(5*x)/sin(2*x),x,0) , Rational(5)/2 )
-#show( limit(((x-1)/(x+1))**x,x,oo) , exp(-2))
+    print "computed:", computed, "correct:", correct
+
+def main():
+    x = Symbol("x")
+    a = Symbol("a")
+    h = Symbol("h")
+
+    show( limit(sqrt(x**2 - 5*x + 6) - x, x, oo) , -Rational(5)/2 )
+
+    show( limit(x*(sqrt(x**2 + 1) - x), x, oo) , Rational(1)/2 )
+
+    show( limit(x - sqrt3(x**3 - 1), x, oo) , Rational(0) )
+
+    show( limit(log(1 + exp(x))/x, x, -oo) , Rational(0) )
+
+    show( limit(log(1 + exp(x))/x, x, oo) , Rational(1) )
+
+    show( limit(sin(3*x)/x, x, 0) , Rational(3) )
+
+    show( limit(sin(5*x)/sin(2*x), x, 0) , Rational(5)/2 )
+
+    show( limit(((x - 1)/(x + 1))**x, x, oo) , exp(-2))
+
+if __name__ == "__main__":
+    main()
diff --git a/examples/beginner/plotting_nice_plot.py 
b/examples/beginner/plotting_nice_plot.py
index 753ca6f..f2ff50a 100755
--- a/examples/beginner/plotting_nice_plot.py
+++ b/examples/beginner/plotting_nice_plot.py
@@ -1,8 +1,18 @@
 #!/usr/bin/env python
-import iam_sympy_example
+"""Plotting example
+
+Demonstrates simple plotting.
+"""
 
 from sympy import Symbol, cos, sin, Plot, log, tan
 from sympy.abc import x, y
 
-Plot(cos(x)*sin(y), sin(x)*sin(y), cos(y)+log(tan(y/2))+0.2*x, [x, -0.00,
-    12.4, 40], [y, 0.1, 2, 40])
+def main():
+    fun1 = cos(x)*sin(y)
+    fun2 = sin(x)*sin(y)
+    fun3 = cos(y) + log(tan(y/2)) + 0.2*x
+
+    Plot(fun1, fun2, fun3, [x, -0.00, 12.4, 40], [y, 0.1, 2, 40])
+
+if __name__ == "__main__":
+    main()
diff --git a/examples/beginner/precision.py b/examples/beginner/precision.py
index 49baea1..f7b1f88 100755
--- a/examples/beginner/precision.py
+++ b/examples/beginner/precision.py
@@ -1,6 +1,14 @@
 #!/usr/bin/env python
-import iam_sympy_example
+"""Precision Example
+
+Demonstrates SymPy's arbitrary precision abilities
+"""
 
 import sympy
-e=sympy.Rational(2)**50/sympy.Rational(10)**50
-print e
+
+def main():
+    e = sympy.Rational(2)**50/sympy.Rational(10)**50
+    print e
+
+if __name__ == "__main__":
+    main()
diff --git a/examples/beginner/print_pretty.py 
b/examples/beginner/print_pretty.py
index bbf6646..3410a8e 100755
--- a/examples/beginner/print_pretty.py
+++ b/examples/beginner/print_pretty.py
@@ -1,36 +1,41 @@
 #!/usr/bin/env python
-import iam_sympy_example
+"""Pretty print example
 
-from sympy import Symbol, pprint, sin, cos, exp, sqrt
+Demonstrates pretty printing.
+"""
 
-x=Symbol("x")
-y=Symbol("y")
+from sympy import Symbol, pprint, sin, cos, exp, sqrt
 
+def main():
+    x = Symbol("x")
+    y = Symbol("y")
 
-pprint( x**x )
-print '\n'# separate with two blank likes
+    pprint( x**x )
+    print '\n'# separate with two blank likes
 
-pprint(x**2+y+x)
-print '\n'
+    pprint(x**2 + y + x)
+    print '\n'
 
-pprint(sin(x)**x)
-print '\n'
+    pprint(sin(x)**x)
+    print '\n'
 
-pprint( sin(x)**cos(x) )
-print '\n'
+    pprint( sin(x)**cos(x) )
+    print '\n'
 
-pprint( sin(x)/(cos(x)**2 * x**x +(2*y)) )
-print '\n'
+    pprint( sin(x)/(cos(x)**2 * x**x + (2*y)) )
+    print '\n'
 
-pprint( sin(x**2+exp(x)) )
-print '\n'
+    pprint( sin(x**2 + exp(x)) )
+    print '\n'
 
-pprint( sqrt(exp(x)) )
-print '\n'
+    pprint( sqrt(exp(x)) )
+    print '\n'
 
-pprint( sqrt(sqrt(exp(x))) )
-print '\n'
+    pprint( sqrt(sqrt(exp(x))) )
+    print '\n'
 
-pprint( (1/cos(x)).series(x,0,10) )
-print '\n'
+    pprint( (1/cos(x)).series(x, 0, 10) )
+    print '\n'
 
+if __name__ == "__main__":
+    main()
diff --git a/examples/beginner/series.py b/examples/beginner/series.py
index 67dd17f..61778f2 100755
--- a/examples/beginner/series.py
+++ b/examples/beginner/series.py
@@ -1,14 +1,22 @@
 #!/usr/bin/env python
-import iam_sympy_example
+"""Series example
+
+Demonstrates series.
+"""
 
 from sympy import Symbol, cos, sin
-x=Symbol('x')
 
-e=1/cos(x)
-print "Series for sec(x):"
-print e.series(x,0,10)
-print ""
+def main():
+    x = Symbol('x')
+
+    e = 1/cos(x)
+    print "Series for sec(x):"
+    print e.series(x, 0, 10)
+    print ""
+
+    e = 1/sin(x)
+    print "Series for csc(x):"
+    print e.series(x, 0, 4)
 
-e=1/sin(x)
-print "Series for csc(x):"
-print e.series(x,0,4)
+if __name__ == "__main__":
+    main()
diff --git a/examples/beginner/substitution.py 
b/examples/beginner/substitution.py
index ba9dd39..b6516aa 100755
--- a/examples/beginner/substitution.py
+++ b/examples/beginner/substitution.py
@@ -1,14 +1,24 @@
 #!/usr/bin/env python
-import iam_sympy_example
+"""Substitution example
+
+Demonstrates substitution.
+"""
 
 import sympy
-x=sympy.Symbol('x')
-y=sympy.Symbol('y')
-e=1/sympy.cos(x)
-print e
-print e.subs(sympy.cos(x),y)
-print e.subs(sympy.cos(x),y).subs(y,x**2)
-e=1/sympy.log(x)
-e=e.subs(x,sympy.Real("2.71828"))
-print e
-print e.evalf()
+
+def main():
+    x = sympy.Symbol('x')
+    y = sympy.Symbol('y')
+
+    e = 1/sympy.cos(x)
+    print e
+    print e.subs(sympy.cos(x), y)
+    print e.subs(sympy.cos(x), y).subs(y, x**2)
+
+    e = 1/sympy.log(x)
+    e = e.subs(x, sympy.Real("2.71828"))
+    print e
+    print e.evalf()
+
+if __name__ == "__main__":
+    main()
diff --git a/examples/iam_sympy_example.py b/examples/iam_sympy_example.py
deleted file mode 100644
index 226e811..0000000
--- a/examples/iam_sympy_example.py
+++ /dev/null
@@ -1,12 +0,0 @@
-"""Module to make life easier for SymPy examples"""
-
-# hook in-tree sympy into python path if running example
-import sys
-import os.path
-my_dir      = os.path.dirname(__file__)         # examples/
-sympy_top   = os.path.split(my_dir)[0]          # ../
-sympy_dir   = os.path.join(sympy_top, 'sympy')  # ../sympy/
-if os.path.isdir(sympy_dir):
-    #print 'working in-tree...'
-    sys.path.insert(0, sympy_top)
-
diff --git a/examples/intermediate/mplot2d.py b/examples/intermediate/mplot2d.py
index d44c363..38d836e 100755
--- a/examples/intermediate/mplot2d.py
+++ b/examples/intermediate/mplot2d.py
@@ -1,8 +1,11 @@
 #!/usr/bin/env python
-import iam_sympy_example
+"""Matplotlib 2D plotting example
+
+Demonstrates plotting with matplotlib.
+"""
 
-from sympy import Symbol, Basic
 from sample import sample
+from sympy import Basic, log, pi, sqrt, sin, Symbol
 
 def mplot2d(f, var, show=True):
     """
@@ -28,10 +31,12 @@ def mplot2d(f, var, show=True):
     if show:
         p.show()
 
-if __name__ == "__main__":
-    from sympy import sqrt, sin, log, pi
+def main():
     x = Symbol('x')
 
     #mplot2d(log(x), (x, 0, 2, 100))
     #mplot2d([sin(x), -sin(x)], (x, float(-2*pi), float(2*pi), 50))
     mplot2d([sqrt(x), -sqrt(x), sqrt(-x), -sqrt(-x)], (x, -40.0, 40.0, 80))
+
+if __name__ == "__main__":
+    main()
diff --git a/examples/intermediate/mplot3d.py b/examples/intermediate/mplot3d.py
index a682b24..5bfc73c 100755
--- a/examples/intermediate/mplot3d.py
+++ b/examples/intermediate/mplot3d.py
@@ -1,7 +1,10 @@
 #!/usr/bin/env python
-import iam_sympy_example
+"""Matplotlib 3D plotting example
 
-from sympy import Symbol, Basic
+Demonstrates plotting with matplotlib.
+"""
+
+from sympy import Basic, sin, Symbol
 from sample import sample
 
 def mplot3d(f, var1, var2, show=True):
@@ -33,11 +36,13 @@ def mplot3d(f, var1, var2, show=True):
     if show:
         p.show()
 
-if __name__ == "__main__":
-    from sympy import sin
+def main():
     x = Symbol('x')
     y = Symbol('y')
 
     mplot3d(x**2-y**2, (x, -10.0, 10.0, 20), (y, -10.0, 10.0, 20))
     #mplot3d(x**2+y**2, (x, -10.0, 10.0, 20), (y, -10.0, 10.0, 20))
     #mplot3d(sin(x)+sin(y), (x, -3.14, 3.14, 10), (y, -3.14, 3.14, 10))
+
+if __name__ == "__main__":
+    main()
diff --git a/examples/intermediate/print_gtk.py 
b/examples/intermediate/print_gtk.py
index b75b1f6..aca5ff9 100755
--- a/examples/intermediate/print_gtk.py
+++ b/examples/intermediate/print_gtk.py
@@ -1,15 +1,20 @@
 #!/usr/bin/env python
-import iam_sympy_example
+"""print_gtk example
 
-"""examples for print_gtk. It prints in gtkmathview using mathml"""
+Demonstrates printing with gtkmathview using mathml
+"""
 
 from sympy import Symbol, integrate, exp
 from sympy.printing import print_gtk
 
-x = Symbol('x')
+def main():
+    x = Symbol('x')
 
-#l1 = limit(sin(x)/x, x, 0, evaluate=False)
-#print_gtk(l1)
+    #l1 = limit(sin(x)/x, x, 0, evaluate=False)
+    #print_gtk(l1)
 
-l2 = integrate(exp(x), (x,0,1), evaluate=False)
-print_gtk(l2)
+    l2 = integrate(exp(x), (x,0,1), evaluate=False)
+    print_gtk(l2)
+
+if __name__ == "__main__":
+    main()
diff --git a/examples/intermediate/trees.py b/examples/intermediate/trees.py
index a965731..929c44a 100755
--- a/examples/intermediate/trees.py
+++ b/examples/intermediate/trees.py
@@ -1,5 +1,4 @@
 #!/usr/bin/env python
-import iam_sympy_example
 
 from sympy import Symbol, Poly
 
@@ -10,10 +9,13 @@ def T(x):
 def A(x):
     return 1 + T(x) - T(x)**2/2 + T(x**2)/2
 
+def main():
+    x=Symbol("x")
+    s = Poly(A(x), x)
+    num = [s.coeff(n) for n in range(11)]
 
-x=Symbol("x")
-s = Poly(A(x), x)
-num = [s.coeff(n) for n in range(11)]
+    print s.as_basic()
+    print num
 
-print s.as_basic()
-print num
+if __name__ == "__main__":
+    main()
diff --git a/examples/intermediate/vandermonde.py 
b/examples/intermediate/vandermonde.py
index 201ed7d..b6e3116 100755
--- a/examples/intermediate/vandermonde.py
+++ b/examples/intermediate/vandermonde.py
@@ -1,22 +1,30 @@
 #!/usr/bin/env python
-import iam_sympy_example
+"""Vandermonde matrix example
+
+Demonstrates matrix computations using the Vandermonde matrix.
+  * http://en.wikipedia.org/wiki/Vandermonde_matrix
+"""
 
 from sympy import sqrt, symbols, eye
 
-w, x, y, z = symbols("wxyz")
-L = [x,y,z]
-V = eye(len(L))
-for i in range(len(L)):
-    for j in range(len(L)):
-        V[i,j] = L[i]**j
-det = 1
-for i in range(len(L)):
-    det *= L[i]-L[i-1]
+def main():
+    w, x, y, z = symbols("wxyz")
+    L = [x,y,z]
+    V = eye(len(L))
+    for i in range(len(L)):
+        for j in range(len(L)):
+            V[i,j] = L[i]**j
+    det = 1
+    for i in range(len(L)):
+        det *= L[i]-L[i-1]
+
+    print "matrix"
+    print V
+    print "det:"
+    print V.det().expand()
+    print "correct result"
+    print det
+    print det.expand()
 
-print "matrix"
-print V
-print "det:"
-print V.det().expand()
-print "correct result"
-print det
-print det.expand()
+if __name__ == "__main__":
+    main()
-- 
1.6.0.3


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sympy-patches" group.
To post to this group, send email to sympy-patches@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sympy-patches?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to