def write_statistics(self) -> bool: """Write result to disk using selected backend Returns: True if the writing was successful """ self._logger.info("Writing statistics") if not self._backend: return False self._output_variables[ stat.RuntimeVariable.TotalTime.name] = sb.OutputVariable( name=stat.RuntimeVariable.TotalTime.name, value=time.time_ns() - self._start_time, ) if not self._best_individual: self._logger.error( "No statistics has been saved because Pynguin failed to generate any " "test case") return False individual = self._best_individual output_variables = self._get_output_variables(individual) self._backend.write_data(output_variables) return True
def _get_output_variables( self, individual, skip_missing: bool = True) -> Dict[str, sb.OutputVariable]: variables: Dict[str, sb.OutputVariable] = {} for variable in config.INSTANCE.output_variables: variable_name = variable.name if variable_name in self._output_variables: # Values directly sent variables[variable_name] = self._output_variables[ variable_name] elif variable_name in self._variable_factories: # Values extracted from the individual variables[variable_name] = self._variable_factories[ variable_name].get_variable(individual) elif variable_name in self._sequence_output_variable_factories: # Time related values, which will be expanded in a list of values # through time for var in self._sequence_output_variable_factories[ variable_name].get_output_variables(): variables[var.name] = var elif skip_missing: # if variable does not exist, return an empty value instead variables[variable_name] = sb.OutputVariable( name=variable_name, value="") else: self._logger.error("No obtained value for output variable %s", variable_name) return {} return variables
def get_variable( self, individual: tsc.TestSuiteChromosome) -> sb.OutputVariable[T]: """Provides the output variable :param individual: The individual :return: The output variable for the individual """ return sb.OutputVariable(name=self._variable.name, value=self.get_data(individual))
def set_output_variable_for_runtime_variable( self, variable: stat.RuntimeVariable, value: Any) -> None: """Sets an output variable to a value directly :param variable: The variable to be set :param value: the value to be set """ self.set_output_variable( sb.OutputVariable(name=variable.name, value=value))
def get_output_variables(self) -> List[sb.OutputVariable[T]]: """Provides the output variables :return: A list of output variables """ return [ sb.OutputVariable(name=variable_name, value=self._get_time_line_value(variable_index)) for variable_index, variable_name in self.get_variable_names_indices() ]
def get_variable(self, individual: chrom.Chromosome) -> sb.OutputVariable[T]: """Provides the output variable Args: individual: The individual Returns: The output variable for the individual """ return sb.OutputVariable(name=self._variable.name, value=self.get_data(individual))