def test_as_matrix(self, row_dimensions, column_dimensions, real_operator):

        op = BlockedDiscreteBoundaryOperator(row_dimensions, column_dimensions)
        op[1, 0] = real_operator

        expected = op * np.eye(op.shape[1], dtype=op.dtype)
        actual = op.as_matrix()

        assert np.linalg.norm(expected - actual) < _eps
    def test_as_matrix(self,row_dimensions,column_dimensions,real_operator):


        op = BlockedDiscreteBoundaryOperator(row_dimensions,column_dimensions)
        op[1,0] = real_operator

        expected = op*np.eye(op.shape[1],dtype=op.dtype)
        actual = op.as_matrix()

        assert np.linalg.norm(expected-actual)<_eps
    def test_add_nonblocked_operator(self, row_dimensions, column_dimensions,
                                     real_operator):

        op = BlockedDiscreteBoundaryOperator(row_dimensions, column_dimensions)
        op[1, 0] = real_operator

        res = op + ZeroDiscreteBoundaryOperator(op.shape[0], op.shape[1])
        actual = res.as_matrix()
        expected = op.as_matrix()

        assert np.linalg.norm(actual - expected) < _eps
    def test_add_blocked_operator(self, row_dimensions, column_dimensions,
                                  real_operator):
        op = BlockedDiscreteBoundaryOperator(row_dimensions, column_dimensions)
        op[1, 0] = real_operator

        res = op + op
        actual = res.as_matrix()
        expected = 2 * op.as_matrix()

        assert isinstance(res, BlockedDiscreteBoundaryOperator)
        assert np.linalg.norm(actual - expected) < _eps
    def test_add_nonblocked_operator(self,row_dimensions,column_dimensions,
            real_operator):

        op = BlockedDiscreteBoundaryOperator(row_dimensions,column_dimensions)
        op[1,0] = real_operator

        res = op+ZeroDiscreteBoundaryOperator(op.shape[0],op.shape[1])
        actual = res.as_matrix()
        expected = op.as_matrix()

        assert np.linalg.norm(actual-expected)<_eps
    def test_add_blocked_operator(self,row_dimensions,column_dimensions,
            real_operator):
        op = BlockedDiscreteBoundaryOperator(row_dimensions,column_dimensions)
        op[1,0] = real_operator

        res = op+op
        actual = res.as_matrix()
        expected = 2*op.as_matrix()

        assert isinstance(res,BlockedDiscreteBoundaryOperator)
        assert np.linalg.norm(actual-expected)<_eps
    def test_scale(self, row_dimensions, column_dimensions, real_operator):

        op = BlockedDiscreteBoundaryOperator(row_dimensions, column_dimensions)
        op[1, 0] = real_operator

        alpha = 1 + 2.0j
        res = alpha * op

        expected = alpha * (op.as_matrix())
        actual = res.as_matrix()

        assert np.linalg.norm(expected - actual) < _eps
        assert isinstance(res, BlockedDiscreteBoundaryOperator)
    def test_scale(self,row_dimensions,column_dimensions,real_operator):

        op = BlockedDiscreteBoundaryOperator(row_dimensions,column_dimensions)
        op[1,0] = real_operator

        alpha = 1+2.0j
        res = alpha*op

        expected = alpha*(op.as_matrix())
        actual = res.as_matrix()

        assert np.linalg.norm(expected-actual)<_eps
        assert isinstance(res,BlockedDiscreteBoundaryOperator)
    def test_dtype(self, row_dimensions, column_dimensions, real_operator,
                   complex_operator):
        op = BlockedDiscreteBoundaryOperator(row_dimensions, column_dimensions)

        op[1, 0] = real_operator

        assert op.dtype == 'float64'

        op[1, 0] = complex_operator

        assert op.dtype == 'complex128'
    def test_matvec(self, row_dimensions, column_dimensions, real_operator):

        op = BlockedDiscreteBoundaryOperator(row_dimensions, column_dimensions)

        op[1, 0] = real_operator

        vec = np.random.rand(op.shape[1], 2)
        actual = op * vec

        expected = np.zeros((op.shape[0], vec.shape[1]), dtype=op.dtype)
        expected[20:20 + 512, :] = real_operator * vec[:512, :]
        assert np.linalg.norm(actual - expected) < _eps
    def test_set_operator(self, row_dimensions, column_dimensions,
                          real_operator):
        op = BlockedDiscreteBoundaryOperator(row_dimensions, column_dimensions)

        op[1, 0] = real_operator
 def test_column_dimensions(self, row_dimensions, column_dimensions):
     op = BlockedDiscreteBoundaryOperator(row_dimensions, column_dimensions)
     assert np.linalg.norm(op.column_dimensions - column_dimensions) == 0
 def test_ndims(self, row_dimensions, column_dimensions):
     op = BlockedDiscreteBoundaryOperator(row_dimensions, column_dimensions)
     assert op.ndims == (3, 2)
 def test_shape(self, row_dimensions, column_dimensions):
     op = BlockedDiscreteBoundaryOperator(row_dimensions, column_dimensions)
     assert op.shape == (572, 542)
 def test_initialization(self, row_dimensions, column_dimensions):
     op = BlockedDiscreteBoundaryOperator(row_dimensions, column_dimensions)