Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 13 additions & 0 deletions tket2-hseries/src/replace_bools.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
//! Provides a `ReplaceBoolPass` which replaces the tket2.bool type and
//! lazifies measure operations.
mod static_array;

use derive_more::{Display, Error, From};
use hugr::{
algorithms::{
Expand All @@ -21,6 +23,7 @@ use hugr::{
types::{SumType, Type},
Hugr, Node, Wire,
};
use static_array::{ReplaceStaticArrayBoolPass, ReplaceStaticArrayBoolPassError};
use tket2::{
extension::bool::{bool_type, BoolOp, ConstBool},
Tk2Op,
Expand All @@ -39,6 +42,9 @@ pub enum ReplaceBoolPassError<N> {
NonLocalEdgesError(NonLocalEdgesError<N>),
/// There was an error while replacing the type.
ReplacementError(ReplaceTypesError),
/// There was an error while transforming static arrays containing tket.bool
/// to static arrays of bool_t.
ReplaceStaticArrayBoolPassError(ReplaceStaticArrayBoolPassError),
}

/// A HUGR -> HUGR pass which replaces the `tket2.bool`, enabling lazifying of measure
Expand Down Expand Up @@ -67,6 +73,7 @@ impl<H: HugrMut<Node = Node>> ComposablePass<H> for ReplaceBoolPass {
fn run(&self, hugr: &mut H) -> Result<(), Self::Error> {
// TODO uncomment once https://github.com/CQCL/hugr/issues/1234 is complete
// ensure_no_nonlocal_edges(hugr)?;
ReplaceStaticArrayBoolPass::default().run(hugr)?;
let lowerer = lowerer();
lowerer.run(hugr)?;
Ok(())
Expand Down Expand Up @@ -320,6 +327,7 @@ mod test {

let pass = ReplaceBoolPass;
pass.run(&mut h).unwrap();
h.validate().unwrap();

let sig = h.signature(h.entrypoint()).unwrap();
assert_eq!(sig.input(), &TypeRow::from(vec![bool_dest()]));
Expand All @@ -339,6 +347,7 @@ mod test {

let pass = ReplaceBoolPass;
pass.run(&mut h).unwrap();
h.validate().unwrap();

let sig = h.signature(h.entrypoint()).unwrap();
assert_eq!(sig.input(), &TypeRow::from(vec![bool_t()]));
Expand All @@ -364,6 +373,7 @@ mod test {

let pass = ReplaceBoolPass;
pass.run(&mut h).unwrap();
h.validate().unwrap();

let sig = h.signature(h.entrypoint()).unwrap();
assert_eq!(sig.input(), &TypeRow::from(vec![bool_dest(), bool_dest()]));
Expand All @@ -380,6 +390,7 @@ mod test {

let pass = ReplaceBoolPass;
pass.run(&mut h).unwrap();
h.validate().unwrap();

let sig = h.signature(h.entrypoint()).unwrap();
assert_eq!(sig.input(), &TypeRow::from(vec![bool_dest()]));
Expand All @@ -397,6 +408,7 @@ mod test {

let pass = ReplaceBoolPass;
pass.run(&mut h).unwrap();
h.validate().unwrap();

let sig = h.signature(h.entrypoint()).unwrap();
assert_eq!(sig.output(), &TypeRow::from(vec![bool_dest()]));
Expand All @@ -421,6 +433,7 @@ mod test {

let pass = ReplaceBoolPass;
pass.run(&mut h).unwrap();
h.validate().unwrap();

let sig = h.signature(h.entrypoint()).unwrap();
assert_eq!(sig.output(), &TypeRow::from(vec![qb_t(), bool_dest()]));
Expand Down
Loading
Loading