def METHOD_NAME(self, case, result):
    # If the submission didn't crash and didn't time out, there's a chance it might be AC
    # We shouldn't run checkers if the submission is already known to be incorrect, because some checkers
    # might be very computationally expensive.
    # See https://github.com/DMOJ/judge/issues/170
    checker = case.checker()
    # checker is a `partial` object, NOT a `function` object
    if not result.result_flag or getattr(checker.func, 'run_on_error', False):
        try:
            check = checker(
                result.proc_output,
                case.output_data(),
                submission_source=self.source,
                judge_input=case.input_data(),
                point_value=case.points,
                case_position=case.position,
                batch=case.batch,
                submission_language=self.language,
                binary_data=case.has_binary_data,
                execution_time=result.execution_time,
                problem_id=self.problem.id,
                result=result,
            )
        except UnicodeDecodeError:
            # Don't rely on problemsetters to do sane things when it comes to Unicode handling, so
            # just proactively swallow all Unicode-related checker errors.
            return CheckerResult(False, 0, feedback='invalid unicode')
    else:
        # Solution is guaranteed to receive 0 points
        check = False
    return check