#!/usr/bin/env python
# Author : Pierre Schnizer
import unittest
import pygsl._numobj as Numeric
import pygsl
from pygsl import integrate
class IntegrateTest(unittest.TestCase):
def setUp(self):
self.w = integrate.workspace(1000000)
def test_1_qags(self):
expected = -4.0
def f(x, params):
alpha = params
return Numeric.log(alpha *x) / Numeric.sqrt(x)
self.sys = integrate.gsl_function(f, 1)
flag, result, error = integrate.qags(self.sys, 0, 1, 0, 1e-7, 1000,
self.w, )
assert(Numeric.absolute(result - expected) < 1e-7)
assert(Numeric.absolute(error) < 1e-7)
self.w.get_size()
def test_0_qagi(self):
expected = Numeric.pi
def f1(x,y):
return 1. / (1. + x ** 2)
sys = integrate.gsl_function(f1, None)
flag, result, error = integrate.qagi(sys, 1e-8, 1e-8, 1000000, self.w)
#print result
assert(Numeric.absolute(result - expected) < 1e-7)
assert(Numeric.absolute(error) < 1e-7)
self.w.get_size()
def test_0_qagiu(self):
expected = 1./2.
def f1(x,y):
return 1. / (1.* x**2)
sys = integrate.gsl_function(f1, None)
flag, result, error = integrate.qagiu(sys, 2, 1e-8, 1e-8, 1000000, self.w)
assert(Numeric.absolute(result - expected) < 1e-7)
assert(Numeric.absolute(error) < 1e-7)
self.w.get_size()
def test_0_qagil(self):
expected = 1./2.
def f1(x,y):
return 1. / (1.* x**2)
sys = integrate.gsl_function(f1, None)
test = 0
try:
flag, result, error = integrate.qagil(sys, -2, 1e-8, 1e-8, 1000000, self.w)
test = 1
finally:
if test == 0:
print integrate.qagil(sys, -2, 1e-8, 1e-8, 1000000, self.w)
assert(Numeric.absolute(result - expected) < 1e-7)
assert(Numeric.absolute(error) < 1e-7)
self.w.get_size()
def test_qawc(self):
pass
def test_qwas(self):
pass
def test_qawo(self):
def f(x,y):
return 1
sys = integrate.gsl_function(f, None)
table = integrate.qawo_table(1, 2*Numeric.pi, integrate.COSINE, 100)
flag, result, error = integrate.qawo(sys, -Numeric.pi, 1e-8, 1e-8, 100, self.w, table)
assert(Numeric.absolute(result) < 1e-7)
assert(Numeric.absolute(error) < 1e-7)
def test_qawf(self):
def f2(x,y):
return Numeric.sin(x) / x
sys2 = integrate.gsl_function(f2, None)
def f1(x,y):
return 1 / x
sys1 = integrate.gsl_function(f1, None)
def f3(x,y):
return 1 / -x
sys3 = integrate.gsl_function(f3, None)
pts = Numeric.array((-Numeric.pi, 0, Numeric.pi))
flag, result1, error = integrate.qagp(sys2, pts, 1e-8, 1e-8, 100000, self.w)
table1 = integrate.qawo_table(1, 100, integrate.SINE, 100)
cyclew = integrate.workspace(1000000)
flag, result2, error = integrate.qawf(sys1, Numeric.pi, 1e-8, 100, self.w, cyclew, table1)
table2 = integrate.qawo_table(-1, 100, integrate.SINE, 100)
flag, result3, error = integrate.qawf(sys3, Numeric.pi, 1e-8, 100, self.w, cyclew, table2)
assert(Numeric.absolute(result1+result2+result3 - Numeric.pi) < 1e-8)
def test_qagp(self):
def f1(x,y):
return x / x
sys = integrate.gsl_function(f1, None)
pts = Numeric.array((-1, 0, 1))
flag, result, error = integrate.qagp(sys, pts, 1e-8, 1e-8, 100000, self.w)
assert(Numeric.absolute(result - 2.) < 1e-3)
assert(error<1e-8)
def run_qag(self, method):
def f1(x,y):
return Numeric.sin(x)
sys = integrate.gsl_function(f1, None)
flag, result, error = integrate.qag(sys, 0, Numeric.pi, 1e-8, 1e-8, 1000, method, self.w)
assert(Numeric.absolute(result - 2) < 1e-7)
assert(error<1e-8)
def test_qag_61(self):
self.run_qag(integrate.GAUSS61)
def test_qag_51(self):
self.run_qag(integrate.GAUSS51)
def test_qag_41(self):
self.run_qag(integrate.GAUSS41)
def test_qag_31(self):
self.run_qag(integrate.GAUSS31)
def test_qag_21(self):
self.run_qag(integrate.GAUSS21)
def test_qag_15(self):
self.run_qag(integrate.GAUSS15)
def test_qng(self):
def f1(x,y):
return Numeric.sin(x)
sys = integrate.gsl_function(f1, None)
flag, result, error, method = integrate.qng(sys, 0, Numeric.pi, 1e-8, 1e-8)
assert(Numeric.absolute(result - 2) < 1e-7)
assert(error<1e-8)
if __name__ == '__main__':
unittest.main()
syntax highlighted by Code2HTML, v. 0.9.1