def test_add_tile_to_state_raises_error(self): w = 40 h = 30 dg = DataGenerator(w, h) tiles = np.array([[2, 3], [4, 5]]) matrix = dg._transform_instance_to_matrix(tiles) state = np.copy(matrix[0]) self.assertRaises( ValueError, lambda: DataGenerator.add_tile_to_state( state, DataGenerator.tile_to_matrix([4, 5], w, h), (1, 2)))
def test_get_valid_moves_mask(self): w = 8 h = 6 dg = DataGenerator(w, h) # rows, cols rows, cols tiles = np.array([[2, 3], [4, 5]]) matrix = dg._transform_instance_to_matrix(tiles) state = np.copy(matrix[:, :, 0]) mask = DataGenerator.get_valid_moves_mask( state, [matrix[:, :, 2], matrix[:, :, 3]]) """ state is: [[1. 1. 1. 0. 0. 0. 0. 0.] [1. 1. 1. 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.]] """ self.assertEqual(list( mask[0]), [False, False, False, True, False, False, False, False]) self.assertEqual(list( mask[1]), [False, False, False, True, False, False, False, False]) self.assertEqual(list(mask[2]), [True, True, True, True, False, False, False, False]) self.assertEqual(list( mask[3]), [False, False, False, False, False, False, False, False]) self.assertEqual(list( mask[4]), [False, False, False, False, False, False, False, False]) self.assertEqual(list( mask[5]), [False, False, False, False, False, False, False, False]) self.assertEqual(list( mask[6]), [False, False, False, True, True, False, False, False]) self.assertEqual(list( mask[7]), [False, False, False, True, True, False, False, False]) self.assertEqual(list( mask[8]), [False, False, False, False, False, False, False, False]) self.assertEqual(list( mask[9]), [False, False, False, False, False, False, False, False]) self.assertEqual( list(mask[10]), [False, False, False, False, False, False, False, False]) self.assertEqual( list(mask[11]), [False, False, False, False, False, False, False, False])
def test_get_n_tiles_placed(self): w = 8 h = 8 dg = DataGenerator(w, h) board = np.zeros([h, w, 1]) tiles = np.array([[2, 3], [4, 5]]) tiles = dg._transform_instance_to_matrix(tiles) stack = np.dstack((board, tiles)) print(stack.shape) self.assertEqual(DataGenerator.get_n_tiles_placed(stack), 0) new_stack, vis = DataGenerator.play_position(stack, 64) self.assertEqual(DataGenerator.get_n_tiles_placed(new_stack), 1) new_stack, vis = DataGenerator.play_position(new_stack, 32) self.assertEqual(DataGenerator.get_n_tiles_placed(new_stack), 2)
def test_transform_instance_to_matrix(self): w = 40 h = 30 dg = DataGenerator(w, h) tiles = np.array([[2, 3], [4, 5]]) matrix = dg._transform_instance_to_matrix(tiles) self.assertEqual(matrix[:, :, 0].shape, (h, w)) ORIENTATIONS = 2 self.assertEqual(matrix.shape, ( h, w, len(tiles) * ORIENTATIONS, )) # first tile different orientation self.assertEqual(matrix[0][0][0], 1) self.assertEqual(matrix[0][1][0], 1) self.assertEqual(matrix[0][2][0], 1) self.assertEqual(matrix[1][0][0], 1) self.assertEqual(matrix[1][1][0], 1) self.assertEqual(matrix[1][2][0], 1) self.assertEqual(matrix[2][0][0], 0) self.assertEqual(matrix[2][1][0], 0) self.assertEqual(matrix[2][2][0], 0) self.assertEqual(matrix[1][3][0], 0) # first tile first orientation self.assertEqual(matrix[0][0][1], 1) self.assertEqual(matrix[0][1][1], 1) self.assertEqual(matrix[1][0][1], 1) self.assertEqual(matrix[1][1][1], 1) self.assertEqual(matrix[2][0][1], 1) self.assertEqual(matrix[2][1][1], 1) self.assertEqual(matrix[0][2][1], 0) self.assertEqual(matrix[1][2][1], 0) self.assertEqual(matrix[0][3][1], 0)
def test_get_matrix_tile_dims(self): w = 8 h = 9 dg = DataGenerator(w, h) tile_1_rows = 2 tile_1_cols = 3 tiles = np.array([[tile_1_rows, tile_1_cols], [4, 5]]) matrix = dg._transform_instance_to_matrix(tiles) self.assertEqual(matrix[:, :, 0].shape, (h, w)) ORIENTATIONS = 2 self.assertEqual(matrix.shape, ( h, w, len(tiles) * ORIENTATIONS, )) self.assertEqual(dg.get_matrix_tile_dims(matrix[:, :, 0]), (tile_1_rows, tile_1_cols)) self.assertEqual(dg.get_matrix_tile_dims(matrix[:, :, 1]), (tile_1_cols, tile_1_rows)) self.assertEqual(dg.get_matrix_tile_dims(matrix[:, :, 2]), (4, 5)) self.assertEqual(dg.get_matrix_tile_dims(matrix[:, :, 3]), (5, 4))
def test_play_position(self): w = 8 h = 8 dg = DataGenerator(w, h) board = np.zeros([h, w, 1]) tiles = np.array([[2, 3], [4, 5]]) tiles = dg._transform_instance_to_matrix(tiles) stack = np.dstack((board, tiles)) self.assertEqual(list(stack[:, :, 0][0]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(stack[:, :, 0][1]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(stack[:, :, 0][2]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(stack[:, :, 0][3]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(stack[:, :, 0][4]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(stack[:, :, 0][5]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(stack[:, :, 0][6]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(stack[:, :, 0][7]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(stack[:, :, 1][0]), [1, 1, 1, 0, 0, 0, 0, 0]) self.assertEqual(list(stack[:, :, 1][1]), [1, 1, 1, 0, 0, 0, 0, 0]) self.assertEqual(list(stack[:, :, 1][2]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(stack[:, :, 1][3]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(stack[:, :, 1][4]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(stack[:, :, 1][5]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(stack[:, :, 1][6]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(stack[:, :, 1][7]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(stack[:, :, 2][0]), [1, 1, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(stack[:, :, 2][1]), [1, 1, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(stack[:, :, 2][2]), [1, 1, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(stack[:, :, 2][3]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(stack[:, :, 2][4]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(stack[:, :, 2][5]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(stack[:, :, 2][6]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(stack[:, :, 2][7]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(stack[:, :, 3][0]), [1, 1, 1, 1, 1, 0, 0, 0]) self.assertEqual(list(stack[:, :, 3][1]), [1, 1, 1, 1, 1, 0, 0, 0]) self.assertEqual(list(stack[:, :, 3][2]), [1, 1, 1, 1, 1, 0, 0, 0]) self.assertEqual(list(stack[:, :, 3][3]), [1, 1, 1, 1, 1, 0, 0, 0]) self.assertEqual(list(stack[:, :, 3][4]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(stack[:, :, 3][5]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(stack[:, :, 3][6]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(stack[:, :, 3][7]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(stack[:, :, 4][0]), [1, 1, 1, 1, 0, 0, 0, 0]) self.assertEqual(list(stack[:, :, 4][1]), [1, 1, 1, 1, 0, 0, 0, 0]) self.assertEqual(list(stack[:, :, 4][2]), [1, 1, 1, 1, 0, 0, 0, 0]) self.assertEqual(list(stack[:, :, 4][3]), [1, 1, 1, 1, 0, 0, 0, 0]) self.assertEqual(list(stack[:, :, 4][4]), [1, 1, 1, 1, 0, 0, 0, 0]) self.assertEqual(list(stack[:, :, 4][5]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(stack[:, :, 4][6]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(stack[:, :, 4][7]), [0, 0, 0, 0, 0, 0, 0, 0]) print(stack.shape) new_stack, vis_new_stack = DataGenerator.play_position(stack, 64) self.assertEqual(list(new_stack[:, :, 0][0]), [1, 1, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(new_stack[:, :, 0][1]), [1, 1, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(new_stack[:, :, 0][2]), [1, 1, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(new_stack[:, :, 0][3]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(new_stack[:, :, 0][4]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(new_stack[:, :, 0][5]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(new_stack[:, :, 0][6]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(new_stack[:, :, 0][7]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(new_stack[:, :, 1][0]), [1, 1, 1, 1, 1, 0, 0, 0]) self.assertEqual(list(new_stack[:, :, 1][1]), [1, 1, 1, 1, 1, 0, 0, 0]) self.assertEqual(list(new_stack[:, :, 1][2]), [1, 1, 1, 1, 1, 0, 0, 0]) self.assertEqual(list(new_stack[:, :, 1][3]), [1, 1, 1, 1, 1, 0, 0, 0]) self.assertEqual(list(new_stack[:, :, 1][4]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(new_stack[:, :, 1][5]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(new_stack[:, :, 1][6]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(new_stack[:, :, 1][7]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(new_stack[:, :, 2][0]), [1, 1, 1, 1, 0, 0, 0, 0]) self.assertEqual(list(new_stack[:, :, 2][1]), [1, 1, 1, 1, 0, 0, 0, 0]) self.assertEqual(list(new_stack[:, :, 2][2]), [1, 1, 1, 1, 0, 0, 0, 0]) self.assertEqual(list(new_stack[:, :, 2][3]), [1, 1, 1, 1, 0, 0, 0, 0]) self.assertEqual(list(new_stack[:, :, 2][4]), [1, 1, 1, 1, 0, 0, 0, 0]) self.assertEqual(list(new_stack[:, :, 2][5]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(new_stack[:, :, 2][6]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(new_stack[:, :, 2][7]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(new_stack[:, :, 3][0]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(new_stack[:, :, 3][1]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(new_stack[:, :, 3][2]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(new_stack[:, :, 3][3]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(new_stack[:, :, 3][4]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(new_stack[:, :, 3][5]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(new_stack[:, :, 3][6]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(new_stack[:, :, 3][7]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(new_stack[:, :, 4][0]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(new_stack[:, :, 4][1]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(new_stack[:, :, 4][2]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(new_stack[:, :, 4][3]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(new_stack[:, :, 4][4]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(new_stack[:, :, 4][5]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(new_stack[:, :, 4][6]), [0, 0, 0, 0, 0, 0, 0, 0]) self.assertEqual(list(new_stack[:, :, 4][7]), [0, 0, 0, 0, 0, 0, 0, 0])
def test_add_tile_to_state(self): """ test that tile gets added to matrix at depth[0] """ w = 8 h = 9 dg = DataGenerator(w, h) tiles = np.array([[2, 3], [2, 1]]) matrix = dg._transform_instance_to_matrix(tiles) self.assertEqual(list(matrix[:, :, 0][0]), [ 1., 1., 1., 0., 0., 0., 0., 0., ]) self.assertEqual(list(matrix[:, :, 0][1]), [ 1., 1., 1., 0., 0., 0., 0., 0., ]) self.assertEqual(list(matrix[:, :, 0][2]), [ 0., 0., 0., 0., 0., 0., 0., 0., ]) self.assertEqual(list(matrix[:, :, 0][3]), [ 0., 0., 0., 0., 0., 0., 0., 0., ]) self.assertEqual(list(matrix[:, :, 0][4]), [ 0., 0., 0., 0., 0., 0., 0., 0., ]) self.assertEqual(list(matrix[:, :, 0][5]), [ 0., 0., 0., 0., 0., 0., 0., 0., ]) self.assertEqual(list(matrix[:, :, 0][6]), [ 0., 0., 0., 0., 0., 0., 0., 0., ]) self.assertEqual(list(matrix[:, :, 0][7]), [ 0., 0., 0., 0., 0., 0., 0., 0., ]) self.assertEqual(list(matrix[:, :, 0][8]), [ 0., 0., 0., 0., 0., 0., 0., 0., ]) state = matrix[:, :, 0].copy() state, vis = DataGenerator.add_tile_to_state( state, DataGenerator.tile_to_matrix([2, 1], w, h), (2, 2)) self.assertEqual(list(state[0]), [ 1., 1., 1., 0., 0., 0., 0., 0., ]) self.assertEqual(list(state[1]), [ 1., 1., 1., 0., 0., 0., 0., 0., ]) self.assertEqual(list(state[2]), [ 0., 0., 1., 0., 0., 0., 0., 0., ]) self.assertEqual(list(state[3]), [ 0., 0., 1., 0., 0., 0., 0., 0., ]) self.assertEqual(list(state[4]), [ 0., 0., 0., 0., 0., 0., 0., 0., ]) self.assertEqual(list(state[5]), [ 0., 0., 0., 0., 0., 0., 0., 0., ]) self.assertEqual(list(state[6]), [ 0., 0., 0., 0., 0., 0., 0., 0., ]) self.assertEqual(list(state[7]), [ 0., 0., 0., 0., 0., 0., 0., 0., ]) self.assertEqual(list(state[8]), [ 0., 0., 0., 0., 0., 0., 0., 0., ])