def solve_pair(self, puzzle, solution):
     puzzle_str = gen3.array_to_str(puzzle)
     solver = SudokuSolver(puzzle_str, grid_class=StringGrid)
     solver.run()
     computed_solution = str(solver.grid.layer)
     solution_str = gen3.array_to_str(solution)
     self.assertEqual(computed_solution, solution_str)
    def get_solved_sudoku(self):
        ''' SudokuSolver takes the sudoku as string
         Example : [[1, 0, 3], [0, 2, 1]] = "102021 or 1.2.21" '''

        solver = SudokuSolver(''.join([
            str(cell_value) for row in self.row_wise_sudoku
            for cell_value in row
        ]),
                              grid_class=StringGrid)
        solver.run()
        self.solved_string = str(solver)

        ansi_escape = re.compile(
            r'''
                        \x1B    # ESC
                        [@-_]   # 7-bit C1 Fe
                        [0-?]*  # Parameter bytes
                        [ -/]*  # Intermediate bytes
                        [@-~]   # Final byte
                    ''', re.VERBOSE)

        result = ansi_escape.sub('', self.solved_string)
        print(result)

        self.row_wise_solved_sudoku = list()
        self.row_elements = []

        for value in result:
            try:
                cell_value = int(value)
                self.row_elements.append(cell_value)
                if len(self.row_elements) == 9:
                    self.row_wise_solved_sudoku.append(self.row_elements)
                    self.row_elements = []
            except:
                continue
        print(self.row_wise_solved_sudoku)
        return self.row_wise_solved_sudoku