Esempio n. 1
0
def test_diff():
    md = MutableDenseNDimArray([[x, y], [x*z, x*y*z]])
    assert md.diff(x) == MutableDenseNDimArray([[1, 0], [z, y*z]])

    sd = MutableSparseNDimArray(md)
    assert sd == MutableSparseNDimArray([x, y, x*z, x*y*z], (2, 2))
    assert sd.diff(x) == MutableSparseNDimArray([[1, 0], [z, y*z]])
Esempio n. 2
0
def test_ndim_array_converting():
    dense_array = MutableDenseNDimArray([1, 2, 3, 4], (2, 2))
    alist = dense_array.tolist()

    assert alist == [[1, 2], [3, 4]]

    matrix = dense_array.tomatrix()
    assert isinstance(matrix, Matrix)

    for i, ai in enumerate(dense_array):
        assert ai == matrix[i]
    assert matrix.shape == dense_array.shape

    assert MutableDenseNDimArray(matrix) == dense_array
    assert MutableDenseNDimArray(matrix.as_immutable()) == dense_array
    assert MutableDenseNDimArray(matrix.as_mutable()) == dense_array

    sparse_array = MutableSparseNDimArray([1, 2, 3, 4], (2, 2))
    alist = sparse_array.tolist()

    assert alist == [[1, 2], [3, 4]]

    matrix = sparse_array.tomatrix()
    assert isinstance(matrix, SparseMatrix)

    pytest.raises(ValueError,
                  lambda: MutableSparseNDimArray([1]*6, (2, 2, 2)).tomatrix())

    for i, ai in enumerate(sparse_array):
        assert ai == matrix[i]
    assert matrix.shape == sparse_array.shape

    assert MutableSparseNDimArray(matrix) == sparse_array
    assert MutableSparseNDimArray(matrix.as_immutable()) == sparse_array
    assert MutableSparseNDimArray(matrix.as_mutable()) == sparse_array
Esempio n. 3
0
def test_slices():
    md = MutableDenseNDimArray(range(10, 34), (2, 3, 4))

    assert md[:] == md._array
    assert md[:, :, 0].tomatrix() == Matrix([[10, 14, 18], [22, 26, 30]])
    assert md[0, 1:2, :].tomatrix() == Matrix([[14, 15, 16, 17]])
    assert md[0, 1:3, :].tomatrix() == Matrix([[14, 15, 16, 17], [18, 19, 20, 21]])
    assert md[:, :, :] == md

    sd = MutableSparseNDimArray(range(10, 34), (2, 3, 4))
    assert sd == MutableSparseNDimArray(md)

    assert sd[:] == md._array
    assert sd[:] == list(sd)
    assert sd[:, :, 0].tomatrix() == Matrix([[10, 14, 18], [22, 26, 30]])
    assert sd[0, 1:2, :].tomatrix() == Matrix([[14, 15, 16, 17]])
    assert sd[0, 1:3, :].tomatrix() == Matrix([[14, 15, 16, 17], [18, 19, 20, 21]])
    assert sd[:, :, :] == sd
Esempio n. 4
0
def test_calculation():

    a = MutableDenseNDimArray([1]*9, (3, 3))
    b = MutableDenseNDimArray([9]*9, (3, 3))

    c = a + b
    for i in c:
        assert i == 10

    assert c == MutableDenseNDimArray([10]*9, (3, 3))
    assert c == MutableSparseNDimArray([10]*9, (3, 3))

    c = b - a
    for i in c:
        assert i == 8

    assert c == MutableDenseNDimArray([8]*9, (3, 3))
    assert c == MutableSparseNDimArray([8]*9, (3, 3))

    pytest.raises(TypeError, lambda: c + 1)
Esempio n. 5
0
def test_calculation():

    a = MutableDenseNDimArray([1] * 9, (3, 3))
    b = MutableDenseNDimArray([9] * 9, (3, 3))

    c = a + b
    for i in c:
        assert i == 10

    assert c == MutableDenseNDimArray([10] * 9, (3, 3))
    assert c == MutableSparseNDimArray([10] * 9, (3, 3))

    c = b - a
    for i in c:
        assert i == 8

    assert c == MutableDenseNDimArray([8] * 9, (3, 3))
    assert c == MutableSparseNDimArray([8] * 9, (3, 3))

    assert c.__rtruediv__(1) == NotImplemented
