Exemple #1
0
    def to_grid(self) -> Grid:
        # noinspection PyTypeChecker
        empty_grid_array: List[Row] = np.full([
            self.number_of_rows,
            self.number_of_columns,
        ], self.background_colour).tolist()

        # find lowest depth, then colour all objects that have that depth, then all objects for depth above, etc.
        # noinspection PyTypeChecker
        objects_by_depth: Dict[int, List[Object]] = defaultdict(list)
        for obj in self.objects.values():
            objects_by_depth[obj.depth].append(obj)

        ascending_depths = list(objects_by_depth.keys())
        ascending_depths.sort()

        grid = Grid(empty_grid_array)
        for lowest_depth in ascending_depths:
            objects_for_this_depth = objects_by_depth[lowest_depth]
            for obj in objects_for_this_depth:
                absolute_positions = obj.convert_to_absolute_positions()
                for absolute_position in absolute_positions:
                    grid.set_colour(absolute_position[0], absolute_position[1],
                                    obj.colour)
        return grid
Exemple #2
0
    def test_making_frame_model_from_grid_with_one_object(self):
        g = [
            [0, 0, 0, 0, 0, 0],
            [0, 0, 3, 0, 0, 0],
            [0, 3, 0, 3, 0, 0],
            [0, 0, 3, 0, 3, 0],
            [0, 0, 0, 3, 0, 0],
        ]
        grid = Grid(g)

        frame_model = FrameModel.create_from_grid(grid)
        self.assertEqual(
            6,
            frame_model.number_of_columns
        )
        self.assertEqual(
            5,
            frame_model.number_of_rows
        )

        self.assertEqual(
            0,
            frame_model.background_colour
        )

        self.assertEqual(
            1,
            len(frame_model.objects)
        )
    def test_identical_frames(self):
        frame_model_a = FrameModel.create_from_grid(
            Grid([
                [0, 0, 0],
                [0, 0, 0],
                [0, 0, 0],
            ]))
        frame_model_b = FrameModel.create_from_grid(
            Grid([
                [0, 0, 0],
                [0, 0, 0],
                [0, 0, 0],
            ]))

        self.assertEqual(
            1, ARCDriver.get_frame_similarity(frame_model_a, frame_model_b))
    def test_frames_of_different_sizes(self):
        frame_model_a = FrameModel.create_from_grid(
            Grid([
                [1, 1, 3],
                [3, 2, 2],
                [3, 2, 2],
            ]))
        frame_model_b = FrameModel.create_from_grid(
            Grid([
                [0, 0, 0],
                [0, 2, 2],
                [0, 2, 2],
                [0, 2, 2],
            ]))

        self.assertEqual(
            0, ARCDriver.get_frame_similarity(frame_model_a, frame_model_b))
Exemple #5
0
    def make_frames_from_task(
            self, train_or_test: str) -> List[Dict[str, FrameModel]]:
        frames: List[Dict[str, FrameModel]] = []

        pairs = self.task[train_or_test]
        number_of_pairs = len(pairs)
        for pair_number in range(number_of_pairs):
            input_matrix = pairs[pair_number]['input']
            input_grid = Grid(input_matrix)
            input_frame_model = FrameModel.create_from_grid(input_grid)

            output_matrix = pairs[pair_number]['output']
            output_grid = Grid(output_matrix)
            output_frame_model = FrameModel.create_from_grid(output_grid)
            frames.append({
                "input": input_frame_model,
                "output": output_frame_model,
            })

        return frames
    def test_making_grid_from_frame_model_with_one_object(self):
        g = [
            [0, 0, 0, 0, 0, 0],
            [0, 0, 3, 0, 0, 0],
            [0, 3, 0, 3, 0, 0],
            [0, 0, 3, 0, 3, 0],
            [0, 0, 0, 3, 0, 0],
        ]
        grid = Grid(g)

        frame_model = FrameModel.create_from_grid(grid)
        grid2 = frame_model.to_grid()
        self.assertSequenceEqual(grid.grid_array, grid2.grid_array)
Exemple #7
0
 def create_from_grid(grid: Grid) -> "FrameModel":
     return FrameModel(grid.number_of_rows, grid.number_of_columns,
                       grid.background_colour, grid.parse_objects(), [])
Exemple #8
0
def plot_task(task):
    """
    Plots the first train and test pairs of a specified task,
    using same color scheme as the ARC app
    """

    number_of_training_examples = len(task['train'])
    fig, axes_array = plt.subplots(2,
                                   number_of_training_examples,
                                   figsize=(3 * number_of_training_examples,
                                            3 * 2))
    for task_number in range(number_of_training_examples):
        input_axis = axes_array[0, task_number]
        input_matrix = task['train'][task_number]['input']
        input_grid = Grid(input_matrix)
        input_grid.plot(input_axis, 'train input')

        output_axis = axes_array[1, task_number]
        output_matrix = task['train'][task_number]['output']
        input_grid = Grid(output_matrix)
        input_grid.plot(output_axis, 'train output')
    plt.tight_layout()
    plt.show()

    number_of_test_examples = len(task['test'])
    fig, axes_array = plt.subplots(2,
                                   number_of_test_examples,
                                   figsize=(3 * number_of_test_examples,
                                            3 * 2))
    if number_of_test_examples == 1:
        input_axis = axes_array[0]
        input_matrix = task['test'][0]['input']
        test_input_grid = Grid(input_matrix)
        test_input_grid.plot(input_axis, 'test input')

        output_axis = axes_array[1]
        output_matrix = task['test'][0]['output']
        test_input_grid = Grid(output_matrix)
        test_input_grid.plot(output_axis, 'test output')
    else:
        for task_number in range(number_of_test_examples):
            input_axis = axes_array[0, task_number]
            input_matrix = task['test'][task_number]['input']
            test_input_grid = Grid(input_matrix)
            test_input_grid.plot(input_axis, 'test input')

            output_axis = axes_array[1, task_number]
            output_matrix = task['test'][task_number]['output']
            test_input_grid = Grid(output_matrix)
            test_input_grid.plot(output_axis, 'test output')
    plt.tight_layout()
    plt.show()