def test_deviv_integ(self): " p.deriv() p.integ() " self.assert_close(self.exp_x.integ().deriv(), self.exp_x) self.assert_close(self.exp_x.integ(n=2).deriv(n=2), self.exp_x) self.assert_close(self.exp_x.integ(n=0), self.exp_x) self.assert_close(self.exp_x.deriv(n=0), self.exp_x) self.assert_close(self.x.deriv(self.order + 2), PowerSeries([0])) self.assert_close(self.exp_x.deriv(), PowerSeries(self.exp_x, order=self.order - 1)) self.assert_close(self.exp_x.integ(x0=0), exp(PowerSeries(self.x, order=self.order + 1)) - 1)
def test_arith(self): " x+y x-y x*y x/y x**2 " x = self.x y = self.exp_x self.assert_close(x * x, self.x2) self.assert_close(y / y, self.one) self.assert_close((y * y) / y, y) self.assert_close((x * y) / y, x) self.assert_close(y - y, self.zero) self.assert_close((x + y) - x, y) self.assert_close(x + y - x - y, self.zero) self.assert_close(x**2, self.x2) self.assert_close(y * y * y, y**3) self.assert_close(2**x, self.exp_x**log(2.)) self.assert_close(y + y, 2 * y) self.assert_close(y + y, y * 2) self.assert_close(x + 2, PowerSeries([2, 1], order=self.order)) self.assert_close(2 + x, PowerSeries([2, 1], order=self.order)) self.assert_close(x - 2, PowerSeries([-2, 1], order=self.order)) self.assert_close(2 - x, PowerSeries([2, -1], order=self.order)) self.assert_close(2 * (y / 2), y) self.assert_close(y * (2 / y), 2 * self.one) self.assertEqual(y**0, 1.) self.assert_close(y**(-2), 1 / y / y) # check division where c[0] = 0 self.assert_close(x / x, PowerSeries([1], order=self.order - 1)) self.assert_close((x + x**2) / x, PowerSeries([1, 1], order=self.order - 1)) self.assert_close((x * x) / self.x2, PowerSeries([1], order=self.order - 2)) # check error checks with self.assertRaises(ZeroDivisionError): self.x / self.zero
def setUp(self): self.order = 10 self.x = PowerSeries([0.,1.], order=self.order) self.x2 = PowerSeries([0., 0., 1.], order=self.order) self.z = PowerSeries([0+0j, 1.+0j], order=self.order) self.one = PowerSeries([1.], order=self.order) self.zero = PowerSeries([0.], order=self.order) coef = 1. / np.cumprod([1.] + (1. + np.arange(0., self.order+1.)).tolist()) self.exp_x = PowerSeries(coef, order=self.order) osc_coef = coef * (1j)**np.arange(len(coef)) self.cos_x = PowerSeries([xi.real for xi in osc_coef], order=self.order) self.sin_x = PowerSeries([xi.imag for xi in osc_coef], order=self.order)
def test_constructor(self): " PowerSeries(c, order) " x = PowerSeries(1. + np.arange(2 * self.order), order=self.order) self.assertEqual(len(x.c), self.order + 1) np.testing.assert_allclose(x.c, 1. + np.arange(self.order + 1)) x = PowerSeries(order=self.order) y = PowerSeries(numpy.zeros(self.order + 1, object), order=self.order) self.assertEqual(len(x.c), len(y.c)) for xi, yi in zip(x.c, y.c): self.assertEqual(xi, yi) for i in range(self.order + 1): self.assertEqual(x.c[i], y.c[i]) y = PowerSeries(self.exp_x) for i in range(self.order + 1): y.c[i] *= 2 self.assert_close(y, 2 * self.exp_x) self.assert_close(PowerSeries(), PowerSeries([0.])) with self.assertRaises(ValueError): PowerSeries([]) with self.assertRaises(ValueError): PowerSeries(order=-1) with self.assertRaises(ValueError): PowerSeries([1, 2], order=-1)