From f617417284d0393d5f7cf65823c88c11137bccec Mon Sep 17 00:00:00 2001 From: Florian OMNES Date: Tue, 13 Aug 2024 11:38:46 +0200 Subject: [PATCH 1/2] Remove long list of if/elif, use dict --- src/andromede/expression/visitor.py | 55 ++++++++++++----------------- 1 file changed, 22 insertions(+), 33 deletions(-) diff --git a/src/andromede/expression/visitor.py b/src/andromede/expression/visitor.py index 25bbfb02..b7d8b65b 100644 --- a/src/andromede/expression/visitor.py +++ b/src/andromede/expression/visitor.py @@ -118,39 +118,28 @@ 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, AdditionNode): - return visitor.addition(root) - elif isinstance(root, MultiplicationNode): - return visitor.multiplication(root) - elif isinstance(root, DivisionNode): - return visitor.division(root) - elif isinstance(root, SubstractionNode): - return visitor.substraction(root) - elif isinstance(root, ComparisonNode): - return visitor.comparison(root) - elif isinstance(root, TimeOperatorNode): - return visitor.time_operator(root) - elif isinstance(root, TimeAggregatorNode): - return visitor.time_aggregator(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', + AdditionNode: 'addition', + MultiplicationNode: 'multiplication', + DivisionNode: 'division', + SubstractionNode: 'substraction', + ComparisonNode: 'comparison', + TimeOperatorNode: 'time_operator', + TimeAggregatorNode: 'time_aggregator', + 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 bbd79fb0c3237df67e60e8b00802236aece5c3a4 Mon Sep 17 00:00:00 2001 From: Florian OMNES Date: Tue, 13 Aug 2024 11:42:37 +0200 Subject: [PATCH 2/2] Black is the new orange --- src/andromede/expression/visitor.py | 32 ++++++++++++++--------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/andromede/expression/visitor.py b/src/andromede/expression/visitor.py index b7d8b65b..2f51ef4e 100644 --- a/src/andromede/expression/visitor.py +++ b/src/andromede/expression/visitor.py @@ -119,22 +119,22 @@ 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', - AdditionNode: 'addition', - MultiplicationNode: 'multiplication', - DivisionNode: 'division', - SubstractionNode: 'substraction', - ComparisonNode: 'comparison', - TimeOperatorNode: 'time_operator', - TimeAggregatorNode: 'time_aggregator', - ScenarioOperatorNode: 'scenario_operator', - PortFieldNode: 'port_field', - PortFieldAggregatorNode: 'port_field_aggregator' + LiteralNode: "literal", + NegationNode: "negation", + VariableNode: "variable", + ParameterNode: "parameter", + ComponentParameterNode: "comp_parameter", + ComponentVariableNode: "comp_variable", + AdditionNode: "addition", + MultiplicationNode: "multiplication", + DivisionNode: "division", + SubstractionNode: "substraction", + ComparisonNode: "comparison", + TimeOperatorNode: "time_operator", + TimeAggregatorNode: "time_aggregator", + ScenarioOperatorNode: "scenario_operator", + PortFieldNode: "port_field", + PortFieldAggregatorNode: "port_field_aggregator", } if type(root) in TYPES: return getattr(visitor, TYPES[type(root)])(root)