Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix: serialization round-trips #948

Merged
merged 7 commits into from
Apr 19, 2024
Merged

fix: serialization round-trips #948

merged 7 commits into from
Apr 19, 2024

Conversation

doug-q
Copy link
Collaborator

@doug-q doug-q commented Apr 18, 2024

We add a check during validation, conditioned on cfg(test), that the hugr in question successfully round-trips.

@doug-q
Copy link
Collaborator Author

doug-q commented Apr 18, 2024

I've pushed a commit that does not check that the serialization output matches the schema, i.e. it only checks that it roundtrips. This results in 18 test failures

---- builder::cfg::test::basic_cfg_hugr stdout ----
thread 'builder::cfg::test::basic_cfg_hugr' panicked at hugr/src/hugr/serialize.rs:327:34:
called `Result::unwrap()` on an `Err` value: Error("Cannot connect an edge without port offset to node Node(1) with operation type DataflowBlock(DataflowBlock { inputs: TypeRow { types: [Type(Extension(CustomType { extension: IdentList(\"prelude\"), id: \"usize\", args: [], bound: Eq }), Eq)] }, other_outputs: TypeRow { types: [] }, sum_rows: [TypeRow { types: [Type(Extension(CustomType { extension: IdentList(\"prelude\"), id: \"usize\", args: [], bound: Eq }), Eq)] }, TypeRow { types: [Type(Extension(CustomType { extension: IdentList(\"prelude\"), id: \"usize\", args: [], bound: Eq }), Eq)] }], extension_delta: ExtensionSet({}) }).", line: 0, column: 0)
note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace

---- builder::cfg::test::basic_module_cfg stdout ----
thread 'builder::cfg::test::basic_module_cfg' panicked at hugr/src/hugr/serialize.rs:327:34:
called `Result::unwrap()` on an `Err` value: Error("Cannot connect an edge without port offset to node Node(5) with operation type DataflowBlock(DataflowBlock { inputs: TypeRow { types: [Type(Extension(CustomType { extension: IdentList(\"prelude\"), id: \"usize\", args: [], bound: Eq }), Eq)] }, other_outputs: TypeRow { types: [] }, sum_rows: [TypeRow { types: [Type(Extension(CustomType { extension: IdentList(\"prelude\"), id: \"usize\", args: [], bound: Eq }), Eq)] }, TypeRow { types: [Type(Extension(CustomType { extension: IdentList(\"prelude\"), id: \"usize\", args: [], bound: Eq }), Eq)] }], extension_delta: ExtensionSet({}) }).", line: 0, column: 0)

---- algorithm::nest_cfgs::test::test_cond_then_loop_combined stdout ----
thread 'algorithm::nest_cfgs::test::test_cond_then_loop_combined' panicked at hugr/src/hugr/serialize.rs:327:34:
called `Result::unwrap()` on an `Err` value: Error("Cannot connect an edge without port offset to node Node(1) with operation type DataflowBlock(DataflowBlock { inputs: TypeRow { types: [Type(Extension(CustomType { extension: IdentList(\"prelude\"), id: \"usize\", args: [], bound: Eq }), Eq)] }, other_outputs: TypeRow { types: [Type(Extension(CustomType { extension: IdentList(\"prelude\"), id: \"usize\", args: [], bound: Eq }), Eq)] }, sum_rows: [TypeRow { types: [] }, TypeRow { types: [] }], extension_delta: ExtensionSet({}) }).", line: 0, column: 0)

---- algorithm::nest_cfgs::test::test_cond_in_loop_combined_headers stdout ----
thread 'algorithm::nest_cfgs::test::test_cond_in_loop_combined_headers' panicked at hugr/src/hugr/serialize.rs:327:34:
called `Result::unwrap()` on an `Err` value: Error("Cannot connect an edge without port offset to node Node(5) with operation type DataflowBlock(DataflowBlock { inputs: TypeRow { types: [Type(Extension(CustomType { extension: IdentList(\"prelude\"), id: \"usize\", args: [], bound: Eq }), Eq)] }, other_outputs: TypeRow { types: [Type(Extension(CustomType { extension: IdentList(\"prelude\"), id: \"usize\", args: [], bound: Eq }), Eq)] }, sum_rows: [TypeRow { types: [] }, TypeRow { types: [] }], extension_delta: ExtensionSet({}) }).", line: 0, column: 0)

---- algorithm::half_node::test::test_cond_in_loop_combined_headers stdout ----
thread 'algorithm::half_node::test::test_cond_in_loop_combined_headers' panicked at hugr/src/hugr/serialize.rs:327:34:
called `Result::unwrap()` on an `Err` value: Error("Cannot connect an edge without port offset to node Node(5) with operation type DataflowBlock(DataflowBlock { inputs: TypeRow { types: [Type(Extension(CustomType { extension: IdentList(\"prelude\"), id: \"usize\", args: [], bound: Eq }), Eq)] }, other_outputs: TypeRow { types: [Type(Extension(CustomType { extension: IdentList(\"prelude\"), id: \"usize\", args: [], bound: Eq }), Eq)] }, sum_rows: [TypeRow { types: [] }, TypeRow { types: [] }], extension_delta: ExtensionSet({}) }).", line: 0, column: 0)

