"""
IdeaEvaluator
Generated by Eden via recursive self-improvement
2025-11-01 00:38:56.558028
"""

class IdeaEvaluator:
    """
    This class is designed to evaluate new ideas for potential impact and viability based on predefined criteria.
    
    Criteria include: Originality (1-5), Feasibility (1-5), Impact (1-5), and Team Fit (1-5).
    The overall score is calculated by averaging the scores of these criteria.
    """
    
    def __init__(self):
        self.criteria = {
            "Originality": 0,
            "Feasibility": 0,
            "Impact": 0,
            "Team Fit": 0
        }
        
    def set_criteria(self, originality=None, feasibility=None, impact=None, team_fit=None):
        """
        Set the score for each criterion. If a value is not provided, it will be set to its default of 1.
        
        :param originality: Originality score (1-5)
        :param feasibility: Feasibility score (1-5)
        :param impact: Impact score (1-5)
        :param team_fit: Team Fit score (1-5)
        """
        if originality is not None:
            self.criteria["Originality"] = min(max(originality, 1), 5)
        if feasibility is not None:
            self.criteria["Feasibility"] = min(max(feasibility, 1), 5)
        if impact is not None:
            self.criteria["Impact"] = min(max(impact, 1), 5)
        if team_fit is not None:
            self.criteria["Team Fit"] = min(max(team_fit, 1), 5)
    
    def evaluate(self):
        """
        Evaluate the idea based on set criteria and return a score.
        
        :return: Average score of all criteria
        """
        total_score = sum(self.criteria.values())
        if len(self.criteria) == 0:
            raise ValueError("At least one criterion must be set.")
        average_score = total_score / len(self.criteria)
        return average_score
    
    def display_evaluation(self):
        """
        Display the evaluation result in a formatted manner.
        
        :return: A string representation of the evaluation
        """
        overall_score = self.evaluate()
        criteria_scores_str = ", ".join([f"{key}: {value}" for key, value in self.criteria.items()])
        return f"Overall Evaluation: {overall_score}\nCriteria Scores: {criteria_scores_str}"

# Example usage:
idea_evaluator = IdeaEvaluator()
idea_evaluator.set_criteria(originality=4, feasibility=3, impact=5, team_fit=4)
print(idea_evaluator.display_evaluation())