예제 #1
0
    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
예제 #2
0
    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()
        ]
예제 #6
0
    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))