Esempio n. 6
0
def test_sparse():
    sparse_array = MutableSparseNDimArray([0, 0, 0, 1], (2, 2))
    assert len(sparse_array) == 2 * 2
    # dictionary where all data is, only non-zero entries are actually stored:
    assert len(sparse_array._sparse_array) == 1

    assert list(sparse_array) == [0, 0, 0, 1]
    assert sparse_array == MutableSparseNDimArray({(1, 1): 1}, (2, 2))

    for i, j in zip(sparse_array, [0, 0, 0, 1]):
        assert i == j

    sparse_array[0, 0] = 123
    assert len(sparse_array._sparse_array) == 2
    assert sparse_array[0, 0] == 123

    # when element in sparse array become zero it will disappear from
    # dictionary
    sparse_array[0, 0] = 0
    assert len(sparse_array._sparse_array) == 1
    sparse_array[1, 1] = 0
    assert len(sparse_array._sparse_array) == 0
    assert sparse_array[0, 0] == 0
Esempio n. 7
0
def test_ndim_array_initiation():
    arr_with_one_element = MutableDenseNDimArray([23])
    assert len(arr_with_one_element) == 1
    assert arr_with_one_element[0] == 23
    assert arr_with_one_element.rank() == 1
    pytest.raises(ValueError, lambda: arr_with_one_element[1])

    arr_with_symbol_element = MutableDenseNDimArray([Symbol('x')])
    assert len(arr_with_symbol_element) == 1
    assert arr_with_symbol_element[0] == Symbol('x')
    assert arr_with_symbol_element.rank() == 1

    number5 = 5
    vector = MutableDenseNDimArray.zeros(number5)
    assert len(vector) == number5
    assert vector.shape == (number5,)
    assert vector.rank() == 1
    pytest.raises(ValueError, lambda: arr_with_one_element[5])

    vector = MutableSparseNDimArray.zeros(number5)
    assert len(vector) == number5
    assert vector.shape == (number5,)
    assert not vector._sparse_array
    assert vector.rank() == 1

    n_dim_array = MutableDenseNDimArray(range(3**4), (3, 3, 3, 3,))
    assert len(n_dim_array) == 3 * 3 * 3 * 3
    assert n_dim_array.shape == (3, 3, 3, 3)
    assert n_dim_array.rank() == 4
    pytest.raises(ValueError, lambda: n_dim_array[0, 0, 0, 3])
    pytest.raises(ValueError, lambda: n_dim_array[3, 0, 0, 0])
    pytest.raises(ValueError, lambda: n_dim_array[3**4])

    array_shape = (3, 3, 3, 3)
    sparse_array = MutableSparseNDimArray.zeros(*array_shape)
    assert len(sparse_array._sparse_array) == 0
    assert len(sparse_array) == 3 * 3 * 3 * 3
    assert n_dim_array.shape == array_shape
    assert n_dim_array.rank() == 4

    one_dim_array = MutableDenseNDimArray([2, 3, 1])
    assert len(one_dim_array) == 3
    assert one_dim_array.shape == (3,)
    assert one_dim_array.rank() == 1
    assert one_dim_array.tolist() == [2, 3, 1]

    shape = (3, 3)
    array_with_many_args = MutableSparseNDimArray.zeros(*shape)
    assert len(array_with_many_args) == 3 * 3
    assert array_with_many_args.shape == shape
    assert array_with_many_args[0, 0] == 0
    assert array_with_many_args.rank() == 2

    pytest.raises(TypeError, lambda: MutableDenseNDimArray(1))
    pytest.raises(TypeError, lambda: MutableDenseNDimArray([1, 2], shape=(1.2, 3)))
    pytest.raises(ValueError, lambda: MutableDenseNDimArray([[1, 2], [3]]))

    b = MutableDenseNDimArray([1, 2, 3, 4], shape=(2, 2))
    c = MutableDenseNDimArray(b)
    assert c.shape == (2, 2)

    a2 = MutableDenseNDimArray([[2, 3], [4, 5]])
    pytest.raises(ValueError, lambda: a2[10])
    pytest.raises(ValueError, lambda: a2[1, 1, 1])
    pytest.raises(ValueError, lambda: a2[3, 3])