Notebooks · lib/algo/legacy/tests/eig_sort
lib/ algo/ legacy/ tests/ eig_sort.viv
lib/algo/legacy/tests/eig_sort.viv · 1 code cellOpen in the workbenchDownload .vivLook inside this program
- Atlas
The program’s map: every function and which calls which.
There’s no recorded run of this program yet.
Shift+Enter in a cell runs it and moves to the next. Running a cell runs every cell above it too, as one program.
[1]lines 1–48
# Generated by tools/algo/check.py from lib/algo/algo.spec: do not edit. # Each case prints its input (= X), its results, and the verdict of each postcondition # (? ...) as lib/algo/props.viv computes it; check.py checks them again in Python. from algo.cases import algo_case, CASE_NAMES from algo.props import algo_follows, algo_is_index_perm, algo_is_sorted, algo_is_stable_values from algo.legacy.eig_sort import eig_sort #| eig_sort: lib/hf's eig_sort: selection sort of eigenvalues, moving each eigenvector's column with it def algo_t_eig_sort(kind, n, inside, skip: Arr) -> Bool { X = algo_case(kind, n, 1 + 97 * kind + n) print("@ eig_sort", CASE_NAMES[kind], n) D = copy(X) W = eye(len(X)) eig_sort(D, W, len(X)) P = zeros(len(X)) for j to len(X) { for i to len(X) { if W[i, j] == 1.0 { P[j] = i } } } print("= X", fmt(X)) print("= D", fmt(D)) print("= P", fmt(P)) p0 = algo_is_sorted(D) p1 = algo_is_index_perm(P, len(X)) p2 = algo_follows(D, P, X) p3 = algo_is_stable_values(D, X) print("?", p0, p1, p2, p3) return inside == 0 or ((p0 or skip[0] == 1) and (p1 or skip[1] == 1) and (p2 or skip[2] == 1)) } algo_t_ok_eig_sort = true algo_t_kinds_eig_sort = [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0] algo_t_inside_eig_sort = [1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 1.0, 0.0] algo_t_sizes_eig_sort = [0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 7.0, 8.0, 9.0, 15.0, 16.0, 17.0, 31.0, 32.0, 33.0, 63.0, 64.0, 65.0] algo_t_skip_eig_sort = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0] for algo_t_k to len(algo_t_kinds_eig_sort) { for algo_t_s to len(algo_t_sizes_eig_sort) { algo_t_r = algo_t_eig_sort(algo_t_kinds_eig_sort[algo_t_k], algo_t_sizes_eig_sort[algo_t_s], algo_t_inside_eig_sort[algo_t_k], algo_t_skip_eig_sort[algo_t_k * 3:(algo_t_k + 1) * 3]) algo_t_ok_eig_sort = algo_t_ok_eig_sort and algo_t_r } } test "eig_sort: ordered D, index-perm P X, follows D P X (kinds random dups sorted reversed equal organ sawtooth nearly zeros)" { assert_true(algo_t_ok_eig_sort) }