Skip to content

Commit 1ba13b4

Browse files
committed
simplify with option
1 parent b217781 commit 1ba13b4

File tree

4 files changed

+120
-212
lines changed

4 files changed

+120
-212
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ mod test {
9292
// make sure it is because there are no qubits in the barrier
9393
let mut analyzer = QTypeAnalyzer::new();
9494
let tuple_type = hugr::types::Type::new_tuple(type_row);
95-
assert!(!analyzer.unpack_type(&tuple_type).is_qb_container());
95+
assert!(!analyzer.is_qubit_container(&tuple_type));
9696
return;
9797
}
9898
h.single_linked_input(run_barr_func_n.unwrap(), 0)

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

Lines changed: 10 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@ use crate::extension::qsystem::barrier::barrier_ops::{
2020
use crate::extension::qsystem::lower::insert_function;
2121
use crate::extension::qsystem::LowerTk2Error;
2222

23+
use super::qtype_analyzer::is_qubit_array;
24+
2325
type Target = (Node, IncomingPort);
2426

2527
/// Responsible for inserting runtime barriers into the HUGR
@@ -47,18 +49,13 @@ impl BarrierInserter {
4749
.type_row
4850
.iter()
4951
.enumerate()
50-
.filter_map(|(i, typ)| {
51-
let wc = self.op_factory.type_analyzer().unpack_type(typ);
52-
53-
if wc.is_qb_container() {
54-
let port = OutgoingPort::from(i);
55-
let target = hugr
56-
.single_linked_input(node, port)
57-
.expect("linearity violation.");
58-
Some((typ.clone(), target))
59-
} else {
60-
None
61-
}
52+
.filter(|(_, typ)| self.op_factory.type_analyzer().is_qubit_container(typ))
53+
.map(|(i, typ)| {
54+
let port = OutgoingPort::from(i);
55+
let target = hugr
56+
.single_linked_input(node, port)
57+
.expect("linearity violation.");
58+
(typ.clone(), target)
6259
})
6360
.collect()
6461
}
@@ -72,7 +69,7 @@ impl BarrierInserter {
7269
target: Target,
7370
) -> Option<Result<(), LowerTk2Error>> {
7471
// Check if this is an array of qubits
75-
let size = self.op_factory.type_analyzer().is_qubit_array(typ)?;
72+
let size = is_qubit_array(typ)?;
7673

7774
// Build and insert the barrier
7875
Some(match build_runtime_barrier_op(size) {

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

Lines changed: 7 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -18,10 +18,7 @@ use hugr::{
1818
Hugr, Wire,
1919
};
2020

21-
use crate::extension::qsystem::{
22-
barrier::qtype_analyzer::{QTypeAnalyzer, UnpackedRow},
23-
QSystemOpBuilder,
24-
};
21+
use crate::extension::qsystem::{barrier::qtype_analyzer::QTypeAnalyzer, QSystemOpBuilder};
2522

2623
use super::qtype_analyzer::{array_args, is_opt_qb};
2724
// use hugr::builder::{BuildError, DFGBuilder};
@@ -346,12 +343,9 @@ impl BarrierOperationFactory {
346343

347344
/// Helper function for array arguments
348345
fn array_args(&mut self, size: u64, elem_ty: &Type) -> Option<[TypeArg; 3]> {
349-
let UnpackedRow::QbContainer(row) = self
346+
let row = self
350347
.type_analyzer
351-
.unpack_type(&array_type(size, elem_ty.clone()))
352-
else {
353-
return None;
354-
};
348+
.unpack_type(&array_type(size, elem_ty.clone()))?;
355349
let args = [
356350
size.into(),
357351
elem_ty.clone().into(),
@@ -380,7 +374,7 @@ impl BarrierOperationFactory {
380374
}
381375
};
382376

383-
let inner_row_len = self.type_analyzer.unpack_type(elem_ty).num_wires();
377+
let inner_row_len = self.type_analyzer.num_unpacked_wires(elem_ty);
384378

385379
let mut outputs = self.apply_cached_operation(
386380
builder,
@@ -407,12 +401,9 @@ impl BarrierOperationFactory {
407401

408402
/// Generate tuple arguments
409403
fn tuple_args(&mut self, tuple_row: &[Type]) -> Option<[TypeArg; 2]> {
410-
let UnpackedRow::QbContainer(unpacked_row) = self
404+
let unpacked_row = self
411405
.type_analyzer
412-
.unpack_type(&Type::new_tuple(tuple_row.to_vec()))
413-
else {
414-
return None;
415-
};
406+
.unpack_type(&Type::new_tuple(tuple_row.to_vec()))?;
416407

417408
let args = [
418409
TypeArg::Sequence {
@@ -455,7 +446,7 @@ impl BarrierOperationFactory {
455446
types
456447
.iter()
457448
.map(|typ| {
458-
let wire_count = self.type_analyzer.unpack_type(typ).num_wires();
449+
let wire_count = self.type_analyzer.num_unpacked_wires(typ);
459450
let type_wires = wires.by_ref().take(wire_count).collect();
460451
self.repack_container(builder, typ, type_wires)
461452
})

0 commit comments

Comments
 (0)