Skip to content

Commit 320b81e

Browse files
committed
feat!: Cleanup core trait definitions (#2126)
Moves some methods around in `HugrInternals` / `HugrView` that we'll require for #1926 and #2029. Notable changes: - Adds a `hierarchy` method to `HugrInternals` that replaces most calls to `base_hugr`. - `HugrInternals::base_hugr` is now deprecated. It's only used by `Sibling/DescendantGraph`, `validate` and a random use in `DeadCodeElimPass`. - Adds a `HugrInternals::region_portgraph` method that returns a `FlatRegion` portgraph wrapper, and a `HugrView::descendants` call. These lets us replace most uses of `SiblingGraph` and `DescendantGraph`. - Renamed `HugrInternals::{get_pg_index,get_node}` to `to_portgraph_node` and `from_portgraph_node`. This requires some new changes in `portgraph`. I'll make a minor release and update it here before merging. We should be able to remove `base_hugr` after #2029. The deprecation warning here is only temporary. BREAKING CHANGE: Modified multiple core `HugrView` and `HugrInternals` trait methods. See #2126.
1 parent ca302d6 commit 320b81e

35 files changed

+800
-658
lines changed

Cargo.lock

Lines changed: 34 additions & 62 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@ regex = "1.10.6"
5858
regex-syntax = "0.8.3"
5959
rstest = "0.24.0"
6060
semver = "1.0.26"
61-
serde = "1.0.195"
61+
serde = "1.0.219"
6262
serde_json = "1.0.140"
6363
serde_yaml = "0.9.34"
6464
smol_str = "0.3.1"
@@ -87,8 +87,8 @@ zstd = "0.13.2"
8787
# These public dependencies usually require breaking changes downstream, so we
8888
# try to be as permissive as possible.
8989
pyo3 = ">= 0.23.4, < 0.25"
90-
portgraph = { version = ">= 0.13.3, < 0.15" }
91-
petgraph = { version = ">= 0.7.1, < 0.9", default-features = false }
90+
portgraph = { version = "0.14.1" }
91+
petgraph = { version = ">= 0.8.1, < 0.9", default-features = false }
9292

9393
[profile.dev.package]
9494
insta.opt-level = 3

hugr-core/src/builder/dataflow.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -506,8 +506,8 @@ pub(crate) mod test {
506506

507507
#[rstest]
508508
fn dfg_hugr(simple_dfg_hugr: Hugr) {
509-
assert_eq!(simple_dfg_hugr.node_count(), 3);
510-
assert_matches!(simple_dfg_hugr.root_type().tag(), OpTag::Dfg);
509+
assert_eq!(simple_dfg_hugr.num_nodes(), 3);
510+
assert_matches!(simple_dfg_hugr.root_optype().tag(), OpTag::Dfg);
511511
}
512512

513513
#[test]
@@ -533,7 +533,7 @@ pub(crate) mod test {
533533
};
534534

535535
let hugr = module_builder.finish_hugr()?;
536-
assert_eq!(hugr.node_count(), 7);
536+
assert_eq!(hugr.num_nodes(), 7);
537537

538538
assert_eq!(hugr.get_metadata(hugr.root(), "x"), None);
539539
assert_eq!(hugr.get_metadata(dfg_node, "x").cloned(), Some(json!(42)));

hugr-core/src/core.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ pub struct Wire<N = Node>(N, OutgoingPort);
8383
impl Node {
8484
/// Returns the node as a portgraph `NodeIndex`.
8585
#[inline]
86-
pub(crate) fn pg_index(self) -> portgraph::NodeIndex {
86+
pub(crate) fn into_portgraph(self) -> portgraph::NodeIndex {
8787
self.index
8888
}
8989
}

hugr-core/src/export.rs

Lines changed: 7 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
//! Exporting HUGR graphs to their `hugr-model` representation.
2+
use crate::hugr::internal::HugrInternals;
23
use crate::{
34
extension::{ExtensionId, OpDef, SignatureFunc},
45
hugr::IdentList,
@@ -94,7 +95,7 @@ struct Context<'a> {
9495
impl<'a> Context<'a> {
9596
pub fn new(hugr: &'a Hugr, bump: &'a Bump) -> Self {
9697
let mut module = table::Module::default();
97-
module.nodes.reserve(hugr.node_count());
98+
module.nodes.reserve(hugr.num_nodes());
9899
let links = Links::new(hugr);
99100

100101
Self {
@@ -999,7 +1000,7 @@ impl<'a> Context<'a> {
9991000
let outer_hugr = std::mem::replace(&mut self.hugr, hugr);
10001001
let outer_node_to_id = std::mem::take(&mut self.node_to_id);
10011002

1002-
let region = match hugr.root_type() {
1003+
let region = match hugr.root_optype() {
10031004
OpType::DFG(_) => self.export_dfg(hugr.root(), model::ScopeClosure::Closed),
10041005
_ => panic!("Value::Function root must be a DFG"),
10051006
};
@@ -1031,7 +1032,7 @@ impl<'a> Context<'a> {
10311032
}
10321033

10331034
pub fn export_node_metadata(&mut self, node: Node) -> &'a [table::TermId] {
1034-
let metadata_map = self.hugr.get_node_metadata(node);
1035+
let metadata_map = self.hugr.node_metadata_map(node);
10351036

10361037
let has_order_edges = {
10371038
fn is_relevant_node(hugr: &Hugr, node: Node) -> bool {
@@ -1049,13 +1050,11 @@ impl<'a> Context<'a> {
10491050
.any(|(other, _)| is_relevant_node(self.hugr, other))
10501051
};
10511052

1052-
let meta_capacity = metadata_map.map_or(0, |map| map.len()) + has_order_edges as usize;
1053+
let meta_capacity = metadata_map.len() + has_order_edges as usize;
10531054
let mut meta = BumpVec::with_capacity_in(meta_capacity, self.bump);
10541055

1055-
if let Some(metadata_map) = metadata_map {
1056-
for (name, value) in metadata_map {
1057-
meta.push(self.export_json_meta(name, value));
1058-
}
1056+
for (name, value) in metadata_map {
1057+
meta.push(self.export_json_meta(name, value));
10591058
}
10601059

10611060
if has_order_edges {

0 commit comments

Comments
 (0)