blob: 18c8a453ba6bf30b455763ba0427c7ae972fe0ea [file] [log] [blame]
Wenzel Jakob9e0a0562016-05-05 20:33:54 +02001#!/usr/bin/env python
2from __future__ import print_function
3import sys
4sys.path.append('.')
5
6from example import fixed_r, fixed_c
7from example import fixed_passthrough_r, fixed_passthrough_c
8from example import dense_r, dense_c
9from example import dense_passthrough_r, dense_passthrough_c
10from example import sparse_r, sparse_c
11from example import sparse_passthrough_r, sparse_passthrough_c
Ben North4a220912016-07-05 20:03:02 +010012from example import double_row, double_col
Ben North7b8d9e02016-07-05 21:03:19 +010013from example import double_mat_cm, double_mat_rm
Jason Rhinelander5fd50742016-08-03 16:50:22 -040014from example import cholesky1, cholesky2, cholesky3, cholesky4, cholesky5, cholesky6
Jason Rhinelander8657f302016-08-04 13:21:39 -040015from example import diagonal, diagonal_1, diagonal_n
16from example import block
Jason Rhinelander9ffb3dd2016-08-04 15:24:41 -040017from example import incr_diag, symmetric_upper, symmetric_lower
Jason Rhinelander7de9f6c2016-07-08 17:44:12 -040018try:
19 import numpy as np
Jason Rhinelandereae180c2016-07-12 14:16:46 -040020 import scipy
Jason Rhinelander7de9f6c2016-07-08 17:44:12 -040021except ImportError:
22 # NumPy missing: skip test
23 exit(99)
Wenzel Jakob9e0a0562016-05-05 20:33:54 +020024
25ref = np.array(
26 [[0, 3, 0, 0, 0, 11],
27 [22, 0, 0, 0, 17, 11],
28 [7, 5, 0, 1, 0, 11],
29 [0, 0, 0, 0, 0, 11],
30 [0, 0, 14, 0, 8, 11]])
31
32
33def check(mat):
Ben North150a0fa2016-07-05 19:59:28 +010034 return 'OK' if np.sum(abs(mat - ref)) == 0 else 'NOT OK'
Wenzel Jakob9e0a0562016-05-05 20:33:54 +020035
Ben North676e2982016-07-05 21:46:09 +010036print("should_give_NOT_OK = %s" % check(ref[:, ::-1]))
37
Wenzel Jakob9e0a0562016-05-05 20:33:54 +020038print("fixed_r = %s" % check(fixed_r()))
39print("fixed_c = %s" % check(fixed_c()))
40print("pt_r(fixed_r) = %s" % check(fixed_passthrough_r(fixed_r())))
41print("pt_c(fixed_c) = %s" % check(fixed_passthrough_c(fixed_c())))
42print("pt_r(fixed_c) = %s" % check(fixed_passthrough_r(fixed_c())))
43print("pt_c(fixed_r) = %s" % check(fixed_passthrough_c(fixed_r())))
44
45print("dense_r = %s" % check(dense_r()))
46print("dense_c = %s" % check(dense_c()))
47print("pt_r(dense_r) = %s" % check(dense_passthrough_r(dense_r())))
48print("pt_c(dense_c) = %s" % check(dense_passthrough_c(dense_c())))
49print("pt_r(dense_c) = %s" % check(dense_passthrough_r(dense_c())))
50print("pt_c(dense_r) = %s" % check(dense_passthrough_c(dense_r())))
51
52print("sparse_r = %s" % check(sparse_r()))
53print("sparse_c = %s" % check(sparse_c()))
54print("pt_r(sparse_r) = %s" % check(sparse_passthrough_r(sparse_r())))
55print("pt_c(sparse_c) = %s" % check(sparse_passthrough_c(sparse_c())))
56print("pt_r(sparse_c) = %s" % check(sparse_passthrough_r(sparse_c())))
57print("pt_c(sparse_r) = %s" % check(sparse_passthrough_c(sparse_r())))
Ben North4a220912016-07-05 20:03:02 +010058
59def check_got_vs_ref(got_x, ref_x):
60 return 'OK' if np.array_equal(got_x, ref_x) else 'NOT OK'
61
62counting_mat = np.arange(9.0, dtype=np.float32).reshape((3, 3))
63first_row = counting_mat[0, :]
64first_col = counting_mat[:, 0]
65
66print("double_row(first_row) = %s" % check_got_vs_ref(double_row(first_row), 2.0 * first_row))
67print("double_col(first_row) = %s" % check_got_vs_ref(double_col(first_row), 2.0 * first_row))
68print("double_row(first_col) = %s" % check_got_vs_ref(double_row(first_col), 2.0 * first_col))
69print("double_col(first_col) = %s" % check_got_vs_ref(double_col(first_col), 2.0 * first_col))
Ben North7b8d9e02016-07-05 21:03:19 +010070
71counting_3d = np.arange(27.0, dtype=np.float32).reshape((3, 3, 3))
72slices = [counting_3d[0, :, :], counting_3d[:, 0, :], counting_3d[:, :, 0]]
73
74for slice_idx, ref_mat in enumerate(slices):
75 print("double_mat_cm(%d) = %s" % (slice_idx, check_got_vs_ref(double_mat_cm(ref_mat), 2.0 * ref_mat)))
76 print("double_mat_rm(%d) = %s" % (slice_idx, check_got_vs_ref(double_mat_rm(ref_mat), 2.0 * ref_mat)))
Jason Rhinelander5fd50742016-08-03 16:50:22 -040077
78i = 1
79for chol in [cholesky1, cholesky2, cholesky3, cholesky4, cholesky5, cholesky6]:
80 mymat = chol(np.array([[1,2,4], [2,13,23], [4,23,77]]))
81 print("cholesky" + str(i) + " " + ("OK" if (mymat == np.array([[1,0,0], [2,3,0], [4,5,6]])).all() else "NOT OKAY"))
82 i += 1
83
Jason Rhinelander8657f302016-08-04 13:21:39 -040084print("diagonal() %s" % ("OK" if (diagonal(ref) == ref.diagonal()).all() else "FAILED"))
85print("diagonal_1() %s" % ("OK" if (diagonal_1(ref) == ref.diagonal(1)).all() else "FAILED"))
86for i in range(-5, 7):
87 print("diagonal_n(%d) %s" % (i, "OK" if (diagonal_n(ref, i) == ref.diagonal(i)).all() else "FAILED"))
88
89print("block(2,1,3,3) %s" % ("OK" if (block(ref, 2, 1, 3, 3) == ref[2:5, 1:4]).all() else "FAILED"))
90print("block(1,4,4,2) %s" % ("OK" if (block(ref, 1, 4, 4, 2) == ref[1:, 4:]).all() else "FAILED"))
91print("block(1,4,3,2) %s" % ("OK" if (block(ref, 1, 4, 3, 2) == ref[1:4, 4:]).all() else "FAILED"))
Jason Rhinelander9ffb3dd2016-08-04 15:24:41 -040092
93print("incr_diag %s" % ("OK" if (incr_diag(7) == np.diag([1,2,3,4,5,6,7])).all() else "FAILED"))
94
95asymm = np.array([
96 [1, 2, 3, 4],
97 [5, 6, 7, 8],
98 [9, 10,11,12],
99 [13,14,15,16]])
100symm_lower = np.array(asymm)
101symm_upper = np.array(asymm)
102for i in range(4):
103 for j in range(i+1, 4):
104 symm_lower[i,j] = symm_lower[j,i]
105 symm_upper[j,i] = symm_upper[i,j]
106
107print("symmetric_lower %s" % ("OK" if (symmetric_lower(asymm) == symm_lower).all() else "FAILED"))
108print("symmetric_upper %s" % ("OK" if (symmetric_upper(asymm) == symm_upper).all() else "FAILED"))
Dean Moldovaned23dda2016-08-04 01:40:40 +0200109
110print(double_col.__doc__)
111print(double_row.__doc__)
112print(double_mat_rm.__doc__)
113print(sparse_passthrough_r.__doc__)
114print(sparse_passthrough_c.__doc__)