diff --git a/src/gboml/ast/__init__.py b/src/gboml/ast/__init__.py index fa27dbea0206990074b5f599883fdbea3f82f96f..7d6e478a658bad5dea8991e6c73b55a67bd6ec76 100644 --- a/src/gboml/ast/__init__.py +++ b/src/gboml/ast/__init__.py @@ -4,7 +4,7 @@ __all__ = [ "VarOrParam", "Array", "Loop", "BaseLoop", "Function", "BoolExpressionOp", "BoolExpressionComparison", "ScopeChange", "ImportFile", "Definition", "Constraint", "StdConstraint", "SOSConstraint", "Objective", "VariableDefinition", "Node", - "HyperEdge", "NodeDefinition", "NodeImport", "HyperEdgeDefinition", "HyperEdgeImport", + "HyperEdge", "NodeDefinition", "HyperEdgeDefinition", "ExpressionOp", "GBOMLGraph", "ImplicitLoop", "RValue", "RValueWithGen", "GeneratedRValue", "Range", "MultiLoop", "DictEntry", "Dictionary", "NodeGenerator", "HyperEdgeGenerator", "DefinitionType", "FunctionDefinition", "ConstantDefinition", "ExpressionDefinition", diff --git a/src/gboml/ast/hyperedges.py b/src/gboml/ast/hyperedges.py index bbeeedddf26df94a7b4bc3fa5e236e462e86bdf9..e09ce5f544f8ca3e039ed9bf68e88c4256866ef4 100644 --- a/src/gboml/ast/hyperedges.py +++ b/src/gboml/ast/hyperedges.py @@ -33,11 +33,3 @@ class HyperEdgeGenerator(HyperEdge): constraints: list[Constraint] = field(default_factory=list) activations: list[CtrActivation] = field(default_factory=list) tags: list[str] = field(default_factory=list) - - -@dataclass -class HyperEdgeImport(HyperEdge): - name: str - imported_name: VarOrParam - imported_from: str - redefinitions: list[Definition] \ No newline at end of file diff --git a/src/gboml/ast/nodes.py b/src/gboml/ast/nodes.py index 1ed435a8b1cdcfa8995af8f9f74b5c57eb9ab96a..14aa719a901a5051aa90c43d6184f58a41a8f4d3 100644 --- a/src/gboml/ast/nodes.py +++ b/src/gboml/ast/nodes.py @@ -24,7 +24,7 @@ class NodeDefinition(Node): parameters: list[Definition] = field(default_factory=list) nodes: list[Node] = field(default_factory=list) hyperedges: list[HyperEdge] = field(default_factory=list) - variables: list[VariableDefinition] = field(default_factory=list) + variables: list[VariableDefinition | ScopeChange] = field(default_factory=list) constraints: list[Constraint] = field(default_factory=list) objectives: list[Objective] = field(default_factory=list) activations: list[Activation] = field(default_factory=list) @@ -39,17 +39,8 @@ class NodeGenerator(Node): parameters: list[Definition] = field(default_factory=list) nodes: list[Node] = field(default_factory=list) hyperedges: list[HyperEdge] = field(default_factory=list) - variables: list[VariableDefinition] = field(default_factory=list) + variables: list[VariableDefinition | ScopeChange] = field(default_factory=list) constraints: list[Constraint] = field(default_factory=list) objectives: list[Objective] = field(default_factory=list) activations: list[Activation] = field(default_factory=list) tags: list[str] = field(default_factory=list) - - -@dataclass -class NodeImport(Node): - name: str - imported_name: VarOrParam - imported_from: str - scope_changes: list[ScopeChange] = field(default_factory=list) - redefinitions: list[Definition] = field(default_factory=list) diff --git a/src/gboml/parsing.py b/src/gboml/parsing.py index 2cff83189cf6da690165b3e4b31dee81c0c6f6ea..98570ab0cd4fe52dec903ac844520e63cdd50b34 100644 --- a/src/gboml/parsing.py +++ b/src/gboml/parsing.py @@ -63,7 +63,6 @@ def _lark_to_gboml(tree: Tree, filename: Optional[str] = None) -> GBOMLGraph: # obj(*children, meta=meta) # to_obj = { - "hyperedge_import": HyperEdgeImport, "var_or_param_leaf": VarOrParamLeaf, "var_or_param": VarOrParam, "constraint_std": StdConstraint, @@ -173,9 +172,14 @@ def _lark_to_gboml(tree: Tree, filename: Optional[str] = None) -> GBOMLGraph: objectives_block, activations, tags, meta=meta) def node_import(self, meta: Meta, name: str, imported_name: VarOrParam, imported_from: str, redef: list[ScopeChange | Definition]): - return NodeImport(name, imported_name, imported_from, - [x for x in redef if isinstance(x, ScopeChange)], - [x for x in redef if isinstance(x, Definition)], meta=meta) + return NodeDefinition(name, Extends(imported_name, imported_from, meta=meta), + parameters=[x for x in redef if isinstance(x, Definition)], + variables=[x for x in redef if isinstance(x, ScopeChange)], + meta=meta) + + def hyperedge_import(self, meta: Meta, name: str, imported_name: VarOrParam, imported_from: str, redef: list[Definition]): + return HyperEdgeDefinition(name, Extends(imported_name, imported_from, meta=meta), + parameters=redef, meta=meta) def start(self, meta: Meta, time_horizon: Optional[int], global_defs: list[Definition], nodes_hyperedges: NodesAndHyperEdges): return GBOMLGraph(time_horizon, global_defs, nodes_hyperedges.nodes, nodes_hyperedges.hyperedges, meta=meta)