def test_prob_wrong_input_negative_float(self): """ If the input value n is negative float, probability(n) would raise ValueError('Input not of integer instance') """ with self.assertRaisesRegexp(ValueError, "instance"): mpmath.nstr(probability(-4.3), 8)
def test_prob_wrong_input_negative_number(self): """ If the input value n is negative number, probability(n) would raise ValueError('Input not a positive integer') """ with self.assertRaisesRegexp(ValueError, "positive"): mpmath.nstr(probability(-4), 8)
def test_prob_wrong_input_string(self): """ If the input value n is a string, probability(n) would raise ValueError('Input not of integer instance') """ with self.assertRaisesRegexp(ValueError, "instance"): mpmath.nstr(probability("die"), 8)
def test_prob_wrong_input_zero(self): """ If the input value n is zero, probability(n) would raise ValueError('Input not a positive integer') """ with self.assertRaisesRegexp(ValueError, "positive"): mpmath.nstr(probability(0), 8)
def test_nstr(): m = matrix([[0.75, 0.190940654, -0.0299195971], [0.190940654, 0.65625, 0.205663228], [-0.0299195971, 0.205663228, 0.64453125e-20]]) assert nstr(m, 4, min_fixed=-inf) == \ '''[ 0.75 0.1909 -0.02992] [ 0.1909 0.6563 0.2057] [-0.02992 0.2057 0.000000000000000000006445]''' assert nstr(m, 4) == \ '''[ 0.75 0.1909 -0.02992]
def test_matrix_basic(): A1 = matrix(3) for i in xrange(3): A1[i,i] = 1 assert A1 == eye(3) assert A1 == matrix(A1) A2 = matrix(3, 2) assert not A2._matrix__data A3 = matrix([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) assert list(A3) == range(1, 10) A3[1,1] = 0 assert not (1, 1) in A3._matrix__data A4 = matrix([[1, 2, 3], [4, 5, 6]]) A5 = matrix([[6, -1], [3, 2], [0, -3]]) assert A4 * A5 == matrix([[12, -6], [39, -12]]) assert A1 * A3 == A3 * A1 == A3 try: A2 * A2 assert False except ValueError: pass l = [[10, 20, 30], [40, 0, 60], [70, 80, 90]] A6 = matrix(l) assert A6.tolist() == l assert A6 == eval(repr(A6)) A6 = matrix(A6, force_type=float) assert A6 == eval(repr(A6)) assert A6*1j == eval(repr(A6*1j)) assert A3 * 10 == 10 * A3 == A6 assert A2.rows == 3 assert A2.cols == 2 A3.rows = 2 A3.cols = 2 assert len(A3._matrix__data) == 3 assert A4 + A4 == 2*A4 try: A4 + A2 except ValueError: pass assert sum(A1 - A1) == 0 A7 = matrix([[1, 2], [3, 4], [5, 6], [7, 8]]) x = matrix([10, -10]) assert A7*x == matrix([-10, -10, -10, -10]) A8 = ones(5) assert sum((A8 + 1) - (2 - zeros(5))) == 0 assert (1 + ones(4)) / 2 - 1 == zeros(4) assert eye(3)**10 == eye(3) try: A7**2 assert False except ValueError: pass A9 = randmatrix(3) A10 = matrix(A9) A9[0,0] = -100 assert A9 != A10 A11 = matrix(randmatrix(2, 3), force_type=mpi) for a in A11: assert isinstance(a, mpi) assert nstr(A9)
def main(): for N in range(2,100): # get dbN coeffients dbN = daubechis(N) # write coeffients f = open('db' + str(N).zfill(2) +'_coefficients.txt', 'w') f.write('# db' + str(N) + ' scaling coefficients\n') for i, h in enumerate(dbN): f.write('h['+ str(i) + ']='+ sm.nstr(h,40) + '\n') f.close() # get an approximation of scaling function x, phi, psi = scipy.signal.cascade(dbN) # plot scaling function plt.plot(x, phi, 'k') plt.grid() plt.title('db' + str(N) + ' scaling function') plt.savefig('db' + str(N).zfill(2) + '_scaling' + '.png') plt.clf() # plot wavelet plt.plot(x, psi, 'k') plt.grid() plt.title( 'db' + str(N) + " wavelet" ) plt.savefig('db' + str(N).zfill(2) + '_wavelet' + '.png') plt.clf()
def test_prob_2_sided_die(self): """ test for n = 2 : P(n=1) = 0.5. This is like a coin toss. all outcomes = {HH, HT, TH, TT} desired outcomes = {HT, TH} probability = 2/4 = 0.5 """ self.assertEqual(mpmath.nstr(probability(2), 8), "0.5")
def cramerVonMises(x, y): try: x = sorted(x); y = sorted(y); pool = x + y; ps, pr = _sortRank(pool) rx = array ( [ pr[ind] for ind in [ ps.index(element) for element in x ] ] ) ry = array ( [ pr[ind] for ind in [ ps.index(element) for element in y ] ] ) n = len(x) m = len(y) i = array(range(1, n+1)) j = array(range(1, m+1)) u = n * sum ( power( (rx - i), 2 ) ) + m * sum ( power((ry - j), 2) ) t = u / (n*m*(n+m)) - (4*n*m-1) / (6 * (n+m)) Tmu = 1/6 + 1 / (6*(n+m)) Tvar = 1/45 * ( (m+n+1) / power((m+n),2) ) * (4*m*n*(m+n) - 3*(power(m,2) + power(n,2)) - 2*m*n) / (4*m*n) t = (t - Tmu) / power(45*Tvar, 0.5) + 1/6 if t < 0: return -1 elif t <= 12: a = 1-mp.nsum(lambda x : ( mp.gamma(x+0.5) / ( mp.gamma(0.5) * mp.fac(x) ) ) * mp.power( 4*x + 1, 0.5 ) * mp.exp ( - mp.power(4*x + 1, 2) / (16*t) ) * mp.besselk(0.25 , mp.power(4*x + 1, 2) / (16*t) ), [0,100] ) / (mp.pi*mp.sqrt(t)) return float(mp.nstr(a,3)) else: return 0 except Exception as e: print e return -1
def fstr(x): s = nstr(x, n=digits) return s + '_pfdp'
def test_prob_1_sided_die(self): """ test for n = 1 : P(n=1) = 1 """ self.assertEqual(mpmath.nstr(probability(1), 8), "1.0")
def fstr(x): s = nstr(x, n=digits) s = s.replace('e', 'd') if s.find('d') == -1: s = s + 'd0' return s
## ## write python module 'quadrature.py' ## with open('quadrature.py', 'w') as f: f.write('# this file was generated by "mksmat.py"\n') f.write('table = {\n') for q in quads: for n in quads[q]: for r in quads[q][n]: f.write("('%s',%d,%d): {\n" % (q, n, r)) (nodes, smat) = quads[q][n][r] f.write(" 'nodes': [" + ',\n'.join( [nstr(x, digits) for x in nodes]) + '],\n') f.write(" 'matrix': [ \n") for row in smat: f.write('[' + ',\n'.join([nstr(x, digits) for x in row]) + '],\n') f.write(" ] }, \n") f.write('}\n\n') ## ## write C++ look-up tables '*.hpp' (no refinements) ## # First rename quadratures. quads['gauss_lobatto'] = quads['GL'] del quads['GL'] quads['gauss_radau'] = quads['GR']
# Remez algorithm --step4-- if check_convergence(list_a, list_x): return list_a, d, list_x, count else: raise Exception('[ERROR]Remez algorithm failed') if __name__ == '__main__': print('Remez algorithm calculating...', end='') list_a, d, list_x, count = remez() print(' OK') for k, a in enumerate(list_a): print('a[' + str(k) + ']=', sm.nstr(a, 17)) print('d=', sm.nstr(d, 17)) # -2*s0*s1*s3*x**3 + s0*s2*x + s1**2*s3*x**4 + x**2*(s0**2*s3 - s1*s2) def f(s0, s1, s2, s3): return s0*s2 - list_a[1], \ s0**2*s3 - s1*s2 - list_a[2], \ -2*s0*s1*s3 - list_a[3], \ s1**2*s3 - list_a[4] print() print('Newton method calculating...', end='') initilal = (1.2732395447351627, 0.40528473456935109, 0.77633023248007499, 0.22308510060189463) list_s = sm.findroot(f,
list_x = update_maximum_error_points(list_a) # Remez algorithm --step4-- if check_convergence(list_a, list_x): return list_a, d, list_x, count else: raise Exception('[ERROR]Remez algorithm failed') if __name__ == '__main__': print('Remez algorithm calculating...', end='') list_a, d, list_x, count = remez() print(' OK') for k,a in enumerate(list_a): print('a[' + str(k) + ']=', sm.nstr(a, 17)) print('d=', sm.nstr(d, 17)) # -2*s0*s1*s3*x**3 + s0*s2*x + s1**2*s3*x**4 + x**2*(s0**2*s3 - s1*s2) def f(s0,s1,s2,s3): return s0*s2 - list_a[1], \ s0**2*s3 - s1*s2 - list_a[2], \ -2*s0*s1*s3 - list_a[3], \ s1**2*s3 - list_a[4] print() print('Newton method calculating...', end='') initilal = (1.2732395447351627, 0.40528473456935109, 0.77633023248007499, 0.22308510060189463); list_s = sm.findroot( f,