diff --git a/Cargo.lock b/Cargo.lock index 6503fc5c..517e6a95 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -148,7 +148,7 @@ dependencies = [ "duplicate", "itertools 0.12.1", "lazy_static", - "petgraph", + "petgraph 0.6.5", "proc-macro2", "quote", "syn 2.0.96", @@ -327,9 +327,9 @@ dependencies = [ [[package]] name = "clap" -version = "4.5.27" +version = "4.5.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "769b0145982b4b48713e01ec42d61614425f27b7058bda7180a3a41f30104796" +checksum = "a8eb5e908ef3a6efbe1ed62520fb7287959888c88485abe072543190ecc66783" dependencies = [ "clap_builder", "clap_derive", @@ -347,9 +347,9 @@ dependencies = [ [[package]] name = "clap_builder" -version = "4.5.27" +version = "4.5.26" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1b26884eb4b57140e4d2d93652abfa49498b938b3c9179f9fc487b0acc3edad7" +checksum = "96b01801b5fc6a0a232407abc821660c9c6d25a1cafc0d4f85f29fb8d9afc121" dependencies = [ "anstream", "anstyle", @@ -435,9 +435,9 @@ checksum = "773648b94d0e5d620f64f280777445740e61fe701025087ec8b57f45c791888b" [[package]] name = "cpufeatures" -version = "0.2.17" +version = "0.2.16" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "59ed5838eebb26a2bb2e58f6d5b5316989ae9d08bab10e0e6d103e656d1b0280" +checksum = "16b80225097f2e5ae4e7179dd2266824648f3e2f49d9134d584b76389d31c4c3" dependencies = [ "libc", ] @@ -514,9 +514,9 @@ checksum = "d0a5c400df2834b80a4c3327b3aad3a4c4cd4de0629063962b03235697506a28" [[package]] name = "crunchy" -version = "0.2.3" +version = "0.2.2" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43da5946c66ffcc7745f48db692ffbb10a83bfe0afd96235c5c2a4fb23994929" +checksum = "7a81dae078cea95a014a339291cec439d2f232ebe854a9d672b796c6afafa9b7" [[package]] name = "crypto-common" @@ -655,6 +655,12 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" +[[package]] +name = "downcast-rs" +version = "2.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ea8a8b81cacc08888170eef4d13b775126db426d0b348bee9d18c2c1eaf123cf" + [[package]] name = "duplicate" version = "1.0.0" @@ -717,6 +723,12 @@ version = "0.4.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0ce7134b9999ecaf8bcd65542e436736ef32ddca1b3e06094cb6ec5755203b80" +[[package]] +name = "fixedbitset" +version = "0.5.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1d674e81391d1e1ab681a28d99df07927c6d4aa5b027d7da16ba32d1d21ecd99" + [[package]] name = "funty" version = "2.0.0" @@ -910,9 +922,9 @@ dependencies = [ [[package]] name = "hugr" -version = "0.14.2" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d5fe016545c685c0b3711fada9eb229bf7a9b668382514084a9444c2a66703e2" +checksum = "65e8fb919d87dd5b9c1ba077a289c765b6e184c832768fb4a5dc9e1e05793564" dependencies = [ "hugr-core", "hugr-passes", @@ -920,9 +932,9 @@ dependencies = [ [[package]] name = "hugr-cli" -version = "0.14.2" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9a96735f19feef506390a3c569751721ea60da8a6a17863eef1e8e86ec9d7459" +checksum = "207ce216fc76a3f2e56bb27483502468d6b8758e6c7a8a777cdf8d64459043cf" dependencies = [ "clap", "clap-verbosity-flag", @@ -934,26 +946,26 @@ dependencies = [ [[package]] name = "hugr-core" -version = "0.14.2" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4553d2323dce6adc8af032bdbf684aafd2e1ecc422b69759c7ba2bc90045008d" +checksum = "79da6020b18a6c63bd81acb9b86370820ba63062519b9d10ed75a0561f3143d1" dependencies = [ "bitvec", "bumpalo", "cgmath", "delegate 0.13.2", "derive_more 1.0.0", - "downcast-rs", + "downcast-rs 2.0.1", "enum_dispatch", "fxhash", "html-escape", "indexmap", - "itertools 0.13.0", + "itertools 0.14.0", "lazy_static", "num-rational", "paste", - "petgraph", - "portgraph 0.12.3", + "petgraph 0.7.1", + "portgraph 0.13.1", "regex", "semver", "serde", @@ -967,17 +979,17 @@ dependencies = [ [[package]] name = "hugr-passes" -version = "0.14.2" +version = "0.14.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf71d78233aca1668aaf8eada784ccb8675b7bd2a9163a6eca64bfbdeeecdf72" +checksum = "86dff9354c0133cddd4f9060af2f4ec531dc479c1a65ed5474785f5b39478422" dependencies = [ "ascent", "hugr-core", - "itertools 0.13.0", + "itertools 0.14.0", "lazy_static", "paste", - "petgraph", - "portgraph 0.12.3", + "petgraph 0.7.1", + "portgraph 0.13.1", "thiserror 2.0.11", ] @@ -1046,13 +1058,13 @@ dependencies = [ [[package]] name = "is-terminal" -version = "0.4.15" +version = "0.4.13" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e19b23d53f35ce9f56aebc7d1bb4e6ac1e9c0db7ac85c8d1760c04379edced37" +checksum = "261f68e344040fbd0edea105bef17c66edf46f984ddb1115b775ce31be948f4b" dependencies = [ "hermit-abi 0.4.0", "libc", - "windows-sys 0.59.0", + "windows-sys 0.52.0", ] [[package]] @@ -1088,6 +1100,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "2b192c782037fadd9cfa75548310488aabdbf3d2da73885b31bd0abd03351285" +dependencies = [ + "either", +] + [[package]] name = "itoa" version = "1.0.14" @@ -1331,7 +1352,17 @@ version = "0.6.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b4c5cc86750666a3ed20bdaf5ca2a0344f9c67674cae0515bec2da16fbaa47db" dependencies = [ - "fixedbitset", + "fixedbitset 0.4.2", + "indexmap", +] + +[[package]] +name = "petgraph" +version = "0.7.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "3672b37090dbd86368a4145bc067582552b29c27377cad4e0a306c97f9bd7772" +dependencies = [ + "fixedbitset 0.5.7", "indexmap", ] @@ -1396,22 +1427,21 @@ dependencies = [ "bitvec", "context-iterators", "delegate 0.10.0", - "petgraph", + "petgraph 0.6.5", "serde", "thiserror 1.0.69", ] [[package]] name = "portgraph" -version = "0.12.3" +version = "0.13.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6bfec2c00343ab6227cb3da08a1c9bed2d79fc379d040ce98582e81e825f96d1" +checksum = "66fcb76974f489d449dce2409cd132171194e3c75b67f69ecfa533ac761b77b3" dependencies = [ "bitvec", - "context-iterators", "delegate 0.13.2", - "itertools 0.13.0", - "petgraph", + "itertools 0.14.0", + "petgraph 0.7.1", "serde", "thiserror 2.0.11", ] @@ -1426,7 +1456,7 @@ dependencies = [ "bitvec", "derive_more 0.99.18", "itertools 0.10.5", - "petgraph", + "petgraph 0.6.5", "portgraph 0.8.0", "rustc-hash", "serde", @@ -1441,9 +1471,9 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "priority-queue" -version = "2.1.2" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "090ded312ed32a928fb49cb91ab4db6523ae3767225e61fbf6ceaaec3664ed26" +checksum = "714c75db297bc88a63783ffc6ab9f830698a6705aa0201416931759ef4c8183d" dependencies = [ "autocfg", "equivalent", @@ -1689,9 +1719,9 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.44" +version = "0.38.43" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fdb5bc1ae2baa591800df16c9ca78619bf65c0488b41b96ccec5d11220d8c154" +checksum = "a78891ee6bf2340288408954ac787aa063d8e8817e9f53abb37c695c6d834ef6" dependencies = [ "bitflags", "errno", @@ -1758,9 +1788,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.138" +version = "1.0.137" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d434192e7da787e94a6ea7e9670b26a036d0ca41e0b7efb2676dd32bae872949" +checksum = "930cfb6e6abf99298aaad7d29abbef7a9999a9a8806a40088f55f0dcec03146b" dependencies = [ "itoa", "memchr", @@ -2037,7 +2067,7 @@ dependencies = [ "csv", "delegate 0.13.2", "derive_more 1.0.0", - "downcast-rs", + "downcast-rs 1.2.1", "fxhash", "hugr", "hugr-core", @@ -2048,8 +2078,8 @@ dependencies = [ "num-rational", "pest", "pest_derive", - "petgraph", - "portgraph 0.12.3", + "petgraph 0.7.1", + "portgraph 0.13.1", "portmatching", "priority-queue", "rayon", @@ -2076,10 +2106,9 @@ dependencies = [ "derive_more 1.0.0", "hugr", "hugr-cli", - "hugr-passes", "itertools 0.13.0", "lazy_static", - "petgraph", + "petgraph 0.7.1", "rstest", "serde", "serde_json", @@ -2099,7 +2128,7 @@ dependencies = [ "hugr", "itertools 0.13.0", "num_cpus", - "portgraph 0.12.3", + "portgraph 0.13.1", "portmatching", "pyo3", "rstest", @@ -2240,9 +2269,9 @@ checksum = "2896d95c02a80c6d6a5d6e953d479f5ddf2dfdb6a244441010e373ac0fb88971" [[package]] name = "unicode-ident" -version = "1.0.15" +version = "1.0.14" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "11cd88e12b17c6494200a9c1b683a04fcac9573ed74cd1b62aeb2727c5592243" +checksum = "adb9e6ca4f869e1180728b7950e35922a7fc6397f7b641499e8f3ef06e50dc83" [[package]] name = "unicode-xid" @@ -2270,9 +2299,9 @@ checksum = "06abde3611657adf66d383f00b093d7faecc7fa57071cce2578660c9f1010821" [[package]] name = "uuid" -version = "1.12.1" +version = "1.12.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3758f5e68192bb96cc8f9b7e2c2cfdabb435499a28499a42f8f984092adad4b" +checksum = "744018581f9a3454a9e15beb8a33b017183f1e7c0cd170232a2d1453b23a51c4" dependencies = [ "serde", ] @@ -2428,6 +2457,15 @@ dependencies = [ "windows_x86_64_msvc 0.42.2", ] +[[package]] +name = "windows-sys" +version = "0.52.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "282be5f36a8ce781fad8c8ae18fa3f9beff57ec1b52cb3de0789201425d9a33d" +dependencies = [ + "windows-targets", +] + [[package]] name = "windows-sys" version = "0.59.0" diff --git a/Cargo.toml b/Cargo.toml index 6f34871b..ab8c62b2 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -26,20 +26,20 @@ missing_docs = "warn" [patch.crates-io] # Uncomment to use unreleased versions of hugr -# hugr = { git = "https://github.com/CQCL/hugr", ref = "1e9eee2" } -# hugr-core = { git = "https://github.com/CQCL/hugr", ref = "1e9eee2" } -# hugr-passes = { git = "https://github.com/CQCL/hugr", ref = "1e9eee2" } -# hugr-cli = { git = "https://github.com/CQCL/hugr", ref = "1e9eee2" } -# hugr-model = { git = "https://github.com/CQCL/hugr", ref = "1e9eee2" } +# hugr = { git = "https://github.com/CQCL/hugr", rev = "09bd748398ce5afb39f5628d838756ccc03fc775" } +# hugr-core = { git = "https://github.com/CQCL/hugr", rev = "09bd748398ce5afb39f5628d838756ccc03fc775" } +# hugr-passes = { git = "https://github.com/CQCL/hugr", rev = "09bd748398ce5afb39f5628d838756ccc03fc775" } +# hugr-cli = { git = "https://github.com/CQCL/hugr", rev = "09bd748398ce5afb39f5628d838756ccc03fc775" } +# hugr-model = { git = "https://github.com/CQCL/hugr", rev = "09bd748398ce5afb39f5628d838756ccc03fc775" } +# portgraph = { git = "https://github.com/CQCL/portgraph", rev = "68b96ac737e0c285d8c543b2d74a7aa80a18202c" } [workspace.dependencies] # Make sure to run `just recompile-eccs` if the hugr serialisation format changes. -hugr = "0.14.1" -hugr-core = "0.14.1" -hugr-cli = "0.14.1" -hugr-passes = "0.14.1" -portgraph = "0.12" +hugr = "0.14.3" +hugr-core = "0.14.3" +hugr-cli = "0.14.3" +portgraph = "0.13.1" pyo3 = "0.23.4" itertools = "0.13.0" tket-json-rs = "0.7.1" @@ -64,8 +64,8 @@ num_cpus = "1.16.0" peak_alloc = "0.2.0" pest = "2.7.15" pest_derive = "2.7.15" -petgraph = { version = "0.6.3", default-features = false } -priority-queue = "2.1.2" +petgraph = { version = "0.7.1", default-features = false } +priority-queue = "2.1.1" rayon = "1.5" rmp-serde = "1.1.2" rstest = "0.23.0" diff --git a/tket2-hseries/Cargo.toml b/tket2-hseries/Cargo.toml index 69c6e427..df88b64f 100644 --- a/tket2-hseries/Cargo.toml +++ b/tket2-hseries/Cargo.toml @@ -23,7 +23,6 @@ required-features = ["cli"] [dependencies] hugr.workspace = true -hugr-passes.workspace = true tket2 = { path = "../tket2", version = "0.7.1" } lazy_static.workspace = true serde = { workspace = true, features = ["derive"] } diff --git a/tket2-hseries/src/lib.rs b/tket2-hseries/src/lib.rs index c1408e74..c378f888 100644 --- a/tket2-hseries/src/lib.rs +++ b/tket2-hseries/src/lib.rs @@ -1,20 +1,17 @@ //! Provides a preparation and validation workflow for Hugrs targeting //! Quantinuum H-series quantum computers. -use std::mem; - use derive_more::{Display, Error, From}; use hugr::{ algorithms::{ const_fold::{ConstFoldError, ConstantFoldPass}, force_order, validation::{ValidatePassError, ValidationLevel}, - MonomorphizeError, MonomorphizePass, + MonomorphizeError, MonomorphizePass, RemoveDeadFuncsError, RemoveDeadFuncsPass, }, hugr::HugrError, Hugr, HugrView, }; -use hugr_passes::RemoveDeadFuncsPass; use tket2::Tk2Op; use extension::{ @@ -70,6 +67,17 @@ pub enum QSystemPassError { ConstantFoldError(ConstFoldError), /// An error from the component [MonomorphizePass] pass. MonomorphizeError(MonomorphizeError), + /// An error when running [RemoveDeadFuncsPass] after the monomorphisation + /// pass. + /// + /// [RemoveDeadFuncsPass]: hugr::algorithms::RemoveDeadFuncsError + DCEError(RemoveDeadFuncsError), + /// No [FuncDefn] named "main" in [Module]. + /// + /// [FuncDefn]: hugr::ops::FuncDefn + /// [Module]: hugr::ops::Module + #[display("No function named 'main' in module.")] + NoMain, } impl QSystemPass { @@ -78,15 +86,20 @@ impl QSystemPass { pub fn run(&self, hugr: &mut Hugr) -> Result<(), QSystemPassError> { if self.monomorphize { self.monomorphization().run(hugr)?; - self.validation_level.run_validated_pass(hugr, |hugr, _| { - let mut owned_hugr = Hugr::default(); - mem::swap(&mut owned_hugr, hugr); - // TODO Remove `unwrap()` once we have a release with - // https://github.com/CQCL/hugr/pull/1883 - RemoveDeadFuncsPass::default().run(&mut owned_hugr).unwrap(); - mem::swap(&mut owned_hugr, hugr); - Ok::<_, QSystemPassError>(()) - })?; + + let mut rdfp = RemoveDeadFuncsPass::default(); + if hugr.get_optype(hugr.root()).is_module() { + let main_node = hugr + .children(hugr.root()) + .find(|&n| { + hugr.get_optype(n) + .as_func_defn() + .is_some_and(|fd| fd.name == "main") + }) + .ok_or(QSystemPassError::NoMain)?; + rdfp = rdfp.with_module_entry_points([main_node]); + } + rdfp.run(hugr)? } if self.constant_fold {