#!/usr/bin/env python
# (C) 2000 Huaiyu Zhu <hzhu@users.sourceforge.net>. Licence: GPL
# $Id: test_efuncs.py,v 1.9 2001/08/29 09:17:28 hzhu Exp $
"""
Test efuncs module
"""
from MatPy.Matrix import r_range, rand, norm
from MatPy.efuncs import *
import sys
if __name__ == "__main__": waittime = None
else: waittime = 1
# Check consistency
def checkequal(x, y, r):
try:
assert norm(x-y) <= (norm(x)+norm(y)) * r
except:
print sys.exc_info()
print "x =", x
print "y =", y
raise
A = rand((3,3))
checkequal(sqrt(A).__tpow__(2), A, 1e-14)
checkequal(exp(A)+exp(-A), 2 * cosh(A), 1e-14)
checkequal(exp(A)-exp(-A), 2 * sinh(A), 1e-14)
checkequal(sinh(A), cosh(A).__tmul__(tanh(A)), 1e-14)
checkequal(cosh(A).__tpow__(2), 1 + sinh(A).__tpow__(2), 2e-14)
checkequal(1j*sin(A), sinh(A*1j), 1e-14)
checkequal(cos(A), cosh(A*1j), 1e-14)
checkequal(sin(A), cos(A).__tmul__(tan(A)), 1e-14)
checkequal(cos(A).__tpow__(2), 1 - sin(A).__tpow__(2), 2e-14)
checkequal(cos(acos(A)), A, 1e-14)
checkequal(sin(asin(A)), A, 1e-14)
checkequal(tan(atan(A)), A, 1e-14)
# Plot graphics
i = 0
def test(g, __name__, funcs, x):
"For each f in funcs, draw a line with f(args)"
global i
ys = map(lambda f,x=x:f(x), funcs)
names = map(lambda f:f.__name__, funcs)
if not len(funcs) == len(names): raise ValueError
g.plot(ys, names=names, xs=[x]*len(funcs))
g.hardcopy("efunc_%s.ps" %i)
i = i + 1
wait(waittime)
#------------------------------------------------------------------
print "All of these tests are shown in graphics"
from MatPy.gplot import Gplot, wait
g = Gplot()
x = r_range(100)/10.
#--------------------------------------------
g.title("Positive range functions")
test(g, __name__,
(log, log10),
(x+.1)/3)
#--------------------------------------------
g.title("Miscellenious functions")
test(g, __name__,
(abs, ceil, floor),
x-5)
"sign does not work?"
#--------------------------------------------
g.title("Trigonometric functions")
g.axis(yrange=(-3,3))
test(g, __name__,
(sin, cos, tan, atan),
(x-5)*2)
g.axis()
#--------------------------------------------
g.title("Exponential and related functions")
test(g, __name__,
(exp, sinh, cosh, tanh, asinh),
(x-5)/3)
#--------------------------------------------
g.title("Gamma and related special functions")
test(g, __name__,
(lgam, psi, rgam),
x+.1)
"""
abs,
ceil,
floor,
sign,
sqrt,
sinc,
exp,
log,
log10,
sinh,
cosh,
tanh,
asinh,
sin,
cos,
tan,
asin,
acos,
atan,
gam,
lgam,
igam,
igamc(x, a):
igami(y, a):
beta(a, b):
lbeta(a, b):
ibeta(x, a, b):
ibetai(y, a, b):
psi,
rgam,
"""
Result obtained with
>>> from MatPy.tests import test_efuncs
All of these tests are shown in graphics