Skip to content

Commit ef0fe68

Browse files
authored
fix(tket2-hseries): ensure deterministic lowering using maps (#884)
Replaces HashMap with BTreeMap and IndexMap (`OpHashWrapper` is not `Ord` so can't use `BTreeMap`) as appropriate.
1 parent 6bcc9d6 commit ef0fe68

File tree

4 files changed

+8
-5
lines changed

4 files changed

+8
-5
lines changed

Cargo.lock

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

tket2-hseries/Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ derive_more = { workspace = true, features = [
3939
] }
4040
typetag.workspace = true
4141
delegate.workspace = true
42+
indexmap.workspace = true
4243

4344
[dev-dependencies]
4445
cool_asserts.workspace = true

tket2-hseries/src/extension/qsystem/barrier/barrier_ops.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
use std::collections::HashMap;
21
use std::ops::Deref;
32
use std::sync::Arc;
43

@@ -17,6 +16,7 @@ use hugr::{
1716
},
1817
Hugr, Wire,
1918
};
19+
use indexmap::IndexMap;
2020

2121
use crate::extension::qsystem::{barrier::qtype_analyzer::QTypeAnalyzer, QSystemOpBuilder};
2222

@@ -57,7 +57,7 @@ pub struct BarrierOperationFactory {
5757
/// Temporary extension used for placeholder operations.
5858
extension: Arc<Extension>,
5959
/// Function definitions for each instance of the operations.
60-
pub(super) funcs: HashMap<OpHashWrapper, Hugr>,
60+
pub(super) funcs: IndexMap<OpHashWrapper, Hugr>,
6161
/// Type analyzer for determining qubit types
6262
type_analyzer: QTypeAnalyzer,
6363
}
@@ -79,7 +79,7 @@ impl BarrierOperationFactory {
7979
pub fn new() -> Self {
8080
Self {
8181
extension: Self::build_extension(),
82-
funcs: HashMap::new(),
82+
funcs: IndexMap::new(),
8383
type_analyzer: QTypeAnalyzer::new(),
8484
}
8585
}

tket2-hseries/src/extension/qsystem/lower.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,8 @@ use hugr::{
1414
Hugr, HugrView, Node, Wire,
1515
};
1616
use lazy_static::lazy_static;
17-
use std::collections::hash_map::{Entry, HashMap};
17+
use std::collections::btree_map::Entry;
18+
use std::collections::BTreeMap;
1819
use tket2::{extension::rotation::RotationOpBuilder, Tk2Op};
1920

2021
use crate::extension::qsystem::{self, QSystemOp, QSystemOpBuilder};
@@ -92,7 +93,7 @@ pub(super) fn insert_function(hugr: &mut impl HugrMut<Node = Node>, func_def: Hu
9293
/// # Errors
9394
/// Returns an error if the replacement fails.
9495
pub fn lower_tk2_op(hugr: &mut impl HugrMut<Node = Node>) -> Result<Vec<Node>, LowerTk2Error> {
95-
let mut funcs: HashMap<Tk2Op, Node> = HashMap::new();
96+
let mut funcs: BTreeMap<Tk2Op, Node> = BTreeMap::new();
9697
let mut lowerer = ReplaceTypes::new_empty();
9798
let mut barrier_funcs = BarrierInserter::new();
9899

0 commit comments

Comments
 (0)