diff --git a/Cargo.lock b/Cargo.lock index f3d9dedf..feb9f6ea 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -2,6 +2,18 @@ # It is not intended for manual editing. version = 3 +[[package]] +name = "ahash" +version = "0.8.11" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e89da841a80418a9b391ebaea17f5c112ffaaa96f621d2c285b5174da76b9011" +dependencies = [ + "cfg-if", + "once_cell", + "version_check", + "zerocopy", +] + [[package]] name = "aho-corasick" version = "1.1.3" @@ -11,6 +23,12 @@ dependencies = [ "memchr", ] +[[package]] +name = "allocator-api2" +version = "0.2.21" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "683d7910e743518b0e34f1186f92494becacb047c7b6bf616c96772180fef923" + [[package]] name = "android-tzdata" version = "0.1.1" @@ -90,6 +108,51 @@ dependencies = [ "num-traits", ] +[[package]] +name = "ascent" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "542b90d362e62ae00b8a9f1c8887919fe5cb4a07c64423b9ab72ab78f4b27f41" +dependencies = [ + "ascent_base", + "ascent_macro", + "boxcar", + "cfg-if", + "dashmap", + "hashbrown 0.14.5", + "instant", + "once_cell", + "paste", + "rayon", + "rustc-hash", +] + +[[package]] +name = "ascent_base" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "606412229e80de366935b461eaef5016a9725064151e52ea35f200e7541c2912" +dependencies = [ + "paste", +] + +[[package]] +name = "ascent_macro" +version = "0.7.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "67685ce7f6568cfd9671322ed3d7c7322ff8ec6a81e07d5323f997e118885972" +dependencies = [ + "ascent_base", + "derive-syn-parse", + "duplicate", + "itertools 0.12.1", + "lazy_static", + "petgraph", + "proc-macro2", + "quote", + "syn 2.0.90", +] + [[package]] name = "autocfg" version = "1.4.0" @@ -165,6 +228,12 @@ dependencies = [ "cfg_aliases", ] +[[package]] +name = "boxcar" +version = "0.1.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "38c99613cb3cd7429889a08dfcf651721ca971c86afa30798461f8eee994de47" + [[package]] name = "bumpalo" version = "3.16.0" @@ -197,9 +266,9 @@ checksum = "37b2a672a2cb129a2e41c10b1224bb368f9f37a2b16b612598138befd7b37eb5" [[package]] name = "cc" -version = "1.2.2" +version = "1.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f34d93e62b03caf570cccc334cbc6c2fceca82f39211051345108adcba3eebdc" +checksum = "27f657647bcff5394bf56c7317665bbf790a137a50eaaa5c6bfbb9e27a518f2d" dependencies = [ "jobserver", "libc", @@ -288,9 +357,9 @@ dependencies = [ [[package]] name = "clap-verbosity-flag" -version = "2.2.3" +version = "3.0.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "34c77f67047557f62582784fd7482884697731b2932c7d37ced54bce2312e1e2" +checksum = "54381ae56ad222eea3f529c692879e9c65e07945ae48d3dc4d1cb18dbec8cf44" dependencies = [ "clap", "log", @@ -520,6 +589,20 @@ dependencies = [ "memchr", ] +[[package]] +name = "dashmap" +version = "5.5.3" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "978747c1d849a7d2ee5e8adc0159961c48fb7e5db2f06af6723b80123bb53856" +dependencies = [ + "cfg-if", + "hashbrown 0.14.5", + "lock_api", + "once_cell", + "parking_lot_core", + "rayon", +] + [[package]] name = "delegate" version = "0.10.0" @@ -551,6 +634,17 @@ dependencies = [ "powerfmt", ] +[[package]] +name = "derive-syn-parse" +version = "0.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "d65d7ce8132b7c0e54497a4d9a55a1c2a0912a0d786cf894472ba818fba45762" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", +] + [[package]] name = "derive_more" version = "0.99.18" @@ -612,6 +706,12 @@ version = "1.2.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "75b325c5dbd37f80359721ad39aca5a29fb04c89279657cffdda8736d0c0b9d2" +[[package]] +name = "duplicate" +version = "1.0.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "de78e66ac9061e030587b2a2e75cc88f22304913c907b11307bca737141230cb" + [[package]] name = "either" version = "1.13.0" @@ -658,9 +758,9 @@ dependencies = [ [[package]] name = "fastrand" -version = "2.2.0" +version = "2.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "486f806e73c5707928240ddc295403b1b93c96a02038563881c4a2fd84b81ac4" +checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be" [[package]] name = "fixedbitset" @@ -813,6 +913,17 @@ dependencies = [ "crunchy", ] +[[package]] +name = "hashbrown" +version = "0.14.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" +dependencies = [ + "ahash", + "allocator-api2", + "rayon", +] + [[package]] name = "hashbrown" version = "0.15.2" @@ -857,8 +968,9 @@ dependencies = [ [[package]] name = "hugr" -version = "0.13.3" -source = "git+https://github.com/CQCL/hugr.git?rev=7177c5f26c2ddf506d9987c84cf1899275d391d6#7177c5f26c2ddf506d9987c84cf1899275d391d6" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "9f209c7cd671de29be8bdf0725e09b2e9d386387f439b13975e158f095e5a0fe" dependencies = [ "hugr-core", "hugr-passes", @@ -866,8 +978,9 @@ dependencies = [ [[package]] name = "hugr-cli" -version = "0.13.3" -source = "git+https://github.com/CQCL/hugr.git?rev=7177c5f26c2ddf506d9987c84cf1899275d391d6#7177c5f26c2ddf506d9987c84cf1899275d391d6" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ab6a94a980d47788908d7f93165846164f8b623b7f382cd3813bd0c0d1188e65" dependencies = [ "clap", "clap-verbosity-flag", @@ -876,13 +989,14 @@ dependencies = [ "hugr", "serde", "serde_json", - "thiserror 1.0.69", + "thiserror 2.0.6", ] [[package]] name = "hugr-core" -version = "0.13.3" -source = "git+https://github.com/CQCL/hugr.git?rev=7177c5f26c2ddf506d9987c84cf1899275d391d6#7177c5f26c2ddf506d9987c84cf1899275d391d6" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "60c3d5422f76dbec1d6948e68544b134562ec9ec087e8e6a599555b716f555dc" dependencies = [ "bitvec", "bumpalo", @@ -907,21 +1021,24 @@ dependencies = [ "smol_str", "strum", "strum_macros", - "thiserror 1.0.69", + "thiserror 2.0.6", "typetag", ] [[package]] name = "hugr-passes" -version = "0.13.3" -source = "git+https://github.com/CQCL/hugr.git?rev=7177c5f26c2ddf506d9987c84cf1899275d391d6#7177c5f26c2ddf506d9987c84cf1899275d391d6" +version = "0.14.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ec2591767b6fe03074d38de7c4e61d52b37cb2e73b7340bf4ff957ad4554022a" dependencies = [ + "ascent", "hugr-core", "itertools 0.13.0", "lazy_static", "paste", "petgraph", - "thiserror 1.0.69", + "portgraph 0.12.3", + "thiserror 2.0.6", ] [[package]] @@ -1099,7 +1216,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62f822373a4fe84d4bb149bf54e584a7f4abec90e072ed49cda0edea5b95471f" dependencies = [ "equivalent", - "hashbrown", + "hashbrown 0.15.2", ] [[package]] @@ -1108,6 +1225,15 @@ version = "2.0.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b248f5224d1d606005e02c97f5aa4e88eeb230488bcc03bc9ca4d7991399f2b5" +[[package]] +name = "instant" +version = "0.1.13" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0242819d153cba4b4b05a5a8f2a7e9bbf97b6055b2a002b395c96b5ff3c0222" +dependencies = [ + "cfg-if", +] + [[package]] name = "inventory" version = "0.3.15" @@ -1140,6 +1266,15 @@ dependencies = [ "either", ] +[[package]] +name = "itertools" +version = "0.12.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "ba291022dbbd398a455acf126c1e341954079855bc60dfdda641363bd6922569" +dependencies = [ + "either", +] + [[package]] name = "itertools" version = "0.13.0" @@ -1188,9 +1323,9 @@ dependencies = [ [[package]] name = "js-sys" -version = "0.3.74" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a865e038f7f6ed956f788f0d7d60c541fff74c7bd74272c5d4cf15c63743e705" +checksum = "6717b6b5b077764fb5966237269cb3c64edddde4b14ce42647430a78ced9e7b7" dependencies = [ "once_cell", "wasm-bindgen", @@ -1204,9 +1339,9 @@ checksum = "bbd2bcb4c963f2ddae06a2efc7e9f3591312473c50c6685e1f298068316e66fe" [[package]] name = "libc" -version = "0.2.167" +version = "0.2.168" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09d6582e104315a817dff97f75133544b2e094ee22447d2acf4a74e189ba06fc" +checksum = "5aaeb2981e0606ca11d79718f8bb01164f1d6ed75080182d3abf017e6d244b6d" [[package]] name = "linux-raw-sys" @@ -1220,6 +1355,16 @@ version = "0.7.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4ee93343901ab17bd981295f2cf0026d4ad018c7c31ba84549a4ddbb47a45104" +[[package]] +name = "lock_api" +version = "0.4.12" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "07af8b9cdd281b7915f413fa73f29ebd5d55d0d3f0155584dade1ff18cea1b17" +dependencies = [ + "autocfg", + "scopeguard", +] + [[package]] name = "log" version = "0.4.22" @@ -1374,6 +1519,19 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" +[[package]] +name = "parking_lot_core" +version = "0.9.10" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e401f977ab385c9e4e3ab30627d6f26d00e2c73eef317493c4ec6d468726cf8" +dependencies = [ + "cfg-if", + "libc", + "redox_syscall", + "smallvec", + "windows-targets 0.52.6", +] + [[package]] name = "paste" version = "1.0.15" @@ -1399,7 +1557,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8b7cafe60d6cf8e62e1b9b2ea516a089c008945bb5a275416789e7db0bc199dc" dependencies = [ "memchr", - "thiserror 2.0.3", + "thiserror 2.0.6", "ucd-trie", ] @@ -1525,7 +1683,7 @@ dependencies = [ "itertools 0.13.0", "petgraph", "serde", - "thiserror 2.0.3", + "thiserror 2.0.6", ] [[package]] @@ -1688,6 +1846,15 @@ dependencies = [ "crossbeam-utils", ] +[[package]] +name = "redox_syscall" +version = "0.5.8" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "03a862b389f93e68874fbf580b9de08dd02facb9a788ebadaf4a3fd33cf58834" +dependencies = [ + "bitflags", +] + [[package]] name = "regex" version = "1.11.1" @@ -1792,15 +1959,15 @@ dependencies = [ [[package]] name = "rustix" -version = "0.38.41" +version = "0.38.42" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d7f649912bc1495e167a6edee79151c84b1bad49748cb4f1f1167f459f6224f6" +checksum = "f93dc38ecbab2eb790ff964bb77fa94faf256fd3e73285fd7ba0903b76bedb85" dependencies = [ "bitflags", "errno", "libc", "linux-raw-sys", - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -1824,6 +1991,12 @@ dependencies = [ "winapi-util", ] +[[package]] +name = "scopeguard" +version = "1.2.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49" + [[package]] name = "semver" version = "1.0.23" @@ -2022,11 +2195,11 @@ dependencies = [ [[package]] name = "thiserror" -version = "2.0.3" +version = "2.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c006c85c7651b3cf2ada4584faa36773bd07bac24acfb39f3c431b36d7e667aa" +checksum = "8fec2a1820ebd077e2b90c4df007bebf344cd394098a13c563957d0afc83ea47" dependencies = [ - "thiserror-impl 2.0.3", + "thiserror-impl 2.0.6", ] [[package]] @@ -2042,9 +2215,9 @@ dependencies = [ [[package]] name = "thiserror-impl" -version = "2.0.3" +version = "2.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f077553d607adc1caf65430528a576c757a71ed73944b66ebb58ef2bbd243568" +checksum = "d65750cab40f4ff1929fb1ba509e9914eb756131cef4210da8d5d700d26f6312" dependencies = [ "proc-macro2", "quote", @@ -2083,9 +2256,9 @@ dependencies = [ [[package]] name = "time" -version = "0.3.36" +version = "0.3.37" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dfd88e563464686c916c7e46e623e520ddc6d79fa6641390f2e3fa86e83e885" +checksum = "35e7868883861bd0e56d9ac6efcaaca0d6d5d82a2a7ec8209ff492c07cf37b21" dependencies = [ "deranged", "itoa", @@ -2104,9 +2277,9 @@ checksum = "ef927ca75afb808a4d64dd374f00a2adf8d0fcff8e7b184af886c3c87ec4a3f3" [[package]] name = "time-macros" -version = "0.2.18" +version = "0.2.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3f252a68540fde3a3877aeea552b832b40ab9a69e318efd078774a01ddee1ccf" +checksum = "2834e6017e3e5e4b9834939793b282bc03b37a3336245fa820e35e233e2a85de" dependencies = [ "num-conv", "time-core", @@ -2452,9 +2625,9 @@ dependencies = [ [[package]] name = "wasm-bindgen" -version = "0.2.97" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d15e63b4482863c109d70a7b8706c1e364eb6ea449b201a76c5b89cedcec2d5c" +checksum = "a474f6281d1d70c17ae7aa6a613c87fce69a127e2624002df63dcb39d6cf6396" dependencies = [ "cfg-if", "once_cell", @@ -2463,13 +2636,12 @@ dependencies = [ [[package]] name = "wasm-bindgen-backend" -version = "0.2.97" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "8d36ef12e3aaca16ddd3f67922bc63e48e953f126de60bd33ccc0101ef9998cd" +checksum = "5f89bb38646b4f81674e8f5c3fb81b562be1fd936d84320f3264486418519c79" dependencies = [ "bumpalo", "log", - "once_cell", "proc-macro2", "quote", "syn 2.0.90", @@ -2478,9 +2650,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro" -version = "0.2.97" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "705440e08b42d3e4b36de7d66c944be628d579796b8090bfa3471478a2260051" +checksum = "2cc6181fd9a7492eef6fef1f33961e3695e4579b9872a6f7c83aee556666d4fe" dependencies = [ "quote", "wasm-bindgen-macro-support", @@ -2488,9 +2660,9 @@ dependencies = [ [[package]] name = "wasm-bindgen-macro-support" -version = "0.2.97" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "98c9ae5a76e46f4deecd0f0255cc223cfa18dc9b261213b8aa0c7b36f61b3f1d" +checksum = "30d7a95b763d3c45903ed6c81f156801839e5ee968bb07e534c44df0fcd330c2" dependencies = [ "proc-macro2", "quote", @@ -2501,15 +2673,15 @@ dependencies = [ [[package]] name = "wasm-bindgen-shared" -version = "0.2.97" +version = "0.2.99" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6ee99da9c5ba11bd675621338ef6fa52296b76b83305e9b6e5c77d4c286d6d49" +checksum = "943aab3fdaaa029a6e0271b35ea10b72b943135afe9bffca82384098ad0e06a6" [[package]] name = "web-sys" -version = "0.3.74" +version = "0.3.76" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a98bc3c33f0fe7e59ad7cd041b89034fa82a7c2d4365ca538dda6cdaf513863c" +checksum = "04dd7223427d52553d3702c004d3b2fe07c148165faa56313cb00211e31c12bc" dependencies = [ "js-sys", "wasm-bindgen", @@ -2790,6 +2962,26 @@ dependencies = [ "synstructure", ] +[[package]] +name = "zerocopy" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" +dependencies = [ + "zerocopy-derive", +] + +[[package]] +name = "zerocopy-derive" +version = "0.7.35" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fa4f8080344d4671fb4e831a13ad1e68092748387dfc4f55e356242fae12ce3e" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.90", +] + [[package]] name = "zerofrom" version = "0.1.5" diff --git a/Cargo.toml b/Cargo.toml index a88a650c..d3b32cf9 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -26,16 +26,18 @@ missing_docs = "warn" [patch.crates-io] # Uncomment to use unreleased versions of hugr -hugr-core = { git = "https://github.com/CQCL/hugr.git" , rev = "7177c5f26c2ddf506d9987c84cf1899275d391d6"} -hugr = { git = "https://github.com/CQCL/hugr.git" , rev = "7177c5f26c2ddf506d9987c84cf1899275d391d6"} -hugr-cli = { git = "https://github.com/CQCL/hugr.git" , rev = "7177c5f26c2ddf506d9987c84cf1899275d391d6"} +#hugr = { git = "https://github.com/CQCL/hugr", ref = "b517dc3530c3f01d854579e210da51d7a63e3036" } +#hugr-core = { git = "https://github.com/CQCL/hugr", ref = "b517dc3530c3f01d854579e210da51d7a63e3036" } +#hugr-passes = { git = "https://github.com/CQCL/hugr", ref = "b517dc3530c3f01d854579e210da51d7a63e3036" } +#hugr-cli = { git = "https://github.com/CQCL/hugr", ref = "b517dc3530c3f01d854579e210da51d7a63e3036" } +#hugr-model = { git = "https://github.com/CQCL/hugr", ref = "b517dc3530c3f01d854579e210da51d7a63e3036" } [workspace.dependencies] # Make sure to run `just recompile-eccs` if the hugr serialisation format changes. -hugr = "0.13.3" -hugr-core = "0.13.3" -hugr-cli = "0.13.3" +hugr = "0.14.0" +hugr-core = "0.14.0" +hugr-cli = "0.14.0" portgraph = "0.12" pyo3 = "0.23.3" itertools = "0.13.0" diff --git a/devenv.lock b/devenv.lock index 3d35f4c4..1b827da0 100644 --- a/devenv.lock +++ b/devenv.lock @@ -39,10 +39,10 @@ "flake-compat": { "flake": false, "locked": { - "lastModified": 1696426674, + "lastModified": 1733328505, "owner": "edolstra", "repo": "flake-compat", - "rev": "0f9255e01c2351cc7d116c072cb317785dd33b33", + "rev": "ff81ac966bb2cae68946d5ed5fc4994f96d0ffec", "type": "github" }, "original": { @@ -51,10 +51,32 @@ "type": "github" } }, + "git-hooks": { + "inputs": { + "flake-compat": "flake-compat", + "gitignore": "gitignore", + "nixpkgs": [ + "nixpkgs" + ], + "nixpkgs-stable": "nixpkgs-stable" + }, + "locked": { + "lastModified": 1733665616, + "owner": "cachix", + "repo": "git-hooks.nix", + "rev": "d8c02f0ffef0ef39f6063731fc539d8c71eb463a", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "git-hooks.nix", + "type": "github" + } + }, "gitignore": { "inputs": { "nixpkgs": [ - "pre-commit-hooks", + "git-hooks", "nixpkgs" ] }, @@ -103,10 +125,10 @@ }, "nixpkgs-stable": { "locked": { - "lastModified": 1728328465, + "lastModified": 1733730953, "owner": "NixOS", "repo": "nixpkgs", - "rev": "1bfbbbe5bbf888d675397c66bfdb275d0b99361c", + "rev": "7109b680d161993918b0a126f38bc39763e5a709", "type": "github" }, "original": { @@ -116,35 +138,16 @@ "type": "github" } }, - "pre-commit-hooks": { - "inputs": { - "flake-compat": "flake-compat", - "gitignore": "gitignore", - "nixpkgs": [ - "nixpkgs" - ], - "nixpkgs-stable": "nixpkgs-stable" - }, - "locked": { - "lastModified": 1728092656, - "owner": "cachix", - "repo": "pre-commit-hooks.nix", - "rev": "1211305a5b237771e13fcca0c51e60ad47326a9a", - "type": "github" - }, - "original": { - "owner": "cachix", - "repo": "pre-commit-hooks.nix", - "type": "github" - } - }, "root": { "inputs": { "devenv": "devenv", "fenix": "fenix", + "git-hooks": "git-hooks", "nixpkgs": "nixpkgs", "nixpkgs-2305": "nixpkgs-2305", - "pre-commit-hooks": "pre-commit-hooks" + "pre-commit-hooks": [ + "git-hooks" + ] } }, "rust-analyzer-src": { diff --git a/test_files/eccs/nam_4_2.rwr b/test_files/eccs/nam_4_2.rwr index 6dd1b402..182a7ab6 100644 Binary files a/test_files/eccs/nam_4_2.rwr and b/test_files/eccs/nam_4_2.rwr differ diff --git a/test_files/eccs/nam_6_3.rwr b/test_files/eccs/nam_6_3.rwr index 77f7897e..f4784711 100644 Binary files a/test_files/eccs/nam_6_3.rwr and b/test_files/eccs/nam_6_3.rwr differ diff --git a/test_files/eccs/small_eccs.rwr b/test_files/eccs/small_eccs.rwr index 521b7ba3..1866e341 100644 Binary files a/test_files/eccs/small_eccs.rwr and b/test_files/eccs/small_eccs.rwr differ diff --git a/tket2-eccs/src/tket2_eccs/data/nam_6_3.rwr b/tket2-eccs/src/tket2_eccs/data/nam_6_3.rwr index 77f7897e..f4784711 100644 Binary files a/tket2-eccs/src/tket2_eccs/data/nam_6_3.rwr and b/tket2-eccs/src/tket2_eccs/data/nam_6_3.rwr differ diff --git a/tket2-exts/pyproject.toml b/tket2-exts/pyproject.toml index 885c3dce..aa0c5858 100644 --- a/tket2-exts/pyproject.toml +++ b/tket2-exts/pyproject.toml @@ -26,9 +26,7 @@ classifiers = [ "Topic :: Scientific/Engineering", ] -dependencies = [ - "hugr>=0.9.0", -] +dependencies = ['hugr >= 0.10.0, < 0.11'] [project.urls] homepage = "https://github.com/CQCL/tket2/tree/main/tket2-exts" diff --git a/tket2-exts/src/tket2_exts/data/tket2/futures.json b/tket2-exts/src/tket2_exts/data/tket2/futures.json index 7263042b..5dce61e7 100644 --- a/tket2-exts/src/tket2_exts/data/tket2/futures.json +++ b/tket2-exts/src/tket2_exts/data/tket2/futures.json @@ -1,7 +1,7 @@ { "version": "0.1.0", "name": "tket2.futures", - "extension_reqs": [], + "runtime_reqs": [], "types": { "Future": { "extension": "tket2.futures", @@ -85,7 +85,7 @@ "bound": "A" } ], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false @@ -121,7 +121,7 @@ } ], "output": [], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false @@ -163,7 +163,7 @@ "b": "A" } ], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false diff --git a/tket2-exts/src/tket2_exts/data/tket2/qsystem.json b/tket2-exts/src/tket2_exts/data/tket2/qsystem.json index abdc1aec..bbd7a2a1 100644 --- a/tket2-exts/src/tket2_exts/data/tket2/qsystem.json +++ b/tket2-exts/src/tket2_exts/data/tket2/qsystem.json @@ -1,7 +1,7 @@ { "version": "0.2.0", "name": "tket2.qsystem", - "extension_reqs": [ + "runtime_reqs": [ "arithmetic.float.types", "prelude", "tket2.futures" @@ -42,7 +42,7 @@ "bound": "A" } ], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false @@ -66,7 +66,7 @@ "size": 2 } ], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false @@ -93,7 +93,7 @@ "size": 2 } ], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false @@ -129,7 +129,7 @@ "t": "Q" } ], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false @@ -147,7 +147,7 @@ } ], "output": [], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false @@ -169,7 +169,7 @@ "t": "Q" } ], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false @@ -198,7 +198,7 @@ "t": "Q" } ], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false @@ -225,7 +225,7 @@ ] } ], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false @@ -253,7 +253,7 @@ "t": "Q" } ], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false @@ -288,7 +288,7 @@ "t": "Q" } ], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false diff --git a/tket2-exts/src/tket2_exts/data/tket2/quantum.json b/tket2-exts/src/tket2_exts/data/tket2/quantum.json index b61acf62..e95e5722 100644 --- a/tket2-exts/src/tket2_exts/data/tket2/quantum.json +++ b/tket2-exts/src/tket2_exts/data/tket2/quantum.json @@ -1,7 +1,7 @@ { "version": "0.1.1", "name": "tket2.quantum", - "extension_reqs": [], + "runtime_reqs": [], "types": {}, "values": {}, "operations": { @@ -38,7 +38,7 @@ "t": "Q" } ], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false @@ -78,7 +78,7 @@ "t": "Q" } ], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false @@ -109,7 +109,7 @@ "t": "Q" } ], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false @@ -149,7 +149,7 @@ "t": "Q" } ], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false @@ -174,7 +174,7 @@ "t": "Q" } ], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false @@ -209,7 +209,7 @@ "size": 2 } ], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false @@ -236,7 +236,7 @@ "size": 2 } ], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false @@ -257,7 +257,7 @@ "t": "Q" } ], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false @@ -278,7 +278,7 @@ } ], "output": [], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false @@ -303,7 +303,7 @@ "t": "Q" } ], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false @@ -340,7 +340,7 @@ "t": "Q" } ], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false @@ -372,7 +372,7 @@ "t": "Q" } ], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false @@ -409,7 +409,7 @@ "t": "Q" } ], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false @@ -439,7 +439,7 @@ "t": "Q" } ], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false @@ -469,7 +469,7 @@ "t": "Q" } ], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false @@ -499,7 +499,7 @@ "t": "Q" } ], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false @@ -529,7 +529,7 @@ "t": "Q" } ], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false @@ -566,7 +566,7 @@ "t": "Q" } ], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false @@ -596,7 +596,7 @@ ] } ], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false @@ -626,7 +626,7 @@ "t": "Q" } ], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false @@ -656,7 +656,7 @@ "t": "Q" } ], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false @@ -686,7 +686,7 @@ "t": "Q" } ], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false @@ -712,7 +712,7 @@ "bound": "C" } ], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false diff --git a/tket2-exts/src/tket2_exts/data/tket2/result.json b/tket2-exts/src/tket2_exts/data/tket2/result.json index 85ed4bc4..a439449a 100644 --- a/tket2-exts/src/tket2_exts/data/tket2/result.json +++ b/tket2-exts/src/tket2_exts/data/tket2/result.json @@ -1,9 +1,10 @@ { "version": "0.1.0", "name": "tket2.result", - "extension_reqs": [ + "runtime_reqs": [ "arithmetic.float.types", - "arithmetic.int.types" + "arithmetic.int.types", + "collections.array" ], "types": {}, "values": {}, @@ -26,7 +27,7 @@ "input": [ { "t": "Opaque", - "extension": "prelude", + "extension": "collections.array", "id": "array", "args": [ { @@ -50,7 +51,7 @@ } ], "output": [], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false @@ -73,7 +74,7 @@ "input": [ { "t": "Opaque", - "extension": "prelude", + "extension": "collections.array", "id": "array", "args": [ { @@ -99,7 +100,7 @@ } ], "output": [], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false @@ -126,7 +127,7 @@ "input": [ { "t": "Opaque", - "extension": "prelude", + "extension": "collections.array", "id": "array", "args": [ { @@ -161,7 +162,7 @@ } ], "output": [], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false @@ -188,7 +189,7 @@ "input": [ { "t": "Opaque", - "extension": "prelude", + "extension": "collections.array", "id": "array", "args": [ { @@ -223,7 +224,7 @@ } ], "output": [], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false @@ -247,7 +248,7 @@ } ], "output": [], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false @@ -273,7 +274,7 @@ } ], "output": [], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false @@ -312,7 +313,7 @@ } ], "output": [], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false @@ -351,7 +352,7 @@ } ], "output": [], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false diff --git a/tket2-exts/src/tket2_exts/data/tket2/rotation.json b/tket2-exts/src/tket2_exts/data/tket2/rotation.json index 96e3d67d..5c98b42a 100644 --- a/tket2-exts/src/tket2_exts/data/tket2/rotation.json +++ b/tket2-exts/src/tket2_exts/data/tket2/rotation.json @@ -1,7 +1,7 @@ { "version": "0.1.0", "name": "tket2.rotation", - "extension_reqs": [], + "runtime_reqs": [], "types": { "rotation": { "extension": "tket2.rotation", @@ -50,7 +50,7 @@ ] } ], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false @@ -80,7 +80,7 @@ "bound": "C" } ], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false @@ -117,7 +117,7 @@ "bound": "C" } ], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false @@ -147,7 +147,7 @@ "bound": "C" } ], - "extension_reqs": [] + "runtime_reqs": [] } }, "binary": false diff --git a/tket2-hseries/src/bin/tket2-hseries.rs b/tket2-hseries/src/bin/tket2-hseries.rs index 5556ac45..bd1f78d2 100644 --- a/tket2-hseries/src/bin/tket2-hseries.rs +++ b/tket2-hseries/src/bin/tket2-hseries.rs @@ -7,14 +7,13 @@ use tket2_hseries::cli::CliArgs; fn main() { match CliArgs::parse() { CliArgs::GenExtensions(args) => { - let reg = ExtensionRegistry::try_new([ + let reg = ExtensionRegistry::new([ tket2::extension::TKET2_EXTENSION.to_owned(), tket2::extension::rotation::ROTATION_EXTENSION.to_owned(), tket2_hseries::extension::qsystem::EXTENSION.to_owned(), tket2_hseries::extension::futures::EXTENSION.to_owned(), tket2_hseries::extension::result::EXTENSION.to_owned(), - ]) - .unwrap(); + ]); args.run_dump(®); } diff --git a/tket2-hseries/src/extension/futures.rs b/tket2-hseries/src/extension/futures.rs index ef725cfa..c847e5ff 100644 --- a/tket2-hseries/src/extension/futures.rs +++ b/tket2-hseries/src/extension/futures.rs @@ -12,8 +12,7 @@ use hugr::{ try_from_name, HasConcrete, HasDef, MakeExtensionOp, MakeOpDef, MakeRegisteredOp, OpLoadError, }, - ExtensionBuildError, ExtensionId, ExtensionRegistry, OpDef, SignatureError, SignatureFunc, - TypeDef, Version, + ExtensionBuildError, ExtensionId, OpDef, SignatureError, SignatureFunc, TypeDef, Version, }, ops::{custom::ExtensionOp, NamedOp, OpType}, types::{type_param::TypeParam, CustomType, PolyFuncType, Signature, Type, TypeArg, TypeBound}, @@ -39,11 +38,6 @@ lazy_static! { }) }; - /// Extension registry including the "tket2.futures" extension. - pub static ref REGISTRY: ExtensionRegistry = ExtensionRegistry::try_new([ - EXTENSION.to_owned() - ]).unwrap(); - /// The name of the `Future` type. pub static ref FUTURE_TYPE_NAME: SmolStr = SmolStr::new_inline("Future"); } @@ -62,18 +56,19 @@ fn add_future_type_def( } /// Returns a `Future` [CustomType]. -pub fn future_custom_type(t: Type) -> CustomType { +pub fn future_custom_type(t: Type, extension_ref: &Weak) -> CustomType { CustomType::new( FUTURE_TYPE_NAME.to_owned(), vec![t.into()], EXTENSION_ID, TypeBound::Any, + extension_ref, ) } /// Returns a `Future` [Type]. pub fn future_type(t: Type) -> Type { - future_custom_type(t).into() + future_custom_type(t, &Arc::downgrade(&EXTENSION)).into() } #[derive( @@ -101,10 +96,10 @@ pub enum FutureOpDef { } impl MakeOpDef for FutureOpDef { - fn signature(&self) -> SignatureFunc { + fn init_signature(&self, extension_ref: &Weak) -> SignatureFunc { let t_param = TypeParam::from(TypeBound::Any); let t_type = Type::new_var_use(0, TypeBound::Any); - let future_type = future_type(t_type.clone()); + let future_type = Type::new_extension(future_custom_type(t_type.clone(), extension_ref)); match self { FutureOpDef::Read => { PolyFuncType::new([t_param], Signature::new(future_type, t_type)).into() @@ -138,6 +133,10 @@ impl MakeOpDef for FutureOpDef { FutureOpDef::Free => "Consume a future without reading it.".into(), } } + + fn extension_ref(&self) -> Weak { + Arc::downgrade(&EXTENSION) + } } impl HasConcrete for FutureOpDef { @@ -187,8 +186,8 @@ impl MakeRegisteredOp for FutureOp { EXTENSION_ID } - fn registry<'s, 'r: 's>(&'s self) -> &'r ExtensionRegistry { - ®ISTRY + fn extension_ref(&self) -> Weak { + Arc::downgrade(&EXTENSION) } } @@ -255,7 +254,7 @@ impl FutureOpBuilder for D {} #[cfg(test)] pub(crate) mod test { - use cool_asserts::assert_matches; + use hugr::{ builder::{Dataflow, DataflowHugr, FunctionBuilder}, ops::NamedOp, @@ -307,10 +306,8 @@ pub(crate) mod test { let [future_w, lazy_dup_w] = func_builder.add_dup(future_w, t.clone()).unwrap(); func_builder.add_free(future_w, t.clone()).unwrap(); let [t_w] = func_builder.add_read(lazy_dup_w, t).unwrap(); - func_builder - .finish_hugr_with_outputs([t_w], ®ISTRY) - .unwrap() + func_builder.finish_hugr_with_outputs([t_w]).unwrap() }; - assert_matches!(hugr.validate(®ISTRY), Ok(_)); + hugr.validate().unwrap(); } } diff --git a/tket2-hseries/src/extension/qsystem.rs b/tket2-hseries/src/extension/qsystem.rs index 9aaab4c4..4bf6ea2c 100644 --- a/tket2-hseries/src/extension/qsystem.rs +++ b/tket2-hseries/src/extension/qsystem.rs @@ -4,22 +4,22 @@ //! In the case of lazy operations, //! laziness is represented by returning `tket2.futures.Future` classical //! values. Qubits are never lazy. -use std::sync::Arc; +use std::sync::{Arc, Weak}; use hugr::{ builder::{BuildError, Dataflow, DataflowSubContainer, SubContainer}, extension::{ - prelude::{option_type, UnwrapBuilder, BOOL_T, QB_T}, + prelude::{bool_t, option_type, qb_t, UnwrapBuilder}, simple_op::{try_from_name, MakeOpDef, MakeRegisteredOp}, ExtensionId, ExtensionRegistry, ExtensionSet, OpDef, SignatureFunc, Version, PRELUDE, }, ops::Value, std_extensions::arithmetic::{ float_ops::FloatOps, - float_types::{ConstF64, EXTENSION as FLOAT_TYPES, FLOAT64_TYPE}, + float_types::{float64_type, ConstF64, EXTENSION as FLOAT_TYPES}, }, type_row, - types::{Signature, Type}, + types::{Signature, Type, TypeRow}, Extension, Wire, }; @@ -54,12 +54,12 @@ lazy_static! { /// Extension registry including the "tket2.qsystem" extension and /// dependencies. - pub static ref REGISTRY: ExtensionRegistry = ExtensionRegistry::try_new([ + pub static ref REGISTRY: ExtensionRegistry = ExtensionRegistry::new([ EXTENSION.to_owned(), futures::EXTENSION.to_owned(), PRELUDE.to_owned(), FLOAT_TYPES.to_owned(), - ]).unwrap(); + ]); } #[derive( @@ -93,21 +93,21 @@ pub enum QSystemOp { } impl MakeOpDef for QSystemOp { - fn signature(&self) -> SignatureFunc { + fn init_signature(&self, _extension_ref: &std::sync::Weak) -> SignatureFunc { use QSystemOp::*; - let one_qb_row = type_row![QB_T]; - let two_qb_row = type_row![QB_T, QB_T]; + let one_qb_row = TypeRow::from(vec![qb_t()]); + let two_qb_row = TypeRow::from(vec![qb_t(), qb_t()]); match self { - LazyMeasure => Signature::new(QB_T, vec![QB_T, future_type(BOOL_T)]), + LazyMeasure => Signature::new(qb_t(), vec![qb_t(), future_type(bool_t())]), Reset => Signature::new(one_qb_row.clone(), one_qb_row), ZZMax => Signature::new(two_qb_row.clone(), two_qb_row), - ZZPhase => Signature::new(type_row![QB_T, QB_T, FLOAT64_TYPE], two_qb_row), - Measure => Signature::new(one_qb_row, type_row![BOOL_T]), - Rz => Signature::new(type_row![QB_T, FLOAT64_TYPE], one_qb_row), - PhasedX => Signature::new(type_row![QB_T, FLOAT64_TYPE, FLOAT64_TYPE], one_qb_row), + ZZPhase => Signature::new(vec![qb_t(), qb_t(), float64_type()], two_qb_row), + Measure => Signature::new(one_qb_row, bool_t()), + Rz => Signature::new(vec![qb_t(), float64_type()], one_qb_row), + PhasedX => Signature::new(vec![qb_t(), float64_type(), float64_type()], one_qb_row), TryQAlloc => Signature::new(type_row![], Type::from(option_type(one_qb_row))), QFree => Signature::new(one_qb_row, type_row![]), - MeasureReset => Signature::new(one_qb_row.clone(), type_row![QB_T, BOOL_T]), + MeasureReset => Signature::new(one_qb_row.clone(), vec![qb_t(), bool_t()]), } .into() } @@ -120,6 +120,10 @@ impl MakeOpDef for QSystemOp { EXTENSION_ID } + fn extension_ref(&self) -> std::sync::Weak { + Arc::downgrade(&EXTENSION) + } + fn description(&self) -> String { match self { QSystemOp::Measure => "Measure a qubit and lose it.", @@ -142,8 +146,8 @@ impl MakeRegisteredOp for QSystemOp { EXTENSION_ID } - fn registry<'s, 'r: 's>(&'s self) -> &'r ExtensionRegistry { - ®ISTRY + fn extension_ref(&self) -> Weak { + Arc::downgrade(&EXTENSION) } } @@ -374,8 +378,8 @@ pub trait QSystemOpBuilder: Dataflow + UnwrapBuilder { let [qb, b] = self.add_measure_reset(qb)?; let mut conditional = self.conditional_builder( ([type_row![], type_row![]], b), - [(QB_T, qb)], - type_row![QB_T], + [(qb_t(), qb)], + vec![qb_t()].into(), )?; // case 0: 0 state measured, leave alone @@ -396,7 +400,7 @@ pub trait QSystemOpBuilder: Dataflow + UnwrapBuilder { /// Build a qalloc operation that panics on failure. fn build_qalloc(&mut self) -> Result { let maybe_qb = self.add_try_alloc()?; - let [qb] = self.build_unwrap_sum(®ISTRY, 1, option_type(QB_T), maybe_qb)?; + let [qb] = self.build_unwrap_sum(1, option_type(qb_t()), maybe_qb)?; Ok(qb) } } @@ -432,15 +436,14 @@ mod test { fn lazy_circuit() { let hugr = { let mut func_builder = - FunctionBuilder::new("circuit", Signature::new(QB_T, vec![QB_T, BOOL_T])).unwrap(); + FunctionBuilder::new("circuit", Signature::new(qb_t(), vec![qb_t(), bool_t()])) + .unwrap(); let [qb] = func_builder.input_wires_arr(); let [qb, lazy_b] = func_builder.add_lazy_measure(qb).unwrap(); - let [b] = func_builder.add_read(lazy_b, BOOL_T).unwrap(); - func_builder - .finish_hugr_with_outputs([qb, b], ®ISTRY) - .unwrap() + let [b] = func_builder.add_read(lazy_b, bool_t()).unwrap(); + func_builder.finish_hugr_with_outputs([qb, b]).unwrap() }; - assert_matches!(hugr.validate(®ISTRY), Ok(_)); + assert_matches!(hugr.validate(), Ok(_)); } #[test] @@ -448,7 +451,7 @@ mod test { let hugr = { let mut func_builder = FunctionBuilder::new( "all_ops", - Signature::new(vec![QB_T, FLOAT64_TYPE], vec![BOOL_T]), + Signature::new(vec![qb_t(), float64_type()], vec![bool_t()]), ) .unwrap(); let [q0, angle] = func_builder.input_wires_arr(); @@ -461,11 +464,9 @@ mod test { let [q0, _b] = func_builder.add_measure_reset(q0).unwrap(); let b = func_builder.add_measure(q0).unwrap(); func_builder.add_qfree(q1).unwrap(); - func_builder - .finish_hugr_with_outputs([b], ®ISTRY) - .unwrap() + func_builder.finish_hugr_with_outputs([b]).unwrap() }; - assert_matches!(hugr.validate(®ISTRY), Ok(_)); + hugr.validate().unwrap() } #[test] diff --git a/tket2-hseries/src/extension/qsystem/lower.rs b/tket2-hseries/src/extension/qsystem/lower.rs index 452fcfa3..945fc361 100644 --- a/tket2-hseries/src/extension/qsystem/lower.rs +++ b/tket2-hseries/src/extension/qsystem/lower.rs @@ -63,7 +63,7 @@ pub enum LowerTk2Error { } fn op_to_hugr(op: Tk2Op) -> Result { - let sig = op.into_extension_op().signature(); + let sig = op.into_extension_op().signature().into_owned(); let sig = Signature::new(sig.input, sig.output); // ignore extension delta let mut b = DFGBuilder::new(sig)?; let inputs: Vec<_> = b.input_wires().collect(); @@ -101,7 +101,7 @@ fn op_to_hugr(op: Tk2Op) -> Result { (Tk2Op::Toffoli, [a, b_, c]) => b.build_toffoli(*a, *b_, *c)?.into(), _ => return Err(LowerTk2Error::UnknownOp(op, inputs.len())), // non-exhaustive }; - Ok(b.finish_hugr_with_outputs(outputs, ®ISTRY)?) + Ok(b.finish_hugr_with_outputs(outputs)?) } fn build_to_radians(b: &mut DFGBuilder, rotation: Wire) -> Result { @@ -181,12 +181,8 @@ pub struct LowerTket2ToQSystemPass(ValidationLevel); impl LowerTket2ToQSystemPass { /// Run `LowerTket2ToQSystemPass` on the given [HugrMut]. `registry` is used /// for validation, if enabled. - pub fn run( - &self, - hugr: &mut impl HugrMut, - registry: &ExtensionRegistry, - ) -> Result<(), LowerTk2Error> { - self.0.run_validated_pass(hugr, registry, |hugr, level| { + pub fn run(&self, hugr: &mut impl HugrMut) -> Result<(), LowerTk2Error> { + self.0.run_validated_pass(hugr, |hugr, level| { lower_tk2_op(hugr)?; if *level != ValidationLevel::None { check_lowered(hugr) @@ -206,10 +202,10 @@ impl LowerTket2ToQSystemPass { mod test { use hugr::{ builder::FunctionBuilder, - extension::prelude::{option_type, UnwrapBuilder as _, BOOL_T, QB_T}, + extension::prelude::{bool_t, option_type, qb_t, UnwrapBuilder as _}, type_row, HugrView, }; - use tket2::{extension::rotation::ROTATION_TYPE, Circuit}; + use tket2::{extension::rotation::rotation_type, Circuit}; use super::*; use rstest::rstest; @@ -221,25 +217,21 @@ mod test { .add_dataflow_op(Tk2Op::TryQAlloc, []) .unwrap() .outputs_arr(); - let [q] = b - .build_unwrap_sum(®ISTRY, 1, option_type(QB_T), maybe_q) - .unwrap(); + let [q] = b.build_unwrap_sum(1, option_type(qb_t()), maybe_q).unwrap(); let [q] = b.add_dataflow_op(Tk2Op::Reset, [q]).unwrap().outputs_arr(); b.add_dataflow_op(Tk2Op::QFree, [q]).unwrap(); let [maybe_q] = b .add_dataflow_op(Tk2Op::TryQAlloc, []) .unwrap() .outputs_arr(); - let [q] = b - .build_unwrap_sum(®ISTRY, 1, option_type(QB_T), maybe_q) - .unwrap(); + let [q] = b.build_unwrap_sum(1, option_type(qb_t()), maybe_q).unwrap(); let [_] = b .add_dataflow_op(Tk2Op::MeasureFree, [q]) .unwrap() .outputs_arr(); let mut h = b - .finish_hugr_with_outputs([], ®ISTRY) + .finish_hugr_with_outputs([]) .unwrap_or_else(|e| panic!("{}", e)); let lowered = lower_direct(&mut h).unwrap(); @@ -301,8 +293,7 @@ mod test { #[test] fn test_mixed() { - let mut b = - DFGBuilder::new(Signature::new(type_row![ROTATION_TYPE], type_row![BOOL_T])).unwrap(); + let mut b = DFGBuilder::new(Signature::new(rotation_type(), bool_t())).unwrap(); let [angle] = b.input_wires_arr(); let [q] = b.add_dataflow_op(Tk2Op::QAlloc, []).unwrap().outputs_arr(); let [q] = b.add_dataflow_op(Tk2Op::H, [q]).unwrap().outputs_arr(); @@ -315,7 +306,7 @@ mod test { .unwrap() .outputs_arr(); b.add_dataflow_op(Tk2Op::QFree, [q]).unwrap(); - let mut h = b.finish_hugr_with_outputs([bool], ®ISTRY).unwrap(); + let mut h = b.finish_hugr_with_outputs([bool]).unwrap(); let lowered = lower_tk2_op(&mut h).unwrap(); assert_eq!(lowered.len(), 5); diff --git a/tket2-hseries/src/extension/result.rs b/tket2-hseries/src/extension/result.rs index 192f3ba5..781d5051 100644 --- a/tket2-hseries/src/extension/result.rs +++ b/tket2-hseries/src/extension/result.rs @@ -1,25 +1,21 @@ //! This module defines the Hugr extension used to represent result reporting operations, //! with static string tags. //! -use std::sync::Arc; +use std::sync::{Arc, Weak}; +use hugr::std_extensions::collections; use hugr::types::Signature; use hugr::{ builder::{BuildError, Dataflow}, extension::{ - prelude::{self, BOOL_T, PRELUDE}, + prelude::bool_t, simple_op::{try_from_name, MakeExtensionOp, MakeOpDef, MakeRegisteredOp, OpLoadError}, - ExtensionId, ExtensionRegistry, ExtensionSet, OpDef, SignatureFunc, Version, + ExtensionId, ExtensionSet, OpDef, SignatureFunc, Version, }, ops::{NamedOp, OpType}, std_extensions::arithmetic::{ - float_types::{ - EXTENSION as FLOAT_EXTENSION, EXTENSION_ID as FLOAT_EXTENSION_ID, FLOAT64_TYPE, - }, - int_types::{ - int_type, EXTENSION as INT_EXTENSION, EXTENSION_ID as INT_EXTENSION_ID, - LOG_WIDTH_TYPE_PARAM, - }, + float_types::{float64_type, EXTENSION_ID as FLOAT_EXTENSION_ID}, + int_types::{int_type, EXTENSION_ID as INT_EXTENSION_ID, LOG_WIDTH_TYPE_PARAM}, }, type_row, types::{type_param::TypeParam, PolyFuncType, Type, TypeArg}, @@ -39,19 +35,10 @@ lazy_static! { /// The "tket2.result" extension. pub static ref EXTENSION: Arc = { Extension::new_arc(EXTENSION_ID, EXTENSION_VERSION, |ext, ext_ref| { - ext.add_requirements(ExtensionSet::from_iter([INT_EXTENSION_ID, FLOAT_EXTENSION_ID])); + ext.add_requirements(ExtensionSet::from_iter([INT_EXTENSION_ID, FLOAT_EXTENSION_ID, collections::array::EXTENSION_ID])); ResultOpDef::load_all_ops(ext, ext_ref).unwrap(); }) }; - - /// Extension registry including the "tket2.result" extension and - /// dependencies. - pub static ref REGISTRY: ExtensionRegistry = ExtensionRegistry::try_new([ - EXTENSION.to_owned(), - INT_EXTENSION.to_owned(), - FLOAT_EXTENSION.to_owned(), - PRELUDE.to_owned() - ]).unwrap(); } #[derive( @@ -106,14 +93,14 @@ impl ResultOpDef { /// Type of the argument to the result operation. pub fn arg_type(&self) -> Type { match self { - Self::Bool => BOOL_T, + Self::Bool => bool_t(), Self::Int | Self::UInt => int_tv(1), - Self::F64 => FLOAT64_TYPE, + Self::F64 => float64_type(), Self::ArrBool | Self::ArrF64 => { let inner_t = self.simple_type_op().arg_type(); - array_type(inner_t) + array_arg_type(inner_t) } - Self::ArrInt | Self::ArrUInt => array_type(int_tv(2)), + Self::ArrInt | Self::ArrUInt => array_arg_type(int_tv(2)), } } @@ -183,8 +170,12 @@ impl ResultOpDef { } } -fn array_type(inner_t: Type) -> Type { - prelude::array_type(TypeArg::new_var_use(1, TypeParam::max_nat()), inner_t) +fn array_arg_type(inner_t: Type) -> Type { + collections::array::array_type_parametric( + TypeArg::new_var_use(1, TypeParam::max_nat()), + inner_t, + ) + .unwrap() } fn int_tv(int_tv_idx: usize) -> Type { @@ -192,7 +183,7 @@ fn int_tv(int_tv_idx: usize) -> Type { } impl MakeOpDef for ResultOpDef { - fn signature(&self) -> SignatureFunc { + fn init_signature(&self, _extension_ref: &std::sync::Weak) -> SignatureFunc { self.result_signature() } @@ -217,6 +208,10 @@ impl MakeOpDef for ResultOpDef { } .to_string() } + + fn extension_ref(&self) -> std::sync::Weak { + Arc::downgrade(&EXTENSION) + } } #[derive(Clone, Debug, serde::Serialize, serde::Deserialize, Hash, PartialEq)] @@ -367,8 +362,8 @@ impl MakeRegisteredOp for ResultOp { EXTENSION_ID } - fn registry<'s, 'r: 's>(&'s self) -> &'r ExtensionRegistry { - ®ISTRY + fn extension_ref(&self) -> Weak { + Arc::downgrade(&EXTENSION) } } @@ -403,9 +398,9 @@ pub(crate) mod test { use hugr::types::Signature; use hugr::{ builder::{Dataflow, DataflowHugr, FunctionBuilder}, - extension::prelude::array_type, ops::NamedOp, std_extensions::arithmetic::int_types::INT_TYPES, + std_extensions::collections::array::array_type, }; use std::sync::Arc; use strum::IntoEnumIterator; @@ -429,8 +424,8 @@ pub(crate) mod test { fn circuit() { const ARR_SIZE: u64 = 20; let in_row = vec![ - BOOL_T, - FLOAT64_TYPE, + bool_t(), + float64_type(), INT_TYPES[5].clone(), INT_TYPES[6].clone(), ]; @@ -438,7 +433,7 @@ pub(crate) mod test { in_row.clone(), in_row .into_iter() - .map(|t| array_type(TypeArg::BoundedNat { n: ARR_SIZE }, t)) + .map(|t| array_type(ARR_SIZE, t)) .collect(), ] .concat(); @@ -478,10 +473,8 @@ pub(crate) mod test { .unwrap(); } - func_builder - .finish_hugr_with_outputs([], ®ISTRY) - .unwrap() + func_builder.finish_hugr_with_outputs([]).unwrap() }; - assert_matches!(hugr.validate(®ISTRY), Ok(_)); + assert_matches!(hugr.validate(), Ok(_)); } } diff --git a/tket2-hseries/src/lazify_measure.rs b/tket2-hseries/src/lazify_measure.rs index 66dfefb5..e1a316cb 100644 --- a/tket2-hseries/src/lazify_measure.rs +++ b/tket2-hseries/src/lazify_measure.rs @@ -13,10 +13,7 @@ use hugr::{ validation::{ValidatePassError, ValidationLevel}, }, builder::{DFGBuilder, Dataflow, DataflowHugr}, - extension::{ - prelude::{BOOL_T, QB_T}, - ExtensionRegistry, - }, + extension::prelude::{bool_t, qb_t}, hugr::{hugrmut::HugrMut, views::SiblingSubgraph, Rewrite, SimpleReplacementError}, types::Signature, Hugr, HugrView, IncomingPort, Node, OutgoingPort, SimpleReplacement, @@ -25,17 +22,17 @@ use tket2::Tk2Op; use lazy_static::lazy_static; -use crate::extension::{ - futures::FutureOpBuilder, - qsystem::{self, QSystemOpBuilder}, -}; +use crate::extension::{futures::FutureOpBuilder, qsystem::QSystemOpBuilder}; -/// A `Hugr -> Hugr` pass that replaces [tket2::Tk2Op::Measure] nodes with -/// [qsystem::QSystemOp::Measure] nodes. To construct a `LazifyMeasurePass` use +/// A `Hugr -> Hugr` pass that replaces [Tk2Op::Measure] nodes with +/// [QSystemOp::Measure] nodes. To construct a `LazifyMeasurePass` use /// [Default::default]. /// /// The `Hugr` must not contain any non-local edges. If validation is enabled, /// this precondition will be verified. +/// +/// [Tket2Op::Measure]: tket2::Tk2Op::Measure +/// [QSystemOp::Measure]: crate::extension::qsystem::QSystemOp::Measure #[derive(Default)] pub struct LazifyMeasurePass(ValidationLevel); @@ -54,27 +51,20 @@ pub enum LazifyMeasurePassError { impl LazifyMeasurePass { /// Run `LazifyMeasurePass` on the given [HugrMut]. `registry` is used for /// validation, if enabled. - pub fn run( - &self, - hugr: &mut impl HugrMut, - registry: &ExtensionRegistry, - ) -> Result<(), LazifyMeasurePassError> { - self.0 - .run_validated_pass(hugr, registry, |hugr, validation_level| { - if validation_level != &ValidationLevel::None { - ensure_no_nonlocal_edges(hugr)?; - } - let mut state = - State::new( - hugr.nodes() - .filter_map(|n| match hugr.get_optype(n).cast() { - Some(Tk2Op::Measure) => Some(WorkItem::ReplaceMeasure(n)), - _ => None, - }), - ); - while state.work_one(hugr)? {} - Ok(()) - }) + pub fn run(&self, hugr: &mut impl HugrMut) -> Result<(), LazifyMeasurePassError> { + self.0.run_validated_pass(hugr, |hugr, validation_level| { + if validation_level != &ValidationLevel::None { + ensure_no_nonlocal_edges(hugr)?; + } + let mut state = State::new(hugr.nodes().filter_map( + |n| match hugr.get_optype(n).cast() { + Some(Tk2Op::Measure) => Some(WorkItem::ReplaceMeasure(n)), + _ => None, + }, + )); + while state.work_one(hugr)? {} + Ok(()) + }) } /// Returns a new `LazifyMeasurePass` with the given [ValidationLevel]. @@ -109,45 +99,41 @@ impl State { lazy_static! { static ref MEASURE_READ_HUGR: Hugr = { - let mut builder = DFGBuilder::new(Signature::new(QB_T, vec![QB_T, BOOL_T])).unwrap(); + let mut builder = DFGBuilder::new(Signature::new(qb_t(), vec![qb_t(), bool_t()])).unwrap(); let [qb] = builder.input_wires_arr(); let [qb, lazy_r] = builder.add_lazy_measure(qb).unwrap(); - let [r] = builder.add_read(lazy_r, BOOL_T).unwrap(); - builder - .finish_hugr_with_outputs([qb, r], &qsystem::REGISTRY) - .unwrap() + let [r] = builder.add_read(lazy_r, bool_t()).unwrap(); + builder.finish_hugr_with_outputs([qb, r]).unwrap() }; } fn measure_replacement(num_dups: usize) -> Hugr { - let mut out_types = vec![QB_T]; - out_types.extend((0..num_dups).map(|_| BOOL_T)); + let mut out_types = vec![qb_t()]; + out_types.extend((0..num_dups).map(|_| bool_t())); let num_out_types = out_types.len(); - let mut builder = DFGBuilder::new(Signature::new(QB_T, out_types)).unwrap(); + let mut builder = DFGBuilder::new(Signature::new(qb_t(), out_types)).unwrap(); let [qb] = builder.input_wires_arr(); let [qb, mut future_r] = builder.add_lazy_measure(qb).unwrap(); let mut future_rs = vec![]; if num_dups > 0 { for _ in 0..num_dups - 1 { - let [r1, r2] = builder.add_dup(future_r, BOOL_T).unwrap(); + let [r1, r2] = builder.add_dup(future_r, bool_t()).unwrap(); future_rs.push(r1); future_r = r2; } future_rs.push(future_r) } else { - builder.add_free(future_r, BOOL_T).unwrap(); + builder.add_free(future_r, bool_t()).unwrap(); } let mut rs = vec![qb]; rs.extend( future_rs .into_iter() - .map(|r| builder.add_read(r, BOOL_T).unwrap()[0]), + .map(|r| builder.add_read(r, bool_t()).unwrap()[0]), ); assert_eq!(num_out_types, rs.len()); assert_eq!(num_out_types, num_dups + 1); - builder - .finish_hugr_with_outputs(rs, &qsystem::REGISTRY) - .unwrap() + builder.finish_hugr_with_outputs(rs).unwrap() } fn simple_replace_measure( @@ -215,45 +201,25 @@ impl WorkItem { #[cfg(test)] mod test { - use hugr::{ - extension::{ExtensionRegistry, EMPTY_REG, PRELUDE}, - std_extensions::arithmetic::float_types, - }; - use tket2::extension::TKET2_EXTENSION; - - use crate::extension::{ - futures::{self, FutureOpDef}, - qsystem::QSystemOp, - }; + use crate::extension::{futures::FutureOpDef, qsystem::QSystemOp}; use super::*; - lazy_static! { - pub static ref REGISTRY: ExtensionRegistry = ExtensionRegistry::try_new([ - qsystem::EXTENSION.to_owned(), - futures::EXTENSION.to_owned(), - TKET2_EXTENSION.to_owned(), - PRELUDE.to_owned(), - float_types::EXTENSION.clone(), - ]) - .unwrap(); - } #[test] fn simple() { let mut hugr = { - let mut builder = DFGBuilder::new(Signature::new(QB_T, vec![QB_T, BOOL_T])).unwrap(); + let mut builder = + DFGBuilder::new(Signature::new(qb_t(), vec![qb_t(), bool_t()])).unwrap(); let [qb] = builder.input_wires_arr(); let outs = builder .add_dataflow_op(Tk2Op::Measure, [qb]) .unwrap() .outputs(); - builder.finish_hugr_with_outputs(outs, ®ISTRY).unwrap() + builder.finish_hugr_with_outputs(outs).unwrap() }; - assert!(hugr.validate_no_extensions(®ISTRY).is_ok()); - LazifyMeasurePass::default() - .run(&mut hugr, &EMPTY_REG) - .unwrap(); - assert!(hugr.validate_no_extensions(®ISTRY).is_ok()); + assert!(hugr.validate_no_extensions().is_ok()); + LazifyMeasurePass::default().run(&mut hugr).unwrap(); + assert!(hugr.validate_no_extensions().is_ok()); let mut num_read = 0; let mut num_lazy_measure = 0; for n in hugr.nodes() { @@ -274,37 +240,31 @@ mod test { #[test] fn multiple_uses() { let mut builder = - DFGBuilder::new(Signature::new(QB_T, vec![QB_T, BOOL_T, BOOL_T])).unwrap(); + DFGBuilder::new(Signature::new(qb_t(), vec![qb_t(), bool_t(), bool_t()])).unwrap(); let [qb] = builder.input_wires_arr(); let [qb, bool] = builder .add_dataflow_op(Tk2Op::Measure, [qb]) .unwrap() .outputs_arr(); - let mut hugr = builder - .finish_hugr_with_outputs([qb, bool, bool], ®ISTRY) - .unwrap(); + let mut hugr = builder.finish_hugr_with_outputs([qb, bool, bool]).unwrap(); - assert!(hugr.validate_no_extensions(®ISTRY).is_ok()); - LazifyMeasurePass::default() - .run(&mut hugr, &EMPTY_REG) - .unwrap(); - assert!(hugr.validate_no_extensions(®ISTRY).is_ok()); + assert!(hugr.validate_no_extensions().is_ok()); + LazifyMeasurePass::default().run(&mut hugr).unwrap(); + assert!(hugr.validate_no_extensions().is_ok()); } #[test] fn no_uses() { - let mut builder = DFGBuilder::new(Signature::new_endo(QB_T)).unwrap(); + let mut builder = DFGBuilder::new(Signature::new_endo(qb_t())).unwrap(); let [qb] = builder.input_wires_arr(); let [qb, _] = builder .add_dataflow_op(Tk2Op::Measure, [qb]) .unwrap() .outputs_arr(); - let mut hugr = builder.finish_hugr_with_outputs([qb], ®ISTRY).unwrap(); + let mut hugr = builder.finish_hugr_with_outputs([qb]).unwrap(); - assert!(hugr.validate_no_extensions(®ISTRY).is_ok()); - LazifyMeasurePass::default() - .run(&mut hugr, &EMPTY_REG) - .unwrap(); - assert!(hugr.validate_no_extensions(®ISTRY).is_ok()); + assert!(hugr.validate_no_extensions().is_ok()); + LazifyMeasurePass::default().run(&mut hugr).unwrap(); + assert!(hugr.validate_no_extensions().is_ok()); } } diff --git a/tket2-hseries/src/lib.rs b/tket2-hseries/src/lib.rs index 2079204c..0a8be413 100644 --- a/tket2-hseries/src/lib.rs +++ b/tket2-hseries/src/lib.rs @@ -6,7 +6,6 @@ use hugr::{ force_order, validation::{ValidatePassError, ValidationLevel}, }, - extension::ExtensionRegistry, hugr::{hugrmut::HugrMut, HugrError}, }; use tket2::Tk2Op; @@ -49,29 +48,24 @@ pub enum QSystemPassError { impl QSystemPass { /// Run `QSystemPass` on the given [HugrMut]. `registry` is used for /// validation, if enabled. - pub fn run( - &self, - hugr: &mut impl HugrMut, - registry: &ExtensionRegistry, - ) -> Result<(), QSystemPassError> { - self.lower_tk2().run(hugr, registry)?; - self.lazify_measure().run(hugr, registry)?; - self.validation_level - .run_validated_pass(hugr, registry, |hugr, _| { - force_order(hugr, hugr.root(), |hugr, node| { - let optype = hugr.get_optype(node); - if optype.cast::().is_some() || optype.cast::().is_some() { - // quantum ops are lifted as early as possible - -1 - } else if let Some(FutureOpDef::Read) = hugr.get_optype(node).cast() { - // read ops are sunk as late as possible - 1 - } else { - 0 - } - })?; - Ok::<_, QSystemPassError>(()) + pub fn run(&self, hugr: &mut impl HugrMut) -> Result<(), QSystemPassError> { + self.lower_tk2().run(hugr)?; + self.lazify_measure().run(hugr)?; + self.validation_level.run_validated_pass(hugr, |hugr, _| { + force_order(hugr, hugr.root(), |hugr, node| { + let optype = hugr.get_optype(node); + if optype.cast::().is_some() || optype.cast::().is_some() { + // quantum ops are lifted as early as possible + -1 + } else if let Some(FutureOpDef::Read) = hugr.get_optype(node).cast() { + // read ops are sunk as late as possible + 1 + } else { + 0 + } })?; + Ok::<_, QSystemPassError>(()) + })?; Ok(()) } @@ -94,7 +88,7 @@ impl QSystemPass { mod test { use hugr::{ builder::{Container, DFGBuilder, Dataflow, DataflowHugr, DataflowSubContainer}, - extension::prelude::{BOOL_T, QB_T}, + extension::prelude::{bool_t, qb_t}, ops::handle::NodeHandle, std_extensions::arithmetic::float_types::ConstF64, type_row, @@ -111,9 +105,9 @@ mod test { #[test] fn qsystem_pass() { - let registry = &tket2::extension::REGISTRY; let (mut hugr, [call_node, h_node, f_node, rx_node]) = { - let mut builder = DFGBuilder::new(Signature::new(QB_T, vec![BOOL_T, BOOL_T])).unwrap(); + let mut builder = + DFGBuilder::new(Signature::new(qb_t(), vec![bool_t(), bool_t()])).unwrap(); let func = builder .define_function("func", Signature::new_endo(type_row![])) .unwrap() @@ -123,10 +117,7 @@ mod test { // This call node has no dependencies, so it should be lifted above // Future Reads and sunk below quantum ops. - let call_node = builder - .call(func.handle(), &[], [], registry) - .unwrap() - .node(); + let call_node = builder.call(func.handle(), &[], []).unwrap().node(); // this LoadConstant should be pushed below the quantum ops where possible let angle = builder.add_load_value(ConstF64::new(0.0)); @@ -155,12 +146,12 @@ mod test { .outputs_arr(); let hugr = builder - .finish_hugr_with_outputs([measure_result, measure_result], registry) + .finish_hugr_with_outputs([measure_result, measure_result]) .unwrap(); (hugr, [call_node, h_node, f_node, rx_node]) }; - QSystemPass::default().run(&mut hugr, registry).unwrap(); + QSystemPass::default().run(&mut hugr).unwrap(); let topo_sorted = Topo::new(&hugr.as_petgraph()) .iter(&hugr.as_petgraph()) diff --git a/tket2-py/examples/utils/__init__.py b/tket2-py/examples/utils/__init__.py index 9600f8bb..c2567c1e 100644 --- a/tket2-py/examples/utils/__init__.py +++ b/tket2-py/examples/utils/__init__.py @@ -3,7 +3,7 @@ from hugr import Hugr from tket2.passes import lower_to_pytket from tket2.circuit import Tk2Circuit -from guppylang.definition.function import RawFunctionDef # type: ignore[import-untyped, import-not-found, unused-ignore] # noqa: F401 +from typing import Any def setup_jupyter_rendering(): @@ -25,7 +25,8 @@ def _repr_tk2circ( # TODO: Should this be part of the guppy API? Or tket2? -def guppy_to_circuit(func_def: RawFunctionDef) -> Tk2Circuit: +# Takes a RawFunctionDef and converts it to a Tk2Circuit +def guppy_to_circuit(func_def: Any) -> Tk2Circuit: """Convert a Guppy function definition to a `Tk2Circuit`.""" module = func_def.id.module assert module is not None, "Function definition must belong to a module" diff --git a/tket2-py/pyproject.toml b/tket2-py/pyproject.toml index cbfef552..3ead52e0 100644 --- a/tket2-py/pyproject.toml +++ b/tket2-py/pyproject.toml @@ -28,7 +28,7 @@ classifiers = [ dependencies = [ 'pytket >= 1.34, < 2', - 'hugr >= 0.9.0, < 0.10', + 'hugr >= 0.10.0, < 0.11', 'tket2_eccs >= 0.2.0, < 0.3', 'tket2_exts >= 0.1.0, < 0.2', ] diff --git a/tket2-py/src/circuit.rs b/tket2-py/src/circuit.rs index 3c939a20..3619fe7f 100644 --- a/tket2-py/src/circuit.rs +++ b/tket2-py/src/circuit.rs @@ -6,7 +6,7 @@ mod cost; mod tk2circuit; use derive_more::{From, Into}; -use hugr::extension::prelude::{BOOL_T, QB_T}; +use hugr::extension::prelude::{bool_t, qb_t}; use hugr::hugr::IdentList; use hugr::ops::custom::{ExtensionOp, OpaqueOp}; use hugr::ops::{NamedOp, OpName, OpType}; @@ -15,7 +15,6 @@ use pyo3::prelude::*; use std::fmt; use hugr::{type_row, Hugr, HugrView, PortIndex}; -use tket2::extension::REGISTRY; use tket2::rewrite::CircuitRewrite; use tket2::serialize::TKETDecode; use tket_json_rs::circuit_json::SerialCircuit; @@ -85,7 +84,7 @@ create_py_exception!( /// Run the validation checks on a circuit. #[pyfunction] pub fn validate_circuit(c: &Bound) -> PyResult<()> { - try_with_circ(c, |circ, _| circ.hugr().validate(®ISTRY)) + try_with_circ(c, |circ, _| circ.hugr().validate()) } /// Return a Graphviz DOT string representation of the circuit. diff --git a/tket2-py/src/circuit/convert.rs b/tket2-py/src/circuit/convert.rs index 93fb1a8f..aa8f0702 100644 --- a/tket2-py/src/circuit/convert.rs +++ b/tket2-py/src/circuit/convert.rs @@ -3,7 +3,7 @@ use std::borrow::Borrow; use hugr::builder::{CircuitBuilder, DFGBuilder, Dataflow, DataflowHugr}; -use hugr::extension::prelude::QB_T; +use hugr::extension::prelude::qb_t; use hugr::ops::handle::NodeHandle; use hugr::ops::OpType; use hugr::types::Type; @@ -19,7 +19,6 @@ use derive_more::From; use hugr::{Hugr, HugrView, Wire}; use serde::Serialize; use tket2::circuit::CircuitHash; -use tket2::extension::REGISTRY; use tket2::passes::CircuitChunks; use tket2::serialize::TKETDecode; use tket2::{Circuit, Tk2Op}; diff --git a/tket2-py/src/circuit/tk2circuit.rs b/tket2-py/src/circuit/tk2circuit.rs index d824356b..a7311e39 100644 --- a/tket2-py/src/circuit/tk2circuit.rs +++ b/tket2-py/src/circuit/tk2circuit.rs @@ -5,7 +5,7 @@ use std::fmt::Display; use std::mem; use hugr::builder::{CircuitBuilder, DFGBuilder, Dataflow, DataflowHugr}; -use hugr::extension::prelude::QB_T; +use hugr::extension::prelude::qb_t; use hugr::extension::{ExtensionRegistry, EMPTY_REG}; use hugr::ops::handle::NodeHandle; use hugr::ops::{ExtensionOp, NamedOp, OpType}; @@ -23,7 +23,6 @@ use derive_more::From; use hugr::{Hugr, HugrView, Wire}; use serde::Serialize; use tket2::circuit::CircuitHash; -use tket2::extension::REGISTRY; use tket2::passes::pytket::lower_to_pytket; use tket2::passes::CircuitChunks; use tket2::serialize::TKETDecode; diff --git a/tket2-py/src/ops.rs b/tket2-py/src/ops.rs index 48649da0..6cf47673 100644 --- a/tket2-py/src/ops.rs +++ b/tket2-py/src/ops.rs @@ -10,8 +10,6 @@ use strum::IntoEnumIterator; use hugr::ops::{NamedOp, OpType}; use tket2::{Pauli, Tk2Op}; -use crate::types::PyHugrType; - /// The module definition pub fn module(py: Python<'_>) -> PyResult> { let m = PyModule::new(py, "ops")?; @@ -216,6 +214,10 @@ impl PyPauliIter { } /// A wrapped custom operation. +// +// TODO: These can no longer be constructed from Python. Since `hugr-rs 0.14` +// we need an extension and `OpDef` to defines these. +// If fixing this, make sure to fix `PyHugrType` too. #[pyclass] #[pyo3(name = "CustomOp")] #[repr(transparent)] @@ -236,26 +238,6 @@ impl From for OpType { #[pymethods] impl PyExtensionOp { - #[new] - #[allow(unused)] - fn new( - extension: &str, - op_name: &str, - input_types: Vec, - output_types: Vec, - ) -> PyResult { - // FIXME: Broken during the update to hugr 0.12 - // Operations must now always be backed by an opDef, so the old way - // of creating `PyOpaqueOp`s on the fly is no longer possible. - unimplemented!("Python Extension Ops need an operation definition") - //let opdef = todo!(); - //Ok(ExtensionOp::new( - // opdef, - // [], - // Signature::new(into_vec(input_types), into_vec(output_types)), - //)) - } - fn to_custom(&self) -> Self { self.clone() } diff --git a/tket2-py/src/types.rs b/tket2-py/src/types.rs index 8ee997c0..547e364c 100644 --- a/tket2-py/src/types.rs +++ b/tket2-py/src/types.rs @@ -1,9 +1,8 @@ //! Hugr types use derive_more::{From, Into}; -use hugr::extension::prelude::{BOOL_T, QB_T}; -use hugr::hugr::IdentList; -use hugr::types::{CustomType, Type, TypeBound}; +use hugr::extension::prelude::{bool_t, qb_t}; +use hugr::types::{Type, TypeBound}; use pyo3::prelude::*; use std::fmt; @@ -45,7 +44,11 @@ impl From for PyTypeBound { } } -/// A HUGR type +/// A HUGR type. +// +// TODO: These can no longer be constructed from Python. Since `hugr-rs 0.14` +// we need an extension to defines these. +// If fixing this, make sure to fix `PyExtensionOp` too. #[pyclass] #[pyo3(name = "HugrType")] #[repr(transparent)] @@ -60,26 +63,18 @@ impl fmt::Debug for PyHugrType { #[pymethods] impl PyHugrType { - #[new] - fn new(extension: &str, type_name: &str, bound: PyTypeBound) -> Self { - Self(Type::new_extension(CustomType::new_simple( - type_name.into(), - IdentList::new(extension).unwrap(), - bound.into(), - ))) - } #[staticmethod] fn qubit() -> Self { - Self(QB_T) + Self(qb_t()) } #[staticmethod] fn bool() -> Self { - Self(BOOL_T) + Self(bool_t()) } /// A string representation of the type. pub fn __repr__(&self) -> String { - format!("{:?}", self) + format!("{}", self.0) } } diff --git a/tket2-py/src/utils.rs b/tket2-py/src/utils.rs index 45693ad2..997f60cc 100644 --- a/tket2-py/src/utils.rs +++ b/tket2-py/src/utils.rs @@ -58,10 +58,8 @@ pub(crate) mod test { BuildError, CircuitBuilder, Container, Dataflow, DataflowSubContainer, FunctionBuilder, HugrBuilder, ModuleBuilder, }; - use hugr::extension::prelude::QB_T; - use hugr::extension::PRELUDE_REGISTRY; + use hugr::extension::prelude::qb_t; use hugr::ops::handle::NodeHandle; - use hugr::types::FunctionType; use hugr::Hugr; use pyo3::{Bound, PyResult, Python}; use tket2::Circuit; @@ -76,7 +74,7 @@ pub(crate) mod test { { let mut builder = ModuleBuilder::new(); let circ = { - let qb_row = vec![QB_T; num_qubits]; + let qb_row = vec![qb_t(); num_qubits]; let circ_signature = FunctionType::new(qb_row.clone(), qb_row); let mut dfg = builder.define_function("main", circ_signature.into())?; let mut circ = dfg.as_circuit(dfg.input_wires()); @@ -84,7 +82,7 @@ pub(crate) mod test { let qbs = circ.finish(); dfg.finish_with_outputs(qbs)? }; - let hugr = builder.finish_hugr(&PRELUDE_REGISTRY)?; + let hugr = builder.finish_hugr()?; Ok(Circuit::new(hugr, circ.node())) } diff --git a/tket2/benches/benchmarks/generators.rs b/tket2/benches/benchmarks/generators.rs index bde3114a..83fb048a 100644 --- a/tket2/benches/benchmarks/generators.rs +++ b/tket2/benches/benchmarks/generators.rs @@ -1,6 +1,5 @@ use hugr::builder::{BuildError, CircuitBuilder, DFGBuilder, Dataflow, DataflowHugr}; -use hugr::extension::prelude::QB_T; -use hugr::extension::PRELUDE_REGISTRY; +use hugr::extension::prelude::qb_t; use hugr::types::Signature; use hugr::Hugr; use tket2::Tk2Op; @@ -12,7 +11,7 @@ pub fn build_simple_circuit( num_qubits: usize, f: impl FnOnce(&mut CircuitBuilder>) -> Result<(), BuildError>, ) -> Result { - let qb_row = vec![QB_T; num_qubits]; + let qb_row = vec![qb_t(); num_qubits]; let mut h = DFGBuilder::new(Signature::new(qb_row.clone(), qb_row))?; let qbs = h.input_wires(); @@ -22,7 +21,7 @@ pub fn build_simple_circuit( f(&mut circ)?; let qbs = circ.finish(); - h.finish_hugr_with_outputs(qbs, &PRELUDE_REGISTRY) + h.finish_hugr_with_outputs(qbs) } /// Create a circuit with layers of CNOTs. diff --git a/tket2/src/circuit.rs b/tket2/src/circuit.rs index 558fc582..fe26d4f0 100644 --- a/tket2/src/circuit.rs +++ b/tket2/src/circuit.rs @@ -6,10 +6,9 @@ mod extract_dfg; mod hash; pub mod units; +use std::borrow::Cow; use std::collections::HashSet; use std::iter::Sum; -use std::mem; -use std::sync::Arc; pub use command::{Command, CommandIterator}; pub use hash::CircuitHash; @@ -22,7 +21,7 @@ use hugr::hugr::hugrmut::HugrMut; use hugr::ops::dataflow::IOTrait; use hugr::ops::{Input, NamedOp, OpName, OpParent, OpTag, OpTrait, Output}; use hugr::types::{PolyFuncType, Signature}; -use hugr::{Extension, Hugr, PortIndex}; +use hugr::{Hugr, PortIndex}; use hugr::{HugrView, OutgoingPort}; use itertools::Itertools; use lazy_static::lazy_static; @@ -31,8 +30,6 @@ pub use hugr::ops::OpType; pub use hugr::types::{EdgeKind, Type, TypeRow}; pub use hugr::{Node, Port, Wire}; -use crate::extension; - use self::units::{filter, LinearUnit, Units}; /// A quantum circuit, represented as a function in a HUGR. @@ -44,24 +41,13 @@ pub struct Circuit { /// /// This is checked at runtime to ensure that the node is a DFG node. parent: Node, - /// An optional set of extensions required to validate the circuit, - /// not including the prelude. - /// - /// Wrapped in an Arc to allow sharing between circuits, specially for borrowed circuits. - /// - /// Defaults to an standard set of quantum extensions and Hugr's std set. - required_extensions: Option>>, } impl Default for Circuit { fn default() -> Self { let hugr = T::default(); let parent = hugr.root(); - Self { - hugr, - parent, - required_extensions: None, - } + Self { hugr, parent } } } @@ -88,13 +74,6 @@ lazy_static! { set.insert(format!("prelude.{}", LiftDef.name()).into()); set }; - - /// A default set of required extensions for a circuit, - /// used when loading with hugr with no pre-defined extension set. - /// - /// We should be able to drop this once hugrs embed their required extensions. - /// See https://github.com/CQCL/hugr/issues/1613 - static ref DEFAULT_REQUIRED_EXTENSIONS: Vec> = extension::REGISTRY.iter().map(|(_, ext)| ext.to_owned()).collect(); } /// The [IGNORED_EXTENSION_OPS] definition depends on the buggy behaviour of [`NamedOp::name`], which returns bare names instead of scoped names on some cases. /// Once this test starts failing it should be time to drop the `format!("prelude.{}", ...)`. @@ -112,11 +91,7 @@ impl Circuit { /// Returns an error if the parent node is not a DFG node in the HUGR. pub fn try_new(hugr: T, parent: Node) -> Result { check_hugr(&hugr, parent)?; - Ok(Self { - hugr, - parent, - required_extensions: None, - }) + Ok(Self { hugr, parent }) } /// Create a new circuit from a HUGR and a node. @@ -153,40 +128,12 @@ impl Circuit { &mut self.hugr } - /// Get the required extensions for the circuit. - /// - /// If no extension set was defined, returns the default set of quantum extensions and Hugr's std set. - /// - /// Note: This API is not currently public. We expect hugrs to embed their required extensions in the future, - /// at which point this method will be removed. - /// See https://github.com/CQCL/hugr/issues/1613 - pub(crate) fn required_extensions(&self) -> &[Arc] { - self.required_extensions - .as_deref() - .unwrap_or_else(|| &DEFAULT_REQUIRED_EXTENSIONS) - } - - /// Set the required extension set for the circuit. - /// - /// Returns the previous set of required extensions, if any. - /// - /// Note: This API is not currently public. We expect hugrs to embed their required extensions in the future, - /// at which point this method will be removed. - /// See https://github.com/CQCL/hugr/issues/1613 - pub(crate) fn set_required_extensions( - &mut self, - extensions: Vec>, - ) -> Option>> { - mem::replace(&mut self.required_extensions, Some(extensions)) - } - /// Ensures the circuit contains an owned HUGR. pub fn to_owned(&self) -> Circuit { let hugr = self.hugr.base_hugr().clone(); Circuit { hugr, parent: self.parent, - required_extensions: self.required_extensions.clone(), } } @@ -212,7 +159,7 @@ impl Circuit { /// Returns the function type of the circuit. #[inline] - pub fn circuit_signature(&self) -> Signature { + pub fn circuit_signature(&self) -> Cow<'_, Signature> { let op = self.hugr.get_optype(self.parent); op.inner_function_type() .unwrap_or_else(|| panic!("{} is an invalid circuit parent type.", op.name())) @@ -713,7 +660,7 @@ mod tests { use hugr::types::Signature; use hugr::{ builder::{DFGBuilder, DataflowHugr}, - extension::{prelude::BOOL_T, PRELUDE_REGISTRY}, + extension::prelude::bool_t, }; use super::*; @@ -828,11 +775,8 @@ mod tests { #[test] fn remove_bit() { - let h = DFGBuilder::new(Signature::new(vec![BOOL_T], vec![])).unwrap(); - let mut circ: Circuit = h - .finish_hugr_with_outputs([], &PRELUDE_REGISTRY) - .unwrap() - .into(); + let h = DFGBuilder::new(Signature::new(vec![bool_t()], vec![])).unwrap(); + let mut circ: Circuit = h.finish_hugr_with_outputs([]).unwrap().into(); assert_eq!(circ.units().count(), 1); assert!(remove_empty_wire(&mut circ, 0).is_ok()); diff --git a/tket2/src/circuit/command.rs b/tket2/src/circuit/command.rs index 7fdba670..53f85e6e 100644 --- a/tket2/src/circuit/command.rs +++ b/tket2/src/circuit/command.rs @@ -475,7 +475,7 @@ impl std::fmt::Debug for CommandIterator<'_, T> { #[cfg(test)] mod test { use hugr::builder::{Container, DFGBuilder, Dataflow, DataflowHugr}; - use hugr::extension::prelude::QB_T; + use hugr::extension::prelude::qb_t; use hugr::hugr::hugrmut::HugrMut; use hugr::ops::handle::NodeHandle; use hugr::ops::{NamedOp, Value}; @@ -486,7 +486,7 @@ mod test { use std::hash::{Hash, Hasher}; use crate::extension::rotation::ConstRotation; - use crate::extension::REGISTRY; + use crate::utils::{build_module_with_circuit, build_simple_circuit}; use crate::Tk2Op; @@ -586,7 +586,7 @@ mod test { /// Commands iterator with non-linear wires. #[test] fn commands_nonlinear() { - let qb_row = vec![QB_T; 1]; + let qb_row = vec![qb_t(); 1]; let mut h = DFGBuilder::new(Signature::new(qb_row.clone(), qb_row)).unwrap(); let [q_in] = h.input_wires_arr(); @@ -594,10 +594,7 @@ mod test { let loaded_const = h.load_const(&constant); let rz = h.add_dataflow_op(Tk2Op::Rz, [q_in, loaded_const]).unwrap(); - let circ: Circuit = h - .finish_hugr_with_outputs(rz.outputs(), ®ISTRY) - .unwrap() - .into(); + let circ: Circuit = h.finish_hugr_with_outputs(rz.outputs()).unwrap().into(); assert_eq!(CommandIterator::new(&circ).count(), 3); let mut commands = CommandIterator::new(&circ); @@ -655,7 +652,7 @@ mod test { /// computes input/output units. #[test] fn alloc_free() -> Result<(), Box> { - let qb_row = vec![QB_T; 1]; + let qb_row = vec![qb_t(); 1]; let mut h = DFGBuilder::new(Signature::new(qb_row.clone(), qb_row))?; let [q_in] = h.input_wires_arr(); @@ -668,7 +665,7 @@ mod test { let free = h.add_dataflow_op(Tk2Op::QFree, [q_in])?; - let circ: Circuit = h.finish_hugr_with_outputs([q_new], ®ISTRY)?.into(); + let circ: Circuit = h.finish_hugr_with_outputs([q_new])?.into(); let mut cmds = circ.commands(); @@ -711,11 +708,11 @@ mod test { /// Test the manual trait implementations of `Command`. #[test] fn test_impls() -> Result<(), Box> { - let qb_row = vec![QB_T; 1]; + let qb_row = vec![qb_t(); 1]; let mut h = DFGBuilder::new(Signature::new(qb_row.clone(), vec![]))?; let [q_in] = h.input_wires_arr(); h.add_dataflow_op(Tk2Op::QFree, [q_in])?; - let circ: Circuit = h.finish_hugr_with_outputs([], ®ISTRY)?.into(); + let circ: Circuit = h.finish_hugr_with_outputs([])?.into(); let cmd1 = circ.commands().next().unwrap(); let cmd2 = circ.commands().next().unwrap(); diff --git a/tket2/src/circuit/extract_dfg.rs b/tket2/src/circuit/extract_dfg.rs index ce2cf0a9..18b6fb50 100644 --- a/tket2/src/circuit/extract_dfg.rs +++ b/tket2/src/circuit/extract_dfg.rs @@ -18,7 +18,7 @@ pub(super) fn rewrite_into_dfg(circ: &mut Circuit) -> Result<(), CircuitMutError } // If the region was a cfg with a single successor, unpack the output sum type. - let signature = circ.circuit_signature(); + let signature = circ.circuit_signature().into_owned(); let signature = match old_optype { OpType::DataflowBlock(_) => remove_cfg_empty_output_tuple(circ, signature)?, _ => signature, diff --git a/tket2/src/circuit/units.rs b/tket2/src/circuit/units.rs index 173186f5..cc6dd429 100644 --- a/tket2/src/circuit/units.rs +++ b/tket2/src/circuit/units.rs @@ -153,7 +153,7 @@ where fn init_types(circuit: &Circuit, node: Node, direction: Direction) -> TypeRow { let hugr = circuit.hugr(); let optype = hugr.get_optype(node); - let sig = hugr.signature(node).unwrap_or_default(); + let sig = hugr.signature(node).unwrap_or_default().into_owned(); let mut types = match direction { Direction::Outgoing => sig.output, Direction::Incoming => sig.input, diff --git a/tket2/src/circuit/units/filter.rs b/tket2/src/circuit/units/filter.rs index 4442d49a..d0dfed4a 100644 --- a/tket2/src/circuit/units/filter.rs +++ b/tket2/src/circuit/units/filter.rs @@ -23,7 +23,7 @@ pub fn filter_linear

(item: (CircuitUnit, P, Type)) -> Option<(LinearUnit, P, /// A unit filter that return only qubits, a subset of [`filter_linear`]. pub fn filter_qubit

(item: (CircuitUnit, P, Type)) -> Option<(LinearUnit, P, Type)> { match item { - (CircuitUnit::Linear(unit), port, typ) if typ == prelude::QB_T => { + (CircuitUnit::Linear(unit), port, typ) if typ == prelude::qb_t() => { Some((LinearUnit::new(unit), port, typ)) } _ => None, diff --git a/tket2/src/extension.rs b/tket2/src/extension.rs index 5831ad3e..d8923455 100644 --- a/tket2/src/extension.rs +++ b/tket2/src/extension.rs @@ -54,12 +54,12 @@ pub static ref TKET1_EXTENSION: Arc = { }; /// Extension registry including the prelude, std, TKET1, and Tk2Ops extensions. -pub static ref REGISTRY: ExtensionRegistry = ExtensionRegistry::try_new( - STD_REG.iter().map(|(_, e)| e.to_owned()).chain([ +pub(crate) static ref REGISTRY: ExtensionRegistry = ExtensionRegistry::new( + STD_REG.iter().map(|e| e.to_owned()).chain([ TKET1_EXTENSION.to_owned(), TKET2_EXTENSION.to_owned(), rotation::ROTATION_EXTENSION.to_owned() -])).unwrap(); +])); } @@ -70,7 +70,6 @@ impl CustomSignatureFunc for Tk1Signature { &'a self, arg_values: &[TypeArg], _def: &'o hugr::extension::OpDef, - _extension_registry: &ExtensionRegistry, ) -> Result { let [TypeArg::String { arg }] = arg_values else { // This should have already been checked. diff --git a/tket2/src/extension/rotation.rs b/tket2/src/extension/rotation.rs index 4d8cc91a..6728e7ea 100644 --- a/tket2/src/extension/rotation.rs +++ b/tket2/src/extension/rotation.rs @@ -2,8 +2,8 @@ use hugr::builder::{BuildError, Dataflow}; use hugr::extension::simple_op::{MakeOpDef, MakeRegisteredOp}; use hugr::extension::{prelude::option_type, ExtensionId, ExtensionSet, Version}; use hugr::ops::constant::{downcast_equal_consts, CustomConst, TryHash}; -use hugr::std_extensions::arithmetic::float_types::FLOAT64_TYPE; -use hugr::{type_row, Wire}; +use hugr::std_extensions::arithmetic::float_types::float64_type; +use hugr::Wire; use hugr::{ types::{ConstTypeError, CustomType, Signature, Type, TypeBound}, Extension, @@ -33,11 +33,20 @@ lazy_static! { /// Identifier for the rotation type. const ROTATION_TYPE_ID: SmolStr = SmolStr::new_inline("rotation"); /// Rotation type (as [CustomType]) -pub const ROTATION_CUSTOM_TYPE: CustomType = - CustomType::new_simple(ROTATION_TYPE_ID, ROTATION_EXTENSION_ID, TypeBound::Copyable); +pub fn rotation_custom_type(extension_ref: &Weak) -> CustomType { + CustomType::new( + ROTATION_TYPE_ID, + [], + ROTATION_EXTENSION_ID, + TypeBound::Copyable, + extension_ref, + ) +} /// Type representing a rotation that is a number of half turns (as [Type]) -pub const ROTATION_TYPE: Type = Type::new_extension(ROTATION_CUSTOM_TYPE); +pub fn rotation_type() -> Type { + rotation_custom_type(&Arc::downgrade(&ROTATION_EXTENSION)).into() +} /// A rotation #[derive(Clone, Debug, PartialEq, serde::Serialize, serde::Deserialize)] @@ -96,14 +105,14 @@ impl CustomConst for ConstRotation { } fn get_type(&self) -> Type { - ROTATION_TYPE + rotation_type() } fn equal_consts(&self, other: &dyn CustomConst) -> bool { downcast_equal_consts(self, other) } fn extension_reqs(&self) -> ExtensionSet { - ExtensionSet::singleton(&ROTATION_EXTENSION_ID) + ExtensionSet::singleton(ROTATION_EXTENSION_ID) } } @@ -135,21 +144,20 @@ impl MakeOpDef for RotationOp { hugr::extension::simple_op::try_from_name(op_def.name(), op_def.extension_id()) } - fn signature(&self) -> hugr::extension::SignatureFunc { + fn init_signature(&self, extension_ref: &Weak) -> hugr::extension::SignatureFunc { + let rotation_type = Type::new_extension(rotation_custom_type(extension_ref)); match self { RotationOp::from_halfturns => Signature::new( - type_row![FLOAT64_TYPE], - Type::from(option_type(type_row![ROTATION_TYPE])), + float64_type(), + Type::from(option_type(rotation_type.clone())), ), RotationOp::from_halfturns_unchecked => { - Signature::new(type_row![FLOAT64_TYPE], type_row![ROTATION_TYPE]) - } - RotationOp::to_halfturns => { - Signature::new(type_row![ROTATION_TYPE], type_row![FLOAT64_TYPE]) + Signature::new(float64_type(), rotation_type.clone()) } + RotationOp::to_halfturns => Signature::new(rotation_type.clone(), float64_type()), RotationOp::radd => Signature::new( - type_row![ROTATION_TYPE, ROTATION_TYPE], - type_row![ROTATION_TYPE], + vec![rotation_type.clone(), rotation_type.clone()], + rotation_type, ), } .into() @@ -175,6 +183,10 @@ impl MakeOpDef for RotationOp { ROTATION_EXTENSION_ID } + fn extension_ref(&self) -> Weak { + Arc::downgrade(&ROTATION_EXTENSION) + } + // TODO constant folding // https://github.com/CQCL/tket2/issues/405 } @@ -184,8 +196,8 @@ impl MakeRegisteredOp for RotationOp { ROTATION_EXTENSION_ID } - fn registry<'s, 'r: 's>(&'s self) -> &'r hugr::extension::ExtensionRegistry { - &super::REGISTRY + fn extension_ref(&self) -> Weak { + Arc::downgrade(&ROTATION_EXTENSION) } } @@ -238,8 +250,6 @@ mod test { }; use strum::IntoEnumIterator; - use crate::extension::REGISTRY; - use super::*; #[test] @@ -251,7 +261,7 @@ mod test { assert_ne!(const_57, const_256); assert_eq!(const_57, ConstRotation::new(5.7).unwrap()); - assert_eq!(const_57.get_type(), ROTATION_TYPE); + assert_eq!(const_57.get_type(), rotation_type()); assert!(matches!( ConstRotation::new(f64::INFINITY), Err(ConstTypeError::CustomCheckFail(_)) @@ -281,8 +291,8 @@ mod test { #[test] fn test_builder() { let mut builder = DFGBuilder::new(Signature::new( - ROTATION_TYPE, - vec![Type::from(option_type(ROTATION_TYPE)), ROTATION_TYPE], + rotation_type(), + vec![Type::from(option_type(rotation_type())), rotation_type()], )) .unwrap(); @@ -291,7 +301,7 @@ mod test { let mb_rotation = builder.add_from_halfturns(turns).unwrap(); let unwrapped_rotation = builder.add_from_halfturns_unchecked(turns).unwrap(); let _hugr = builder - .finish_hugr_with_outputs([mb_rotation, unwrapped_rotation], ®ISTRY) + .finish_hugr_with_outputs([mb_rotation, unwrapped_rotation]) .unwrap(); } diff --git a/tket2/src/extension/sympy.rs b/tket2/src/extension/sympy.rs index c737035b..48c86331 100644 --- a/tket2/src/extension/sympy.rs +++ b/tket2/src/extension/sympy.rs @@ -3,22 +3,23 @@ //! Part of the TKET2 extension. use std::str::FromStr; +use std::sync::{Arc, Weak}; use hugr::extension::simple_op::{ try_from_name, HasConcrete, HasDef, MakeExtensionOp, MakeOpDef, MakeRegisteredOp, OpLoadError, }; -use hugr::extension::{ExtensionId, ExtensionRegistry, SignatureError}; +use hugr::extension::{ExtensionId, SignatureError, SignatureFunc}; use hugr::ops::{ExtensionOp, NamedOp, OpName}; -use hugr::type_row; use hugr::types::type_param::TypeParam; use hugr::types::{CustomType, PolyFuncType, Signature, TypeArg}; +use hugr::{type_row, Extension}; use lazy_static::lazy_static; use smol_str::SmolStr; use crate::extension::TKET2_EXTENSION; -use super::rotation::ROTATION_TYPE; -use super::{REGISTRY, TKET2_EXTENSION_ID}; +use super::rotation::rotation_type; +use super::TKET2_EXTENSION_ID; /// The name of the symbolic expression opaque type arg. pub const SYM_EXPR_NAME: SmolStr = SmolStr::new_inline("SymExpr"); @@ -67,10 +68,10 @@ impl MakeOpDef for SympyOpDef { try_from_name(op_def.name(), op_def.extension_id()) } - fn signature(&self) -> hugr::extension::SignatureFunc { + fn init_signature(&self, _extension_ref: &Weak) -> SignatureFunc { PolyFuncType::new( vec![TypeParam::String], - Signature::new(type_row![], type_row![ROTATION_TYPE]), + Signature::new(type_row![], vec![rotation_type()]), ) .into() } @@ -82,6 +83,10 @@ impl MakeOpDef for SympyOpDef { fn extension(&self) -> hugr::extension::ExtensionId { TKET2_EXTENSION_ID } + + fn extension_ref(&self) -> Weak { + Arc::downgrade(&TKET2_EXTENSION) + } } /// A concrete operation hardcoding a Sympy expression in its parameter. @@ -115,8 +120,8 @@ impl MakeRegisteredOp for SympyOp { TKET2_EXTENSION_ID.to_owned() } - fn registry<'s, 'r: 's>(&'s self) -> &'r ExtensionRegistry { - ®ISTRY + fn extension_ref(&self) -> Weak { + Arc::downgrade(&TKET2_EXTENSION) } } diff --git a/tket2/src/ops.rs b/tket2/src/ops.rs index c7da5fc1..9f68e619 100644 --- a/tket2/src/ops.rs +++ b/tket2/src/ops.rs @@ -1,12 +1,14 @@ -use crate::extension::rotation::ROTATION_TYPE; +use std::sync::{Arc, Weak}; + +use crate::extension::rotation::rotation_type; use crate::extension::sympy::{SympyOpDef, SYM_OP_ID}; -use crate::extension::TKET2_EXTENSION_ID as EXTENSION_ID; +use crate::extension::{TKET2_EXTENSION, TKET2_EXTENSION_ID as EXTENSION_ID}; use hugr::ops::custom::ExtensionOp; use hugr::ops::NamedOp; use hugr::types::Type; use hugr::{ extension::{ - prelude::{option_type, BOOL_T, QB_T}, + prelude::{bool_t, option_type, qb_t}, simple_op::{try_from_name, MakeOpDef, MakeRegisteredOp}, ExtensionId, OpDef, SignatureFunc, }, @@ -19,8 +21,6 @@ use derive_more::{Display, Error}; use serde::{Deserialize, Serialize}; use strum_macros::{EnumIter, EnumString, IntoStaticStr}; -use crate::extension::REGISTRY; - #[derive( Clone, Copy, @@ -108,20 +108,19 @@ impl Pauli { } } impl MakeOpDef for Tk2Op { - fn signature(&self) -> SignatureFunc { + fn init_signature(&self, _extension_ref: &std::sync::Weak) -> SignatureFunc { use Tk2Op::*; - let one_qb_row = type_row![QB_T]; match self { - H | T | S | X | Y | Z | Tdg | Sdg | Reset => Signature::new_endo(one_qb_row), - CX | CZ | CY => Signature::new_endo(type_row![QB_T; 2]), - Toffoli => Signature::new_endo(type_row![QB_T; 3]), - Measure => Signature::new(one_qb_row, type_row![QB_T, BOOL_T]), - MeasureFree => Signature::new(one_qb_row, type_row![BOOL_T]), - Rz | Rx | Ry => Signature::new(type_row![QB_T, ROTATION_TYPE], one_qb_row), - CRz => Signature::new(type_row![QB_T, QB_T, ROTATION_TYPE], type_row![QB_T; 2]), - QAlloc => Signature::new(type_row![], one_qb_row), - TryQAlloc => Signature::new(type_row![], Type::from(option_type(one_qb_row))), - QFree => Signature::new(one_qb_row, type_row![]), + H | T | S | X | Y | Z | Tdg | Sdg | Reset => Signature::new_endo(qb_t()), + CX | CZ | CY => Signature::new_endo(vec![qb_t(); 2]), + Toffoli => Signature::new_endo(vec![qb_t(); 3]), + Measure => Signature::new(qb_t(), vec![qb_t(), bool_t()]), + MeasureFree => Signature::new(qb_t(), bool_t()), + Rz | Rx | Ry => Signature::new(vec![qb_t(), rotation_type()], qb_t()), + CRz => Signature::new(vec![qb_t(), qb_t(), rotation_type()], vec![qb_t(); 2]), + QAlloc => Signature::new(type_row![], qb_t()), + TryQAlloc => Signature::new(type_row![], Type::from(option_type(qb_t()))), + QFree => Signature::new(qb_t(), type_row![]), } .into() } @@ -140,6 +139,10 @@ impl MakeOpDef for Tk2Op { fn from_def(op_def: &OpDef) -> Result { try_from_name(op_def.name(), op_def.extension_id()) } + + fn extension_ref(&self) -> Weak { + Arc::downgrade(&TKET2_EXTENSION) + } } impl MakeRegisteredOp for Tk2Op { @@ -147,8 +150,8 @@ impl MakeRegisteredOp for Tk2Op { EXTENSION_ID.to_owned() } - fn registry<'s, 'r: 's>(&'s self) -> &'r hugr::extension::ExtensionRegistry { - ®ISTRY + fn extension_ref(&self) -> Weak { + Arc::::downgrade(&TKET2_EXTENSION) } } @@ -212,7 +215,7 @@ pub(crate) mod test { use std::sync::Arc; use hugr::builder::{DFGBuilder, Dataflow, DataflowHugr}; - use hugr::extension::prelude::{option_type, BOOL_T, QB_T}; + use hugr::extension::prelude::{bool_t, option_type, qb_t}; use hugr::extension::simple_op::MakeOpDef; use hugr::extension::{prelude::UnwrapBuilder as _, OpDef}; use hugr::ops::NamedOp; @@ -224,9 +227,7 @@ pub(crate) mod test { use super::Tk2Op; use crate::circuit::Circuit; - use crate::extension::{ - REGISTRY, TKET2_EXTENSION as EXTENSION, TKET2_EXTENSION_ID as EXTENSION_ID, - }; + use crate::extension::{TKET2_EXTENSION as EXTENSION, TKET2_EXTENSION_ID as EXTENSION_ID}; use crate::utils::build_simple_circuit; use crate::Pauli; fn get_opdef(op: impl NamedOp) -> Option<&'static Arc> { @@ -281,17 +282,15 @@ pub(crate) mod test { #[test] fn try_qalloc_measure_free() { - let mut b = DFGBuilder::new(Signature::new(type_row![], BOOL_T)).unwrap(); + let mut b = DFGBuilder::new(Signature::new(type_row![], bool_t())).unwrap(); let try_q = b.add_dataflow_op(Tk2Op::TryQAlloc, []).unwrap().out_wire(0); - let [q] = b - .build_unwrap_sum(®ISTRY, 1, option_type(QB_T), try_q) - .unwrap(); + let [q] = b.build_unwrap_sum(1, option_type(qb_t()), try_q).unwrap(); let measured = b .add_dataflow_op(Tk2Op::MeasureFree, [q]) .unwrap() .out_wire(0); - let h = b.finish_hugr_with_outputs([measured], ®ISTRY).unwrap(); + let h = b.finish_hugr_with_outputs([measured]).unwrap(); let top_ops = h.children(h.root()).map(|n| h.get_optype(n)).collect_vec(); diff --git a/tket2/src/optimiser/badger.rs b/tket2/src/optimiser/badger.rs index aadf52d8..d68af22b 100644 --- a/tket2/src/optimiser/badger.rs +++ b/tket2/src/optimiser/badger.rs @@ -560,21 +560,21 @@ use self::hugr_pchannel::Work; mod tests { use hugr::{ builder::{DFGBuilder, Dataflow, DataflowHugr}, - extension::prelude::QB_T, + extension::prelude::qb_t, types::Signature, }; use rstest::{fixture, rstest}; use crate::serialize::load_tk1_json_str; - use crate::{extension::rotation::ROTATION_TYPE, optimiser::badger::BadgerOptions}; - use crate::{extension::REGISTRY, Circuit, Tk2Op}; + use crate::{extension::rotation::rotation_type, optimiser::badger::BadgerOptions}; + use crate::{Circuit, Tk2Op}; use super::{BadgerOptimiser, DefaultBadgerOptimiser}; #[fixture] fn rz_rz() -> Circuit { - let input_t = vec![QB_T, ROTATION_TYPE, ROTATION_TYPE]; - let output_t = vec![QB_T]; + let input_t = vec![qb_t(), rotation_type(), rotation_type()]; + let output_t = vec![qb_t()]; let mut h = DFGBuilder::new(Signature::new(input_t, output_t)).unwrap(); let mut inps = h.input_wires(); @@ -587,7 +587,7 @@ mod tests { let res = h.add_dataflow_op(Tk2Op::Rz, [qb, f2]).unwrap(); let qb = res.outputs().next().unwrap(); - h.finish_hugr_with_outputs([qb], ®ISTRY).unwrap().into() + h.finish_hugr_with_outputs([qb]).unwrap().into() } /// This hugr corresponds to the qasm circuit: @@ -666,7 +666,7 @@ mod tests { #[case::compiled(badger_opt_compiled())] #[case::json(badger_opt_json())] fn rz_rz_cancellation_parallel(rz_rz: Circuit, #[case] badger_opt: DefaultBadgerOptimiser) { - let mut opt_rz = badger_opt.optimise( + let opt_rz = badger_opt.optimise( &rz_rz, BadgerOptions { timeout: Some(0), @@ -675,7 +675,7 @@ mod tests { ..Default::default() }, ); - opt_rz.hugr_mut().update_validate(®ISTRY).unwrap(); + opt_rz.hugr().validate().unwrap(); } #[rstest] @@ -685,7 +685,7 @@ mod tests { rz_rz: Circuit, #[case] badger_opt: DefaultBadgerOptimiser, ) { - let mut opt_rz = badger_opt.optimise( + let opt_rz = badger_opt.optimise( &rz_rz, BadgerOptions { timeout: Some(0), @@ -695,7 +695,7 @@ mod tests { ..Default::default() }, ); - opt_rz.hugr_mut().update_validate(®ISTRY).unwrap(); + opt_rz.hugr().validate().unwrap(); assert_eq!(opt_rz.commands().count(), 2); } @@ -705,7 +705,7 @@ mod tests { non_composable_rw_hugr: Circuit, badger_opt_full: DefaultBadgerOptimiser, ) { - let mut opt = badger_opt_full.optimise( + let opt = badger_opt_full.optimise( &non_composable_rw_hugr, BadgerOptions { timeout: Some(0), @@ -714,7 +714,7 @@ mod tests { }, ); // No rewrites applied. - opt.hugr_mut().update_validate(®ISTRY).unwrap(); + opt.hugr().validate().unwrap(); } #[test] diff --git a/tket2/src/optimiser/badger/qtz_circuit.rs b/tket2/src/optimiser/badger/qtz_circuit.rs index 00d85f1b..8ca5e61b 100644 --- a/tket2/src/optimiser/badger/qtz_circuit.rs +++ b/tket2/src/optimiser/badger/qtz_circuit.rs @@ -3,14 +3,14 @@ use std::io; use std::path::Path; use hugr::builder::{DFGBuilder, Dataflow, DataflowHugr}; -use hugr::extension::prelude::QB_T; +use hugr::extension::prelude::qb_t; use hugr::ops::OpType as Op; use hugr::types::{Signature, Type}; use hugr::{CircuitUnit, Hugr}; use itertools::Itertools; use serde::{Deserialize, Serialize}; -use crate::extension::rotation::{RotationOp, ROTATION_TYPE}; +use crate::extension::rotation::{rotation_type, RotationOp}; use crate::{Circuit, Tk2Op}; #[derive(Debug, Serialize, Deserialize)] @@ -63,8 +63,8 @@ fn map_op(opstr: &str) -> Op { // TODO change to TryFrom impl From for Circuit { fn from(RepCircData { circ: rc, meta }: RepCircData) -> Self { - let qb_types: Vec = vec![QB_T; meta.n_qb]; - let param_types: Vec = vec![ROTATION_TYPE; meta.n_input_param]; + let qb_types: Vec = vec![qb_t(); meta.n_qb]; + let param_types: Vec = vec![rotation_type(); meta.n_input_param]; let mut builder = DFGBuilder::new(Signature::new( [qb_types.clone(), param_types].concat(), qb_types, @@ -106,7 +106,7 @@ impl From for Circuit { let circ_outputs = circ.finish(); builder - .finish_hugr_with_outputs(circ_outputs, &crate::extension::REGISTRY) + .finish_hugr_with_outputs(circ_outputs) .unwrap() .into() } diff --git a/tket2/src/passes/chunks.rs b/tket2/src/passes/chunks.rs index 75b6d74e..5a4811ef 100644 --- a/tket2/src/passes/chunks.rs +++ b/tket2/src/passes/chunks.rs @@ -293,7 +293,7 @@ impl CircuitChunks { chunks.push(Chunk::extract(circ, commands, &convex_checker)); } Self { - signature, + signature: signature.into_owned(), root_meta, input_connections, output_connections, @@ -488,7 +488,7 @@ impl<'data> IntoParallelRefMutIterator<'data> for CircuitChunks { #[cfg(test)] mod test { use crate::circuit::CircuitHash; - use crate::extension::REGISTRY; + use crate::utils::build_simple_circuit; use crate::Tk2Op; @@ -514,7 +514,7 @@ mod test { let mut reassembled = chunks.reassemble().unwrap(); - reassembled.hugr_mut().update_validate(®ISTRY).unwrap(); + reassembled.hugr_mut().validate().unwrap(); assert_eq!(circ.circuit_hash(), reassembled.circuit_hash()); } @@ -544,7 +544,7 @@ mod test { let mut reassembled = chunks.reassemble().unwrap(); - reassembled.hugr_mut().update_validate(®ISTRY).unwrap(); + reassembled.hugr_mut().validate().unwrap(); assert_eq!(reassembled.commands().count(), 1); let h = reassembled.commands().next().unwrap().node(); diff --git a/tket2/src/passes/commutation.rs b/tket2/src/passes/commutation.rs index fc167023..60499cd6 100644 --- a/tket2/src/passes/commutation.rs +++ b/tket2/src/passes/commutation.rs @@ -327,14 +327,11 @@ pub fn apply_greedy_commutation(circ: &mut Circuit) -> Result Circuit { let build = || { let mut dfg = DFGBuilder::new(Signature::new( - type_row![QB_T, QB_T, ROTATION_TYPE], - type_row![QB_T, QB_T], + vec![qb_t(), qb_t(), rotation_type()], + vec![qb_t(), qb_t()], ))?; let [q0, q1, f] = dfg.input_wires_arr(); @@ -451,7 +448,7 @@ mod test { circ.append(Tk2Op::CX, [0, 1])?; circ.append_and_consume(Tk2Op::Rz, [CircuitUnit::Linear(0), CircuitUnit::Wire(f)])?; let qbs = circ.finish(); - dfg.finish_hugr_with_outputs(qbs, ®ISTRY) + dfg.finish_hugr_with_outputs(qbs) }; build().unwrap().into() } @@ -461,8 +458,8 @@ mod test { fn non_linear_outputs() -> Circuit { let build = || { let mut dfg = DFGBuilder::new(Signature::new( - type_row![QB_T, QB_T], - type_row![QB_T, QB_T, BOOL_T], + vec![qb_t(), qb_t()], + vec![qb_t(), qb_t(), bool_t()], ))?; let [q0, q1] = dfg.input_wires_arr(); @@ -474,7 +471,7 @@ mod test { let measured = circ.append_with_outputs(Tk2Op::Measure, [0])?; let mut outs = circ.finish(); outs.extend(measured); - dfg.finish_hugr_with_outputs(outs, ®ISTRY) + dfg.finish_hugr_with_outputs(outs) }; build().unwrap().into() } @@ -603,7 +600,7 @@ mod test { let node_count = case.hugr().node_count(); let depth_before = depth(&case); let move_count = apply_greedy_commutation(&mut case).unwrap(); - case.hugr_mut().update_validate(®ISTRY).unwrap(); + case.hugr_mut().validate().unwrap(); assert_eq!( move_count, expected_moves, diff --git a/tket2/src/passes/pytket.rs b/tket2/src/passes/pytket.rs index bd012692..1f215efa 100644 --- a/tket2/src/passes/pytket.rs +++ b/tket2/src/passes/pytket.rs @@ -44,19 +44,19 @@ pub enum PytketLoweringError { #[cfg(test)] mod test { - use crate::extension::REGISTRY; + use crate::Tk2Op; use super::*; use hugr::builder::{ Container, Dataflow, DataflowSubContainer, HugrBuilder, ModuleBuilder, SubContainer, }; - use hugr::extension::prelude::{MakeTuple, UnpackTuple, QB_T}; - use hugr::extension::PRELUDE_REGISTRY; + use hugr::extension::prelude::{qb_t, MakeTuple, UnpackTuple}; + use hugr::ops::handle::NodeHandle; use hugr::ops::{OpType, Tag}; use hugr::types::{Signature, TypeRow}; - use hugr::{type_row, HugrView}; + use hugr::HugrView; use rstest::{fixture, rstest}; /// Builds a circuit in the style of guppy's output. @@ -67,7 +67,7 @@ mod test { #[fixture] fn guppy_like_circuit() -> Circuit { fn build() -> Result { - let two_qbs = type_row![QB_T, QB_T]; + let two_qbs = TypeRow::from(vec![qb_t(), qb_t()]); let circ_signature = Signature::new_endo(two_qbs.clone()); let circ; @@ -77,7 +77,8 @@ mod test { let [q1, q2] = func.input_wires_arr(); let cfg = { - let mut cfg = func.cfg_builder([(QB_T, q1), (QB_T, q2)], two_qbs.clone())?; + let mut cfg = + func.cfg_builder([(qb_t(), q1), (qb_t(), q2)], two_qbs.clone())?; circ = { let mut dfg = cfg.simple_entry_builder(two_qbs.clone(), 1)?; @@ -109,7 +110,7 @@ mod test { func.finish_with_outputs([q1, q2])? }; - let hugr = builder.finish_hugr(&PRELUDE_REGISTRY)?; + let hugr = builder.finish_hugr()?; Ok(Circuit::new(hugr, circ.node())) } build().unwrap() @@ -121,7 +122,7 @@ mod test { use cool_asserts::assert_matches; let lowered_circ = lower_to_pytket(&circ).unwrap(); - lowered_circ.hugr().validate(®ISTRY).unwrap(); + lowered_circ.hugr().validate().unwrap(); assert_eq!(lowered_circ.parent(), lowered_circ.hugr().root()); assert_matches!( diff --git a/tket2/src/passes/tuple_unpack.rs b/tket2/src/passes/tuple_unpack.rs index dabeff6c..1dc687cd 100644 --- a/tket2/src/passes/tuple_unpack.rs +++ b/tket2/src/passes/tuple_unpack.rs @@ -134,7 +134,7 @@ fn remove_pack_unpack( } let replacement = replacement - .finish_prelude_hugr_with_outputs(outputs) + .finish_hugr_with_outputs(outputs) .unwrap_or_else(|e| { panic!("Failed to create replacement for removing tuple pack/unpack operations. {e}") }) @@ -150,8 +150,8 @@ fn remove_pack_unpack( #[cfg(test)] mod test { use super::*; - use hugr::extension::prelude::{UnpackTuple, BOOL_T, QB_T}; - use hugr::type_row; + use hugr::extension::prelude::{bool_t, qb_t, UnpackTuple}; + use hugr::types::Signature; use rstest::{fixture, rstest}; @@ -160,20 +160,17 @@ mod test { /// These can be removed entirely. #[fixture] fn simple_pack_unpack() -> Circuit { - let mut h = DFGBuilder::new(Signature::new_endo(type_row![QB_T, BOOL_T])).unwrap(); + let mut h = DFGBuilder::new(Signature::new_endo(vec![qb_t(), bool_t()])).unwrap(); let mut inps = h.input_wires(); let qb1 = inps.next().unwrap(); let b2 = inps.next().unwrap(); - let op = MakeTuple::new(type_row![QB_T, BOOL_T]); - let [tuple] = h.add_dataflow_op(op, [qb1, b2]).unwrap().outputs_arr(); + let tuple = h.make_tuple([qb1, b2]).unwrap(); - let op = UnpackTuple::new(type_row![QB_T, BOOL_T]); + let op = UnpackTuple::new(vec![qb_t(), bool_t()].into()); let [qb1, b2] = h.add_dataflow_op(op, [tuple]).unwrap().outputs_arr(); - h.finish_prelude_hugr_with_outputs([qb1, b2]) - .unwrap() - .into() + h.finish_hugr_with_outputs([qb1, b2]).unwrap().into() } /// A pack operation followed by two unpack operations from the same tuple. @@ -182,26 +179,23 @@ mod test { #[fixture] fn multi_unpack() -> Circuit { let mut h = DFGBuilder::new(Signature::new( - type_row![BOOL_T, BOOL_T], - type_row![BOOL_T, BOOL_T, BOOL_T, BOOL_T], + vec![bool_t(), bool_t()], + vec![bool_t(), bool_t(), bool_t(), bool_t()], )) .unwrap(); let mut inps = h.input_wires(); let b1 = inps.next().unwrap(); let b2 = inps.next().unwrap(); - let op = MakeTuple::new(type_row![BOOL_T, BOOL_T]); - let [tuple] = h.add_dataflow_op(op, [b1, b2]).unwrap().outputs_arr(); + let tuple = h.make_tuple([b1, b2]).unwrap(); - let op = UnpackTuple::new(type_row![BOOL_T, BOOL_T]); + let op = UnpackTuple::new(vec![bool_t(), bool_t()].into()); let [b1, b2] = h.add_dataflow_op(op, [tuple]).unwrap().outputs_arr(); - let op = UnpackTuple::new(type_row![BOOL_T, BOOL_T]); + let op = UnpackTuple::new(vec![bool_t(), bool_t()].into()); let [b3, b4] = h.add_dataflow_op(op, [tuple]).unwrap().outputs_arr(); - h.finish_prelude_hugr_with_outputs([b1, b2, b3, b4]) - .unwrap() - .into() + h.finish_hugr_with_outputs([b1, b2, b3, b4]).unwrap().into() } /// A pack operation followed by an unpack operation, where the tuple is also returned. @@ -210,23 +204,24 @@ mod test { #[fixture] fn partial_unpack() -> Circuit { let mut h = DFGBuilder::new(Signature::new( - type_row![BOOL_T, BOOL_T], - vec![BOOL_T, BOOL_T, Type::new_tuple(type_row![BOOL_T, BOOL_T])], + vec![bool_t(), bool_t()], + vec![ + bool_t(), + bool_t(), + Type::new_tuple(vec![bool_t(), bool_t()]), + ], )) .unwrap(); let mut inps = h.input_wires(); let b1 = inps.next().unwrap(); let b2 = inps.next().unwrap(); - let op = MakeTuple::new(type_row![BOOL_T, BOOL_T]); - let [tuple] = h.add_dataflow_op(op, [b1, b2]).unwrap().outputs_arr(); + let tuple = h.make_tuple([b1, b2]).unwrap(); - let op = UnpackTuple::new(type_row![BOOL_T, BOOL_T]); + let op = UnpackTuple::new(vec![bool_t(), bool_t()].into()); let [b1, b2] = h.add_dataflow_op(op, [tuple]).unwrap().outputs_arr(); - h.finish_prelude_hugr_with_outputs([b1, b2, tuple]) - .unwrap() - .into() + h.finish_hugr_with_outputs([b1, b2, tuple]).unwrap().into() } #[rstest] diff --git a/tket2/src/portmatching.rs b/tket2/src/portmatching.rs index ff6f1878..35940f28 100644 --- a/tket2/src/portmatching.rs +++ b/tket2/src/portmatching.rs @@ -8,16 +8,16 @@ //! use tket2::portmatching::{CircuitPattern, PatternMatcher}; //! use tket2::Tk2Op; //! use hugr::builder::{DFGBuilder, Dataflow, DataflowHugr}; -//! use hugr::extension::prelude::QB_T; +//! use hugr::extension::prelude::qb_t; //! use hugr::ops::handle::NodeHandle; //! use hugr::types::Signature; //! //! # fn doctest() -> Result<(), Box> { //! // Define a simple pattern that matches a single qubit allocation. //! let circuit_pattern = { -//! let mut dfg = DFGBuilder::new(Signature::new(vec![], vec![QB_T]))?; +//! let mut dfg = DFGBuilder::new(Signature::new(vec![], vec![qb_t()]))?; //! let alloc = dfg.add_dataflow_op(Tk2Op::QAlloc, [])?; -//! dfg.finish_hugr_with_outputs(alloc.outputs(), &tket2::extension::REGISTRY) +//! dfg.finish_hugr_with_outputs(alloc.outputs()) //! }?.into(); //! let pattern = CircuitPattern::try_from_circuit(&circuit_pattern)?; //! @@ -27,7 +27,7 @@ //! // | //! // 0|--[Z]--o--- //! let (circuit, alloc_node) = { -//! let mut dfg = DFGBuilder::new(Signature::new(vec![QB_T], vec![QB_T, QB_T]))?; +//! let mut dfg = DFGBuilder::new(Signature::new(vec![qb_t()], vec![qb_t(), qb_t()]))?; //! let [input_wire] = dfg.input_wires_arr(); //! let alloc = dfg.add_dataflow_op(Tk2Op::QAlloc, [])?; //! let [alloc_wire] = alloc.outputs_arr(); @@ -39,7 +39,7 @@ //! .append(Tk2Op::CX, [1, 0])?; //! let outputs = circuit.finish(); //! -//! let circuit = dfg.finish_hugr_with_outputs(outputs, &tket2::extension::REGISTRY)?.into(); +//! let circuit = dfg.finish_hugr_with_outputs(outputs)?.into(); //! (circuit, alloc.node()) //! }; //! @@ -205,7 +205,7 @@ mod tests { use crate::{Circuit, Tk2Op}; use hugr::{ builder::{DFGBuilder, Dataflow, DataflowHugr}, - extension::{prelude::QB_T, PRELUDE_REGISTRY}, + extension::prelude::qb_t, types::Signature, }; use rstest::{fixture, rstest}; @@ -214,19 +214,17 @@ mod tests { #[fixture] fn lhs() -> Circuit { - let mut h = DFGBuilder::new(Signature::new(vec![], vec![QB_T])).unwrap(); + let mut h = DFGBuilder::new(Signature::new(vec![], vec![qb_t()])).unwrap(); let res = h.add_dataflow_op(Tk2Op::QAlloc, []).unwrap(); let q = res.out_wire(0); - h.finish_hugr_with_outputs([q], &PRELUDE_REGISTRY) - .unwrap() - .into() + h.finish_hugr_with_outputs([q]).unwrap().into() } #[fixture] pub fn circ() -> Circuit { - let mut h = DFGBuilder::new(Signature::new(vec![QB_T], vec![QB_T])).unwrap(); + let mut h = DFGBuilder::new(Signature::new(vec![qb_t()], vec![qb_t()])).unwrap(); let mut inps = h.input_wires(); let q_in = inps.next().unwrap(); @@ -237,9 +235,7 @@ mod tests { let q_out = res.out_wire(1); h.add_dataflow_op(Tk2Op::QFree, [q_in]).unwrap(); - h.finish_hugr_with_outputs([q_out], &PRELUDE_REGISTRY) - .unwrap() - .into() + h.finish_hugr_with_outputs([q_out]).unwrap().into() } #[rstest] diff --git a/tket2/src/portmatching/pattern.rs b/tket2/src/portmatching/pattern.rs index 75e7156c..ce20e07e 100644 --- a/tket2/src/portmatching/pattern.rs +++ b/tket2/src/portmatching/pattern.rs @@ -170,12 +170,12 @@ mod tests { use cool_asserts::assert_matches; use hugr::builder::{DFGBuilder, Dataflow, DataflowHugr}; - use hugr::extension::prelude::QB_T; + use hugr::extension::prelude::qb_t; use hugr::ops::OpType; use hugr::types::Signature; - use crate::extension::rotation::ROTATION_TYPE; - use crate::extension::REGISTRY; + use crate::extension::rotation::rotation_type; + use crate::utils::build_simple_circuit; use crate::Tk2Op; @@ -192,8 +192,8 @@ mod tests { /// A circuit with two rotation gates in sequence, sharing a param fn circ_with_copy() -> Circuit { - let input_t = vec![QB_T, ROTATION_TYPE]; - let output_t = vec![QB_T]; + let input_t = vec![qb_t(), rotation_type()]; + let output_t = vec![qb_t()]; let mut h = DFGBuilder::new(Signature::new(input_t, output_t)).unwrap(); let mut inps = h.input_wires(); @@ -205,13 +205,13 @@ mod tests { let res = h.add_dataflow_op(Tk2Op::Rx, [qb, f]).unwrap(); let qb = res.outputs().next().unwrap(); - h.finish_hugr_with_outputs([qb], ®ISTRY).unwrap().into() + h.finish_hugr_with_outputs([qb]).unwrap().into() } /// A circuit with two rotation gates in parallel, sharing a param fn circ_with_copy_disconnected() -> Circuit { - let input_t = vec![QB_T, QB_T, ROTATION_TYPE]; - let output_t = vec![QB_T, QB_T]; + let input_t = vec![qb_t(), qb_t(), rotation_type()]; + let output_t = vec![qb_t(), qb_t()]; let mut h = DFGBuilder::new(Signature::new(input_t, output_t)).unwrap(); let mut inps = h.input_wires(); @@ -224,9 +224,7 @@ mod tests { let res = h.add_dataflow_op(Tk2Op::Rx, [qb2, f]).unwrap(); let qb2 = res.outputs().next().unwrap(); - h.finish_hugr_with_outputs([qb1, qb2], ®ISTRY) - .unwrap() - .into() + h.finish_hugr_with_outputs([qb1, qb2]).unwrap().into() } #[test] diff --git a/tket2/src/rewrite/ecc_rewriter.rs b/tket2/src/rewrite/ecc_rewriter.rs index b602e83a..ccf63b04 100644 --- a/tket2/src/rewrite/ecc_rewriter.rs +++ b/tket2/src/rewrite/ecc_rewriter.rs @@ -13,7 +13,7 @@ //! of the Quartz repository. use derive_more::{Display, Error, From, Into}; -use hugr::ops::custom::{resolve_extension_ops, OpaqueOpError}; +use hugr::extension::resolution::ExtensionResolutionError; use hugr::{Hugr, HugrView, PortIndex}; use itertools::Itertools; use portmatching::PatternID; @@ -177,10 +177,10 @@ impl ECCRewriter { /// When the ECC gets loaded, all custom operations are an instance of `OpaqueOp`. /// We need to resolve them into `ExtensionOp`s by validating the definitions. - fn resolve_extension_ops(&mut self) -> Result<(), OpaqueOpError> { + fn resolve_extension_ops(&mut self) -> Result<(), ExtensionResolutionError> { self.targets .iter_mut() - .try_for_each(|hugr| resolve_extension_ops(hugr, ®ISTRY)) + .try_for_each(|hugr| hugr.resolve_extension_defs(®ISTRY)) } } @@ -216,9 +216,9 @@ pub enum RewriterSerialisationError { /// An error occurred during serialisation #[display("Serialisation error: {_0}")] Serialisation(rmp_serde::encode::Error), - /// An error occurred during resolving extension ops - #[display("Resolving extension ops error: {_0}")] - OpaqueOp(OpaqueOpError), + /// An error occurred while resolving the extension ops + /// in the deserialised rewrite set. + ExtensionResolutionError(ExtensionResolutionError), } fn into_targets(rep_sets: Vec) -> Vec { diff --git a/tket2/src/serialize.rs b/tket2/src/serialize.rs index 306d0b5f..e109f1e0 100644 --- a/tket2/src/serialize.rs +++ b/tket2/src/serialize.rs @@ -30,7 +30,7 @@ use crate::{Circuit, CircuitError}; #[allow(unused)] const METADATA_ENTRYPOINT: &str = "TKET2.entrypoint"; -impl> Circuit { +impl Circuit { /// Store the circuit as a HUGR in json format. /// /// # Errors @@ -40,7 +40,7 @@ impl> Circuit { // TODO: Store the path pointer on `METADATA_ENTRYPOINT`. // We may need mutable access to `T` to avoid cloning the HUGR to add the entry. pub fn to_hugr_writer(&self, writer: impl io::Write) -> Result<(), CircuitStoreError> { - let hugr = self.hugr().as_ref(); + let hugr = self.hugr(); if self.parent() != hugr.root() { return Err(CircuitStoreError::NonRootCircuit { @@ -48,7 +48,7 @@ impl> Circuit { }); } - Ok(serde_json::to_writer(writer, hugr)?) + Ok(serde_json::to_writer(writer, hugr.base_hugr())?) } /// Store the circuit as a package in json format. @@ -63,7 +63,7 @@ impl> Circuit { /// // TODO: Store the path pointer on `METADATA_ENTRYPOINT` instead. pub fn to_package_writer(&self, writer: impl io::Write) -> Result<(), CircuitStoreError> { - let hugr = self.hugr().as_ref(); + let hugr = self.hugr(); // Check if we support storing the circuit as a package. // @@ -78,8 +78,8 @@ impl> Circuit { }); } - let mut pkg = Package::from_hugr(hugr.clone())?; - pkg.extensions = self.required_extensions().to_owned(); + let mut pkg = Package::from_hugr(hugr.base_hugr().clone())?; + pkg.extensions = self.hugr().extensions().clone(); Ok(pkg.to_json_writer(writer)?) } @@ -97,17 +97,14 @@ impl Circuit { json: impl io::Read, function_name: impl AsRef, ) -> Result { - let mut pkg = Package::from_json_reader(json)?; - pkg.update_validate(&mut REGISTRY.clone())?; + let pkg = Package::from_json_reader(json, ®ISTRY)?; + pkg.validate()?; let Package { modules, - extensions, + extensions: _, } = pkg; - let (_module_idx, mut circ) = find_function_in_modules(modules, function_name.as_ref())?; - if !extensions.is_empty() { - circ.set_required_extensions(extensions); - } + let (_module_idx, circ) = find_function_in_modules(modules, function_name.as_ref())?; Ok(circ) } @@ -121,7 +118,9 @@ impl Circuit { /// - If the target circuit root is not a dataflow container. pub fn load_hugr_reader(json: impl io::Read) -> Result { let mut hugr: Hugr = serde_json::from_reader(json)?; - hugr.update_validate(®ISTRY.clone())?; + hugr.resolve_extension_defs(®ISTRY) + .map_err(PackageEncodingError::from)?; + hugr.validate()?; // TODO: Read the entrypoint from the metadata. let root = hugr.root(); Ok(Circuit::try_new(hugr, root)?) @@ -222,7 +221,7 @@ impl From for CircuitLoadError { fn from(e: PackageValidationError) -> Self { match e { PackageValidationError::Validation(e) => CircuitLoadError::ValidationError(e), - PackageValidationError::Extension(e) => CircuitLoadError::ExtensionError(e), + PackageValidationError::MissingExtension { .. } => panic!("lol"), _ => panic!("Unexpected package validation error: {e}"), } } @@ -314,9 +313,9 @@ mod tests { Container, DFGBuilder, Dataflow, DataflowHugr, DataflowSubContainer, HugrBuilder, ModuleBuilder, }; - use hugr::extension::prelude::QB_T; + use hugr::extension::prelude::qb_t; use hugr::ops::handle::NodeHandle; - use hugr::type_row; + use hugr::types::Signature; use itertools::Itertools; use rstest::{fixture, rstest}; @@ -324,12 +323,12 @@ mod tests { /// A circuit based on a DFG-rooted HUGR. #[fixture] fn root_circ() -> Circuit { - let mut h = DFGBuilder::new(Signature::new(vec![], vec![QB_T])).unwrap(); + let mut h = DFGBuilder::new(Signature::new(vec![], vec![qb_t()])).unwrap(); let res = h.add_dataflow_op(Tk2Op::QAlloc, []).unwrap(); let q = res.out_wire(0); - h.finish_hugr_with_outputs([q], ®ISTRY).unwrap().into() + h.finish_hugr_with_outputs([q]).unwrap().into() } #[fixture] @@ -337,13 +336,13 @@ mod tests { let mut h = ModuleBuilder::new(); let mut f = h - .define_function("banana", Signature::new(vec![], vec![QB_T])) + .define_function("banana", Signature::new(vec![], vec![qb_t()])) .unwrap(); let res = f.add_dataflow_op(Tk2Op::QAlloc, []).unwrap(); let q = res.out_wire(0); let func_node = f.finish_with_outputs([q]).unwrap().handle().node(); - Circuit::new(h.finish_hugr(®ISTRY).unwrap(), func_node) + Circuit::new(h.finish_hugr().unwrap(), func_node) } /// A circuit located inside a function in a module. @@ -352,11 +351,11 @@ mod tests { let mut h = ModuleBuilder::new(); let mut f = h - .define_function("banana", Signature::new(vec![], vec![QB_T])) + .define_function("banana", Signature::new(vec![], vec![qb_t()])) .unwrap(); let dfg = { let mut dfg = f - .dfg_builder(Signature::new(vec![], type_row![QB_T]), []) + .dfg_builder(Signature::new(vec![], vec![qb_t()]), []) .unwrap(); let res = dfg.add_dataflow_op(Tk2Op::QAlloc, []).unwrap(); let q = res.out_wire(0); @@ -367,14 +366,14 @@ mod tests { .handle() .node(); - Circuit::new(h.finish_hugr(®ISTRY).unwrap(), dfg.node()) + Circuit::new(h.finish_hugr().unwrap(), dfg.node()) } #[fixture] fn multi_module_pkg() -> Package { fn define(name: &str, h: &mut ModuleBuilder) -> Node { let f = h - .define_function(name, Signature::new(vec![QB_T], vec![QB_T])) + .define_function(name, Signature::new(vec![qb_t()], vec![qb_t()])) .unwrap(); let inputs = f.input_wires().collect_vec(); f.finish_with_outputs(inputs).unwrap().handle().node() @@ -383,15 +382,15 @@ mod tests { let mut mod1 = ModuleBuilder::new(); define("apple", &mut mod1); define("banana", &mut mod1); - let mod1 = mod1.finish_prelude_hugr().unwrap(); + let mod1 = mod1.finish_hugr().unwrap(); let mut mod2 = ModuleBuilder::new(); define("foo", &mut mod2); define("bar", &mut mod2); define("banana", &mut mod2); - let mod2 = mod2.finish_prelude_hugr().unwrap(); + let mod2 = mod2.finish_hugr().unwrap(); - Package::new([mod1, mod2], []).unwrap() + Package::new([mod1, mod2]).unwrap() } /// Test roundtrips of a circuit with a root parent. diff --git a/tket2/src/serialize/pytket/decoder.rs b/tket2/src/serialize/pytket/decoder.rs index f4e46f40..99f0342f 100644 --- a/tket2/src/serialize/pytket/decoder.rs +++ b/tket2/src/serialize/pytket/decoder.rs @@ -3,7 +3,7 @@ use std::collections::{HashMap, HashSet}; use hugr::builder::{Container, Dataflow, DataflowHugr, FunctionBuilder}; -use hugr::extension::prelude::{BOOL_T, QB_T}; +use hugr::extension::prelude::{bool_t, qb_t}; use hugr::ops::handle::NodeHandle; use hugr::ops::{OpType, Value}; @@ -26,8 +26,8 @@ use super::{ METADATA_B_REGISTERS, METADATA_OPGROUP, METADATA_PHASE, METADATA_Q_OUTPUT_REGISTERS, METADATA_Q_REGISTERS, }; -use crate::extension::rotation::{RotationOp, ROTATION_TYPE}; -use crate::extension::{REGISTRY, TKET1_EXTENSION_ID}; +use crate::extension::rotation::{rotation_type, RotationOp}; +use crate::extension::TKET1_EXTENSION_ID; use crate::serialize::pytket::METADATA_INPUT_PARAMETERS; use crate::symbolic_constant_op; @@ -53,8 +53,9 @@ impl Tk1Decoder { pub fn try_new(serialcirc: &SerialCircuit) -> Result { let num_qubits = serialcirc.qubits.len(); let num_bits = serialcirc.bits.len(); - let sig = Signature::new_endo([vec![QB_T; num_qubits], vec![BOOL_T; num_bits]].concat()) - .with_extension_delta(TKET1_EXTENSION_ID); + let sig = + Signature::new_endo([vec![qb_t(); num_qubits], vec![bool_t(); num_bits]].concat()) + .with_extension_delta(TKET1_EXTENSION_ID); let name = serialcirc.name.clone().unwrap_or_default(); let mut dfg = FunctionBuilder::new(name, sig).unwrap(); @@ -146,9 +147,7 @@ impl Tk1Decoder { .set_metadata(METADATA_INPUT_PARAMETERS, json!(params)); } - self.hugr - .finish_hugr_with_outputs(outputs, ®ISTRY) - .unwrap() + self.hugr.finish_hugr_with_outputs(outputs).unwrap() } /// Add a tket1 [`circuit_json::Command`] from the serial circuit to the @@ -303,7 +302,7 @@ impl Tk1Decoder { } // Look it up in the input parameters to the circuit, and add a new wire if needed. *input_params.entry(name.to_string()).or_insert_with(|| { - let wire = hugr.add_input(ROTATION_TYPE); + let wire = hugr.add_input(rotation_type()); LoadedParameter::rotation(wire) }) } diff --git a/tket2/src/serialize/pytket/encoder.rs b/tket2/src/serialize/pytket/encoder.rs index 9cae5b27..cfbf775e 100644 --- a/tket2/src/serialize/pytket/encoder.rs +++ b/tket2/src/serialize/pytket/encoder.rs @@ -3,9 +3,9 @@ use core::panic; use std::collections::{HashMap, HashSet, VecDeque}; -use hugr::extension::prelude::{BOOL_T, QB_T}; +use hugr::extension::prelude::{bool_t, qb_t}; use hugr::ops::{OpTrait, OpType}; -use hugr::std_extensions::arithmetic::float_types::FLOAT64_TYPE; +use hugr::std_extensions::arithmetic::float_types::float64_type; use hugr::types::Type; use hugr::{HugrView, Wire}; use itertools::Itertools; @@ -14,7 +14,7 @@ use tket_json_rs::register::ElementId as RegisterUnit; use crate::circuit::command::{CircuitUnit, Command}; use crate::circuit::Circuit; -use crate::extension::rotation::ROTATION_TYPE; +use crate::extension::rotation::rotation_type; use crate::serialize::pytket::RegisterHash; use crate::Tk2Op; @@ -51,7 +51,7 @@ impl Tk1Encoder { // Check for unsupported input types. for (_, _, typ) in circ.units() { - if ![ROTATION_TYPE, FLOAT64_TYPE, QB_T, BOOL_T].contains(&typ) { + if ![rotation_type(), float64_type(), qb_t(), bool_t()].contains(&typ) { return Err(TK1ConvertError::NonSerializableInputs { typ }); } } @@ -111,7 +111,7 @@ impl Tk1Encoder { let mut bit_args = Vec::with_capacity(tk1op.bit_inputs()); let mut params = Vec::with_capacity(tk1op.num_params()); for (unit, _, ty) in command.inputs() { - if ty == QB_T { + if ty == qb_t() { let reg = self.unit_to_register(unit).unwrap_or_else(|| { panic!( "No register found for qubit input {unit} in node {}.", @@ -119,7 +119,7 @@ impl Tk1Encoder { ) }); qubit_args.push(reg); - } else if ty == BOOL_T { + } else if ty == bool_t() { let reg = self.unit_to_register(unit).unwrap_or_else(|| { panic!( "No register found for bit input {unit} in node {}.", @@ -127,7 +127,7 @@ impl Tk1Encoder { ) }); bit_args.push(reg); - } else if [ROTATION_TYPE, FLOAT64_TYPE].contains(&ty) { + } else if [rotation_type(), float64_type()].contains(&ty) { let CircuitUnit::Wire(param_wire) = unit else { unreachable!("Angle types are not linear.") }; @@ -142,7 +142,7 @@ impl Tk1Encoder { } for (unit, _, ty) in command.outputs() { - if ty == QB_T { + if ty == qb_t() { // If the qubit is not already in the qubit tracker, add it as a // new register. let CircuitUnit::Linear(unit_id) = unit else { @@ -152,7 +152,7 @@ impl Tk1Encoder { let reg = self.qubits.add_qubit_register(unit_id); qubit_args.push(reg.clone()); } - } else if ty == BOOL_T { + } else if ty == bool_t() { // If the operation has any bit outputs, create a new one bit // register. // @@ -288,7 +288,7 @@ impl QubitTracker { .chain(tracker.outputs.iter().flatten()), ); - let qubit_count = circ.units().filter(|(_, _, ty)| ty == &QB_T).count(); + let qubit_count = circ.units().filter(|(_, _, ty)| ty == &qb_t()).count(); for i in 0..qubit_count { // Use the given input register names if available, or create new ones. @@ -416,7 +416,7 @@ impl BitTracker { ); let bit_input_wires = circ.units().filter_map(|u| match u { - (CircuitUnit::Wire(w), _, ty) if ty == BOOL_T => Some(w), + (CircuitUnit::Wire(w), _, ty) if ty == bool_t() => Some(w), _ => None, }); @@ -558,7 +558,9 @@ impl ParameterTracker { let mut tracker = ParameterTracker::default(); let angle_input_wires = circ.units().filter_map(|u| match u { - (CircuitUnit::Wire(w), _, ty) if [ROTATION_TYPE, FLOAT64_TYPE].contains(&ty) => Some(w), + (CircuitUnit::Wire(w), _, ty) if [rotation_type(), float64_type()].contains(&ty) => { + Some(w) + } _ => None, }); @@ -589,15 +591,15 @@ impl ParameterTracker { let input_count = if let Some(signature) = optype.dataflow_signature() { // Only consider commands where all inputs and some outputs are // parameters that we can track. - const TRACKED_PARAMS: [Type; 2] = [ROTATION_TYPE, FLOAT64_TYPE]; + let tracked_params: [Type; 2] = [rotation_type(), float64_type()]; let all_inputs = signature .input() .iter() - .all(|ty| TRACKED_PARAMS.contains(ty)); + .all(|ty| tracked_params.contains(ty)); let some_output = signature .output() .iter() - .any(|ty| TRACKED_PARAMS.contains(ty)); + .any(|ty| tracked_params.contains(ty)); if !all_inputs || !some_output { return Ok(false); } @@ -618,7 +620,7 @@ impl ParameterTracker { panic!("Angle types are not linear") }; let Some(param) = self.parameters.get(&wire) else { - let typ = ROTATION_TYPE; + let typ = rotation_type(); return Err(OpConvertError::UnresolvedParamInput { typ, optype: optype.clone(), diff --git a/tket2/src/serialize/pytket/op/native.rs b/tket2/src/serialize/pytket/op/native.rs index ddce7f5f..67339bf0 100644 --- a/tket2/src/serialize/pytket/op/native.rs +++ b/tket2/src/serialize/pytket/op/native.rs @@ -1,16 +1,18 @@ //! Operations that have corresponding representations in both `pytket` and `tket2`. -use hugr::extension::prelude::{Noop, BOOL_T, QB_T}; +use std::borrow::Cow; + +use hugr::extension::prelude::{bool_t, qb_t, Noop}; use hugr::ops::{OpTrait, OpType}; -use hugr::std_extensions::arithmetic::float_types::FLOAT64_TYPE; +use hugr::std_extensions::arithmetic::float_types::float64_type; use hugr::types::Signature; use hugr::IncomingPort; use tket_json_rs::circuit_json; use tket_json_rs::optype::OpType as Tk1OpType; -use crate::extension::rotation::ROTATION_TYPE; +use crate::extension::rotation::rotation_type; use crate::Tk2Op; /// An operation with a native TKET2 counterpart. @@ -104,7 +106,7 @@ impl NativeOp { Tk1OpType::CCX => Tk2Op::Toffoli.into(), Tk1OpType::Reset => Tk2Op::Reset.into(), Tk1OpType::Measure => Tk2Op::Measure.into(), - Tk1OpType::noop => Noop::new(QB_T).into(), + Tk1OpType::noop => Noop::new(qb_t()).into(), _ => { return None; } @@ -133,7 +135,7 @@ impl NativeOp { } /// Returns the dataflow signature for this operation. - pub fn signature(&self) -> Option { + pub fn signature(&self) -> Option> { self.op.dataflow_signature() } @@ -161,7 +163,7 @@ impl NativeOp { let types = sig.input_types().to_owned(); sig.input_ports() .zip(types) - .filter(|(_, ty)| [ROTATION_TYPE, FLOAT64_TYPE].contains(ty)) + .filter(|(_, ty)| [rotation_type(), float64_type()].contains(ty)) .map(|(port, _)| port) }) } @@ -173,22 +175,22 @@ impl NativeOp { self.num_params = 0; self.output_bits = 0; self.output_qubits = 0; - let Some(sig) = self.signature() else { + let Some(sig) = self.signature().map(Cow::into_owned) else { return; }; for ty in sig.input_types() { - if ty == &QB_T { + if ty == &qb_t() { self.input_qubits += 1; - } else if ty == &BOOL_T { + } else if ty == &bool_t() { self.input_bits += 1; - } else if [ROTATION_TYPE, FLOAT64_TYPE].contains(ty) { + } else if [rotation_type(), float64_type()].contains(ty) { self.num_params += 1; } } for ty in sig.output_types() { - if ty == &QB_T { + if ty == &qb_t() { self.output_qubits += 1; - } else if ty == &BOOL_T { + } else if ty == &bool_t() { self.output_bits += 1; } } diff --git a/tket2/src/serialize/pytket/op/serialised.rs b/tket2/src/serialize/pytket/op/serialised.rs index b32ac9c6..c05cd4f4 100644 --- a/tket2/src/serialize/pytket/op/serialised.rs +++ b/tket2/src/serialize/pytket/op/serialised.rs @@ -1,6 +1,6 @@ //! Wrapper over pytket operations that cannot be represented naturally in tket2. -use hugr::extension::prelude::{BOOL_T, QB_T}; +use hugr::extension::prelude::{bool_t, qb_t}; use hugr::ops::custom::ExtensionOp; use hugr::ops::{NamedOp, OpType}; @@ -10,8 +10,8 @@ use hugr::IncomingPort; use serde::de::Error; use tket_json_rs::circuit_json; -use crate::extension::rotation::ROTATION_TYPE; -use crate::extension::{REGISTRY, TKET1_EXTENSION, TKET1_EXTENSION_ID, TKET1_OP_NAME}; +use crate::extension::rotation::rotation_type; +use crate::extension::{TKET1_EXTENSION, TKET1_EXTENSION_ID, TKET1_OP_NAME}; use crate::serialize::pytket::OpConvertError; /// A serialized operation, containing the operation type and all its attributes. @@ -38,7 +38,7 @@ pub struct OpaqueTk1Op { /// instead stored purely as metadata for the `Operation`. param_inputs: Vec>, /// The number of non-None inputs in `param_inputs`, corresponding to the - /// ROTATION_TYPE inputs to the Hugr operation. + /// rotation_type() inputs to the Hugr operation. pub num_params: usize, } @@ -108,11 +108,11 @@ impl OpaqueTk1Op { #[inline] pub fn signature(&self) -> Signature { let linear = [ - vec![QB_T; self.num_qubits], - vec![BOOL_T.clone(); self.num_bits], + vec![qb_t(); self.num_qubits], + vec![bool_t().clone(); self.num_bits], ] .concat(); - let params = vec![ROTATION_TYPE; self.num_params]; + let params = vec![rotation_type(); self.num_params]; Signature::new([linear.clone(), params].concat(), linear) .with_extension_delta(TKET1_EXTENSION_ID) } @@ -133,7 +133,7 @@ impl OpaqueTk1Op { arg: serde_json::to_string(self).unwrap(), }; let op_def = TKET1_EXTENSION.get_op(&TKET1_OP_NAME).unwrap(); - ExtensionOp::new(op_def.clone(), vec![payload], ®ISTRY).unwrap_or_else(|e| panic!("{e}")) + ExtensionOp::new(op_def.clone(), vec![payload]).unwrap_or_else(|e| panic!("{e}")) } /// Compute the `parameter_input` and `num_params` fields by looking for diff --git a/tket2/src/serialize/pytket/tests.rs b/tket2/src/serialize/pytket/tests.rs index ce5ceb00..18a599c5 100644 --- a/tket2/src/serialize/pytket/tests.rs +++ b/tket2/src/serialize/pytket/tests.rs @@ -4,7 +4,7 @@ use std::collections::{HashMap, HashSet}; use std::io::BufReader; use hugr::builder::{DFGBuilder, Dataflow, DataflowHugr}; -use hugr::extension::prelude::{BOOL_T, QB_T}; +use hugr::extension::prelude::{bool_t, qb_t}; use hugr::hugr::hugrmut::HugrMut; use hugr::std_extensions::arithmetic::float_ops::FloatOps; @@ -17,9 +17,8 @@ use tket_json_rs::register; use super::{TKETDecode, METADATA_INPUT_PARAMETERS, METADATA_Q_OUTPUT_REGISTERS}; use crate::circuit::Circuit; -use crate::extension::rotation::{ConstRotation, RotationOp, ROTATION_TYPE}; +use crate::extension::rotation::{rotation_type, ConstRotation, RotationOp}; use crate::extension::sympy::SympyOpDef; -use crate::extension::REGISTRY; use crate::Tk2Op; const SIMPLE_JSON: &str = r#"{ @@ -138,8 +137,8 @@ fn compare_serial_circs(a: &SerialCircuit, b: &SerialCircuit) { /// A simple circuit with some preset qubit registers #[fixture] fn circ_preset_qubits() -> Circuit { - let input_t = vec![QB_T]; - let output_t = vec![QB_T, QB_T]; + let input_t = vec![qb_t()]; + let output_t = vec![qb_t(), qb_t()]; let mut h = DFGBuilder::new(Signature::new(input_t, output_t)).unwrap(); let [qb0] = h.input_wires_arr(); @@ -150,7 +149,7 @@ fn circ_preset_qubits() -> Circuit { .unwrap() .outputs_arr(); - let mut hugr = h.finish_hugr_with_outputs([qb0, qb1], ®ISTRY).unwrap(); + let mut hugr = h.finish_hugr_with_outputs([qb0, qb1]).unwrap(); // A preset register for the first qubit output hugr.set_metadata( @@ -165,8 +164,8 @@ fn circ_preset_qubits() -> Circuit { /// A simple circuit with some input parameters #[fixture] fn circ_parameterized() -> Circuit { - let input_t = vec![QB_T, ROTATION_TYPE, ROTATION_TYPE, ROTATION_TYPE]; - let output_t = vec![QB_T]; + let input_t = vec![qb_t(), rotation_type(), rotation_type(), rotation_type()]; + let output_t = vec![qb_t()]; let mut h = DFGBuilder::new(Signature::new(input_t, output_t)).unwrap(); let [q, r0, r1, r2] = h.input_wires_arr(); @@ -175,7 +174,7 @@ fn circ_parameterized() -> Circuit { let [q] = h.add_dataflow_op(Tk2Op::Ry, [q, r1]).unwrap().outputs_arr(); let [q] = h.add_dataflow_op(Tk2Op::Rz, [q, r2]).unwrap().outputs_arr(); - let mut hugr = h.finish_hugr_with_outputs([q], ®ISTRY).unwrap(); + let mut hugr = h.finish_hugr_with_outputs([q]).unwrap(); // Preset names for some of the inputs hugr.set_metadata( @@ -190,8 +189,8 @@ fn circ_parameterized() -> Circuit { /// A simple circuit with ancillae #[fixture] fn circ_measure_ancilla() -> Circuit { - let input_t = vec![QB_T]; - let output_t = vec![BOOL_T, BOOL_T]; + let input_t = vec![qb_t()]; + let output_t = vec![bool_t(), bool_t()]; let mut h = DFGBuilder::new(Signature::new(input_t, output_t)).unwrap(); let [qb] = h.input_wires_arr(); @@ -212,15 +211,15 @@ fn circ_measure_ancilla() -> Circuit { .unwrap() .outputs_arr(); - h.finish_hugr_with_outputs([meas_qb, meas_anc], ®ISTRY) + h.finish_hugr_with_outputs([meas_qb, meas_anc]) .unwrap() .into() } #[fixture] fn circ_add_angles_symbolic() -> (Circuit, String) { - let input_t = vec![QB_T, ROTATION_TYPE, ROTATION_TYPE]; - let output_t = vec![QB_T]; + let input_t = vec![qb_t(), rotation_type(), rotation_type()]; + let output_t = vec![qb_t()]; let mut h = DFGBuilder::new(Signature::new(input_t, output_t)).unwrap(); let [qb, f1, f2] = h.input_wires_arr(); @@ -233,13 +232,13 @@ fn circ_add_angles_symbolic() -> (Circuit, String) { .unwrap() .outputs_arr(); - let circ = h.finish_hugr_with_outputs([qb], ®ISTRY).unwrap().into(); + let circ = h.finish_hugr_with_outputs([qb]).unwrap().into(); (circ, "(f0 + f1)".to_string()) } #[fixture] fn circ_add_angles_constants() -> (Circuit, String) { - let qb_row = vec![QB_T]; + let qb_row = vec![qb_t()]; let mut h = DFGBuilder::new(Signature::new(qb_row.clone(), qb_row)).unwrap(); let qb = h.input_wires().next().unwrap(); @@ -255,15 +254,15 @@ fn circ_add_angles_constants() -> (Circuit, String) { .add_dataflow_op(Tk2Op::Rx, [qb, point5]) .unwrap() .outputs(); - let circ = h.finish_hugr_with_outputs(qbs, ®ISTRY).unwrap().into(); + let circ = h.finish_hugr_with_outputs(qbs).unwrap().into(); (circ, "(0.2 + 0.3)".to_string()) } #[fixture] /// An Rx operation using some complex ops to compute its angle. fn circ_complex_angle_computation() -> (Circuit, String) { - let input_t = vec![QB_T, ROTATION_TYPE, ROTATION_TYPE]; - let output_t = vec![QB_T]; + let input_t = vec![qb_t(), rotation_type(), rotation_type()]; + let output_t = vec![qb_t()]; let mut h = DFGBuilder::new(Signature::new(input_t, output_t)).unwrap(); let [qb, r0, r1] = h.input_wires_arr(); @@ -307,7 +306,7 @@ fn circ_complex_angle_computation() -> (Circuit, String) { .unwrap() .outputs(); - let circ = h.finish_hugr_with_outputs(qbs, ®ISTRY).unwrap().into(); + let circ = h.finish_hugr_with_outputs(qbs).unwrap().into(); (circ, "((f0 ** f1) + (cos(pi) + 0.2))".to_string()) } @@ -345,9 +344,9 @@ fn json_file_roundtrip(#[case] circ: impl AsRef) { /// /// Note: this is not a pure roundtrip as the encoder may add internal qubits/bits to the circuit. #[rstest] -#[case::meas_ancilla(circ_measure_ancilla(), Signature::new_endo(vec![QB_T, QB_T, BOOL_T, BOOL_T]))] -#[case::preset_qubits(circ_preset_qubits(), Signature::new_endo(vec![QB_T, QB_T, QB_T]))] -#[case::preset_parameterized(circ_parameterized(), Signature::new(vec![QB_T, ROTATION_TYPE, ROTATION_TYPE, ROTATION_TYPE], vec![QB_T]))] +#[case::meas_ancilla(circ_measure_ancilla(), Signature::new_endo(vec![qb_t(), qb_t(), bool_t(), bool_t()]))] +#[case::preset_qubits(circ_preset_qubits(), Signature::new_endo(vec![qb_t(), qb_t(), qb_t()]))] +#[case::preset_parameterized(circ_parameterized(), Signature::new(vec![qb_t(), rotation_type(), rotation_type(), rotation_type()], vec![qb_t()]))] fn circuit_roundtrip(#[case] circ: Circuit, #[case] decoded_sig: Signature) { let ser: SerialCircuit = SerialCircuit::encode(&circ).unwrap(); let deser: Circuit = ser.clone().decode().unwrap(); diff --git a/tket2/src/utils.rs b/tket2/src/utils.rs index a0279329..168e4798 100644 --- a/tket2/src/utils.rs +++ b/tket2/src/utils.rs @@ -1,18 +1,17 @@ //! Utility functions for the library. use hugr::builder::{Container, DataflowSubContainer, FunctionBuilder, HugrBuilder, ModuleBuilder}; -use hugr::extension::PRELUDE_REGISTRY; use hugr::ops::handle::NodeHandle; use hugr::types::{Type, TypeBound}; use hugr::Hugr; use hugr::{ builder::{BuildError, CircuitBuilder, Dataflow, DataflowHugr}, - extension::prelude::QB_T, + extension::prelude::qb_t, types::Signature, }; use crate::circuit::Circuit; -use crate::extension::{REGISTRY, TKET2_EXTENSION_ID}; +use crate::extension::TKET2_EXTENSION_ID; pub(crate) fn type_is_linear(typ: &Type) -> bool { !TypeBound::Copyable.contains(typ.least_upper_bound()) @@ -24,7 +23,7 @@ pub(crate) fn build_simple_circuit(num_qubits: usize, f: F) -> Result>) -> Result<(), BuildError>, { - let qb_row = vec![QB_T; num_qubits]; + let qb_row = vec![qb_t(); num_qubits]; let signature = Signature::new(qb_row.clone(), qb_row).with_extension_delta(TKET2_EXTENSION_ID); let mut h = FunctionBuilder::new("main", signature)?; @@ -36,7 +35,7 @@ where let qbs = circ.finish(); - let hugr = h.finish_hugr_with_outputs(qbs, ®ISTRY)?; + let hugr = h.finish_hugr_with_outputs(qbs)?; Ok(hugr.into()) } @@ -48,7 +47,7 @@ where { let mut builder = ModuleBuilder::new(); let circ = { - let qb_row = vec![QB_T; num_qubits]; + let qb_row = vec![qb_t(); num_qubits]; let circ_signature = Signature::new(qb_row.clone(), qb_row); let mut dfg = builder.define_function("main", circ_signature)?; let mut circ = dfg.as_circuit(dfg.input_wires()); @@ -56,7 +55,7 @@ where let qbs = circ.finish(); dfg.finish_with_outputs(qbs)? }; - let hugr = builder.finish_hugr(&PRELUDE_REGISTRY)?; + let hugr = builder.finish_hugr()?; Ok(Circuit::new(hugr, circ.node())) } diff --git a/uv.lock b/uv.lock index 4714e741..465f0854 100644 --- a/uv.lock +++ b/uv.lock @@ -1,9 +1,5 @@ version = 1 requires-python = ">=3.10" -resolution-markers = [ - "python_full_version < '3.13'", - "python_full_version >= '3.13'", -] [manifest] members = [ @@ -34,11 +30,11 @@ wheels = [ [[package]] name = "attrs" -version = "24.2.0" +version = "24.3.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/fc/0f/aafca9af9315aee06a89ffde799a10a582fe8de76c563ee80bbcdc08b3fb/attrs-24.2.0.tar.gz", hash = "sha256:5cfb1b9148b5b086569baec03f20d7b6bf3bcacc9a42bebf87ffaaca362f6346", size = 792678 } +sdist = { url = "https://files.pythonhosted.org/packages/48/c8/6260f8ccc11f0917360fc0da435c5c9c7504e3db174d5a12a1494887b045/attrs-24.3.0.tar.gz", hash = "sha256:8f5c07333d543103541ba7be0e2ce16eeee8130cb0b3f9238ab904ce1e85baff", size = 805984 } wheels = [ - { url = "https://files.pythonhosted.org/packages/6a/21/5b6702a7f963e95456c0de2d495f67bf5fd62840ac655dc451586d23d39a/attrs-24.2.0-py3-none-any.whl", hash = "sha256:81921eb96de3191c8258c199618104dd27ac608d9366f5e35d011eae1867ede2", size = 63001 }, + { url = "https://files.pythonhosted.org/packages/89/aa/ab0f7891a01eeb2d2e338ae8fecbe57fcebea1a24dbb64d45801bfab481d/attrs-24.3.0-py3-none-any.whl", hash = "sha256:ac96cd038792094f438ad1f6ff80837353805ac950cd2aa0e0625ef19850c308", size = 63397 }, ] [[package]] @@ -61,61 +57,61 @@ wheels = [ [[package]] name = "coverage" -version = "7.6.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f7/08/7e37f82e4d1aead42a7443ff06a1e406aabf7302c4f00a546e4b320b994c/coverage-7.6.1.tar.gz", hash = "sha256:953510dfb7b12ab69d20135a0662397f077c59b1e6379a768e97c59d852ee51d", size = 798791 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/7e/61/eb7ce5ed62bacf21beca4937a90fe32545c91a3c8a42a30c6616d48fc70d/coverage-7.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b06079abebbc0e89e6163b8e8f0e16270124c154dc6e4a47b413dd538859af16", size = 206690 }, - { url = "https://files.pythonhosted.org/packages/7d/73/041928e434442bd3afde5584bdc3f932fb4562b1597629f537387cec6f3d/coverage-7.6.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cf4b19715bccd7ee27b6b120e7e9dd56037b9c0681dcc1adc9ba9db3d417fa36", size = 207127 }, - { url = "https://files.pythonhosted.org/packages/c7/c8/6ca52b5147828e45ad0242388477fdb90df2c6cbb9a441701a12b3c71bc8/coverage-7.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61c0abb4c85b095a784ef23fdd4aede7a2628478e7baba7c5e3deba61070a02", size = 235654 }, - { url = "https://files.pythonhosted.org/packages/d5/da/9ac2b62557f4340270942011d6efeab9833648380109e897d48ab7c1035d/coverage-7.6.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd21f6ae3f08b41004dfb433fa895d858f3f5979e7762d052b12aef444e29afc", size = 233598 }, - { url = "https://files.pythonhosted.org/packages/53/23/9e2c114d0178abc42b6d8d5281f651a8e6519abfa0ef460a00a91f80879d/coverage-7.6.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f59d57baca39b32db42b83b2a7ba6f47ad9c394ec2076b084c3f029b7afca23", size = 234732 }, - { url = "https://files.pythonhosted.org/packages/0f/7e/a0230756fb133343a52716e8b855045f13342b70e48e8ad41d8a0d60ab98/coverage-7.6.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a1ac0ae2b8bd743b88ed0502544847c3053d7171a3cff9228af618a068ed9c34", size = 233816 }, - { url = "https://files.pythonhosted.org/packages/28/7c/3753c8b40d232b1e5eeaed798c875537cf3cb183fb5041017c1fdb7ec14e/coverage-7.6.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e6a08c0be454c3b3beb105c0596ebdc2371fab6bb90c0c0297f4e58fd7e1012c", size = 232325 }, - { url = "https://files.pythonhosted.org/packages/57/e3/818a2b2af5b7573b4b82cf3e9f137ab158c90ea750a8f053716a32f20f06/coverage-7.6.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f5796e664fe802da4f57a168c85359a8fbf3eab5e55cd4e4569fbacecc903959", size = 233418 }, - { url = "https://files.pythonhosted.org/packages/c8/fb/4532b0b0cefb3f06d201648715e03b0feb822907edab3935112b61b885e2/coverage-7.6.1-cp310-cp310-win32.whl", hash = "sha256:7bb65125fcbef8d989fa1dd0e8a060999497629ca5b0efbca209588a73356232", size = 209343 }, - { url = "https://files.pythonhosted.org/packages/5a/25/af337cc7421eca1c187cc9c315f0a755d48e755d2853715bfe8c418a45fa/coverage-7.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:3115a95daa9bdba70aea750db7b96b37259a81a709223c8448fa97727d546fe0", size = 210136 }, - { url = "https://files.pythonhosted.org/packages/ad/5f/67af7d60d7e8ce61a4e2ddcd1bd5fb787180c8d0ae0fbd073f903b3dd95d/coverage-7.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7dea0889685db8550f839fa202744652e87c60015029ce3f60e006f8c4462c93", size = 206796 }, - { url = "https://files.pythonhosted.org/packages/e1/0e/e52332389e057daa2e03be1fbfef25bb4d626b37d12ed42ae6281d0a274c/coverage-7.6.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ed37bd3c3b063412f7620464a9ac1314d33100329f39799255fb8d3027da50d3", size = 207244 }, - { url = "https://files.pythonhosted.org/packages/aa/cd/766b45fb6e090f20f8927d9c7cb34237d41c73a939358bc881883fd3a40d/coverage-7.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d85f5e9a5f8b73e2350097c3756ef7e785f55bd71205defa0bfdaf96c31616ff", size = 239279 }, - { url = "https://files.pythonhosted.org/packages/70/6c/a9ccd6fe50ddaf13442a1e2dd519ca805cbe0f1fcd377fba6d8339b98ccb/coverage-7.6.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bc572be474cafb617672c43fe989d6e48d3c83af02ce8de73fff1c6bb3c198d", size = 236859 }, - { url = "https://files.pythonhosted.org/packages/14/6f/8351b465febb4dbc1ca9929505202db909c5a635c6fdf33e089bbc3d7d85/coverage-7.6.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c0420b573964c760df9e9e86d1a9a622d0d27f417e1a949a8a66dd7bcee7bc6", size = 238549 }, - { url = "https://files.pythonhosted.org/packages/68/3c/289b81fa18ad72138e6d78c4c11a82b5378a312c0e467e2f6b495c260907/coverage-7.6.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:1f4aa8219db826ce6be7099d559f8ec311549bfc4046f7f9fe9b5cea5c581c56", size = 237477 }, - { url = "https://files.pythonhosted.org/packages/ed/1c/aa1efa6459d822bd72c4abc0b9418cf268de3f60eeccd65dc4988553bd8d/coverage-7.6.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:fc5a77d0c516700ebad189b587de289a20a78324bc54baee03dd486f0855d234", size = 236134 }, - { url = "https://files.pythonhosted.org/packages/fb/c8/521c698f2d2796565fe9c789c2ee1ccdae610b3aa20b9b2ef980cc253640/coverage-7.6.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b48f312cca9621272ae49008c7f613337c53fadca647d6384cc129d2996d1133", size = 236910 }, - { url = "https://files.pythonhosted.org/packages/7d/30/033e663399ff17dca90d793ee8a2ea2890e7fdf085da58d82468b4220bf7/coverage-7.6.1-cp311-cp311-win32.whl", hash = "sha256:1125ca0e5fd475cbbba3bb67ae20bd2c23a98fac4e32412883f9bcbaa81c314c", size = 209348 }, - { url = "https://files.pythonhosted.org/packages/20/05/0d1ccbb52727ccdadaa3ff37e4d2dc1cd4d47f0c3df9eb58d9ec8508ca88/coverage-7.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:8ae539519c4c040c5ffd0632784e21b2f03fc1340752af711f33e5be83a9d6c6", size = 210230 }, - { url = "https://files.pythonhosted.org/packages/7e/d4/300fc921dff243cd518c7db3a4c614b7e4b2431b0d1145c1e274fd99bd70/coverage-7.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:95cae0efeb032af8458fc27d191f85d1717b1d4e49f7cb226cf526ff28179778", size = 206983 }, - { url = "https://files.pythonhosted.org/packages/e1/ab/6bf00de5327ecb8db205f9ae596885417a31535eeda6e7b99463108782e1/coverage-7.6.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5621a9175cf9d0b0c84c2ef2b12e9f5f5071357c4d2ea6ca1cf01814f45d2391", size = 207221 }, - { url = "https://files.pythonhosted.org/packages/92/8f/2ead05e735022d1a7f3a0a683ac7f737de14850395a826192f0288703472/coverage-7.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:260933720fdcd75340e7dbe9060655aff3af1f0c5d20f46b57f262ab6c86a5e8", size = 240342 }, - { url = "https://files.pythonhosted.org/packages/0f/ef/94043e478201ffa85b8ae2d2c79b4081e5a1b73438aafafccf3e9bafb6b5/coverage-7.6.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07e2ca0ad381b91350c0ed49d52699b625aab2b44b65e1b4e02fa9df0e92ad2d", size = 237371 }, - { url = "https://files.pythonhosted.org/packages/1f/0f/c890339dd605f3ebc269543247bdd43b703cce6825b5ed42ff5f2d6122c7/coverage-7.6.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c44fee9975f04b33331cb8eb272827111efc8930cfd582e0320613263ca849ca", size = 239455 }, - { url = "https://files.pythonhosted.org/packages/d1/04/7fd7b39ec7372a04efb0f70c70e35857a99b6a9188b5205efb4c77d6a57a/coverage-7.6.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:877abb17e6339d96bf08e7a622d05095e72b71f8afd8a9fefc82cf30ed944163", size = 238924 }, - { url = "https://files.pythonhosted.org/packages/ed/bf/73ce346a9d32a09cf369f14d2a06651329c984e106f5992c89579d25b27e/coverage-7.6.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3e0cadcf6733c09154b461f1ca72d5416635e5e4ec4e536192180d34ec160f8a", size = 237252 }, - { url = "https://files.pythonhosted.org/packages/86/74/1dc7a20969725e917b1e07fe71a955eb34bc606b938316bcc799f228374b/coverage-7.6.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c3c02d12f837d9683e5ab2f3d9844dc57655b92c74e286c262e0fc54213c216d", size = 238897 }, - { url = "https://files.pythonhosted.org/packages/b6/e9/d9cc3deceb361c491b81005c668578b0dfa51eed02cd081620e9a62f24ec/coverage-7.6.1-cp312-cp312-win32.whl", hash = "sha256:e05882b70b87a18d937ca6768ff33cc3f72847cbc4de4491c8e73880766718e5", size = 209606 }, - { url = "https://files.pythonhosted.org/packages/47/c8/5a2e41922ea6740f77d555c4d47544acd7dc3f251fe14199c09c0f5958d3/coverage-7.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:b5d7b556859dd85f3a541db6a4e0167b86e7273e1cdc973e5b175166bb634fdb", size = 210373 }, - { url = "https://files.pythonhosted.org/packages/8c/f9/9aa4dfb751cb01c949c990d136a0f92027fbcc5781c6e921df1cb1563f20/coverage-7.6.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a4acd025ecc06185ba2b801f2de85546e0b8ac787cf9d3b06e7e2a69f925b106", size = 207007 }, - { url = "https://files.pythonhosted.org/packages/b9/67/e1413d5a8591622a46dd04ff80873b04c849268831ed5c304c16433e7e30/coverage-7.6.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a6d3adcf24b624a7b778533480e32434a39ad8fa30c315208f6d3e5542aeb6e9", size = 207269 }, - { url = "https://files.pythonhosted.org/packages/14/5b/9dec847b305e44a5634d0fb8498d135ab1d88330482b74065fcec0622224/coverage-7.6.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d0c212c49b6c10e6951362f7c6df3329f04c2b1c28499563d4035d964ab8e08c", size = 239886 }, - { url = "https://files.pythonhosted.org/packages/7b/b7/35760a67c168e29f454928f51f970342d23cf75a2bb0323e0f07334c85f3/coverage-7.6.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6e81d7a3e58882450ec4186ca59a3f20a5d4440f25b1cff6f0902ad890e6748a", size = 237037 }, - { url = "https://files.pythonhosted.org/packages/f7/95/d2fd31f1d638df806cae59d7daea5abf2b15b5234016a5ebb502c2f3f7ee/coverage-7.6.1-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78b260de9790fd81e69401c2dc8b17da47c8038176a79092a89cb2b7d945d060", size = 239038 }, - { url = "https://files.pythonhosted.org/packages/6e/bd/110689ff5752b67924efd5e2aedf5190cbbe245fc81b8dec1abaffba619d/coverage-7.6.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a78d169acd38300060b28d600344a803628c3fd585c912cacc9ea8790fe96862", size = 238690 }, - { url = "https://files.pythonhosted.org/packages/d3/a8/08d7b38e6ff8df52331c83130d0ab92d9c9a8b5462f9e99c9f051a4ae206/coverage-7.6.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:2c09f4ce52cb99dd7505cd0fc8e0e37c77b87f46bc9c1eb03fe3bc9991085388", size = 236765 }, - { url = "https://files.pythonhosted.org/packages/d6/6a/9cf96839d3147d55ae713eb2d877f4d777e7dc5ba2bce227167d0118dfe8/coverage-7.6.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6878ef48d4227aace338d88c48738a4258213cd7b74fd9a3d4d7582bb1d8a155", size = 238611 }, - { url = "https://files.pythonhosted.org/packages/74/e4/7ff20d6a0b59eeaab40b3140a71e38cf52547ba21dbcf1d79c5a32bba61b/coverage-7.6.1-cp313-cp313-win32.whl", hash = "sha256:44df346d5215a8c0e360307d46ffaabe0f5d3502c8a1cefd700b34baf31d411a", size = 209671 }, - { url = "https://files.pythonhosted.org/packages/35/59/1812f08a85b57c9fdb6d0b383d779e47b6f643bc278ed682859512517e83/coverage-7.6.1-cp313-cp313-win_amd64.whl", hash = "sha256:8284cf8c0dd272a247bc154eb6c95548722dce90d098c17a883ed36e67cdb129", size = 210368 }, - { url = "https://files.pythonhosted.org/packages/9c/15/08913be1c59d7562a3e39fce20661a98c0a3f59d5754312899acc6cb8a2d/coverage-7.6.1-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:d3296782ca4eab572a1a4eca686d8bfb00226300dcefdf43faa25b5242ab8a3e", size = 207758 }, - { url = "https://files.pythonhosted.org/packages/c4/ae/b5d58dff26cade02ada6ca612a76447acd69dccdbb3a478e9e088eb3d4b9/coverage-7.6.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:502753043567491d3ff6d08629270127e0c31d4184c4c8d98f92c26f65019962", size = 208035 }, - { url = "https://files.pythonhosted.org/packages/b8/d7/62095e355ec0613b08dfb19206ce3033a0eedb6f4a67af5ed267a8800642/coverage-7.6.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a89ecca80709d4076b95f89f308544ec8f7b4727e8a547913a35f16717856cb", size = 250839 }, - { url = "https://files.pythonhosted.org/packages/7c/1e/c2967cb7991b112ba3766df0d9c21de46b476d103e32bb401b1b2adf3380/coverage-7.6.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a318d68e92e80af8b00fa99609796fdbcdfef3629c77c6283566c6f02c6d6704", size = 246569 }, - { url = "https://files.pythonhosted.org/packages/8b/61/a7a6a55dd266007ed3b1df7a3386a0d760d014542d72f7c2c6938483b7bd/coverage-7.6.1-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13b0a73a0896988f053e4fbb7de6d93388e6dd292b0d87ee51d106f2c11b465b", size = 248927 }, - { url = "https://files.pythonhosted.org/packages/c8/fa/13a6f56d72b429f56ef612eb3bc5ce1b75b7ee12864b3bd12526ab794847/coverage-7.6.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:4421712dbfc5562150f7554f13dde997a2e932a6b5f352edcce948a815efee6f", size = 248401 }, - { url = "https://files.pythonhosted.org/packages/75/06/0429c652aa0fb761fc60e8c6b291338c9173c6aa0f4e40e1902345b42830/coverage-7.6.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:166811d20dfea725e2e4baa71fffd6c968a958577848d2131f39b60043400223", size = 246301 }, - { url = "https://files.pythonhosted.org/packages/52/76/1766bb8b803a88f93c3a2d07e30ffa359467810e5cbc68e375ebe6906efb/coverage-7.6.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:225667980479a17db1048cb2bf8bfb39b8e5be8f164b8f6628b64f78a72cf9d3", size = 247598 }, - { url = "https://files.pythonhosted.org/packages/66/8b/f54f8db2ae17188be9566e8166ac6df105c1c611e25da755738025708d54/coverage-7.6.1-cp313-cp313t-win32.whl", hash = "sha256:170d444ab405852903b7d04ea9ae9b98f98ab6d7e63e1115e82620807519797f", size = 210307 }, - { url = "https://files.pythonhosted.org/packages/9f/b0/e0dca6da9170aefc07515cce067b97178cefafb512d00a87a1c717d2efd5/coverage-7.6.1-cp313-cp313t-win_amd64.whl", hash = "sha256:b9f222de8cded79c49bf184bdbc06630d4c58eec9459b939b4a690c82ed05657", size = 211453 }, - { url = "https://files.pythonhosted.org/packages/a5/2b/0354ed096bca64dc8e32a7cbcae28b34cb5ad0b1fe2125d6d99583313ac0/coverage-7.6.1-pp38.pp39.pp310-none-any.whl", hash = "sha256:e9a6e0eb86070e8ccaedfbd9d38fec54864f3125ab95419970575b42af7541df", size = 198926 }, +version = "7.6.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/5b/d2/c25011f4d036cf7e8acbbee07a8e09e9018390aee25ba085596c4b83d510/coverage-7.6.9.tar.gz", hash = "sha256:4a8d8977b0c6ef5aeadcb644da9e69ae0dcfe66ec7f368c89c72e058bd71164d", size = 801710 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/49/f3/f830fb53bf7e4f1d5542756f61d9b740352a188f43854aab9409c8cdeb18/coverage-7.6.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:85d9636f72e8991a1706b2b55b06c27545448baf9f6dbf51c4004609aacd7dcb", size = 207024 }, + { url = "https://files.pythonhosted.org/packages/4e/e3/ea5632a3a6efd00ab0a791adc0f3e48512097a757ee7dcbee5505f57bafa/coverage-7.6.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:608a7fd78c67bee8936378299a6cb9f5149bb80238c7a566fc3e6717a4e68710", size = 207463 }, + { url = "https://files.pythonhosted.org/packages/e4/ae/18ff8b5580e27e62ebcc888082aa47694c2772782ea7011ddf58e377e98f/coverage-7.6.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96d636c77af18b5cb664ddf12dab9b15a0cfe9c0bde715da38698c8cea748bfa", size = 235902 }, + { url = "https://files.pythonhosted.org/packages/6a/52/57030a8d15ab935624d298360f0a6704885578e39f7b4f68569e59f5902d/coverage-7.6.9-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d75cded8a3cff93da9edc31446872d2997e327921d8eed86641efafd350e1df1", size = 233806 }, + { url = "https://files.pythonhosted.org/packages/d0/c5/4466602195ecaced298d55af1e29abceb812addabefd5bd9116a204f7bab/coverage-7.6.9-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7b15f589593110ae767ce997775d645b47e5cbbf54fd322f8ebea6277466cec", size = 234966 }, + { url = "https://files.pythonhosted.org/packages/b0/1c/55552c3009b7bf96732e36548596ade771c87f89cf1f5a8e3975b33539b5/coverage-7.6.9-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:44349150f6811b44b25574839b39ae35291f6496eb795b7366fef3bd3cf112d3", size = 234029 }, + { url = "https://files.pythonhosted.org/packages/bb/7d/da3dca6878701182ea42c51df47a47c80eaef2a76f5aa3e891dc2a8cce3f/coverage-7.6.9-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:d891c136b5b310d0e702e186d70cd16d1119ea8927347045124cb286b29297e5", size = 232494 }, + { url = "https://files.pythonhosted.org/packages/28/cc/39de85ac1d5652bc34ff2bee39ae251b1fdcaae53fab4b44cab75a432bc0/coverage-7.6.9-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:db1dab894cc139f67822a92910466531de5ea6034ddfd2b11c0d4c6257168073", size = 233611 }, + { url = "https://files.pythonhosted.org/packages/d1/2b/7eb011a9378911088708f121825a71134d0c15fac96972a0ae7a8f5a4049/coverage-7.6.9-cp310-cp310-win32.whl", hash = "sha256:41ff7b0da5af71a51b53f501a3bac65fb0ec311ebed1632e58fc6107f03b9198", size = 209712 }, + { url = "https://files.pythonhosted.org/packages/5b/35/c3f40a2269b416db34ce1dedf682a7132c26f857e33596830fa4deebabf9/coverage-7.6.9-cp310-cp310-win_amd64.whl", hash = "sha256:35371f8438028fdccfaf3570b31d98e8d9eda8bb1d6ab9473f5a390969e98717", size = 210553 }, + { url = "https://files.pythonhosted.org/packages/b1/91/b3dc2f7f38b5cca1236ab6bbb03e84046dd887707b4ec1db2baa47493b3b/coverage-7.6.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:932fc826442132dde42ee52cf66d941f581c685a6313feebed358411238f60f9", size = 207133 }, + { url = "https://files.pythonhosted.org/packages/0d/2b/53fd6cb34d443429a92b3ec737f4953627e38b3bee2a67a3c03425ba8573/coverage-7.6.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:085161be5f3b30fd9b3e7b9a8c301f935c8313dcf928a07b116324abea2c1c2c", size = 207577 }, + { url = "https://files.pythonhosted.org/packages/74/f2/68edb1e6826f980a124f21ea5be0d324180bf11de6fd1defcf9604f76df0/coverage-7.6.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ccc660a77e1c2bf24ddbce969af9447a9474790160cfb23de6be4fa88e3951c7", size = 239524 }, + { url = "https://files.pythonhosted.org/packages/d3/83/8fec0ee68c2c4a5ab5f0f8527277f84ed6f2bd1310ae8a19d0c5532253ab/coverage-7.6.9-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c69e42c892c018cd3c8d90da61d845f50a8243062b19d228189b0224150018a9", size = 236925 }, + { url = "https://files.pythonhosted.org/packages/8b/20/8f50e7c7ad271144afbc2c1c6ec5541a8c81773f59352f8db544cad1a0ec/coverage-7.6.9-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0824a28ec542a0be22f60c6ac36d679e0e262e5353203bea81d44ee81fe9c6d4", size = 238792 }, + { url = "https://files.pythonhosted.org/packages/6f/62/4ac2e5ad9e7a5c9ec351f38947528e11541f1f00e8a0cdce56f1ba7ae301/coverage-7.6.9-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4401ae5fc52ad8d26d2a5d8a7428b0f0c72431683f8e63e42e70606374c311a1", size = 237682 }, + { url = "https://files.pythonhosted.org/packages/58/2f/9d2203f012f3b0533c73336c74134b608742be1ce475a5c72012573cfbb4/coverage-7.6.9-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:98caba4476a6c8d59ec1eb00c7dd862ba9beca34085642d46ed503cc2d440d4b", size = 236310 }, + { url = "https://files.pythonhosted.org/packages/33/6d/31f6ab0b4f0f781636075f757eb02141ea1b34466d9d1526dbc586ed7078/coverage-7.6.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ee5defd1733fd6ec08b168bd4f5387d5b322f45ca9e0e6c817ea6c4cd36313e3", size = 237096 }, + { url = "https://files.pythonhosted.org/packages/7d/fb/e14c38adebbda9ed8b5f7f8e03340ac05d68d27b24397f8d47478927a333/coverage-7.6.9-cp311-cp311-win32.whl", hash = "sha256:f2d1ec60d6d256bdf298cb86b78dd715980828f50c46701abc3b0a2b3f8a0dc0", size = 209682 }, + { url = "https://files.pythonhosted.org/packages/a4/11/a782af39b019066af83fdc0e8825faaccbe9d7b19a803ddb753114b429cc/coverage-7.6.9-cp311-cp311-win_amd64.whl", hash = "sha256:0d59fd927b1f04de57a2ba0137166d31c1a6dd9e764ad4af552912d70428c92b", size = 210542 }, + { url = "https://files.pythonhosted.org/packages/60/52/b16af8989a2daf0f80a88522bd8e8eed90b5fcbdecf02a6888f3e80f6ba7/coverage-7.6.9-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:99e266ae0b5d15f1ca8d278a668df6f51cc4b854513daab5cae695ed7b721cf8", size = 207325 }, + { url = "https://files.pythonhosted.org/packages/0f/79/6b7826fca8846c1216a113227b9f114ac3e6eacf168b4adcad0cb974aaca/coverage-7.6.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9901d36492009a0a9b94b20e52ebfc8453bf49bb2b27bca2c9706f8b4f5a554a", size = 207563 }, + { url = "https://files.pythonhosted.org/packages/a7/07/0bc73da0ccaf45d0d64ef86d33b7d7fdeef84b4c44bf6b85fb12c215c5a6/coverage-7.6.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abd3e72dd5b97e3af4246cdada7738ef0e608168de952b837b8dd7e90341f015", size = 240580 }, + { url = "https://files.pythonhosted.org/packages/71/8a/9761f409910961647d892454687cedbaccb99aae828f49486734a82ede6e/coverage-7.6.9-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff74026a461eb0660366fb01c650c1d00f833a086b336bdad7ab00cc952072b3", size = 237613 }, + { url = "https://files.pythonhosted.org/packages/8b/10/ee7d696a17ac94f32f2dbda1e17e730bf798ae9931aec1fc01c1944cd4de/coverage-7.6.9-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65dad5a248823a4996724a88eb51d4b31587aa7aa428562dbe459c684e5787ae", size = 239684 }, + { url = "https://files.pythonhosted.org/packages/16/60/aa1066040d3c52fff051243c2d6ccda264da72dc6d199d047624d395b2b2/coverage-7.6.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:22be16571504c9ccea919fcedb459d5ab20d41172056206eb2994e2ff06118a4", size = 239112 }, + { url = "https://files.pythonhosted.org/packages/4e/e5/69f35344c6f932ba9028bf168d14a79fedb0dd4849b796d43c81ce75a3c9/coverage-7.6.9-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0f957943bc718b87144ecaee70762bc2bc3f1a7a53c7b861103546d3a403f0a6", size = 237428 }, + { url = "https://files.pythonhosted.org/packages/32/20/adc895523c4a28f63441b8ac645abd74f9bdd499d2d175bef5b41fc7f92d/coverage-7.6.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0ae1387db4aecb1f485fb70a6c0148c6cdaebb6038f1d40089b1fc84a5db556f", size = 239098 }, + { url = "https://files.pythonhosted.org/packages/a9/a6/e0e74230c9bb3549ec8ffc137cfd16ea5d56e993d6bffed2218bff6187e3/coverage-7.6.9-cp312-cp312-win32.whl", hash = "sha256:1a330812d9cc7ac2182586f6d41b4d0fadf9be9049f350e0efb275c8ee8eb692", size = 209940 }, + { url = "https://files.pythonhosted.org/packages/3e/18/cb5b88349d4aa2f41ec78d65f92ea32572b30b3f55bc2b70e87578b8f434/coverage-7.6.9-cp312-cp312-win_amd64.whl", hash = "sha256:b12c6b18269ca471eedd41c1b6a1065b2f7827508edb9a7ed5555e9a56dcfc97", size = 210726 }, + { url = "https://files.pythonhosted.org/packages/35/26/9abab6539d2191dbda2ce8c97b67d74cbfc966cc5b25abb880ffc7c459bc/coverage-7.6.9-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:899b8cd4781c400454f2f64f7776a5d87bbd7b3e7f7bda0cb18f857bb1334664", size = 207356 }, + { url = "https://files.pythonhosted.org/packages/44/da/d49f19402240c93453f606e660a6676a2a1fbbaa6870cc23207790aa9697/coverage-7.6.9-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:61f70dc68bd36810972e55bbbe83674ea073dd1dcc121040a08cdf3416c5349c", size = 207614 }, + { url = "https://files.pythonhosted.org/packages/da/e6/93bb9bf85497816082ec8da6124c25efa2052bd4c887dd3b317b91990c9e/coverage-7.6.9-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a289d23d4c46f1a82d5db4abeb40b9b5be91731ee19a379d15790e53031c014", size = 240129 }, + { url = "https://files.pythonhosted.org/packages/df/65/6a824b9406fe066835c1274a9949e06f084d3e605eb1a602727a27ec2fe3/coverage-7.6.9-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7e216d8044a356fc0337c7a2a0536d6de07888d7bcda76febcb8adc50bdbbd00", size = 237276 }, + { url = "https://files.pythonhosted.org/packages/9f/79/6c7a800913a9dd23ac8c8da133ebb556771a5a3d4df36b46767b1baffd35/coverage-7.6.9-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3c026eb44f744acaa2bda7493dad903aa5bf5fc4f2554293a798d5606710055d", size = 239267 }, + { url = "https://files.pythonhosted.org/packages/57/e7/834d530293fdc8a63ba8ff70033d5182022e569eceb9aec7fc716b678a39/coverage-7.6.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e77363e8425325384f9d49272c54045bbed2f478e9dd698dbc65dbc37860eb0a", size = 238887 }, + { url = "https://files.pythonhosted.org/packages/15/05/ec9d6080852984f7163c96984444e7cd98b338fd045b191064f943ee1c08/coverage-7.6.9-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:777abfab476cf83b5177b84d7486497e034eb9eaea0d746ce0c1268c71652077", size = 236970 }, + { url = "https://files.pythonhosted.org/packages/0a/d8/775937670b93156aec29f694ce37f56214ed7597e1a75b4083ee4c32121c/coverage-7.6.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:447af20e25fdbe16f26e84eb714ba21d98868705cb138252d28bc400381f6ffb", size = 238831 }, + { url = "https://files.pythonhosted.org/packages/f4/58/88551cb7fdd5ec98cb6044e8814e38583436b14040a5ece15349c44c8f7c/coverage-7.6.9-cp313-cp313-win32.whl", hash = "sha256:d872ec5aeb086cbea771c573600d47944eea2dcba8be5f3ee649bfe3cb8dc9ba", size = 210000 }, + { url = "https://files.pythonhosted.org/packages/b7/12/cfbf49b95120872785ff8d56ab1c7fe3970a65e35010c311d7dd35c5fd00/coverage-7.6.9-cp313-cp313-win_amd64.whl", hash = "sha256:fd1213c86e48dfdc5a0cc676551db467495a95a662d2396ecd58e719191446e1", size = 210753 }, + { url = "https://files.pythonhosted.org/packages/7c/68/c1cb31445599b04bde21cbbaa6d21b47c5823cdfef99eae470dfce49c35a/coverage-7.6.9-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:ba9e7484d286cd5a43744e5f47b0b3fb457865baf07bafc6bee91896364e1419", size = 208091 }, + { url = "https://files.pythonhosted.org/packages/11/73/84b02c6b19c4a11eb2d5b5eabe926fb26c21c080e0852f5e5a4f01165f9e/coverage-7.6.9-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:e5ea1cf0872ee455c03e5674b5bca5e3e68e159379c1af0903e89f5eba9ccc3a", size = 208369 }, + { url = "https://files.pythonhosted.org/packages/de/e0/ae5d878b72ff26df2e994a5c5b1c1f6a7507d976b23beecb1ed4c85411ef/coverage-7.6.9-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d10e07aa2b91835d6abec555ec8b2733347956991901eea6ffac295f83a30e4", size = 251089 }, + { url = "https://files.pythonhosted.org/packages/ab/9c/0aaac011aef95a93ef3cb2fba3fde30bc7e68a6635199ed469b1f5ea355a/coverage-7.6.9-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:13a9e2d3ee855db3dd6ea1ba5203316a1b1fd8eaeffc37c5b54987e61e4194ae", size = 246806 }, + { url = "https://files.pythonhosted.org/packages/f8/19/4d5d3ae66938a7dcb2f58cef3fa5386f838f469575b0bb568c8cc9e3a33d/coverage-7.6.9-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c38bf15a40ccf5619fa2fe8f26106c7e8e080d7760aeccb3722664c8656b030", size = 249164 }, + { url = "https://files.pythonhosted.org/packages/b3/0b/4ee8a7821f682af9ad440ae3c1e379da89a998883271f088102d7ca2473d/coverage-7.6.9-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:d5275455b3e4627c8e7154feaf7ee0743c2e7af82f6e3b561967b1cca755a0be", size = 248642 }, + { url = "https://files.pythonhosted.org/packages/8a/12/36ff1d52be18a16b4700f561852e7afd8df56363a5edcfb04cf26a0e19e0/coverage-7.6.9-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:8f8770dfc6e2c6a2d4569f411015c8d751c980d17a14b0530da2d7f27ffdd88e", size = 246516 }, + { url = "https://files.pythonhosted.org/packages/43/d0/8e258f6c3a527c1655602f4f576215e055ac704de2d101710a71a2affac2/coverage-7.6.9-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:8d2dfa71665a29b153a9681edb1c8d9c1ea50dfc2375fb4dac99ea7e21a0bcd9", size = 247783 }, + { url = "https://files.pythonhosted.org/packages/a9/0d/1e4a48d289429d38aae3babdfcadbf35ca36bdcf3efc8f09b550a845bdb5/coverage-7.6.9-cp313-cp313t-win32.whl", hash = "sha256:5e6b86b5847a016d0fbd31ffe1001b63355ed309651851295315031ea7eb5a9b", size = 210646 }, + { url = "https://files.pythonhosted.org/packages/26/74/b0729f196f328ac55e42b1e22ec2f16d8bcafe4b8158a26ec9f1cdd1d93e/coverage-7.6.9-cp313-cp313t-win_amd64.whl", hash = "sha256:97ddc94d46088304772d21b060041c97fc16bdda13c6c7f9d8fcd8d5ae0d8611", size = 211815 }, + { url = "https://files.pythonhosted.org/packages/15/0e/4ac9035ee2ee08d2b703fdad2d84283ec0bad3b46eb4ad6affb150174cb6/coverage-7.6.9-pp39.pp310-none-any.whl", hash = "sha256:f3ca78518bc6bc92828cd11867b121891d75cae4ea9e908d72030609b996db1b", size = 199270 }, ] [package.optional-dependencies] @@ -125,11 +121,11 @@ toml = [ [[package]] name = "distlib" -version = "0.3.8" +version = "0.3.9" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c4/91/e2df406fb4efacdf46871c25cde65d3c6ee5e173b7e5a4547a47bae91920/distlib-0.3.8.tar.gz", hash = "sha256:1530ea13e350031b6312d8580ddb6b27a104275a31106523b8f123787f494f64", size = 609931 } +sdist = { url = "https://files.pythonhosted.org/packages/0d/dd/1bec4c5ddb504ca60fc29472f3d27e8d4da1257a854e1d96742f15c1d02d/distlib-0.3.9.tar.gz", hash = "sha256:a60f20dea646b8a33f3e7772f74dc0b2d0772d2837ee1342a00645c81edf9403", size = 613923 } wheels = [ - { url = "https://files.pythonhosted.org/packages/8e/41/9307e4f5f9976bc8b7fea0b66367734e8faf3ec84bc0d412d8cfabbb66cd/distlib-0.3.8-py2.py3-none-any.whl", hash = "sha256:034db59a0b96f8ca18035f36290806a9a6e6bd9d1ff91e45a7f172eb17e51784", size = 468850 }, + { url = "https://files.pythonhosted.org/packages/91/a1/cf2472db20f7ce4a6be1253a81cfdf85ad9c7885ffbed7047fb72c24cf87/distlib-0.3.9-py2.py3-none-any.whl", hash = "sha256:47f8c22fd27c27e25a65601af709b38e4f0a45ea4fc2e710f65755fa8caaaf87", size = 468973 }, ] [[package]] @@ -143,11 +139,11 @@ wheels = [ [[package]] name = "filelock" -version = "3.15.4" +version = "3.16.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/08/dd/49e06f09b6645156550fb9aee9cc1e59aba7efbc972d665a1bd6ae0435d4/filelock-3.15.4.tar.gz", hash = "sha256:2207938cbc1844345cb01a5a95524dae30f0ce089eba5b00378295a17e3e90cb", size = 18007 } +sdist = { url = "https://files.pythonhosted.org/packages/9d/db/3ef5bb276dae18d6ec2124224403d1d67bccdbefc17af4cc8f553e341ab1/filelock-3.16.1.tar.gz", hash = "sha256:c249fbfcd5db47e5e2d6d62198e565475ee65e4831e2561c8e313fa7eb961435", size = 18037 } wheels = [ - { url = "https://files.pythonhosted.org/packages/ae/f0/48285f0262fe47103a4a45972ed2f9b93e4c80b8fd609fa98da78b2a5706/filelock-3.15.4-py3-none-any.whl", hash = "sha256:6ca1fffae96225dab4c6eaf1c4f4f28cd2568d3ec2a44e15a08520504de468e7", size = 16159 }, + { url = "https://files.pythonhosted.org/packages/b9/f8/feced7779d755758a52d1f6635d990b8d98dc0a29fa568bbe0625f18fdf3/filelock-3.16.1-py3-none-any.whl", hash = "sha256:2082e5703d51fbf98ea75855d9d5527e33d8ff23099bec374a134febee6946b0", size = 16163 }, ] [[package]] @@ -161,7 +157,7 @@ wheels = [ [[package]] name = "hugr" -version = "0.9.0" +version = "0.10.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "graphviz" }, @@ -169,32 +165,32 @@ dependencies = [ { name = "pydantic-extra-types" }, { name = "semver" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/7a/ea/faf7545e3d3ffd4bc725bfcd622c60303e8cde0e33d847b0c7bcf1a3bb7c/hugr-0.9.0.tar.gz", hash = "sha256:ddb5adc674192520499e624e8f4650f465e059ab3f9048550c9c147fc9bf239a", size = 126531 } +sdist = { url = "https://files.pythonhosted.org/packages/a6/ef/9cd410ff0e3a92c5e88da2ef3c0e051dd971f4f6c5577873c7901ed31dd5/hugr-0.10.0.tar.gz", hash = "sha256:11e5a80ebd4e31cad0cb04d408cdd93a094e6fb817dd81481eedac5a58f86ff7", size = 129441 } wheels = [ - { url = "https://files.pythonhosted.org/packages/08/ad/b82f6cb95452699c29582cef3daaa2c281f86efd91d1d8d88895c47bb5b8/hugr-0.9.0-py3-none-any.whl", hash = "sha256:703da84a1b2fdb192f4ddce6daf9446dac24fb2377b3b259cced6899733530a5", size = 80011 }, + { url = "https://files.pythonhosted.org/packages/f2/71/83556457cfe27f4a1613cd49041cfe4c6e9e087a53b5beec48a8d709c36d/hugr-0.10.0-py3-none-any.whl", hash = "sha256:591e252ef3e4182fd0de99274ebb4999ddd9572a0ec823519de154e4bd9f14ec", size = 83000 }, ] [[package]] name = "hypothesis" -version = "6.111.1" +version = "6.122.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "attrs" }, { name = "exceptiongroup", marker = "python_full_version < '3.11'" }, { name = "sortedcontainers" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/9d/3c/e2da74de2970cac88b956739c6d9b58cab4b025c3265b374863848973b6f/hypothesis-6.111.1.tar.gz", hash = "sha256:6ab6185a858fa692bf125c0d0a936134edc318bee01c05e407c71c9ead0b61c5", size = 406801 } +sdist = { url = "https://files.pythonhosted.org/packages/5a/21/c4c755ad5763f4c882a855b9966ac019c2314e5578b5f5eb39d9fe9fe64d/hypothesis-6.122.3.tar.gz", hash = "sha256:f4c927ce0ec739fa6266e4572949d0b54e24a14601a2bc5fec8f78e16af57918", size = 414395 } wheels = [ - { url = "https://files.pythonhosted.org/packages/00/22/93be4594079921e15dae2339288d44b25b4d8d65e60ce413012af020e8a2/hypothesis-6.111.1-py3-none-any.whl", hash = "sha256:9422adbac4b2104f6cf92dc6604b5c9df975efc08ffc7145ecc39bc617243835", size = 467518 }, + { url = "https://files.pythonhosted.org/packages/66/cb/44fe7e78c3cfbcb01f905b3b252eff6396e2f2e8e88b2d27b5140a6ac474/hypothesis-6.122.3-py3-none-any.whl", hash = "sha256:f0f57036d3b95b979491602b32c95b6725c3af678cccb6165d8de330857f3c83", size = 475651 }, ] [[package]] name = "identify" -version = "2.6.0" +version = "2.6.3" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/32/f4/8e8f7db397a7ce20fbdeac5f25adaf567fc362472432938d25556008e03a/identify-2.6.0.tar.gz", hash = "sha256:cb171c685bdc31bcc4c1734698736a7d5b6c8bf2e0c15117f4d469c8640ae5cf", size = 99116 } +sdist = { url = "https://files.pythonhosted.org/packages/1a/5f/05f0d167be94585d502b4adf8c7af31f1dc0b1c7e14f9938a88fdbbcf4a7/identify-2.6.3.tar.gz", hash = "sha256:62f5dae9b5fef52c84cc188514e9ea4f3f636b1d8799ab5ebc475471f9e47a02", size = 99179 } wheels = [ - { url = "https://files.pythonhosted.org/packages/24/6c/a4f39abe7f19600b74528d0c717b52fff0b300bb0161081510d39c53cb00/identify-2.6.0-py2.py3-none-any.whl", hash = "sha256:e79ae4406387a9d300332b5fd366d8994f1525e8414984e1a59e058b2eda2dd0", size = 98962 }, + { url = "https://files.pythonhosted.org/packages/c9/f5/09644a3ad803fae9eca8efa17e1f2aef380c7f0b02f7ec4e8d446e51d64a/identify-2.6.3-py2.py3-none-any.whl", hash = "sha256:9edba65473324c2ea9684b1f944fe3191db3345e50b6d04571d10ed164f8d7bd", size = 99049 }, ] [[package]] @@ -229,63 +225,83 @@ wheels = [ [[package]] name = "markupsafe" -version = "2.1.5" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/87/5b/aae44c6655f3801e81aa3eef09dbbf012431987ba564d7231722f68df02d/MarkupSafe-2.1.5.tar.gz", hash = "sha256:d283d37a890ba4c1ae73ffadf8046435c76e7bc2247bbb63c00bd1a709c6544b", size = 19384 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e4/54/ad5eb37bf9d51800010a74e4665425831a9db4e7c4e0fde4352e391e808e/MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a17a92de5231666cfbe003f0e4b9b3a7ae3afb1ec2845aadc2bacc93ff85febc", size = 18206 }, - { url = "https://files.pythonhosted.org/packages/6a/4a/a4d49415e600bacae038c67f9fecc1d5433b9d3c71a4de6f33537b89654c/MarkupSafe-2.1.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:72b6be590cc35924b02c78ef34b467da4ba07e4e0f0454a2c5907f473fc50ce5", size = 14079 }, - { url = "https://files.pythonhosted.org/packages/0a/7b/85681ae3c33c385b10ac0f8dd025c30af83c78cec1c37a6aa3b55e67f5ec/MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e61659ba32cf2cf1481e575d0462554625196a1f2fc06a1c777d3f48e8865d46", size = 26620 }, - { url = "https://files.pythonhosted.org/packages/7c/52/2b1b570f6b8b803cef5ac28fdf78c0da318916c7d2fe9402a84d591b394c/MarkupSafe-2.1.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2174c595a0d73a3080ca3257b40096db99799265e1c27cc5a610743acd86d62f", size = 25818 }, - { url = "https://files.pythonhosted.org/packages/29/fe/a36ba8c7ca55621620b2d7c585313efd10729e63ef81e4e61f52330da781/MarkupSafe-2.1.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ae2ad8ae6ebee9d2d94b17fb62763125f3f374c25618198f40cbb8b525411900", size = 25493 }, - { url = "https://files.pythonhosted.org/packages/60/ae/9c60231cdfda003434e8bd27282b1f4e197ad5a710c14bee8bea8a9ca4f0/MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:075202fa5b72c86ad32dc7d0b56024ebdbcf2048c0ba09f1cde31bfdd57bcfff", size = 30630 }, - { url = "https://files.pythonhosted.org/packages/65/dc/1510be4d179869f5dafe071aecb3f1f41b45d37c02329dfba01ff59e5ac5/MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:598e3276b64aff0e7b3451b72e94fa3c238d452e7ddcd893c3ab324717456bad", size = 29745 }, - { url = "https://files.pythonhosted.org/packages/30/39/8d845dd7d0b0613d86e0ef89549bfb5f61ed781f59af45fc96496e897f3a/MarkupSafe-2.1.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fce659a462a1be54d2ffcacea5e3ba2d74daa74f30f5f143fe0c58636e355fdd", size = 30021 }, - { url = "https://files.pythonhosted.org/packages/c7/5c/356a6f62e4f3c5fbf2602b4771376af22a3b16efa74eb8716fb4e328e01e/MarkupSafe-2.1.5-cp310-cp310-win32.whl", hash = "sha256:d9fad5155d72433c921b782e58892377c44bd6252b5af2f67f16b194987338a4", size = 16659 }, - { url = "https://files.pythonhosted.org/packages/69/48/acbf292615c65f0604a0c6fc402ce6d8c991276e16c80c46a8f758fbd30c/MarkupSafe-2.1.5-cp310-cp310-win_amd64.whl", hash = "sha256:bf50cd79a75d181c9181df03572cdce0fbb75cc353bc350712073108cba98de5", size = 17213 }, - { url = "https://files.pythonhosted.org/packages/11/e7/291e55127bb2ae67c64d66cef01432b5933859dfb7d6949daa721b89d0b3/MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:629ddd2ca402ae6dbedfceeba9c46d5f7b2a61d9749597d4307f943ef198fc1f", size = 18219 }, - { url = "https://files.pythonhosted.org/packages/6b/cb/aed7a284c00dfa7c0682d14df85ad4955a350a21d2e3b06d8240497359bf/MarkupSafe-2.1.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:5b7b716f97b52c5a14bffdf688f971b2d5ef4029127f1ad7a513973cfd818df2", size = 14098 }, - { url = "https://files.pythonhosted.org/packages/1c/cf/35fe557e53709e93feb65575c93927942087e9b97213eabc3fe9d5b25a55/MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec585f69cec0aa07d945b20805be741395e28ac1627333b1c5b0105962ffced", size = 29014 }, - { url = "https://files.pythonhosted.org/packages/97/18/c30da5e7a0e7f4603abfc6780574131221d9148f323752c2755d48abad30/MarkupSafe-2.1.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91c037585eba9095565a3556f611e3cbfaa42ca1e865f7b8015fe5c7336d5a5", size = 28220 }, - { url = "https://files.pythonhosted.org/packages/0c/40/2e73e7d532d030b1e41180807a80d564eda53babaf04d65e15c1cf897e40/MarkupSafe-2.1.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7502934a33b54030eaf1194c21c692a534196063db72176b0c4028e140f8f32c", size = 27756 }, - { url = "https://files.pythonhosted.org/packages/18/46/5dca760547e8c59c5311b332f70605d24c99d1303dd9a6e1fc3ed0d73561/MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:0e397ac966fdf721b2c528cf028494e86172b4feba51d65f81ffd65c63798f3f", size = 33988 }, - { url = "https://files.pythonhosted.org/packages/6d/c5/27febe918ac36397919cd4a67d5579cbbfa8da027fa1238af6285bb368ea/MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:c061bb86a71b42465156a3ee7bd58c8c2ceacdbeb95d05a99893e08b8467359a", size = 32718 }, - { url = "https://files.pythonhosted.org/packages/f8/81/56e567126a2c2bc2684d6391332e357589a96a76cb9f8e5052d85cb0ead8/MarkupSafe-2.1.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3a57fdd7ce31c7ff06cdfbf31dafa96cc533c21e443d57f5b1ecc6cdc668ec7f", size = 33317 }, - { url = "https://files.pythonhosted.org/packages/00/0b/23f4b2470accb53285c613a3ab9ec19dc944eaf53592cb6d9e2af8aa24cc/MarkupSafe-2.1.5-cp311-cp311-win32.whl", hash = "sha256:397081c1a0bfb5124355710fe79478cdbeb39626492b15d399526ae53422b906", size = 16670 }, - { url = "https://files.pythonhosted.org/packages/b7/a2/c78a06a9ec6d04b3445a949615c4c7ed86a0b2eb68e44e7541b9d57067cc/MarkupSafe-2.1.5-cp311-cp311-win_amd64.whl", hash = "sha256:2b7c57a4dfc4f16f7142221afe5ba4e093e09e728ca65c51f5620c9aaeb9a617", size = 17224 }, - { url = "https://files.pythonhosted.org/packages/53/bd/583bf3e4c8d6a321938c13f49d44024dbe5ed63e0a7ba127e454a66da974/MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:8dec4936e9c3100156f8a2dc89c4b88d5c435175ff03413b443469c7c8c5f4d1", size = 18215 }, - { url = "https://files.pythonhosted.org/packages/48/d6/e7cd795fc710292c3af3a06d80868ce4b02bfbbf370b7cee11d282815a2a/MarkupSafe-2.1.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:3c6b973f22eb18a789b1460b4b91bf04ae3f0c4234a0a6aa6b0a92f6f7b951d4", size = 14069 }, - { url = "https://files.pythonhosted.org/packages/51/b5/5d8ec796e2a08fc814a2c7d2584b55f889a55cf17dd1a90f2beb70744e5c/MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac07bad82163452a6884fe8fa0963fb98c2346ba78d779ec06bd7a6262132aee", size = 29452 }, - { url = "https://files.pythonhosted.org/packages/0a/0d/2454f072fae3b5a137c119abf15465d1771319dfe9e4acbb31722a0fff91/MarkupSafe-2.1.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5dfb42c4604dddc8e4305050aa6deb084540643ed5804d7455b5df8fe16f5e5", size = 28462 }, - { url = "https://files.pythonhosted.org/packages/2d/75/fd6cb2e68780f72d47e6671840ca517bda5ef663d30ada7616b0462ad1e3/MarkupSafe-2.1.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ea3d8a3d18833cf4304cd2fc9cbb1efe188ca9b5efef2bdac7adc20594a0e46b", size = 27869 }, - { url = "https://files.pythonhosted.org/packages/b0/81/147c477391c2750e8fc7705829f7351cf1cd3be64406edcf900dc633feb2/MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:d050b3361367a06d752db6ead6e7edeb0009be66bc3bae0ee9d97fb326badc2a", size = 33906 }, - { url = "https://files.pythonhosted.org/packages/8b/ff/9a52b71839d7a256b563e85d11050e307121000dcebc97df120176b3ad93/MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bec0a414d016ac1a18862a519e54b2fd0fc8bbfd6890376898a6c0891dd82e9f", size = 32296 }, - { url = "https://files.pythonhosted.org/packages/88/07/2dc76aa51b481eb96a4c3198894f38b480490e834479611a4053fbf08623/MarkupSafe-2.1.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:58c98fee265677f63a4385256a6d7683ab1832f3ddd1e66fe948d5880c21a169", size = 33038 }, - { url = "https://files.pythonhosted.org/packages/96/0c/620c1fb3661858c0e37eb3cbffd8c6f732a67cd97296f725789679801b31/MarkupSafe-2.1.5-cp312-cp312-win32.whl", hash = "sha256:8590b4ae07a35970728874632fed7bd57b26b0102df2d2b233b6d9d82f6c62ad", size = 16572 }, - { url = "https://files.pythonhosted.org/packages/3f/14/c3554d512d5f9100a95e737502f4a2323a1959f6d0d01e0d0997b35f7b10/MarkupSafe-2.1.5-cp312-cp312-win_amd64.whl", hash = "sha256:823b65d8706e32ad2df51ed89496147a42a2a6e01c13cfb6ffb8b1e92bc910bb", size = 17127 }, +version = "3.0.2" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/b2/97/5d42485e71dfc078108a86d6de8fa46db44a1a9295e89c5d6d4a06e23a62/markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0", size = 20537 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/04/90/d08277ce111dd22f77149fd1a5d4653eeb3b3eaacbdfcbae5afb2600eebd/MarkupSafe-3.0.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7e94c425039cde14257288fd61dcfb01963e658efbc0ff54f5306b06054700f8", size = 14357 }, + { url = "https://files.pythonhosted.org/packages/04/e1/6e2194baeae0bca1fae6629dc0cbbb968d4d941469cbab11a3872edff374/MarkupSafe-3.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9e2d922824181480953426608b81967de705c3cef4d1af983af849d7bd619158", size = 12393 }, + { url = "https://files.pythonhosted.org/packages/1d/69/35fa85a8ece0a437493dc61ce0bb6d459dcba482c34197e3efc829aa357f/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38a9ef736c01fccdd6600705b09dc574584b89bea478200c5fbf112a6b0d5579", size = 21732 }, + { url = "https://files.pythonhosted.org/packages/22/35/137da042dfb4720b638d2937c38a9c2df83fe32d20e8c8f3185dbfef05f7/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bbcb445fa71794da8f178f0f6d66789a28d7319071af7a496d4d507ed566270d", size = 20866 }, + { url = "https://files.pythonhosted.org/packages/29/28/6d029a903727a1b62edb51863232152fd335d602def598dade38996887f0/MarkupSafe-3.0.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57cb5a3cf367aeb1d316576250f65edec5bb3be939e9247ae594b4bcbc317dfb", size = 20964 }, + { url = "https://files.pythonhosted.org/packages/cc/cd/07438f95f83e8bc028279909d9c9bd39e24149b0d60053a97b2bc4f8aa51/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3809ede931876f5b2ec92eef964286840ed3540dadf803dd570c3b7e13141a3b", size = 21977 }, + { url = "https://files.pythonhosted.org/packages/29/01/84b57395b4cc062f9c4c55ce0df7d3108ca32397299d9df00fedd9117d3d/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e07c3764494e3776c602c1e78e298937c3315ccc9043ead7e685b7f2b8d47b3c", size = 21366 }, + { url = "https://files.pythonhosted.org/packages/bd/6e/61ebf08d8940553afff20d1fb1ba7294b6f8d279df9fd0c0db911b4bbcfd/MarkupSafe-3.0.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b424c77b206d63d500bcb69fa55ed8d0e6a3774056bdc4839fc9298a7edca171", size = 21091 }, + { url = "https://files.pythonhosted.org/packages/11/23/ffbf53694e8c94ebd1e7e491de185124277964344733c45481f32ede2499/MarkupSafe-3.0.2-cp310-cp310-win32.whl", hash = "sha256:fcabf5ff6eea076f859677f5f0b6b5c1a51e70a376b0579e0eadef8db48c6b50", size = 15065 }, + { url = "https://files.pythonhosted.org/packages/44/06/e7175d06dd6e9172d4a69a72592cb3f7a996a9c396eee29082826449bbc3/MarkupSafe-3.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:6af100e168aa82a50e186c82875a5893c5597a0c1ccdb0d8b40240b1f28b969a", size = 15514 }, + { url = "https://files.pythonhosted.org/packages/6b/28/bbf83e3f76936960b850435576dd5e67034e200469571be53f69174a2dfd/MarkupSafe-3.0.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:9025b4018f3a1314059769c7bf15441064b2207cb3f065e6ea1e7359cb46db9d", size = 14353 }, + { url = "https://files.pythonhosted.org/packages/6c/30/316d194b093cde57d448a4c3209f22e3046c5bb2fb0820b118292b334be7/MarkupSafe-3.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:93335ca3812df2f366e80509ae119189886b0f3c2b81325d39efdb84a1e2ae93", size = 12392 }, + { url = "https://files.pythonhosted.org/packages/f2/96/9cdafba8445d3a53cae530aaf83c38ec64c4d5427d975c974084af5bc5d2/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2cb8438c3cbb25e220c2ab33bb226559e7afb3baec11c4f218ffa7308603c832", size = 23984 }, + { url = "https://files.pythonhosted.org/packages/f1/a4/aefb044a2cd8d7334c8a47d3fb2c9f328ac48cb349468cc31c20b539305f/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a123e330ef0853c6e822384873bef7507557d8e4a082961e1defa947aa59ba84", size = 23120 }, + { url = "https://files.pythonhosted.org/packages/8d/21/5e4851379f88f3fad1de30361db501300d4f07bcad047d3cb0449fc51f8c/MarkupSafe-3.0.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e084f686b92e5b83186b07e8a17fc09e38fff551f3602b249881fec658d3eca", size = 23032 }, + { url = "https://files.pythonhosted.org/packages/00/7b/e92c64e079b2d0d7ddf69899c98842f3f9a60a1ae72657c89ce2655c999d/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8213e09c917a951de9d09ecee036d5c7d36cb6cb7dbaece4c71a60d79fb9798", size = 24057 }, + { url = "https://files.pythonhosted.org/packages/f9/ac/46f960ca323037caa0a10662ef97d0a4728e890334fc156b9f9e52bcc4ca/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:5b02fb34468b6aaa40dfc198d813a641e3a63b98c2b05a16b9f80b7ec314185e", size = 23359 }, + { url = "https://files.pythonhosted.org/packages/69/84/83439e16197337b8b14b6a5b9c2105fff81d42c2a7c5b58ac7b62ee2c3b1/MarkupSafe-3.0.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0bff5e0ae4ef2e1ae4fdf2dfd5b76c75e5c2fa4132d05fc1b0dabcd20c7e28c4", size = 23306 }, + { url = "https://files.pythonhosted.org/packages/9a/34/a15aa69f01e2181ed8d2b685c0d2f6655d5cca2c4db0ddea775e631918cd/MarkupSafe-3.0.2-cp311-cp311-win32.whl", hash = "sha256:6c89876f41da747c8d3677a2b540fb32ef5715f97b66eeb0c6b66f5e3ef6f59d", size = 15094 }, + { url = "https://files.pythonhosted.org/packages/da/b8/3a3bd761922d416f3dc5d00bfbed11f66b1ab89a0c2b6e887240a30b0f6b/MarkupSafe-3.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:70a87b411535ccad5ef2f1df5136506a10775d267e197e4cf531ced10537bd6b", size = 15521 }, + { url = "https://files.pythonhosted.org/packages/22/09/d1f21434c97fc42f09d290cbb6350d44eb12f09cc62c9476effdb33a18aa/MarkupSafe-3.0.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:9778bd8ab0a994ebf6f84c2b949e65736d5575320a17ae8984a77fab08db94cf", size = 14274 }, + { url = "https://files.pythonhosted.org/packages/6b/b0/18f76bba336fa5aecf79d45dcd6c806c280ec44538b3c13671d49099fdd0/MarkupSafe-3.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:846ade7b71e3536c4e56b386c2a47adf5741d2d8b94ec9dc3e92e5e1ee1e2225", size = 12348 }, + { url = "https://files.pythonhosted.org/packages/e0/25/dd5c0f6ac1311e9b40f4af06c78efde0f3b5cbf02502f8ef9501294c425b/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1c99d261bd2d5f6b59325c92c73df481e05e57f19837bdca8413b9eac4bd8028", size = 24149 }, + { url = "https://files.pythonhosted.org/packages/f3/f0/89e7aadfb3749d0f52234a0c8c7867877876e0a20b60e2188e9850794c17/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e17c96c14e19278594aa4841ec148115f9c7615a47382ecb6b82bd8fea3ab0c8", size = 23118 }, + { url = "https://files.pythonhosted.org/packages/d5/da/f2eeb64c723f5e3777bc081da884b414671982008c47dcc1873d81f625b6/MarkupSafe-3.0.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:88416bd1e65dcea10bc7569faacb2c20ce071dd1f87539ca2ab364bf6231393c", size = 22993 }, + { url = "https://files.pythonhosted.org/packages/da/0e/1f32af846df486dce7c227fe0f2398dc7e2e51d4a370508281f3c1c5cddc/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:2181e67807fc2fa785d0592dc2d6206c019b9502410671cc905d132a92866557", size = 24178 }, + { url = "https://files.pythonhosted.org/packages/c4/f6/bb3ca0532de8086cbff5f06d137064c8410d10779c4c127e0e47d17c0b71/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:52305740fe773d09cffb16f8ed0427942901f00adedac82ec8b67752f58a1b22", size = 23319 }, + { url = "https://files.pythonhosted.org/packages/a2/82/8be4c96ffee03c5b4a034e60a31294daf481e12c7c43ab8e34a1453ee48b/MarkupSafe-3.0.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ad10d3ded218f1039f11a75f8091880239651b52e9bb592ca27de44eed242a48", size = 23352 }, + { url = "https://files.pythonhosted.org/packages/51/ae/97827349d3fcffee7e184bdf7f41cd6b88d9919c80f0263ba7acd1bbcb18/MarkupSafe-3.0.2-cp312-cp312-win32.whl", hash = "sha256:0f4ca02bea9a23221c0182836703cbf8930c5e9454bacce27e767509fa286a30", size = 15097 }, + { url = "https://files.pythonhosted.org/packages/c1/80/a61f99dc3a936413c3ee4e1eecac96c0da5ed07ad56fd975f1a9da5bc630/MarkupSafe-3.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:8e06879fc22a25ca47312fbe7c8264eb0b662f6db27cb2d3bbbc74b1df4b9b87", size = 15601 }, + { url = "https://files.pythonhosted.org/packages/83/0e/67eb10a7ecc77a0c2bbe2b0235765b98d164d81600746914bebada795e97/MarkupSafe-3.0.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ba9527cdd4c926ed0760bc301f6728ef34d841f405abf9d4f959c478421e4efd", size = 14274 }, + { url = "https://files.pythonhosted.org/packages/2b/6d/9409f3684d3335375d04e5f05744dfe7e9f120062c9857df4ab490a1031a/MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f8b3d067f2e40fe93e1ccdd6b2e1d16c43140e76f02fb1319a05cf2b79d99430", size = 12352 }, + { url = "https://files.pythonhosted.org/packages/d2/f5/6eadfcd3885ea85fe2a7c128315cc1bb7241e1987443d78c8fe712d03091/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:569511d3b58c8791ab4c2e1285575265991e6d8f8700c7be0e88f86cb0672094", size = 24122 }, + { url = "https://files.pythonhosted.org/packages/0c/91/96cf928db8236f1bfab6ce15ad070dfdd02ed88261c2afafd4b43575e9e9/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:15ab75ef81add55874e7ab7055e9c397312385bd9ced94920f2802310c930396", size = 23085 }, + { url = "https://files.pythonhosted.org/packages/c2/cf/c9d56af24d56ea04daae7ac0940232d31d5a8354f2b457c6d856b2057d69/MarkupSafe-3.0.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f3818cb119498c0678015754eba762e0d61e5b52d34c8b13d770f0719f7b1d79", size = 22978 }, + { url = "https://files.pythonhosted.org/packages/2a/9f/8619835cd6a711d6272d62abb78c033bda638fdc54c4e7f4272cf1c0962b/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:cdb82a876c47801bb54a690c5ae105a46b392ac6099881cdfb9f6e95e4014c6a", size = 24208 }, + { url = "https://files.pythonhosted.org/packages/f9/bf/176950a1792b2cd2102b8ffeb5133e1ed984547b75db47c25a67d3359f77/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:cabc348d87e913db6ab4aa100f01b08f481097838bdddf7c7a84b7575b7309ca", size = 23357 }, + { url = "https://files.pythonhosted.org/packages/ce/4f/9a02c1d335caabe5c4efb90e1b6e8ee944aa245c1aaaab8e8a618987d816/MarkupSafe-3.0.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:444dcda765c8a838eaae23112db52f1efaf750daddb2d9ca300bcae1039adc5c", size = 23344 }, + { url = "https://files.pythonhosted.org/packages/ee/55/c271b57db36f748f0e04a759ace9f8f759ccf22b4960c270c78a394f58be/MarkupSafe-3.0.2-cp313-cp313-win32.whl", hash = "sha256:bcf3e58998965654fdaff38e58584d8937aa3096ab5354d493c77d1fdd66d7a1", size = 15101 }, + { url = "https://files.pythonhosted.org/packages/29/88/07df22d2dd4df40aba9f3e402e6dc1b8ee86297dddbad4872bd5e7b0094f/MarkupSafe-3.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:e6a2a455bd412959b57a172ce6328d2dd1f01cb2135efda2e4576e8a23fa3b0f", size = 15603 }, + { url = "https://files.pythonhosted.org/packages/62/6a/8b89d24db2d32d433dffcd6a8779159da109842434f1dd2f6e71f32f738c/MarkupSafe-3.0.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:b5a6b3ada725cea8a5e634536b1b01c30bcdcd7f9c6fff4151548d5bf6b3a36c", size = 14510 }, + { url = "https://files.pythonhosted.org/packages/7a/06/a10f955f70a2e5a9bf78d11a161029d278eeacbd35ef806c3fd17b13060d/MarkupSafe-3.0.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:a904af0a6162c73e3edcb969eeeb53a63ceeb5d8cf642fade7d39e7963a22ddb", size = 12486 }, + { url = "https://files.pythonhosted.org/packages/34/cf/65d4a571869a1a9078198ca28f39fba5fbb910f952f9dbc5220afff9f5e6/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa4e5faecf353ed117801a068ebab7b7e09ffb6e1d5e412dc852e0da018126c", size = 25480 }, + { url = "https://files.pythonhosted.org/packages/0c/e3/90e9651924c430b885468b56b3d597cabf6d72be4b24a0acd1fa0e12af67/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0ef13eaeee5b615fb07c9a7dadb38eac06a0608b41570d8ade51c56539e509d", size = 23914 }, + { url = "https://files.pythonhosted.org/packages/66/8c/6c7cf61f95d63bb866db39085150df1f2a5bd3335298f14a66b48e92659c/MarkupSafe-3.0.2-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d16a81a06776313e817c951135cf7340a3e91e8c1ff2fac444cfd75fffa04afe", size = 23796 }, + { url = "https://files.pythonhosted.org/packages/bb/35/cbe9238ec3f47ac9a7c8b3df7a808e7cb50fe149dc7039f5f454b3fba218/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:6381026f158fdb7c72a168278597a5e3a5222e83ea18f543112b2662a9b699c5", size = 25473 }, + { url = "https://files.pythonhosted.org/packages/e6/32/7621a4382488aa283cc05e8984a9c219abad3bca087be9ec77e89939ded9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:3d79d162e7be8f996986c064d1c7c817f6df3a77fe3d6859f6f9e7be4b8c213a", size = 24114 }, + { url = "https://files.pythonhosted.org/packages/0d/80/0985960e4b89922cb5a0bac0ed39c5b96cbc1a536a99f30e8c220a996ed9/MarkupSafe-3.0.2-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:131a3c7689c85f5ad20f9f6fb1b866f402c445b220c19fe4308c0b147ccd2ad9", size = 24098 }, + { url = "https://files.pythonhosted.org/packages/82/78/fedb03c7d5380df2427038ec8d973587e90561b2d90cd472ce9254cf348b/MarkupSafe-3.0.2-cp313-cp313t-win32.whl", hash = "sha256:ba8062ed2cf21c07a9e295d5b8a2a5ce678b913b45fdf68c32d95d6c1291e0b6", size = 15208 }, + { url = "https://files.pythonhosted.org/packages/4f/65/6079a46068dfceaeabb5dcad6d674f5f5c61a6fa5673746f42a9f4c233b3/MarkupSafe-3.0.2-cp313-cp313t-win_amd64.whl", hash = "sha256:e444a31f8db13eb18ada366ab3cf45fd4b31e4db1236a4448f68778c1d1a5a2f", size = 15739 }, ] [[package]] name = "maturin" -version = "1.7.1" +version = "1.7.8" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "tomli", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/1d/ec/1f688d6ad82a568fd7c239f1c7a130d3fc2634977df4ef662ee0ac58a153/maturin-1.7.1.tar.gz", hash = "sha256:147754cb3d81177ee12d9baf575d93549e76121dacd3544ad6a50ab718de2b9c", size = 190286 } +sdist = { url = "https://files.pythonhosted.org/packages/ab/1e/085ddc0e5b08ae7af7a743a0dd6ed06b22a1332288488f1a333137885150/maturin-1.7.8.tar.gz", hash = "sha256:649c6ef3f0fa4c5f596140d761dc5a4d577c485cc32fb5b9b344a8280352880d", size = 195704 } wheels = [ - { url = "https://files.pythonhosted.org/packages/d5/71/2da6a923a8c65749c614f95046ea0190ff00d6923edc20b0c5ecff2119f1/maturin-1.7.1-py3-none-linux_armv6l.whl", hash = "sha256:372a141b31ae7396728d2dedc6061fe4522c1803ae1c05700d37008e1d1a2cc9", size = 8198799 }, - { url = "https://files.pythonhosted.org/packages/21/7c/70e4f4e634777652101277eb1449777310f960f831c831bf7956ea81ef82/maturin-1.7.1-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:49939608095d9bcdf19d081dfd6ac1e8f915c645115090514c7b86e1e382f241", size = 15603724 }, - { url = "https://files.pythonhosted.org/packages/0d/2c/06702f20e9f8f019bc036084292c9fe3ae04b4f6a163929ee10627dd0258/maturin-1.7.1-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:973126a36cfb9861b3207df579678c1bcd7c348578a41ccfbe80d811a84f1740", size = 7982580 }, - { url = "https://files.pythonhosted.org/packages/6c/a3/a4841dddb81e1855b57acf393ba72c405f097a3c6d7d5078e4d7105a4735/maturin-1.7.1-py3-none-manylinux_2_12_i686.manylinux2010_i686.musllinux_1_1_i686.whl", hash = "sha256:6eec984d26f707b18765478f4892e58ac72e777287cd2ba721d6e2ef6da1f66e", size = 8548076 }, - { url = "https://files.pythonhosted.org/packages/ad/1c/1d0fd54bb2d068d0f9d513b0fdfb089a0fe8d20f020e673de0a0cda4f485/maturin-1.7.1-py3-none-manylinux_2_12_x86_64.manylinux2010_x86_64.musllinux_1_1_x86_64.whl", hash = "sha256:0df0a6aaf7e9ab92cce2490b03d80b8f5ecbfa0689747a2ea4dfb9e63877b79c", size = 8705393 }, - { url = "https://files.pythonhosted.org/packages/61/f4/6f4023c9653256fbcf2ef1ab6926f9fd4260390d25c258108ddfd45978d3/maturin-1.7.1-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:09cca3491c756d1bce6ffff13f004e8a10e67c72a1cba9579058f58220505881", size = 8422778 }, - { url = "https://files.pythonhosted.org/packages/15/d9/d927f225959e95c89fc6999130426d90d3f8285815dc2503a473049cb232/maturin-1.7.1-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.musllinux_1_1_armv7l.whl", hash = "sha256:00f0f8f5051f4c0d0f69bdd0c6297ea87e979f70fb78a377eb4277c932804e2d", size = 8090248 }, - { url = "https://files.pythonhosted.org/packages/e3/d7/577d081996b901e02c2f3f9881fa1c1b4097bf3a0a46b7f7d8481a37ce1e/maturin-1.7.1-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.musllinux_1_1_ppc64le.whl", hash = "sha256:7bb184cfbac4e3c55ca21d322e4801e0f75e7932287e156c280c279eae60b69e", size = 8731356 }, - { url = "https://files.pythonhosted.org/packages/53/3e/725176fac7ce884bc577603f58026fd56b4faed067e81fe6a0839f5a4464/maturin-1.7.1-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5e8e61468d7d79790f0b54f2ed24f2fefbce3518548bc4e1a1f0c7be5bad710", size = 9901905 }, - { url = "https://files.pythonhosted.org/packages/61/69/3960d152d0a3e527212b4fe991ada3618fd2f5ec64edffdd38875adb1b9c/maturin-1.7.1-py3-none-win32.whl", hash = "sha256:07c8800603e551a45e16fe7ad1742977097ea43c18b28e491df74d4ca15c5857", size = 6479042 }, - { url = "https://files.pythonhosted.org/packages/a1/5b/512efa939f747f1a1277f981ca1de332f01bb187d193cb8d67f816c38735/maturin-1.7.1-py3-none-win_amd64.whl", hash = "sha256:c5e7e6d130072ca76956106daa276f24a66c3407cfe6cf64c196d4299fd4175c", size = 7268270 }, - { url = "https://files.pythonhosted.org/packages/c6/ce/eda05e623102dfb75b60f8b222ab3d6bc98a6e7182cc44602b422bd0f07a/maturin-1.7.1-py3-none-win_arm64.whl", hash = "sha256:acf9f539f53a7ad64d406a40b27b768f67d75e6e4e93cb04b29025144a74ef45", size = 6277021 }, + { url = "https://files.pythonhosted.org/packages/7e/ed/c8bb26e91c879e418ae1b01630722ed20b6fe0e6755be8d538d83666f136/maturin-1.7.8-py3-none-linux_armv6l.whl", hash = "sha256:c6950fd2790acd93265e1501cea66f9249cff19724654424ca75a3b17ebb315b", size = 7515691 }, + { url = "https://files.pythonhosted.org/packages/38/7a/573f969315f0b92a09a0a565d45e98812c87796e2e19a7856159ab234faf/maturin-1.7.8-py3-none-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:f98288d5c382bacf0c076871dfd50c38f1eb2248f417551e98dd6f47f6ee8afa", size = 14434454 }, + { url = "https://files.pythonhosted.org/packages/a6/17/46834841fbf19231487f185e68b95ca348cc05cce49be8787e0bc7e9dc47/maturin-1.7.8-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:b2d4e0f674ca29864e6b86c2eb9fee8236d1c7496c25f7300e34229272468f4c", size = 7509122 }, + { url = "https://files.pythonhosted.org/packages/c1/8f/bf8b4871eb390a4baef2e0bb5016852c7c0311a9772e2945534cfa2ee40e/maturin-1.7.8-py3-none-manylinux_2_12_i686.manylinux2010_i686.musllinux_1_1_i686.whl", hash = "sha256:6cafb17bf57822bdc04423d9e3e766d42918d474848fe9833e397267514ba891", size = 7598870 }, + { url = "https://files.pythonhosted.org/packages/dc/43/c842be67a7c59568082345249b956138ae93d0b2474fb41c186ce26d05e1/maturin-1.7.8-py3-none-manylinux_2_12_x86_64.manylinux2010_x86_64.musllinux_1_1_x86_64.whl", hash = "sha256:2b2bdee0c3a84696b3a809054c43ead1a04b7b3321cbd5b8f5676e4ba4691d0f", size = 7932310 }, + { url = "https://files.pythonhosted.org/packages/12/12/42435d05f2d6c75eb621751e6f021d29eb34d18e3b9c5c94d828744c2d54/maturin-1.7.8-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.musllinux_1_1_aarch64.whl", hash = "sha256:b8188b71259fc2bc568d9c8acc186fcfed96f42539bcb55b8e6f4ec26e411f37", size = 7321964 }, + { url = "https://files.pythonhosted.org/packages/b4/26/f3272ee985ebf9b3e8c4cd4f4efb022af1e12c9f53aed0dcc9a255399f4e/maturin-1.7.8-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.musllinux_1_1_armv7l.whl", hash = "sha256:a4f58c2a53c2958a1bf090960b08b28e676136cd88ac2f5dfdcf1b14ea54ec06", size = 7408613 }, + { url = "https://files.pythonhosted.org/packages/36/7d/be27bcc7d3ac6e6c2136a8ec0cc56f227a292d6cfdde55e095b6c0aa24a9/maturin-1.7.8-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.musllinux_1_1_ppc64le.whl", hash = "sha256:c5d6c0c631d1fc646cd3834795e6cfd72ab4271d289df7e0f911261a02bec75f", size = 9496974 }, + { url = "https://files.pythonhosted.org/packages/e1/e8/0d7323e9a31c11edf69c4473d73eca74803ce3e2390abf8ae3ac7eb10b04/maturin-1.7.8-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c23664d19dadcbf800ef70f26afb2e0485a985c62889930934f019c565534c23", size = 10828401 }, + { url = "https://files.pythonhosted.org/packages/7e/82/5080e052c0d8c9872f6d4b94cae84c17ed7f2ea270d709210ea6445b655f/maturin-1.7.8-py3-none-win32.whl", hash = "sha256:403eebf1afa6f19b49425f089e39c53b8e597bc86a47f3a76e828dc78d27fa80", size = 6845240 }, + { url = "https://files.pythonhosted.org/packages/6d/c9/9b162361ded893f36038c2f8ac6a972ec441c11df8d17c440997eb28090f/maturin-1.7.8-py3-none-win_amd64.whl", hash = "sha256:1ce48d007438b895f8665314b6748ac0dab31e4f32049a60b52281dd2dccbdde", size = 7762332 }, + { url = "https://files.pythonhosted.org/packages/fa/40/46d4742db742f69a7fe0054cd7c82bc79b2d70cb8c91f7e737e75c28a5f3/maturin-1.7.8-py3-none-win_arm64.whl", hash = "sha256:cc92a62953205e8945b6cfe6943d6a8576a4442d30d9c67141f944f4f4640e62", size = 6501353 }, ] [[package]] @@ -299,31 +315,36 @@ wheels = [ [[package]] name = "mypy" -version = "1.11.1" +version = "1.13.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mypy-extensions" }, { name = "tomli", marker = "python_full_version < '3.11'" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b6/9c/a4b3bda53823439cf395db8ecdda6229a83f9bf201714a68a15190bb2919/mypy-1.11.1.tar.gz", hash = "sha256:f404a0b069709f18bbdb702eb3dcfe51910602995de00bd39cea3050b5772d08", size = 3078369 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/33/ba/858cc9631c24a349c1c63814edc16448da7d6b8716b2c83a10aa20f5ee89/mypy-1.11.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a32fc80b63de4b5b3e65f4be82b4cfa362a46702672aa6a0f443b4689af7008c", size = 10937885 }, - { url = "https://files.pythonhosted.org/packages/2d/88/2ae81f7489da8313d0f2043dd657ba847650b00a0fb8e07f40e716ed8c58/mypy-1.11.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c1952f5ea8a5a959b05ed5f16452fddadbaae48b5d39235ab4c3fc444d5fd411", size = 10111978 }, - { url = "https://files.pythonhosted.org/packages/df/4b/d211d6036366f9ea5ee9fb949e80d133b4b8496cdde78c7119f518c49734/mypy-1.11.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e1e30dc3bfa4e157e53c1d17a0dad20f89dc433393e7702b813c10e200843b03", size = 12498441 }, - { url = "https://files.pythonhosted.org/packages/94/d2/973278d03ad11e006d71d4c858bfe45cf571ae061f3997911925c70a59f0/mypy-1.11.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2c63350af88f43a66d3dfeeeb8d77af34a4f07d760b9eb3a8697f0386c7590b4", size = 13020595 }, - { url = "https://files.pythonhosted.org/packages/0b/c2/7f4285eda528883c5c34cb4b8d88080792967f7f7f24256ad8090d303702/mypy-1.11.1-cp310-cp310-win_amd64.whl", hash = "sha256:a831671bad47186603872a3abc19634f3011d7f83b083762c942442d51c58d58", size = 9568307 }, - { url = "https://files.pythonhosted.org/packages/0b/b1/62d8ce619493a5364dda4f410912aa12c27126926e8fb8393edca0664640/mypy-1.11.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:7b6343d338390bb946d449677726edf60102a1c96079b4f002dedff375953fc5", size = 10858723 }, - { url = "https://files.pythonhosted.org/packages/fe/aa/2ad15a318bc6a17b7f23e1641a624603949904f6131e09681f40340fb875/mypy-1.11.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:e4fe9f4e5e521b458d8feb52547f4bade7ef8c93238dfb5bbc790d9ff2d770ca", size = 10038078 }, - { url = "https://files.pythonhosted.org/packages/4d/7f/77feb389d91603f55b3c4e3e16ccf8752bce007ed73ca921e42c9a5dff12/mypy-1.11.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:886c9dbecc87b9516eff294541bf7f3655722bf22bb898ee06985cd7269898de", size = 12420213 }, - { url = "https://files.pythonhosted.org/packages/bc/5b/907b4681f68e7ee2e2e88eed65c514cf6406b8f2f83b243ea79bd4eddb97/mypy-1.11.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:fca4a60e1dd9fd0193ae0067eaeeb962f2d79e0d9f0f66223a0682f26ffcc809", size = 12898278 }, - { url = "https://files.pythonhosted.org/packages/5b/b3/2a83be637825d7432b8e6a51e45d02de4f463b6c7ec7164a45009a7cf477/mypy-1.11.1-cp311-cp311-win_amd64.whl", hash = "sha256:0bd53faf56de9643336aeea1c925012837432b5faf1701ccca7fde70166ccf72", size = 9564438 }, - { url = "https://files.pythonhosted.org/packages/3a/34/69638cee2e87303f19a0c35e80d42757e14d9aba328f272fdcdc0bf3c9b8/mypy-1.11.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:f39918a50f74dc5969807dcfaecafa804fa7f90c9d60506835036cc1bc891dc8", size = 10995789 }, - { url = "https://files.pythonhosted.org/packages/c4/3c/3e0611348fc53a4a7c80485959478b4f6eae706baf3b7c03cafa22639216/mypy-1.11.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:0bc71d1fb27a428139dd78621953effe0d208aed9857cb08d002280b0422003a", size = 10002696 }, - { url = "https://files.pythonhosted.org/packages/1c/21/a6b46c91b4c9d1918ee59c305f46850cde7cbea748635a352e7c3c8ed204/mypy-1.11.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b868d3bcff720dd7217c383474008ddabaf048fad8d78ed948bb4b624870a417", size = 12505772 }, - { url = "https://files.pythonhosted.org/packages/c4/55/07904d4c8f408e70308015edcbff067eaa77514475938a9dd81b063de2a8/mypy-1.11.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a707ec1527ffcdd1c784d0924bf5cb15cd7f22683b919668a04d2b9c34549d2e", size = 12954190 }, - { url = "https://files.pythonhosted.org/packages/1e/b7/3a50f318979c8c541428c2f1ee973cda813bcc89614de982dafdd0df2b3e/mypy-1.11.1-cp312-cp312-win_amd64.whl", hash = "sha256:64f4a90e3ea07f590c5bcf9029035cf0efeae5ba8be511a8caada1a4893f5525", size = 9663138 }, - { url = "https://files.pythonhosted.org/packages/f8/d4/4960d0df55f30a7625d9c3c9414dfd42f779caabae137ef73ffaed0c97b9/mypy-1.11.1-py3-none-any.whl", hash = "sha256:0624bdb940255d2dd24e829d99a13cfeb72e4e9031f9492148f410ed30bcab54", size = 2619257 }, +sdist = { url = "https://files.pythonhosted.org/packages/e8/21/7e9e523537991d145ab8a0a2fd98548d67646dc2aaaf6091c31ad883e7c1/mypy-1.13.0.tar.gz", hash = "sha256:0291a61b6fbf3e6673e3405cfcc0e7650bebc7939659fdca2702958038bd835e", size = 3152532 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/5e/8c/206de95a27722b5b5a8c85ba3100467bd86299d92a4f71c6b9aa448bfa2f/mypy-1.13.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6607e0f1dd1fb7f0aca14d936d13fd19eba5e17e1cd2a14f808fa5f8f6d8f60a", size = 11020731 }, + { url = "https://files.pythonhosted.org/packages/ab/bb/b31695a29eea76b1569fd28b4ab141a1adc9842edde080d1e8e1776862c7/mypy-1.13.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:8a21be69bd26fa81b1f80a61ee7ab05b076c674d9b18fb56239d72e21d9f4c80", size = 10184276 }, + { url = "https://files.pythonhosted.org/packages/a5/2d/4a23849729bb27934a0e079c9c1aad912167d875c7b070382a408d459651/mypy-1.13.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:7b2353a44d2179846a096e25691d54d59904559f4232519d420d64da6828a3a7", size = 12587706 }, + { url = "https://files.pythonhosted.org/packages/5c/c3/d318e38ada50255e22e23353a469c791379825240e71b0ad03e76ca07ae6/mypy-1.13.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0730d1c6a2739d4511dc4253f8274cdd140c55c32dfb0a4cf8b7a43f40abfa6f", size = 13105586 }, + { url = "https://files.pythonhosted.org/packages/4a/25/3918bc64952370c3dbdbd8c82c363804678127815febd2925b7273d9482c/mypy-1.13.0-cp310-cp310-win_amd64.whl", hash = "sha256:c5fc54dbb712ff5e5a0fca797e6e0aa25726c7e72c6a5850cfd2adbc1eb0a372", size = 9632318 }, + { url = "https://files.pythonhosted.org/packages/d0/19/de0822609e5b93d02579075248c7aa6ceaddcea92f00bf4ea8e4c22e3598/mypy-1.13.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:581665e6f3a8a9078f28d5502f4c334c0c8d802ef55ea0e7276a6e409bc0d82d", size = 10939027 }, + { url = "https://files.pythonhosted.org/packages/c8/71/6950fcc6ca84179137e4cbf7cf41e6b68b4a339a1f5d3e954f8c34e02d66/mypy-1.13.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3ddb5b9bf82e05cc9a627e84707b528e5c7caaa1c55c69e175abb15a761cec2d", size = 10108699 }, + { url = "https://files.pythonhosted.org/packages/26/50/29d3e7dd166e74dc13d46050b23f7d6d7533acf48f5217663a3719db024e/mypy-1.13.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:20c7ee0bc0d5a9595c46f38beb04201f2620065a93755704e141fcac9f59db2b", size = 12506263 }, + { url = "https://files.pythonhosted.org/packages/3f/1d/676e76f07f7d5ddcd4227af3938a9c9640f293b7d8a44dd4ff41d4db25c1/mypy-1.13.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:3790ded76f0b34bc9c8ba4def8f919dd6a46db0f5a6610fb994fe8efdd447f73", size = 12984688 }, + { url = "https://files.pythonhosted.org/packages/9c/03/5a85a30ae5407b1d28fab51bd3e2103e52ad0918d1e68f02a7778669a307/mypy-1.13.0-cp311-cp311-win_amd64.whl", hash = "sha256:51f869f4b6b538229c1d1bcc1dd7d119817206e2bc54e8e374b3dfa202defcca", size = 9626811 }, + { url = "https://files.pythonhosted.org/packages/fb/31/c526a7bd2e5c710ae47717c7a5f53f616db6d9097caf48ad650581e81748/mypy-1.13.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:5c7051a3461ae84dfb5dd15eff5094640c61c5f22257c8b766794e6dd85e72d5", size = 11077900 }, + { url = "https://files.pythonhosted.org/packages/83/67/b7419c6b503679d10bd26fc67529bc6a1f7a5f220bbb9f292dc10d33352f/mypy-1.13.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:39bb21c69a5d6342f4ce526e4584bc5c197fd20a60d14a8624d8743fffb9472e", size = 10074818 }, + { url = "https://files.pythonhosted.org/packages/ba/07/37d67048786ae84e6612575e173d713c9a05d0ae495dde1e68d972207d98/mypy-1.13.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:164f28cb9d6367439031f4c81e84d3ccaa1e19232d9d05d37cb0bd880d3f93c2", size = 12589275 }, + { url = "https://files.pythonhosted.org/packages/1f/17/b1018c6bb3e9f1ce3956722b3bf91bff86c1cefccca71cec05eae49d6d41/mypy-1.13.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a4c1bfcdbce96ff5d96fc9b08e3831acb30dc44ab02671eca5953eadad07d6d0", size = 13037783 }, + { url = "https://files.pythonhosted.org/packages/cb/32/cd540755579e54a88099aee0287086d996f5a24281a673f78a0e14dba150/mypy-1.13.0-cp312-cp312-win_amd64.whl", hash = "sha256:a0affb3a79a256b4183ba09811e3577c5163ed06685e4d4b46429a271ba174d2", size = 9726197 }, + { url = "https://files.pythonhosted.org/packages/11/bb/ab4cfdc562cad80418f077d8be9b4491ee4fb257440da951b85cbb0a639e/mypy-1.13.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a7b44178c9760ce1a43f544e595d35ed61ac2c3de306599fa59b38a6048e1aa7", size = 11069721 }, + { url = "https://files.pythonhosted.org/packages/59/3b/a393b1607cb749ea2c621def5ba8c58308ff05e30d9dbdc7c15028bca111/mypy-1.13.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:5d5092efb8516d08440e36626f0153b5006d4088c1d663d88bf79625af3d1d62", size = 10063996 }, + { url = "https://files.pythonhosted.org/packages/d1/1f/6b76be289a5a521bb1caedc1f08e76ff17ab59061007f201a8a18cc514d1/mypy-1.13.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:de2904956dac40ced10931ac967ae63c5089bd498542194b436eb097a9f77bc8", size = 12584043 }, + { url = "https://files.pythonhosted.org/packages/a6/83/5a85c9a5976c6f96e3a5a7591aa28b4a6ca3a07e9e5ba0cec090c8b596d6/mypy-1.13.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:7bfd8836970d33c2105562650656b6846149374dc8ed77d98424b40b09340ba7", size = 13036996 }, + { url = "https://files.pythonhosted.org/packages/b4/59/c39a6f752f1f893fccbcf1bdd2aca67c79c842402b5283563d006a67cf76/mypy-1.13.0-cp313-cp313-win_amd64.whl", hash = "sha256:9f73dba9ec77acb86457a8fc04b5239822df0c14a082564737833d2963677dbc", size = 9737709 }, + { url = "https://files.pythonhosted.org/packages/3b/86/72ce7f57431d87a7ff17d442f521146a6585019eb8f4f31b7c02801f78ad/mypy-1.13.0-py3-none-any.whl", hash = "sha256:9c250883f9fd81d212e0952c92dbfcc96fc237f4b7c92f56ac81fd48460b3e5a", size = 2647043 }, ] [[package]] @@ -337,11 +358,11 @@ wheels = [ [[package]] name = "networkx" -version = "3.3" +version = "3.4.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/04/e6/b164f94c869d6b2c605b5128b7b0cfe912795a87fc90e78533920001f3ec/networkx-3.3.tar.gz", hash = "sha256:0c127d8b2f4865f59ae9cb8aafcd60b5c70f3241ebd66f7defad7c4ab90126c9", size = 2126579 } +sdist = { url = "https://files.pythonhosted.org/packages/fd/1d/06475e1cd5264c0b870ea2cc6fdb3e37177c1e565c43f56ff17a10e3937f/networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1", size = 2151368 } wheels = [ - { url = "https://files.pythonhosted.org/packages/38/e9/5f72929373e1a0e8d142a130f3f97e6ff920070f87f91c4e13e40e0fba5a/networkx-3.3-py3-none-any.whl", hash = "sha256:28575580c6ebdaf4505b22c6256a2b9de86b316dc63ba9e93abde3d78dfdbcf2", size = 1702396 }, + { url = "https://files.pythonhosted.org/packages/b9/54/dd730b32ea14ea797530a4479b2ed46a6fb250f682a9cfb997e968bf0261/networkx-3.4.2-py3-none-any.whl", hash = "sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f", size = 1723263 }, ] [[package]] @@ -355,88 +376,91 @@ wheels = [ [[package]] name = "numpy" -version = "2.1.0" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/54/a4/f8188c4f3e07f7737683588210c073478abcb542048cf4ab6fedad0b458a/numpy-2.1.0.tar.gz", hash = "sha256:7dc90da0081f7e1da49ec4e398ede6a8e9cc4f5ebe5f9e06b443ed889ee9aaa2", size = 18868922 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/e4/6c/87c885569ebe002f9c5f5de8eda8a3622360143d61e6174610f67c695ad3/numpy-2.1.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:6326ab99b52fafdcdeccf602d6286191a79fe2fda0ae90573c5814cd2b0bc1b8", size = 21149295 }, - { url = "https://files.pythonhosted.org/packages/0a/d6/8d9c9a94c44ae456dbfc5f2ef719aebab6cce38064b815e98efd4e4a4141/numpy-2.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0937e54c09f7a9a68da6889362ddd2ff584c02d015ec92672c099b61555f8911", size = 13756742 }, - { url = "https://files.pythonhosted.org/packages/ec/f5/1c7d0baa22edd3e51301c2fb74b61295c737ca254345f45d9211b2f3cb6b/numpy-2.1.0-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:30014b234f07b5fec20f4146f69e13cfb1e33ee9a18a1879a0142fbb00d47673", size = 5352245 }, - { url = "https://files.pythonhosted.org/packages/de/ea/3e277e9971af78479c5ef318cc477718f5b541b6d1529ae494700a90347b/numpy-2.1.0-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:899da829b362ade41e1e7eccad2cf274035e1cb36ba73034946fccd4afd8606b", size = 6885239 }, - { url = "https://files.pythonhosted.org/packages/5d/f4/30f3b75be994a390a366bb5284ac29217edd27a6e6749196ad08d366290d/numpy-2.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:08801848a40aea24ce16c2ecde3b756f9ad756586fb2d13210939eb69b023f5b", size = 13975963 }, - { url = "https://files.pythonhosted.org/packages/f3/55/2921109f337368848375d8d987e267ba8d1a00d51d5915dc3bcca740d381/numpy-2.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:398049e237d1aae53d82a416dade04defed1a47f87d18d5bd615b6e7d7e41d1f", size = 16325024 }, - { url = "https://files.pythonhosted.org/packages/fc/d1/d2fe0a6edb2a19a0da37f10cfe63ee50eb22f0874986ffb44936081e6f3b/numpy-2.1.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0abb3916a35d9090088a748636b2c06dc9a6542f99cd476979fb156a18192b84", size = 16701102 }, - { url = "https://files.pythonhosted.org/packages/28/4a/018e83dd0fa5f32730b67ff0ac35207f13bee8b870f96aa33c496545b9e6/numpy-2.1.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:10e2350aea18d04832319aac0f887d5fcec1b36abd485d14f173e3e900b83e33", size = 14474060 }, - { url = "https://files.pythonhosted.org/packages/33/94/e1c65ebb0caa410afdeb83ed44778f22b92bd70855285bb168df37022d8c/numpy-2.1.0-cp310-cp310-win32.whl", hash = "sha256:f6b26e6c3b98adb648243670fddc8cab6ae17473f9dc58c51574af3e64d61211", size = 6533851 }, - { url = "https://files.pythonhosted.org/packages/97/fc/961ce4fe1b3295b30ff85a0bc6da13302b870643ed9a79c034fb8469e333/numpy-2.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:f505264735ee074250a9c78247ee8618292091d9d1fcc023290e9ac67e8f1afa", size = 12863722 }, - { url = "https://files.pythonhosted.org/packages/3e/98/466ac2a77706699ca0141ea197e4f221d2b232051052f8f794a628a489ec/numpy-2.1.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:76368c788ccb4f4782cf9c842b316140142b4cbf22ff8db82724e82fe1205dce", size = 21153408 }, - { url = "https://files.pythonhosted.org/packages/d5/43/4ff735420b31cd454e4b3acdd0ba7570b453aede6fa16cf7a11cc8780d1b/numpy-2.1.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:f8e93a01a35be08d31ae33021e5268f157a2d60ebd643cfc15de6ab8e4722eb1", size = 5350253 }, - { url = "https://files.pythonhosted.org/packages/ec/a0/1c1b9d935d7196c4a847b76c8a8d012c986ddbc78ef159cc4c0393148062/numpy-2.1.0-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:9523f8b46485db6939bd069b28b642fec86c30909cea90ef550373787f79530e", size = 6889274 }, - { url = "https://files.pythonhosted.org/packages/d0/d2/4838d8c3b7ac69947ffd686ba3376cb603ea3618305ae3b8547b821df218/numpy-2.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:54139e0eb219f52f60656d163cbe67c31ede51d13236c950145473504fa208cb", size = 13982862 }, - { url = "https://files.pythonhosted.org/packages/7b/93/831b4c5b4355210827b3de34f539297e1833c39a68c26a8b454d8cf9f5ed/numpy-2.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f5ebbf9fbdabed208d4ecd2e1dfd2c0741af2f876e7ae522c2537d404ca895c3", size = 16336222 }, - { url = "https://files.pythonhosted.org/packages/db/44/7d2f454309a620f1afdde44dffa469fece331b84e7a5bd2dba3f0f465489/numpy-2.1.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:378cb4f24c7d93066ee4103204f73ed046eb88f9ad5bb2275bb9fa0f6a02bd36", size = 16708990 }, - { url = "https://files.pythonhosted.org/packages/65/6b/46f69972a25e3b682b7a65cb525efa3650cd62e237180c2ecff7a6177173/numpy-2.1.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d8f699a709120b220dfe173f79c73cb2a2cab2c0b88dd59d7b49407d032b8ebd", size = 14487554 }, - { url = "https://files.pythonhosted.org/packages/3f/bc/4b128b3ac152e64e3d117931167bc2289dab47204762ad65011b681d75e7/numpy-2.1.0-cp311-cp311-win32.whl", hash = "sha256:ffbd6faeb190aaf2b5e9024bac9622d2ee549b7ec89ef3a9373fa35313d44e0e", size = 6531834 }, - { url = "https://files.pythonhosted.org/packages/7b/5e/093592740805fe401ce49a627cc8a3f034dac62b34d68ab69db3c56bd662/numpy-2.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:0af3a5987f59d9c529c022c8c2a64805b339b7ef506509fba7d0556649b9714b", size = 12869011 }, - { url = "https://files.pythonhosted.org/packages/eb/f5/a06a231cbeea4aff841ff744a12e4bf4d4407f2c753d13ce4563aa126c90/numpy-2.1.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:fe76d75b345dc045acdbc006adcb197cc680754afd6c259de60d358d60c93736", size = 20882951 }, - { url = "https://files.pythonhosted.org/packages/70/1d/4ad38e3a1840f72c29595c06b103ecd9119f260e897ff7e88a74adb0ca14/numpy-2.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f358ea9e47eb3c2d6eba121ab512dfff38a88db719c38d1e67349af210bc7529", size = 13491878 }, - { url = "https://files.pythonhosted.org/packages/b4/3b/569055d01ed80634d6be6ceef8fb28eb0866e4f98c2d97667dcf9fae3e22/numpy-2.1.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:dd94ce596bda40a9618324547cfaaf6650b1a24f5390350142499aa4e34e53d1", size = 5087346 }, - { url = "https://files.pythonhosted.org/packages/24/37/212dd6fbd298c467b80d4d6217b2bc902b520e96a967b59f72603bf1142f/numpy-2.1.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:b47c551c6724960479cefd7353656498b86e7232429e3a41ab83be4da1b109e8", size = 6618269 }, - { url = "https://files.pythonhosted.org/packages/33/4d/435c143c06e16c8bfccbfd9af252b0a8ac7897e0c0e36e539d75a75e91b4/numpy-2.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0756a179afa766ad7cb6f036de622e8a8f16ffdd55aa31f296c870b5679d745", size = 13695244 }, - { url = "https://files.pythonhosted.org/packages/48/3e/bf807eb050abc23adc556f34fcf931ca2d67ad8dfc9c17fcd9332c01347f/numpy-2.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24003ba8ff22ea29a8c306e61d316ac74111cebf942afbf692df65509a05f111", size = 16040181 }, - { url = "https://files.pythonhosted.org/packages/cd/a9/40dc96b5d43076836d82d1e84a3a4a6a4c2925a53ec0b7f31271434ff02c/numpy-2.1.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b34fa5e3b5d6dc7e0a4243fa0f81367027cb6f4a7215a17852979634b5544ee0", size = 16407920 }, - { url = "https://files.pythonhosted.org/packages/cc/77/39e44cf0a6eb0f93b18ffb00f1964b2c471b1df5605aee486c221b06a8e4/numpy-2.1.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c4f982715e65036c34897eb598d64aef15150c447be2cfc6643ec7a11af06574", size = 14170943 }, - { url = "https://files.pythonhosted.org/packages/54/02/f0a3c2ec1622dc4346bd126e2578948c7192b3838c893a3d215738fb367b/numpy-2.1.0-cp312-cp312-win32.whl", hash = "sha256:c4cd94dfefbefec3f8b544f61286584292d740e6e9d4677769bc76b8f41deb02", size = 6235947 }, - { url = "https://files.pythonhosted.org/packages/8c/bf/d9d214a9dff020ad1663f1536f45d34e052e4c7f630c46cd363e785e3231/numpy-2.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:a0cdef204199278f5c461a0bed6ed2e052998276e6d8ab2963d5b5c39a0500bc", size = 12566546 }, - { url = "https://files.pythonhosted.org/packages/c3/16/6b536e1b67624178e3631a3fa60c9c1b5ee7cda2fa9492c4f2de01bfcb06/numpy-2.1.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:8ab81ccd753859ab89e67199b9da62c543850f819993761c1e94a75a814ed667", size = 20833354 }, - { url = "https://files.pythonhosted.org/packages/52/87/130e95aa8a6383fc3de4fdaf7adc629289b79b88548fb6e35e9d924697d7/numpy-2.1.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:442596f01913656d579309edcd179a2a2f9977d9a14ff41d042475280fc7f34e", size = 13506169 }, - { url = "https://files.pythonhosted.org/packages/d9/c2/0fcf68c67681f9ad9d76156b4606f60b48748ead76d4ba19b90aecd4b626/numpy-2.1.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:848c6b5cad9898e4b9ef251b6f934fa34630371f2e916261070a4eb9092ffd33", size = 5072908 }, - { url = "https://files.pythonhosted.org/packages/72/40/e21bbbfae665ef5fa1dfd7eae1c5dc93ba9d3b36e39d2d38789dd8c22d56/numpy-2.1.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:54c6a63e9d81efe64bfb7bcb0ec64332a87d0b87575f6009c8ba67ea6374770b", size = 6604906 }, - { url = "https://files.pythonhosted.org/packages/0e/ce/848967516bf8dd4f769886a883a4852dbc62e9b63b1137d2b9900f595222/numpy-2.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:652e92fc409e278abdd61e9505649e3938f6d04ce7ef1953f2ec598a50e7c195", size = 13690864 }, - { url = "https://files.pythonhosted.org/packages/15/72/2cebe04758e1123f625ed3221cb3c48602175ad619dd9b47de69689b4656/numpy-2.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ab32eb9170bf8ffcbb14f11613f4a0b108d3ffee0832457c5d4808233ba8977", size = 16036272 }, - { url = "https://files.pythonhosted.org/packages/a7/b7/ae34ced7864b551e0ea01ce4e7acbe7ddf5946afb623dea39760b19bc8b0/numpy-2.1.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:8fb49a0ba4d8f41198ae2d52118b050fd34dace4b8f3fb0ee34e23eb4ae775b1", size = 16408978 }, - { url = "https://files.pythonhosted.org/packages/4d/22/c9d696b87c5ce25e857d7745fe4f090373a2daf8c26f5e15b32b5db7bff7/numpy-2.1.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:44e44973262dc3ae79e9063a1284a73e09d01b894b534a769732ccd46c28cc62", size = 14168398 }, - { url = "https://files.pythonhosted.org/packages/9e/8b/63f74dccf86d4832d593bdbe06544f4a0a1b7e18e86e0db1e8231bf47c49/numpy-2.1.0-cp313-cp313-win32.whl", hash = "sha256:ab83adc099ec62e044b1fbb3a05499fa1e99f6d53a1dde102b2d85eff66ed324", size = 6232743 }, - { url = "https://files.pythonhosted.org/packages/23/4b/e30a3132478c69df3e3e587fa87dcbf2660455daec92d8d52e7028a92554/numpy-2.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:de844aaa4815b78f6023832590d77da0e3b6805c644c33ce94a1e449f16d6ab5", size = 12560212 }, - { url = "https://files.pythonhosted.org/packages/5a/1b/40e881a3a272c4861de1e43a3e7ee1559988dd12187463726d3b395a8874/numpy-2.1.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:343e3e152bf5a087511cd325e3b7ecfd5b92d369e80e74c12cd87826e263ec06", size = 20840821 }, - { url = "https://files.pythonhosted.org/packages/d0/8e/5b7c08f9238f6cc18037f6fd92f83feaa8c19e9decb6bd075cad81f71fae/numpy-2.1.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f07fa2f15dabe91259828ce7d71b5ca9e2eb7c8c26baa822c825ce43552f4883", size = 13500478 }, - { url = "https://files.pythonhosted.org/packages/65/32/bf9df25ef50761fcb3e089c745d2e195b35cc6506d032f12bb5cc28f6c43/numpy-2.1.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:5474dad8c86ee9ba9bb776f4b99ef2d41b3b8f4e0d199d4f7304728ed34d0300", size = 5095825 }, - { url = "https://files.pythonhosted.org/packages/50/34/d18c95bc5981ea3bb8e6f896aad12159a37dcc67b22cd9464fe3899612f7/numpy-2.1.0-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:1f817c71683fd1bb5cff1529a1d085a57f02ccd2ebc5cd2c566f9a01118e3b7d", size = 6611470 }, - { url = "https://files.pythonhosted.org/packages/b4/4f/27d56e9f6222419951bfeef54bc0a71dc40c0ebeb248e1aa85655da6fa11/numpy-2.1.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3a3336fbfa0d38d3deacd3fe7f3d07e13597f29c13abf4d15c3b6dc2291cbbdd", size = 13647061 }, - { url = "https://files.pythonhosted.org/packages/f9/e0/ae6e12a157c4ab415b380d0f3596cb9090a0c4acf48cd8cd7bc6d6b93d24/numpy-2.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7a894c51fd8c4e834f00ac742abad73fc485df1062f1b875661a3c1e1fb1c2f6", size = 16006479 }, - { url = "https://files.pythonhosted.org/packages/ab/da/b746668c7303bd73af262208abbfa8b1c86be12e9eccb0d3021ed8a58873/numpy-2.1.0-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:9156ca1f79fc4acc226696e95bfcc2b486f165a6a59ebe22b2c1f82ab190384a", size = 16383064 }, - { url = "https://files.pythonhosted.org/packages/f4/51/c0dcadea0c281be5db32b29f7b977b17bdb53b7dbfcbc3b4f49288de8696/numpy-2.1.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:624884b572dff8ca8f60fab591413f077471de64e376b17d291b19f56504b2bb", size = 14135556 }, - { url = "https://files.pythonhosted.org/packages/c2/5b/de7ef3b3700ff1da66828f782e0c69732fb42aedbcf7f4a1a19ef6fc7e74/numpy-2.1.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:15ef8b2177eeb7e37dd5ef4016f30b7659c57c2c0b57a779f1d537ff33a72c7b", size = 20980535 }, - { url = "https://files.pythonhosted.org/packages/92/ed/88a08b5b66bd37234a901f68b4df2beb1dc01d8a955e071991fd0ee9b4fe/numpy-2.1.0-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:e5f0642cdf4636198a4990de7a71b693d824c56a757862230454629cf62e323d", size = 6748666 }, - { url = "https://files.pythonhosted.org/packages/61/bb/ba8edcb7f6478b656b1cb94331adb700c8bc06d51c3519fc647fd37dad24/numpy-2.1.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f15976718c004466406342789f31b6673776360f3b1e3c575f25302d7e789575", size = 16139681 }, - { url = "https://files.pythonhosted.org/packages/92/19/0a05f78c3557ad3ecb0da85e3eb63cb1527a7ea31a521d11a4f08f753f59/numpy-2.1.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:6c1de77ded79fef664d5098a66810d4d27ca0224e9051906e634b3f7ead134c2", size = 12788122 }, +version = "2.2.0" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/47/1b/1d565e0f6e156e1522ab564176b8b29d71e13d8caf003a08768df3d5cec5/numpy-2.2.0.tar.gz", hash = "sha256:140dd80ff8981a583a60980be1a655068f8adebf7a45a06a6858c873fcdcd4a0", size = 20225497 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/c7/81/3882353e097204fe4d7a5fe026b694b0104b78f930c969faadeed1538e00/numpy-2.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1e25507d85da11ff5066269d0bd25d06e0a0f2e908415534f3e603d2a78e4ffa", size = 21212476 }, + { url = "https://files.pythonhosted.org/packages/2c/64/5577dc71240272749e07fcacb47c0f29e31ba4fbd1613fefbd1aa88efc29/numpy-2.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:a62eb442011776e4036af5c8b1a00b706c5bc02dc15eb5344b0c750428c94219", size = 14351441 }, + { url = "https://files.pythonhosted.org/packages/c9/43/850c040481c19c1c2289203a606df1a202eeb3aa81440624bac891024f83/numpy-2.2.0-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:b606b1aaf802e6468c2608c65ff7ece53eae1a6874b3765f69b8ceb20c5fa78e", size = 5390304 }, + { url = "https://files.pythonhosted.org/packages/73/96/a4c8a86300dbafc7e4f44d8986f8b64950b7f4640a2dc5c91e036afe28c6/numpy-2.2.0-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:36b2b43146f646642b425dd2027730f99bac962618ec2052932157e213a040e9", size = 6925476 }, + { url = "https://files.pythonhosted.org/packages/0c/0a/22129c3107c4fb237f97876df4399a5c3a83f3d95f86e0353ae6fbbd202f/numpy-2.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7fe8f3583e0607ad4e43a954e35c1748b553bfe9fdac8635c02058023277d1b3", size = 14329997 }, + { url = "https://files.pythonhosted.org/packages/4c/49/c2adeccc8a47bcd9335ec000dfcb4de34a7c34aeaa23af57cd504017e8c3/numpy-2.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:122fd2fcfafdefc889c64ad99c228d5a1f9692c3a83f56c292618a59aa60ae83", size = 16378908 }, + { url = "https://files.pythonhosted.org/packages/8d/85/b65f4596748cc5468c0a978a16b3be45f6bcec78339b0fe7bce71d121d89/numpy-2.2.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3f2f5cddeaa4424a0a118924b988746db6ffa8565e5829b1841a8a3bd73eb59a", size = 15540949 }, + { url = "https://files.pythonhosted.org/packages/ff/b3/3b18321c94a6a6a1d972baf1b39a6de50e65c991002c014ffbcce7e09be8/numpy-2.2.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7fe4bb0695fe986a9e4deec3b6857003b4cfe5c5e4aac0b95f6a658c14635e31", size = 18167677 }, + { url = "https://files.pythonhosted.org/packages/41/f0/fa2a76e893a05764e4474f6011575c4e4ccf32af9c95bfcc8ef4b8a99f69/numpy-2.2.0-cp310-cp310-win32.whl", hash = "sha256:b30042fe92dbd79f1ba7f6898fada10bdaad1847c44f2dff9a16147e00a93661", size = 6570288 }, + { url = "https://files.pythonhosted.org/packages/97/4e/0b7debcd013214db224997b0d3e39bb7b3656d37d06dfc31bb57d42d143b/numpy-2.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:54dc1d6d66f8d37843ed281773c7174f03bf7ad826523f73435deb88ba60d2d4", size = 12912730 }, + { url = "https://files.pythonhosted.org/packages/80/1b/736023977a96e787c4e7653a1ac2d31d4f6ab6b4048f83c8359f7c0af2e3/numpy-2.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9874bc2ff574c40ab7a5cbb7464bf9b045d617e36754a7bc93f933d52bd9ffc6", size = 21216607 }, + { url = "https://files.pythonhosted.org/packages/85/4f/5f0be4c5c93525e663573bab9e29bd88a71f85de3a0d01413ee05bce0c2f/numpy-2.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:0da8495970f6b101ddd0c38ace92edea30e7e12b9a926b57f5fabb1ecc25bb90", size = 14387756 }, + { url = "https://files.pythonhosted.org/packages/36/78/c38af7833c4f29999cdacdf12452b43b660cd25a1990ea9a7edf1fb01f17/numpy-2.2.0-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:0557eebc699c1c34cccdd8c3778c9294e8196df27d713706895edc6f57d29608", size = 5388483 }, + { url = "https://files.pythonhosted.org/packages/e9/b5/306ac6ee3f8f0c51abd3664ee8a9b8e264cbf179a860674827151ecc0a9c/numpy-2.2.0-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:3579eaeb5e07f3ded59298ce22b65f877a86ba8e9fe701f5576c99bb17c283da", size = 6929721 }, + { url = "https://files.pythonhosted.org/packages/ea/15/e33a7d86d8ce91de82c34ce94a87f2b8df891e603675e83ec7039325ff10/numpy-2.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40deb10198bbaa531509aad0cd2f9fadb26c8b94070831e2208e7df543562b74", size = 14334667 }, + { url = "https://files.pythonhosted.org/packages/52/33/10825f580f42a353f744abc450dcd2a4b1e6f1931abb0ccbd1d63bd3993c/numpy-2.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c2aed8fcf8abc3020d6a9ccb31dbc9e7d7819c56a348cc88fd44be269b37427e", size = 16390204 }, + { url = "https://files.pythonhosted.org/packages/b4/24/36cce77559572bdc6c8bcdd2f3e0db03c7079d14b9a1cd342476d7f451e8/numpy-2.2.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:a222d764352c773aa5ebde02dd84dba3279c81c6db2e482d62a3fa54e5ece69b", size = 15556123 }, + { url = "https://files.pythonhosted.org/packages/05/51/2d706d14adee8f5c70c5de3831673d4d57051fc9ac6f3f6bff8811d2f9bd/numpy-2.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4e58666988605e251d42c2818c7d3d8991555381be26399303053b58a5bbf30d", size = 18179898 }, + { url = "https://files.pythonhosted.org/packages/8a/e7/ea8b7652564113f218e75b296e3545a256d88b233021f792fd08591e8f33/numpy-2.2.0-cp311-cp311-win32.whl", hash = "sha256:4723a50e1523e1de4fccd1b9a6dcea750c2102461e9a02b2ac55ffeae09a4410", size = 6568146 }, + { url = "https://files.pythonhosted.org/packages/d0/06/3d1ff6ed377cb0340baf90487a35f15f9dc1db8e0a07de2bf2c54a8e490f/numpy-2.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:16757cf28621e43e252c560d25b15f18a2f11da94fea344bf26c599b9cf54b73", size = 12916677 }, + { url = "https://files.pythonhosted.org/packages/7f/bc/a20dc4e1d051149052762e7647455311865d11c603170c476d1e910a353e/numpy-2.2.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cff210198bb4cae3f3c100444c5eaa573a823f05c253e7188e1362a5555235b3", size = 20909153 }, + { url = "https://files.pythonhosted.org/packages/60/3d/ac4fb63f36db94f4c7db05b45e3ecb3f88f778ca71850664460c78cfde41/numpy-2.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:58b92a5828bd4d9aa0952492b7de803135038de47343b2aa3cc23f3b71a3dc4e", size = 14095021 }, + { url = "https://files.pythonhosted.org/packages/41/6d/a654d519d24e4fcc7a83d4a51209cda086f26cf30722b3d8ffc1aa9b775e/numpy-2.2.0-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:ebe5e59545401fbb1b24da76f006ab19734ae71e703cdb4a8b347e84a0cece67", size = 5125491 }, + { url = "https://files.pythonhosted.org/packages/e6/22/fab7e1510a62e5092f4e6507a279020052b89f11d9cfe52af7f52c243b04/numpy-2.2.0-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:e2b8cd48a9942ed3f85b95ca4105c45758438c7ed28fff1e4ce3e57c3b589d8e", size = 6658534 }, + { url = "https://files.pythonhosted.org/packages/fc/29/a3d938ddc5a534cd53df7ab79d20a68db8c67578de1df0ae0118230f5f54/numpy-2.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57fcc997ffc0bef234b8875a54d4058afa92b0b0c4223fc1f62f24b3b5e86038", size = 14046306 }, + { url = "https://files.pythonhosted.org/packages/90/24/d0bbb56abdd8934f30384632e3c2ca1ebfeb5d17e150c6e366ba291de36b/numpy-2.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85ad7d11b309bd132d74397fcf2920933c9d1dc865487128f5c03d580f2c3d03", size = 16095819 }, + { url = "https://files.pythonhosted.org/packages/99/9c/58a673faa9e8a0e77248e782f7a17410cf7259b326265646fd50ed49c4e1/numpy-2.2.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:cb24cca1968b21355cc6f3da1a20cd1cebd8a023e3c5b09b432444617949085a", size = 15243215 }, + { url = "https://files.pythonhosted.org/packages/9c/61/f311693f78cbf635cfb69ce9e1e857ff83937a27d93c96ac5932fd33e330/numpy-2.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0798b138c291d792f8ea40fe3768610f3c7dd2574389e37c3f26573757c8f7ef", size = 17860175 }, + { url = "https://files.pythonhosted.org/packages/11/3e/491c34262cb1fc9dd13a00beb80d755ee0517b17db20e54cac7aa524533e/numpy-2.2.0-cp312-cp312-win32.whl", hash = "sha256:afe8fb968743d40435c3827632fd36c5fbde633b0423da7692e426529b1759b1", size = 6273281 }, + { url = "https://files.pythonhosted.org/packages/89/ea/00537f599eb230771157bc509f6ea5b2dddf05d4b09f9d2f1d7096a18781/numpy-2.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:3a4199f519e57d517ebd48cb76b36c82da0360781c6a0353e64c0cac30ecaad3", size = 12613227 }, + { url = "https://files.pythonhosted.org/packages/bd/4c/0d1eef206545c994289e7a9de21b642880a11e0ed47a2b0c407c688c4f69/numpy-2.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f8c8b141ef9699ae777c6278b52c706b653bf15d135d302754f6b2e90eb30367", size = 20895707 }, + { url = "https://files.pythonhosted.org/packages/16/cb/88f6c1e6df83002c421d5f854ccf134aa088aa997af786a5dac3f32ec99b/numpy-2.2.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:0f0986e917aca18f7a567b812ef7ca9391288e2acb7a4308aa9d265bd724bdae", size = 14110592 }, + { url = "https://files.pythonhosted.org/packages/b4/54/817e6894168a43f33dca74199ba0dd0f1acd99aa6323ed6d323d63d640a2/numpy-2.2.0-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:1c92113619f7b272838b8d6702a7f8ebe5edea0df48166c47929611d0b4dea69", size = 5110858 }, + { url = "https://files.pythonhosted.org/packages/c7/99/00d8a1a8eb70425bba7880257ed73fed08d3e8d05da4202fb6b9a81d5ee4/numpy-2.2.0-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:5a145e956b374e72ad1dff82779177d4a3c62bc8248f41b80cb5122e68f22d13", size = 6645143 }, + { url = "https://files.pythonhosted.org/packages/34/86/5b9c2b7c56e7a9d9297a0a4be0b8433f498eba52a8f5892d9132b0f64627/numpy-2.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18142b497d70a34b01642b9feabb70156311b326fdddd875a9981f34a369b671", size = 14042812 }, + { url = "https://files.pythonhosted.org/packages/df/54/13535f74391dbe5f479ceed96f1403267be302c840040700d4fd66688089/numpy-2.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a7d41d1612c1a82b64697e894b75db6758d4f21c3ec069d841e60ebe54b5b571", size = 16093419 }, + { url = "https://files.pythonhosted.org/packages/dd/37/dfb2056842ac61315f225aa56f455da369f5223e4c5a38b91d20da1b628b/numpy-2.2.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a98f6f20465e7618c83252c02041517bd2f7ea29be5378f09667a8f654a5918d", size = 15238969 }, + { url = "https://files.pythonhosted.org/packages/5a/3d/d20d24ee313992f0b7e7b9d9eef642d9b545d39d5b91c4a2cc8c98776328/numpy-2.2.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e09d40edfdb4e260cb1567d8ae770ccf3b8b7e9f0d9b5c2a9992696b30ce2742", size = 17855705 }, + { url = "https://files.pythonhosted.org/packages/5b/40/944c9ee264f875a2db6f79380944fd2b5bb9d712bb4a134d11f45ad5b693/numpy-2.2.0-cp313-cp313-win32.whl", hash = "sha256:3905a5fffcc23e597ee4d9fb3fcd209bd658c352657548db7316e810ca80458e", size = 6270078 }, + { url = "https://files.pythonhosted.org/packages/30/04/e1ee6f8b22034302d4c5c24e15782bdedf76d90b90f3874ed0b48525def0/numpy-2.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:a184288538e6ad699cbe6b24859206e38ce5fba28f3bcfa51c90d0502c1582b2", size = 12605791 }, + { url = "https://files.pythonhosted.org/packages/ef/fb/51d458625cd6134d60ac15180ae50995d7d21b0f2f92a6286ae7b0792d19/numpy-2.2.0-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:7832f9e8eb00be32f15fdfb9a981d6955ea9adc8574c521d48710171b6c55e95", size = 20920160 }, + { url = "https://files.pythonhosted.org/packages/b4/34/162ae0c5d2536ea4be98c813b5161c980f0443cd5765fde16ddfe3450140/numpy-2.2.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:f0dd071b95bbca244f4cb7f70b77d2ff3aaaba7fa16dc41f58d14854a6204e6c", size = 14119064 }, + { url = "https://files.pythonhosted.org/packages/17/6c/4195dd0e1c41c55f466d516e17e9e28510f32af76d23061ea3da67438e3c/numpy-2.2.0-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:b0b227dcff8cdc3efbce66d4e50891f04d0a387cce282fe1e66199146a6a8fca", size = 5152778 }, + { url = "https://files.pythonhosted.org/packages/2f/47/ea804ae525832c8d05ed85b560dfd242d34e4bb0962bc269ccaa720fb934/numpy-2.2.0-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:6ab153263a7c5ccaf6dfe7e53447b74f77789f28ecb278c3b5d49db7ece10d6d", size = 6667605 }, + { url = "https://files.pythonhosted.org/packages/76/99/34d20e50b3d894bb16b5374bfbee399ab8ff3a33bf1e1f0b8acfe7bbd70d/numpy-2.2.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e500aba968a48e9019e42c0c199b7ec0696a97fa69037bea163b55398e390529", size = 14013275 }, + { url = "https://files.pythonhosted.org/packages/69/8f/a1df7bd02d434ab82539517d1b98028985700cfc4300bc5496fb140ca648/numpy-2.2.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:440cfb3db4c5029775803794f8638fbdbf71ec702caf32735f53b008e1eaece3", size = 16074900 }, + { url = "https://files.pythonhosted.org/packages/04/94/b419e7a76bf21a00fcb03c613583f10e389fdc8dfe420412ff5710c8ad3d/numpy-2.2.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a55dc7a7f0b6198b07ec0cd445fbb98b05234e8b00c5ac4874a63372ba98d4ab", size = 15219122 }, + { url = "https://files.pythonhosted.org/packages/65/d9/dddf398b2b6c5d750892a207a469c2854a8db0f033edaf72103af8cf05aa/numpy-2.2.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:4bddbaa30d78c86329b26bd6aaaea06b1e47444da99eddac7bf1e2fab717bd72", size = 17851668 }, + { url = "https://files.pythonhosted.org/packages/d4/dc/09a4e5819a9782a213c0eb4eecacdc1cd75ad8dac99279b04cfccb7eeb0a/numpy-2.2.0-cp313-cp313t-win32.whl", hash = "sha256:30bf971c12e4365153afb31fc73f441d4da157153f3400b82db32d04de1e4066", size = 6325288 }, + { url = "https://files.pythonhosted.org/packages/ce/e1/e0d06ec34036c92b43aef206efe99a5f5f04e12c776eab82a36e00c40afc/numpy-2.2.0-cp313-cp313t-win_amd64.whl", hash = "sha256:d35717333b39d1b6bb8433fa758a55f1081543de527171543a2b710551d40881", size = 12692303 }, + { url = "https://files.pythonhosted.org/packages/f3/18/6d4e1274f221073058b621f4df8050958b7564b24b4fa25be9f1b7639274/numpy-2.2.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:e12c6c1ce84628c52d6367863773f7c8c8241be554e8b79686e91a43f1733773", size = 21043901 }, + { url = "https://files.pythonhosted.org/packages/19/3e/2b20599e7ead7ae1b89a77bb34f88c5ec12e43fbb320576ed646388d2cb7/numpy-2.2.0-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:b6207dc8fb3c8cb5668e885cef9ec7f70189bec4e276f0ff70d5aa078d32c88e", size = 6789122 }, + { url = "https://files.pythonhosted.org/packages/c9/5a/378954132c192fafa6c3d5c160092a427c7562e5bda0cc6ad9cc37008a7a/numpy-2.2.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a50aeff71d0f97b6450d33940c7181b08be1441c6c193e678211bff11aa725e7", size = 16194018 }, + { url = "https://files.pythonhosted.org/packages/67/17/209bda34fc83f3436834392f44643e66dcf3c77465f232102e7f1c7d8eae/numpy-2.2.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:df12a1f99b99f569a7c2ae59aa2d31724e8d835fc7f33e14f4792e3071d11221", size = 12819486 }, ] [[package]] name = "packaging" -version = "24.1" +version = "24.2" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/51/65/50db4dda066951078f0a96cf12f4b9ada6e4b811516bf0262c0f4f7064d4/packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002", size = 148788 } +sdist = { url = "https://files.pythonhosted.org/packages/d0/63/68dbb6eb2de9cb10ee4c9c14a0148804425e13c4fb20d61cce69f53106da/packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f", size = 163950 } wheels = [ - { url = "https://files.pythonhosted.org/packages/08/aa/cc0199a5f0ad350994d660967a8efb233fe0416e4639146c089643407ce6/packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124", size = 53985 }, + { url = "https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759", size = 65451 }, ] [[package]] name = "pip" -version = "24.2" +version = "24.3.1" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/4d/87/fb90046e096a03aeab235e139436b3fe804cdd447ed2093b0d70eba3f7f8/pip-24.2.tar.gz", hash = "sha256:5b5e490b5e9cb275c879595064adce9ebd31b854e3e803740b72f9ccf34a45b8", size = 1922041 } +sdist = { url = "https://files.pythonhosted.org/packages/f4/b1/b422acd212ad7eedddaf7981eee6e5de085154ff726459cf2da7c5a184c1/pip-24.3.1.tar.gz", hash = "sha256:ebcb60557f2aefabc2e0f918751cd24ea0d56d8ec5445fe1807f1d2109660b99", size = 1931073 } wheels = [ - { url = "https://files.pythonhosted.org/packages/d4/55/90db48d85f7689ec6f81c0db0622d704306c5284850383c090e6c7195a5c/pip-24.2-py3-none-any.whl", hash = "sha256:2cd581cf58ab7fcfca4ce8efa6dcacd0de5bf8d0a3eb9ec927e07405f4d9e2a2", size = 1815170 }, + { url = "https://files.pythonhosted.org/packages/ef/7d/500c9ad20238fcfcb4cb9243eede163594d7020ce87bd9610c9e02771876/pip-24.3.1-py3-none-any.whl", hash = "sha256:3790624780082365f47549d032f3770eeb2b1e8bd1f7b2e02dace1afa361b4ed", size = 1822182 }, ] [[package]] name = "platformdirs" -version = "4.2.2" +version = "4.3.6" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/f5/52/0763d1d976d5c262df53ddda8d8d4719eedf9594d046f117c25a27261a19/platformdirs-4.2.2.tar.gz", hash = "sha256:38b7b51f512eed9e84a22788b4bce1de17c0adb134d6becb09836e37d8654cd3", size = 20916 } +sdist = { url = "https://files.pythonhosted.org/packages/13/fc/128cc9cb8f03208bdbf93d3aa862e16d376844a14f9a0ce5cf4507372de4/platformdirs-4.3.6.tar.gz", hash = "sha256:357fb2acbc885b0419afd3ce3ed34564c13c9b95c89360cd9563f73aa5e2b907", size = 21302 } wheels = [ - { url = "https://files.pythonhosted.org/packages/68/13/2aa1f0e1364feb2c9ef45302f387ac0bd81484e9c9a4c5688a322fbdfd08/platformdirs-4.2.2-py3-none-any.whl", hash = "sha256:2d7a1657e36a80ea911db832a8a6ece5ee53d8de21edd5cc5879af6530b1bfee", size = 18146 }, + { url = "https://files.pythonhosted.org/packages/3c/a6/bc1012356d8ece4d66dd75c4b9fc6c1f6650ddd5991e421177d9f8f671be/platformdirs-4.3.6-py3-none-any.whl", hash = "sha256:73e575e1408ab8103900836b97580d5307456908a03e92031bab39e4554cc3fb", size = 18439 }, ] [[package]] @@ -466,100 +490,109 @@ wheels = [ [[package]] name = "pydantic" -version = "2.8.2" +version = "2.10.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "annotated-types" }, { name = "pydantic-core" }, { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/8c/99/d0a5dca411e0a017762258013ba9905cd6e7baa9a3fd1fe8b6529472902e/pydantic-2.8.2.tar.gz", hash = "sha256:6f62c13d067b0755ad1c21a34bdd06c0c12625a22b0fc09c6b149816604f7c2a", size = 739834 } +sdist = { url = "https://files.pythonhosted.org/packages/45/0f/27908242621b14e649a84e62b133de45f84c255eecb350ab02979844a788/pydantic-2.10.3.tar.gz", hash = "sha256:cb5ac360ce894ceacd69c403187900a02c4b20b693a9dd1d643e1effab9eadf9", size = 786486 } wheels = [ - { url = "https://files.pythonhosted.org/packages/1f/fa/b7f815b8c9ad021c07f88875b601222ef5e70619391ade4a49234d12d278/pydantic-2.8.2-py3-none-any.whl", hash = "sha256:73ee9fddd406dc318b885c7a2eab8a6472b68b8fb5ba8150949fc3db939f23c8", size = 423875 }, + { url = "https://files.pythonhosted.org/packages/62/51/72c18c55cf2f46ff4f91ebcc8f75aa30f7305f3d726be3f4ebffb4ae972b/pydantic-2.10.3-py3-none-any.whl", hash = "sha256:be04d85bbc7b65651c5f8e6b9976ed9c6f41782a55524cef079a34a0bb82144d", size = 456997 }, ] [[package]] name = "pydantic-core" -version = "2.20.1" +version = "2.27.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/12/e3/0d5ad91211dba310f7ded335f4dad871172b9cc9ce204f5a56d76ccd6247/pydantic_core-2.20.1.tar.gz", hash = "sha256:26ca695eeee5f9f1aeeb211ffc12f10bcb6f71e2989988fda61dabd65db878d4", size = 388371 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/6b/9d/f30f080f745682e762512f3eef1f6e392c7d74a102e6e96de8a013a5db84/pydantic_core-2.20.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3acae97ffd19bf091c72df4d726d552c473f3576409b2a7ca36b2f535ffff4a3", size = 1837257 }, - { url = "https://files.pythonhosted.org/packages/f2/89/77e7aebdd4a235497ac1e07f0a99e9f40e47f6e0f6783fe30500df08fc42/pydantic_core-2.20.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:41f4c96227a67a013e7de5ff8f20fb496ce573893b7f4f2707d065907bffdbd6", size = 1776715 }, - { url = "https://files.pythonhosted.org/packages/18/50/5a4e9120b395108c2a0441a425356c0d26a655d7c617288bec1c28b854ac/pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f239eb799a2081495ea659d8d4a43a8f42cd1fe9ff2e7e436295c38a10c286a", size = 1789023 }, - { url = "https://files.pythonhosted.org/packages/c7/e5/f19e13ba86b968d024b56aa53f40b24828652ac026e5addd0ae49eeada02/pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:53e431da3fc53360db73eedf6f7124d1076e1b4ee4276b36fb25514544ceb4a3", size = 1775598 }, - { url = "https://files.pythonhosted.org/packages/c9/c7/f3c29bed28bd022c783baba5bf9946c4f694cb837a687e62f453c81eb5c6/pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f1f62b2413c3a0e846c3b838b2ecd6c7a19ec6793b2a522745b0869e37ab5bc1", size = 1977691 }, - { url = "https://files.pythonhosted.org/packages/41/3e/f62c2a05c554fff34570f6788617e9670c83ed7bc07d62a55cccd1bc0be6/pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5d41e6daee2813ecceea8eda38062d69e280b39df793f5a942fa515b8ed67953", size = 2693214 }, - { url = "https://files.pythonhosted.org/packages/ae/49/8a6fe79d35e2f3bea566d8ea0e4e6f436d4f749d7838c8e8c4c5148ae706/pydantic_core-2.20.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d482efec8b7dc6bfaedc0f166b2ce349df0011f5d2f1f25537ced4cfc34fd98", size = 2061047 }, - { url = "https://files.pythonhosted.org/packages/51/c6/585355c7c8561e11197dbf6333c57dd32f9f62165d48589b57ced2373d97/pydantic_core-2.20.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e93e1a4b4b33daed65d781a57a522ff153dcf748dee70b40c7258c5861e1768a", size = 1895106 }, - { url = "https://files.pythonhosted.org/packages/ce/23/829f6b87de0775919e82f8addef8b487ace1c77bb4cb754b217f7b1301b6/pydantic_core-2.20.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e7c4ea22b6739b162c9ecaaa41d718dfad48a244909fe7ef4b54c0b530effc5a", size = 1968506 }, - { url = "https://files.pythonhosted.org/packages/ca/2f/f8ca8f0c40b3ee0a4d8730a51851adb14c5eda986ec09f8d754b2fba784e/pydantic_core-2.20.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4f2790949cf385d985a31984907fecb3896999329103df4e4983a4a41e13e840", size = 2110217 }, - { url = "https://files.pythonhosted.org/packages/bb/a0/1876656c7b17eb69cc683452cce6bb890dd722222a71b3de57ddb512f561/pydantic_core-2.20.1-cp310-none-win32.whl", hash = "sha256:5e999ba8dd90e93d57410c5e67ebb67ffcaadcea0ad973240fdfd3a135506250", size = 1709669 }, - { url = "https://files.pythonhosted.org/packages/be/4a/576524eefa9b301c088c4818dc50ff1c51a88fe29efd87ab75748ae15fd7/pydantic_core-2.20.1-cp310-none-win_amd64.whl", hash = "sha256:512ecfbefef6dac7bc5eaaf46177b2de58cdf7acac8793fe033b24ece0b9566c", size = 1902386 }, - { url = "https://files.pythonhosted.org/packages/61/db/f6a724db226d990a329910727cfac43539ff6969edc217286dd05cda3ef6/pydantic_core-2.20.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d2a8fa9d6d6f891f3deec72f5cc668e6f66b188ab14bb1ab52422fe8e644f312", size = 1834507 }, - { url = "https://files.pythonhosted.org/packages/9b/83/6f2bfe75209d557ae1c3550c1252684fc1827b8b12fbed84c3b4439e135d/pydantic_core-2.20.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:175873691124f3d0da55aeea1d90660a6ea7a3cfea137c38afa0a5ffabe37b88", size = 1773527 }, - { url = "https://files.pythonhosted.org/packages/93/ef/513ea76d7ca81f2354bb9c8d7839fc1157673e652613f7e1aff17d8ce05d/pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:37eee5b638f0e0dcd18d21f59b679686bbd18917b87db0193ae36f9c23c355fc", size = 1787879 }, - { url = "https://files.pythonhosted.org/packages/31/0a/ac294caecf235f0cc651de6232f1642bb793af448d1cfc541b0dc1fd72b8/pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:25e9185e2d06c16ee438ed39bf62935ec436474a6ac4f9358524220f1b236e43", size = 1774694 }, - { url = "https://files.pythonhosted.org/packages/46/a4/08f12b5512f095963550a7cb49ae010e3f8f3f22b45e508c2cb4d7744fce/pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:150906b40ff188a3260cbee25380e7494ee85048584998c1e66df0c7a11c17a6", size = 1976369 }, - { url = "https://files.pythonhosted.org/packages/15/59/b2495be4410462aedb399071c71884042a2c6443319cbf62d00b4a7ed7a5/pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8ad4aeb3e9a97286573c03df758fc7627aecdd02f1da04516a86dc159bf70121", size = 2691250 }, - { url = "https://files.pythonhosted.org/packages/3c/ae/fc99ce1ba791c9e9d1dee04ce80eef1dae5b25b27e3fc8e19f4e3f1348bf/pydantic_core-2.20.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d3f3ed29cd9f978c604708511a1f9c2fdcb6c38b9aae36a51905b8811ee5cbf1", size = 2061462 }, - { url = "https://files.pythonhosted.org/packages/44/bb/eb07cbe47cfd638603ce3cb8c220f1a054b821e666509e535f27ba07ca5f/pydantic_core-2.20.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b0dae11d8f5ded51699c74d9548dcc5938e0804cc8298ec0aa0da95c21fff57b", size = 1893923 }, - { url = "https://files.pythonhosted.org/packages/ce/ef/5a52400553b8faa0e7f11fd7a2ba11e8d2feb50b540f9e7973c49b97eac0/pydantic_core-2.20.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:faa6b09ee09433b87992fb5a2859efd1c264ddc37280d2dd5db502126d0e7f27", size = 1966779 }, - { url = "https://files.pythonhosted.org/packages/4c/5b/fb37fe341344d9651f5c5f579639cd97d50a457dc53901aa8f7e9f28beb9/pydantic_core-2.20.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9dc1b507c12eb0481d071f3c1808f0529ad41dc415d0ca11f7ebfc666e66a18b", size = 2109044 }, - { url = "https://files.pythonhosted.org/packages/70/1a/6f7278802dbc66716661618807ab0dfa4fc32b09d1235923bbbe8b3a5757/pydantic_core-2.20.1-cp311-none-win32.whl", hash = "sha256:fa2fddcb7107e0d1808086ca306dcade7df60a13a6c347a7acf1ec139aa6789a", size = 1708265 }, - { url = "https://files.pythonhosted.org/packages/35/7f/58758c42c61b0bdd585158586fecea295523d49933cb33664ea888162daf/pydantic_core-2.20.1-cp311-none-win_amd64.whl", hash = "sha256:40a783fb7ee353c50bd3853e626f15677ea527ae556429453685ae32280c19c2", size = 1901750 }, - { url = "https://files.pythonhosted.org/packages/6f/47/ef0d60ae23c41aced42921728650460dc831a0adf604bfa66b76028cb4d0/pydantic_core-2.20.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:595ba5be69b35777474fa07f80fc260ea71255656191adb22a8c53aba4479231", size = 1839225 }, - { url = "https://files.pythonhosted.org/packages/6a/23/430f2878c9cd977a61bb39f71751d9310ec55cee36b3d5bf1752c6341fd0/pydantic_core-2.20.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a4f55095ad087474999ee28d3398bae183a66be4823f753cd7d67dd0153427c9", size = 1768604 }, - { url = "https://files.pythonhosted.org/packages/9e/2b/ec4e7225dee79e0dc80ccc3c35ab33cc2c4bbb8a1a7ecf060e5e453651ec/pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9aa05d09ecf4c75157197f27cdc9cfaeb7c5f15021c6373932bf3e124af029f", size = 1789767 }, - { url = "https://files.pythonhosted.org/packages/64/b0/38b24a1fa6d2f96af3148362e10737ec073768cd44d3ec21dca3be40a519/pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e97fdf088d4b31ff4ba35db26d9cc472ac7ef4a2ff2badeabf8d727b3377fc52", size = 1772061 }, - { url = "https://files.pythonhosted.org/packages/5e/da/bb73274c42cb60decfa61e9eb0c9029da78b3b9af0a9de0309dbc8ff87b6/pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bc633a9fe1eb87e250b5c57d389cf28998e4292336926b0b6cdaee353f89a237", size = 1974573 }, - { url = "https://files.pythonhosted.org/packages/c8/65/41693110fb3552556180460daffdb8bbeefb87fc026fd9aa4b849374015c/pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d573faf8eb7e6b1cbbcb4f5b247c60ca8be39fe2c674495df0eb4318303137fe", size = 2625596 }, - { url = "https://files.pythonhosted.org/packages/09/b3/a5a54b47cccd1ab661ed5775235c5e06924753c2d4817737c5667bfa19a8/pydantic_core-2.20.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26dc97754b57d2fd00ac2b24dfa341abffc380b823211994c4efac7f13b9e90e", size = 2099064 }, - { url = "https://files.pythonhosted.org/packages/52/fa/443a7a6ea54beaba45ff3a59f3d3e6e3004b7460bcfb0be77bcf98719d3b/pydantic_core-2.20.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:33499e85e739a4b60c9dac710c20a08dc73cb3240c9a0e22325e671b27b70d24", size = 1900345 }, - { url = "https://files.pythonhosted.org/packages/8e/e6/9aca9ffae60f9cdf0183069de3e271889b628d0fb175913fcb3db5618fb1/pydantic_core-2.20.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:bebb4d6715c814597f85297c332297c6ce81e29436125ca59d1159b07f423eb1", size = 1968252 }, - { url = "https://files.pythonhosted.org/packages/46/5e/6c716810ea20a6419188992973a73c2fb4eb99cd382368d0637ddb6d3c99/pydantic_core-2.20.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:516d9227919612425c8ef1c9b869bbbee249bc91912c8aaffb66116c0b447ebd", size = 2119191 }, - { url = "https://files.pythonhosted.org/packages/06/fc/6123b00a9240fbb9ae0babad7a005d51103d9a5d39c957a986f5cdd0c271/pydantic_core-2.20.1-cp312-none-win32.whl", hash = "sha256:469f29f9093c9d834432034d33f5fe45699e664f12a13bf38c04967ce233d688", size = 1717788 }, - { url = "https://files.pythonhosted.org/packages/d5/36/e61ad5a46607a469e2786f398cd671ebafcd9fb17f09a2359985c7228df5/pydantic_core-2.20.1-cp312-none-win_amd64.whl", hash = "sha256:035ede2e16da7281041f0e626459bcae33ed998cca6a0a007a5ebb73414ac72d", size = 1898188 }, - { url = "https://files.pythonhosted.org/packages/49/75/40b0e98b658fdba02a693b3bacb4c875a28bba87796c7b13975976597d8c/pydantic_core-2.20.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:0827505a5c87e8aa285dc31e9ec7f4a17c81a813d45f70b1d9164e03a813a686", size = 1838688 }, - { url = "https://files.pythonhosted.org/packages/75/02/d8ba2d4a266591a6a623c68b331b96523d4b62ab82a951794e3ed8907390/pydantic_core-2.20.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:19c0fa39fa154e7e0b7f82f88ef85faa2a4c23cc65aae2f5aea625e3c13c735a", size = 1768409 }, - { url = "https://files.pythonhosted.org/packages/91/ae/25ecd9bc4ce4993e99a1a3c9ab111c082630c914260e129572fafed4ecc2/pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4aa223cd1e36b642092c326d694d8bf59b71ddddc94cdb752bbbb1c5c91d833b", size = 1789317 }, - { url = "https://files.pythonhosted.org/packages/7a/80/72057580681cdbe55699c367963d9c661b569a1d39338b4f6239faf36cdc/pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c336a6d235522a62fef872c6295a42ecb0c4e1d0f1a3e500fe949415761b8a19", size = 1771949 }, - { url = "https://files.pythonhosted.org/packages/a2/be/d9bbabc55b05019013180f141fcaf3b14dbe15ca7da550e95b60c321009a/pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7eb6a0587eded33aeefea9f916899d42b1799b7b14b8f8ff2753c0ac1741edac", size = 1974392 }, - { url = "https://files.pythonhosted.org/packages/79/2d/7bcd938c6afb0f40293283f5f09988b61fb0a4f1d180abe7c23a2f665f8e/pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:70c8daf4faca8da5a6d655f9af86faf6ec2e1768f4b8b9d0226c02f3d6209703", size = 2625565 }, - { url = "https://files.pythonhosted.org/packages/ac/88/ca758e979457096008a4b16a064509028e3e092a1e85a5ed6c18ced8da88/pydantic_core-2.20.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e9fa4c9bf273ca41f940bceb86922a7667cd5bf90e95dbb157cbb8441008482c", size = 2098784 }, - { url = "https://files.pythonhosted.org/packages/eb/de/2fad6d63c3c42e472e985acb12ec45b7f56e42e6f4cd6dfbc5e87ee8678c/pydantic_core-2.20.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:11b71d67b4725e7e2a9f6e9c0ac1239bbc0c48cce3dc59f98635efc57d6dac83", size = 1900198 }, - { url = "https://files.pythonhosted.org/packages/fe/50/077c7f35b6488dc369a6d22993af3a37901e198630f38ac43391ca730f5b/pydantic_core-2.20.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:270755f15174fb983890c49881e93f8f1b80f0b5e3a3cc1394a255706cabd203", size = 1968005 }, - { url = "https://files.pythonhosted.org/packages/5d/1f/f378631574ead46d636b9a04a80ff878b9365d4b361b1905ef1667d4182a/pydantic_core-2.20.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:c81131869240e3e568916ef4c307f8b99583efaa60a8112ef27a366eefba8ef0", size = 2118920 }, - { url = "https://files.pythonhosted.org/packages/7a/ea/e4943f17df7a3031d709481fe4363d4624ae875a6409aec34c28c9e6cf59/pydantic_core-2.20.1-cp313-none-win32.whl", hash = "sha256:b91ced227c41aa29c672814f50dbb05ec93536abf8f43cd14ec9521ea09afe4e", size = 1717397 }, - { url = "https://files.pythonhosted.org/packages/13/63/b95781763e8d84207025071c0cec16d921c0163c7a9033ae4b9a0e020dc7/pydantic_core-2.20.1-cp313-none-win_amd64.whl", hash = "sha256:65db0f2eefcaad1a3950f498aabb4875c8890438bc80b19362cf633b87a8ab20", size = 1898013 }, - { url = "https://files.pythonhosted.org/packages/73/73/0c7265903f66cce39ed7ca939684fba344210cefc91ccc999cfd5b113fd3/pydantic_core-2.20.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a45f84b09ac9c3d35dfcf6a27fd0634d30d183205230a0ebe8373a0e8cfa0906", size = 1828190 }, - { url = "https://files.pythonhosted.org/packages/27/55/60b8b0e58b49ee3ed36a18562dd7c6bc06a551c390e387af5872a238f2ec/pydantic_core-2.20.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d02a72df14dfdbaf228424573a07af10637bd490f0901cee872c4f434a735b94", size = 1715252 }, - { url = "https://files.pythonhosted.org/packages/28/3d/d66314bad6bb777a36559195a007b31e916bd9e2c198f7bb8f4ccdceb4fa/pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d2b27e6af28f07e2f195552b37d7d66b150adbaa39a6d327766ffd695799780f", size = 1782641 }, - { url = "https://files.pythonhosted.org/packages/9e/f5/f178f4354d0d6c1431a8f9ede71f3c4269ac4dc55d314fdb7555814276dc/pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:084659fac3c83fd674596612aeff6041a18402f1e1bc19ca39e417d554468482", size = 1928788 }, - { url = "https://files.pythonhosted.org/packages/9c/51/1f5e27bb194df79e30b593b608c66e881ed481241e2b9ed5bdf86d165480/pydantic_core-2.20.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:242b8feb3c493ab78be289c034a1f659e8826e2233786e36f2893a950a719bb6", size = 1886116 }, - { url = "https://files.pythonhosted.org/packages/ac/76/450d9258c58dc7c70b9e3aadf6bebe23ddd99e459c365e2adbde80e238da/pydantic_core-2.20.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:38cf1c40a921d05c5edc61a785c0ddb4bed67827069f535d794ce6bcded919fc", size = 1960125 }, - { url = "https://files.pythonhosted.org/packages/dd/9e/0309a7a4bea51771729515e413b3987be0789837de99087f7415e0db1f9b/pydantic_core-2.20.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:e0bbdd76ce9aa5d4209d65f2b27fc6e5ef1312ae6c5333c26db3f5ade53a1e99", size = 2100407 }, - { url = "https://files.pythonhosted.org/packages/af/93/06d44e08277b3b818b75bd5f25e879d7693e4b7dd3505fde89916fcc9ca2/pydantic_core-2.20.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:254ec27fdb5b1ee60684f91683be95e5133c994cc54e86a0b0963afa25c8f8a6", size = 1914966 }, +sdist = { url = "https://files.pythonhosted.org/packages/a6/9f/7de1f19b6aea45aeb441838782d68352e71bfa98ee6fa048d5041991b33e/pydantic_core-2.27.1.tar.gz", hash = "sha256:62a763352879b84aa31058fc931884055fd75089cccbd9d58bb6afd01141b235", size = 412785 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6e/ce/60fd96895c09738648c83f3f00f595c807cb6735c70d3306b548cc96dd49/pydantic_core-2.27.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:71a5e35c75c021aaf400ac048dacc855f000bdfed91614b4a726f7432f1f3d6a", size = 1897984 }, + { url = "https://files.pythonhosted.org/packages/fd/b9/84623d6b6be98cc209b06687d9bca5a7b966ffed008d15225dd0d20cce2e/pydantic_core-2.27.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f82d068a2d6ecfc6e054726080af69a6764a10015467d7d7b9f66d6ed5afa23b", size = 1807491 }, + { url = "https://files.pythonhosted.org/packages/01/72/59a70165eabbc93b1111d42df9ca016a4aa109409db04304829377947028/pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:121ceb0e822f79163dd4699e4c54f5ad38b157084d97b34de8b232bcaad70278", size = 1831953 }, + { url = "https://files.pythonhosted.org/packages/7c/0c/24841136476adafd26f94b45bb718a78cb0500bd7b4f8d667b67c29d7b0d/pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4603137322c18eaf2e06a4495f426aa8d8388940f3c457e7548145011bb68e05", size = 1856071 }, + { url = "https://files.pythonhosted.org/packages/53/5e/c32957a09cceb2af10d7642df45d1e3dbd8596061f700eac93b801de53c0/pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a33cd6ad9017bbeaa9ed78a2e0752c5e250eafb9534f308e7a5f7849b0b1bfb4", size = 2038439 }, + { url = "https://files.pythonhosted.org/packages/e4/8f/979ab3eccd118b638cd6d8f980fea8794f45018255a36044dea40fe579d4/pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:15cc53a3179ba0fcefe1e3ae50beb2784dede4003ad2dfd24f81bba4b23a454f", size = 2787416 }, + { url = "https://files.pythonhosted.org/packages/02/1d/00f2e4626565b3b6d3690dab4d4fe1a26edd6a20e53749eb21ca892ef2df/pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45d9c5eb9273aa50999ad6adc6be5e0ecea7e09dbd0d31bd0c65a55a2592ca08", size = 2134548 }, + { url = "https://files.pythonhosted.org/packages/9d/46/3112621204128b90898adc2e721a3cd6cf5626504178d6f32c33b5a43b79/pydantic_core-2.27.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8bf7b66ce12a2ac52d16f776b31d16d91033150266eb796967a7e4621707e4f6", size = 1989882 }, + { url = "https://files.pythonhosted.org/packages/49/ec/557dd4ff5287ffffdf16a31d08d723de6762bb1b691879dc4423392309bc/pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:655d7dd86f26cb15ce8a431036f66ce0318648f8853d709b4167786ec2fa4807", size = 1995829 }, + { url = "https://files.pythonhosted.org/packages/6e/b2/610dbeb74d8d43921a7234555e4c091cb050a2bdb8cfea86d07791ce01c5/pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:5556470f1a2157031e676f776c2bc20acd34c1990ca5f7e56f1ebf938b9ab57c", size = 2091257 }, + { url = "https://files.pythonhosted.org/packages/8c/7f/4bf8e9d26a9118521c80b229291fa9558a07cdd9a968ec2d5c1026f14fbc/pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f69ed81ab24d5a3bd93861c8c4436f54afdf8e8cc421562b0c7504cf3be58206", size = 2143894 }, + { url = "https://files.pythonhosted.org/packages/1f/1c/875ac7139c958f4390f23656fe696d1acc8edf45fb81e4831960f12cd6e4/pydantic_core-2.27.1-cp310-none-win32.whl", hash = "sha256:f5a823165e6d04ccea61a9f0576f345f8ce40ed533013580e087bd4d7442b52c", size = 1816081 }, + { url = "https://files.pythonhosted.org/packages/d7/41/55a117acaeda25ceae51030b518032934f251b1dac3704a53781383e3491/pydantic_core-2.27.1-cp310-none-win_amd64.whl", hash = "sha256:57866a76e0b3823e0b56692d1a0bf722bffb324839bb5b7226a7dbd6c9a40b17", size = 1981109 }, + { url = "https://files.pythonhosted.org/packages/27/39/46fe47f2ad4746b478ba89c561cafe4428e02b3573df882334bd2964f9cb/pydantic_core-2.27.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:ac3b20653bdbe160febbea8aa6c079d3df19310d50ac314911ed8cc4eb7f8cb8", size = 1895553 }, + { url = "https://files.pythonhosted.org/packages/1c/00/0804e84a78b7fdb394fff4c4f429815a10e5e0993e6ae0e0b27dd20379ee/pydantic_core-2.27.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a5a8e19d7c707c4cadb8c18f5f60c843052ae83c20fa7d44f41594c644a1d330", size = 1807220 }, + { url = "https://files.pythonhosted.org/packages/01/de/df51b3bac9820d38371f5a261020f505025df732ce566c2a2e7970b84c8c/pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f7059ca8d64fea7f238994c97d91f75965216bcbe5f695bb44f354893f11d52", size = 1829727 }, + { url = "https://files.pythonhosted.org/packages/5f/d9/c01d19da8f9e9fbdb2bf99f8358d145a312590374d0dc9dd8dbe484a9cde/pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bed0f8a0eeea9fb72937ba118f9db0cb7e90773462af7962d382445f3005e5a4", size = 1854282 }, + { url = "https://files.pythonhosted.org/packages/5f/84/7db66eb12a0dc88c006abd6f3cbbf4232d26adfd827a28638c540d8f871d/pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a3cb37038123447cf0f3ea4c74751f6a9d7afef0eb71aa07bf5f652b5e6a132c", size = 2037437 }, + { url = "https://files.pythonhosted.org/packages/34/ac/a2537958db8299fbabed81167d58cc1506049dba4163433524e06a7d9f4c/pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:84286494f6c5d05243456e04223d5a9417d7f443c3b76065e75001beb26f88de", size = 2780899 }, + { url = "https://files.pythonhosted.org/packages/4a/c1/3e38cd777ef832c4fdce11d204592e135ddeedb6c6f525478a53d1c7d3e5/pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acc07b2cfc5b835444b44a9956846b578d27beeacd4b52e45489e93276241025", size = 2135022 }, + { url = "https://files.pythonhosted.org/packages/7a/69/b9952829f80fd555fe04340539d90e000a146f2a003d3fcd1e7077c06c71/pydantic_core-2.27.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4fefee876e07a6e9aad7a8c8c9f85b0cdbe7df52b8a9552307b09050f7512c7e", size = 1987969 }, + { url = "https://files.pythonhosted.org/packages/05/72/257b5824d7988af43460c4e22b63932ed651fe98804cc2793068de7ec554/pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:258c57abf1188926c774a4c94dd29237e77eda19462e5bb901d88adcab6af919", size = 1994625 }, + { url = "https://files.pythonhosted.org/packages/73/c3/78ed6b7f3278a36589bcdd01243189ade7fc9b26852844938b4d7693895b/pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:35c14ac45fcfdf7167ca76cc80b2001205a8d5d16d80524e13508371fb8cdd9c", size = 2090089 }, + { url = "https://files.pythonhosted.org/packages/8d/c8/b4139b2f78579960353c4cd987e035108c93a78371bb19ba0dc1ac3b3220/pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d1b26e1dff225c31897696cab7d4f0a315d4c0d9e8666dbffdb28216f3b17fdc", size = 2142496 }, + { url = "https://files.pythonhosted.org/packages/3e/f8/171a03e97eb36c0b51981efe0f78460554a1d8311773d3d30e20c005164e/pydantic_core-2.27.1-cp311-none-win32.whl", hash = "sha256:2cdf7d86886bc6982354862204ae3b2f7f96f21a3eb0ba5ca0ac42c7b38598b9", size = 1811758 }, + { url = "https://files.pythonhosted.org/packages/6a/fe/4e0e63c418c1c76e33974a05266e5633e879d4061f9533b1706a86f77d5b/pydantic_core-2.27.1-cp311-none-win_amd64.whl", hash = "sha256:3af385b0cee8df3746c3f406f38bcbfdc9041b5c2d5ce3e5fc6637256e60bbc5", size = 1980864 }, + { url = "https://files.pythonhosted.org/packages/50/fc/93f7238a514c155a8ec02fc7ac6376177d449848115e4519b853820436c5/pydantic_core-2.27.1-cp311-none-win_arm64.whl", hash = "sha256:81f2ec23ddc1b476ff96563f2e8d723830b06dceae348ce02914a37cb4e74b89", size = 1864327 }, + { url = "https://files.pythonhosted.org/packages/be/51/2e9b3788feb2aebff2aa9dfbf060ec739b38c05c46847601134cc1fed2ea/pydantic_core-2.27.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9cbd94fc661d2bab2bc702cddd2d3370bbdcc4cd0f8f57488a81bcce90c7a54f", size = 1895239 }, + { url = "https://files.pythonhosted.org/packages/7b/9e/f8063952e4a7d0127f5d1181addef9377505dcce3be224263b25c4f0bfd9/pydantic_core-2.27.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5f8c4718cd44ec1580e180cb739713ecda2bdee1341084c1467802a417fe0f02", size = 1805070 }, + { url = "https://files.pythonhosted.org/packages/2c/9d/e1d6c4561d262b52e41b17a7ef8301e2ba80b61e32e94520271029feb5d8/pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15aae984e46de8d376df515f00450d1522077254ef6b7ce189b38ecee7c9677c", size = 1828096 }, + { url = "https://files.pythonhosted.org/packages/be/65/80ff46de4266560baa4332ae3181fffc4488ea7d37282da1a62d10ab89a4/pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1ba5e3963344ff25fc8c40da90f44b0afca8cfd89d12964feb79ac1411a260ac", size = 1857708 }, + { url = "https://files.pythonhosted.org/packages/d5/ca/3370074ad758b04d9562b12ecdb088597f4d9d13893a48a583fb47682cdf/pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:992cea5f4f3b29d6b4f7f1726ed8ee46c8331c6b4eed6db5b40134c6fe1768bb", size = 2037751 }, + { url = "https://files.pythonhosted.org/packages/b1/e2/4ab72d93367194317b99d051947c071aef6e3eb95f7553eaa4208ecf9ba4/pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0325336f348dbee6550d129b1627cb8f5351a9dc91aad141ffb96d4937bd9529", size = 2733863 }, + { url = "https://files.pythonhosted.org/packages/8a/c6/8ae0831bf77f356bb73127ce5a95fe115b10f820ea480abbd72d3cc7ccf3/pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7597c07fbd11515f654d6ece3d0e4e5093edc30a436c63142d9a4b8e22f19c35", size = 2161161 }, + { url = "https://files.pythonhosted.org/packages/f1/f4/b2fe73241da2429400fc27ddeaa43e35562f96cf5b67499b2de52b528cad/pydantic_core-2.27.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3bbd5d8cc692616d5ef6fbbbd50dbec142c7e6ad9beb66b78a96e9c16729b089", size = 1993294 }, + { url = "https://files.pythonhosted.org/packages/77/29/4bb008823a7f4cc05828198153f9753b3bd4c104d93b8e0b1bfe4e187540/pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:dc61505e73298a84a2f317255fcc72b710b72980f3a1f670447a21efc88f8381", size = 2001468 }, + { url = "https://files.pythonhosted.org/packages/f2/a9/0eaceeba41b9fad851a4107e0cf999a34ae8f0d0d1f829e2574f3d8897b0/pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:e1f735dc43da318cad19b4173dd1ffce1d84aafd6c9b782b3abc04a0d5a6f5bb", size = 2091413 }, + { url = "https://files.pythonhosted.org/packages/d8/36/eb8697729725bc610fd73940f0d860d791dc2ad557faaefcbb3edbd2b349/pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f4e5658dbffe8843a0f12366a4c2d1c316dbe09bb4dfbdc9d2d9cd6031de8aae", size = 2154735 }, + { url = "https://files.pythonhosted.org/packages/52/e5/4f0fbd5c5995cc70d3afed1b5c754055bb67908f55b5cb8000f7112749bf/pydantic_core-2.27.1-cp312-none-win32.whl", hash = "sha256:672ebbe820bb37988c4d136eca2652ee114992d5d41c7e4858cdd90ea94ffe5c", size = 1833633 }, + { url = "https://files.pythonhosted.org/packages/ee/f2/c61486eee27cae5ac781305658779b4a6b45f9cc9d02c90cb21b940e82cc/pydantic_core-2.27.1-cp312-none-win_amd64.whl", hash = "sha256:66ff044fd0bb1768688aecbe28b6190f6e799349221fb0de0e6f4048eca14c16", size = 1986973 }, + { url = "https://files.pythonhosted.org/packages/df/a6/e3f12ff25f250b02f7c51be89a294689d175ac76e1096c32bf278f29ca1e/pydantic_core-2.27.1-cp312-none-win_arm64.whl", hash = "sha256:9a3b0793b1bbfd4146304e23d90045f2a9b5fd5823aa682665fbdaf2a6c28f3e", size = 1883215 }, + { url = "https://files.pythonhosted.org/packages/0f/d6/91cb99a3c59d7b072bded9959fbeab0a9613d5a4935773c0801f1764c156/pydantic_core-2.27.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f216dbce0e60e4d03e0c4353c7023b202d95cbaeff12e5fd2e82ea0a66905073", size = 1895033 }, + { url = "https://files.pythonhosted.org/packages/07/42/d35033f81a28b27dedcade9e967e8a40981a765795c9ebae2045bcef05d3/pydantic_core-2.27.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a2e02889071850bbfd36b56fd6bc98945e23670773bc7a76657e90e6b6603c08", size = 1807542 }, + { url = "https://files.pythonhosted.org/packages/41/c2/491b59e222ec7e72236e512108ecad532c7f4391a14e971c963f624f7569/pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42b0e23f119b2b456d07ca91b307ae167cc3f6c846a7b169fca5326e32fdc6cf", size = 1827854 }, + { url = "https://files.pythonhosted.org/packages/e3/f3/363652651779113189cefdbbb619b7b07b7a67ebb6840325117cc8cc3460/pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:764be71193f87d460a03f1f7385a82e226639732214b402f9aa61f0d025f0737", size = 1857389 }, + { url = "https://files.pythonhosted.org/packages/5f/97/be804aed6b479af5a945daec7538d8bf358d668bdadde4c7888a2506bdfb/pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1c00666a3bd2f84920a4e94434f5974d7bbc57e461318d6bb34ce9cdbbc1f6b2", size = 2037934 }, + { url = "https://files.pythonhosted.org/packages/42/01/295f0bd4abf58902917e342ddfe5f76cf66ffabfc57c2e23c7681a1a1197/pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3ccaa88b24eebc0f849ce0a4d09e8a408ec5a94afff395eb69baf868f5183107", size = 2735176 }, + { url = "https://files.pythonhosted.org/packages/9d/a0/cd8e9c940ead89cc37812a1a9f310fef59ba2f0b22b4e417d84ab09fa970/pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c65af9088ac534313e1963443d0ec360bb2b9cba6c2909478d22c2e363d98a51", size = 2160720 }, + { url = "https://files.pythonhosted.org/packages/73/ae/9d0980e286627e0aeca4c352a60bd760331622c12d576e5ea4441ac7e15e/pydantic_core-2.27.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:206b5cf6f0c513baffaeae7bd817717140770c74528f3e4c3e1cec7871ddd61a", size = 1992972 }, + { url = "https://files.pythonhosted.org/packages/bf/ba/ae4480bc0292d54b85cfb954e9d6bd226982949f8316338677d56541b85f/pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:062f60e512fc7fff8b8a9d680ff0ddaaef0193dba9fa83e679c0c5f5fbd018bc", size = 2001477 }, + { url = "https://files.pythonhosted.org/packages/55/b7/e26adf48c2f943092ce54ae14c3c08d0d221ad34ce80b18a50de8ed2cba8/pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:a0697803ed7d4af5e4c1adf1670af078f8fcab7a86350e969f454daf598c4960", size = 2091186 }, + { url = "https://files.pythonhosted.org/packages/ba/cc/8491fff5b608b3862eb36e7d29d36a1af1c945463ca4c5040bf46cc73f40/pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:58ca98a950171f3151c603aeea9303ef6c235f692fe555e883591103da709b23", size = 2154429 }, + { url = "https://files.pythonhosted.org/packages/78/d8/c080592d80edd3441ab7f88f865f51dae94a157fc64283c680e9f32cf6da/pydantic_core-2.27.1-cp313-none-win32.whl", hash = "sha256:8065914ff79f7eab1599bd80406681f0ad08f8e47c880f17b416c9f8f7a26d05", size = 1833713 }, + { url = "https://files.pythonhosted.org/packages/83/84/5ab82a9ee2538ac95a66e51f6838d6aba6e0a03a42aa185ad2fe404a4e8f/pydantic_core-2.27.1-cp313-none-win_amd64.whl", hash = "sha256:ba630d5e3db74c79300d9a5bdaaf6200172b107f263c98a0539eeecb857b2337", size = 1987897 }, + { url = "https://files.pythonhosted.org/packages/df/c3/b15fb833926d91d982fde29c0624c9f225da743c7af801dace0d4e187e71/pydantic_core-2.27.1-cp313-none-win_arm64.whl", hash = "sha256:45cf8588c066860b623cd11c4ba687f8d7175d5f7ef65f7129df8a394c502de5", size = 1882983 }, + { url = "https://files.pythonhosted.org/packages/7c/60/e5eb2d462595ba1f622edbe7b1d19531e510c05c405f0b87c80c1e89d5b1/pydantic_core-2.27.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3fa80ac2bd5856580e242dbc202db873c60a01b20309c8319b5c5986fbe53ce6", size = 1894016 }, + { url = "https://files.pythonhosted.org/packages/61/20/da7059855225038c1c4326a840908cc7ca72c7198cb6addb8b92ec81c1d6/pydantic_core-2.27.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d950caa237bb1954f1b8c9227b5065ba6875ac9771bb8ec790d956a699b78676", size = 1771648 }, + { url = "https://files.pythonhosted.org/packages/8f/fc/5485cf0b0bb38da31d1d292160a4d123b5977841ddc1122c671a30b76cfd/pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e4216e64d203e39c62df627aa882f02a2438d18a5f21d7f721621f7a5d3611d", size = 1826929 }, + { url = "https://files.pythonhosted.org/packages/a1/ff/fb1284a210e13a5f34c639efc54d51da136074ffbe25ec0c279cf9fbb1c4/pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02a3d637bd387c41d46b002f0e49c52642281edacd2740e5a42f7017feea3f2c", size = 1980591 }, + { url = "https://files.pythonhosted.org/packages/f1/14/77c1887a182d05af74f6aeac7b740da3a74155d3093ccc7ee10b900cc6b5/pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:161c27ccce13b6b0c8689418da3885d3220ed2eae2ea5e9b2f7f3d48f1d52c27", size = 1981326 }, + { url = "https://files.pythonhosted.org/packages/06/aa/6f1b2747f811a9c66b5ef39d7f02fbb200479784c75e98290d70004b1253/pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:19910754e4cc9c63bc1c7f6d73aa1cfee82f42007e407c0f413695c2f7ed777f", size = 1989205 }, + { url = "https://files.pythonhosted.org/packages/7a/d2/8ce2b074d6835f3c88d85f6d8a399790043e9fdb3d0e43455e72d19df8cc/pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:e173486019cc283dc9778315fa29a363579372fe67045e971e89b6365cc035ed", size = 2079616 }, + { url = "https://files.pythonhosted.org/packages/65/71/af01033d4e58484c3db1e5d13e751ba5e3d6b87cc3368533df4c50932c8b/pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:af52d26579b308921b73b956153066481f064875140ccd1dfd4e77db89dbb12f", size = 2133265 }, + { url = "https://files.pythonhosted.org/packages/33/72/f881b5e18fbb67cf2fb4ab253660de3c6899dbb2dba409d0b757e3559e3d/pydantic_core-2.27.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:981fb88516bd1ae8b0cbbd2034678a39dedc98752f264ac9bc5839d3923fa04c", size = 2001864 }, ] [[package]] name = "pydantic-extra-types" -version = "2.9.0" +version = "2.10.1" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "pydantic" }, + { name = "typing-extensions" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/fb/95/d61dcadd933cb34461adc271c13bbe14a7080b9922b9e0dc3c1d18b421cb/pydantic_extra_types-2.9.0.tar.gz", hash = "sha256:e061c01636188743bb69f368dcd391f327b8cfbfede2fe1cbb1211b06601ba3b", size = 39578 } +sdist = { url = "https://files.pythonhosted.org/packages/c3/12/844a4796dbbc814ef0a706f403cb0f3029bf324c2bca2bf0681f4f7d8618/pydantic_extra_types-2.10.1.tar.gz", hash = "sha256:e4f937af34a754b8f1fa228a2fac867091a51f56ed0e8a61d5b3a6719b13c923", size = 85694 } wheels = [ - { url = "https://files.pythonhosted.org/packages/37/2f/efc4877d1a1536ec76ca0114c3e9dee7d0a10a262c53d384d50163f5684c/pydantic_extra_types-2.9.0-py3-none-any.whl", hash = "sha256:f0bb975508572ba7bf3390b7337807588463b7248587e69f43b1ad7c797530d0", size = 30544 }, + { url = "https://files.pythonhosted.org/packages/a8/f1/92f7b4711d3d0d08981c2677ec9cdde6cb114205a69814bf803e0be5ae9b/pydantic_extra_types-2.10.1-py3-none-any.whl", hash = "sha256:db2c86c04a837bbac0d2d79bbd6f5d46c4c9253db11ca3fdd36a2b282575f1e2", size = 35155 }, ] [[package]] name = "pytest" -version = "8.3.2" +version = "8.3.4" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "colorama", marker = "sys_platform == 'win32'" }, @@ -569,9 +602,9 @@ dependencies = [ { name = "pluggy" }, { name = "tomli", marker = "python_full_version < '3.11'" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/b4/8c/9862305bdcd6020bc7b45b1b5e7397a6caf1a33d3025b9a003b39075ffb2/pytest-8.3.2.tar.gz", hash = "sha256:c132345d12ce551242c87269de812483f5bcc87cdbb4722e48487ba194f9fdce", size = 1439314 } +sdist = { url = "https://files.pythonhosted.org/packages/05/35/30e0d83068951d90a01852cb1cef56e5d8a09d20c7f511634cc2f7e0372a/pytest-8.3.4.tar.gz", hash = "sha256:965370d062bce11e73868e0335abac31b4d3de0e82f4007408d242b4f8610761", size = 1445919 } wheels = [ - { url = "https://files.pythonhosted.org/packages/0f/f9/cf155cf32ca7d6fa3601bc4c5dd19086af4b320b706919d48a4c79081cf9/pytest-8.3.2-py3-none-any.whl", hash = "sha256:4ba08f9ae7dcf84ded419494d229b48d0903ea6407b030eaec46df5e6a73bba5", size = 341802 }, + { url = "https://files.pythonhosted.org/packages/11/92/76a1c94d3afee238333bc0a42b82935dd8f9cf8ce9e336ff87ee14d9e1cf/pytest-8.3.4-py3-none-any.whl", hash = "sha256:50e16d954148559c9a74109af1eaf0c945ba2d8f30f0a3d3335edde19788b6f6", size = 343083 }, ] [[package]] @@ -589,7 +622,7 @@ wheels = [ [[package]] name = "pytket" -version = "1.34.0" +version = "1.37.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "graphviz" }, @@ -603,26 +636,26 @@ dependencies = [ { name = "typing-extensions" }, ] wheels = [ - { url = "https://files.pythonhosted.org/packages/c0/8c/f5daade505184e6624940a72c22dadca676c20c50c1bba905f7b7dee2afb/pytket-1.34.0-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:2a3486168421a644b36295d3f0e69a458a347c012cb58586538a681c1a65181c", size = 6044900 }, - { url = "https://files.pythonhosted.org/packages/bd/d7/cc0b06c1ca20376b28aed46de5ead6ab0770a94d5489c788d2f96eb42839/pytket-1.34.0-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:11efe662fef45d5a2d8a0a936413511a41ef8bf856683972392ccd986ccbc7d7", size = 6789714 }, - { url = "https://files.pythonhosted.org/packages/4b/3a/5dcdb53911446404c436cf739115ac03d897c436952f3588007e8bd5aa20/pytket-1.34.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:a3bdd7c7a2d5fdb3e51fc9f1aec2e8a3ed6eb1a03659bd747c9c5cf26c382477", size = 7597900 }, - { url = "https://files.pythonhosted.org/packages/f3/9e/4c527c4e77cba75be3a0d2c03e121e8f6cf3178fa3a38f16239778e8ff5f/pytket-1.34.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:cc9bc2b6f99c3120d70f3114a06b60ffe253e03a591040e7f9f5a34304933c3d", size = 8125653 }, - { url = "https://files.pythonhosted.org/packages/87/de/6d712fc99c9f5564ed2499af48ddadf39ef802019693707b3df862e3cd2a/pytket-1.34.0-cp310-cp310-win_amd64.whl", hash = "sha256:a532bc4d9aa164fca12f3a1b5261509ee1b0e516510c05ec88a3fcaafbfdfd29", size = 8453601 }, - { url = "https://files.pythonhosted.org/packages/7e/12/528b423705b2d3ee583f36031c52d90fa8b10a6f047f9931b83c861a29df/pytket-1.34.0-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:3975f7d6b3f7daeb40c4354b675ba216310dd6b8fe567629609a703ce8cba8c7", size = 6060388 }, - { url = "https://files.pythonhosted.org/packages/78/42/ba8f0a3a404f85764ea59c80fa5d34280ea378367ece1cc350569a35bd9d/pytket-1.34.0-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:7473dee634498c5605b85b20a0c24f80efdc71e74a7fbeeed955a42a597eda20", size = 6806202 }, - { url = "https://files.pythonhosted.org/packages/0c/cd/8f1288bfb9b9f4f2885a87cccf7256b10c7fd0c6fe634b2ef6cd2d12a520/pytket-1.34.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:89f12ec14a6709ef8d817b9b599b3a70786614b1cf849b5f2a649178e72679df", size = 7608757 }, - { url = "https://files.pythonhosted.org/packages/b5/1d/43b4d46d53b7615f6161aa8dca31089e89a5ed5a76f7747ba5d61b6710b7/pytket-1.34.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b66a13aa45ea585c8b33e204346a6411da1c1cfb34977421004b2ac75f102864", size = 8137468 }, - { url = "https://files.pythonhosted.org/packages/97/06/bcbb4d5219cce86fe34d455be31b0798d037a4a6db95bf21f067ae0d9172/pytket-1.34.0-cp311-cp311-win_amd64.whl", hash = "sha256:2ba3c55112d5e43b9938e7b70babec35ab47edb760950f16c38913593bdaac01", size = 8467248 }, - { url = "https://files.pythonhosted.org/packages/98/d4/d1364cd7e09e9c928bb4cddfa4b85c25980289f490e81c599e6d630c5078/pytket-1.34.0-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:57174d85482beaaa20b8eafc6dc50f64763ecef1a3d7d8f44e96125923687179", size = 6266113 }, - { url = "https://files.pythonhosted.org/packages/13/1b/899079c4c090173d73c74cf1e6156898799223dd03954860ae93481c2479/pytket-1.34.0-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:05265b28cccca21bcc8556d3a03b689bf6e00153a4abaf2908e285c131fa14ba", size = 7038509 }, - { url = "https://files.pythonhosted.org/packages/11/6d/359636c558c885900ae654b47250b4288f53de114772283abc11460648a3/pytket-1.34.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bbe5fbc8534c5bd79c32c7ef0cb9ee91a82b177e804fdc27114fcc78968bc6dc", size = 7606274 }, - { url = "https://files.pythonhosted.org/packages/8a/3c/6368d4936a8d3b7723bc7ff8dc283b384ef9e194d219bc2c96ce661b76cc/pytket-1.34.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:16a294007b459499575f4816e61ba29f68bfab68bafa3ea63ee1beca3ce5eecc", size = 8134874 }, - { url = "https://files.pythonhosted.org/packages/1d/8b/28146b9dc9080445bfc884a9dfc87c2b6ef27e2853db094612dc6d5f55d6/pytket-1.34.0-cp312-cp312-win_amd64.whl", hash = "sha256:cf0266e4b6694cf93fa530a519cfad034775f8d8b9f965008875260e3020e97f", size = 8478078 }, - { url = "https://files.pythonhosted.org/packages/16/88/c00c24784b4af6b5fcbee7a1b67d8a0f0c2d63e6e167d2f1e70bd3f25f0d/pytket-1.34.0-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:bc875f83f2645e99e582f5603ea98df02e4cb8d5afafb6bda0e229c15b61dcad", size = 6267245 }, - { url = "https://files.pythonhosted.org/packages/e3/7b/70237cdb0cfbda1f31fcd8dae6a4da635071b8a9e071dcfcbb5d15b68835/pytket-1.34.0-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:0eb13928c15c3da1911b9992e728d3c341bf22d3c6df7dd371b3ea92831de581", size = 7039509 }, - { url = "https://files.pythonhosted.org/packages/7c/e1/850cb1988abdaf9ce75e48656658449953bb0af41ab62f47437770d553d2/pytket-1.34.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:877a682629366c3385bed538a3d6d6d99672af493fce6cc47b71eaf1c4ddc225", size = 7607191 }, - { url = "https://files.pythonhosted.org/packages/15/0c/bd4ac3eff58af7e1953d3f1b011f8bdc9fa0150ce82b0d4368a878518ab8/pytket-1.34.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e3d902d1e15450afa5b7c2967d90cd2596a6d81d920c101d61c636c9e1e3a08c", size = 8135641 }, - { url = "https://files.pythonhosted.org/packages/43/1e/d814b92fd11258a13b939cf2cf812d8937f0d1b9cd0b41fd41e841d46229/pytket-1.34.0-cp313-cp313-win_amd64.whl", hash = "sha256:9fa8cffdcedcd76e1f2d6bf8701e67580f786ee9a9dde15ec7b0782b37e3eb19", size = 8478506 }, + { url = "https://files.pythonhosted.org/packages/02/c4/bc1a766912961d04de06c8973fc89531a1d1133ffdfa63b23c7b3505d20f/pytket-1.37.0-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:ab9fd0210250dbb37d4540e735eddf2f1e412f946720b7c2382ebfb41af53e11", size = 6094637 }, + { url = "https://files.pythonhosted.org/packages/c6/a7/ff811f25428cf232e0d841e9db8376ed88786130d3300b862b7843682c66/pytket-1.37.0-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:db7f30709e1e45ddf43e3d7b686f8606d899bce0846447d5680a61adf9bd1379", size = 6838816 }, + { url = "https://files.pythonhosted.org/packages/1d/86/2c83107fed9f8f3ad657d849df392a9c10d82a39ada5532b6ad5f61a4984/pytket-1.37.0-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:4d4946f9c419107d5861ece3d0e4e390513e5e2a47a960ec1f657dcb53ebe88a", size = 7685670 }, + { url = "https://files.pythonhosted.org/packages/71/eb/8966f36d06e781efeaba64d02977c3f878891ec331010c933613d0ad2130/pytket-1.37.0-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:794478b2d5a9d8c15805f66d0d866f4e804254f758db80e494d439f5f858bced", size = 8255257 }, + { url = "https://files.pythonhosted.org/packages/9f/64/76cb5a57328b171a7cea3a676a22da568e3e615059d8e821e017ae3fa8f2/pytket-1.37.0-cp310-cp310-win_amd64.whl", hash = "sha256:76b2ed871df97e51bcb96c08ab18329617fce4baa782bfad89e1c85b18d1b1e7", size = 8603881 }, + { url = "https://files.pythonhosted.org/packages/16/04/30dd6a05705349937824f15a9d1295cdc5b6db3dde01cc5110480dd91971/pytket-1.37.0-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:6683d2da32fd51cc6bf1ff0a1216665b7d1a4d34df733656e38aed235c2b0c6a", size = 6109860 }, + { url = "https://files.pythonhosted.org/packages/3a/63/b54dcbbc54517c3d816d6e962e18b82ab364a36b886247ea077a48e9a155/pytket-1.37.0-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:ae72d7a93546f390a918a7442e76ccf91b66694ed279c9e1c93f5db82d3f76c6", size = 6855616 }, + { url = "https://files.pythonhosted.org/packages/4d/e4/ae5916829232739cf8c034b117bcf165546e19d213af2f12e4b6a52f63ef/pytket-1.37.0-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:71bea19332a9f3138a2331eb0be0a65a392f1b9be9ff8fc145380e8ad2213e61", size = 7697151 }, + { url = "https://files.pythonhosted.org/packages/72/e9/fa7a0c66aa335d8f09228bbbee178cbaf13dde5153de41f2cbfb19b6d878/pytket-1.37.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6a1425c5b6428e1d1a7907d2d7bc1c5c740a6640d467642d938414f20a745ec9", size = 8267087 }, + { url = "https://files.pythonhosted.org/packages/3c/c0/4deb8ed700c7290baa22ff380072c83056d77956e9b908e805ea68402f36/pytket-1.37.0-cp311-cp311-win_amd64.whl", hash = "sha256:dbc220761b8af4be93ed9618abf04be8a292faa8dbfb53c701ea952eb0bf1ee5", size = 8617911 }, + { url = "https://files.pythonhosted.org/packages/7b/97/5cf6f71990a5d822c9c2afadbbcc343c6803689407b4d6d9ca9c80e65d8c/pytket-1.37.0-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:f3bd9d42a6de858e35d082d1f9c5ac60f85cbe19e74668b97bd593fae2a8a1e5", size = 6318489 }, + { url = "https://files.pythonhosted.org/packages/ab/6c/669e5541da66cfe2e8b4b69d150b5a9fcba0cea69a443028394e18f49732/pytket-1.37.0-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:bb74db598281bcdb22f84dc35a73df0c0807e7aa01a5a4282d6433ffa7ef79fe", size = 7083672 }, + { url = "https://files.pythonhosted.org/packages/01/dd/6b91a5086e99c0eb040619b8ae2fda8a8d333f9d364c91f244590478a69a/pytket-1.37.0-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:2c6682c2dac4ba361578377630d91ea0ec2f36864b19e94867fff84b6c0ddce0", size = 7695303 }, + { url = "https://files.pythonhosted.org/packages/3e/b5/afdf2f7717e9bab2f1d49b6f3fa4f32345821446be90fb1c0868eff849f1/pytket-1.37.0-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:6691f8df2de9432f70552f305f4136da694d71b648c0e5a2ccc435b02d19bd7d", size = 8265276 }, + { url = "https://files.pythonhosted.org/packages/c7/b4/e6d73c523ab6d651337acdbf233e6400a375aabce56af31b0a3373503bd5/pytket-1.37.0-cp312-cp312-win_amd64.whl", hash = "sha256:bd33e86b003fd8583e1992f3a9983662a376affdba2f9ef5752bb88a3c0fdd03", size = 8628718 }, + { url = "https://files.pythonhosted.org/packages/30/87/905007496d1c536a890174a70cc9a47920dcd0013857a6e13febbc464c29/pytket-1.37.0-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:4ce560347411e69434b625a62d31f0fb20b8126ad7dabc03e8478f73b65490e1", size = 6319555 }, + { url = "https://files.pythonhosted.org/packages/7f/3a/2435d259f6e3639db39767a33b6ded53731129f792e393f75346681f0d97/pytket-1.37.0-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:6676535c4ff44e5da8b54f7237acdcb134f0c9f8f940d7e4d2a1028340138ace", size = 7084238 }, + { url = "https://files.pythonhosted.org/packages/7b/cf/b9c6e0d2235b20550cec983197fdaa3cbb1761ed35e154473aeefd5040b1/pytket-1.37.0-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d887bca4c40be9a0919fc1820cbf1f667d42a99d1cc149453793e4b9c034bab8", size = 7695915 }, + { url = "https://files.pythonhosted.org/packages/46/36/4b844f1f8144b5fdf95acd57047e175eb2c36178f86d5b69e7dd115ec3fa/pytket-1.37.0-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:1be58da4cb449560db20606d1e431e2d4a1621fabd2578bc670cd35b1e5e3bd1", size = 8265713 }, + { url = "https://files.pythonhosted.org/packages/a9/cf/34ffad7067711504c0b13ad7644bc35c6ce7bdbbe54a3ba6ad8899adf937/pytket-1.37.0-cp313-cp313-win_amd64.whl", hash = "sha256:9c723381d1856e7df763dff611a9a3909481a3072b6c7019b7147be602d953ca", size = 8628895 }, ] [[package]] @@ -683,27 +716,27 @@ wheels = [ [[package]] name = "ruff" -version = "0.6.2" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/23/f4/279d044f66b79261fd37df76bf72b64471afab5d3b7906a01499c4451910/ruff-0.6.2.tar.gz", hash = "sha256:239ee6beb9e91feb8e0ec384204a763f36cb53fb895a1a364618c6abb076b3be", size = 2460281 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/72/4b/47dd7a69287afb4069fa42c198e899463605460a58120196711bfcf0446b/ruff-0.6.2-py3-none-linux_armv6l.whl", hash = "sha256:5c8cbc6252deb3ea840ad6a20b0f8583caab0c5ef4f9cca21adc5a92b8f79f3c", size = 9695871 }, - { url = "https://files.pythonhosted.org/packages/ae/c3/8aac62ac4638c14a740ee76a755a925f2d0d04580ab790a9887accb729f6/ruff-0.6.2-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:17002fe241e76544448a8e1e6118abecbe8cd10cf68fde635dad480dba594570", size = 9459354 }, - { url = "https://files.pythonhosted.org/packages/2f/cf/77fbd8d4617b9b9c503f9bffb8552c4e3ea1a58dc36975e7a9104ffb0f85/ruff-0.6.2-py3-none-macosx_11_0_arm64.whl", hash = "sha256:3dbeac76ed13456f8158b8f4fe087bf87882e645c8e8b606dd17b0b66c2c1158", size = 9163871 }, - { url = "https://files.pythonhosted.org/packages/05/1c/765192bab32b79efbb498b06f0b9dcb3629112b53b8777ae1d19b8209e09/ruff-0.6.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:094600ee88cda325988d3f54e3588c46de5c18dae09d683ace278b11f9d4d534", size = 10096250 }, - { url = "https://files.pythonhosted.org/packages/08/d0/86f3cb0f6934c99f759c232984a5204d67a26745cad2d9edff6248adf7d2/ruff-0.6.2-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:316d418fe258c036ba05fbf7dfc1f7d3d4096db63431546163b472285668132b", size = 9475376 }, - { url = "https://files.pythonhosted.org/packages/cd/cc/4c8d0e225b559a3fae6092ec310d7150d3b02b4669e9223f783ef64d82c0/ruff-0.6.2-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d72b8b3abf8a2d51b7b9944a41307d2f442558ccb3859bbd87e6ae9be1694a5d", size = 10295634 }, - { url = "https://files.pythonhosted.org/packages/db/96/d2699cfb1bb5a01c68122af43454c76c31331e1c8a9bd97d653d7c82524b/ruff-0.6.2-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:2aed7e243be68487aa8982e91c6e260982d00da3f38955873aecd5a9204b1d66", size = 11024941 }, - { url = "https://files.pythonhosted.org/packages/8b/a9/6ecd66af8929e0f2a1ed308a4137f3521789f28f0eb97d32c2ca3aa7000c/ruff-0.6.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d371f7fc9cec83497fe7cf5eaf5b76e22a8efce463de5f775a1826197feb9df8", size = 10606894 }, - { url = "https://files.pythonhosted.org/packages/e4/73/2ee4cd19f44992fedac1cc6db9e3d825966072f6dcbd4032f21cbd063170/ruff-0.6.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8f310d63af08f583363dfb844ba8f9417b558199c58a5999215082036d795a1", size = 11552886 }, - { url = "https://files.pythonhosted.org/packages/60/4c/c0f1cd35ce4a93c54a6bb1ee6934a3a205fa02198dd076678193853ceea1/ruff-0.6.2-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7db6880c53c56addb8638fe444818183385ec85eeada1d48fc5abe045301b2f1", size = 10264945 }, - { url = "https://files.pythonhosted.org/packages/c4/89/e45c9359b9cdd4245512ea2b9f2bb128a997feaa5f726fc9e8c7a66afadf/ruff-0.6.2-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:1175d39faadd9a50718f478d23bfc1d4da5743f1ab56af81a2b6caf0a2394f23", size = 10100007 }, - { url = "https://files.pythonhosted.org/packages/06/74/0bd4e0a7ed5f6908df87892f9bf60a2356c0fd74102d8097298bd9b4f346/ruff-0.6.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:5b939f9c86d51635fe486585389f54582f0d65b8238e08c327c1534844b3bb9a", size = 9559267 }, - { url = "https://files.pythonhosted.org/packages/54/03/3dc6dc9419f276f05805bf888c279e3e0b631284abd548d9e87cebb93aec/ruff-0.6.2-py3-none-musllinux_1_2_i686.whl", hash = "sha256:d0d62ca91219f906caf9b187dea50d17353f15ec9bb15aae4a606cd697b49b4c", size = 9905304 }, - { url = "https://files.pythonhosted.org/packages/5c/5b/d6a72a6a6bbf097c09de468326ef5fa1c9e7aa5e6e45979bc0d984b0dbe7/ruff-0.6.2-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:7438a7288f9d67ed3c8ce4d059e67f7ed65e9fe3aa2ab6f5b4b3610e57e3cb56", size = 10341480 }, - { url = "https://files.pythonhosted.org/packages/79/a9/0f2f21fe15ba537c46598f96aa9ae4a3d4b9ec64926664617ca6a8c772f4/ruff-0.6.2-py3-none-win32.whl", hash = "sha256:279d5f7d86696df5f9549b56b9b6a7f6c72961b619022b5b7999b15db392a4da", size = 7961901 }, - { url = "https://files.pythonhosted.org/packages/b0/80/fff12ffe11853d9f4ea3e5221e6dd2e93640a161c05c9579833e09ad40a7/ruff-0.6.2-py3-none-win_amd64.whl", hash = "sha256:d9f3469c7dd43cd22eb1c3fc16926fb8258d50cb1b216658a07be95dd117b0f2", size = 8783320 }, - { url = "https://files.pythonhosted.org/packages/56/91/577cdd64cce5e74d3f8b5ecb93f29566def569c741eb008aed4f331ef821/ruff-0.6.2-py3-none-win_arm64.whl", hash = "sha256:f28fcd2cd0e02bdf739297516d5643a945cc7caf09bd9bcb4d932540a5ea4fa9", size = 8225886 }, +version = "0.6.9" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/26/0d/6148a48dab5662ca1d5a93b7c0d13c03abd3cc7e2f35db08410e47cef15d/ruff-0.6.9.tar.gz", hash = "sha256:b076ef717a8e5bc819514ee1d602bbdca5b4420ae13a9cf61a0c0a4f53a2baa2", size = 3095355 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/6e/8f/f7a0a0ef1818662efb32ed6df16078c95da7a0a3248d64c2410c1e27799f/ruff-0.6.9-py3-none-linux_armv6l.whl", hash = "sha256:064df58d84ccc0ac0fcd63bc3090b251d90e2a372558c0f057c3f75ed73e1ccd", size = 10440526 }, + { url = "https://files.pythonhosted.org/packages/8b/69/b179a5faf936a9e2ab45bb412a668e4661eded964ccfa19d533f29463ef6/ruff-0.6.9-py3-none-macosx_10_12_x86_64.whl", hash = "sha256:140d4b5c9f5fc7a7b074908a78ab8d384dd7f6510402267bc76c37195c02a7ec", size = 10034612 }, + { url = "https://files.pythonhosted.org/packages/c7/ef/fd1b4be979c579d191eeac37b5cfc0ec906de72c8bcd8595e2c81bb700c1/ruff-0.6.9-py3-none-macosx_11_0_arm64.whl", hash = "sha256:53fd8ca5e82bdee8da7f506d7b03a261f24cd43d090ea9db9a1dc59d9313914c", size = 9706197 }, + { url = "https://files.pythonhosted.org/packages/29/61/b376d775deb5851cb48d893c568b511a6d3625ef2c129ad5698b64fb523c/ruff-0.6.9-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:645d7d8761f915e48a00d4ecc3686969761df69fb561dd914a773c1a8266e14e", size = 10751855 }, + { url = "https://files.pythonhosted.org/packages/13/d7/def9e5f446d75b9a9c19b24231a3a658c075d79163b08582e56fa5dcfa38/ruff-0.6.9-py3-none-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eae02b700763e3847595b9d2891488989cac00214da7f845f4bcf2989007d577", size = 10200889 }, + { url = "https://files.pythonhosted.org/packages/6c/d6/7f34160818bcb6e84ce293a5966cba368d9112ff0289b273fbb689046047/ruff-0.6.9-py3-none-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7d5ccc9e58112441de8ad4b29dcb7a86dc25c5f770e3c06a9d57e0e5eba48829", size = 11038678 }, + { url = "https://files.pythonhosted.org/packages/13/34/a40ff8ae62fb1b26fb8e6fa7e64bc0e0a834b47317880de22edd6bfb54fb/ruff-0.6.9-py3-none-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:417b81aa1c9b60b2f8edc463c58363075412866ae4e2b9ab0f690dc1e87ac1b5", size = 11808682 }, + { url = "https://files.pythonhosted.org/packages/2e/6d/25a4386ae4009fc798bd10ba48c942d1b0b3e459b5403028f1214b6dd161/ruff-0.6.9-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3c866b631f5fbce896a74a6e4383407ba7507b815ccc52bcedabb6810fdb3ef7", size = 11330446 }, + { url = "https://files.pythonhosted.org/packages/f7/f6/bdf891a9200d692c94ebcd06ae5a2fa5894e522f2c66c2a12dd5d8cb2654/ruff-0.6.9-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7b118afbb3202f5911486ad52da86d1d52305b59e7ef2031cea3425142b97d6f", size = 12483048 }, + { url = "https://files.pythonhosted.org/packages/a7/86/96f4252f41840e325b3fa6c48297e661abb9f564bd7dcc0572398c8daa42/ruff-0.6.9-py3-none-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a67267654edc23c97335586774790cde402fb6bbdb3c2314f1fc087dee320bfa", size = 10936855 }, + { url = "https://files.pythonhosted.org/packages/45/87/801a52d26c8dbf73424238e9908b9ceac430d903c8ef35eab1b44fcfa2bd/ruff-0.6.9-py3-none-musllinux_1_2_aarch64.whl", hash = "sha256:3ef0cc774b00fec123f635ce5c547dac263f6ee9fb9cc83437c5904183b55ceb", size = 10713007 }, + { url = "https://files.pythonhosted.org/packages/be/27/6f7161d90320a389695e32b6ebdbfbedde28ccbf52451e4b723d7ce744ad/ruff-0.6.9-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:12edd2af0c60fa61ff31cefb90aef4288ac4d372b4962c2864aeea3a1a2460c0", size = 10274594 }, + { url = "https://files.pythonhosted.org/packages/00/52/dc311775e7b5f5b19831563cb1572ecce63e62681bccc609867711fae317/ruff-0.6.9-py3-none-musllinux_1_2_i686.whl", hash = "sha256:55bb01caeaf3a60b2b2bba07308a02fca6ab56233302406ed5245180a05c5625", size = 10608024 }, + { url = "https://files.pythonhosted.org/packages/98/b6/be0a1ddcbac65a30c985cf7224c4fce786ba2c51e7efeb5178fe410ed3cf/ruff-0.6.9-py3-none-musllinux_1_2_x86_64.whl", hash = "sha256:925d26471fa24b0ce5a6cdfab1bb526fb4159952385f386bdcc643813d472039", size = 10982085 }, + { url = "https://files.pythonhosted.org/packages/bb/a4/c84bc13d0b573cf7bb7d17b16d6d29f84267c92d79b2f478d4ce322e8e72/ruff-0.6.9-py3-none-win32.whl", hash = "sha256:eb61ec9bdb2506cffd492e05ac40e5bc6284873aceb605503d8494180d6fc84d", size = 8522088 }, + { url = "https://files.pythonhosted.org/packages/74/be/fc352bd8ca40daae8740b54c1c3e905a7efe470d420a268cd62150248c91/ruff-0.6.9-py3-none-win_amd64.whl", hash = "sha256:785d31851c1ae91f45b3d8fe23b8ae4b5170089021fbb42402d811135f0b7117", size = 9359275 }, + { url = "https://files.pythonhosted.org/packages/3e/14/fd026bc74ded05e2351681545a5f626e78ef831f8edce064d61acd2e6ec7/ruff-0.6.9-py3-none-win_arm64.whl", hash = "sha256:a9641e31476d601f83cd602608739a0840e348bda93fec9f1ee816f8b6798b93", size = 8679879 }, ] [[package]] @@ -760,11 +793,11 @@ wheels = [ [[package]] name = "setuptools" -version = "73.0.1" +version = "75.6.0" source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/8d/37/f4d4ce9bc15e61edba3179f9b0f763fc6d439474d28511b11f0d95bab7a2/setuptools-73.0.1.tar.gz", hash = "sha256:d59a3e788ab7e012ab2c4baed1b376da6366883ee20d7a5fc426816e3d7b1193", size = 2526506 } +sdist = { url = "https://files.pythonhosted.org/packages/43/54/292f26c208734e9a7f067aea4a7e282c080750c4546559b58e2e45413ca0/setuptools-75.6.0.tar.gz", hash = "sha256:8199222558df7c86216af4f84c30e9b34a61d8ba19366cc914424cdbd28252f6", size = 1337429 } wheels = [ - { url = "https://files.pythonhosted.org/packages/07/6a/0270e295bf30c37567736b7fca10167640898214ff911273af37ddb95770/setuptools-73.0.1-py3-none-any.whl", hash = "sha256:b208925fcb9f7af924ed2dc04708ea89791e24bde0d3020b27df0e116088b34e", size = 2346588 }, + { url = "https://files.pythonhosted.org/packages/55/21/47d163f615df1d30c094f6c8bbb353619274edccf0327b185cc2493c2c33/setuptools-75.6.0-py3-none-any.whl", hash = "sha256:ce74b49e8f7110f9bf04883b730f4765b774ef3ef28f722cce7c273d253aaf7d", size = 1224032 }, ] [[package]] @@ -778,14 +811,14 @@ wheels = [ [[package]] name = "sympy" -version = "1.13.2" +version = "1.13.3" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "mpmath" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/94/15/4a041424c7187f41cce678f5a02189b244e9aac61a18b45cd415a3a470f3/sympy-1.13.2.tar.gz", hash = "sha256:401449d84d07be9d0c7a46a64bd54fe097667d5e7181bfe67ec777be9e01cb13", size = 7532926 } +sdist = { url = "https://files.pythonhosted.org/packages/11/8a/5a7fd6284fa8caac23a26c9ddf9c30485a48169344b4bd3b0f02fef1890f/sympy-1.13.3.tar.gz", hash = "sha256:b27fd2c6530e0ab39e275fc9b683895367e51d5da91baa8d3d64db2565fec4d9", size = 7533196 } wheels = [ - { url = "https://files.pythonhosted.org/packages/c1/f9/6845bf8fca0eaf847da21c5d5bc6cd92797364662824a11d3f836423a1a5/sympy-1.13.2-py3-none-any.whl", hash = "sha256:c51d75517712f1aed280d4ce58506a4a88d635d6b5dd48b39102a7ae1f3fcfe9", size = 6189289 }, + { url = "https://files.pythonhosted.org/packages/99/ff/c87e0622b1dadea79d2fb0b25ade9ed98954c9033722eb707053d310d4f3/sympy-1.13.3-py3-none-any.whl", hash = "sha256:54612cf55a62755ee71824ce692986f23c88ffa77207b30c1368eda4a7060f73", size = 6189483 }, ] [[package]] @@ -801,7 +834,7 @@ dependencies = [ [package.metadata] requires-dist = [ - { name = "hugr", specifier = ">=0.9.0,<0.10" }, + { name = "hugr", specifier = ">=0.10.0,<0.11" }, { name = "pytket", specifier = ">=1.34,<2" }, { name = "tket2-eccs", editable = "tket2-eccs" }, { name = "tket2-exts", editable = "tket2-exts" }, @@ -814,22 +847,52 @@ source = { editable = "tket2-eccs" } [[package]] name = "tket2-exts" -version = "0.1.1" +version = "0.2.0" source = { editable = "tket2-exts" } dependencies = [ { name = "hugr" }, ] [package.metadata] -requires-dist = [{ name = "hugr", specifier = ">=0.9.0" }] +requires-dist = [{ name = "hugr", specifier = ">=0.10.0,<0.11" }] [[package]] name = "tomli" -version = "2.0.1" -source = { registry = "https://pypi.org/simple" } -sdist = { url = "https://files.pythonhosted.org/packages/c0/3f/d7af728f075fb08564c5949a9c95e44352e23dee646869fa104a3b2060a3/tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f", size = 15164 } -wheels = [ - { url = "https://files.pythonhosted.org/packages/97/75/10a9ebee3fd790d20926a90a2547f0bf78f371b2f13aa822c759680ca7b9/tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc", size = 12757 }, +version = "2.2.1" +source = { registry = "https://pypi.org/simple" } +sdist = { url = "https://files.pythonhosted.org/packages/18/87/302344fed471e44a87289cf4967697d07e532f2421fdaf868a303cbae4ff/tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff", size = 17175 } +wheels = [ + { url = "https://files.pythonhosted.org/packages/43/ca/75707e6efa2b37c77dadb324ae7d9571cb424e61ea73fad7c56c2d14527f/tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249", size = 131077 }, + { url = "https://files.pythonhosted.org/packages/c7/16/51ae563a8615d472fdbffc43a3f3d46588c264ac4f024f63f01283becfbb/tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6", size = 123429 }, + { url = "https://files.pythonhosted.org/packages/f1/dd/4f6cd1e7b160041db83c694abc78e100473c15d54620083dbd5aae7b990e/tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a", size = 226067 }, + { url = "https://files.pythonhosted.org/packages/a9/6b/c54ede5dc70d648cc6361eaf429304b02f2871a345bbdd51e993d6cdf550/tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee", size = 236030 }, + { url = "https://files.pythonhosted.org/packages/1f/47/999514fa49cfaf7a92c805a86c3c43f4215621855d151b61c602abb38091/tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e", size = 240898 }, + { url = "https://files.pythonhosted.org/packages/73/41/0a01279a7ae09ee1573b423318e7934674ce06eb33f50936655071d81a24/tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4", size = 229894 }, + { url = "https://files.pythonhosted.org/packages/55/18/5d8bc5b0a0362311ce4d18830a5d28943667599a60d20118074ea1b01bb7/tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106", size = 245319 }, + { url = "https://files.pythonhosted.org/packages/92/a3/7ade0576d17f3cdf5ff44d61390d4b3febb8a9fc2b480c75c47ea048c646/tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8", size = 238273 }, + { url = "https://files.pythonhosted.org/packages/72/6f/fa64ef058ac1446a1e51110c375339b3ec6be245af9d14c87c4a6412dd32/tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff", size = 98310 }, + { url = "https://files.pythonhosted.org/packages/6a/1c/4a2dcde4a51b81be3530565e92eda625d94dafb46dbeb15069df4caffc34/tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b", size = 108309 }, + { url = "https://files.pythonhosted.org/packages/52/e1/f8af4c2fcde17500422858155aeb0d7e93477a0d59a98e56cbfe75070fd0/tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea", size = 132762 }, + { url = "https://files.pythonhosted.org/packages/03/b8/152c68bb84fc00396b83e7bbddd5ec0bd3dd409db4195e2a9b3e398ad2e3/tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8", size = 123453 }, + { url = "https://files.pythonhosted.org/packages/c8/d6/fc9267af9166f79ac528ff7e8c55c8181ded34eb4b0e93daa767b8841573/tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192", size = 233486 }, + { url = "https://files.pythonhosted.org/packages/5c/51/51c3f2884d7bab89af25f678447ea7d297b53b5a3b5730a7cb2ef6069f07/tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222", size = 242349 }, + { url = "https://files.pythonhosted.org/packages/ab/df/bfa89627d13a5cc22402e441e8a931ef2108403db390ff3345c05253935e/tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77", size = 252159 }, + { url = "https://files.pythonhosted.org/packages/9e/6e/fa2b916dced65763a5168c6ccb91066f7639bdc88b48adda990db10c8c0b/tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6", size = 237243 }, + { url = "https://files.pythonhosted.org/packages/b4/04/885d3b1f650e1153cbb93a6a9782c58a972b94ea4483ae4ac5cedd5e4a09/tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd", size = 259645 }, + { url = "https://files.pythonhosted.org/packages/9c/de/6b432d66e986e501586da298e28ebeefd3edc2c780f3ad73d22566034239/tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e", size = 244584 }, + { url = "https://files.pythonhosted.org/packages/1c/9a/47c0449b98e6e7d1be6cbac02f93dd79003234ddc4aaab6ba07a9a7482e2/tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98", size = 98875 }, + { url = "https://files.pythonhosted.org/packages/ef/60/9b9638f081c6f1261e2688bd487625cd1e660d0a85bd469e91d8db969734/tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4", size = 109418 }, + { url = "https://files.pythonhosted.org/packages/04/90/2ee5f2e0362cb8a0b6499dc44f4d7d48f8fff06d28ba46e6f1eaa61a1388/tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7", size = 132708 }, + { url = "https://files.pythonhosted.org/packages/c0/ec/46b4108816de6b385141f082ba99e315501ccd0a2ea23db4a100dd3990ea/tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c", size = 123582 }, + { url = "https://files.pythonhosted.org/packages/a0/bd/b470466d0137b37b68d24556c38a0cc819e8febe392d5b199dcd7f578365/tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13", size = 232543 }, + { url = "https://files.pythonhosted.org/packages/d9/e5/82e80ff3b751373f7cead2815bcbe2d51c895b3c990686741a8e56ec42ab/tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281", size = 241691 }, + { url = "https://files.pythonhosted.org/packages/05/7e/2a110bc2713557d6a1bfb06af23dd01e7dde52b6ee7dadc589868f9abfac/tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272", size = 251170 }, + { url = "https://files.pythonhosted.org/packages/64/7b/22d713946efe00e0adbcdfd6d1aa119ae03fd0b60ebed51ebb3fa9f5a2e5/tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140", size = 236530 }, + { url = "https://files.pythonhosted.org/packages/38/31/3a76f67da4b0cf37b742ca76beaf819dca0ebef26d78fc794a576e08accf/tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2", size = 258666 }, + { url = "https://files.pythonhosted.org/packages/07/10/5af1293da642aded87e8a988753945d0cf7e00a9452d3911dd3bb354c9e2/tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744", size = 243954 }, + { url = "https://files.pythonhosted.org/packages/5b/b9/1ed31d167be802da0fc95020d04cd27b7d7065cc6fbefdd2f9186f60d7bd/tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec", size = 98724 }, + { url = "https://files.pythonhosted.org/packages/c7/32/b0963458706accd9afcfeb867c0f9175a741bf7b19cd424230714d722198/tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69", size = 109383 }, + { url = "https://files.pythonhosted.org/packages/6e/c2/61d3e0f47e2b74ef40a68b9e6ad5984f6241a942f7cd3bbfbdbd03861ea9/tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc", size = 14257 }, ] [[package]] @@ -843,14 +906,14 @@ wheels = [ [[package]] name = "virtualenv" -version = "20.26.3" +version = "20.28.0" source = { registry = "https://pypi.org/simple" } dependencies = [ { name = "distlib" }, { name = "filelock" }, { name = "platformdirs" }, ] -sdist = { url = "https://files.pythonhosted.org/packages/68/60/db9f95e6ad456f1872486769c55628c7901fb4de5a72c2f7bdd912abf0c1/virtualenv-20.26.3.tar.gz", hash = "sha256:4c43a2a236279d9ea36a0d76f98d84bd6ca94ac4e0f4a3b9d46d05e10fea542a", size = 9057588 } +sdist = { url = "https://files.pythonhosted.org/packages/bf/75/53316a5a8050069228a2f6d11f32046cfa94fbb6cc3f08703f59b873de2e/virtualenv-20.28.0.tar.gz", hash = "sha256:2c9c3262bb8e7b87ea801d715fae4495e6032450c71d2309be9550e7364049aa", size = 7650368 } wheels = [ - { url = "https://files.pythonhosted.org/packages/07/4d/410156100224c5e2f0011d435e477b57aed9576fc7fe137abcf14ec16e11/virtualenv-20.26.3-py3-none-any.whl", hash = "sha256:8cc4a31139e796e9a7de2cd5cf2489de1217193116a8fd42328f1bd65f434589", size = 5684792 }, + { url = "https://files.pythonhosted.org/packages/10/f9/0919cf6f1432a8c4baa62511f8f8da8225432d22e83e3476f5be1a1edc6e/virtualenv-20.28.0-py3-none-any.whl", hash = "sha256:23eae1b4516ecd610481eda647f3a7c09aea295055337331bb4e6892ecce47b0", size = 4276702 }, ]