Skip to content

Commit d17b245

Browse files
authored
feat: Export entrypoint metadata in Python and fix bug in import (#2434)
This PR ensures that the `core.entrypoint` metadata is exported in the Python bindings. It also fixes a bug in `hugr-core` import that added children of the root node to the entrypoint instead of the root.
1 parent 620d40b commit d17b245

File tree

2 files changed

+14
-5
lines changed

2 files changed

+14
-5
lines changed

hugr-core/src/import.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ use crate::{
3030
},
3131
};
3232
use fxhash::FxHashMap;
33-
use hugr_model::v0 as model;
3433
use hugr_model::v0::table;
34+
use hugr_model::v0::{self as model};
3535
use itertools::{Either, Itertools};
3636
use smol_str::{SmolStr, ToSmolStr};
3737
use thiserror::Error;
@@ -433,7 +433,7 @@ impl<'a> Context<'a> {
433433
let region_data = self.get_region(self.module.root)?;
434434

435435
for node in region_data.children {
436-
self.import_node(*node, self.hugr.entrypoint())?;
436+
self.import_node(*node, self.hugr.module_root())?;
437437
}
438438

439439
for meta_item in region_data.meta {

hugr-py/src/hugr/model/export.py

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,6 @@ def __init__(self, hugr: Hugr):
4949
self.link_names: dict[InPort | OutPort, str] = {}
5050
self.link_next = 0
5151

52-
# TODO: Store the hugr entrypoint
53-
5452
for a, b in self.hugr.links():
5553
self.link_ports.union(a, b)
5654

@@ -397,10 +395,18 @@ def export_json_meta(self, node: Node) -> list[model.Term]:
397395

398396
return meta
399397

398+
def export_entrypoint_meta(self, node: Node) -> list[model.Term]:
399+
"""Export entrypoint metadata if the node is the module entrypoint."""
400+
if self.hugr.entrypoint == node:
401+
return [model.Apply("core.entrypoint")]
402+
else:
403+
return []
404+
400405
def export_region_module(self, node: Node) -> model.Region:
401406
"""Export a module node as a module region."""
402407
node_data = self.hugr[node]
403408
meta = self.export_json_meta(node)
409+
meta += self.export_entrypoint_meta(node)
404410
children = []
405411

406412
for child in node_data.children:
@@ -419,7 +425,8 @@ def export_region_dfg(self, node: Node) -> model.Region:
419425
target_types: model.Term = model.Wildcard()
420426
sources = []
421427
targets = []
422-
meta = []
428+
429+
meta = self.export_entrypoint_meta(node)
423430

424431
for child in node_data.children:
425432
child_data = self.hugr[child]
@@ -489,6 +496,7 @@ def export_region_cfg(self, node: Node) -> model.Region:
489496
source_types: model.Term = model.Wildcard()
490497
target_types: model.Term = model.Wildcard()
491498
children = []
499+
meta = self.export_entrypoint_meta(node)
492500

493501
for child in node_data.children:
494502
child_data = self.hugr[child]
@@ -540,6 +548,7 @@ def export_region_cfg(self, node: Node) -> model.Region:
540548
sources=[source],
541549
signature=signature,
542550
children=children,
551+
meta=meta,
543552
)
544553

545554
def export_symbol(

0 commit comments

Comments
 (0)