(dataset_name,
split_name="valid",
problem_name="",
problem_number=0)
| 102 | |
| 103 | |
| 104 | def solve_problem(dataset_name, |
| 105 | split_name="valid", |
| 106 | problem_name="", |
| 107 | problem_number=0): |
| 108 | |
| 109 | # load dataset |
| 110 | logger = get_logger(__name__) |
| 111 | data_provider = CodeContestDataProvider(dataset_location=dataset_name) |
| 112 | if problem_number and problem_name: |
| 113 | logger.info(f"problem_number and problem_name are both specified, using problem_name") |
| 114 | if not problem_name and problem_number: |
| 115 | problem_name = data_provider.dataset[split_name][int(problem_number)]['name'] |
| 116 | logger.info(f"problem_name: {problem_name}") |
| 117 | |
| 118 | # find problem |
| 119 | problem = data_provider.find_problem(ds=data_provider.dataset, problem_name=problem_name, split_name=split_name) |
| 120 | logger.info(f"problem['name']: {problem['name']}") |
| 121 | |
| 122 | # # check if problem is valid (at least one of the provided solutions actually passes the generated tests) |
| 123 | # if not problem.get('is_valid_problem', True): |
| 124 | # logger.info(f"problem['is_valid_problem'] == False, skipping") |
| 125 | # return None, None |
| 126 | |
| 127 | # evaluate prev solutions |
| 128 | evaluate_prev_solutions = get_settings().get("dataset.evaluate_prev_solutions", False) |
| 129 | if evaluate_prev_solutions: |
| 130 | try: |
| 131 | if not problem['solutions']['solution']: |
| 132 | logger.info("No public solutions for this problem") |
| 133 | found_solution = False |
| 134 | for index_published, sol_published in enumerate(problem['solutions']['solution']): |
| 135 | if 'python' not in problem['solutions']['language'][index_published].lower(): |
| 136 | found_solution = True |
| 137 | continue |
| 138 | logger.info(f"evaluating public solution {index_published} on private tests...") |
| 139 | test_results, test_passed_private, test_failed_private, test_timeout_private \ |
| 140 | = evaluate_solution_on_subset('private_tests', problem, sol_published, silent=True) |
| 141 | logger.info(f"evaluating public solution {index_published} on generated tests...") |
| 142 | test_results, test_passed_generate, test_failed_generate, test_timeout_generate = ( |
| 143 | evaluate_solution_on_subset('generated_tests', problem, sol_published, silent=True)) |
| 144 | |
| 145 | if (test_failed_private == test_failed_generate == test_timeout_private == test_timeout_generate == 0) \ |
| 146 | and test_passed_private + test_passed_generate > 0: |
| 147 | logger.info(f"sol_published index {index_published} passed all tests:\n{sol_published}") |
| 148 | found_solution = True |
| 149 | break |
| 150 | |
| 151 | if not found_solution: |
| 152 | logger.info(f"None of the public solutions passed all tests") |
| 153 | except Exception as e: |
| 154 | logger.error(f"Error evaluating public solutions: {e}") |
| 155 | pass |
| 156 | |
| 157 | |
| 158 | return solve_my_problem(problem) |
| 159 | |
| 160 | |
| 161 | def solve_my_problem(problem): |
no test coverage detected