Skip to content

Commit abf292f

Browse files
ss2165doug-q
andauthored
feat(tket2-hseries): cli extension dumping (#584)
Closes #556 --------- Co-authored-by: Douglas Wilson <[email protected]>
1 parent d9deacb commit abf292f

File tree

13 files changed

+2053
-3
lines changed

13 files changed

+2053
-3
lines changed

.github/workflows/ci.yml

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -278,11 +278,34 @@ jobs:
278278
flags: python
279279
token: ${{ secrets.CODECOV_TOKEN }}
280280

281+
# Ensure that serialized extensions match rust implementation
282+
tket2-extensions:
283+
needs: [changes, tests-rs-stable-all-features]
284+
if: ${{ needs.changes.outputs.rust == 'true' && github.event_name != 'merge_group' }}
285+
name: Check standard extensions
286+
runs-on: ubuntu-latest
287+
steps:
288+
- uses: actions/checkout@v4
289+
- uses: mozilla-actions/[email protected]
290+
- name: Install stable toolchain
291+
uses: dtolnay/rust-toolchain@stable
292+
- uses: extractions/setup-just@v2
293+
- name: Generate the updated definitions
294+
run: just gen-extensions
295+
- name: Check if the declarations are up to date
296+
run: |
297+
git diff --exit-code --name-only tket2-py/tket2/extensions/_json_defs
298+
if [ $? -ne 0 ]; then
299+
echo "The serialized standard extensions are not up to date"
300+
echo "Please run 'just gen-extensions' and commit the changes"
301+
exit 1
302+
fi
303+
281304
# This is a meta job to mark successful completion of the required checks,
282305
# even if they are skipped due to no changes in the relevant files.
283306
required-checks:
284307
name: Required checks 🦀+🐍
285-
needs: [changes, check-rs, check-py, tests-rs-stable-no-features, tests-rs-stable-all-features, tests-py]
308+
needs: [changes, check-rs, check-py, tests-rs-stable-no-features, tests-rs-stable-all-features, tests-py, tket2-extensions]
286309
if: ${{ !cancelled() }}
287310
runs-on: ubuntu-latest
288311
steps:

Cargo.lock

Lines changed: 116 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ missing_docs = "warn"
2828
# Make sure to run `just recompile-eccs` if the hugr serialisation format changes.
2929
hugr = "0.12.1"
3030
hugr-core = "0.9.1"
31+
hugr-cli = "0.6.0"
3132
portgraph = "0.12"
3233
pyo3 = "0.21.2"
3334
itertools = "0.13.0"

justfile

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,6 +44,9 @@ coverage language="[rust|python]": (_run_lang language \
4444
recompile-eccs:
4545
scripts/compile-test-eccs.sh
4646

47+
# Generate serialized declarations for the tket2 extensions
48+
gen-extensions:
49+
cargo run -p tket2-hseries gen-extensions -o tket2-py/tket2/extensions/_json_defs
4750

4851
# Runs a rust and a python command, depending on the `language` variable.
4952
#

tket2-hseries/Cargo.toml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,14 @@ description = "TKET2 tool for preparing and validating `Hugr`s for compilation t
1313
keywords = ["Quantum", "Quantinuum"]
1414
categories = ["compilers"]
1515

16+
[features]
17+
default = ["cli"]
18+
cli = ["dep:clap", "dep:hugr-cli"]
19+
20+
[[bin]]
21+
name = "tket2-hseries"
22+
required-features = ["cli"]
23+
1624
[dependencies]
1725
hugr.workspace = true
1826
tket2 = { path = "../tket2", version = "0.2.0" }
@@ -24,6 +32,8 @@ strum.workspace = true
2432
strum_macros.workspace = true
2533
thiserror.workspace = true
2634
itertools.workspace = true
35+
clap = { workspace = true, optional = true}
36+
hugr-cli = { workspace = true, optional = true }
2737

2838
[dev-dependencies]
2939
cool_asserts.workspace = true
Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
//! CLI for tket2-hseries
2+
3+
use clap::Parser as _;
4+
use hugr::extension::ExtensionRegistry;
5+
use tket2_hseries::cli::CliArgs;
6+
7+
fn main() {
8+
match CliArgs::parse() {
9+
CliArgs::GenExtensions(args) => {
10+
let reg = ExtensionRegistry::try_new([
11+
tket2::extension::TKET2_EXTENSION.to_owned(),
12+
tket2::extension::angle::ANGLE_EXTENSION.to_owned(),
13+
tket2_hseries::extension::hseries::EXTENSION.to_owned(),
14+
tket2_hseries::extension::futures::EXTENSION.to_owned(),
15+
tket2_hseries::extension::result::EXTENSION.to_owned(),
16+
])
17+
.unwrap();
18+
19+
args.run_dump(&reg);
20+
}
21+
_ => {
22+
eprintln!("Unknown command");
23+
std::process::exit(1);
24+
}
25+
};
26+
}

tket2-hseries/src/cli.rs

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
//! CLI tools for tket2-hseries.
2+
3+
use clap::Parser;
4+
5+
/// CLI arguments.
6+
#[derive(Parser, Debug)]
7+
#[clap(version = "1.0", long_about = None)]
8+
#[clap(about = "tket2-hseries CLI tools.")]
9+
#[group(id = "tket2-hseries")]
10+
#[non_exhaustive]
11+
pub enum CliArgs {
12+
/// Generate serialized extensions.
13+
GenExtensions(hugr_cli::extensions::ExtArgs),
14+
}

tket2-hseries/src/lib.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ use thiserror::Error;
1515
use extension::{futures::FutureOpDef, hseries::HSeriesOp};
1616
use lazify_measure::{LazifyMeasurePass, LazifyMeasurePassError};
1717

18+
#[cfg(feature = "cli")]
19+
pub mod cli;
1820
pub mod extension;
1921

2022
pub mod lazify_measure;

0 commit comments

Comments
 (0)