예제 #1
0
    def test_reset_bcol(self):

        row = np.array([0, 3, 1, 2, 3, 0])
        col = np.array([0, 0, 1, 2, 3, 3])
        data = np.array([2., 1, 3, 4, 5, 1])
        m = coo_matrix((data, (row, col)), shape=(4, 4))
        rank = comm.Get_rank()

        # create mpi matrix
        rank_ownership = [[0, -1], [-1, 1]]
        bm = MPIBlockMatrix(2, 2, rank_ownership, comm)
        if rank == 0:
            bm.set_block(0, 0, m)
        if rank == 1:
            bm.set_block(1, 1, m)
        bm.broadcast_block_sizes()

        serial_bm = BlockMatrix(2, 2)
        serial_bm.set_block(0, 0, m)
        serial_bm.set_block(1, 1, m)

        self.assertTrue(
            np.allclose(serial_bm.row_block_sizes(), bm.row_block_sizes()))
        bm.reset_bcol(0)
        serial_bm.reset_bcol(0)
        self.assertTrue(
            np.allclose(serial_bm.col_block_sizes(), bm.col_block_sizes()))

        bm.reset_bcol(1)
        serial_bm.reset_bcol(1)
        self.assertTrue(
            np.allclose(serial_bm.col_block_sizes(), bm.col_block_sizes()))
예제 #2
0
 def test_dimensions(self):
     bm = BlockMatrix(2, 2)
     self.assertTrue(bm.has_undefined_row_sizes())
     self.assertTrue(bm.has_undefined_col_sizes())
     with self.assertRaises(NotFullyDefinedBlockMatrixError):
         shape = bm.shape
     with self.assertRaises(NotFullyDefinedBlockMatrixError):
         bm.set_block(0, 0, BlockMatrix(2, 2))
     with self.assertRaises(NotFullyDefinedBlockMatrixError):
         row_sizes = bm.row_block_sizes()
     with self.assertRaises(NotFullyDefinedBlockMatrixError):
         col_sizes = bm.col_block_sizes()
     bm2 = BlockMatrix(2, 2)
     bm2.set_block(0, 0, coo_matrix((2, 2)))
     bm2.set_block(1, 1, coo_matrix((2, 2)))
     bm3 = bm2.copy()
     bm.set_block(0, 0, bm2)
     bm.set_block(1, 1, bm3)
     self.assertFalse(bm.has_undefined_row_sizes())
     self.assertFalse(bm.has_undefined_col_sizes())
     self.assertEqual(bm.shape, (8, 8))
     bm.set_block(0, 0, None)
     self.assertFalse(bm.has_undefined_row_sizes())
     self.assertFalse(bm.has_undefined_col_sizes())
     self.assertEqual(bm.shape, (8, 8))
     self.assertTrue(np.all(bm.row_block_sizes() == np.ones(2) * 4))
     self.assertTrue(np.all(bm.col_block_sizes() == np.ones(2) * 4))
     self.assertTrue(
         np.all(bm.row_block_sizes(copy=False) == np.ones(2) * 4))
     self.assertTrue(
         np.all(bm.col_block_sizes(copy=False) == np.ones(2) * 4))
예제 #3
0
    def test_setitem(self):

        m = BlockMatrix(2, 2)
        m[0, 1] = self.block_m
        self.assertFalse(m.is_empty_block(0, 1))
        self.assertEqual(m.row_block_sizes()[0], self.block_m.shape[0])
        self.assertEqual(m.col_block_sizes()[1], self.block_m.shape[1])
        self.assertEqual(m[0, 1].shape, self.block_m.shape)
예제 #4
0
    def test_setitem(self):

        m = BlockMatrix(2, 2)
        m[0, 1] = self.block_m
        self.assertFalse(m.is_empty_block(0, 1))
        self.assertEqual(m.row_block_sizes()[0], self.block_m.shape[0])
        self.assertEqual(m.col_block_sizes()[1], self.block_m.shape[1])
        self.assertEqual(m[0, 1].shape, self.block_m.shape)