def _verify_job(self, input_file, args, verbose=1, rundir=None): '''Check job against benchmark. Assume function is executed in self.path. IMPORTANT: use self.verify_job rather than self._verify_job if using multiple threads. Decorated to verify_job, which acquires directory lock and enters self.path first, during initialisation.''' try: (status, msg) = self.skip_job(input_file, args, verbose) except exceptions.AnalysisError: if verbose > 2: err = sys.exc_info()[1] print(err) msg = '' try: if self.test_program.verify and not status.skipped(): (status, msg) = self.verify_job_external(input_file, args, verbose) elif not status.skipped(): (bench_out, test_out) = self.extract_data(input_file, args, verbose) (comparable, status, msg) = validation.compare_data(bench_out, test_out, self.default_tolerance, self.tolerances) if verbose > 2: # Include data tables in output. if comparable: # Combine test and benchmark dictionaries. data_table = util.pretty_print_table( ['benchmark', 'test'], [bench_out, test_out]) else: # Print dictionaries separately--couldn't even compare # them! data_table = '\n'.join(( util.pretty_print_table(['benchmark'], [bench_out]), util.pretty_print_table(['test '], [test_out]))) if msg.strip(): # join data table with error message from # validation.compare_data. msg = '\n'.join((msg, data_table)) else: msg = data_table except exceptions.AnalysisError: if msg.strip(): msg = '%s\n%s' % (msg, sys.exc_info()[1]) else: msg = sys.exc_info()[1] status = validation.Status([False]) self._update_status(status, (input_file, args)) if verbose > 0 and verbose < 3: info_line = util.info_line(self.path, input_file, args, rundir) sys.stdout.write(info_line) status.print_status(msg, verbose) return (status, msg)
def _verify_job(self, input_file, args, verbose=1, rundir=None): '''Check job against benchmark. Assume function is executed in self.path. IMPORTANT: use self.verify_job rather than self._verify_job if using multiple threads. Decorated to verify_job, which acquires directory lock and enters self.path first, during initialisation.''' # We already have DIR_LOCK, so use _skip_job instead of skip_job. (status, msg) = self._skip_job(input_file, args, verbose) try: if self.test_program.verify and not status.skipped(): (status, msg) = self.verify_job_external(input_file, args, verbose) elif not status.skipped(): (bench_out, test_out) = self.extract_data(input_file, args, verbose) (comparable, status, msg) = validation.compare_data( bench_out, test_out, self.default_tolerance, self.tolerances, self.test_program.ignore_fields) if verbose > 2: # Include data tables in output. if comparable: # Combine test and benchmark dictionaries. data_table = util.pretty_print_table( ['benchmark', 'test'], [bench_out, test_out]) else: # Print dictionaries separately--couldn't even compare # them! data_table = '\n'.join( (util.pretty_print_table(['benchmark'], [bench_out]), util.pretty_print_table(['test '], [test_out]))) if msg.strip(): # join data table with error message from # validation.compare_data. msg = '\n'.join((msg, data_table)) else: msg = data_table except (exceptions.AnalysisError, exceptions.TestCodeError): if msg.strip(): msg = '%s\n%s' % (msg, sys.exc_info()[1]) else: msg = sys.exc_info()[1] status = validation.Status([False]) self._update_status(status, (input_file, args)) if verbose > 0 and verbose < 3: info_line = util.info_line(self.path, input_file, args, rundir) sys.stdout.write(info_line) status.print_status(msg, verbose) return (status, msg)