#!/usr/bin/env python
# Author : Pierre Schnizer
import unittest
import pygsl
from pygsl import fit
from pygsl import multifit
import pygsl._numobj as Numeric
class FitTest(unittest.TestCase):
_eps = 1e-8
def setUp(self):
self.a = 1000.1
self.b = 100
self.x = Numeric.arange(100)
self.y = self.a + self.b * self.x
self.w = Numeric.ones(100) * 1000000
def test_0_linear(self):
c0, c1, c00, c01, c10, sumsq = fit.linear(self.x, self.y)
assert(Numeric.absolute(c0 - self.a)<self._eps)
assert(Numeric.absolute(c1 - self.b)<self._eps)
y, yerr = fit.est(1, c0, c1, c00, c01, c10)
assert(Numeric.absolute(y - (self.a+self.b*1)) < self._eps)
assert(Numeric.absolute(yerr) < self._eps)
def test_1_wlinear(self):
c0, c1, c00, c01, c10, chisq = fit.wlinear(self.x, self.w, self.y)
assert(Numeric.absolute(c0 - self.a)<self._eps)
assert(Numeric.absolute(c1 - self.b)<self._eps)
y, yerr = fit.est(1, c0, c1, c00, c01, c10)
assert(Numeric.absolute(y - (self.a+self.b*1)) < self._eps)
class FitMulTest(unittest.TestCase):
_eps = 1e-8
def setUp(self):
self.a = 0.0
self.b = 100
self.x = Numeric.arange(100)
self.y = self.a + self.b * self.x
self.w = Numeric.ones(100) * 1000000
def test_0_linear(self):
c1, c11, sumsq = fit.mul(self.x, self.y)
assert(Numeric.absolute(c1 - self.b)<self._eps)
y, yerr = fit.mul_est(1, c1, c11)
assert(Numeric.absolute(y - (self.a+self.b*1)) < self._eps)
assert(Numeric.absolute(yerr) < self._eps)
def test_1_wlinear(self):
c1, c11, chisq = fit.wmul(self.x, self.w, self.y)
assert(Numeric.absolute(c1 - self.b)<self._eps)
y, yerr = fit.mul_est(1, c1, c11)
assert(Numeric.absolute(y - (self.a+self.b*1)) < self._eps)
class MultiFitTest(unittest.TestCase):
_eps = 1e-10
def setUp(self):
self.dim = 100
self.param = 2
self.a = 1000.1
self.b = 100
self.x = Numeric.arange(self.dim)
x = self.x
self.y = self.a + self.b * self.x
self.w = Numeric.ones((self.dim,))
self.ws = multifit.linear_workspace(self.dim, self.param)
self.X = Numeric.transpose(Numeric.array((Numeric.ones(self.dim,), x)))
def test_linear(self):
c, cov, chisq = multifit.linear(self.X, self.y, self.ws)
assert(Numeric.absolute(c[0] - self.a) < self._eps)
assert(Numeric.absolute(c[1] - self.b) < self._eps)
def test_wlinear(self):
c, cov, chisq = multifit.wlinear(self.X, self.w, self.y, self.ws)
assert(Numeric.absolute(c[0] - self.a) < self._eps)
assert(Numeric.absolute(c[1] - self.b) < self._eps)
if __name__ == '__main__':
unittest.main()
syntax highlighted by Code2HTML, v. 0.9.1