---- algorithm::nest_cfgs::test::test_cond_then_loop_separate stdout ----
thread 'algorithm::nest_cfgs::test::test_cond_then_loop_separate' panicked at hugr/src/hugr/serialize.rs:327:34:
called `Result::unwrap()` on an `Err` value: Error("Cannot connect an edge without port offset to node Node(5) with operation type DataflowBlock(DataflowBlock { inputs: TypeRow { types: [Type(Extension(CustomType { extension: IdentList(\"prelude\"), id: \"usize\", args: [], bound: Eq }), Eq)] }, other_outputs: TypeRow { types: [Type(Extension(CustomType { extension: IdentList(\"prelude\"), id: \"usize\", args: [], bound: Eq }), Eq)] }, sum_rows: [TypeRow { types: [] }, TypeRow { types: [] }], extension_delta: ExtensionSet({}) }).", line: 0, column: 0)

---- algorithm::nest_cfgs::test::test_cond_in_loop_separate_headers stdout ----
thread 'algorithm::nest_cfgs::test::test_cond_in_loop_separate_headers' panicked at hugr/src/hugr/serialize.rs:327:34:
called `Result::unwrap()` on an `Err` value: Error("Cannot connect an edge without port offset to node Node(5) with operation type DataflowBlock(DataflowBlock { inputs: TypeRow { types: [Type(Extension(CustomType { extension: IdentList(\"prelude\"), id: \"usize\", args: [], bound: Eq }), Eq)] }, other_outputs: TypeRow { types: [Type(Extension(CustomType { extension: IdentList(\"prelude\"), id: \"usize\", args: [], bound: Eq }), Eq)] }, sum_rows: [TypeRow { types: [] }, TypeRow { types: [] }], extension_delta: ExtensionSet({}) }).", line: 0, column: 0)

---- extension::infer::test::simple_cfg_loop stdout ----
thread 'extension::infer::test::simple_cfg_loop' panicked at hugr/src/hugr/serialize.rs:327:34:
called `Result::unwrap()` on an `Err` value: Error("Cannot connect an edge without port offset to node Node(3) with operation type DataflowBlock(DataflowBlock { inputs: TypeRow { types: [Type(Extension(CustomType { extension: IdentList(\"prelude\"), id: \"usize\", args: [], bound: Eq }), Eq)] }, other_outputs: TypeRow { types: [] }, sum_rows: [TypeRow { types: [Type(Extension(CustomType { extension: IdentList(\"prelude\"), id: \"usize\", args: [], bound: Eq }), Eq)] }, TypeRow { types: [Type(Extension(CustomType { extension: IdentList(\"prelude\"), id: \"usize\", args: [], bound: Eq }), Eq)] }], extension_delta: ExtensionSet({IdentList(\"A\")}) }).", line: 0, column: 0)

---- extension::infer::test::test_cfg_loops stdout ----
thread 'extension::infer::test::test_cfg_loops' panicked at hugr/src/hugr/serialize.rs:327:34:
called `Result::unwrap()` on an `Err` value: Error("Cannot connect an edge without port offset to node Node(3) with operation type DataflowBlock(DataflowBlock { inputs: TypeRow { types: [Type(Extension(CustomType { extension: IdentList(\"prelude\"), id: \"usize\", args: [], bound: Eq }), Eq)] }, other_outputs: TypeRow { types: [] }, sum_rows: [TypeRow { types: [Type(Extension(CustomType { extension: IdentList(\"prelude\"), id: \"usize\", args: [], bound: Eq }), Eq)] }, TypeRow { types: [Type(Extension(CustomType { extension: IdentList(\"prelude\"), id: \"usize\", args: [], bound: Eq }), Eq)] }], extension_delta: ExtensionSet({}) }).", line: 0, column: 0)

---- extension::infer::test::multi_entry stdout ----
thread 'extension::infer::test::multi_entry' panicked at hugr/src/hugr/serialize.rs:327:34:
called `Result::unwrap()` on an `Err` value: Error("Cannot connect an edge without port offset to node Node(1) with operation type DataflowBlock(DataflowBlock { inputs: TypeRow { types: [Type(Extension(CustomType { extension: IdentList(\"prelude\"), id: \"usize\", args: [], bound: Eq }), Eq)] }, other_outputs: TypeRow { types: [] }, sum_rows: [TypeRow { types: [Type(Extension(CustomType { extension: IdentList(\"prelude\"), id: \"usize\", args: [], bound: Eq }), Eq)] }, TypeRow { types: [Type(Extension(CustomType { extension: IdentList(\"prelude\"), id: \"usize\", args: [], bound: Eq }), Eq)] }], extension_delta: ExtensionSet({}) }).", line: 0, column: 0)

