def get_block_relation_features(self, block1: SimpleBlock, block2: SimpleBlock):
        features = []

        # Add block 1 type
        features.extend([0] * BasicBlockType.block_type_count())
        features[block1.get_block_type().get_best_type().id()] = 1

        # Add block 2 type
        features.extend([0] * BasicBlockType.block_type_count())
        features[block2.get_block_type().get_best_type().id() + BasicBlockType.block_type_count()] = 1

        # Are 2 blocks adjacent
        features.append(block1.is_adjacent(block2))

        # Are 2 blocks separated by 1 row/column
        features.append(block1.are_blocks_within_x_row_or_column(2, block2))

        # Are 2 blocks separated by 4 rows/columns
        features.append(block1.are_blocks_within_x_row_or_column(5, block2))

        # Are 2 blocks horizontal
        features.append(block1.are_blocks_horizontal(block2))

        # Are 2 blocks vertical
        features.append(block1.are_blocks_vertical(block2))

        # Do the blocks have a block in between # cannot compute with this input

        # TODO: Does the block have any adjacent blocks? Important?

        return features
    def add_mapping(self, label1, block1: SimpleBlock, label2,
                    block2: SimpleBlock):
        mapping_type = "dimension_mapping"

        mapping = dict()
        mapping['type'] = mapping_type

        mapped_dimension = -1
        if block1.are_blocks_vertical(block2):
            mapped_dimension = 1
        elif block1.are_blocks_horizontal(block2):
            mapped_dimension = 0

        mapping['value'] = "{}:{} <-> {}:{}".format(label1, mapped_dimension,
                                                    label2, mapped_dimension)

        self.annotation['relationships']['mappings'].append(mapping)