def split_7_shape(block_a: SimpleBlock, block_b: SimpleBlock): if not block_a.is_adjacent(block_b): return block_a, None, block_b b1, b2, b3 = None, None, None if block_a.right_col == block_b.right_col and block_a.left_col != block_b.left_col: if block_b.is_above(block_a): block_a, block_b = block_b, block_a b1 = SimpleBlock(block_a.block_type, block_a.left_col, block_b.left_col - 1, block_a.top_row, block_a.bottom_row) b2 = SimpleBlock(BlockTypePMF({BasicBlockType.HEADER: 1.0}), block_b.left_col, block_b.right_col, block_a.top_row, block_a.bottom_row) b3 = block_b if block_a.left_col == block_b.left_col and block_a.right_col != block_b.right_col: if block_b.is_above(block_a): block_a, block_b = block_b, block_a b1 = SimpleBlock(block_a.block_type, block_b.right_col + 1, block_a.right_col, block_a.top_row, block_a.bottom_row) b2 = SimpleBlock(BlockTypePMF({BasicBlockType.HEADER: 1.0}), block_b.left_col, block_b.right_col, block_a.top_row, block_a.bottom_row) b3 = block_b if block_a.top_row == block_b.top_row and block_a.bottom_row != block_b.bottom_row: if block_a.bottom_row > block_b.bottom_row: block_a, block_b = block_b, block_a b1 = block_a b2 = SimpleBlock(BlockTypePMF({BasicBlockType.HEADER: 1.0}), block_b.left_col, block_b.right_col, block_a.top_row, block_a.bottom_row) b3 = SimpleBlock(block_b.block_type, block_b.left_col, block_b.right_col, block_a.bottom_row + 1, block_b.bottom_row) return b1, b2, b3
def testSimpleBlockFunctions(self): b1 = SimpleBlock(BasicBlockType.HEADER, 0, 1, 0, 0) b2 = SimpleBlock(BasicBlockType.ATTRIBUTE, 0, 0, 1, 3) b3 = SimpleBlock(BasicBlockType.VALUE, 1, 1, 1, 3) b4 = SimpleBlock(BasicBlockType.VALUE, 0, 1, 4, 4) b5 = SimpleBlock(BasicBlockType.VALUE, 2, 3, 1, 1) b6 = SimpleBlock(BasicBlockType.EMPTY, 0, 1, 1, 1) assert b1.is_adjacent(b2) assert b2.is_adjacent(b1) assert b2.is_adjacent(b3) assert b3.is_adjacent(b2) assert b1.is_adjacent(b3) assert b3.is_adjacent(b1) assert b1.is_above(b6) assert not b2.is_above(b3) assert not b3.is_above(b2) assert not b1.is_adjacent(b4) assert not b4.is_adjacent(b1) assert not b1.is_adjacent(b5) assert not b5.is_adjacent(b1)