From 7e31368a2b6de97c313e5760ece8d3d4f009b45a Mon Sep 17 00:00:00 2001 From: "Stefan J. Wernli" Date: Thu, 11 Jun 2026 22:43:28 -0700 Subject: [PATCH 1/5] Implement `PostSelectZ` for Clifford simulation This change adds support for simulation time post-selection in the Z basis when using the Clifford simulator. --- library/src/tests/diagnostics.rs | 62 ++++++++++++++++++- source/compiler/qsc_eval/src/backend.rs | 13 ++-- .../src/outcome_specific_simulation.rs | 39 +++++++++++- source/simulators/src/stabilizer_simulator.rs | 5 ++ 4 files changed, 110 insertions(+), 9 deletions(-) diff --git a/library/src/tests/diagnostics.rs b/library/src/tests/diagnostics.rs index f30dfeaa962..d549b1374dd 100644 --- a/library/src/tests/diagnostics.rs +++ b/library/src/tests/diagnostics.rs @@ -1,11 +1,14 @@ // Copyright (c) Microsoft Corporation. // Licensed under the MIT License. -use crate::tests::test_expression_fails; +use crate::tests::{ + test_expression_fails, test_expression_fails_with_lib_and_profile_and_sim, + test_expression_with_lib_and_profile_and_sim, +}; use super::test_expression; use expect_test::expect; -use qsc::interpret::Value; +use qsc::{interpret::Value, target::Profile}; #[test] fn check_operations_are_equal() { @@ -535,6 +538,24 @@ fn check_post_select_collapses_superposition_to_zero() { ); } +#[test] +fn check_post_select_collapses_superposition_to_zero_on_clifford() { + test_expression_with_lib_and_profile_and_sim( + "{ + import Std.Diagnostics.PostSelectZ; + import Std.Diagnostics.CheckZero; + use q = Qubit(); + H(q); + PostSelectZ(Zero, q); + // Qubit must be zero on release. + }", + "", + Profile::Unrestricted, + &mut qsc::CliffordSim::new(1), + &Value::unit(), + ); +} + #[test] fn check_post_select_collapses_superposition_to_one() { test_expression( @@ -552,6 +573,24 @@ fn check_post_select_collapses_superposition_to_one() { ); } +#[test] +fn check_post_select_collapses_superposition_to_one_on_clifford() { + test_expression_with_lib_and_profile_and_sim( + "{ + import Std.Diagnostics.PostSelectZ; + import Std.Diagnostics.CheckZero; + use q = Qubit(); + H(q); + PostSelectZ(One, q); + X(q); // Resets the qubit back to zero for release. + }", + "", + Profile::Unrestricted, + &mut qsc::CliffordSim::new(1), + &Value::unit(), + ); +} + #[test] fn check_post_select_fails_with_non_existent_state() { let err = test_expression_fails( @@ -567,3 +606,22 @@ fn check_post_select_fails_with_non_existent_state() { ] .assert_eq(&err); } + +#[test] +fn check_post_select_fails_with_non_existent_state_on_clifford() { + let err = test_expression_fails_with_lib_and_profile_and_sim( + "{ + import Std.Diagnostics.PostSelectZ; + import Std.Diagnostics.CheckZero; + use q = Qubit(); + PostSelectZ(One, q); + }", + "", + Profile::Unrestricted, + &mut qsc::CliffordSim::new(1), + ); + expect![ + "intrinsic callable `PostSelectZ` failed: post-selection condition has zero probability" + ] + .assert_eq(&err); +} diff --git a/source/compiler/qsc_eval/src/backend.rs b/source/compiler/qsc_eval/src/backend.rs index f065a699f3f..f92907aba4b 100644 --- a/source/compiler/qsc_eval/src/backend.rs +++ b/source/compiler/qsc_eval/src/backend.rs @@ -1390,7 +1390,7 @@ impl Backend for CliffordSim { Err("adjoint T gate is not supported in Clifford simulation".to_string()) } - fn custom_intrinsic(&mut self, name: &str, _arg: Value) -> Option> { + fn custom_intrinsic(&mut self, name: &str, arg: Value) -> Option> { match name { "BeginEstimateCaching" => Some(Ok(Value::Bool(true))), "GlobalPhase" @@ -1413,9 +1413,14 @@ impl Backend for CliffordSim { "Apply" => Some(Err( "arbitrary unitary application not supported in Clifford simulation".to_string(), )), - "PostSelectZ" => Some(Err( - "post-selection not supported in Clifford simulation".to_string() - )), + "PostSelectZ" => { + let [result, qubit] = unwrap_tuple(arg); + let id = qubit.unwrap_qubit().deref().0; + let Value::Result(val::Result::Val(val)) = result else { + panic!("first argument to PostSelectZ should be a measurement result"); + }; + Some(self.sim.post_select_z(val, id).map(|()| Value::unit())) + } _ => None, } } diff --git a/source/paulimer/src/outcome_specific_simulation.rs b/source/paulimer/src/outcome_specific_simulation.rs index 9fb9ae54261..e5967113048 100644 --- a/source/paulimer/src/outcome_specific_simulation.rs +++ b/source/paulimer/src/outcome_specific_simulation.rs @@ -61,6 +61,10 @@ impl OutcomeSpecificSimulation { pub fn outcome_vector(&self) -> &Vec { &self.outcome_vector } + + pub fn post_select_z(&mut self, value: bool, index: usize) -> Result<(), String> { + measure_pauli_forced(self, &SparsePauli::from([quantum_core::z(index)]), value) + } } pub fn apply_hadamard(simulation: &mut OutcomeSpecificSimulation, qubit_index: usize) { @@ -113,6 +117,7 @@ pub fn measure_pauli_with_hint( simulation: &mut OutcomeSpecificSimulation, observable: &SparsePauli, hint: &PauliUnitary, + forced_bit: Option, ) { assert!( anti_commutes_with(observable, hint), @@ -127,7 +132,13 @@ pub fn measure_pauli_with_hint( let mut pauli = observable.clone() * hint; pauli *= Phase::from_exponent(3u8.wrapping_sub(preimage.xz_phase_exponent().raw_value())); PauliExponent::new(pauli) * &mut simulation.clifford; - allocate_random_bit(simulation); + if let Some(forced) = forced_bit { + simulation.outcome_vector.push(forced); + simulation.random_outcome_indicator.push(true); + simulation.num_random_bits += 1; + } else { + allocate_random_bit(simulation); + } apply_conditional_pauli( simulation, hint, @@ -153,12 +164,34 @@ pub fn measure_pauli(simulation: &mut OutcomeSpecificSimulation, observable: &Sp match non_zero_pos { Some(pos) => { let hint = simulation.clifford.image_z(pos); - measure_pauli_with_hint(simulation, observable, &hint); + measure_pauli_with_hint(simulation, observable, &hint, None); + } + None => { + measure_deterministic(simulation, &preimage); + } + } +} + +pub fn measure_pauli_forced( + simulation: &mut OutcomeSpecificSimulation, + observable: &SparsePauli, + forced_bit: bool, +) -> Result<(), String> { + let preimage = simulation.clifford.preimage(observable); + let non_zero_pos = preimage.x_bits().support().next(); + match non_zero_pos { + Some(pos) => { + let hint = simulation.clifford.image_z(pos); + measure_pauli_with_hint(simulation, observable, &hint, Some(forced_bit)); } None => { measure_deterministic(simulation, &preimage); + if simulation.outcome_vector().last() != Some(&forced_bit) { + return Err("post-selection condition has zero probability".into()); + } } } + Ok(()) } fn measure_deterministic( @@ -252,7 +285,7 @@ impl Simulation for OutcomeSpecificSimulation { ) -> usize { let pauli = SparsePauli::from(observable); let hint = SparsePauli::from(hint); - measure_pauli_with_hint(self, &pauli, &hint); + measure_pauli_with_hint(self, &pauli, &hint, None); self.outcome_vector().len() - 1 } diff --git a/source/simulators/src/stabilizer_simulator.rs b/source/simulators/src/stabilizer_simulator.rs index de5be2a7c9f..34c686b5508 100644 --- a/source/simulators/src/stabilizer_simulator.rs +++ b/source/simulators/src/stabilizer_simulator.rs @@ -137,6 +137,11 @@ impl StabilizerSimulator { } } + /// Forces the state of a qubit to collapse to a specific value. + pub fn post_select_z(&mut self, result: bool, target: QubitID) -> Result<(), String> { + self.state.post_select_z(result, target) + } + fn apply_gate_in_place(&mut self, gate: &Operation) { match *gate { Operation::I { .. } => (), From d524dc4e8a6ff4bf8a81663458a8db4428dfc553 Mon Sep 17 00:00:00 2001 From: "Stefan J. Wernli" Date: Mon, 15 Jun 2026 15:37:40 -0700 Subject: [PATCH 2/5] Add clarifying comment --- source/paulimer/src/outcome_specific_simulation.rs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/source/paulimer/src/outcome_specific_simulation.rs b/source/paulimer/src/outcome_specific_simulation.rs index e5967113048..75f6cc922aa 100644 --- a/source/paulimer/src/outcome_specific_simulation.rs +++ b/source/paulimer/src/outcome_specific_simulation.rs @@ -133,6 +133,9 @@ pub fn measure_pauli_with_hint( pauli *= Phase::from_exponent(3u8.wrapping_sub(preimage.xz_phase_exponent().raw_value())); PauliExponent::new(pauli) * &mut simulation.clifford; if let Some(forced) = forced_bit { + // Since we have a forced bit, use that as ther result instead of a random one. + // To keep the internal state consistent, we also mark this as a random outcome, + // incrementing the count as well. simulation.outcome_vector.push(forced); simulation.random_outcome_indicator.push(true); simulation.num_random_bits += 1; From 03d5cd8474b062c1ed1fa5542fdac46b2fb4e33c Mon Sep 17 00:00:00 2001 From: "Stefan J. Wernli" Date: Tue, 16 Jun 2026 10:00:13 -0700 Subject: [PATCH 3/5] Add `postselectz` to OpenQASM via qdk.inc --- library/std/src/Std/OpenQASM/Intrinsic.qs | 6 +++++- .../src/semantic/lowerer.rs | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/library/std/src/Std/OpenQASM/Intrinsic.qs b/library/std/src/Std/OpenQASM/Intrinsic.qs index ec64de453c6..07ec7d3b2be 100644 --- a/library/std/src/Std/OpenQASM/Intrinsic.qs +++ b/library/std/src/Std/OpenQASM/Intrinsic.qs @@ -38,7 +38,7 @@ export rxx, ryy, rzz; // that Qiskit wont emit correctly. export dcx, ecr, r, rzx, cs, csdg, sxdg, csx, rccx, c3sqrtx, c3x, rc3x, xx_minus_yy, xx_plus_yy, ccz; -export mresetz_checked; +export mresetz_checked, postselectz; export __quantum__qis__barrier__body; @@ -647,6 +647,10 @@ operation mresetz_checked(q : Qubit) : Int { } } +operation postselectz(r : Result, q : Qubit) : Unit { + Std.Diagnostics.PostSelectZ(r, q); +} + /// The ``BARRIER`` function is used to implement the `barrier` statement in QASM. /// The `@SimulatableIntrinsic` attribute is used to mark the operation for QIR /// generation. diff --git a/source/compiler/qsc_openqasm_parser/src/semantic/lowerer.rs b/source/compiler/qsc_openqasm_parser/src/semantic/lowerer.rs index 151b6dc5faf..80cf21b185e 100644 --- a/source/compiler/qsc_openqasm_parser/src/semantic/lowerer.rs +++ b/source/compiler/qsc_openqasm_parser/src/semantic/lowerer.rs @@ -252,6 +252,7 @@ impl Lowerer { continue; } else if include.filename.to_lowercase() == "qdk.inc" { self.define_mresetzchecked(); + self.define_postselectz(); continue; } @@ -439,6 +440,23 @@ impl Lowerer { } } + fn define_postselectz(&mut self) { + let name = "postselectz"; + let symbol = Symbol::new( + name, + Span::default(), + Type::Function( + vec![Type::Bit(false), Type::Qubit].into(), + Type::Void.into(), + ), + Span::default(), + Default::default(), + ); + if self.symbols.insert_symbol(symbol).is_err() { + self.push_redefined_symbol_error(name, Span::default()); + } + } + /// Define the Qiskit standard gates in the symbol table. /// Qiskit emits QASM3 that can't compile because it omits /// definitions for many gates that aren't included in the From 3ca846da3d6c02244d7f89eb9709ebce947a2889 Mon Sep 17 00:00:00 2001 From: "Stefan J. Wernli" Date: Tue, 16 Jun 2026 10:03:47 -0700 Subject: [PATCH 4/5] Add postselectz OpenQASM tests --- source/qdk_package/tests/test_qasm.py | 115 ++++++++++++++++---------- 1 file changed, 71 insertions(+), 44 deletions(-) diff --git a/source/qdk_package/tests/test_qasm.py b/source/qdk_package/tests/test_qasm.py index b51d8e2bf8f..25594f0096d 100644 --- a/source/qdk_package/tests/test_qasm.py +++ b/source/qdk_package/tests/test_qasm.py @@ -133,6 +133,56 @@ def test_mresetzchecked_not_present_without_qdk_inc() -> None: assert "undefined symbol: mresetz_checked" in str(excinfo.value) +def test_postselectz_one() -> None: + result = run( + """ + include "stdgates.inc"; + include "qdk.inc"; + qubit q1; + bit r; + h q1; + postselectz(1, q1); + r = measure q1; + """, + shots=100, + seed=0, + ) + assert all(r == Result.One for r in result) + + +def test_postselectz_zero() -> None: + result = run( + """ + include "stdgates.inc"; + include "qdk.inc"; + qubit q1; + bit r; + h q1; + postselectz(0, q1); + r = measure q1; + """, + shots=100, + seed=0, + ) + assert all(r == Result.Zero for r in result) + + +def test_postselectz_not_present_without_qdk_inc() -> None: + with pytest.raises(QasmError) as excinfo: + run( + """ + include "stdgates.inc"; + qubit q1; + bit r; + postselectz(0, q1); + r = measure q1; + """, + shots=100, + seed=0, + ) + assert "undefined symbol: postselectz" in str(excinfo.value) + + def test_run_with_result(capsys) -> None: results = run("output bit c;", 3) assert results == [Result.Zero, Result.Zero, Result.Zero] @@ -310,21 +360,16 @@ def test_compile_qir_str() -> None: def test_compile_qir_str_with_single_arg_raises_error() -> None: init(target_profile=TargetProfile.Base) with pytest.raises(QSharpError) as excinfo: - compile( - """ + compile(""" include "stdgates.inc"; input float f; qubit q; rx(f) q; output bit c; c = measure q; - """ - ) - assert ( - str(excinfo.value) - == """Circuit has unbound input parameters + """) + assert str(excinfo.value) == """Circuit has unbound input parameters help: Parameters: f: Double""" - ) # Import + Compile @@ -630,12 +675,10 @@ def test_circuit_from_program() -> None: x q1; """, ) - assert str(c) == dedent( - """\ + assert str(c) == dedent("""\ q_0 ── X ── q_1 ─────── - """ - ) + """) def test_circuit_from_program_static() -> None: @@ -653,12 +696,10 @@ def test_circuit_from_program_static() -> None: """, generation_method=CircuitGenerationMethod.Static, ) - assert str(c) == dedent( - """\ + assert str(c) == dedent("""\ q_0 ── H ──── M ──── if: c_0 = |1〉 ── ╘═══════════ ● ════════ - """ - ) + """) def test_circuit_from_callable() -> None: @@ -674,12 +715,10 @@ def test_circuit_from_callable() -> None: name="Foo", ) c = qsharp_circuit("{ use (q1, q2) = (Qubit(), Qubit()); Foo(q1, q2); }") - assert str(c) == dedent( - """\ + assert str(c) == dedent("""\ q_0 ── X ── q_1 ─────── - """ - ) + """) def test_circuit_from_callable_with_multiple_qubit_registers() -> None: @@ -696,14 +735,12 @@ def test_circuit_from_callable_with_multiple_qubit_registers() -> None: name="Foo", ) c = qsharp_circuit("{ use (qs1, qs2) = (Qubit[2], Qubit[2]); Foo(qs1, qs2); }") - assert str(c) == dedent( - """\ + assert str(c) == dedent("""\ q_0 ── X ── q_1 ─────── q_2 ─────── q_3 ── X ── - """ - ) + """) def test_circuit_from_callable_with_single_qubit_and_qubit_registers() -> None: @@ -724,15 +761,13 @@ def test_circuit_from_callable_with_single_qubit_and_qubit_registers() -> None: c = qsharp_circuit( "{ use (qs1, a, qs2) = (Qubit[2], Qubit(), Qubit[2]); Foo(qs1, a, qs2); }" ) - assert str(c) == dedent( - """\ + assert str(c) == dedent("""\ q_0 ── X ── q_1 ─────── q_2 ── X ── q_3 ─────── q_4 ── X ── - """ - ) + """) def test_circuit_from_callable_with_args() -> None: @@ -749,12 +784,10 @@ def test_circuit_from_callable_with_args() -> None: name="Foo", ) c = qsharp_circuit("{ use qs = Qubit[2]; Foo(2, qs); }") - assert str(c) == dedent( - """\ + assert str(c) == dedent("""\ q_0 ── X ── q_1 ── X ── - """ - ) + """) def test_circuit_with_measure_from_callable() -> None: @@ -764,12 +797,10 @@ def test_circuit_with_measure_from_callable() -> None: name="Foo", ) c = qsharp_circuit("{ use q = Qubit(); Foo(q); }") - assert str(c) == dedent( - """\ + assert str(c) == dedent("""\ q_0 ── H ──── M ── ╘═══ - """ - ) + """) def test_circuit_from_callable_static() -> None: @@ -791,20 +822,17 @@ def test_circuit_from_callable_static() -> None: code.qasm_import.Foo, generation_method=CircuitGenerationMethod.Static, ) - assert str(c) == dedent( - """\ + assert str(c) == dedent("""\ q_0 ── H ──── M ──── if: c_0 = |1〉 ── ╘═══════════ ● ════════ - """ - ) + """) # Estimate def test_qasm_estimation() -> None: - res = estimate( - """ + res = estimate(""" include "stdgates.inc"; const int SIZE = 10; qubit[SIZE] q; @@ -812,8 +840,7 @@ def test_qasm_estimation() -> None: t q[i]; measure q[i]; } - """ - ) + """) assert res["status"] == "success" assert res["physicalCounts"] is not None assert res.logical_counts == LogicalCounts( From 1104dea18301a549e9da19992e95b557d2685207 Mon Sep 17 00:00:00 2001 From: "Stefan J. Wernli" Date: Thu, 25 Jun 2026 10:12:57 -0700 Subject: [PATCH 5/5] Update snapshots for stdlib change --- .../defunctionalize/tests/cross_package.rs | 504 ++++++++--------- .../src/sample_pipeline_tests/grover.rs | 112 ++-- .../src/sample_pipeline_tests/shor.rs | 520 +++++++++--------- 3 files changed, 568 insertions(+), 568 deletions(-) diff --git a/source/compiler/qsc_fir_transforms/src/defunctionalize/tests/cross_package.rs b/source/compiler/qsc_fir_transforms/src/defunctionalize/tests/cross_package.rs index 6c49b4c40be..b6b131cb5cc 100644 --- a/source/compiler/qsc_fir_transforms/src/defunctionalize/tests/cross_package.rs +++ b/source/compiler/qsc_fir_transforms/src/defunctionalize/tests/cross_package.rs @@ -509,8 +509,8 @@ fn analysis_apply_operation_power_ca_consumer() { &expect![[r#" callable_params: 3 param: callable_id=, path=[0], ty=((Qubit)[] => Unit is Adj + Ctl) + param: callable_id=, path=[1], ty=((Qubit)[] => Unit is Adj + Ctl) param: callable_id=, path=[0], ty=((Int, (Qubit)[]) => Unit is Adj + Ctl) - param: callable_id=, path=[1], ty=((Qubit)[] => Unit is Adj + Ctl) call_sites: 5 site: hof=ApplyOperationPowerCA<(Qubit)[], AdjCtl>, arg=Dynamic site: hof=ApplyOperationPowerCA<(Qubit)[], AdjCtl>, arg=Dynamic @@ -638,18 +638,18 @@ fn analysis_apply_operation_power_ca_consumer() { operation ApplyOperationPowerCA__Qubit_____AdjCtl__U_(power : Int, target : Qubit[]) : Unit is Adj + Ctl { body ... { { - let _range_id_48030 : Range = 1..AbsI(power); - mutable _index_id_48033 : Int = _range_id_48030::Start; - let _step_id_48038 : Int = _range_id_48030::Step; - let _end_id_48043 : Int = _range_id_48030::End; - while _step_id_48038 > 0 and _index_id_48033 <= _end_id_48043 or _step_id_48038 < 0 and _index_id_48033 >= _end_id_48043 { - let _ : Int = _index_id_48033; + let _range_id_48046 : Range = 1..AbsI(power); + mutable _index_id_48049 : Int = _range_id_48046::Start; + let _step_id_48054 : Int = _range_id_48046::Step; + let _end_id_48059 : Int = _range_id_48046::End; + while _step_id_48054 > 0 and _index_id_48049 <= _end_id_48059 or _step_id_48054 < 0 and _index_id_48049 >= _end_id_48059 { + let _ : Int = _index_id_48049; if power >= 0 { U(target) } else { Adjoint U(target) }; - _index_id_48033 += _step_id_48038; + _index_id_48049 += _step_id_48054; } } @@ -659,18 +659,18 @@ fn analysis_apply_operation_power_ca_consumer() { { let _range : Range = 1..AbsI(power); { - let _range_id_48073 : Range = _range::Start + _range::End - _range::Start / _range::Step * _range::Step..-_range::Step.._range::Start; - mutable _index_id_48076 : Int = _range_id_48073::Start; - let _step_id_48081 : Int = _range_id_48073::Step; - let _end_id_48086 : Int = _range_id_48073::End; - while _step_id_48081 > 0 and _index_id_48076 <= _end_id_48086 or _step_id_48081 < 0 and _index_id_48076 >= _end_id_48086 { - let _ : Int = _index_id_48076; + let _range_id_48089 : Range = _range::Start + _range::End - _range::Start / _range::Step * _range::Step..-_range::Step.._range::Start; + mutable _index_id_48092 : Int = _range_id_48089::Start; + let _step_id_48097 : Int = _range_id_48089::Step; + let _end_id_48102 : Int = _range_id_48089::End; + while _step_id_48097 > 0 and _index_id_48092 <= _end_id_48102 or _step_id_48097 < 0 and _index_id_48092 >= _end_id_48102 { + let _ : Int = _index_id_48092; if power >= 0 { Adjoint U(target) } else { U(target) }; - _index_id_48076 += _step_id_48081; + _index_id_48092 += _step_id_48097; } } @@ -680,18 +680,18 @@ fn analysis_apply_operation_power_ca_consumer() { } controlled (ctls, ...) { { - let _range_id_48116 : Range = 1..AbsI(power); - mutable _index_id_48119 : Int = _range_id_48116::Start; - let _step_id_48124 : Int = _range_id_48116::Step; - let _end_id_48129 : Int = _range_id_48116::End; - while _step_id_48124 > 0 and _index_id_48119 <= _end_id_48129 or _step_id_48124 < 0 and _index_id_48119 >= _end_id_48129 { - let _ : Int = _index_id_48119; + let _range_id_48132 : Range = 1..AbsI(power); + mutable _index_id_48135 : Int = _range_id_48132::Start; + let _step_id_48140 : Int = _range_id_48132::Step; + let _end_id_48145 : Int = _range_id_48132::End; + while _step_id_48140 > 0 and _index_id_48135 <= _end_id_48145 or _step_id_48140 < 0 and _index_id_48135 >= _end_id_48145 { + let _ : Int = _index_id_48135; if power >= 0 { Controlled U(ctls, target) } else { Controlled Adjoint U(ctls, target) }; - _index_id_48119 += _step_id_48124; + _index_id_48135 += _step_id_48140; } } @@ -701,18 +701,18 @@ fn analysis_apply_operation_power_ca_consumer() { { let _range : Range = 1..AbsI(power); { - let _range_id_48159 : Range = _range::Start + _range::End - _range::Start / _range::Step * _range::Step..-_range::Step.._range::Start; - mutable _index_id_48162 : Int = _range_id_48159::Start; - let _step_id_48167 : Int = _range_id_48159::Step; - let _end_id_48172 : Int = _range_id_48159::End; - while _step_id_48167 > 0 and _index_id_48162 <= _end_id_48172 or _step_id_48167 < 0 and _index_id_48162 >= _end_id_48172 { - let _ : Int = _index_id_48162; + let _range_id_48175 : Range = _range::Start + _range::End - _range::Start / _range::Step * _range::Step..-_range::Step.._range::Start; + mutable _index_id_48178 : Int = _range_id_48175::Start; + let _step_id_48183 : Int = _range_id_48175::Step; + let _end_id_48188 : Int = _range_id_48175::End; + while _step_id_48183 > 0 and _index_id_48178 <= _end_id_48188 or _step_id_48183 < 0 and _index_id_48178 >= _end_id_48188 { + let _ : Int = _index_id_48178; if power >= 0 { Controlled Adjoint U(ctls, target) } else { Controlled U(ctls, target) }; - _index_id_48162 += _step_id_48167; + _index_id_48178 += _step_id_48183; } } @@ -780,7 +780,7 @@ fn analysis_bernstein_vazirani_sample_shape() { adaptive_qirgen_capabilities(), &expect![[r#" callable_params: 2 - param: callable_id=, path=[0], ty=(Qubit => Unit is Adj + Ctl) + param: callable_id=, path=[0], ty=(Qubit => Unit is Adj + Ctl) param: callable_id=, path=[0], ty=(((Qubit)[], Qubit) => Unit) call_sites: 3 site: hof=BernsteinVazirani, arg=Closure(target=5, Body) @@ -1030,13 +1030,13 @@ fn analysis_bernstein_vazirani_sample_shape() { operation ApplyToEachA_Qubit__AdjCtl__H_(register : Qubit[]) : Unit is Adj { body ... { { - let _array_id_46247 : Qubit[] = register; - let _len_id_46251 : Int = Length(_array_id_46247); - mutable _index_id_46256 : Int = 0; - while _index_id_46256 < _len_id_46251 { - let item : Qubit = _array_id_46247[_index_id_46256]; + let _array_id_46263 : Qubit[] = register; + let _len_id_46267 : Int = Length(_array_id_46263); + mutable _index_id_46272 : Int = 0; + while _index_id_46272 < _len_id_46267 { + let item : Qubit = _array_id_46263[_index_id_46272]; H(item); - _index_id_46256 += 1; + _index_id_46272 += 1; } } @@ -1046,15 +1046,15 @@ fn analysis_bernstein_vazirani_sample_shape() { { let _array : Qubit[] = register; { - let _range_id_46275 : Range = Length(_array) - 1..-1..0; - mutable _index_id_46278 : Int = _range_id_46275::Start; - let _step_id_46283 : Int = _range_id_46275::Step; - let _end_id_46288 : Int = _range_id_46275::End; - while _step_id_46283 > 0 and _index_id_46278 <= _end_id_46288 or _step_id_46283 < 0 and _index_id_46278 >= _end_id_46288 { - let _index : Int = _index_id_46278; + let _range_id_46291 : Range = Length(_array) - 1..-1..0; + mutable _index_id_46294 : Int = _range_id_46291::Start; + let _step_id_46299 : Int = _range_id_46291::Step; + let _end_id_46304 : Int = _range_id_46291::End; + while _step_id_46299 > 0 and _index_id_46294 <= _end_id_46304 or _step_id_46299 < 0 and _index_id_46294 >= _end_id_46304 { + let _index : Int = _index_id_46294; let item : Qubit = _array[_index]; Adjoint H(item); - _index_id_46278 += _step_id_46283; + _index_id_46294 += _step_id_46299; } } @@ -1066,13 +1066,13 @@ fn analysis_bernstein_vazirani_sample_shape() { operation ApplyToEachA_Qubit__AdjCtl__H_(register : Qubit[]) : Unit is Adj { body ... { { - let _array_id_46247 : Qubit[] = register; - let _len_id_46251 : Int = Length(_array_id_46247); - mutable _index_id_46256 : Int = 0; - while _index_id_46256 < _len_id_46251 { - let item : Qubit = _array_id_46247[_index_id_46256]; + let _array_id_46263 : Qubit[] = register; + let _len_id_46267 : Int = Length(_array_id_46263); + mutable _index_id_46272 : Int = 0; + while _index_id_46272 < _len_id_46267 { + let item : Qubit = _array_id_46263[_index_id_46272]; H(item); - _index_id_46256 += 1; + _index_id_46272 += 1; } } @@ -1082,15 +1082,15 @@ fn analysis_bernstein_vazirani_sample_shape() { { let _array : Qubit[] = register; { - let _range_id_46275 : Range = Length(_array) - 1..-1..0; - mutable _index_id_46278 : Int = _range_id_46275::Start; - let _step_id_46283 : Int = _range_id_46275::Step; - let _end_id_46288 : Int = _range_id_46275::End; - while _step_id_46283 > 0 and _index_id_46278 <= _end_id_46288 or _step_id_46283 < 0 and _index_id_46278 >= _end_id_46288 { - let _index : Int = _index_id_46278; + let _range_id_46291 : Range = Length(_array) - 1..-1..0; + mutable _index_id_46294 : Int = _range_id_46291::Start; + let _step_id_46299 : Int = _range_id_46291::Step; + let _end_id_46304 : Int = _range_id_46291::End; + while _step_id_46299 > 0 and _index_id_46294 <= _end_id_46304 or _step_id_46299 < 0 and _index_id_46294 >= _end_id_46304 { + let _index : Int = _index_id_46294; let item : Qubit = _array[_index]; Adjoint H(item); - _index_id_46278 += _step_id_46283; + _index_id_46294 += _step_id_46299; } } @@ -1166,7 +1166,7 @@ fn analysis_deutsch_jozsa_sample_shape() { adaptive_qirgen_capabilities(), &expect![[r#" callable_params: 2 - param: callable_id=, path=[1], ty=(Qubit => Unit is Adj + Ctl) + param: callable_id=, path=[1], ty=(Qubit => Unit is Adj + Ctl) param: callable_id=, path=[0], ty=(((Qubit)[], Qubit) => Unit) call_sites: 6 site: hof=ApplyControlledOnInt, arg=Global(X, Body) @@ -1965,13 +1965,13 @@ fn full_pipeline_handles_stdlib_apply_to_each() { } operation ApplyToEach_Qubit__AdjCtl__H_(register : Qubit[]) : Unit { { - let _array_id_46209 : Qubit[] = register; - let _len_id_46213 : Int = Length(_array_id_46209); - mutable _index_id_46218 : Int = 0; - while _index_id_46218 < _len_id_46213 { - let item : Qubit = _array_id_46209[_index_id_46218]; + let _array_id_46225 : Qubit[] = register; + let _len_id_46229 : Int = Length(_array_id_46225); + mutable _index_id_46234 : Int = 0; + while _index_id_46234 < _len_id_46229 { + let item : Qubit = _array_id_46225[_index_id_46234]; H(item); - _index_id_46218 += 1; + _index_id_46234 += 1; } } @@ -2013,13 +2013,13 @@ fn full_pipeline_handles_stdlib_apply_to_each_with_custom_intrinsic() { } operation ApplyToEach_Qubit__AdjCtl__SX_(register : Qubit[]) : Unit { { - let _array_id_46209 : Qubit[] = register; - let _len_id_46213 : Int = Length(_array_id_46209); - mutable _index_id_46218 : Int = 0; - while _index_id_46218 < _len_id_46213 { - let item : Qubit = _array_id_46209[_index_id_46218]; + let _array_id_46225 : Qubit[] = register; + let _len_id_46229 : Int = Length(_array_id_46225); + mutable _index_id_46234 : Int = 0; + while _index_id_46234 < _len_id_46229 { + let item : Qubit = _array_id_46225[_index_id_46234]; SX(item); - _index_id_46218 += 1; + _index_id_46234 += 1; } } @@ -2061,13 +2061,13 @@ fn apply_to_each_body_callable_defunctionalizes() { } operation ApplyToEach_Qubit__AdjCtl__H_(register : Qubit[]) : Unit { { - let _array_id_46209 : Qubit[] = register; - let _len_id_46213 : Int = Length(_array_id_46209); - mutable _index_id_46218 : Int = 0; - while _index_id_46218 < _len_id_46213 { - let item : Qubit = _array_id_46209[_index_id_46218]; + let _array_id_46225 : Qubit[] = register; + let _len_id_46229 : Int = Length(_array_id_46225); + mutable _index_id_46234 : Int = 0; + while _index_id_46234 < _len_id_46229 { + let item : Qubit = _array_id_46225[_index_id_46234]; H(item); - _index_id_46218 += 1; + _index_id_46234 += 1; } } @@ -2113,13 +2113,13 @@ fn apply_to_each_a_adjoint_callable_defunctionalizes() { operation ApplyToEachA_Qubit__AdjCtl__S_(register : Qubit[]) : Unit is Adj { body ... { { - let _array_id_46237 : Qubit[] = register; - let _len_id_46241 : Int = Length(_array_id_46237); - mutable _index_id_46246 : Int = 0; - while _index_id_46246 < _len_id_46241 { - let item : Qubit = _array_id_46237[_index_id_46246]; + let _array_id_46253 : Qubit[] = register; + let _len_id_46257 : Int = Length(_array_id_46253); + mutable _index_id_46262 : Int = 0; + while _index_id_46262 < _len_id_46257 { + let item : Qubit = _array_id_46253[_index_id_46262]; S(item); - _index_id_46246 += 1; + _index_id_46262 += 1; } } @@ -2129,15 +2129,15 @@ fn apply_to_each_a_adjoint_callable_defunctionalizes() { { let _array : Qubit[] = register; { - let _range_id_46265 : Range = Length(_array) - 1..-1..0; - mutable _index_id_46268 : Int = _range_id_46265::Start; - let _step_id_46273 : Int = _range_id_46265::Step; - let _end_id_46278 : Int = _range_id_46265::End; - while _step_id_46273 > 0 and _index_id_46268 <= _end_id_46278 or _step_id_46273 < 0 and _index_id_46268 >= _end_id_46278 { - let _index : Int = _index_id_46268; + let _range_id_46281 : Range = Length(_array) - 1..-1..0; + mutable _index_id_46284 : Int = _range_id_46281::Start; + let _step_id_46289 : Int = _range_id_46281::Step; + let _end_id_46294 : Int = _range_id_46281::End; + while _step_id_46289 > 0 and _index_id_46284 <= _end_id_46294 or _step_id_46289 < 0 and _index_id_46284 >= _end_id_46294 { + let _index : Int = _index_id_46284; let item : Qubit = _array[_index]; Adjoint S(item); - _index_id_46268 += _step_id_46273; + _index_id_46284 += _step_id_46289; } } @@ -2189,13 +2189,13 @@ fn apply_to_each_c_controlled_callable_defunctionalizes() { operation ApplyToEachC_Qubit__AdjCtl__X_(register : Qubit[]) : Unit is Ctl { body ... { { - let _array_id_46308 : Qubit[] = register; - let _len_id_46312 : Int = Length(_array_id_46308); - mutable _index_id_46317 : Int = 0; - while _index_id_46317 < _len_id_46312 { - let item : Qubit = _array_id_46308[_index_id_46317]; + let _array_id_46324 : Qubit[] = register; + let _len_id_46328 : Int = Length(_array_id_46324); + mutable _index_id_46333 : Int = 0; + while _index_id_46333 < _len_id_46328 { + let item : Qubit = _array_id_46324[_index_id_46333]; X(item); - _index_id_46317 += 1; + _index_id_46333 += 1; } } @@ -2203,13 +2203,13 @@ fn apply_to_each_c_controlled_callable_defunctionalizes() { } controlled (ctls, ...) { { - let _array_id_46336 : Qubit[] = register; - let _len_id_46340 : Int = Length(_array_id_46336); - mutable _index_id_46345 : Int = 0; - while _index_id_46345 < _len_id_46340 { - let item : Qubit = _array_id_46336[_index_id_46345]; + let _array_id_46352 : Qubit[] = register; + let _len_id_46356 : Int = Length(_array_id_46352); + mutable _index_id_46361 : Int = 0; + while _index_id_46361 < _len_id_46356 { + let item : Qubit = _array_id_46352[_index_id_46361]; Controlled X(ctls, item); - _index_id_46345 += 1; + _index_id_46361 += 1; } } @@ -2253,13 +2253,13 @@ fn apply_to_each_ca_callable_defunctionalizes() { operation ApplyToEachCA_Qubit__AdjCtl__S_(register : Qubit[]) : Unit is Adj + Ctl { body ... { { - let _array_id_46364 : Qubit[] = register; - let _len_id_46368 : Int = Length(_array_id_46364); - mutable _index_id_46373 : Int = 0; - while _index_id_46373 < _len_id_46368 { - let item : Qubit = _array_id_46364[_index_id_46373]; + let _array_id_46380 : Qubit[] = register; + let _len_id_46384 : Int = Length(_array_id_46380); + mutable _index_id_46389 : Int = 0; + while _index_id_46389 < _len_id_46384 { + let item : Qubit = _array_id_46380[_index_id_46389]; S(item); - _index_id_46373 += 1; + _index_id_46389 += 1; } } @@ -2269,15 +2269,15 @@ fn apply_to_each_ca_callable_defunctionalizes() { { let _array : Qubit[] = register; { - let _range_id_46392 : Range = Length(_array) - 1..-1..0; - mutable _index_id_46395 : Int = _range_id_46392::Start; - let _step_id_46400 : Int = _range_id_46392::Step; - let _end_id_46405 : Int = _range_id_46392::End; - while _step_id_46400 > 0 and _index_id_46395 <= _end_id_46405 or _step_id_46400 < 0 and _index_id_46395 >= _end_id_46405 { - let _index : Int = _index_id_46395; + let _range_id_46408 : Range = Length(_array) - 1..-1..0; + mutable _index_id_46411 : Int = _range_id_46408::Start; + let _step_id_46416 : Int = _range_id_46408::Step; + let _end_id_46421 : Int = _range_id_46408::End; + while _step_id_46416 > 0 and _index_id_46411 <= _end_id_46421 or _step_id_46416 < 0 and _index_id_46411 >= _end_id_46421 { + let _index : Int = _index_id_46411; let item : Qubit = _array[_index]; Adjoint S(item); - _index_id_46395 += _step_id_46400; + _index_id_46411 += _step_id_46416; } } @@ -2287,13 +2287,13 @@ fn apply_to_each_ca_callable_defunctionalizes() { } controlled (ctls, ...) { { - let _array_id_46435 : Qubit[] = register; - let _len_id_46439 : Int = Length(_array_id_46435); - mutable _index_id_46444 : Int = 0; - while _index_id_46444 < _len_id_46439 { - let item : Qubit = _array_id_46435[_index_id_46444]; + let _array_id_46451 : Qubit[] = register; + let _len_id_46455 : Int = Length(_array_id_46451); + mutable _index_id_46460 : Int = 0; + while _index_id_46460 < _len_id_46455 { + let item : Qubit = _array_id_46451[_index_id_46460]; Controlled S(ctls, item); - _index_id_46444 += 1; + _index_id_46460 += 1; } } @@ -2303,15 +2303,15 @@ fn apply_to_each_ca_callable_defunctionalizes() { { let _array : Qubit[] = register; { - let _range_id_46463 : Range = Length(_array) - 1..-1..0; - mutable _index_id_46466 : Int = _range_id_46463::Start; - let _step_id_46471 : Int = _range_id_46463::Step; - let _end_id_46476 : Int = _range_id_46463::End; - while _step_id_46471 > 0 and _index_id_46466 <= _end_id_46476 or _step_id_46471 < 0 and _index_id_46466 >= _end_id_46476 { - let _index : Int = _index_id_46466; + let _range_id_46479 : Range = Length(_array) - 1..-1..0; + mutable _index_id_46482 : Int = _range_id_46479::Start; + let _step_id_46487 : Int = _range_id_46479::Step; + let _end_id_46492 : Int = _range_id_46479::End; + while _step_id_46487 > 0 and _index_id_46482 <= _end_id_46492 or _step_id_46487 < 0 and _index_id_46482 >= _end_id_46492 { + let _index : Int = _index_id_46482; let item : Qubit = _array[_index]; Controlled Adjoint S(ctls, item); - _index_id_46466 += _step_id_46471; + _index_id_46482 += _step_id_46487; } } @@ -2365,13 +2365,13 @@ fn cross_package_apply_to_each_closure_arg_defunctionalizes() { } operation ApplyToEach_Qubit__Empty__closure_(register : Qubit[], __capture_0 : Double) : Unit { { - let _array_id_46209 : Qubit[] = register; - let _len_id_46213 : Int = Length(_array_id_46209); - mutable _index_id_46218 : Int = 0; - while _index_id_46218 < _len_id_46213 { - let item : Qubit = _array_id_46209[_index_id_46218]; + let _array_id_46225 : Qubit[] = register; + let _len_id_46229 : Int = Length(_array_id_46225); + mutable _index_id_46234 : Int = 0; + while _index_id_46234 < _len_id_46229 { + let item : Qubit = _array_id_46225[_index_id_46234]; _lambda_2(__capture_0, item); - _index_id_46218 += 1; + _index_id_46234 += 1; } } @@ -2413,13 +2413,13 @@ fn cross_package_apply_to_each_adjoint_arg_defunctionalizes() { } operation ApplyToEach_Qubit__AdjCtl__Adj_S_(register : Qubit[]) : Unit { { - let _array_id_46209 : Qubit[] = register; - let _len_id_46213 : Int = Length(_array_id_46209); - mutable _index_id_46218 : Int = 0; - while _index_id_46218 < _len_id_46213 { - let item : Qubit = _array_id_46209[_index_id_46218]; + let _array_id_46225 : Qubit[] = register; + let _len_id_46229 : Int = Length(_array_id_46225); + mutable _index_id_46234 : Int = 0; + while _index_id_46234 < _len_id_46229 { + let item : Qubit = _array_id_46225[_index_id_46234]; Adjoint S(item); - _index_id_46218 += 1; + _index_id_46234 += 1; } } @@ -2462,13 +2462,13 @@ fn adjoint_cross_package_apply_to_each_ca_defunctionalizes() { operation ApplyToEachCA_Qubit__AdjCtl__S_(register : Qubit[]) : Unit is Adj + Ctl { body ... { { - let _array_id_46364 : Qubit[] = register; - let _len_id_46368 : Int = Length(_array_id_46364); - mutable _index_id_46373 : Int = 0; - while _index_id_46373 < _len_id_46368 { - let item : Qubit = _array_id_46364[_index_id_46373]; + let _array_id_46380 : Qubit[] = register; + let _len_id_46384 : Int = Length(_array_id_46380); + mutable _index_id_46389 : Int = 0; + while _index_id_46389 < _len_id_46384 { + let item : Qubit = _array_id_46380[_index_id_46389]; S(item); - _index_id_46373 += 1; + _index_id_46389 += 1; } } @@ -2478,15 +2478,15 @@ fn adjoint_cross_package_apply_to_each_ca_defunctionalizes() { { let _array : Qubit[] = register; { - let _range_id_46392 : Range = Length(_array) - 1..-1..0; - mutable _index_id_46395 : Int = _range_id_46392::Start; - let _step_id_46400 : Int = _range_id_46392::Step; - let _end_id_46405 : Int = _range_id_46392::End; - while _step_id_46400 > 0 and _index_id_46395 <= _end_id_46405 or _step_id_46400 < 0 and _index_id_46395 >= _end_id_46405 { - let _index : Int = _index_id_46395; + let _range_id_46408 : Range = Length(_array) - 1..-1..0; + mutable _index_id_46411 : Int = _range_id_46408::Start; + let _step_id_46416 : Int = _range_id_46408::Step; + let _end_id_46421 : Int = _range_id_46408::End; + while _step_id_46416 > 0 and _index_id_46411 <= _end_id_46421 or _step_id_46416 < 0 and _index_id_46411 >= _end_id_46421 { + let _index : Int = _index_id_46411; let item : Qubit = _array[_index]; Adjoint S(item); - _index_id_46395 += _step_id_46400; + _index_id_46411 += _step_id_46416; } } @@ -2496,13 +2496,13 @@ fn adjoint_cross_package_apply_to_each_ca_defunctionalizes() { } controlled (ctls, ...) { { - let _array_id_46435 : Qubit[] = register; - let _len_id_46439 : Int = Length(_array_id_46435); - mutable _index_id_46444 : Int = 0; - while _index_id_46444 < _len_id_46439 { - let item : Qubit = _array_id_46435[_index_id_46444]; + let _array_id_46451 : Qubit[] = register; + let _len_id_46455 : Int = Length(_array_id_46451); + mutable _index_id_46460 : Int = 0; + while _index_id_46460 < _len_id_46455 { + let item : Qubit = _array_id_46451[_index_id_46460]; Controlled S(ctls, item); - _index_id_46444 += 1; + _index_id_46460 += 1; } } @@ -2512,15 +2512,15 @@ fn adjoint_cross_package_apply_to_each_ca_defunctionalizes() { { let _array : Qubit[] = register; { - let _range_id_46463 : Range = Length(_array) - 1..-1..0; - mutable _index_id_46466 : Int = _range_id_46463::Start; - let _step_id_46471 : Int = _range_id_46463::Step; - let _end_id_46476 : Int = _range_id_46463::End; - while _step_id_46471 > 0 and _index_id_46466 <= _end_id_46476 or _step_id_46471 < 0 and _index_id_46466 >= _end_id_46476 { - let _index : Int = _index_id_46466; + let _range_id_46479 : Range = Length(_array) - 1..-1..0; + mutable _index_id_46482 : Int = _range_id_46479::Start; + let _step_id_46487 : Int = _range_id_46479::Step; + let _end_id_46492 : Int = _range_id_46479::End; + while _step_id_46487 > 0 and _index_id_46482 <= _end_id_46492 or _step_id_46487 < 0 and _index_id_46482 >= _end_id_46492 { + let _index : Int = _index_id_46482; let item : Qubit = _array[_index]; Controlled Adjoint S(ctls, item); - _index_id_46466 += _step_id_46471; + _index_id_46482 += _step_id_46487; } } @@ -2638,13 +2638,13 @@ fn controlled_apply_to_each_ca_keeps_body_callable_static() { operation ApplyToEachCA_Qubit__AdjCtl__X_(register : Qubit[]) : Unit is Adj + Ctl { body ... { { - let _array_id_46364 : Qubit[] = register; - let _len_id_46368 : Int = Length(_array_id_46364); - mutable _index_id_46373 : Int = 0; - while _index_id_46373 < _len_id_46368 { - let item : Qubit = _array_id_46364[_index_id_46373]; + let _array_id_46380 : Qubit[] = register; + let _len_id_46384 : Int = Length(_array_id_46380); + mutable _index_id_46389 : Int = 0; + while _index_id_46389 < _len_id_46384 { + let item : Qubit = _array_id_46380[_index_id_46389]; X(item); - _index_id_46373 += 1; + _index_id_46389 += 1; } } @@ -2654,15 +2654,15 @@ fn controlled_apply_to_each_ca_keeps_body_callable_static() { { let _array : Qubit[] = register; { - let _range_id_46392 : Range = Length(_array) - 1..-1..0; - mutable _index_id_46395 : Int = _range_id_46392::Start; - let _step_id_46400 : Int = _range_id_46392::Step; - let _end_id_46405 : Int = _range_id_46392::End; - while _step_id_46400 > 0 and _index_id_46395 <= _end_id_46405 or _step_id_46400 < 0 and _index_id_46395 >= _end_id_46405 { - let _index : Int = _index_id_46395; + let _range_id_46408 : Range = Length(_array) - 1..-1..0; + mutable _index_id_46411 : Int = _range_id_46408::Start; + let _step_id_46416 : Int = _range_id_46408::Step; + let _end_id_46421 : Int = _range_id_46408::End; + while _step_id_46416 > 0 and _index_id_46411 <= _end_id_46421 or _step_id_46416 < 0 and _index_id_46411 >= _end_id_46421 { + let _index : Int = _index_id_46411; let item : Qubit = _array[_index]; Adjoint X(item); - _index_id_46395 += _step_id_46400; + _index_id_46411 += _step_id_46416; } } @@ -2672,13 +2672,13 @@ fn controlled_apply_to_each_ca_keeps_body_callable_static() { } controlled (ctls, ...) { { - let _array_id_46435 : Qubit[] = register; - let _len_id_46439 : Int = Length(_array_id_46435); - mutable _index_id_46444 : Int = 0; - while _index_id_46444 < _len_id_46439 { - let item : Qubit = _array_id_46435[_index_id_46444]; + let _array_id_46451 : Qubit[] = register; + let _len_id_46455 : Int = Length(_array_id_46451); + mutable _index_id_46460 : Int = 0; + while _index_id_46460 < _len_id_46455 { + let item : Qubit = _array_id_46451[_index_id_46460]; Controlled X(ctls, item); - _index_id_46444 += 1; + _index_id_46460 += 1; } } @@ -2688,15 +2688,15 @@ fn controlled_apply_to_each_ca_keeps_body_callable_static() { { let _array : Qubit[] = register; { - let _range_id_46463 : Range = Length(_array) - 1..-1..0; - mutable _index_id_46466 : Int = _range_id_46463::Start; - let _step_id_46471 : Int = _range_id_46463::Step; - let _end_id_46476 : Int = _range_id_46463::End; - while _step_id_46471 > 0 and _index_id_46466 <= _end_id_46476 or _step_id_46471 < 0 and _index_id_46466 >= _end_id_46476 { - let _index : Int = _index_id_46466; + let _range_id_46479 : Range = Length(_array) - 1..-1..0; + mutable _index_id_46482 : Int = _range_id_46479::Start; + let _step_id_46487 : Int = _range_id_46479::Step; + let _end_id_46492 : Int = _range_id_46479::End; + while _step_id_46487 > 0 and _index_id_46482 <= _end_id_46492 or _step_id_46487 < 0 and _index_id_46482 >= _end_id_46492 { + let _index : Int = _index_id_46482; let item : Qubit = _array[_index]; Controlled Adjoint X(ctls, item); - _index_id_46466 += _step_id_46471; + _index_id_46482 += _step_id_46487; } } @@ -2708,13 +2708,13 @@ fn controlled_apply_to_each_ca_keeps_body_callable_static() { operation ApplyToEachCA_Qubit__AdjCtl__H_(register : Qubit[]) : Unit is Adj + Ctl { body ... { { - let _array_id_46364 : Qubit[] = register; - let _len_id_46368 : Int = Length(_array_id_46364); - mutable _index_id_46373 : Int = 0; - while _index_id_46373 < _len_id_46368 { - let item : Qubit = _array_id_46364[_index_id_46373]; + let _array_id_46380 : Qubit[] = register; + let _len_id_46384 : Int = Length(_array_id_46380); + mutable _index_id_46389 : Int = 0; + while _index_id_46389 < _len_id_46384 { + let item : Qubit = _array_id_46380[_index_id_46389]; H(item); - _index_id_46373 += 1; + _index_id_46389 += 1; } } @@ -2724,15 +2724,15 @@ fn controlled_apply_to_each_ca_keeps_body_callable_static() { { let _array : Qubit[] = register; { - let _range_id_46392 : Range = Length(_array) - 1..-1..0; - mutable _index_id_46395 : Int = _range_id_46392::Start; - let _step_id_46400 : Int = _range_id_46392::Step; - let _end_id_46405 : Int = _range_id_46392::End; - while _step_id_46400 > 0 and _index_id_46395 <= _end_id_46405 or _step_id_46400 < 0 and _index_id_46395 >= _end_id_46405 { - let _index : Int = _index_id_46395; + let _range_id_46408 : Range = Length(_array) - 1..-1..0; + mutable _index_id_46411 : Int = _range_id_46408::Start; + let _step_id_46416 : Int = _range_id_46408::Step; + let _end_id_46421 : Int = _range_id_46408::End; + while _step_id_46416 > 0 and _index_id_46411 <= _end_id_46421 or _step_id_46416 < 0 and _index_id_46411 >= _end_id_46421 { + let _index : Int = _index_id_46411; let item : Qubit = _array[_index]; Adjoint H(item); - _index_id_46395 += _step_id_46400; + _index_id_46411 += _step_id_46416; } } @@ -2742,13 +2742,13 @@ fn controlled_apply_to_each_ca_keeps_body_callable_static() { } controlled (ctls, ...) { { - let _array_id_46435 : Qubit[] = register; - let _len_id_46439 : Int = Length(_array_id_46435); - mutable _index_id_46444 : Int = 0; - while _index_id_46444 < _len_id_46439 { - let item : Qubit = _array_id_46435[_index_id_46444]; + let _array_id_46451 : Qubit[] = register; + let _len_id_46455 : Int = Length(_array_id_46451); + mutable _index_id_46460 : Int = 0; + while _index_id_46460 < _len_id_46455 { + let item : Qubit = _array_id_46451[_index_id_46460]; Controlled H(ctls, item); - _index_id_46444 += 1; + _index_id_46460 += 1; } } @@ -2758,15 +2758,15 @@ fn controlled_apply_to_each_ca_keeps_body_callable_static() { { let _array : Qubit[] = register; { - let _range_id_46463 : Range = Length(_array) - 1..-1..0; - mutable _index_id_46466 : Int = _range_id_46463::Start; - let _step_id_46471 : Int = _range_id_46463::Step; - let _end_id_46476 : Int = _range_id_46463::End; - while _step_id_46471 > 0 and _index_id_46466 <= _end_id_46476 or _step_id_46471 < 0 and _index_id_46466 >= _end_id_46476 { - let _index : Int = _index_id_46466; + let _range_id_46479 : Range = Length(_array) - 1..-1..0; + mutable _index_id_46482 : Int = _range_id_46479::Start; + let _step_id_46487 : Int = _range_id_46479::Step; + let _end_id_46492 : Int = _range_id_46479::End; + while _step_id_46487 > 0 and _index_id_46482 <= _end_id_46492 or _step_id_46487 < 0 and _index_id_46482 >= _end_id_46492 { + let _index : Int = _index_id_46482; let item : Qubit = _array[_index]; Controlled Adjoint H(ctls, item); - _index_id_46466 += _step_id_46471; + _index_id_46482 += _step_id_46487; } } @@ -2818,13 +2818,13 @@ fn cross_package_mapped_defunctionalizes() { function Mapped_Int__Int__Double_(array : Int[]) : Int[] { mutable mapped : Int[] = []; { - let _array_id_45723 : Int[] = array; - let _len_id_45727 : Int = Length(_array_id_45723); - mutable _index_id_45732 : Int = 0; - while _index_id_45732 < _len_id_45727 { - let element : Int = _array_id_45723[_index_id_45732]; + let _array_id_45739 : Int[] = array; + let _len_id_45743 : Int = Length(_array_id_45739); + mutable _index_id_45748 : Int = 0; + while _index_id_45748 < _len_id_45743 { + let element : Int = _array_id_45739[_index_id_45748]; mapped += [Double(element)]; - _index_id_45732 += 1; + _index_id_45748 += 1; } } @@ -2868,13 +2868,13 @@ fn cross_package_for_each_defunctionalizes() { operation ForEach_Qubit__Unit__AdjCtl__H_(array : Qubit[]) : Unit[] { mutable output : Unit[] = []; { - let _array_id_45495 : Qubit[] = array; - let _len_id_45499 : Int = Length(_array_id_45495); - mutable _index_id_45504 : Int = 0; - while _index_id_45504 < _len_id_45499 { - let element : Qubit = _array_id_45495[_index_id_45504]; + let _array_id_45511 : Qubit[] = array; + let _len_id_45515 : Int = Length(_array_id_45511); + mutable _index_id_45520 : Int = 0; + while _index_id_45520 < _len_id_45515 { + let element : Qubit = _array_id_45511[_index_id_45520]; output += [H(element)]; - _index_id_45504 += 1; + _index_id_45520 += 1; } } @@ -2929,13 +2929,13 @@ fn stdlib_hof_specialized_with_concrete_callable() { function Mapped_Int__Int__closure_(array : Int[]) : Int[] { mutable mapped : Int[] = []; { - let _array_id_45723 : Int[] = array; - let _len_id_45727 : Int = Length(_array_id_45723); - mutable _index_id_45732 : Int = 0; - while _index_id_45732 < _len_id_45727 { - let element : Int = _array_id_45723[_index_id_45732]; + let _array_id_45739 : Int[] = array; + let _len_id_45743 : Int = Length(_array_id_45739); + mutable _index_id_45748 : Int = 0; + while _index_id_45748 < _len_id_45743 { + let element : Int = _array_id_45739[_index_id_45748]; mapped += [_lambda_2(element, )]; - _index_id_45732 += 1; + _index_id_45748 += 1; } } @@ -3013,13 +3013,13 @@ fn lambda_expression_sample_shape_has_no_defunctionalization_errors() { function Fold_Int__Int__closure_(state : Int, array : Int[]) : Int { mutable current : Int = state; { - let _array_id_45467 : Int[] = array; - let _len_id_45471 : Int = Length(_array_id_45467); - mutable _index_id_45476 : Int = 0; - while _index_id_45476 < _len_id_45471 { - let element : Int = _array_id_45467[_index_id_45476]; + let _array_id_45483 : Int[] = array; + let _len_id_45487 : Int = Length(_array_id_45483); + mutable _index_id_45492 : Int = 0; + while _index_id_45492 < _len_id_45487 { + let element : Int = _array_id_45483[_index_id_45492]; current = _lambda_2((current, element), ); - _index_id_45476 += 1; + _index_id_45492 += 1; } } @@ -3029,13 +3029,13 @@ fn lambda_expression_sample_shape_has_no_defunctionalization_errors() { function Mapped_Int__Int__closure_(array : Int[]) : Int[] { mutable mapped : Int[] = []; { - let _array_id_45723 : Int[] = array; - let _len_id_45727 : Int = Length(_array_id_45723); - mutable _index_id_45732 : Int = 0; - while _index_id_45732 < _len_id_45727 { - let element : Int = _array_id_45723[_index_id_45732]; + let _array_id_45739 : Int[] = array; + let _len_id_45743 : Int = Length(_array_id_45739); + mutable _index_id_45748 : Int = 0; + while _index_id_45748 < _len_id_45743 { + let element : Int = _array_id_45739[_index_id_45748]; mapped += [_lambda_4(element, )]; - _index_id_45732 += 1; + _index_id_45748 += 1; } } @@ -3151,13 +3151,13 @@ fn partial_application_sample_shape_has_no_defunctionalization_errors() { function Mapped_Int__Int__closure_(array : Int[], __capture_0 : Int) : Int[] { mutable mapped : Int[] = []; { - let _array_id_45723 : Int[] = array; - let _len_id_45727 : Int = Length(_array_id_45723); - mutable _index_id_45732 : Int = 0; - while _index_id_45732 < _len_id_45727 { - let element : Int = _array_id_45723[_index_id_45732]; + let _array_id_45739 : Int[] = array; + let _len_id_45743 : Int = Length(_array_id_45739); + mutable _index_id_45748 : Int = 0; + while _index_id_45748 < _len_id_45743 { + let element : Int = _array_id_45739[_index_id_45748]; mapped += [_lambda_8(__capture_0, element)]; - _index_id_45732 += 1; + _index_id_45748 += 1; } } diff --git a/source/compiler/qsc_fir_transforms/src/sample_pipeline_tests/grover.rs b/source/compiler/qsc_fir_transforms/src/sample_pipeline_tests/grover.rs index e93f1b6a2ae..f1fb8ab89c7 100644 --- a/source/compiler/qsc_fir_transforms/src/sample_pipeline_tests/grover.rs +++ b/source/compiler/qsc_fir_transforms/src/sample_pipeline_tests/grover.rs @@ -333,27 +333,27 @@ fn grover_sample_full_pipeline_reachable_items() { operation CollectControls(ctls : Qubit[], aux : Qubit[], adjustment : Int) : Unit is Adj { body ... { { - let _range_id_48878 : Range = 0..2..Length(ctls) - 2; - mutable _index_id_48881 : Int = _range_id_48878::Start; - let _step_id_48886 : Int = _range_id_48878::Step; - let _end_id_48891 : Int = _range_id_48878::End; - while _step_id_48886 > 0 and _index_id_48881 <= _end_id_48891 or _step_id_48886 < 0 and _index_id_48881 >= _end_id_48891 { - let i : Int = _index_id_48881; + let _range_id_48894 : Range = 0..2..Length(ctls) - 2; + mutable _index_id_48897 : Int = _range_id_48894::Start; + let _step_id_48902 : Int = _range_id_48894::Step; + let _end_id_48907 : Int = _range_id_48894::End; + while _step_id_48902 > 0 and _index_id_48897 <= _end_id_48907 or _step_id_48902 < 0 and _index_id_48897 >= _end_id_48907 { + let i : Int = _index_id_48897; CCNOT(ctls[i], ctls[i + 1], aux[i / 2]); - _index_id_48881 += _step_id_48886; + _index_id_48897 += _step_id_48902; } } { - let _range_id_48921 : Range = 0..Length(ctls) / 2 - 2 - adjustment; - mutable _index_id_48924 : Int = _range_id_48921::Start; - let _step_id_48929 : Int = _range_id_48921::Step; - let _end_id_48934 : Int = _range_id_48921::End; - while _step_id_48929 > 0 and _index_id_48924 <= _end_id_48934 or _step_id_48929 < 0 and _index_id_48924 >= _end_id_48934 { - let i : Int = _index_id_48924; + let _range_id_48937 : Range = 0..Length(ctls) / 2 - 2 - adjustment; + mutable _index_id_48940 : Int = _range_id_48937::Start; + let _step_id_48945 : Int = _range_id_48937::Step; + let _end_id_48950 : Int = _range_id_48937::End; + while _step_id_48945 > 0 and _index_id_48940 <= _end_id_48950 or _step_id_48945 < 0 and _index_id_48940 >= _end_id_48950 { + let i : Int = _index_id_48940; CCNOT(aux[i * 2], aux[i * 2 + 1], aux[i + Length(ctls) / 2]); - _index_id_48924 += _step_id_48929; + _index_id_48940 += _step_id_48945; } } @@ -363,14 +363,14 @@ fn grover_sample_full_pipeline_reachable_items() { { let _range : Range = 0..Length(ctls) / 2 - 2 - adjustment; { - let _range_id_48964 : Range = _range::Start + _range::End - _range::Start / _range::Step * _range::Step..-_range::Step.._range::Start; - mutable _index_id_48967 : Int = _range_id_48964::Start; - let _step_id_48972 : Int = _range_id_48964::Step; - let _end_id_48977 : Int = _range_id_48964::End; - while _step_id_48972 > 0 and _index_id_48967 <= _end_id_48977 or _step_id_48972 < 0 and _index_id_48967 >= _end_id_48977 { - let i : Int = _index_id_48967; + let _range_id_48980 : Range = _range::Start + _range::End - _range::Start / _range::Step * _range::Step..-_range::Step.._range::Start; + mutable _index_id_48983 : Int = _range_id_48980::Start; + let _step_id_48988 : Int = _range_id_48980::Step; + let _end_id_48993 : Int = _range_id_48980::End; + while _step_id_48988 > 0 and _index_id_48983 <= _end_id_48993 or _step_id_48988 < 0 and _index_id_48983 >= _end_id_48993 { + let i : Int = _index_id_48983; Adjoint CCNOT(aux[i * 2], aux[i * 2 + 1], aux[i + Length(ctls) / 2]); - _index_id_48967 += _step_id_48972; + _index_id_48983 += _step_id_48988; } } @@ -380,14 +380,14 @@ fn grover_sample_full_pipeline_reachable_items() { { let _range : Range = 0..2..Length(ctls) - 2; { - let _range_id_49007 : Range = _range::Start + _range::End - _range::Start / _range::Step * _range::Step..-_range::Step.._range::Start; - mutable _index_id_49010 : Int = _range_id_49007::Start; - let _step_id_49015 : Int = _range_id_49007::Step; - let _end_id_49020 : Int = _range_id_49007::End; - while _step_id_49015 > 0 and _index_id_49010 <= _end_id_49020 or _step_id_49015 < 0 and _index_id_49010 >= _end_id_49020 { - let i : Int = _index_id_49010; + let _range_id_49023 : Range = _range::Start + _range::End - _range::Start / _range::Step * _range::Step..-_range::Step.._range::Start; + mutable _index_id_49026 : Int = _range_id_49023::Start; + let _step_id_49031 : Int = _range_id_49023::Step; + let _end_id_49036 : Int = _range_id_49023::End; + while _step_id_49031 > 0 and _index_id_49026 <= _end_id_49036 or _step_id_49031 < 0 and _index_id_49026 >= _end_id_49036 { + let i : Int = _index_id_49026; Adjoint CCNOT(ctls[i], ctls[i + 1], aux[i / 2]); - _index_id_49010 += _step_id_49015; + _index_id_49026 += _step_id_49031; } } @@ -500,7 +500,7 @@ fn grover_sample_full_pipeline_reachable_items() { CCH(ctls[0], ctls[1], qubit); } else { let aux : Qubit[] = AllocateQubitArray(Length(ctls) - 1 - Length(ctls) % 2); - let _generated_ident_53981 : Unit = { + let _generated_ident_53997 : Unit = { { CollectControls(ctls, aux, 0); } @@ -521,7 +521,7 @@ fn grover_sample_full_pipeline_reachable_items() { _apply_res }; ReleaseQubitArray(aux); - _generated_ident_53981 + _generated_ident_53997 } } @@ -546,7 +546,7 @@ fn grover_sample_full_pipeline_reachable_items() { CCH(ctls[0], ctls[1], qubit); } else { let aux : Qubit[] = AllocateQubitArray(Length(ctls) - 1 - Length(ctls) % 2); - let _generated_ident_53995 : Unit = { + let _generated_ident_54011 : Unit = { { CollectControls(ctls, aux, 0); } @@ -567,7 +567,7 @@ fn grover_sample_full_pipeline_reachable_items() { _apply_res }; ReleaseQubitArray(aux); - _generated_ident_53995 + _generated_ident_54011 } } @@ -594,7 +594,7 @@ fn grover_sample_full_pipeline_reachable_items() { CRz(ctls[0], theta, qubit); } else { let aux : Qubit[] = AllocateQubitArray(Length(ctls) - 1); - let _generated_ident_54051 : Unit = { + let _generated_ident_54067 : Unit = { { CollectControls(ctls, aux, 0); AdjustForSingleControl(ctls, aux); @@ -611,7 +611,7 @@ fn grover_sample_full_pipeline_reachable_items() { _apply_res }; ReleaseQubitArray(aux); - _generated_ident_54051 + _generated_ident_54067 } } @@ -645,7 +645,7 @@ fn grover_sample_full_pipeline_reachable_items() { Controlled CS([ctls[0]], (ctls[1], qubit)); } else { let aux : Qubit[] = AllocateQubitArray(Length(ctls) - 2); - let _generated_ident_54079 : Unit = { + let _generated_ident_54095 : Unit = { { CollectControls(ctls, aux, 1 - Length(ctls) % 2); } @@ -666,7 +666,7 @@ fn grover_sample_full_pipeline_reachable_items() { _apply_res }; ReleaseQubitArray(aux); - _generated_ident_54079 + _generated_ident_54095 } } @@ -691,7 +691,7 @@ fn grover_sample_full_pipeline_reachable_items() { Controlled Adjoint CS([ctls[0]], (ctls[1], qubit)); } else { let aux : Qubit[] = AllocateQubitArray(Length(ctls) - 2); - let _generated_ident_54093 : Unit = { + let _generated_ident_54109 : Unit = { { CollectControls(ctls, aux, 1 - Length(ctls) % 2); } @@ -712,7 +712,7 @@ fn grover_sample_full_pipeline_reachable_items() { _apply_res }; ReleaseQubitArray(aux); - _generated_ident_54093 + _generated_ident_54109 } } @@ -739,7 +739,7 @@ fn grover_sample_full_pipeline_reachable_items() { CT(ctls[0], qubit); } else { let aux : Qubit[] = AllocateQubitArray(Length(ctls) - 1); - let _generated_ident_54135 : Unit = { + let _generated_ident_54151 : Unit = { { CollectControls(ctls, aux, 0); AdjustForSingleControl(ctls, aux); @@ -756,7 +756,7 @@ fn grover_sample_full_pipeline_reachable_items() { _apply_res }; ReleaseQubitArray(aux); - _generated_ident_54135 + _generated_ident_54151 } } @@ -773,7 +773,7 @@ fn grover_sample_full_pipeline_reachable_items() { Adjoint CT(ctls[0], qubit); } else { let aux : Qubit[] = AllocateQubitArray(Length(ctls) - 1); - let _generated_ident_54149 : Unit = { + let _generated_ident_54165 : Unit = { { CollectControls(ctls, aux, 0); AdjustForSingleControl(ctls, aux); @@ -790,7 +790,7 @@ fn grover_sample_full_pipeline_reachable_items() { _apply_res }; ReleaseQubitArray(aux); - _generated_ident_54149 + _generated_ident_54165 } } @@ -821,7 +821,7 @@ fn grover_sample_full_pipeline_reachable_items() { __quantum__qis__ccx__body(ctls[0], ctls[1], qubit); } else { let aux : Qubit[] = AllocateQubitArray(Length(ctls) - 2); - let _generated_ident_54163 : Unit = { + let _generated_ident_54179 : Unit = { { CollectControls(ctls, aux, 1 - Length(ctls) % 2); } @@ -842,7 +842,7 @@ fn grover_sample_full_pipeline_reachable_items() { _apply_res }; ReleaseQubitArray(aux); - _generated_ident_54163 + _generated_ident_54179 } } @@ -867,7 +867,7 @@ fn grover_sample_full_pipeline_reachable_items() { __quantum__qis__ccx__body(ctls[0], ctls[1], qubit); } else { let aux : Qubit[] = AllocateQubitArray(Length(ctls) - 2); - let _generated_ident_54177 : Unit = { + let _generated_ident_54193 : Unit = { { CollectControls(ctls, aux, 1 - Length(ctls) % 2); } @@ -888,7 +888,7 @@ fn grover_sample_full_pipeline_reachable_items() { _apply_res }; ReleaseQubitArray(aux); - _generated_ident_54177 + _generated_ident_54193 } } @@ -921,7 +921,7 @@ fn grover_sample_full_pipeline_reachable_items() { CCZ(ctls[0], ctls[1], qubit); } else { let aux : Qubit[] = AllocateQubitArray(Length(ctls) - 2); - let _generated_ident_54219 : Unit = { + let _generated_ident_54235 : Unit = { { CollectControls(ctls, aux, 1 - Length(ctls) % 2); } @@ -942,7 +942,7 @@ fn grover_sample_full_pipeline_reachable_items() { _apply_res }; ReleaseQubitArray(aux); - _generated_ident_54219 + _generated_ident_54235 } } @@ -967,7 +967,7 @@ fn grover_sample_full_pipeline_reachable_items() { CCZ(ctls[0], ctls[1], qubit); } else { let aux : Qubit[] = AllocateQubitArray(Length(ctls) - 2); - let _generated_ident_54233 : Unit = { + let _generated_ident_54249 : Unit = { { CollectControls(ctls, aux, 1 - Length(ctls) % 2); } @@ -988,7 +988,7 @@ fn grover_sample_full_pipeline_reachable_items() { _apply_res }; ReleaseQubitArray(aux); - _generated_ident_54233 + _generated_ident_54249 } } @@ -1037,13 +1037,13 @@ fn grover_sample_full_pipeline_reachable_items() { operation MResetEachZ(register : Qubit[]) : Result[] { mutable results : Result[] = []; { - let _array_id_49646 : Qubit[] = register; - let _len_id_49650 : Int = Length(_array_id_49646); - mutable _index_id_49655 : Int = 0; - while _index_id_49655 < _len_id_49650 { - let qubit : Qubit = _array_id_49646[_index_id_49655]; + let _array_id_49662 : Qubit[] = register; + let _len_id_49666 : Int = Length(_array_id_49662); + mutable _index_id_49671 : Int = 0; + while _index_id_49671 < _len_id_49666 { + let qubit : Qubit = _array_id_49662[_index_id_49671]; results += [MResetZ(qubit)]; - _index_id_49655 += 1; + _index_id_49671 += 1; } } diff --git a/source/compiler/qsc_fir_transforms/src/sample_pipeline_tests/shor.rs b/source/compiler/qsc_fir_transforms/src/sample_pipeline_tests/shor.rs index 6eccd77e20a..80bd69568e8 100644 --- a/source/compiler/qsc_fir_transforms/src/sample_pipeline_tests/shor.rs +++ b/source/compiler/qsc_fir_transforms/src/sample_pipeline_tests/shor.rs @@ -148,17 +148,17 @@ fn shor_sample_full_pipeline_reachable_items() { Fact(value >= 0, $"`value` must be non-negative."); mutable runningValue : Int = value; { - let _array_id_47710 : Qubit[] = target; - let _len_id_47714 : Int = Length(_array_id_47710); - mutable _index_id_47719 : Int = 0; - while _index_id_47719 < _len_id_47714 { - let q : Qubit = _array_id_47710[_index_id_47719]; + let _array_id_47726 : Qubit[] = target; + let _len_id_47730 : Int = Length(_array_id_47726); + mutable _index_id_47735 : Int = 0; + while _index_id_47735 < _len_id_47730 { + let q : Qubit = _array_id_47726[_index_id_47735]; if runningValue &&& 1 != 0 { X(q); } runningValue >>>= 1; - _index_id_47719 += 1; + _index_id_47735 += 1; } } @@ -169,17 +169,17 @@ fn shor_sample_full_pipeline_reachable_items() { Fact(value >= 0, $"`value` must be non-negative."); mutable runningValue : Int = value; { - let _array_id_47738 : Qubit[] = target; - let _len_id_47742 : Int = Length(_array_id_47738); - mutable _index_id_47747 : Int = 0; - while _index_id_47747 < _len_id_47742 { - let q : Qubit = _array_id_47738[_index_id_47747]; + let _array_id_47754 : Qubit[] = target; + let _len_id_47758 : Int = Length(_array_id_47754); + mutable _index_id_47763 : Int = 0; + while _index_id_47763 < _len_id_47758 { + let q : Qubit = _array_id_47754[_index_id_47763]; if runningValue &&& 1 != 0 { X(q); } runningValue >>>= 1; - _index_id_47747 += 1; + _index_id_47763 += 1; } } @@ -190,17 +190,17 @@ fn shor_sample_full_pipeline_reachable_items() { Fact(value >= 0, $"`value` must be non-negative."); mutable runningValue : Int = value; { - let _array_id_47766 : Qubit[] = target; - let _len_id_47770 : Int = Length(_array_id_47766); - mutable _index_id_47775 : Int = 0; - while _index_id_47775 < _len_id_47770 { - let q : Qubit = _array_id_47766[_index_id_47775]; + let _array_id_47782 : Qubit[] = target; + let _len_id_47786 : Int = Length(_array_id_47782); + mutable _index_id_47791 : Int = 0; + while _index_id_47791 < _len_id_47786 { + let q : Qubit = _array_id_47782[_index_id_47791]; if runningValue &&& 1 != 0 { Controlled X(ctls, q); } runningValue >>>= 1; - _index_id_47775 += 1; + _index_id_47791 += 1; } } @@ -211,17 +211,17 @@ fn shor_sample_full_pipeline_reachable_items() { Fact(value >= 0, $"`value` must be non-negative."); mutable runningValue : Int = value; { - let _array_id_47794 : Qubit[] = target; - let _len_id_47798 : Int = Length(_array_id_47794); - mutable _index_id_47803 : Int = 0; - while _index_id_47803 < _len_id_47798 { - let q : Qubit = _array_id_47794[_index_id_47803]; + let _array_id_47810 : Qubit[] = target; + let _len_id_47814 : Int = Length(_array_id_47810); + mutable _index_id_47819 : Int = 0; + while _index_id_47819 < _len_id_47814 { + let q : Qubit = _array_id_47810[_index_id_47819]; if runningValue &&& 1 != 0 { Controlled X(ctls, q); } runningValue >>>= 1; - _index_id_47803 += 1; + _index_id_47819 += 1; } } @@ -430,27 +430,27 @@ fn shor_sample_full_pipeline_reachable_items() { operation CollectControls(ctls : Qubit[], aux : Qubit[], adjustment : Int) : Unit is Adj { body ... { { - let _range_id_48878 : Range = 0..2..Length(ctls) - 2; - mutable _index_id_48881 : Int = _range_id_48878::Start; - let _step_id_48886 : Int = _range_id_48878::Step; - let _end_id_48891 : Int = _range_id_48878::End; - while _step_id_48886 > 0 and _index_id_48881 <= _end_id_48891 or _step_id_48886 < 0 and _index_id_48881 >= _end_id_48891 { - let i : Int = _index_id_48881; + let _range_id_48894 : Range = 0..2..Length(ctls) - 2; + mutable _index_id_48897 : Int = _range_id_48894::Start; + let _step_id_48902 : Int = _range_id_48894::Step; + let _end_id_48907 : Int = _range_id_48894::End; + while _step_id_48902 > 0 and _index_id_48897 <= _end_id_48907 or _step_id_48902 < 0 and _index_id_48897 >= _end_id_48907 { + let i : Int = _index_id_48897; CCNOT(ctls[i], ctls[i + 1], aux[i / 2]); - _index_id_48881 += _step_id_48886; + _index_id_48897 += _step_id_48902; } } { - let _range_id_48921 : Range = 0..Length(ctls) / 2 - 2 - adjustment; - mutable _index_id_48924 : Int = _range_id_48921::Start; - let _step_id_48929 : Int = _range_id_48921::Step; - let _end_id_48934 : Int = _range_id_48921::End; - while _step_id_48929 > 0 and _index_id_48924 <= _end_id_48934 or _step_id_48929 < 0 and _index_id_48924 >= _end_id_48934 { - let i : Int = _index_id_48924; + let _range_id_48937 : Range = 0..Length(ctls) / 2 - 2 - adjustment; + mutable _index_id_48940 : Int = _range_id_48937::Start; + let _step_id_48945 : Int = _range_id_48937::Step; + let _end_id_48950 : Int = _range_id_48937::End; + while _step_id_48945 > 0 and _index_id_48940 <= _end_id_48950 or _step_id_48945 < 0 and _index_id_48940 >= _end_id_48950 { + let i : Int = _index_id_48940; CCNOT(aux[i * 2], aux[i * 2 + 1], aux[i + Length(ctls) / 2]); - _index_id_48924 += _step_id_48929; + _index_id_48940 += _step_id_48945; } } @@ -460,14 +460,14 @@ fn shor_sample_full_pipeline_reachable_items() { { let _range : Range = 0..Length(ctls) / 2 - 2 - adjustment; { - let _range_id_48964 : Range = _range::Start + _range::End - _range::Start / _range::Step * _range::Step..-_range::Step.._range::Start; - mutable _index_id_48967 : Int = _range_id_48964::Start; - let _step_id_48972 : Int = _range_id_48964::Step; - let _end_id_48977 : Int = _range_id_48964::End; - while _step_id_48972 > 0 and _index_id_48967 <= _end_id_48977 or _step_id_48972 < 0 and _index_id_48967 >= _end_id_48977 { - let i : Int = _index_id_48967; + let _range_id_48980 : Range = _range::Start + _range::End - _range::Start / _range::Step * _range::Step..-_range::Step.._range::Start; + mutable _index_id_48983 : Int = _range_id_48980::Start; + let _step_id_48988 : Int = _range_id_48980::Step; + let _end_id_48993 : Int = _range_id_48980::End; + while _step_id_48988 > 0 and _index_id_48983 <= _end_id_48993 or _step_id_48988 < 0 and _index_id_48983 >= _end_id_48993 { + let i : Int = _index_id_48983; Adjoint CCNOT(aux[i * 2], aux[i * 2 + 1], aux[i + Length(ctls) / 2]); - _index_id_48967 += _step_id_48972; + _index_id_48983 += _step_id_48988; } } @@ -477,14 +477,14 @@ fn shor_sample_full_pipeline_reachable_items() { { let _range : Range = 0..2..Length(ctls) - 2; { - let _range_id_49007 : Range = _range::Start + _range::End - _range::Start / _range::Step * _range::Step..-_range::Step.._range::Start; - mutable _index_id_49010 : Int = _range_id_49007::Start; - let _step_id_49015 : Int = _range_id_49007::Step; - let _end_id_49020 : Int = _range_id_49007::End; - while _step_id_49015 > 0 and _index_id_49010 <= _end_id_49020 or _step_id_49015 < 0 and _index_id_49010 >= _end_id_49020 { - let i : Int = _index_id_49010; + let _range_id_49023 : Range = _range::Start + _range::End - _range::Start / _range::Step * _range::Step..-_range::Step.._range::Start; + mutable _index_id_49026 : Int = _range_id_49023::Start; + let _step_id_49031 : Int = _range_id_49023::Step; + let _end_id_49036 : Int = _range_id_49023::End; + while _step_id_49031 > 0 and _index_id_49026 <= _end_id_49036 or _step_id_49031 < 0 and _index_id_49026 >= _end_id_49036 { + let i : Int = _index_id_49026; Adjoint CCNOT(ctls[i], ctls[i + 1], aux[i / 2]); - _index_id_49010 += _step_id_49015; + _index_id_49026 += _step_id_49031; } } @@ -597,7 +597,7 @@ fn shor_sample_full_pipeline_reachable_items() { CCH(ctls[0], ctls[1], qubit); } else { let aux : Qubit[] = AllocateQubitArray(Length(ctls) - 1 - Length(ctls) % 2); - let _generated_ident_53981 : Unit = { + let _generated_ident_53997 : Unit = { { CollectControls(ctls, aux, 0); } @@ -618,7 +618,7 @@ fn shor_sample_full_pipeline_reachable_items() { _apply_res }; ReleaseQubitArray(aux); - _generated_ident_53981 + _generated_ident_53997 } } @@ -643,7 +643,7 @@ fn shor_sample_full_pipeline_reachable_items() { CCH(ctls[0], ctls[1], qubit); } else { let aux : Qubit[] = AllocateQubitArray(Length(ctls) - 1 - Length(ctls) % 2); - let _generated_ident_53995 : Unit = { + let _generated_ident_54011 : Unit = { { CollectControls(ctls, aux, 0); } @@ -664,7 +664,7 @@ fn shor_sample_full_pipeline_reachable_items() { _apply_res }; ReleaseQubitArray(aux); - _generated_ident_53995 + _generated_ident_54011 } } @@ -749,13 +749,13 @@ fn shor_sample_full_pipeline_reachable_items() { } operation ResetAll(qubits : Qubit[]) : Unit { { - let _array_id_49379 : Qubit[] = qubits; - let _len_id_49383 : Int = Length(_array_id_49379); - mutable _index_id_49388 : Int = 0; - while _index_id_49388 < _len_id_49383 { - let q : Qubit = _array_id_49379[_index_id_49388]; + let _array_id_49395 : Qubit[] = qubits; + let _len_id_49399 : Int = Length(_array_id_49395); + mutable _index_id_49404 : Int = 0; + while _index_id_49404 < _len_id_49399 { + let q : Qubit = _array_id_49395[_index_id_49404]; Reset(q); - _index_id_49388 += 1; + _index_id_49404 += 1; } } @@ -865,7 +865,7 @@ fn shor_sample_full_pipeline_reachable_items() { CRz(ctls[0], theta, qubit); } else { let aux : Qubit[] = AllocateQubitArray(Length(ctls) - 1); - let _generated_ident_54051 : Unit = { + let _generated_ident_54067 : Unit = { { CollectControls(ctls, aux, 0); AdjustForSingleControl(ctls, aux); @@ -882,7 +882,7 @@ fn shor_sample_full_pipeline_reachable_items() { _apply_res }; ReleaseQubitArray(aux); - _generated_ident_54051 + _generated_ident_54067 } } @@ -916,7 +916,7 @@ fn shor_sample_full_pipeline_reachable_items() { Controlled CS([ctls[0]], (ctls[1], qubit)); } else { let aux : Qubit[] = AllocateQubitArray(Length(ctls) - 2); - let _generated_ident_54079 : Unit = { + let _generated_ident_54095 : Unit = { { CollectControls(ctls, aux, 1 - Length(ctls) % 2); } @@ -937,7 +937,7 @@ fn shor_sample_full_pipeline_reachable_items() { _apply_res }; ReleaseQubitArray(aux); - _generated_ident_54079 + _generated_ident_54095 } } @@ -962,7 +962,7 @@ fn shor_sample_full_pipeline_reachable_items() { Controlled Adjoint CS([ctls[0]], (ctls[1], qubit)); } else { let aux : Qubit[] = AllocateQubitArray(Length(ctls) - 2); - let _generated_ident_54093 : Unit = { + let _generated_ident_54109 : Unit = { { CollectControls(ctls, aux, 1 - Length(ctls) % 2); } @@ -983,7 +983,7 @@ fn shor_sample_full_pipeline_reachable_items() { _apply_res }; ReleaseQubitArray(aux); - _generated_ident_54093 + _generated_ident_54109 } } @@ -1064,7 +1064,7 @@ fn shor_sample_full_pipeline_reachable_items() { CT(ctls[0], qubit); } else { let aux : Qubit[] = AllocateQubitArray(Length(ctls) - 1); - let _generated_ident_54135 : Unit = { + let _generated_ident_54151 : Unit = { { CollectControls(ctls, aux, 0); AdjustForSingleControl(ctls, aux); @@ -1081,7 +1081,7 @@ fn shor_sample_full_pipeline_reachable_items() { _apply_res }; ReleaseQubitArray(aux); - _generated_ident_54135 + _generated_ident_54151 } } @@ -1098,7 +1098,7 @@ fn shor_sample_full_pipeline_reachable_items() { Adjoint CT(ctls[0], qubit); } else { let aux : Qubit[] = AllocateQubitArray(Length(ctls) - 1); - let _generated_ident_54149 : Unit = { + let _generated_ident_54165 : Unit = { { CollectControls(ctls, aux, 0); AdjustForSingleControl(ctls, aux); @@ -1115,7 +1115,7 @@ fn shor_sample_full_pipeline_reachable_items() { _apply_res }; ReleaseQubitArray(aux); - _generated_ident_54149 + _generated_ident_54165 } } @@ -1146,7 +1146,7 @@ fn shor_sample_full_pipeline_reachable_items() { __quantum__qis__ccx__body(ctls[0], ctls[1], qubit); } else { let aux : Qubit[] = AllocateQubitArray(Length(ctls) - 2); - let _generated_ident_54163 : Unit = { + let _generated_ident_54179 : Unit = { { CollectControls(ctls, aux, 1 - Length(ctls) % 2); } @@ -1167,7 +1167,7 @@ fn shor_sample_full_pipeline_reachable_items() { _apply_res }; ReleaseQubitArray(aux); - _generated_ident_54163 + _generated_ident_54179 } } @@ -1192,7 +1192,7 @@ fn shor_sample_full_pipeline_reachable_items() { __quantum__qis__ccx__body(ctls[0], ctls[1], qubit); } else { let aux : Qubit[] = AllocateQubitArray(Length(ctls) - 2); - let _generated_ident_54177 : Unit = { + let _generated_ident_54193 : Unit = { { CollectControls(ctls, aux, 1 - Length(ctls) % 2); } @@ -1213,7 +1213,7 @@ fn shor_sample_full_pipeline_reachable_items() { _apply_res }; ReleaseQubitArray(aux); - _generated_ident_54177 + _generated_ident_54193 } } @@ -1722,27 +1722,27 @@ fn shor_sample_full_pipeline_reachable_items() { body ... { Fact(Length(xs) <= Length(ys), $"Input register ys must be at least as long as xs."); { - let _range_id_51179 : Range = 1..Length(xs) - 1; - mutable _index_id_51182 : Int = _range_id_51179::Start; - let _step_id_51187 : Int = _range_id_51179::Step; - let _end_id_51192 : Int = _range_id_51179::End; - while _step_id_51187 > 0 and _index_id_51182 <= _end_id_51192 or _step_id_51187 < 0 and _index_id_51182 >= _end_id_51192 { - let i : Int = _index_id_51182; + let _range_id_51195 : Range = 1..Length(xs) - 1; + mutable _index_id_51198 : Int = _range_id_51195::Start; + let _step_id_51203 : Int = _range_id_51195::Step; + let _end_id_51208 : Int = _range_id_51195::End; + while _step_id_51203 > 0 and _index_id_51198 <= _end_id_51208 or _step_id_51203 < 0 and _index_id_51198 >= _end_id_51208 { + let i : Int = _index_id_51198; CNOT(xs[i], ys[i]); - _index_id_51182 += _step_id_51187; + _index_id_51198 += _step_id_51203; } } { - let _range_id_51222 : Range = Length(xs) - 2..-1..1; - mutable _index_id_51225 : Int = _range_id_51222::Start; - let _step_id_51230 : Int = _range_id_51222::Step; - let _end_id_51235 : Int = _range_id_51222::End; - while _step_id_51230 > 0 and _index_id_51225 <= _end_id_51235 or _step_id_51230 < 0 and _index_id_51225 >= _end_id_51235 { - let i : Int = _index_id_51225; + let _range_id_51238 : Range = Length(xs) - 2..-1..1; + mutable _index_id_51241 : Int = _range_id_51238::Start; + let _step_id_51246 : Int = _range_id_51238::Step; + let _end_id_51251 : Int = _range_id_51238::End; + while _step_id_51246 > 0 and _index_id_51241 <= _end_id_51251 or _step_id_51246 < 0 and _index_id_51241 >= _end_id_51251 { + let i : Int = _index_id_51241; CNOT(xs[i], xs[i + 1]); - _index_id_51225 += _step_id_51230; + _index_id_51241 += _step_id_51246; } } @@ -1753,14 +1753,14 @@ fn shor_sample_full_pipeline_reachable_items() { { let _range : Range = Length(xs) - 2..-1..1; { - let _range_id_51265 : Range = _range::Start + _range::End - _range::Start / _range::Step * _range::Step..-_range::Step.._range::Start; - mutable _index_id_51268 : Int = _range_id_51265::Start; - let _step_id_51273 : Int = _range_id_51265::Step; - let _end_id_51278 : Int = _range_id_51265::End; - while _step_id_51273 > 0 and _index_id_51268 <= _end_id_51278 or _step_id_51273 < 0 and _index_id_51268 >= _end_id_51278 { - let i : Int = _index_id_51268; + let _range_id_51281 : Range = _range::Start + _range::End - _range::Start / _range::Step * _range::Step..-_range::Step.._range::Start; + mutable _index_id_51284 : Int = _range_id_51281::Start; + let _step_id_51289 : Int = _range_id_51281::Step; + let _end_id_51294 : Int = _range_id_51281::End; + while _step_id_51289 > 0 and _index_id_51284 <= _end_id_51294 or _step_id_51289 < 0 and _index_id_51284 >= _end_id_51294 { + let i : Int = _index_id_51284; Adjoint CNOT(xs[i], xs[i + 1]); - _index_id_51268 += _step_id_51273; + _index_id_51284 += _step_id_51289; } } @@ -1770,14 +1770,14 @@ fn shor_sample_full_pipeline_reachable_items() { { let _range : Range = 1..Length(xs) - 1; { - let _range_id_51308 : Range = _range::Start + _range::End - _range::Start / _range::Step * _range::Step..-_range::Step.._range::Start; - mutable _index_id_51311 : Int = _range_id_51308::Start; - let _step_id_51316 : Int = _range_id_51308::Step; - let _end_id_51321 : Int = _range_id_51308::End; - while _step_id_51316 > 0 and _index_id_51311 <= _end_id_51321 or _step_id_51316 < 0 and _index_id_51311 >= _end_id_51321 { - let i : Int = _index_id_51311; + let _range_id_51324 : Range = _range::Start + _range::End - _range::Start / _range::Step * _range::Step..-_range::Step.._range::Start; + mutable _index_id_51327 : Int = _range_id_51324::Start; + let _step_id_51332 : Int = _range_id_51324::Step; + let _end_id_51337 : Int = _range_id_51324::End; + while _step_id_51332 > 0 and _index_id_51327 <= _end_id_51337 or _step_id_51332 < 0 and _index_id_51327 >= _end_id_51337 { + let i : Int = _index_id_51327; Adjoint CNOT(xs[i], ys[i]); - _index_id_51311 += _step_id_51316; + _index_id_51327 += _step_id_51332; } } @@ -1788,27 +1788,27 @@ fn shor_sample_full_pipeline_reachable_items() { controlled (ctls, ...) { Fact(Length(xs) <= Length(ys), $"Input register ys must be at least as long as xs."); { - let _range_id_51351 : Range = 1..Length(xs) - 1; - mutable _index_id_51354 : Int = _range_id_51351::Start; - let _step_id_51359 : Int = _range_id_51351::Step; - let _end_id_51364 : Int = _range_id_51351::End; - while _step_id_51359 > 0 and _index_id_51354 <= _end_id_51364 or _step_id_51359 < 0 and _index_id_51354 >= _end_id_51364 { - let i : Int = _index_id_51354; + let _range_id_51367 : Range = 1..Length(xs) - 1; + mutable _index_id_51370 : Int = _range_id_51367::Start; + let _step_id_51375 : Int = _range_id_51367::Step; + let _end_id_51380 : Int = _range_id_51367::End; + while _step_id_51375 > 0 and _index_id_51370 <= _end_id_51380 or _step_id_51375 < 0 and _index_id_51370 >= _end_id_51380 { + let i : Int = _index_id_51370; Controlled CNOT(ctls, (xs[i], ys[i])); - _index_id_51354 += _step_id_51359; + _index_id_51370 += _step_id_51375; } } { - let _range_id_51394 : Range = Length(xs) - 2..-1..1; - mutable _index_id_51397 : Int = _range_id_51394::Start; - let _step_id_51402 : Int = _range_id_51394::Step; - let _end_id_51407 : Int = _range_id_51394::End; - while _step_id_51402 > 0 and _index_id_51397 <= _end_id_51407 or _step_id_51402 < 0 and _index_id_51397 >= _end_id_51407 { - let i : Int = _index_id_51397; + let _range_id_51410 : Range = Length(xs) - 2..-1..1; + mutable _index_id_51413 : Int = _range_id_51410::Start; + let _step_id_51418 : Int = _range_id_51410::Step; + let _end_id_51423 : Int = _range_id_51410::End; + while _step_id_51418 > 0 and _index_id_51413 <= _end_id_51423 or _step_id_51418 < 0 and _index_id_51413 >= _end_id_51423 { + let i : Int = _index_id_51413; Controlled CNOT(ctls, (xs[i], xs[i + 1])); - _index_id_51397 += _step_id_51402; + _index_id_51413 += _step_id_51418; } } @@ -1819,14 +1819,14 @@ fn shor_sample_full_pipeline_reachable_items() { { let _range : Range = Length(xs) - 2..-1..1; { - let _range_id_51437 : Range = _range::Start + _range::End - _range::Start / _range::Step * _range::Step..-_range::Step.._range::Start; - mutable _index_id_51440 : Int = _range_id_51437::Start; - let _step_id_51445 : Int = _range_id_51437::Step; - let _end_id_51450 : Int = _range_id_51437::End; - while _step_id_51445 > 0 and _index_id_51440 <= _end_id_51450 or _step_id_51445 < 0 and _index_id_51440 >= _end_id_51450 { - let i : Int = _index_id_51440; + let _range_id_51453 : Range = _range::Start + _range::End - _range::Start / _range::Step * _range::Step..-_range::Step.._range::Start; + mutable _index_id_51456 : Int = _range_id_51453::Start; + let _step_id_51461 : Int = _range_id_51453::Step; + let _end_id_51466 : Int = _range_id_51453::End; + while _step_id_51461 > 0 and _index_id_51456 <= _end_id_51466 or _step_id_51461 < 0 and _index_id_51456 >= _end_id_51466 { + let i : Int = _index_id_51456; Controlled Adjoint CNOT(ctls, (xs[i], xs[i + 1])); - _index_id_51440 += _step_id_51445; + _index_id_51456 += _step_id_51461; } } @@ -1836,14 +1836,14 @@ fn shor_sample_full_pipeline_reachable_items() { { let _range : Range = 1..Length(xs) - 1; { - let _range_id_51480 : Range = _range::Start + _range::End - _range::Start / _range::Step * _range::Step..-_range::Step.._range::Start; - mutable _index_id_51483 : Int = _range_id_51480::Start; - let _step_id_51488 : Int = _range_id_51480::Step; - let _end_id_51493 : Int = _range_id_51480::End; - while _step_id_51488 > 0 and _index_id_51483 <= _end_id_51493 or _step_id_51488 < 0 and _index_id_51483 >= _end_id_51493 { - let i : Int = _index_id_51483; + let _range_id_51496 : Range = _range::Start + _range::End - _range::Start / _range::Step * _range::Step..-_range::Step.._range::Start; + mutable _index_id_51499 : Int = _range_id_51496::Start; + let _step_id_51504 : Int = _range_id_51496::Step; + let _end_id_51509 : Int = _range_id_51496::End; + while _step_id_51504 > 0 and _index_id_51499 <= _end_id_51509 or _step_id_51504 < 0 and _index_id_51499 >= _end_id_51509 { + let i : Int = _index_id_51499; Controlled Adjoint CNOT(ctls, (xs[i], ys[i])); - _index_id_51483 += _step_id_51488; + _index_id_51499 += _step_id_51504; } } @@ -1862,28 +1862,28 @@ fn shor_sample_full_pipeline_reachable_items() { controlled (controls, ...) { Fact(Length(xs) == Length(ys), $"Input registers must have the same number of qubits."); { - let _range_id_51523 : Range = 0..Length(xs) - 2; - mutable _index_id_51526 : Int = _range_id_51523::Start; - let _step_id_51531 : Int = _range_id_51523::Step; - let _end_id_51536 : Int = _range_id_51523::End; - while _step_id_51531 > 0 and _index_id_51526 <= _end_id_51536 or _step_id_51531 < 0 and _index_id_51526 >= _end_id_51536 { - let idx : Int = _index_id_51526; + let _range_id_51539 : Range = 0..Length(xs) - 2; + mutable _index_id_51542 : Int = _range_id_51539::Start; + let _step_id_51547 : Int = _range_id_51539::Step; + let _end_id_51552 : Int = _range_id_51539::End; + while _step_id_51547 > 0 and _index_id_51542 <= _end_id_51552 or _step_id_51547 < 0 and _index_id_51542 >= _end_id_51552 { + let idx : Int = _index_id_51542; CCNOT(xs[idx], ys[idx], xs[idx + 1]); - _index_id_51526 += _step_id_51531; + _index_id_51542 += _step_id_51547; } } { - let _range_id_51566 : Range = Length(xs) - 1..-1..1; - mutable _index_id_51569 : Int = _range_id_51566::Start; - let _step_id_51574 : Int = _range_id_51566::Step; - let _end_id_51579 : Int = _range_id_51566::End; - while _step_id_51574 > 0 and _index_id_51569 <= _end_id_51579 or _step_id_51574 < 0 and _index_id_51569 >= _end_id_51579 { - let idx : Int = _index_id_51569; + let _range_id_51582 : Range = Length(xs) - 1..-1..1; + mutable _index_id_51585 : Int = _range_id_51582::Start; + let _step_id_51590 : Int = _range_id_51582::Step; + let _end_id_51595 : Int = _range_id_51582::End; + while _step_id_51590 > 0 and _index_id_51585 <= _end_id_51595 or _step_id_51590 < 0 and _index_id_51585 >= _end_id_51595 { + let idx : Int = _index_id_51585; Controlled CNOT(controls, (xs[idx], ys[idx])); CCNOT(xs[idx - 1], ys[idx - 1], xs[idx]); - _index_id_51569 += _step_id_51574; + _index_id_51585 += _step_id_51590; } } @@ -1894,15 +1894,15 @@ fn shor_sample_full_pipeline_reachable_items() { { let _range : Range = Length(xs) - 1..-1..1; { - let _range_id_51609 : Range = _range::Start + _range::End - _range::Start / _range::Step * _range::Step..-_range::Step.._range::Start; - mutable _index_id_51612 : Int = _range_id_51609::Start; - let _step_id_51617 : Int = _range_id_51609::Step; - let _end_id_51622 : Int = _range_id_51609::End; - while _step_id_51617 > 0 and _index_id_51612 <= _end_id_51622 or _step_id_51617 < 0 and _index_id_51612 >= _end_id_51622 { - let idx : Int = _index_id_51612; + let _range_id_51625 : Range = _range::Start + _range::End - _range::Start / _range::Step * _range::Step..-_range::Step.._range::Start; + mutable _index_id_51628 : Int = _range_id_51625::Start; + let _step_id_51633 : Int = _range_id_51625::Step; + let _end_id_51638 : Int = _range_id_51625::End; + while _step_id_51633 > 0 and _index_id_51628 <= _end_id_51638 or _step_id_51633 < 0 and _index_id_51628 >= _end_id_51638 { + let idx : Int = _index_id_51628; Adjoint CCNOT(xs[idx - 1], ys[idx - 1], xs[idx]); Adjoint Controlled CNOT(controls, (xs[idx], ys[idx])); - _index_id_51612 += _step_id_51617; + _index_id_51628 += _step_id_51633; } } @@ -1912,14 +1912,14 @@ fn shor_sample_full_pipeline_reachable_items() { { let _range : Range = 0..Length(xs) - 2; { - let _range_id_51652 : Range = _range::Start + _range::End - _range::Start / _range::Step * _range::Step..-_range::Step.._range::Start; - mutable _index_id_51655 : Int = _range_id_51652::Start; - let _step_id_51660 : Int = _range_id_51652::Step; - let _end_id_51665 : Int = _range_id_51652::End; - while _step_id_51660 > 0 and _index_id_51655 <= _end_id_51665 or _step_id_51660 < 0 and _index_id_51655 >= _end_id_51665 { - let idx : Int = _index_id_51655; + let _range_id_51668 : Range = _range::Start + _range::End - _range::Start / _range::Step * _range::Step..-_range::Step.._range::Start; + mutable _index_id_51671 : Int = _range_id_51668::Start; + let _step_id_51676 : Int = _range_id_51668::Step; + let _end_id_51681 : Int = _range_id_51668::End; + while _step_id_51676 > 0 and _index_id_51671 <= _end_id_51681 or _step_id_51676 < 0 and _index_id_51671 >= _end_id_51681 { + let idx : Int = _index_id_51671; Adjoint CCNOT(xs[idx], ys[idx], xs[idx + 1]); - _index_id_51655 += _step_id_51660; + _index_id_51671 += _step_id_51676; } } @@ -1940,29 +1940,29 @@ fn shor_sample_full_pipeline_reachable_items() { Fact(Length(xs) > 0, $"Array should not be empty."); let nQubits : Int = Length(xs); { - let _range_id_51695 : Range = 0..nQubits - 2; - mutable _index_id_51698 : Int = _range_id_51695::Start; - let _step_id_51703 : Int = _range_id_51695::Step; - let _end_id_51708 : Int = _range_id_51695::End; - while _step_id_51703 > 0 and _index_id_51698 <= _end_id_51708 or _step_id_51703 < 0 and _index_id_51698 >= _end_id_51708 { - let idx : Int = _index_id_51698; + let _range_id_51711 : Range = 0..nQubits - 2; + mutable _index_id_51714 : Int = _range_id_51711::Start; + let _step_id_51719 : Int = _range_id_51711::Step; + let _end_id_51724 : Int = _range_id_51711::End; + while _step_id_51719 > 0 and _index_id_51714 <= _end_id_51724 or _step_id_51719 < 0 and _index_id_51714 >= _end_id_51724 { + let idx : Int = _index_id_51714; CCNOT(xs[idx], ys[idx], xs[idx + 1]); - _index_id_51698 += _step_id_51703; + _index_id_51714 += _step_id_51719; } } Controlled CCNOT(controls, (xs[nQubits - 1], ys[nQubits - 1], ys[nQubits])); { - let _range_id_51738 : Range = nQubits - 1..-1..1; - mutable _index_id_51741 : Int = _range_id_51738::Start; - let _step_id_51746 : Int = _range_id_51738::Step; - let _end_id_51751 : Int = _range_id_51738::End; - while _step_id_51746 > 0 and _index_id_51741 <= _end_id_51751 or _step_id_51746 < 0 and _index_id_51741 >= _end_id_51751 { - let idx : Int = _index_id_51741; + let _range_id_51754 : Range = nQubits - 1..-1..1; + mutable _index_id_51757 : Int = _range_id_51754::Start; + let _step_id_51762 : Int = _range_id_51754::Step; + let _end_id_51767 : Int = _range_id_51754::End; + while _step_id_51762 > 0 and _index_id_51757 <= _end_id_51767 or _step_id_51762 < 0 and _index_id_51757 >= _end_id_51767 { + let idx : Int = _index_id_51757; Controlled CNOT(controls, (xs[idx], ys[idx])); CCNOT(xs[idx - 1], ys[idx - 1], xs[idx]); - _index_id_51741 += _step_id_51746; + _index_id_51757 += _step_id_51762; } } @@ -1975,15 +1975,15 @@ fn shor_sample_full_pipeline_reachable_items() { { let _range : Range = nQubits - 1..-1..1; { - let _range_id_51781 : Range = _range::Start + _range::End - _range::Start / _range::Step * _range::Step..-_range::Step.._range::Start; - mutable _index_id_51784 : Int = _range_id_51781::Start; - let _step_id_51789 : Int = _range_id_51781::Step; - let _end_id_51794 : Int = _range_id_51781::End; - while _step_id_51789 > 0 and _index_id_51784 <= _end_id_51794 or _step_id_51789 < 0 and _index_id_51784 >= _end_id_51794 { - let idx : Int = _index_id_51784; + let _range_id_51797 : Range = _range::Start + _range::End - _range::Start / _range::Step * _range::Step..-_range::Step.._range::Start; + mutable _index_id_51800 : Int = _range_id_51797::Start; + let _step_id_51805 : Int = _range_id_51797::Step; + let _end_id_51810 : Int = _range_id_51797::End; + while _step_id_51805 > 0 and _index_id_51800 <= _end_id_51810 or _step_id_51805 < 0 and _index_id_51800 >= _end_id_51810 { + let idx : Int = _index_id_51800; Adjoint CCNOT(xs[idx - 1], ys[idx - 1], xs[idx]); Adjoint Controlled CNOT(controls, (xs[idx], ys[idx])); - _index_id_51784 += _step_id_51789; + _index_id_51800 += _step_id_51805; } } @@ -1994,14 +1994,14 @@ fn shor_sample_full_pipeline_reachable_items() { { let _range : Range = 0..nQubits - 2; { - let _range_id_51824 : Range = _range::Start + _range::End - _range::Start / _range::Step * _range::Step..-_range::Step.._range::Start; - mutable _index_id_51827 : Int = _range_id_51824::Start; - let _step_id_51832 : Int = _range_id_51824::Step; - let _end_id_51837 : Int = _range_id_51824::End; - while _step_id_51832 > 0 and _index_id_51827 <= _end_id_51837 or _step_id_51832 < 0 and _index_id_51827 >= _end_id_51837 { - let idx : Int = _index_id_51827; + let _range_id_51840 : Range = _range::Start + _range::End - _range::Start / _range::Step * _range::Step..-_range::Step.._range::Start; + mutable _index_id_51843 : Int = _range_id_51840::Start; + let _step_id_51848 : Int = _range_id_51840::Step; + let _end_id_51853 : Int = _range_id_51840::End; + while _step_id_51848 > 0 and _index_id_51843 <= _end_id_51853 or _step_id_51848 < 0 and _index_id_51843 >= _end_id_51853 { + let idx : Int = _index_id_51843; Adjoint CCNOT(xs[idx], ys[idx], xs[idx + 1]); - _index_id_51827 += _step_id_51832; + _index_id_51843 += _step_id_51848; } } @@ -2079,7 +2079,7 @@ fn shor_sample_full_pipeline_reachable_items() { if c != 0 { let j : Int = TrailingZeroCountI(c); let x : Qubit[] = AllocateQubitArray(ysLen - j); - let _generated_ident_54421 : Unit = { + let _generated_ident_54437 : Unit = { { ApplyXorInPlace(c >>> j, x); } @@ -2094,7 +2094,7 @@ fn shor_sample_full_pipeline_reachable_items() { _apply_res }; ReleaseQubitArray(x); - _generated_ident_54421 + _generated_ident_54437 } } @@ -2106,7 +2106,7 @@ fn shor_sample_full_pipeline_reachable_items() { if c != 0 { let j : Int = TrailingZeroCountI(c); let x : Qubit[] = AllocateQubitArray(ysLen - j); - let _generated_ident_54435 : Unit = { + let _generated_ident_54451 : Unit = { { ApplyXorInPlace(c >>> j, x); } @@ -2121,7 +2121,7 @@ fn shor_sample_full_pipeline_reachable_items() { _apply_res }; ReleaseQubitArray(x); - _generated_ident_54435 + _generated_ident_54451 } } @@ -2133,7 +2133,7 @@ fn shor_sample_full_pipeline_reachable_items() { if c != 0 { let j : Int = TrailingZeroCountI(c); let x : Qubit[] = AllocateQubitArray(ysLen - j); - let _generated_ident_54449 : Unit = { + let _generated_ident_54465 : Unit = { { ApplyXorInPlace(c >>> j, x); } @@ -2148,7 +2148,7 @@ fn shor_sample_full_pipeline_reachable_items() { _apply_res }; ReleaseQubitArray(x); - _generated_ident_54449 + _generated_ident_54465 } } @@ -2160,7 +2160,7 @@ fn shor_sample_full_pipeline_reachable_items() { if c != 0 { let j : Int = TrailingZeroCountI(c); let x : Qubit[] = AllocateQubitArray(ysLen - j); - let _generated_ident_54463 : Unit = { + let _generated_ident_54479 : Unit = { { ApplyXorInPlace(c >>> j, x); } @@ -2175,7 +2175,7 @@ fn shor_sample_full_pipeline_reachable_items() { _apply_res }; ReleaseQubitArray(x); - _generated_ident_54463 + _generated_ident_54479 } } @@ -2707,21 +2707,21 @@ fn shor_sample_full_pipeline_reachable_items() { [Head_Qubit_(xNormalized)] + Most_Qubit_(qs) }; Fact(Length(cs1) == Length(qs), $"Arrays should be of the same length."); - let _generated_ident_54592 : Unit = { + let _generated_ident_54608 : Unit = { { { - let _range_id_52540 : Range = 0..Length(cs1) - 1; - mutable _index_id_52543 : Int = _range_id_52540::Start; - let _step_id_52548 : Int = _range_id_52540::Step; - let _end_id_52553 : Int = _range_id_52540::End; - while _step_id_52548 > 0 and _index_id_52543 <= _end_id_52553 or _step_id_52548 < 0 and _index_id_52543 >= _end_id_52553 { - let i : Int = _index_id_52543; + let _range_id_52556 : Range = 0..Length(cs1) - 1; + mutable _index_id_52559 : Int = _range_id_52556::Start; + let _step_id_52564 : Int = _range_id_52556::Step; + let _end_id_52569 : Int = _range_id_52556::End; + while _step_id_52564 > 0 and _index_id_52559 <= _end_id_52569 or _step_id_52564 < 0 and _index_id_52559 >= _end_id_52569 { + let i : Int = _index_id_52559; if cNormalized &&& 1L <<< i + 1 != 0L { AND(cs1[i], xNormalized[i + 1], qs[i]) } else { ApplyOrAssuming0Target(cs1[i], xNormalized[i + 1], qs[i]) }; - _index_id_52543 += _step_id_52548; + _index_id_52559 += _step_id_52564; } } @@ -2760,18 +2760,18 @@ fn shor_sample_full_pipeline_reachable_items() { { let _range : Range = 0..Length(cs1) - 1; { - let _range_id_52583 : Range = _range::Start + _range::End - _range::Start / _range::Step * _range::Step..-_range::Step.._range::Start; - mutable _index_id_52586 : Int = _range_id_52583::Start; - let _step_id_52591 : Int = _range_id_52583::Step; - let _end_id_52596 : Int = _range_id_52583::End; - while _step_id_52591 > 0 and _index_id_52586 <= _end_id_52596 or _step_id_52591 < 0 and _index_id_52586 >= _end_id_52596 { - let i : Int = _index_id_52586; + let _range_id_52599 : Range = _range::Start + _range::End - _range::Start / _range::Step * _range::Step..-_range::Step.._range::Start; + mutable _index_id_52602 : Int = _range_id_52599::Start; + let _step_id_52607 : Int = _range_id_52599::Step; + let _end_id_52612 : Int = _range_id_52599::End; + while _step_id_52607 > 0 and _index_id_52602 <= _end_id_52612 or _step_id_52607 < 0 and _index_id_52602 >= _end_id_52612 { + let i : Int = _index_id_52602; if cNormalized &&& 1L <<< i + 1 != 0L { Adjoint AND(cs1[i], xNormalized[i + 1], qs[i]) } else { Adjoint ApplyOrAssuming0Target(cs1[i], xNormalized[i + 1], qs[i]) }; - _index_id_52586 += _step_id_52591; + _index_id_52602 += _step_id_52607; } } @@ -2783,7 +2783,7 @@ fn shor_sample_full_pipeline_reachable_items() { _apply_res }; ReleaseQubitArray(qs); - _generated_ident_54592 + _generated_ident_54608 } } @@ -2816,21 +2816,21 @@ fn shor_sample_full_pipeline_reachable_items() { [Head_Qubit_(xNormalized)] + Most_Qubit_(qs) }; Fact(Length(cs1) == Length(qs), $"Arrays should be of the same length."); - let _generated_ident_54606 : Unit = { + let _generated_ident_54622 : Unit = { { { - let _range_id_52626 : Range = 0..Length(cs1) - 1; - mutable _index_id_52629 : Int = _range_id_52626::Start; - let _step_id_52634 : Int = _range_id_52626::Step; - let _end_id_52639 : Int = _range_id_52626::End; - while _step_id_52634 > 0 and _index_id_52629 <= _end_id_52639 or _step_id_52634 < 0 and _index_id_52629 >= _end_id_52639 { - let i : Int = _index_id_52629; + let _range_id_52642 : Range = 0..Length(cs1) - 1; + mutable _index_id_52645 : Int = _range_id_52642::Start; + let _step_id_52650 : Int = _range_id_52642::Step; + let _end_id_52655 : Int = _range_id_52642::End; + while _step_id_52650 > 0 and _index_id_52645 <= _end_id_52655 or _step_id_52650 < 0 and _index_id_52645 >= _end_id_52655 { + let i : Int = _index_id_52645; if cNormalized &&& 1L <<< i + 1 != 0L { AND(cs1[i], xNormalized[i + 1], qs[i]) } else { ApplyOrAssuming0Target(cs1[i], xNormalized[i + 1], qs[i]) }; - _index_id_52629 += _step_id_52634; + _index_id_52645 += _step_id_52650; } } @@ -2869,18 +2869,18 @@ fn shor_sample_full_pipeline_reachable_items() { { let _range : Range = 0..Length(cs1) - 1; { - let _range_id_52669 : Range = _range::Start + _range::End - _range::Start / _range::Step * _range::Step..-_range::Step.._range::Start; - mutable _index_id_52672 : Int = _range_id_52669::Start; - let _step_id_52677 : Int = _range_id_52669::Step; - let _end_id_52682 : Int = _range_id_52669::End; - while _step_id_52677 > 0 and _index_id_52672 <= _end_id_52682 or _step_id_52677 < 0 and _index_id_52672 >= _end_id_52682 { - let i : Int = _index_id_52672; + let _range_id_52685 : Range = _range::Start + _range::End - _range::Start / _range::Step * _range::Step..-_range::Step.._range::Start; + mutable _index_id_52688 : Int = _range_id_52685::Start; + let _step_id_52693 : Int = _range_id_52685::Step; + let _end_id_52698 : Int = _range_id_52685::End; + while _step_id_52693 > 0 and _index_id_52688 <= _end_id_52698 or _step_id_52693 < 0 and _index_id_52688 >= _end_id_52698 { + let i : Int = _index_id_52688; if cNormalized &&& 1L <<< i + 1 != 0L { Adjoint AND(cs1[i], xNormalized[i + 1], qs[i]) } else { Adjoint ApplyOrAssuming0Target(cs1[i], xNormalized[i + 1], qs[i]) }; - _index_id_52672 += _step_id_52677; + _index_id_52688 += _step_id_52693; } } @@ -2892,7 +2892,7 @@ fn shor_sample_full_pipeline_reachable_items() { _apply_res }; ReleaseQubitArray(qs); - _generated_ident_54606 + _generated_ident_54622 } } @@ -2925,21 +2925,21 @@ fn shor_sample_full_pipeline_reachable_items() { [Head_Qubit_(xNormalized)] + Most_Qubit_(qs) }; Fact(Length(cs1) == Length(qs), $"Arrays should be of the same length."); - let _generated_ident_54620 : Unit = { + let _generated_ident_54636 : Unit = { { { - let _range_id_52712 : Range = 0..Length(cs1) - 1; - mutable _index_id_52715 : Int = _range_id_52712::Start; - let _step_id_52720 : Int = _range_id_52712::Step; - let _end_id_52725 : Int = _range_id_52712::End; - while _step_id_52720 > 0 and _index_id_52715 <= _end_id_52725 or _step_id_52720 < 0 and _index_id_52715 >= _end_id_52725 { - let i : Int = _index_id_52715; + let _range_id_52728 : Range = 0..Length(cs1) - 1; + mutable _index_id_52731 : Int = _range_id_52728::Start; + let _step_id_52736 : Int = _range_id_52728::Step; + let _end_id_52741 : Int = _range_id_52728::End; + while _step_id_52736 > 0 and _index_id_52731 <= _end_id_52741 or _step_id_52736 < 0 and _index_id_52731 >= _end_id_52741 { + let i : Int = _index_id_52731; if cNormalized &&& 1L <<< i + 1 != 0L { AND(cs1[i], xNormalized[i + 1], qs[i]) } else { ApplyOrAssuming0Target(cs1[i], xNormalized[i + 1], qs[i]) }; - _index_id_52715 += _step_id_52720; + _index_id_52731 += _step_id_52736; } } @@ -2978,18 +2978,18 @@ fn shor_sample_full_pipeline_reachable_items() { { let _range : Range = 0..Length(cs1) - 1; { - let _range_id_52755 : Range = _range::Start + _range::End - _range::Start / _range::Step * _range::Step..-_range::Step.._range::Start; - mutable _index_id_52758 : Int = _range_id_52755::Start; - let _step_id_52763 : Int = _range_id_52755::Step; - let _end_id_52768 : Int = _range_id_52755::End; - while _step_id_52763 > 0 and _index_id_52758 <= _end_id_52768 or _step_id_52763 < 0 and _index_id_52758 >= _end_id_52768 { - let i : Int = _index_id_52758; + let _range_id_52771 : Range = _range::Start + _range::End - _range::Start / _range::Step * _range::Step..-_range::Step.._range::Start; + mutable _index_id_52774 : Int = _range_id_52771::Start; + let _step_id_52779 : Int = _range_id_52771::Step; + let _end_id_52784 : Int = _range_id_52771::End; + while _step_id_52779 > 0 and _index_id_52774 <= _end_id_52784 or _step_id_52779 < 0 and _index_id_52774 >= _end_id_52784 { + let i : Int = _index_id_52774; if cNormalized &&& 1L <<< i + 1 != 0L { Adjoint AND(cs1[i], xNormalized[i + 1], qs[i]) } else { Adjoint ApplyOrAssuming0Target(cs1[i], xNormalized[i + 1], qs[i]) }; - _index_id_52758 += _step_id_52763; + _index_id_52774 += _step_id_52779; } } @@ -3001,7 +3001,7 @@ fn shor_sample_full_pipeline_reachable_items() { _apply_res }; ReleaseQubitArray(qs); - _generated_ident_54620 + _generated_ident_54636 } } @@ -3034,21 +3034,21 @@ fn shor_sample_full_pipeline_reachable_items() { [Head_Qubit_(xNormalized)] + Most_Qubit_(qs) }; Fact(Length(cs1) == Length(qs), $"Arrays should be of the same length."); - let _generated_ident_54634 : Unit = { + let _generated_ident_54650 : Unit = { { { - let _range_id_52798 : Range = 0..Length(cs1) - 1; - mutable _index_id_52801 : Int = _range_id_52798::Start; - let _step_id_52806 : Int = _range_id_52798::Step; - let _end_id_52811 : Int = _range_id_52798::End; - while _step_id_52806 > 0 and _index_id_52801 <= _end_id_52811 or _step_id_52806 < 0 and _index_id_52801 >= _end_id_52811 { - let i : Int = _index_id_52801; + let _range_id_52814 : Range = 0..Length(cs1) - 1; + mutable _index_id_52817 : Int = _range_id_52814::Start; + let _step_id_52822 : Int = _range_id_52814::Step; + let _end_id_52827 : Int = _range_id_52814::End; + while _step_id_52822 > 0 and _index_id_52817 <= _end_id_52827 or _step_id_52822 < 0 and _index_id_52817 >= _end_id_52827 { + let i : Int = _index_id_52817; if cNormalized &&& 1L <<< i + 1 != 0L { AND(cs1[i], xNormalized[i + 1], qs[i]) } else { ApplyOrAssuming0Target(cs1[i], xNormalized[i + 1], qs[i]) }; - _index_id_52801 += _step_id_52806; + _index_id_52817 += _step_id_52822; } } @@ -3087,18 +3087,18 @@ fn shor_sample_full_pipeline_reachable_items() { { let _range : Range = 0..Length(cs1) - 1; { - let _range_id_52841 : Range = _range::Start + _range::End - _range::Start / _range::Step * _range::Step..-_range::Step.._range::Start; - mutable _index_id_52844 : Int = _range_id_52841::Start; - let _step_id_52849 : Int = _range_id_52841::Step; - let _end_id_52854 : Int = _range_id_52841::End; - while _step_id_52849 > 0 and _index_id_52844 <= _end_id_52854 or _step_id_52849 < 0 and _index_id_52844 >= _end_id_52854 { - let i : Int = _index_id_52844; + let _range_id_52857 : Range = _range::Start + _range::End - _range::Start / _range::Step * _range::Step..-_range::Step.._range::Start; + mutable _index_id_52860 : Int = _range_id_52857::Start; + let _step_id_52865 : Int = _range_id_52857::Step; + let _end_id_52870 : Int = _range_id_52857::End; + while _step_id_52865 > 0 and _index_id_52860 <= _end_id_52870 or _step_id_52865 < 0 and _index_id_52860 >= _end_id_52870 { + let i : Int = _index_id_52860; if cNormalized &&& 1L <<< i + 1 != 0L { Adjoint AND(cs1[i], xNormalized[i + 1], qs[i]) } else { Adjoint ApplyOrAssuming0Target(cs1[i], xNormalized[i + 1], qs[i]) }; - _index_id_52844 += _step_id_52849; + _index_id_52860 += _step_id_52865; } } @@ -3110,7 +3110,7 @@ fn shor_sample_full_pipeline_reachable_items() { _apply_res }; ReleaseQubitArray(qs); - _generated_ident_54634 + _generated_ident_54650 } }