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
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))
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)
def create_from_grid(grid: Grid) -> "FrameModel": return FrameModel(grid.number_of_rows, grid.number_of_columns, grid.background_colour, grid.parse_objects(), [])
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()