qsharp-lang 1.15.4-dev → 1.16.1-dev
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/browser.d.ts +2 -2
- package/dist/compiler/compiler.d.ts +3 -1
- package/dist/compiler/compiler.js +5 -1
- package/dist/samples.generated.js +1 -1
- package/dist/utils.d.ts +8 -0
- package/dist/utils.js +22 -8
- package/docs/Microsoft.Quantum.Core/Length.md +1 -1
- package/docs/Microsoft.Quantum.Core/Repeated.md +1 -1
- package/docs/Microsoft.Quantum.Core/index.md +1 -1
- package/docs/Std.Arithmetic/AddLE.md +1 -1
- package/docs/Std.Arithmetic/ApplyIfEqualL.md +1 -1
- package/docs/Std.Arithmetic/ApplyIfEqualLE.md +1 -1
- package/docs/Std.Arithmetic/ApplyIfGreaterL.md +1 -1
- package/docs/Std.Arithmetic/ApplyIfGreaterLE.md +1 -1
- package/docs/Std.Arithmetic/ApplyIfGreaterOrEqualL.md +1 -1
- package/docs/Std.Arithmetic/ApplyIfGreaterOrEqualLE.md +1 -1
- package/docs/Std.Arithmetic/ApplyIfLessL.md +1 -1
- package/docs/Std.Arithmetic/ApplyIfLessLE.md +1 -1
- package/docs/Std.Arithmetic/ApplyIfLessOrEqualL.md +1 -1
- package/docs/Std.Arithmetic/ApplyIfLessOrEqualLE.md +1 -1
- package/docs/Std.Arithmetic/FourierTDIncByLE.md +1 -1
- package/docs/Std.Arithmetic/IncByI.md +1 -1
- package/docs/Std.Arithmetic/IncByIUsingIncByLE.md +1 -1
- package/docs/Std.Arithmetic/IncByL.md +1 -1
- package/docs/Std.Arithmetic/IncByLE.md +1 -1
- package/docs/Std.Arithmetic/IncByLEUsingAddLE.md +1 -1
- package/docs/Std.Arithmetic/IncByLUsingIncByLE.md +1 -1
- package/docs/Std.Arithmetic/LookAheadDKRSAddLE.md +1 -1
- package/docs/Std.Arithmetic/MAJ.md +1 -1
- package/docs/Std.Arithmetic/ReflectAboutInteger.md +1 -1
- package/docs/Std.Arithmetic/RippleCarryCGAddLE.md +1 -1
- package/docs/Std.Arithmetic/RippleCarryCGIncByLE.md +1 -1
- package/docs/Std.Arithmetic/RippleCarryTTKIncByLE.md +1 -1
- package/docs/Std.Arithmetic/index.md +1 -1
- package/docs/Std.Arrays/All.md +1 -1
- package/docs/Std.Arrays/Any.md +1 -1
- package/docs/Std.Arrays/Chunks.md +1 -1
- package/docs/Std.Arrays/CircularlyShifted.md +1 -1
- package/docs/Std.Arrays/ColumnAt.md +1 -1
- package/docs/Std.Arrays/Count.md +1 -1
- package/docs/Std.Arrays/Diagonal.md +1 -1
- package/docs/Std.Arrays/DrawMany.md +1 -1
- package/docs/Std.Arrays/Enumerated.md +1 -1
- package/docs/Std.Arrays/Excluding.md +1 -1
- package/docs/Std.Arrays/Filtered.md +1 -1
- package/docs/Std.Arrays/FlatMapped.md +1 -1
- package/docs/Std.Arrays/Flattened.md +1 -1
- package/docs/Std.Arrays/Fold.md +1 -1
- package/docs/Std.Arrays/ForEach.md +1 -1
- package/docs/Std.Arrays/Head.md +1 -1
- package/docs/Std.Arrays/HeadAndRest.md +1 -1
- package/docs/Std.Arrays/IndexOf.md +1 -1
- package/docs/Std.Arrays/IndexRange.md +1 -1
- package/docs/Std.Arrays/Interleaved.md +1 -1
- package/docs/Std.Arrays/IsEmpty.md +1 -1
- package/docs/Std.Arrays/IsRectangularArray.md +1 -1
- package/docs/Std.Arrays/IsSorted.md +1 -1
- package/docs/Std.Arrays/IsSquareArray.md +1 -1
- package/docs/Std.Arrays/Mapped.md +1 -1
- package/docs/Std.Arrays/MappedByIndex.md +1 -1
- package/docs/Std.Arrays/MappedOverRange.md +1 -1
- package/docs/Std.Arrays/Most.md +1 -1
- package/docs/Std.Arrays/MostAndTail.md +1 -1
- package/docs/Std.Arrays/Padded.md +1 -1
- package/docs/Std.Arrays/Partitioned.md +1 -1
- package/docs/Std.Arrays/Rest.md +1 -1
- package/docs/Std.Arrays/Reversed.md +1 -1
- package/docs/Std.Arrays/SequenceI.md +1 -1
- package/docs/Std.Arrays/SequenceL.md +1 -1
- package/docs/Std.Arrays/Sorted.md +1 -1
- package/docs/Std.Arrays/Subarray.md +1 -1
- package/docs/Std.Arrays/Swapped.md +1 -1
- package/docs/Std.Arrays/Tail.md +1 -1
- package/docs/Std.Arrays/Transposed.md +1 -1
- package/docs/Std.Arrays/Unzipped.md +1 -1
- package/docs/Std.Arrays/Where.md +1 -1
- package/docs/Std.Arrays/Windows.md +1 -1
- package/docs/Std.Arrays/Zipped.md +1 -1
- package/docs/Std.Arrays/index.md +1 -1
- package/docs/Std.Canon/ApplyCNOTChain.md +1 -1
- package/docs/Std.Canon/ApplyControlledOnBitString.md +1 -1
- package/docs/Std.Canon/ApplyControlledOnInt.md +1 -1
- package/docs/Std.Canon/ApplyOperationPowerA.md +1 -1
- package/docs/Std.Canon/ApplyP.md +1 -1
- package/docs/Std.Canon/ApplyPauli.md +1 -1
- package/docs/Std.Canon/ApplyPauliFromBitString.md +1 -1
- package/docs/Std.Canon/ApplyPauliFromInt.md +1 -1
- package/docs/Std.Canon/ApplyQFT.md +1 -1
- package/docs/Std.Canon/ApplyToEach.md +1 -1
- package/docs/Std.Canon/ApplyToEachA.md +1 -1
- package/docs/Std.Canon/ApplyToEachC.md +1 -1
- package/docs/Std.Canon/ApplyToEachCA.md +1 -1
- package/docs/Std.Canon/ApplyXorInPlace.md +1 -1
- package/docs/Std.Canon/ApplyXorInPlaceL.md +1 -1
- package/docs/Std.Canon/CX.md +1 -1
- package/docs/Std.Canon/CY.md +1 -1
- package/docs/Std.Canon/CZ.md +1 -1
- package/docs/Std.Canon/Fst.md +1 -1
- package/docs/Std.Canon/Relabel.md +1 -1
- package/docs/Std.Canon/Snd.md +1 -1
- package/docs/Std.Canon/SwapReverseRegister.md +1 -1
- package/docs/Std.Canon/index.md +1 -1
- package/docs/Std.Convert/BigIntAsBoolArray.md +1 -1
- package/docs/Std.Convert/BigIntAsInt.md +1 -1
- package/docs/Std.Convert/BoolArrayAsBigInt.md +1 -1
- package/docs/Std.Convert/BoolArrayAsInt.md +1 -1
- package/docs/Std.Convert/BoolArrayAsResultArray.md +1 -1
- package/docs/Std.Convert/BoolAsResult.md +1 -1
- package/docs/Std.Convert/ComplexAsComplexPolar.md +1 -1
- package/docs/Std.Convert/ComplexPolarAsComplex.md +1 -1
- package/docs/Std.Convert/DoubleAsStringWithPrecision.md +1 -1
- package/docs/Std.Convert/IntAsBigInt.md +1 -1
- package/docs/Std.Convert/IntAsBoolArray.md +1 -1
- package/docs/Std.Convert/IntAsDouble.md +1 -1
- package/docs/Std.Convert/ResultArrayAsBoolArray.md +1 -1
- package/docs/Std.Convert/ResultArrayAsInt.md +1 -1
- package/docs/Std.Convert/ResultAsBool.md +1 -1
- package/docs/Std.Convert/index.md +1 -1
- package/docs/Std.Core/Length.md +1 -1
- package/docs/Std.Core/Repeated.md +1 -1
- package/docs/Std.Core/index.md +1 -1
- package/docs/Std.Diagnostics/ApplyIdleNoise.md +1 -1
- package/docs/Std.Diagnostics/BitFlipNoise.md +1 -1
- package/docs/Std.Diagnostics/CheckAllZero.md +1 -1
- package/docs/Std.Diagnostics/CheckOperationsAreEqual.md +1 -1
- package/docs/Std.Diagnostics/CheckZero.md +1 -1
- package/docs/Std.Diagnostics/ConfigurePauliNoise.md +1 -1
- package/docs/Std.Diagnostics/DepolarizingNoise.md +1 -1
- package/docs/Std.Diagnostics/DumpMachine.md +1 -1
- package/docs/Std.Diagnostics/DumpOperation.md +1 -1
- package/docs/Std.Diagnostics/DumpRegister.md +1 -1
- package/docs/Std.Diagnostics/Fact.md +1 -1
- package/docs/Std.Diagnostics/NoNoise.md +1 -1
- package/docs/Std.Diagnostics/PhaseFlipNoise.md +1 -1
- package/docs/Std.Diagnostics/StartCountingFunction.md +1 -1
- package/docs/Std.Diagnostics/StartCountingOperation.md +1 -1
- package/docs/Std.Diagnostics/StartCountingQubits.md +1 -1
- package/docs/Std.Diagnostics/StopCountingFunction.md +1 -1
- package/docs/Std.Diagnostics/StopCountingOperation.md +1 -1
- package/docs/Std.Diagnostics/StopCountingQubits.md +1 -1
- package/docs/Std.Diagnostics/index.md +1 -1
- package/docs/Std.Intrinsic/AND.md +1 -1
- package/docs/Std.Intrinsic/ApplyUnitary.md +1 -1
- package/docs/Std.Intrinsic/CCNOT.md +1 -1
- package/docs/Std.Intrinsic/CNOT.md +1 -1
- package/docs/Std.Intrinsic/Exp.md +1 -1
- package/docs/Std.Intrinsic/H.md +1 -1
- package/docs/Std.Intrinsic/I.md +1 -1
- package/docs/Std.Intrinsic/M.md +1 -1
- package/docs/Std.Intrinsic/Measure.md +1 -1
- package/docs/Std.Intrinsic/Message.md +1 -1
- package/docs/Std.Intrinsic/R.md +1 -1
- package/docs/Std.Intrinsic/R1.md +1 -1
- package/docs/Std.Intrinsic/R1Frac.md +1 -1
- package/docs/Std.Intrinsic/RFrac.md +1 -1
- package/docs/Std.Intrinsic/Reset.md +1 -1
- package/docs/Std.Intrinsic/ResetAll.md +1 -1
- package/docs/Std.Intrinsic/Rx.md +1 -1
- package/docs/Std.Intrinsic/Rxx.md +1 -1
- package/docs/Std.Intrinsic/Ry.md +1 -1
- package/docs/Std.Intrinsic/Ryy.md +1 -1
- package/docs/Std.Intrinsic/Rz.md +1 -1
- package/docs/Std.Intrinsic/Rzz.md +1 -1
- package/docs/Std.Intrinsic/S.md +1 -1
- package/docs/Std.Intrinsic/SWAP.md +1 -1
- package/docs/Std.Intrinsic/SX.md +38 -0
- package/docs/Std.Intrinsic/T.md +1 -1
- package/docs/Std.Intrinsic/X.md +1 -1
- package/docs/Std.Intrinsic/Y.md +1 -1
- package/docs/Std.Intrinsic/Z.md +1 -1
- package/docs/Std.Intrinsic/index.md +2 -1
- package/docs/Std.Logical/Xor.md +1 -1
- package/docs/Std.Logical/index.md +1 -1
- package/docs/Std.Math/AbsComplex.md +1 -1
- package/docs/Std.Math/AbsComplexPolar.md +1 -1
- package/docs/Std.Math/AbsD.md +1 -1
- package/docs/Std.Math/AbsI.md +1 -1
- package/docs/Std.Math/AbsL.md +1 -1
- package/docs/Std.Math/AbsSquaredComplex.md +1 -1
- package/docs/Std.Math/AbsSquaredComplexPolar.md +1 -1
- package/docs/Std.Math/ApproximateFactorial.md +1 -1
- package/docs/Std.Math/ArcCos.md +1 -1
- package/docs/Std.Math/ArcCosh.md +1 -1
- package/docs/Std.Math/ArcSin.md +1 -1
- package/docs/Std.Math/ArcSinh.md +1 -1
- package/docs/Std.Math/ArcTan.md +1 -1
- package/docs/Std.Math/ArcTan2.md +1 -1
- package/docs/Std.Math/ArcTanh.md +1 -1
- package/docs/Std.Math/ArgComplex.md +1 -1
- package/docs/Std.Math/ArgComplexPolar.md +1 -1
- package/docs/Std.Math/Binom.md +1 -1
- package/docs/Std.Math/BitSizeI.md +1 -1
- package/docs/Std.Math/BitSizeL.md +1 -1
- package/docs/Std.Math/Ceiling.md +1 -1
- package/docs/Std.Math/Complex.md +1 -1
- package/docs/Std.Math/ComplexPolar.md +1 -1
- package/docs/Std.Math/ContinuedFractionConvergentI.md +1 -1
- package/docs/Std.Math/ContinuedFractionConvergentL.md +1 -1
- package/docs/Std.Math/Cos.md +1 -1
- package/docs/Std.Math/Cosh.md +1 -1
- package/docs/Std.Math/DivRemI.md +1 -1
- package/docs/Std.Math/DivRemL.md +1 -1
- package/docs/Std.Math/DividedByC.md +1 -1
- package/docs/Std.Math/DividedByCP.md +1 -1
- package/docs/Std.Math/E.md +1 -1
- package/docs/Std.Math/ExpModI.md +1 -1
- package/docs/Std.Math/ExpModL.md +1 -1
- package/docs/Std.Math/ExtendedGreatestCommonDivisorI.md +1 -1
- package/docs/Std.Math/ExtendedGreatestCommonDivisorL.md +1 -1
- package/docs/Std.Math/FactorialI.md +1 -1
- package/docs/Std.Math/FactorialL.md +1 -1
- package/docs/Std.Math/Floor.md +1 -1
- package/docs/Std.Math/GreatestCommonDivisorI.md +1 -1
- package/docs/Std.Math/GreatestCommonDivisorL.md +1 -1
- package/docs/Std.Math/HammingWeightI.md +1 -1
- package/docs/Std.Math/InverseModI.md +1 -1
- package/docs/Std.Math/InverseModL.md +1 -1
- package/docs/Std.Math/IsCoprimeI.md +1 -1
- package/docs/Std.Math/IsCoprimeL.md +1 -1
- package/docs/Std.Math/IsInfinite.md +1 -1
- package/docs/Std.Math/IsNaN.md +1 -1
- package/docs/Std.Math/LargestFixedPoint.md +1 -1
- package/docs/Std.Math/Lg.md +1 -1
- package/docs/Std.Math/Log.md +1 -1
- package/docs/Std.Math/Log10.md +1 -1
- package/docs/Std.Math/LogFactorialD.md +1 -1
- package/docs/Std.Math/LogGammaD.md +1 -1
- package/docs/Std.Math/LogOf2.md +1 -1
- package/docs/Std.Math/Max.md +1 -1
- package/docs/Std.Math/MaxD.md +1 -1
- package/docs/Std.Math/MaxI.md +1 -1
- package/docs/Std.Math/MaxL.md +1 -1
- package/docs/Std.Math/Min.md +1 -1
- package/docs/Std.Math/MinD.md +1 -1
- package/docs/Std.Math/MinI.md +1 -1
- package/docs/Std.Math/MinL.md +1 -1
- package/docs/Std.Math/MinusC.md +1 -1
- package/docs/Std.Math/MinusCP.md +1 -1
- package/docs/Std.Math/ModulusI.md +1 -1
- package/docs/Std.Math/ModulusL.md +1 -1
- package/docs/Std.Math/NegationC.md +1 -1
- package/docs/Std.Math/NegationCP.md +1 -1
- package/docs/Std.Math/PI.md +1 -1
- package/docs/Std.Math/PNorm.md +1 -1
- package/docs/Std.Math/PNormalized.md +1 -1
- package/docs/Std.Math/PlusC.md +1 -1
- package/docs/Std.Math/PlusCP.md +1 -1
- package/docs/Std.Math/PowC.md +1 -1
- package/docs/Std.Math/PowCP.md +1 -1
- package/docs/Std.Math/RealMod.md +1 -1
- package/docs/Std.Math/Round.md +1 -1
- package/docs/Std.Math/RoundHalfAwayFromZero.md +1 -1
- package/docs/Std.Math/SignD.md +1 -1
- package/docs/Std.Math/SignI.md +1 -1
- package/docs/Std.Math/SignL.md +1 -1
- package/docs/Std.Math/Sin.md +1 -1
- package/docs/Std.Math/Sinh.md +1 -1
- package/docs/Std.Math/SmallestFixedPoint.md +1 -1
- package/docs/Std.Math/Sqrt.md +1 -1
- package/docs/Std.Math/SquaredNorm.md +1 -1
- package/docs/Std.Math/Tan.md +1 -1
- package/docs/Std.Math/Tanh.md +1 -1
- package/docs/Std.Math/TimesC.md +1 -1
- package/docs/Std.Math/TimesCP.md +1 -1
- package/docs/Std.Math/TrailingZeroCountI.md +1 -1
- package/docs/Std.Math/TrailingZeroCountL.md +1 -1
- package/docs/Std.Math/Truncate.md +1 -1
- package/docs/Std.Math/index.md +1 -1
- package/docs/Std.Measurement/MResetEachZ.md +1 -1
- package/docs/Std.Measurement/MResetX.md +1 -1
- package/docs/Std.Measurement/MResetY.md +1 -1
- package/docs/Std.Measurement/MResetZ.md +1 -1
- package/docs/Std.Measurement/MeasureAllZ.md +1 -1
- package/docs/Std.Measurement/MeasureEachZ.md +1 -1
- package/docs/Std.Measurement/MeasureInteger.md +1 -1
- package/docs/Std.Measurement/index.md +1 -1
- package/docs/Std.Random/DrawRandomBool.md +1 -1
- package/docs/Std.Random/DrawRandomDouble.md +1 -1
- package/docs/Std.Random/DrawRandomInt.md +1 -1
- package/docs/Std.Random/index.md +1 -1
- package/docs/Std.Range/IsRangeEmpty.md +1 -1
- package/docs/Std.Range/RangeEnd.md +1 -1
- package/docs/Std.Range/RangeReverse.md +1 -1
- package/docs/Std.Range/RangeStart.md +1 -1
- package/docs/Std.Range/RangeStep.md +1 -1
- package/docs/Std.Range/index.md +1 -1
- package/docs/Std.ResourceEstimation/AccountForEstimates.md +1 -1
- package/docs/Std.ResourceEstimation/AuxQubitCount.md +1 -1
- package/docs/Std.ResourceEstimation/BeginEstimateCaching.md +1 -1
- package/docs/Std.ResourceEstimation/BeginRepeatEstimates.md +1 -1
- package/docs/Std.ResourceEstimation/CczCount.md +1 -1
- package/docs/Std.ResourceEstimation/EndEstimateCaching.md +1 -1
- package/docs/Std.ResourceEstimation/EndRepeatEstimates.md +1 -1
- package/docs/Std.ResourceEstimation/MeasurementCount.md +1 -1
- package/docs/Std.ResourceEstimation/PSSPCLayout.md +1 -1
- package/docs/Std.ResourceEstimation/RepeatEstimates.md +1 -1
- package/docs/Std.ResourceEstimation/RotationCount.md +1 -1
- package/docs/Std.ResourceEstimation/RotationDepth.md +1 -1
- package/docs/Std.ResourceEstimation/SingleVariant.md +1 -1
- package/docs/Std.ResourceEstimation/TCount.md +1 -1
- package/docs/Std.ResourceEstimation/index.md +1 -1
- package/docs/Std.StatePreparation/ApproximatelyPreparePureStateCP.md +1 -1
- package/docs/Std.StatePreparation/PreparePureStateD.md +1 -1
- package/docs/Std.StatePreparation/PrepareUniformSuperposition.md +1 -1
- package/docs/Std.StatePreparation/index.md +1 -1
- package/docs/Std.TableLookup/Select.md +1 -1
- package/docs/Std.TableLookup/index.md +1 -1
- package/docs/index.md +1 -1
- package/docs/toc.yml +1 -0
- package/lib/node/qsc_wasm.cjs +22 -4
- package/lib/node/qsc_wasm.d.cts +10 -0
- package/lib/node/qsc_wasm_bg.wasm +0 -0
- package/lib/web/qsc_wasm.d.ts +11 -0
- package/lib/web/qsc_wasm.js +21 -4
- package/lib/web/qsc_wasm_bg.wasm +0 -0
- package/package.json +1 -1
- package/ux/circuit-vis/circuitManipulation.ts +145 -48
- package/ux/circuit-vis/contextMenu.ts +1 -1
- package/ux/circuit-vis/draggable.ts +288 -112
- package/ux/circuit-vis/events.ts +433 -199
- package/ux/circuit-vis/formatters/inputFormatter.ts +9 -4
- package/ux/circuit-vis/panel.ts +37 -34
- package/ux/circuit-vis/process.ts +1 -1
- package/ux/circuit-vis/sqore.ts +2 -2
- package/ux/circuit-vis/utils.ts +17 -1
- package/ux/qsharp-circuit.css +2 -35
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
uid: Qdk.Std.ResourceEstimation.RotationCount
|
|
3
3
|
title: RotationCount function
|
|
4
4
|
description: "Q# RotationCount function: Returns a tuple that can be passed to the `AccountForEstimates` operation to specify that the number of rotations is equal to the `amount`."
|
|
5
|
-
ms.date:
|
|
5
|
+
ms.date: 05/12/2025
|
|
6
6
|
ms.topic: managed-reference
|
|
7
7
|
qsharp.kind: function
|
|
8
8
|
qsharp.package: __Std__
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
uid: Qdk.Std.ResourceEstimation.RotationDepth
|
|
3
3
|
title: RotationDepth function
|
|
4
4
|
description: "Q# RotationDepth function: Returns a tuple that can be passed to the `AccountForEstimates` operation to specify that the rotation depth is equal to the `amount`."
|
|
5
|
-
ms.date:
|
|
5
|
+
ms.date: 05/12/2025
|
|
6
6
|
ms.topic: managed-reference
|
|
7
7
|
qsharp.kind: function
|
|
8
8
|
qsharp.package: __Std__
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
uid: Qdk.Std.ResourceEstimation.SingleVariant
|
|
3
3
|
title: SingleVariant function
|
|
4
4
|
description: "Q# SingleVariant function: Used to specify that there's only one execution variant in `BeginEstimateCaching` function"
|
|
5
|
-
ms.date:
|
|
5
|
+
ms.date: 05/12/2025
|
|
6
6
|
ms.topic: managed-reference
|
|
7
7
|
qsharp.kind: function
|
|
8
8
|
qsharp.package: __Std__
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
uid: Qdk.Std.ResourceEstimation.TCount
|
|
3
3
|
title: TCount function
|
|
4
4
|
description: "Q# TCount function: Returns a tuple that can be passed to the `AccountForEstimates` operation to specify that the number of the T gates is equal to the `amount`."
|
|
5
|
-
ms.date:
|
|
5
|
+
ms.date: 05/12/2025
|
|
6
6
|
ms.topic: managed-reference
|
|
7
7
|
qsharp.kind: function
|
|
8
8
|
qsharp.package: __Std__
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
uid: Qdk.Std.StatePreparation.ApproximatelyPreparePureStateCP
|
|
3
3
|
title: ApproximatelyPreparePureStateCP operation
|
|
4
4
|
description: "Q# ApproximatelyPreparePureStateCP operation: Given a set of coefficients and a big-endian quantum register, prepares a state on that register described by the given coefficients, up to a given approximation tolerance."
|
|
5
|
-
ms.date:
|
|
5
|
+
ms.date: 05/12/2025
|
|
6
6
|
ms.topic: managed-reference
|
|
7
7
|
qsharp.kind: operation
|
|
8
8
|
qsharp.package: __Std__
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
uid: Qdk.Std.StatePreparation.PreparePureStateD
|
|
3
3
|
title: PreparePureStateD operation
|
|
4
4
|
description: "Q# PreparePureStateD operation: Given a set of coefficients and a big-endian quantum register, prepares a state on that register described by the given coefficients."
|
|
5
|
-
ms.date:
|
|
5
|
+
ms.date: 05/12/2025
|
|
6
6
|
ms.topic: managed-reference
|
|
7
7
|
qsharp.kind: operation
|
|
8
8
|
qsharp.package: __Std__
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
uid: Qdk.Std.StatePreparation.PrepareUniformSuperposition
|
|
3
3
|
title: PrepareUniformSuperposition operation
|
|
4
4
|
description: "Q# PrepareUniformSuperposition operation: Prepares a uniform superposition of states that represent integers 0 through `nStates - 1` in a little-endian `qubits` register."
|
|
5
|
-
ms.date:
|
|
5
|
+
ms.date: 05/12/2025
|
|
6
6
|
ms.topic: managed-reference
|
|
7
7
|
qsharp.kind: operation
|
|
8
8
|
qsharp.package: __Std__
|
package/docs/index.md
CHANGED
|
@@ -4,7 +4,7 @@ title: Q# standard libraries for the Azure Quantum Development Kit
|
|
|
4
4
|
description: Table of contents for the Q# standard libraries for Azure Quantum Development Kit
|
|
5
5
|
author: {AUTHOR}
|
|
6
6
|
ms.author: {MS_AUTHOR}
|
|
7
|
-
ms.date:
|
|
7
|
+
ms.date: 05/12/2025
|
|
8
8
|
ms.topic: landing-page
|
|
9
9
|
---
|
|
10
10
|
|
package/docs/toc.yml
CHANGED
|
@@ -187,6 +187,7 @@
|
|
|
187
187
|
- {name: Rzz, uid: Qdk.Std.Intrinsic.Rzz}
|
|
188
188
|
- {name: S, uid: Qdk.Std.Intrinsic.S}
|
|
189
189
|
- {name: SWAP, uid: Qdk.Std.Intrinsic.SWAP}
|
|
190
|
+
- {name: SX, uid: Qdk.Std.Intrinsic.SX}
|
|
190
191
|
- {name: T, uid: Qdk.Std.Intrinsic.T}
|
|
191
192
|
- {name: X, uid: Qdk.Std.Intrinsic.X}
|
|
192
193
|
- {name: Y, uid: Qdk.Std.Intrinsic.Y}
|
package/lib/node/qsc_wasm.cjs
CHANGED
|
@@ -611,7 +611,7 @@ function __wbg_adapter_52(arg0, arg1, arg2) {
|
|
|
611
611
|
wasm.__wbindgen_export_5(arg0, arg1, addHeapObject(arg2));
|
|
612
612
|
}
|
|
613
613
|
|
|
614
|
-
function
|
|
614
|
+
function __wbg_adapter_201(arg0, arg1, arg2, arg3) {
|
|
615
615
|
wasm.__wbindgen_export_6(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3));
|
|
616
616
|
}
|
|
617
617
|
|
|
@@ -1093,6 +1093,16 @@ class ProjectLoader {
|
|
|
1093
1093
|
const ret = wasm.projectloader_load_project_with_deps(this.__wbg_ptr, ptr0, len0);
|
|
1094
1094
|
return takeObject(ret);
|
|
1095
1095
|
}
|
|
1096
|
+
/**
|
|
1097
|
+
* @param {string} file_path
|
|
1098
|
+
* @returns {Promise<IProjectConfig>}
|
|
1099
|
+
*/
|
|
1100
|
+
load_openqasm_project(file_path) {
|
|
1101
|
+
const ptr0 = passStringToWasm0(file_path, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);
|
|
1102
|
+
const len0 = WASM_VECTOR_LEN;
|
|
1103
|
+
const ret = wasm.projectloader_load_openqasm_project(this.__wbg_ptr, ptr0, len0);
|
|
1104
|
+
return takeObject(ret);
|
|
1105
|
+
}
|
|
1096
1106
|
}
|
|
1097
1107
|
module.exports.ProjectLoader = ProjectLoader;
|
|
1098
1108
|
|
|
@@ -1279,7 +1289,7 @@ module.exports.__wbg_new_07527e5c188e7771 = function(arg0, arg1) {
|
|
|
1279
1289
|
const a = state0.a;
|
|
1280
1290
|
state0.a = 0;
|
|
1281
1291
|
try {
|
|
1282
|
-
return
|
|
1292
|
+
return __wbg_adapter_201(a, state0.b, arg0, arg1);
|
|
1283
1293
|
} finally {
|
|
1284
1294
|
state0.a = a;
|
|
1285
1295
|
}
|
|
@@ -1364,6 +1374,14 @@ module.exports.__wbg_profile_35b65d3ebe7ebbee = function(arg0, arg1) {
|
|
|
1364
1374
|
getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
|
|
1365
1375
|
};
|
|
1366
1376
|
|
|
1377
|
+
module.exports.__wbg_projectType_2bf93409ae72a803 = function(arg0, arg1) {
|
|
1378
|
+
const ret = getObject(arg1).projectType;
|
|
1379
|
+
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);
|
|
1380
|
+
const len1 = WASM_VECTOR_LEN;
|
|
1381
|
+
getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
|
|
1382
|
+
getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
|
|
1383
|
+
};
|
|
1384
|
+
|
|
1367
1385
|
module.exports.__wbg_queueMicrotask_98e746b9f850fe3d = function(arg0) {
|
|
1368
1386
|
queueMicrotask(getObject(arg0));
|
|
1369
1387
|
};
|
|
@@ -1499,8 +1517,8 @@ module.exports.__wbindgen_cb_drop = function(arg0) {
|
|
|
1499
1517
|
return ret;
|
|
1500
1518
|
};
|
|
1501
1519
|
|
|
1502
|
-
module.exports.
|
|
1503
|
-
const ret = makeMutClosure(arg0, arg1,
|
|
1520
|
+
module.exports.__wbindgen_closure_wrapper1003 = function(arg0, arg1, arg2) {
|
|
1521
|
+
const ret = makeMutClosure(arg0, arg1, 392, __wbg_adapter_52);
|
|
1504
1522
|
return addHeapObject(ret);
|
|
1505
1523
|
};
|
|
1506
1524
|
|
package/lib/node/qsc_wasm.d.cts
CHANGED
|
@@ -210,6 +210,7 @@ export interface IProjectHost {
|
|
|
210
210
|
export interface IProgramConfig {
|
|
211
211
|
packageGraphSources: IPackageGraphSources;
|
|
212
212
|
profile: TargetProfile;
|
|
213
|
+
projectType: ProjectType;
|
|
213
214
|
}
|
|
214
215
|
|
|
215
216
|
|
|
@@ -242,6 +243,10 @@ export interface IProjectConfig {
|
|
|
242
243
|
packageGraphSources: IPackageGraphSources;
|
|
243
244
|
lints: ({ lint: string; level: string } | { group: string; level: string })[];
|
|
244
245
|
errors: string[];
|
|
246
|
+
/**
|
|
247
|
+
* The type of project. This is used to determine how to load the project.
|
|
248
|
+
*/
|
|
249
|
+
projectType: ProjectType;
|
|
245
250
|
}
|
|
246
251
|
|
|
247
252
|
export interface ITestDescriptor {
|
|
@@ -265,6 +270,10 @@ export type TargetProfile = "base" | "adaptive_ri" | "adaptive_rif" | "unrestric
|
|
|
265
270
|
export type LanguageFeatures = "v2-preview-syntax";
|
|
266
271
|
|
|
267
272
|
|
|
273
|
+
|
|
274
|
+
export type ProjectType = "qsharp" | "openqasm";
|
|
275
|
+
|
|
276
|
+
|
|
268
277
|
export class DebugService {
|
|
269
278
|
free(): void;
|
|
270
279
|
constructor();
|
|
@@ -308,4 +317,5 @@ export class ProjectLoader {
|
|
|
308
317
|
free(): void;
|
|
309
318
|
constructor(project_host: IProjectHost);
|
|
310
319
|
load_project_with_deps(directory: string): Promise<IProjectConfig>;
|
|
320
|
+
load_openqasm_project(file_path: string): Promise<IProjectConfig>;
|
|
311
321
|
}
|
|
Binary file
|
package/lib/web/qsc_wasm.d.ts
CHANGED
|
@@ -210,6 +210,7 @@ export interface IProjectHost {
|
|
|
210
210
|
export interface IProgramConfig {
|
|
211
211
|
packageGraphSources: IPackageGraphSources;
|
|
212
212
|
profile: TargetProfile;
|
|
213
|
+
projectType: ProjectType;
|
|
213
214
|
}
|
|
214
215
|
|
|
215
216
|
|
|
@@ -242,6 +243,10 @@ export interface IProjectConfig {
|
|
|
242
243
|
packageGraphSources: IPackageGraphSources;
|
|
243
244
|
lints: ({ lint: string; level: string } | { group: string; level: string })[];
|
|
244
245
|
errors: string[];
|
|
246
|
+
/**
|
|
247
|
+
* The type of project. This is used to determine how to load the project.
|
|
248
|
+
*/
|
|
249
|
+
projectType: ProjectType;
|
|
245
250
|
}
|
|
246
251
|
|
|
247
252
|
export interface ITestDescriptor {
|
|
@@ -265,6 +270,10 @@ export type TargetProfile = "base" | "adaptive_ri" | "adaptive_rif" | "unrestric
|
|
|
265
270
|
export type LanguageFeatures = "v2-preview-syntax";
|
|
266
271
|
|
|
267
272
|
|
|
273
|
+
|
|
274
|
+
export type ProjectType = "qsharp" | "openqasm";
|
|
275
|
+
|
|
276
|
+
|
|
268
277
|
export class DebugService {
|
|
269
278
|
free(): void;
|
|
270
279
|
constructor();
|
|
@@ -308,6 +317,7 @@ export class ProjectLoader {
|
|
|
308
317
|
free(): void;
|
|
309
318
|
constructor(project_host: IProjectHost);
|
|
310
319
|
load_project_with_deps(directory: string): Promise<IProjectConfig>;
|
|
320
|
+
load_openqasm_project(file_path: string): Promise<IProjectConfig>;
|
|
311
321
|
}
|
|
312
322
|
|
|
313
323
|
export type InitInput = RequestInfo | URL | Response | BufferSource | WebAssembly.Module;
|
|
@@ -350,6 +360,7 @@ export interface InitOutput {
|
|
|
350
360
|
readonly __wbg_projectloader_free: (a: number, b: number) => void;
|
|
351
361
|
readonly projectloader_new: (a: number) => number;
|
|
352
362
|
readonly projectloader_load_project_with_deps: (a: number, b: number, c: number) => number;
|
|
363
|
+
readonly projectloader_load_openqasm_project: (a: number, b: number, c: number) => number;
|
|
353
364
|
readonly git_hash: (a: number) => void;
|
|
354
365
|
readonly get_qir: (a: number, b: number) => void;
|
|
355
366
|
readonly get_estimates: (a: number, b: number, c: number, d: number, e: number, f: number) => void;
|
package/lib/web/qsc_wasm.js
CHANGED
|
@@ -607,7 +607,7 @@ function __wbg_adapter_52(arg0, arg1, arg2) {
|
|
|
607
607
|
wasm.__wbindgen_export_5(arg0, arg1, addHeapObject(arg2));
|
|
608
608
|
}
|
|
609
609
|
|
|
610
|
-
function
|
|
610
|
+
function __wbg_adapter_201(arg0, arg1, arg2, arg3) {
|
|
611
611
|
wasm.__wbindgen_export_6(arg0, arg1, addHeapObject(arg2), addHeapObject(arg3));
|
|
612
612
|
}
|
|
613
613
|
|
|
@@ -1087,6 +1087,16 @@ export class ProjectLoader {
|
|
|
1087
1087
|
const ret = wasm.projectloader_load_project_with_deps(this.__wbg_ptr, ptr0, len0);
|
|
1088
1088
|
return takeObject(ret);
|
|
1089
1089
|
}
|
|
1090
|
+
/**
|
|
1091
|
+
* @param {string} file_path
|
|
1092
|
+
* @returns {Promise<IProjectConfig>}
|
|
1093
|
+
*/
|
|
1094
|
+
load_openqasm_project(file_path) {
|
|
1095
|
+
const ptr0 = passStringToWasm0(file_path, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);
|
|
1096
|
+
const len0 = WASM_VECTOR_LEN;
|
|
1097
|
+
const ret = wasm.projectloader_load_openqasm_project(this.__wbg_ptr, ptr0, len0);
|
|
1098
|
+
return takeObject(ret);
|
|
1099
|
+
}
|
|
1090
1100
|
}
|
|
1091
1101
|
|
|
1092
1102
|
async function __wbg_load(module, imports) {
|
|
@@ -1276,7 +1286,7 @@ function __wbg_get_imports() {
|
|
|
1276
1286
|
const a = state0.a;
|
|
1277
1287
|
state0.a = 0;
|
|
1278
1288
|
try {
|
|
1279
|
-
return
|
|
1289
|
+
return __wbg_adapter_201(a, state0.b, arg0, arg1);
|
|
1280
1290
|
} finally {
|
|
1281
1291
|
state0.a = a;
|
|
1282
1292
|
}
|
|
@@ -1346,6 +1356,13 @@ function __wbg_get_imports() {
|
|
|
1346
1356
|
getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
|
|
1347
1357
|
getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
|
|
1348
1358
|
};
|
|
1359
|
+
imports.wbg.__wbg_projectType_2bf93409ae72a803 = function(arg0, arg1) {
|
|
1360
|
+
const ret = getObject(arg1).projectType;
|
|
1361
|
+
const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export_0, wasm.__wbindgen_export_1);
|
|
1362
|
+
const len1 = WASM_VECTOR_LEN;
|
|
1363
|
+
getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);
|
|
1364
|
+
getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);
|
|
1365
|
+
};
|
|
1349
1366
|
imports.wbg.__wbg_queueMicrotask_98e746b9f850fe3d = function(arg0) {
|
|
1350
1367
|
queueMicrotask(getObject(arg0));
|
|
1351
1368
|
};
|
|
@@ -1455,8 +1472,8 @@ function __wbg_get_imports() {
|
|
|
1455
1472
|
const ret = false;
|
|
1456
1473
|
return ret;
|
|
1457
1474
|
};
|
|
1458
|
-
imports.wbg.
|
|
1459
|
-
const ret = makeMutClosure(arg0, arg1,
|
|
1475
|
+
imports.wbg.__wbindgen_closure_wrapper1003 = function(arg0, arg1, arg2) {
|
|
1476
|
+
const ret = makeMutClosure(arg0, arg1, 392, __wbg_adapter_52);
|
|
1460
1477
|
return addHeapObject(ret);
|
|
1461
1478
|
};
|
|
1462
1479
|
imports.wbg.__wbindgen_debug_string = function(arg0, arg1) {
|
package/lib/web/qsc_wasm_bg.wasm
CHANGED
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
// Copyright (c) Microsoft Corporation.
|
|
2
2
|
// Licensed under the MIT license.
|
|
3
3
|
|
|
4
|
-
import {
|
|
4
|
+
import { getOperationRegisters } from "../../src/utils";
|
|
5
|
+
import { Column, ComponentGrid, Operation, Unitary } from "./circuit";
|
|
5
6
|
import { CircuitEvents } from "./events";
|
|
6
7
|
import { Register } from "./register";
|
|
7
8
|
import {
|
|
@@ -45,6 +46,8 @@ const moveOperation = (
|
|
|
45
46
|
JSON.stringify(originalOperation),
|
|
46
47
|
);
|
|
47
48
|
|
|
49
|
+
_ensureQubitCount(circuitEvents, targetWire);
|
|
50
|
+
|
|
48
51
|
// Update operation's targets and controls
|
|
49
52
|
_moveY(
|
|
50
53
|
circuitEvents,
|
|
@@ -70,6 +73,7 @@ const moveOperation = (
|
|
|
70
73
|
);
|
|
71
74
|
if (sourceOperationParent == null) return null;
|
|
72
75
|
_removeOp(circuitEvents, originalOperation, sourceOperationParent);
|
|
76
|
+
removeTrailingUnusedQubits(circuitEvents);
|
|
73
77
|
|
|
74
78
|
return newSourceOperation;
|
|
75
79
|
};
|
|
@@ -254,6 +258,8 @@ const addOperation = (
|
|
|
254
258
|
newSourceOperation.targets = [{ qubit: targetWire }];
|
|
255
259
|
}
|
|
256
260
|
|
|
261
|
+
_ensureQubitCount(circuitEvents, targetWire);
|
|
262
|
+
|
|
257
263
|
_addOp(
|
|
258
264
|
circuitEvents,
|
|
259
265
|
newSourceOperation,
|
|
@@ -286,29 +292,32 @@ const removeOperation = (
|
|
|
286
292
|
|
|
287
293
|
if (sourceOperation == null || sourceOperationParent == null) return null;
|
|
288
294
|
|
|
289
|
-
// Delete sourceOperation
|
|
290
295
|
_removeOp(circuitEvents, sourceOperation, sourceOperationParent);
|
|
296
|
+
removeTrailingUnusedQubits(circuitEvents);
|
|
291
297
|
};
|
|
292
298
|
|
|
293
299
|
/**
|
|
294
|
-
* Find and remove operations in-place
|
|
300
|
+
* Find and remove operations in-place that return `true` for a predicate function.
|
|
295
301
|
*
|
|
296
|
-
* @param
|
|
302
|
+
* @param circuitEvents The CircuitEvents instance to handle circuit-related events.
|
|
297
303
|
* @param pred The predicate function to determine which operations to remove.
|
|
298
304
|
*/
|
|
299
305
|
const findAndRemoveOperations = (
|
|
300
|
-
|
|
306
|
+
circuitEvents: CircuitEvents,
|
|
301
307
|
pred: (op: Operation) => boolean,
|
|
302
308
|
) => {
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
pred: (op: Operation) => boolean,
|
|
306
|
-
) => {
|
|
309
|
+
// Remove operations that are true for the predicate function
|
|
310
|
+
const inPlaceFilter = (grid: ComponentGrid) => {
|
|
307
311
|
let i = 0;
|
|
308
312
|
while (i < grid.length) {
|
|
309
313
|
let j = 0;
|
|
310
314
|
while (j < grid[i].components.length) {
|
|
311
|
-
|
|
315
|
+
const op = grid[i].components[j];
|
|
316
|
+
if (op.children) {
|
|
317
|
+
inPlaceFilter(op.children);
|
|
318
|
+
}
|
|
319
|
+
if (pred(op)) {
|
|
320
|
+
circuitEvents.decrementQubitUseCountForOp(op);
|
|
312
321
|
grid[i].components.splice(j, 1);
|
|
313
322
|
} else {
|
|
314
323
|
j++;
|
|
@@ -322,25 +331,22 @@ const findAndRemoveOperations = (
|
|
|
322
331
|
}
|
|
323
332
|
};
|
|
324
333
|
|
|
325
|
-
|
|
326
|
-
if (pred(op)) return true;
|
|
327
|
-
if (op.children) {
|
|
328
|
-
inPlaceFilter(op.children, (child) => !recursivePred(child));
|
|
329
|
-
}
|
|
330
|
-
return false;
|
|
331
|
-
};
|
|
332
|
-
|
|
333
|
-
inPlaceFilter(componentGrid, (op) => !recursivePred(op));
|
|
334
|
+
inPlaceFilter(circuitEvents.componentGrid);
|
|
334
335
|
};
|
|
335
336
|
|
|
336
337
|
/**
|
|
337
338
|
* Add a control to the specified operation on the given wire index.
|
|
338
339
|
*
|
|
340
|
+
* @param circuitEvents The CircuitEvents instance to handle circuit-related events.
|
|
339
341
|
* @param op The unitary operation to which the control will be added.
|
|
340
342
|
* @param wireIndex The index of the wire where the control will be added.
|
|
341
343
|
* @returns True if the control was added, false if it already existed.
|
|
342
344
|
*/
|
|
343
|
-
const addControl = (
|
|
345
|
+
const addControl = (
|
|
346
|
+
circuitEvents: CircuitEvents,
|
|
347
|
+
op: Unitary,
|
|
348
|
+
wireIndex: number,
|
|
349
|
+
): boolean => {
|
|
344
350
|
if (!op.controls) {
|
|
345
351
|
op.controls = [];
|
|
346
352
|
}
|
|
@@ -350,6 +356,8 @@ const addControl = (op: Unitary, wireIndex: number): boolean => {
|
|
|
350
356
|
if (!existingControl) {
|
|
351
357
|
op.controls.push({ qubit: wireIndex });
|
|
352
358
|
op.controls.sort((a, b) => a.qubit - b.qubit);
|
|
359
|
+
_ensureQubitCount(circuitEvents, wireIndex);
|
|
360
|
+
circuitEvents.qubitUseCounts[wireIndex]++;
|
|
353
361
|
return true;
|
|
354
362
|
}
|
|
355
363
|
return false;
|
|
@@ -358,23 +366,112 @@ const addControl = (op: Unitary, wireIndex: number): boolean => {
|
|
|
358
366
|
/**
|
|
359
367
|
* Remove a control from the specified operation on the given wire index.
|
|
360
368
|
*
|
|
369
|
+
* @param circuitEvents The CircuitEvents instance to handle circuit-related events.
|
|
361
370
|
* @param op The unitary operation from which the control will be removed.
|
|
362
371
|
* @param wireIndex The index of the wire where the control will be removed.
|
|
363
372
|
* @returns True if the control was removed, false if it did not exist.
|
|
364
373
|
*/
|
|
365
|
-
const removeControl = (
|
|
374
|
+
const removeControl = (
|
|
375
|
+
circuitEvents: CircuitEvents,
|
|
376
|
+
op: Unitary,
|
|
377
|
+
wireIndex: number,
|
|
378
|
+
): boolean => {
|
|
366
379
|
if (op.controls) {
|
|
367
380
|
const controlIndex = op.controls.findIndex(
|
|
368
381
|
(control) => control.qubit === wireIndex,
|
|
369
382
|
);
|
|
370
383
|
if (controlIndex !== -1) {
|
|
371
384
|
op.controls.splice(controlIndex, 1);
|
|
385
|
+
circuitEvents.qubitUseCounts[wireIndex]--;
|
|
386
|
+
if (wireIndex === circuitEvents.qubits.length - 1) {
|
|
387
|
+
removeTrailingUnusedQubits(circuitEvents);
|
|
388
|
+
}
|
|
372
389
|
return true;
|
|
373
390
|
}
|
|
374
391
|
}
|
|
375
392
|
return false;
|
|
376
393
|
};
|
|
377
394
|
|
|
395
|
+
/**
|
|
396
|
+
* Resolves overlapping operations in each column of the component grid.
|
|
397
|
+
* For each column, splits overlapping operations into separate columns so that
|
|
398
|
+
* no two operations in the same column overlap on their register ranges.
|
|
399
|
+
* Modifies the component grid in-place.
|
|
400
|
+
*
|
|
401
|
+
* @param parentArray The component grid (array of columns) to process.
|
|
402
|
+
*/
|
|
403
|
+
const resolveOverlappingOperations = (parentArray: ComponentGrid): void => {
|
|
404
|
+
// Helper to resolve a single column into non-overlapping columns
|
|
405
|
+
const resolveColumn = (col: Column): Column[] => {
|
|
406
|
+
const newColumn: Column = { components: [] };
|
|
407
|
+
let [lastMin, lastMax] = [-1, -1];
|
|
408
|
+
let i = 0;
|
|
409
|
+
while (i < col.components.length) {
|
|
410
|
+
const op = col.components[i];
|
|
411
|
+
const [currMin, currMax] = _getMinMaxRegIdx(op);
|
|
412
|
+
// Sets up the first operation for comparison or if the current operation doesn't overlap
|
|
413
|
+
if (i === 0 || !_doesOverlap([lastMin, lastMax], [currMin, currMax])) {
|
|
414
|
+
[lastMin, lastMax] = [currMin, currMax];
|
|
415
|
+
i++;
|
|
416
|
+
} else {
|
|
417
|
+
// If they overlap, add the current operation to the new column
|
|
418
|
+
newColumn.components.push(op);
|
|
419
|
+
col.components.splice(i, 1);
|
|
420
|
+
}
|
|
421
|
+
}
|
|
422
|
+
if (newColumn.components.length > 0) {
|
|
423
|
+
const newColumns = resolveColumn(newColumn);
|
|
424
|
+
newColumns.push(col);
|
|
425
|
+
return newColumns;
|
|
426
|
+
} else {
|
|
427
|
+
return [col];
|
|
428
|
+
}
|
|
429
|
+
};
|
|
430
|
+
|
|
431
|
+
// In-place update of parentArray
|
|
432
|
+
let i = 0;
|
|
433
|
+
while (i < parentArray.length) {
|
|
434
|
+
const col = parentArray[i];
|
|
435
|
+
const newColumns = resolveColumn(col);
|
|
436
|
+
if (newColumns.length > 1) {
|
|
437
|
+
parentArray.splice(i, 1, ...newColumns);
|
|
438
|
+
i += newColumns.length;
|
|
439
|
+
}
|
|
440
|
+
i++;
|
|
441
|
+
}
|
|
442
|
+
};
|
|
443
|
+
|
|
444
|
+
/**
|
|
445
|
+
* Remove trailing unused qubits from the circuit.
|
|
446
|
+
*
|
|
447
|
+
* @param circuitEvents The CircuitEvents instance to handle circuit-related events.
|
|
448
|
+
*/
|
|
449
|
+
const removeTrailingUnusedQubits = (circuitEvents: CircuitEvents) => {
|
|
450
|
+
while (
|
|
451
|
+
circuitEvents.qubitUseCounts.length > 0 &&
|
|
452
|
+
circuitEvents.qubitUseCounts[circuitEvents.qubitUseCounts.length - 1] === 0
|
|
453
|
+
) {
|
|
454
|
+
circuitEvents.qubits.pop();
|
|
455
|
+
circuitEvents.qubitUseCounts.pop();
|
|
456
|
+
}
|
|
457
|
+
};
|
|
458
|
+
|
|
459
|
+
/**
|
|
460
|
+
* Determines whether two register index ranges overlap.
|
|
461
|
+
*
|
|
462
|
+
* @param op1 The [min, max] register indices of the first operation.
|
|
463
|
+
* @param op2 The [min, max] register indices of the second operation.
|
|
464
|
+
* @returns True if the ranges overlap, false otherwise.
|
|
465
|
+
*/
|
|
466
|
+
const _doesOverlap = (
|
|
467
|
+
op1: [number, number],
|
|
468
|
+
op2: [number, number],
|
|
469
|
+
): boolean => {
|
|
470
|
+
const [min1, max1] = op1;
|
|
471
|
+
const [min2, max2] = op2;
|
|
472
|
+
return max1 >= min2 && max2 >= min1;
|
|
473
|
+
};
|
|
474
|
+
|
|
378
475
|
/**
|
|
379
476
|
* Add an operation to the circuit at the specified location.
|
|
380
477
|
*
|
|
@@ -409,12 +506,7 @@ const _addOp = (
|
|
|
409
506
|
if (op === originalOperation) continue;
|
|
410
507
|
|
|
411
508
|
const [opMinTarget, opMaxTarget] = _getMinMaxRegIdx(op);
|
|
412
|
-
if (
|
|
413
|
-
(opMinTarget >= minTarget && opMinTarget <= maxTarget) ||
|
|
414
|
-
(opMaxTarget >= minTarget && opMaxTarget <= maxTarget) ||
|
|
415
|
-
(minTarget >= opMinTarget && minTarget <= opMaxTarget) ||
|
|
416
|
-
(maxTarget >= opMinTarget && maxTarget <= opMaxTarget)
|
|
417
|
-
) {
|
|
509
|
+
if (_doesOverlap([minTarget, maxTarget], [opMinTarget, opMaxTarget])) {
|
|
418
510
|
insertNewColumn = true;
|
|
419
511
|
break;
|
|
420
512
|
}
|
|
@@ -433,9 +525,11 @@ const _addOp = (
|
|
|
433
525
|
);
|
|
434
526
|
}
|
|
435
527
|
|
|
528
|
+
circuitEvents.incrementQubitUseCountForOp(sourceOperation);
|
|
529
|
+
|
|
436
530
|
if (sourceOperation.kind === "measurement") {
|
|
437
|
-
for (const
|
|
438
|
-
_updateMeasurementLines(circuitEvents,
|
|
531
|
+
for (const targetWire of sourceOperation.qubits) {
|
|
532
|
+
_updateMeasurementLines(circuitEvents, targetWire.qubit);
|
|
439
533
|
}
|
|
440
534
|
}
|
|
441
535
|
};
|
|
@@ -448,25 +542,7 @@ const _addOp = (
|
|
|
448
542
|
* @returns A tuple containing the minimum and maximum register indices.
|
|
449
543
|
*/
|
|
450
544
|
const _getMinMaxRegIdx = (operation: Operation): [number, number] => {
|
|
451
|
-
|
|
452
|
-
let controls: Register[];
|
|
453
|
-
switch (operation.kind) {
|
|
454
|
-
case "measurement":
|
|
455
|
-
targets = operation.results;
|
|
456
|
-
controls = operation.qubits;
|
|
457
|
-
break;
|
|
458
|
-
case "unitary":
|
|
459
|
-
targets = operation.targets;
|
|
460
|
-
controls = operation.controls || [];
|
|
461
|
-
break;
|
|
462
|
-
case "ket":
|
|
463
|
-
targets = operation.targets;
|
|
464
|
-
controls = [];
|
|
465
|
-
break;
|
|
466
|
-
}
|
|
467
|
-
|
|
468
|
-
const ctrls: Register[] = controls || [];
|
|
469
|
-
const qRegs: Register[] = [...ctrls, ...targets].filter(
|
|
545
|
+
const qRegs: Register[] = getOperationRegisters(operation).filter(
|
|
470
546
|
({ result }) => result === undefined,
|
|
471
547
|
);
|
|
472
548
|
if (qRegs.length === 0) return [-1, -1];
|
|
@@ -527,6 +603,8 @@ const _removeOp = (
|
|
|
527
603
|
}
|
|
528
604
|
}
|
|
529
605
|
|
|
606
|
+
circuitEvents.decrementQubitUseCountForOp(sourceOperation);
|
|
607
|
+
|
|
530
608
|
if (sourceOperation.kind === "measurement") {
|
|
531
609
|
for (const result of sourceOperation.results) {
|
|
532
610
|
_updateMeasurementLines(circuitEvents, result.qubit);
|
|
@@ -544,6 +622,7 @@ const _updateMeasurementLines = (
|
|
|
544
622
|
circuitEvents: CircuitEvents,
|
|
545
623
|
wireIndex: number,
|
|
546
624
|
) => {
|
|
625
|
+
_ensureQubitCount(circuitEvents, wireIndex);
|
|
547
626
|
let resultIndex = 0;
|
|
548
627
|
for (const col of circuitEvents.componentGrid) {
|
|
549
628
|
for (const comp of col.components) {
|
|
@@ -561,6 +640,22 @@ const _updateMeasurementLines = (
|
|
|
561
640
|
resultIndex > 0 ? resultIndex : undefined;
|
|
562
641
|
};
|
|
563
642
|
|
|
643
|
+
/**
|
|
644
|
+
* Ensure that the qubit count in the circuit is sufficient for the given wire index.
|
|
645
|
+
*
|
|
646
|
+
* @param circuitEvents The CircuitEvents instance to handle circuit-related events.
|
|
647
|
+
* @param wireIndex The index of the wire to check.
|
|
648
|
+
*/
|
|
649
|
+
const _ensureQubitCount = (circuitEvents: CircuitEvents, wireIndex: number) => {
|
|
650
|
+
while (circuitEvents.qubits.length <= wireIndex) {
|
|
651
|
+
circuitEvents.qubits.push({
|
|
652
|
+
id: circuitEvents.qubits.length,
|
|
653
|
+
numResults: undefined,
|
|
654
|
+
});
|
|
655
|
+
circuitEvents.qubitUseCounts.push(0);
|
|
656
|
+
}
|
|
657
|
+
};
|
|
658
|
+
|
|
564
659
|
export {
|
|
565
660
|
moveOperation,
|
|
566
661
|
addOperation,
|
|
@@ -568,4 +663,6 @@ export {
|
|
|
568
663
|
findAndRemoveOperations,
|
|
569
664
|
addControl,
|
|
570
665
|
removeControl,
|
|
666
|
+
resolveOverlappingOperations,
|
|
667
|
+
removeTrailingUnusedQubits,
|
|
571
668
|
};
|