def test_mxv(): m = Matrix.from_lists([0, 1, 2], [1, 2, 0], [1, 2, 3]) v = Vector.from_lists([0, 1, 2], [2, 3, 4]) o = m.mxv(v) assert o == Vector.from_lists([0, 1, 2], [3, 8, 6]) assert m @ v == o
def test_vector_assign(): v = Vector.from_type(int, 10) assert v.nvals == 0 w = Vector.from_lists( list(range(10)), list(range(10))) v[:] = w assert v == w v[1:] = w[9:1:-1] assert v == Vector.from_lists( [0, 1, 2, 3, 4, 5, 6, 7, 8, 9], [0, 9, 8, 7, 6, 5, 4, 3, 2, 1]) w[9:1:-1] = v[9:1:-1] assert w == v v[:] = 3 assert v == Vector.from_lists( list(range(10)), list(repeat(3, 10))) v[1:] = 0 assert v == Vector.from_lists( list(range(10)), [3] + list(repeat(0, 9)))
def test_to_dense(): v = Vector.from_lists(list(range(0, 6, 2)), list(range(3))) assert v.size == 5 assert v.nvals == 3 w = v.to_dense() assert w.nvals == 5 assert w == Vector.from_lists([0, 1, 2, 3, 4], [0, 0, 1, 0, 2])
def test_apply(): v = Vector.from_lists( [0, 1, 2], [2, 3, 4]) w = v.apply(unaryop.ainv_int64) assert w == Vector.from_lists( [0, 1, 2], [-2, -3, -4])
def test_vxm(): m = Matrix.from_lists([0, 1, 2], [1, 2, 0], [1, 2, 3]) v = Vector.from_lists([0, 1, 2], [2, 3, 4]) o = v.vxm(m) assert o == Vector.from_lists([0, 1, 2], [12, 2, 6]) w = Vector.dup(v) assert v @ m == o v @= m assert v == o
def test_matrix_slicing(): I, J = tuple(map(list, zip(*product(range(3), repeat=2)))) V = list(range(9)) m = Matrix.from_lists(I, J, V, 3, 3) v = m[2] assert v == Vector.from_lists([0, 1, 2], [6, 7, 8]) # slice out row vector v = m[2, :] assert v == Vector.from_lists([0, 1, 2], [6, 7, 8]) # slice out column vector v = m[:, 2] assert v == Vector.from_lists([0, 1, 2], [2, 5, 8]) # slice copy n = m[:] assert n == m # also slice copy n = m[:, :] assert n == m # submatrix slice out rows sm = m[0:1] assert sm == Matrix.from_lists([0, 0, 0, 1, 1, 1], [0, 1, 2, 0, 1, 2], [0, 1, 2, 3, 4, 5], 2, 3) # submatrix slice out columns n = m[:, 1:] assert n == Matrix.from_lists([0, 0, 1, 1, 2, 2], [0, 1, 0, 1, 0, 1], [1, 2, 4, 5, 7, 8], 3, 2) # submatrix slice out column range sm = m[:, 1:2] assert sm == Matrix.from_lists([0, 0, 1, 1, 2, 2], [0, 1, 0, 1, 0, 1], [1, 2, 4, 5, 7, 8], 3, 2) # submatrix slice out rows n = m[1:, :] assert n == Matrix.from_lists([0, 0, 0, 1, 1, 1], [0, 1, 2, 0, 1, 2], [3, 4, 5, 6, 7, 8], 2, 3) # submatrix slice out row range sm = m[1:2, :] assert sm == Matrix.from_lists([0, 0, 0, 1, 1, 1], [0, 1, 2, 0, 1, 2], [3, 4, 5, 6, 7, 8], 2, 3)
def test_vector_ewise_add(): v = Vector.from_list(list(range(10))) w = Vector.from_list(list(range(10))) x = v.ewise_add(w) assert x == Vector.from_lists(list(range(10)), list(range(0, 20, 2))) z = v + w assert x == z v += w assert v == z
def test_vector_ewise_mult(): v = Vector.from_list(list(range(10))) w = Vector.from_list(list(range(10))) x = v.ewise_mult(w) assert x == Vector.from_lists(list(range(10)), list(map(lambda x: x * x, list(range(10))))) z = v * w assert x == z v *= w assert v == z
def test_matrix_slice_vector(): v = Matrix.from_lists(list(range(10)), list(range(10)), list(range(10))) assert v[5] == Vector.from_lists([5], [5], 10)
def test_select(): v = Vector.from_lists( [0, 1, 2], [0, 0, 3]) w = v.select(lib.GxB_NONZERO) assert w.to_lists() == [[2], [3]]