Skip to content
Permalink

Comparing changes

This is a direct comparison between two commits made in this repository or its related repositories. View the default comparison for this range or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: CQCL/hugr
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: 2aa064dd719c9eab52425bc0a527fa38a74ac386
Choose a base ref
..
head repository: CQCL/hugr
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 5f79b37606710de3f7644c081b5ff42b4e9271e9
Choose a head ref
Showing with 404 additions and 642 deletions.
  1. +3 −3 hugr-core/src/builder.rs
  2. +2 −3 hugr-core/src/builder/build_traits.rs
  3. +2 −4 hugr-core/src/builder/circuit.rs
  4. +1 −2 hugr-core/src/builder/dataflow.rs
  5. +9 −23 hugr-core/src/extension.rs
  6. +2 −2 hugr-core/src/extension/declarative.rs
  7. +28 −45 hugr-core/src/extension/op_def.rs
  8. +2 −4 hugr-core/src/extension/op_def/serialize_signature_func.rs
  9. +11 −21 hugr-core/src/extension/prelude.rs
  10. +3 −3 hugr-core/src/extension/prelude/generic.rs
  11. +1 −1 hugr-core/src/extension/prelude/unwrap_builder.rs
  12. +6 −7 hugr-core/src/extension/resolution/ops.rs
  13. +61 −4 hugr-core/src/extension/resolution/test.rs
  14. +17 −26 hugr-core/src/extension/simple_op.rs
  15. +4 −10 hugr-core/src/hugr/rewrite/replace.rs
  16. +3 −3 hugr-core/src/hugr/serialize/test.rs
  17. +10 −12 hugr-core/src/hugr/validate.rs
  18. +3 −18 hugr-core/src/hugr/validate/test.rs
  19. +2 −6 hugr-core/src/import.rs
  20. +19 −28 hugr-core/src/ops/controlflow.rs
  21. +8 −17 hugr-core/src/ops/custom.rs
  22. +10 −30 hugr-core/src/ops/dataflow.rs
  23. +3 −13 hugr-core/src/std_extensions/arithmetic/conversions.rs
  24. +3 −10 hugr-core/src/std_extensions/arithmetic/float_ops.rs
  25. +3 −12 hugr-core/src/std_extensions/arithmetic/int_ops.rs
  26. +1 −9 hugr-core/src/std_extensions/collections/array.rs
  27. +28 −9 hugr-core/src/std_extensions/collections/array/array_op.rs
  28. +3 −5 hugr-core/src/std_extensions/collections/array/array_repeat.rs
  29. +3 −3 hugr-core/src/std_extensions/collections/array/array_scan.rs
  30. +5 −12 hugr-core/src/std_extensions/collections/list.rs
  31. +3 −5 hugr-core/src/std_extensions/logic.rs
  32. +3 −5 hugr-core/src/std_extensions/ptr.rs
  33. +10 −18 hugr-core/src/types.rs
  34. +19 −24 hugr-core/src/types/custom.rs
  35. +31 −65 hugr-core/src/types/poly_func.rs
  36. +3 −7 hugr-core/src/types/signature.rs
  37. +6 −14 hugr-core/src/types/type_param.rs
  38. +3 −10 hugr-core/src/types/type_row.rs
  39. +1 −3 hugr-core/src/utils.rs
  40. +6 −5 hugr-llvm/src/emit/test.rs
  41. +3 −2 hugr-llvm/src/extension/collections/array.rs
  42. +1 −1 hugr-llvm/src/extension/collections/list.rs
  43. +13 −24 hugr-llvm/src/extension/conversions.rs
  44. +5 −7 hugr-llvm/src/extension/float.rs
  45. +5 −12 hugr-llvm/src/extension/int.rs
  46. +3 −9 hugr-llvm/src/extension/prelude.rs
  47. +7 −17 hugr-llvm/src/utils/inline_constant_functions.rs
  48. +3 −3 hugr-passes/src/const_fold/test.rs
  49. +0 −25 hugr-passes/src/lib.rs
  50. +2 −5 hugr-passes/src/merge_bbs.rs
  51. +10 −21 hugr-passes/src/monomorphize.rs
  52. +2 −0 hugr-py/CHANGELOG.md
  53. +3 −0 hugr-py/src/hugr/ops.py
  54. +0 −3 hugr-py/tests/test_hugr_build.py
  55. +2 −2 hugr/benches/benchmarks/hugr.rs
  56. +3 −8 hugr/benches/benchmarks/hugr/examples.rs
  57. +1 −2 hugr/src/lib.rs