---- hugr::rewrite::insert_identity::tests::incorrect_insertion stdout ----
thread 'hugr::rewrite::insert_identity::tests::incorrect_insertion' panicked at hugr/src/hugr/serialize.rs:327:34:
called `Result::unwrap()` on an `Err` value: Error("Cannot connect an edge without port offset to node Node(5) with operation type DataflowBlock(DataflowBlock { inputs: TypeRow { types: [Type(Extension(CustomType { extension: IdentList(\"prelude\"), id: \"usize\", args: [], bound: Eq }), Eq)] }, other_outputs: TypeRow { types: [Type(Extension(CustomType { extension: IdentList(\"prelude\"), id: \"usize\", args: [], bound: Eq }), Eq)] }, sum_rows: [TypeRow { types: [] }, TypeRow { types: [] }], extension_delta: ExtensionSet({}) }).", line: 0, column: 0)

---- hugr::rewrite::outline_cfg::test::test_outline_cfg_move_entry stdout ----
thread 'hugr::rewrite::outline_cfg::test::test_outline_cfg_move_entry' panicked at hugr/src/hugr/serialize.rs:327:34:
called `Result::unwrap()` on an `Err` value: Error("Cannot connect an edge without port offset to node Node(1) with operation type DataflowBlock(DataflowBlock { inputs: TypeRow { types: [Type(Extension(CustomType { extension: IdentList(\"prelude\"), id: \"usize\", args: [], bound: Eq }), Eq)] }, other_outputs: TypeRow { types: [Type(Extension(CustomType { extension: IdentList(\"prelude\"), id: \"usize\", args: [], bound: Eq }), Eq)] }, sum_rows: [TypeRow { types: [] }, TypeRow { types: [] }], extension_delta: ExtensionSet({}) }).", line: 0, column: 0)

---- hugr::rewrite::outline_cfg::test::test_outline_cfg_errors stdout ----
thread 'hugr::rewrite::outline_cfg::test::test_outline_cfg_errors' panicked at hugr/src/hugr/serialize.rs:327:34:
called `Result::unwrap()` on an `Err` value: Error("Cannot connect an edge without port offset to node Node(5) with operation type DataflowBlock(DataflowBlock { inputs: TypeRow { types: [Type(Extension(CustomType { extension: IdentList(\"prelude\"), id: \"usize\", args: [], bound: Eq }), Eq)] }, other_outputs: TypeRow { types: [Type(Extension(CustomType { extension: IdentList(\"prelude\"), id: \"usize\", args: [], bound: Eq }), Eq)] }, sum_rows: [TypeRow { types: [] }, TypeRow { types: [] }], extension_delta: ExtensionSet({}) }).", line: 0, column: 0)

---- hugr::rewrite::outline_cfg::test::test_outline_cfg stdout ----
thread 'hugr::rewrite::outline_cfg::test::test_outline_cfg' panicked at hugr/src/hugr/serialize.rs:327:34:
called `Result::unwrap()` on an `Err` value: Error("Cannot connect an edge without port offset to node Node(5) with operation type DataflowBlock(DataflowBlock { inputs: TypeRow { types: [Type(Extension(CustomType { extension: IdentList(\"prelude\"), id: \"usize\", args: [], bound: Eq }), Eq)] }, other_outputs: TypeRow { types: [Type(Extension(CustomType { extension: IdentList(\"prelude\"), id: \"usize\", args: [], bound: Eq }), Eq)] }, sum_rows: [TypeRow { types: [] }, TypeRow { types: [] }], extension_delta: ExtensionSet({}) }).", line: 0, column: 0)

---- hugr::rewrite::outline_cfg::test::test_outline_cfg_subregion stdout ----
thread 'hugr::rewrite::outline_cfg::test::test_outline_cfg_subregion' panicked at hugr/src/hugr/serialize.rs:327:34:
called `Result::unwrap()` on an `Err` value: Error("Cannot connect an edge without port offset to node Node(9) with operation type DataflowBlock(DataflowBlock { inputs: TypeRow { types: [Type(Extension(CustomType { extension: IdentList(\"prelude\"), id: \"usize\", args: [], bound: Eq }), Eq)] }, other_outputs: TypeRow { types: [Type(Extension(CustomType { extension: IdentList(\"prelude\"), id: \"usize\", args: [], bound: Eq }), Eq)] }, sum_rows: [TypeRow { types: [] }, TypeRow { types: [] }], extension_delta: ExtensionSet({}) }).", line: 0, column: 0)

---- hugr::views::tests::dot_string::case_2_cfg stdout ----
thread 'hugr::views::tests::dot_string::case_2_cfg' panicked at hugr/src/hugr/serialize.rs:327:34:
called `Result::unwrap()` on an `Err` value: Error("Cannot connect an edge without port offset to node Node(1) with operation type DataflowBlock(DataflowBlock { inputs: TypeRow { types: [Type(Extension(CustomType { extension: IdentList(\"prelude\"), id: \"usize\", args: [], bound: Eq }), Eq)] }, other_outputs: TypeRow { types: [] }, sum_rows: [TypeRow { types: [Type(Extension(CustomType { extension: IdentList(\"prelude\"), id: \"usize\", args: [], bound: Eq }), Eq)] }, TypeRow { types: [Type(Extension(CustomType { extension: IdentList(\"prelude\"), id: \"usize\", args: [], bound: Eq }), Eq)] }], extension_delta: ExtensionSet({}) }).", line: 0, column: 0)

---- hugr::views::tests::mermaid_string::case_2_cfg stdout ----
thread 'hugr::views::tests::mermaid_string::case_2_cfg' panicked at hugr/src/hugr/serialize.rs:327:34:
called `Result::unwrap()` on an `Err` value: Error("Cannot connect an edge without port offset to node Node(1) with operation type DataflowBlock(DataflowBlock { inputs: TypeRow { types: [Type(Extension(CustomType { extension: IdentList(\"prelude\"), id: \"usize\", args: [], bound: Eq }), Eq)] }, other_outputs: TypeRow { types: [] }, sum_rows: [TypeRow { types: [Type(Extension(CustomType { extension: IdentList(\"prelude\"), id: \"usize\", args: [], bound: Eq }), Eq)] }, TypeRow { types: [Type(Extension(CustomType { extension: IdentList(\"prelude\"), id: \"usize\", args: [], bound: Eq }), Eq)] }], extension_delta: ExtensionSet({}) }).", line: 0, column: 0)

---- ops::constant::test::test_sum stdout ----
thread 'ops::constant::test::test_sum' panicked at hugr/src/hugr/serialize.rs:353:13:
assertion `left == right` failed
  left: Const(Sum { tag: 0, values: [Extension { e: ExtensionConst(CustomTestValue(CustomType { extension: IdentList("prelude"), id: "usize", args: [], bound: Eq })) }, Extension { e: ExtensionConst(CustomSerialized { typ: Type(Extension(CustomType { extension: IdentList("arithmetic.float.types"), id: "float64", args: [], bound: Copyable }), Copyable), value: Number(5.1), extensions: ExtensionSet({IdentList("arithmetic.float.types")}) }) }], sum_type: General { rows: [TypeRow { types: [Type(Extension(CustomType { extension: IdentList("prelude"), id: "usize", args: [], bound: Eq }), Eq), Type(Extension(CustomType { extension: IdentList("arithmetic.float.types"), id: "float64", args: [], bound: Copyable }), Copyable)] }, TypeRow { types: [] }] } })
 right: Const(Sum { tag: 0, values: [Extension { e: ExtensionConst(CustomTestValue(CustomType { extension: IdentList("prelude"), id: "usize", args: [], bound: Eq })) }, Extension { e: ExtensionConst(CustomSerialized { typ: Type(Extension(CustomType { extension: IdentList("arithmetic.float.types"), id: "float64", args: [], bound: Copyable }), Copyable), value: Number(5.1), extensions: ExtensionSet({IdentList("arithmetic.float.types")}) }) }], sum_type: General { rows: [TypeRow { types: [Type(Extension(CustomType { extension: IdentList("prelude"), id: "usize", args: [], bound: Eq }), Eq), Type(Extension(CustomType { extension: IdentList("arithmetic.float.types"), id: "float64", args: [], bound: Copyable }), Copyable)] }, TypeRow { types: [] }] } })


failures:
    algorithm::half_node::test::test_cond_in_loop_combined_headers
    algorithm::nest_cfgs::test::test_cond_in_loop_combined_headers
    algorithm::nest_cfgs::test::test_cond_in_loop_separate_headers
    algorithm::nest_cfgs::test::test_cond_then_loop_combined
    algorithm::nest_cfgs::test::test_cond_then_loop_separate
    builder::cfg::test::basic_cfg_hugr
    builder::cfg::test::basic_module_cfg
    extension::infer::test::multi_entry
    extension::infer::test::simple_cfg_loop
    extension::infer::test::test_cfg_loops
    hugr::rewrite::insert_identity::tests::incorrect_insertion
    hugr::rewrite::outline_cfg::test::test_outline_cfg
    hugr::rewrite::outline_cfg::test::test_outline_cfg_errors
    hugr::rewrite::outline_cfg::test::test_outline_cfg_move_entry
    hugr::rewrite::outline_cfg::test::test_outline_cfg_subregion
    hugr::views::tests::dot_string::case_2_cfg
    hugr::views::tests::mermaid_string::case_2_cfg
    ops::constant::test::test_sum

test result: FAILED. 167 passed; 18 failed; 0 ignored; 0 measured; 0 filtered out; finished in 0.04s

@doug-q
Copy link
Collaborator Author

doug-q commented Apr 18, 2024

I've pushed that makes all tests pass where validation checks round tripping but not schema.

I do not have confidence that this is working, other_port always returns the first non dataflow port, how can this work for DataflowBlock with multiple non-dataflow ports?

Copy link

codecov bot commented Apr 18, 2024

Codecov Report

All modified and coverable lines are covered by tests ✅

Project coverage is 85.85%. Comparing base (b7df2ef) to head (cd130ca).
Report is 3 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #948      +/-   ##
==========================================
+ Coverage   85.63%   85.85%   +0.21%     
==========================================
  Files          78       78              
  Lines       14365    14380      +15     
  Branches    14365    14380      +15     
==========================================
+ Hits        12302    12346      +44     
+ Misses       1429     1398      -31     
- Partials      634      636       +2     
Flag Coverage Δ
rust 85.85% <100.00%> (+0.21%) ⬆️

Flags with carried forward coverage won't be shown. Click here to find out more.

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

@doug-q doug-q changed the title [test] Check round trip serialization on validate fix: serialization round-trips Apr 19, 2024
@doug-q doug-q requested a review from aborgna-q April 19, 2024 08:39
hugr/src/hugr/serialize.rs Show resolved Hide resolved
hugr/src/hugr/serialize.rs Show resolved Hide resolved
doug-q and others added 2 commits April 19, 2024 12:18
Co-authored-by: Agustín Borgna <121866228+aborgna-q@users.noreply.github.com>
Co-authored-by: Agustín Borgna <121866228+aborgna-q@users.noreply.github.com>
@doug-q doug-q enabled auto-merge April 19, 2024 11:19
@doug-q doug-q added this pull request to the merge queue Apr 19, 2024
Merged via the queue into main with commit 9d2de07 Apr 19, 2024
17 checks passed
@doug-q doug-q deleted the feat/serialisation-tests branch April 19, 2024 11:23
@github-actions github-actions bot mentioned this pull request Apr 19, 2024
aborgna-q added a commit that referenced this pull request Apr 23, 2024
We add a check during validation, conditioned on `cfg(test)`, that the
hugr in question successfully round-trips.

---------

Co-authored-by: Agustín Borgna <121866228+aborgna-q@users.noreply.github.com>
github-merge-queue bot pushed a commit that referenced this pull request May 13, 2024
## 🤖 New release
* `hugr`: 0.3.1 -> 0.4.0-alpha.1 (⚠️ API breaking changes)

### ⚠️ `hugr` breaking changes

```
--- failure enum_marked_non_exhaustive: enum marked #[non_exhaustive] ---

Description:
A public enum has been marked #[non_exhaustive]. Pattern-matching on it outside of its crate must now include a wildcard pattern like `_`, or it will fail to compile.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#attr-adding-non-exhaustive
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.31.0/src/lints/enum_marked_non_exhaustive.ron

Failed in:
  enum RegionBlocksError in /tmp/.tmpleGpag/hugr/hugr/src/algorithm/nest_cfgs.rs:282
  enum EdgeValidationError in /tmp/.tmpleGpag/hugr/hugr/src/ops/validate.rs:213
  enum ExtensionDeclarationError in /tmp/.tmpleGpag/hugr/hugr/src/extension/declarative.rs:179
  enum InterGraphEdgeError in /tmp/.tmpleGpag/hugr/hugr/src/hugr/validate.rs:748
  enum ValidationError in /tmp/.tmpleGpag/hugr/hugr/src/hugr/validate.rs:632
  enum ValidationError in /tmp/.tmpleGpag/hugr/hugr/src/hugr/validate.rs:632
  enum HUGRSerializationError in /tmp/.tmpleGpag/hugr/hugr/src/hugr/serialize.rs:107
  enum InlineDFGError in /tmp/.tmpleGpag/hugr/hugr/src/hugr/rewrite/inline_dfg.rs:15
  enum ExtensionError in /tmp/.tmpleGpag/hugr/hugr/src/extension/validate.rs:163
  enum IntOpDef in /tmp/.tmpleGpag/hugr/hugr/src/std_extensions/arithmetic/int_ops.rs:51
  enum ChildrenValidationError in /tmp/.tmpleGpag/hugr/hugr/src/ops/validate.rs:163
  enum SumTypeError in /tmp/.tmpleGpag/hugr/hugr/src/types/check.rs:11
  enum ReplaceError in /tmp/.tmpleGpag/hugr/hugr/src/hugr/rewrite/replace.rs:388
  enum ConvertOpDef in /tmp/.tmpleGpag/hugr/hugr/src/std_extensions/arithmetic/conversions.rs:30
  enum InvalidSubgraph in /tmp/.tmpleGpag/hugr/hugr/src/hugr/views/sibling_subgraph.rs:647
  enum TypeArgError in /tmp/.tmpleGpag/hugr/hugr/src/types/type_param.rs:376
  enum SumType in /tmp/.tmpleGpag/hugr/hugr/src/types.rs:124
  enum ListOp in /tmp/.tmpleGpag/hugr/hugr/src/std_extensions/collections.rs:209
  enum SimpleReplacementError in /tmp/.tmpleGpag/hugr/hugr/src/hugr/rewrite/simple_replace.rs:185
  enum SimpleReplacementError in /tmp/.tmpleGpag/hugr/hugr/src/hugr/rewrite/simple_replace.rs:185
  enum SimpleReplacementError in /tmp/.tmpleGpag/hugr/hugr/src/hugr/rewrite/simple_replace.rs:185
  enum CustomCheckFailure in /tmp/.tmpleGpag/hugr/hugr/src/ops/constant.rs:227
  enum CustomCheckFailure in /tmp/.tmpleGpag/hugr/hugr/src/ops/constant.rs:227
  enum IdentityInsertionError in /tmp/.tmpleGpag/hugr/hugr/src/hugr/rewrite/insert_identity.rs:36
  enum RemoveError in /tmp/.tmpleGpag/hugr/hugr/src/hugr/rewrite/consts.rs:18
  enum OutlineCfgError in /tmp/.tmpleGpag/hugr/hugr/src/hugr/rewrite/outline_cfg.rs:223
  enum NaryLogic in /tmp/.tmpleGpag/hugr/hugr/src/std_extensions/logic.rs:56
  enum OpLoadError in /tmp/.tmpleGpag/hugr/hugr/src/extension/simple_op.rs:24
  enum ConstTypeError in /tmp/.tmpleGpag/hugr/hugr/src/ops/constant.rs:244
  enum ConstTypeError in /tmp/.tmpleGpag/hugr/hugr/src/ops/constant.rs:244
  enum InvalidReplacement in /tmp/.tmpleGpag/hugr/hugr/src/hugr/views/sibling_subgraph.rs:629
  enum InvalidSubgraphBoundary in /tmp/.tmpleGpag/hugr/hugr/src/hugr/views/sibling_subgraph.rs:665
  enum InferExtensionError in /tmp/.tmpleGpag/hugr/hugr/src/extension/infer.rs:68
  enum FloatOps in /tmp/.tmpleGpag/hugr/hugr/src/std_extensions/arithmetic/float_ops.rs:25
  enum CustomOpError in /tmp/.tmpleGpag/hugr/hugr/src/ops/custom.rs:400

--- failure enum_missing: pub enum removed or renamed ---

Description:
A publicly-visible enum cannot be imported by its prior path. A `pub use` may have been removed, or the enum itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.31.0/src/lints/enum_missing.ron

Failed in:
  enum hugr::ops::constant::Const, previously in file /tmp/.tmppKREXC/hugr/src/ops/constant.rs:22
  enum hugr::ops::Const, previously in file /tmp/.tmppKREXC/hugr/src/ops/constant.rs:22

--- failure enum_struct_variant_field_added: pub enum struct variant field added ---

Description:
An enum's exhaustive struct variant has a new field, which has to be included when constructing or matching on this variant.
        ref: https://doc.rust-lang.org/reference/attributes/type_system.html#the-non_exhaustive-attribute
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.31.0/src/lints/enum_struct_variant_field_added.ron

Failed in:
  field dir of variant HUGRSerializationError::MissingPortOffset in /tmp/.tmpleGpag/hugr/hugr/src/hugr/serialize.rs:120

--- failure enum_variant_added: enum variant added on exhaustive enum ---

Description:
A publicly-visible enum without #[non_exhaustive] has a new variant.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#enum-variant-new
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.31.0/src/lints/enum_variant_added.ron

Failed in:
  variant SignatureError:LoadFunctionIncorrectlyAppliesType in /tmp/.tmpleGpag/hugr/hugr/src/extension.rs:182
  variant ExtensionBuildError:ValueExists in /tmp/.tmpleGpag/hugr/hugr/src/extension.rs:405

--- failure inherent_method_missing: pub method removed or renamed ---

Description:
A publicly-visible method or associated fn is no longer available under its prior name. It may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.31.0/src/lints/inherent_method_missing.ron

Failed in:
  ConvertOpDef::with_width, previously in file /tmp/.tmppKREXC/hugr/src/std_extensions/arithmetic/conversions.rs:78
  IntOpDef::with_width, previously in file /tmp/.tmppKREXC/hugr/src/std_extensions/arithmetic/int_ops.rs:314
  IntOpDef::with_two_widths, previously in file /tmp/.tmppKREXC/hugr/src/std_extensions/arithmetic/int_ops.rs:323
  Const::const_type, previously in file /tmp/.tmppKREXC/hugr/src/ops/constant.rs:124
  Const::sum, previously in file /tmp/.tmppKREXC/hugr/src/ops/constant.rs:138
  Const::tuple, previously in file /tmp/.tmppKREXC/hugr/src/ops/constant.rs:153
  Const::function, previously in file /tmp/.tmppKREXC/hugr/src/ops/constant.rs:164
  Const::unit, previously in file /tmp/.tmppKREXC/hugr/src/ops/constant.rs:173
  Const::unit_sum, previously in file /tmp/.tmppKREXC/hugr/src/ops/constant.rs:178
  Const::unary_unit_sum, previously in file /tmp/.tmppKREXC/hugr/src/ops/constant.rs:183
  Const::true_val, previously in file /tmp/.tmppKREXC/hugr/src/ops/constant.rs:188
  Const::false_val, previously in file /tmp/.tmppKREXC/hugr/src/ops/constant.rs:193
  Const::from_bool, previously in file /tmp/.tmppKREXC/hugr/src/ops/constant.rs:199
  Const::extension, previously in file /tmp/.tmppKREXC/hugr/src/ops/constant.rs:208
  Const::get_custom_value, previously in file /tmp/.tmppKREXC/hugr/src/ops/constant.rs:215
  Const::const_type, previously in file /tmp/.tmppKREXC/hugr/src/ops/constant.rs:124
  Const::sum, previously in file /tmp/.tmppKREXC/hugr/src/ops/constant.rs:138
  Const::tuple, previously in file /tmp/.tmppKREXC/hugr/src/ops/constant.rs:153
  Const::function, previously in file /tmp/.tmppKREXC/hugr/src/ops/constant.rs:164
  Const::unit, previously in file /tmp/.tmppKREXC/hugr/src/ops/constant.rs:173
  Const::unit_sum, previously in file /tmp/.tmppKREXC/hugr/src/ops/constant.rs:178
  Const::unary_unit_sum, previously in file /tmp/.tmppKREXC/hugr/src/ops/constant.rs:183
  Const::true_val, previously in file /tmp/.tmppKREXC/hugr/src/ops/constant.rs:188
  Const::false_val, previously in file /tmp/.tmppKREXC/hugr/src/ops/constant.rs:193
  Const::from_bool, previously in file /tmp/.tmppKREXC/hugr/src/ops/constant.rs:199
  Const::extension, previously in file /tmp/.tmppKREXC/hugr/src/ops/constant.rs:208
  Const::get_custom_value, previously in file /tmp/.tmppKREXC/hugr/src/ops/constant.rs:215

--- failure struct_missing: pub struct removed or renamed ---

Description:
A publicly-visible struct cannot be imported by its prior path. A `pub use` may have been removed, or the struct itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.31.0/src/lints/struct_missing.ron

Failed in:
  struct hugr::std_extensions::arithmetic::int_types::ConstIntS, previously in file /tmp/.tmppKREXC/hugr/src/std_extensions/arithmetic/int_types.rs:83
  struct hugr::std_extensions::arithmetic::int_types::ConstIntU, previously in file /tmp/.tmppKREXC/hugr/src/std_extensions/arithmetic/int_types.rs:76
  struct hugr::ops::constant::ExtensionConst, previously in file /tmp/.tmppKREXC/hugr/src/ops/constant.rs:64

--- failure trait_missing: pub trait removed or renamed ---

Description:
A publicly-visible trait cannot be imported by its prior path. A `pub use` may have been removed, or the trait itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.31.0/src/lints/trait_missing.ron

Failed in:
  trait hugr::ops::OpName, previously in file /tmp/.tmppKREXC/hugr/src/ops.rs:307

--- failure trait_removed_supertrait: supertrait removed or renamed ---

Description:
A supertrait was removed from a trait. Users of the trait can no longer assume it can also be used like its supertrait.
        ref: https://doc.rust-lang.org/reference/items/traits.html#supertraits
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.31.0/src/lints/trait_removed_supertrait.ron

Failed in:
  supertrait hugr::ops::OpName of trait MakeExtensionOp in file /tmp/.tmpleGpag/hugr/hugr/src/extension/simple_op.rs:87
  supertrait hugr::ops::OpName of trait MakeOpDef in file /tmp/.tmpleGpag/hugr/hugr/src/extension/simple_op.rs:45
```

<details><summary><i><b>Changelog</b></i></summary><p>

<blockquote>

## 0.4.0 (2024-05-13)

### Bug Fixes

- Serialization round-trips
([#948](#948))
- [**breaking**] Combine `ConstIntU` and `ConstIntS`
([#974](#974))
- Disable serialisation tests when miri is active
([#977](#977))
- [**breaking**] Serialisation schema
([#968](#968))
- Correct constant fold for `fne`.
([#995](#995))
- [**breaking**] Serialisation fixes
([#997](#997))
- [**breaking**] OpDef serialisation
([#1013](#1013))
- NaryLogicOp constant folding
([#1026](#1026))

### Features

- 'Replace' rewrite returns node map
([#929](#929))
- `new` methods for leaf ops
([#940](#940))
- Add `string` type and `print` function to `prelude`
([#942](#942))
- `CustomOp::extension` utility function
([#951](#951))
- [**breaking**] Add `non_exhaustive` to various enums
([#952](#952))
- Encoder metadata in serialized hugr
([#955](#955))
- [**breaking**] Bring back Value
([#967](#967))
- Add LoadFunction node ([#947](#947))
- Add From impls for TypeArg
([#1002](#1002))
- Constant-folding of integer and logic operations
([#1009](#1009))
- [**breaking**] Update serialisation schema, implement `CustomConst`
serialisation ([#1005](#1005))
- Merge basic blocks algorithm
([#956](#956))
- [**breaking**] Allow panic operation to have any input and output
wires ([#1024](#1024))

### Refactor

- Outline hugr::serialize::test
([#976](#976))
- [**breaking**] Replace SmolStr identifiers with wrapper types.
([#959](#959))
- Separate extension validation from the rest
([#1011](#1011))
- Remove "trait TypeParametrised"
([#1019](#1019))

### Testing

- Add a test of instantiating an extension set
([#939](#939))
- Ignore serialisation tests when using miri
([#975](#975))
- [**breaking**] Test roundtrip serialisation against strict + lax
schema ([#982](#982))
- Fix some bad assert_matches
([#1006](#1006))
- Expand test of instantiating extension sets
([#1003](#1003))
- Fix unconnected ports in extension test
([#1010](#1010))
</blockquote>


</p></details>

---
This PR was generated with
[release-plz](https://github.com/MarcoIeni/release-plz/).

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Douglas Wilson <douglas.wilson@quantinuum.com>
@doug-q doug-q mentioned this pull request May 20, 2024
github-merge-queue bot pushed a commit that referenced this pull request May 20, 2024
## 🤖 New release
* `hugr`: 0.3.1 -> 0.4.0 (⚠️ API breaking changes)

### ⚠️ `hugr` breaking changes

```
--- failure inherent_method_const_removed: pub method is no longer const ---

Description:
A publicly-visible method or associated fn is no longer `const` and can no longer be used in a `const` context.
        ref: https://doc.rust-lang.org/reference/const_eval.html
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.31.0/src/lints/inherent_method_const_removed.ron

Failed in:
  ConstF64::new in /tmp/.tmpwo5blB/hugr/hugr/src/std_extensions/arithmetic/float_types.rs:43

--- failure struct_missing: pub struct removed or renamed ---

Description:
A publicly-visible struct cannot be imported by its prior path. A `pub use` may have been removed, or the struct itself may have been renamed or removed entirely.
        ref: https://doc.rust-lang.org/cargo/reference/semver.html#item-remove
       impl: https://github.com/obi1kenobi/cargo-semver-checks/tree/v0.31.0/src/lints/struct_missing.ron

Failed in:
  struct hugr::ops::constant::ExtensionValue, previously in file /tmp/.tmpq1W6bC/hugr/src/ops/constant.rs:184
```

<details><summary><i><b>Changelog</b></i></summary><p>

<blockquote>

## 0.4.0 (2024-05-20)

### Bug Fixes

- Disallow non-finite values for `ConstF64`
([#1075](#1075))
- Serialization round-trips
([#948](#948))
- [**breaking**] Combine `ConstIntU` and `ConstIntS`
([#974](#974))
- Disable serialisation tests when miri is active
([#977](#977))
- [**breaking**] Serialisation schema
([#968](#968))
- Correct constant fold for `fne`.
([#995](#995))
- [**breaking**] Serialisation fixes
([#997](#997))
- [**breaking**] OpDef serialisation
([#1013](#1013))
- NaryLogicOp constant folding
([#1026](#1026))

### Features

- Add verification to constant folding
([#1030](#1030))
- Add `Const::get_custom_value`
([#1037](#1037))
- Add serialization schema for metadata
([#1038](#1038))
- 'Replace' rewrite returns node map
([#929](#929))
- `new` methods for leaf ops
([#940](#940))
- Add `string` type and `print` function to `prelude`
([#942](#942))
- `CustomOp::extension` utility function
([#951](#951))
- [**breaking**] Add `non_exhaustive` to various enums
([#952](#952))
- Encoder metadata in serialized hugr
([#955](#955))
- [**breaking**] Bring back Value
([#967](#967))
- Add LoadFunction node ([#947](#947))
- Add From impls for TypeArg
([#1002](#1002))
- Constant-folding of integer and logic operations
([#1009](#1009))
- [**breaking**] Update serialisation schema, implement `CustomConst`
serialisation ([#1005](#1005))
- Merge basic blocks algorithm
([#956](#956))
- [**breaking**] Allow panic operation to have any input and output
wires ([#1024](#1024))

### Refactor

- [**breaking**] Rename `crate::ops::constant::ExtensionValue` =>
`OpaqueValue` ([#1036](#1036))
- Outline hugr::serialize::test
([#976](#976))
- [**breaking**] Replace SmolStr identifiers with wrapper types.
([#959](#959))
- Separate extension validation from the rest
([#1011](#1011))
- Remove "trait TypeParametrised"
([#1019](#1019))

### Testing

- Reorg OutlineCfg/nest_cfgs tests so hugr doesn't depend on algorithm
([#1007](#1007))
- Ignore tests which depend on typetag when cfg(miri)
([#1051](#1051))
- Really ignore tests which depend on typetag when cfg(miri)
([#1058](#1058))
- Proptests for round trip serialisation of `Type`s and `Op`s.
([#981](#981))
- Add a test of instantiating an extension set
([#939](#939))
- Ignore serialisation tests when using miri
([#975](#975))
- [**breaking**] Test roundtrip serialisation against strict + lax
schema ([#982](#982))
- Fix some bad assert_matches
([#1006](#1006))
- Expand test of instantiating extension sets
([#1003](#1003))
- Fix unconnected ports in extension test
([#1010](#1010))

</blockquote>


</p></details>

---
This PR was generated with
[release-plz](https://github.com/MarcoIeni/release-plz/).

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Douglas Wilson <douglas.wilson@quantinuum.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants