annotate DEPENDENCIES/mingw32/Python27/Lib/site-packages/numpy/lib/tests/test_polynomial.py @ 133:4acb5d8d80b6 tip

Don't fail environmental check if README.md exists (but .txt and no-suffix don't)
author Chris Cannam
date Tue, 30 Jul 2019 12:25:44 +0100
parents 2a2c65a20a8b
children
rev   line source
Chris@87 1 from __future__ import division, absolute_import, print_function
Chris@87 2
Chris@87 3 '''
Chris@87 4 >>> p = np.poly1d([1.,2,3])
Chris@87 5 >>> p
Chris@87 6 poly1d([ 1., 2., 3.])
Chris@87 7 >>> print(p)
Chris@87 8 2
Chris@87 9 1 x + 2 x + 3
Chris@87 10 >>> q = np.poly1d([3.,2,1])
Chris@87 11 >>> q
Chris@87 12 poly1d([ 3., 2., 1.])
Chris@87 13 >>> print(q)
Chris@87 14 2
Chris@87 15 3 x + 2 x + 1
Chris@87 16 >>> print(np.poly1d([1.89999+2j, -3j, -5.12345678, 2+1j]))
Chris@87 17 3 2
Chris@87 18 (1.9 + 2j) x - 3j x - 5.123 x + (2 + 1j)
Chris@87 19 >>> print(np.poly1d([-3, -2, -1]))
Chris@87 20 2
Chris@87 21 -3 x - 2 x - 1
Chris@87 22
Chris@87 23 >>> p(0)
Chris@87 24 3.0
Chris@87 25 >>> p(5)
Chris@87 26 38.0
Chris@87 27 >>> q(0)
Chris@87 28 1.0
Chris@87 29 >>> q(5)
Chris@87 30 86.0
Chris@87 31
Chris@87 32 >>> p * q
Chris@87 33 poly1d([ 3., 8., 14., 8., 3.])
Chris@87 34 >>> p / q
Chris@87 35 (poly1d([ 0.33333333]), poly1d([ 1.33333333, 2.66666667]))
Chris@87 36 >>> p + q
Chris@87 37 poly1d([ 4., 4., 4.])
Chris@87 38 >>> p - q
Chris@87 39 poly1d([-2., 0., 2.])
Chris@87 40 >>> p ** 4
Chris@87 41 poly1d([ 1., 8., 36., 104., 214., 312., 324., 216., 81.])
Chris@87 42
Chris@87 43 >>> p(q)
Chris@87 44 poly1d([ 9., 12., 16., 8., 6.])
Chris@87 45 >>> q(p)
Chris@87 46 poly1d([ 3., 12., 32., 40., 34.])
Chris@87 47
Chris@87 48 >>> np.asarray(p)
Chris@87 49 array([ 1., 2., 3.])
Chris@87 50 >>> len(p)
Chris@87 51 2
Chris@87 52
Chris@87 53 >>> p[0], p[1], p[2], p[3]
Chris@87 54 (3.0, 2.0, 1.0, 0)
Chris@87 55
Chris@87 56 >>> p.integ()
Chris@87 57 poly1d([ 0.33333333, 1. , 3. , 0. ])
Chris@87 58 >>> p.integ(1)
Chris@87 59 poly1d([ 0.33333333, 1. , 3. , 0. ])
Chris@87 60 >>> p.integ(5)
Chris@87 61 poly1d([ 0.00039683, 0.00277778, 0.025 , 0. , 0. ,
Chris@87 62 0. , 0. , 0. ])
Chris@87 63 >>> p.deriv()
Chris@87 64 poly1d([ 2., 2.])
Chris@87 65 >>> p.deriv(2)
Chris@87 66 poly1d([ 2.])
Chris@87 67
Chris@87 68 >>> q = np.poly1d([1.,2,3], variable='y')
Chris@87 69 >>> print(q)
Chris@87 70 2
Chris@87 71 1 y + 2 y + 3
Chris@87 72 >>> q = np.poly1d([1.,2,3], variable='lambda')
Chris@87 73 >>> print(q)
Chris@87 74 2
Chris@87 75 1 lambda + 2 lambda + 3
Chris@87 76
Chris@87 77 >>> np.polydiv(np.poly1d([1,0,-1]), np.poly1d([1,1]))
Chris@87 78 (poly1d([ 1., -1.]), poly1d([ 0.]))
Chris@87 79
Chris@87 80 '''
Chris@87 81 import numpy as np
Chris@87 82 from numpy.testing import (
Chris@87 83 run_module_suite, TestCase, assert_, assert_equal, assert_array_equal,
Chris@87 84 assert_almost_equal, rundocs
Chris@87 85 )
Chris@87 86
Chris@87 87
Chris@87 88 class TestDocs(TestCase):
Chris@87 89 def test_doctests(self):
Chris@87 90 return rundocs()
Chris@87 91
Chris@87 92 def test_roots(self):
Chris@87 93 assert_array_equal(np.roots([1, 0, 0]), [0, 0])
Chris@87 94
Chris@87 95 def test_str_leading_zeros(self):
Chris@87 96 p = np.poly1d([4, 3, 2, 1])
Chris@87 97 p[3] = 0
Chris@87 98 assert_equal(str(p),
Chris@87 99 " 2\n"
Chris@87 100 "3 x + 2 x + 1")
Chris@87 101
Chris@87 102 p = np.poly1d([1, 2])
Chris@87 103 p[0] = 0
Chris@87 104 p[1] = 0
Chris@87 105 assert_equal(str(p), " \n0")
Chris@87 106
Chris@87 107 def test_polyfit(self):
Chris@87 108 c = np.array([3., 2., 1.])
Chris@87 109 x = np.linspace(0, 2, 7)
Chris@87 110 y = np.polyval(c, x)
Chris@87 111 err = [1, -1, 1, -1, 1, -1, 1]
Chris@87 112 weights = np.arange(8, 1, -1)**2/7.0
Chris@87 113
Chris@87 114 # check 1D case
Chris@87 115 m, cov = np.polyfit(x, y+err, 2, cov=True)
Chris@87 116 est = [3.8571, 0.2857, 1.619]
Chris@87 117 assert_almost_equal(est, m, decimal=4)
Chris@87 118 val0 = [[2.9388, -5.8776, 1.6327],
Chris@87 119 [-5.8776, 12.7347, -4.2449],
Chris@87 120 [1.6327, -4.2449, 2.3220]]
Chris@87 121 assert_almost_equal(val0, cov, decimal=4)
Chris@87 122
Chris@87 123 m2, cov2 = np.polyfit(x, y+err, 2, w=weights, cov=True)
Chris@87 124 assert_almost_equal([4.8927, -1.0177, 1.7768], m2, decimal=4)
Chris@87 125 val = [[8.7929, -10.0103, 0.9756],
Chris@87 126 [-10.0103, 13.6134, -1.8178],
Chris@87 127 [0.9756, -1.8178, 0.6674]]
Chris@87 128 assert_almost_equal(val, cov2, decimal=4)
Chris@87 129
Chris@87 130 # check 2D (n,1) case
Chris@87 131 y = y[:, np.newaxis]
Chris@87 132 c = c[:, np.newaxis]
Chris@87 133 assert_almost_equal(c, np.polyfit(x, y, 2))
Chris@87 134 # check 2D (n,2) case
Chris@87 135 yy = np.concatenate((y, y), axis=1)
Chris@87 136 cc = np.concatenate((c, c), axis=1)
Chris@87 137 assert_almost_equal(cc, np.polyfit(x, yy, 2))
Chris@87 138
Chris@87 139 m, cov = np.polyfit(x, yy + np.array(err)[:, np.newaxis], 2, cov=True)
Chris@87 140 assert_almost_equal(est, m[:, 0], decimal=4)
Chris@87 141 assert_almost_equal(est, m[:, 1], decimal=4)
Chris@87 142 assert_almost_equal(val0, cov[:, :, 0], decimal=4)
Chris@87 143 assert_almost_equal(val0, cov[:, :, 1], decimal=4)
Chris@87 144
Chris@87 145 def test_objects(self):
Chris@87 146 from decimal import Decimal
Chris@87 147 p = np.poly1d([Decimal('4.0'), Decimal('3.0'), Decimal('2.0')])
Chris@87 148 p2 = p * Decimal('1.333333333333333')
Chris@87 149 assert_(p2[1] == Decimal("3.9999999999999990"))
Chris@87 150 p2 = p.deriv()
Chris@87 151 assert_(p2[1] == Decimal('8.0'))
Chris@87 152 p2 = p.integ()
Chris@87 153 assert_(p2[3] == Decimal("1.333333333333333333333333333"))
Chris@87 154 assert_(p2[2] == Decimal('1.5'))
Chris@87 155 assert_(np.issubdtype(p2.coeffs.dtype, np.object_))
Chris@87 156
Chris@87 157 def test_complex(self):
Chris@87 158 p = np.poly1d([3j, 2j, 1j])
Chris@87 159 p2 = p.integ()
Chris@87 160 assert_((p2.coeffs == [1j, 1j, 1j, 0]).all())
Chris@87 161 p2 = p.deriv()
Chris@87 162 assert_((p2.coeffs == [6j, 2j]).all())
Chris@87 163
Chris@87 164 def test_integ_coeffs(self):
Chris@87 165 p = np.poly1d([3, 2, 1])
Chris@87 166 p2 = p.integ(3, k=[9, 7, 6])
Chris@87 167 assert_(
Chris@87 168 (p2.coeffs == [1/4./5., 1/3./4., 1/2./3., 9/1./2., 7, 6]).all())
Chris@87 169
Chris@87 170 def test_zero_dims(self):
Chris@87 171 try:
Chris@87 172 np.poly(np.zeros((0, 0)))
Chris@87 173 except ValueError:
Chris@87 174 pass
Chris@87 175
Chris@87 176 if __name__ == "__main__":
Chris@87 177 run_module_suite()