6 changes: 3 additions & 3 deletions hugr-core/src/builder.rs
Original file line number Diff line number Diff line change
@@ -29,7 +29,7 @@
//! # use hugr::Hugr;
//! # use hugr::builder::{BuildError, BuildHandle, Container, DFGBuilder, Dataflow, DataflowHugr, ModuleBuilder, DataflowSubContainer, HugrBuilder};
//! use hugr::extension::prelude::bool_t;
//! use hugr::std_extensions::logic::{EXTENSION_ID, LOGIC_REG, LogicOp};
//! use hugr::std_extensions::logic::{self, LogicOp};
//! use hugr::types::Signature;
//!
//! # fn doctest() -> Result<(), BuildError> {
@@ -42,7 +42,7 @@
//! let _dfg_handle = {
//! let mut dfg = module_builder.define_function(
//! "main",
//! Signature::new_endo(bool_t()).with_extension_delta(EXTENSION_ID),
//! Signature::new_endo(bool_t()).with_extension_delta(logic::EXTENSION_ID),
//! )?;
//!
//! // Get the wires from the function inputs.
@@ -60,7 +60,7 @@
//! let mut dfg = module_builder.define_function(
//! "circuit",
//! Signature::new_endo(vec![bool_t(), bool_t()])
//! .with_extension_delta(EXTENSION_ID),
//! .with_extension_delta(logic::EXTENSION_ID),
//! )?;
//! let mut circuit = dfg.as_circuit(dfg.input_wires());
//!
5 changes: 2 additions & 3 deletions hugr-core/src/builder/build_traits.rs
Original file line number Diff line number Diff line change
@@ -437,7 +437,7 @@ pub trait Dataflow: Container {
};

let load_n = self.add_dataflow_op(
ops::LoadFunction::try_new(func_sig, type_args, self.hugr().extensions())?,
ops::LoadFunction::try_new(func_sig, type_args)?,
// Static wire from the function node
vec![Wire::new(func_node, func_op.static_output_port().unwrap())],
)?;
@@ -699,8 +699,7 @@ pub trait Dataflow: Container {
})
}
};
let op: OpType =
ops::Call::try_new(type_scheme, type_args, self.hugr().extensions())?.into();
let op: OpType = ops::Call::try_new(type_scheme, type_args)?.into();
let const_in_port = op.static_input_port().unwrap();
let op_id = self.add_dataflow_op(op, input_wires)?;
let src_port = self.hugr_mut().num_outputs(function.node()) - 1;
6 changes: 2 additions & 4 deletions hugr-core/src/builder/circuit.rs
Original file line number Diff line number Diff line change
@@ -245,7 +245,7 @@ mod test {

use crate::builder::{Container, HugrBuilder, ModuleBuilder};
use crate::extension::prelude::{qb_t, usize_t};
use crate::extension::{ExtensionId, ExtensionSet, PRELUDE_REGISTRY};
use crate::extension::{ExtensionId, ExtensionSet};
use crate::std_extensions::arithmetic::float_types::{self, ConstF64};
use crate::utils::test_quantum_extension::{
self, cx_gate, h_gate, measure, q_alloc, q_discard, rz_f64,
@@ -305,9 +305,7 @@ mod test {
)
.unwrap();
});
let my_custom_op = my_ext
.instantiate_extension_op("MyOp", [], &PRELUDE_REGISTRY)
.unwrap();
let my_custom_op = my_ext.instantiate_extension_op("MyOp", []).unwrap();

let mut module_builder = ModuleBuilder::new();
let mut f_build = module_builder
3 changes: 1 addition & 2 deletions hugr-core/src/builder/dataflow.rs
Original file line number Diff line number Diff line change
@@ -316,7 +316,7 @@ pub(crate) mod test {
};
use crate::extension::prelude::{bool_t, qb_t, usize_t};
use crate::extension::prelude::{Lift, Noop};
use crate::extension::{ExtensionId, SignatureError, PRELUDE_REGISTRY};
use crate::extension::{ExtensionId, SignatureError};
use crate::hugr::validate::InterGraphEdgeError;
use crate::ops::{handle::NodeHandle, OpTag};
use crate::ops::{OpTrait, Value};
@@ -656,7 +656,6 @@ pub(crate) mod test {
let ev = e.instantiate_extension_op(
"eval",
[vec![usize_t().into()].into(), vec![tv.into()].into()],
&PRELUDE_REGISTRY,
);
assert_eq!(
ev,
32 changes: 9 additions & 23 deletions hugr-core/src/extension.rs
Original file line number Diff line number Diff line change
@@ -113,20 +113,13 @@ impl ExtensionRegistry {
self.exts.contains_key(name)
}

/// Validate the set of extensions, ensuring that each extension requirements are also in the registry.
///
/// Note this potentially asks extensions to validate themselves against other extensions that
/// may *not* be valid themselves yet. It'd be better to order these respecting dependencies,
/// or at least to validate the types first - which we don't do at all yet:
//
// TODO https://github.com/CQCL/hugr/issues/624. However, parametrized types could be
// cyclically dependent, so there is no perfect solution, and this is at least simple.
/// Validate the set of extensions.
pub fn validate(&self) -> Result<(), ExtensionRegistryError> {
if self.valid.load(Ordering::Relaxed) {
return Ok(());
}
for ext in self.exts.values() {
ext.validate(self)
ext.validate()
.map_err(|e| ExtensionRegistryError::InvalidSignature(ext.name().clone(), e))?;
}
self.valid.store(true, Ordering::Relaxed);
@@ -398,14 +391,9 @@ pub enum SignatureError {
/// Invalid type arguments
#[error("Invalid type arguments for operation")]
InvalidTypeArgs,
/// The Extension Registry did not contain an Extension referenced by the Signature
#[error("Extension '{missing}' is not part of the declared HUGR extensions [{}]",
available.iter().map(|e| e.to_string()).collect::<Vec<_>>().join(", ")
)]
ExtensionNotFound {
missing: ExtensionId,
available: Vec<ExtensionId>,
},
/// The weak [`Extension`] reference for a custom type has been dropped.
#[error("Type '{typ}' is defined in extension '{missing}', but the extension reference has been dropped.")]
MissingTypeExtension { typ: TypeName, missing: ExtensionId },
/// The Extension was found in the registry, but did not contain the Type(Def) referenced in the Signature
#[error("Extension '{exn}' did not contain expected TypeDef '{typ}'")]
ExtensionTypeNotFound { exn: ExtensionId, typ: TypeName },
@@ -740,18 +728,16 @@ impl Extension {
&self,
name: &OpNameRef,
args: impl Into<Vec<TypeArg>>,
ext_reg: &ExtensionRegistry,
) -> Result<ExtensionOp, SignatureError> {
let op_def = self.get_op(name).expect("Op not found.");
ExtensionOp::new(op_def.clone(), args, ext_reg)
ExtensionOp::new(op_def.clone(), args)
}

/// Validates against a registry, which we can assume includes this extension itself.
// (TODO deal with the registry itself containing invalid extensions!)
fn validate(&self, all_exts: &ExtensionRegistry) -> Result<(), SignatureError> {
/// Validates the operation definitions in the register.
fn validate(&self) -> Result<(), SignatureError> {
// We should validate TypeParams of TypeDefs too - https://github.com/CQCL/hugr/issues/624
for op_def in self.operations.values() {
op_def.validate(all_exts)?;
op_def.validate()?;
}
Ok(())
}
4 changes: 2 additions & 2 deletions hugr-core/src/extension/declarative.rs
Original file line number Diff line number Diff line change
@@ -17,7 +17,7 @@
//! # const DECLARATIVE_YAML: &str = include_str!("../../examples/extension/declarative.yaml");
//! # use hugr::extension::declarative::load_extensions;
//! // Required extensions must already be present in the registry.
//! let mut reg = hugr::std_extensions::logic::LOGIC_REG.clone();
//! let mut reg = hugr::std_extensions::STD_REG.clone();
//! load_extensions(DECLARATIVE_YAML, &mut reg).unwrap();
//! ```
//!
@@ -364,7 +364,7 @@ extensions:

#[cfg_attr(miri, ignore)] // Opening files is not supported in (isolated) miri
#[rstest]
#[case(EXAMPLE_YAML_FILE, 1, 1, 3, &std_extensions::logic::LOGIC_REG)]
#[case(EXAMPLE_YAML_FILE, 1, 1, 3, &std_extensions::STD_REG)]
fn test_decode_file(
#[case] yaml_file: &str,
#[case] num_declarations: usize,
Loading