From 10a44a0cc9eecb3c344f453fbd280a7696364a74 Mon Sep 17 00:00:00 2001 From: Florian OMNES Date: Tue, 13 Aug 2024 11:38:46 +0200 Subject: [PATCH 1/3] Remove long list of if/elif, use dict --- src/andromede/expression/visitor.py | 64 +++++++++++------------------ 1 file changed, 25 insertions(+), 39 deletions(-) diff --git a/src/andromede/expression/visitor.py b/src/andromede/expression/visitor.py index 351be9e5..27f2c643 100644 --- a/src/andromede/expression/visitor.py +++ b/src/andromede/expression/visitor.py @@ -133,45 +133,31 @@ def visit(root: ExpressionNode, visitor: ExpressionVisitor[T]) -> T: """ Utility method to dispatch calls to the right method of a visitor. """ - if isinstance(root, LiteralNode): - return visitor.literal(root) - elif isinstance(root, NegationNode): - return visitor.negation(root) - elif isinstance(root, VariableNode): - return visitor.variable(root) - elif isinstance(root, ParameterNode): - return visitor.parameter(root) - elif isinstance(root, ComponentParameterNode): - return visitor.comp_parameter(root) - elif isinstance(root, ComponentVariableNode): - return visitor.comp_variable(root) - elif isinstance(root, ProblemParameterNode): - return visitor.pb_parameter(root) - elif isinstance(root, ProblemVariableNode): - return visitor.pb_variable(root) - elif isinstance(root, AdditionNode): - return visitor.addition(root) - elif isinstance(root, MultiplicationNode): - return visitor.multiplication(root) - elif isinstance(root, DivisionNode): - return visitor.division(root) - elif isinstance(root, ComparisonNode): - return visitor.comparison(root) - elif isinstance(root, TimeShiftNode): - return visitor.time_shift(root) - elif isinstance(root, TimeEvalNode): - return visitor.time_eval(root) - elif isinstance(root, TimeSumNode): - return visitor.time_sum(root) - elif isinstance(root, AllTimeSumNode): - return visitor.all_time_sum(root) - elif isinstance(root, ScenarioOperatorNode): - return visitor.scenario_operator(root) - elif isinstance(root, PortFieldNode): - return visitor.port_field(root) - elif isinstance(root, PortFieldAggregatorNode): - return visitor.port_field_aggregator(root) - raise ValueError(f"Unknown expression node type {root.__class__}") + TYPES = { + LiteralNode: 'literal', + NegationNode: 'negation', + VariableNode: 'variable', + ParameterNode: 'parameter', + ComponentParameterNode: 'comp_parameter', + ComponentVariableNode: 'comp_variable', + ProblemParameterNode: 'pb_parameter', + ProblemVariableNode: 'pb_variable', + AdditionNode: 'addition', + MultiplicationNode: 'multiplication', + DivisionNode: 'division', + ComparisonNode: 'comparison', + TimeShiftNode: 'time_shift', + TimeEvalNode: 'time_eval', + TimeSumNode: 'time_sum', + AllTimeSumNode: 'all_time_sum', + ScenarioOperatorNode: 'scenario_operator', + PortFieldNode: 'port_field', + PortFieldAggregatorNode: 'port_field_aggregator' + } + if type(root) in TYPES: + return getattr(visitor, TYPES[type(root)])(root) + else: + raise ValueError(f"Unknown expression node type {root.__class__}") class SupportsOperations(Protocol[T]): From 393ad23270cf82868310bb72b23fe517fbe222c5 Mon Sep 17 00:00:00 2001 From: Florian OMNES Date: Tue, 13 Aug 2024 11:42:37 +0200 Subject: [PATCH 2/3] Black is the new orange --- src/andromede/expression/visitor.py | 95 ++++++++++++----------------- 1 file changed, 38 insertions(+), 57 deletions(-) diff --git a/src/andromede/expression/visitor.py b/src/andromede/expression/visitor.py index 27f2c643..8600520d 100644 --- a/src/andromede/expression/visitor.py +++ b/src/andromede/expression/visitor.py @@ -53,80 +53,61 @@ class ExpressionVisitor(ABC, Generic[T]): """ @abstractmethod - def literal(self, node: LiteralNode) -> T: - ... + def literal(self, node: LiteralNode) -> T: ... @abstractmethod - def negation(self, node: NegationNode) -> T: - ... + def negation(self, node: NegationNode) -> T: ... @abstractmethod - def addition(self, node: AdditionNode) -> T: - ... + def addition(self, node: AdditionNode) -> T: ... @abstractmethod - def multiplication(self, node: MultiplicationNode) -> T: - ... + def multiplication(self, node: MultiplicationNode) -> T: ... @abstractmethod - def division(self, node: DivisionNode) -> T: - ... + def division(self, node: DivisionNode) -> T: ... @abstractmethod - def comparison(self, node: ComparisonNode) -> T: - ... + def comparison(self, node: ComparisonNode) -> T: ... @abstractmethod - def variable(self, node: VariableNode) -> T: - ... + def variable(self, node: VariableNode) -> T: ... @abstractmethod - def parameter(self, node: ParameterNode) -> T: - ... + def parameter(self, node: ParameterNode) -> T: ... @abstractmethod - def comp_parameter(self, node: ComponentParameterNode) -> T: - ... + def comp_parameter(self, node: ComponentParameterNode) -> T: ... @abstractmethod - def comp_variable(self, node: ComponentVariableNode) -> T: - ... + def comp_variable(self, node: ComponentVariableNode) -> T: ... @abstractmethod - def pb_parameter(self, node: ProblemParameterNode) -> T: - ... + def pb_parameter(self, node: ProblemParameterNode) -> T: ... @abstractmethod - def pb_variable(self, node: ProblemVariableNode) -> T: - ... + def pb_variable(self, node: ProblemVariableNode) -> T: ... @abstractmethod - def time_shift(self, node: TimeShiftNode) -> T: - ... + def time_shift(self, node: TimeShiftNode) -> T: ... @abstractmethod - def time_eval(self, node: TimeEvalNode) -> T: - ... + def time_eval(self, node: TimeEvalNode) -> T: ... @abstractmethod - def time_sum(self, node: TimeSumNode) -> T: - ... + def time_sum(self, node: TimeSumNode) -> T: ... @abstractmethod - def all_time_sum(self, node: AllTimeSumNode) -> T: - ... + def all_time_sum(self, node: AllTimeSumNode) -> T: ... @abstractmethod - def scenario_operator(self, node: ScenarioOperatorNode) -> T: - ... + def scenario_operator(self, node: ScenarioOperatorNode) -> T: ... @abstractmethod - def port_field(self, node: PortFieldNode) -> T: - ... + def port_field(self, node: PortFieldNode) -> T: ... @abstractmethod - def port_field_aggregator(self, node: PortFieldAggregatorNode) -> T: - ... + def port_field_aggregator(self, node: PortFieldAggregatorNode) -> T: ... def visit(root: ExpressionNode, visitor: ExpressionVisitor[T]) -> T: @@ -134,25 +115,25 @@ def visit(root: ExpressionNode, visitor: ExpressionVisitor[T]) -> T: Utility method to dispatch calls to the right method of a visitor. """ TYPES = { - LiteralNode: 'literal', - NegationNode: 'negation', - VariableNode: 'variable', - ParameterNode: 'parameter', - ComponentParameterNode: 'comp_parameter', - ComponentVariableNode: 'comp_variable', - ProblemParameterNode: 'pb_parameter', - ProblemVariableNode: 'pb_variable', - AdditionNode: 'addition', - MultiplicationNode: 'multiplication', - DivisionNode: 'division', - ComparisonNode: 'comparison', - TimeShiftNode: 'time_shift', - TimeEvalNode: 'time_eval', - TimeSumNode: 'time_sum', - AllTimeSumNode: 'all_time_sum', - ScenarioOperatorNode: 'scenario_operator', - PortFieldNode: 'port_field', - PortFieldAggregatorNode: 'port_field_aggregator' + LiteralNode: "literal", + NegationNode: "negation", + VariableNode: "variable", + ParameterNode: "parameter", + ComponentParameterNode: "comp_parameter", + ComponentVariableNode: "comp_variable", + ProblemParameterNode: "pb_parameter", + ProblemVariableNode: "pb_variable", + AdditionNode: "addition", + MultiplicationNode: "multiplication", + DivisionNode: "division", + ComparisonNode: "comparison", + TimeShiftNode: "time_shift", + TimeEvalNode: "time_eval", + TimeSumNode: "time_sum", + AllTimeSumNode: "all_time_sum", + ScenarioOperatorNode: "scenario_operator", + PortFieldNode: "port_field", + PortFieldAggregatorNode: "port_field_aggregator", } if type(root) in TYPES: return getattr(visitor, TYPES[type(root)])(root) From 2cbe4d831f576d1d4311bc0c82492cacc3539a68 Mon Sep 17 00:00:00 2001 From: Thomas Bittar Date: Fri, 11 Apr 2025 12:04:01 +0200 Subject: [PATCH 3/3] Apply black --- src/andromede/expression/visitor.py | 57 +++++++++++++++++++---------- 1 file changed, 38 insertions(+), 19 deletions(-) diff --git a/src/andromede/expression/visitor.py b/src/andromede/expression/visitor.py index 8600520d..02d54651 100644 --- a/src/andromede/expression/visitor.py +++ b/src/andromede/expression/visitor.py @@ -53,61 +53,80 @@ class ExpressionVisitor(ABC, Generic[T]): """ @abstractmethod - def literal(self, node: LiteralNode) -> T: ... + def literal(self, node: LiteralNode) -> T: + ... @abstractmethod - def negation(self, node: NegationNode) -> T: ... + def negation(self, node: NegationNode) -> T: + ... @abstractmethod - def addition(self, node: AdditionNode) -> T: ... + def addition(self, node: AdditionNode) -> T: + ... @abstractmethod - def multiplication(self, node: MultiplicationNode) -> T: ... + def multiplication(self, node: MultiplicationNode) -> T: + ... @abstractmethod - def division(self, node: DivisionNode) -> T: ... + def division(self, node: DivisionNode) -> T: + ... @abstractmethod - def comparison(self, node: ComparisonNode) -> T: ... + def comparison(self, node: ComparisonNode) -> T: + ... @abstractmethod - def variable(self, node: VariableNode) -> T: ... + def variable(self, node: VariableNode) -> T: + ... @abstractmethod - def parameter(self, node: ParameterNode) -> T: ... + def parameter(self, node: ParameterNode) -> T: + ... @abstractmethod - def comp_parameter(self, node: ComponentParameterNode) -> T: ... + def comp_parameter(self, node: ComponentParameterNode) -> T: + ... @abstractmethod - def comp_variable(self, node: ComponentVariableNode) -> T: ... + def comp_variable(self, node: ComponentVariableNode) -> T: + ... @abstractmethod - def pb_parameter(self, node: ProblemParameterNode) -> T: ... + def pb_parameter(self, node: ProblemParameterNode) -> T: + ... @abstractmethod - def pb_variable(self, node: ProblemVariableNode) -> T: ... + def pb_variable(self, node: ProblemVariableNode) -> T: + ... @abstractmethod - def time_shift(self, node: TimeShiftNode) -> T: ... + def time_shift(self, node: TimeShiftNode) -> T: + ... @abstractmethod - def time_eval(self, node: TimeEvalNode) -> T: ... + def time_eval(self, node: TimeEvalNode) -> T: + ... @abstractmethod - def time_sum(self, node: TimeSumNode) -> T: ... + def time_sum(self, node: TimeSumNode) -> T: + ... @abstractmethod - def all_time_sum(self, node: AllTimeSumNode) -> T: ... + def all_time_sum(self, node: AllTimeSumNode) -> T: + ... @abstractmethod - def scenario_operator(self, node: ScenarioOperatorNode) -> T: ... + def scenario_operator(self, node: ScenarioOperatorNode) -> T: + ... @abstractmethod - def port_field(self, node: PortFieldNode) -> T: ... + def port_field(self, node: PortFieldNode) -> T: + ... @abstractmethod - def port_field_aggregator(self, node: PortFieldAggregatorNode) -> T: ... + def port_field_aggregator(self, node: PortFieldAggregatorNode) -> T: + ... def visit(root: ExpressionNode, visitor: ExpressionVisitor[T]) -> T: