qsharp-lang 1.25.7-dev → 1.26.0
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/data-structures/circuit.d.ts +8 -1
- package/docs/Microsoft.Quantum.Core/IsRangeEmpty.md +1 -1
- package/docs/Microsoft.Quantum.Core/Length.md +1 -1
- package/docs/Microsoft.Quantum.Core/RangeEnd.md +1 -1
- package/docs/Microsoft.Quantum.Core/RangeStart.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/ApplyOperationPowerCA.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/ApplyQPE.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/MapPauliAxis.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/Complex.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/ConfigureQubitLoss.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 +1 -1
- 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 +1 -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/IsLossResult.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/MResetZChecked.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/EnableMemoryComputeArchitecture.md +1 -1
- package/docs/Std.ResourceEstimation/EndEstimateCaching.md +1 -1
- package/docs/Std.ResourceEstimation/EndRepeatEstimates.md +1 -1
- package/docs/Std.ResourceEstimation/LeastFrequentlyUsed.md +1 -1
- package/docs/Std.ResourceEstimation/LeastRecentlyUsed.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/lib/nodejs/qsc_wasm.cjs +2 -2
- package/lib/nodejs/qsc_wasm.d.cts +1 -1
- package/lib/nodejs/qsc_wasm_bg.wasm +0 -0
- package/lib/web/qsc_wasm.d.ts +1 -1
- package/lib/web/qsc_wasm.js +2 -2
- package/lib/web/qsc_wasm_bg.wasm +0 -0
- package/package.json +1 -1
- package/ux/circuit-vis/constants.ts +4 -4
- package/ux/circuit-vis/draggable.ts +1 -1
- package/ux/circuit-vis/events.ts +3 -12
- package/ux/circuit-vis/formatters/gateFormatter.ts +168 -73
- package/ux/circuit-vis/formatters/registerFormatter.ts +7 -2
- package/ux/circuit-vis/gateRenderData.ts +3 -1
- package/ux/circuit-vis/index.ts +9 -1
- package/ux/circuit-vis/process.ts +64 -87
- package/ux/circuit-vis/sqore.ts +103 -55
- package/ux/circuit-vis/utils.ts +9 -19
- package/ux/circuit.tsx +12 -95
- package/ux/qsharp-circuit.css +5 -47
|
@@ -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: 02/
|
|
5
|
+
ms.date: 02/28/2026
|
|
6
6
|
qsharp.kind: function
|
|
7
7
|
qsharp.package: __Std__
|
|
8
8
|
qsharp.namespace: Std.ResourceEstimation
|
|
@@ -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: 02/
|
|
5
|
+
ms.date: 02/28/2026
|
|
6
6
|
qsharp.kind: operation
|
|
7
7
|
qsharp.package: __Std__
|
|
8
8
|
qsharp.namespace: Std.StatePreparation
|
|
@@ -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: 02/
|
|
5
|
+
ms.date: 02/28/2026
|
|
6
6
|
qsharp.kind: operation
|
|
7
7
|
qsharp.package: __Std__
|
|
8
8
|
qsharp.namespace: Std.StatePreparation
|
|
@@ -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: 02/
|
|
5
|
+
ms.date: 02/28/2026
|
|
6
6
|
qsharp.kind: operation
|
|
7
7
|
qsharp.package: __Std__
|
|
8
8
|
qsharp.namespace: Std.StatePreparation
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
uid: Qdk.Std.TableLookup.Select
|
|
3
3
|
title: Select operation
|
|
4
4
|
description: "Q# Select operation: Performs table lookup using a SELECT network"
|
|
5
|
-
ms.date: 02/
|
|
5
|
+
ms.date: 02/28/2026
|
|
6
6
|
qsharp.kind: operation
|
|
7
7
|
qsharp.package: __Std__
|
|
8
8
|
qsharp.namespace: Std.TableLookup
|
package/docs/index.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
uid: Microsoft.Quantum.apiref-toc
|
|
3
3
|
title: Q# standard libraries for the Microsoft Quantum Development Kit
|
|
4
4
|
description: Table of contents for the Q# standard libraries for Microsoft Quantum Development Kit
|
|
5
|
-
ms.date: 02/
|
|
5
|
+
ms.date: 02/28/2026
|
|
6
6
|
ms.topic: landing-page
|
|
7
7
|
---
|
|
8
8
|
|
package/lib/nodejs/qsc_wasm.cjs
CHANGED
|
@@ -1570,8 +1570,8 @@ module.exports.__wbindgen_cb_drop = function(arg0) {
|
|
|
1570
1570
|
return ret;
|
|
1571
1571
|
};
|
|
1572
1572
|
|
|
1573
|
-
module.exports.
|
|
1574
|
-
const ret = makeMutClosure(arg0, arg1,
|
|
1573
|
+
module.exports.__wbindgen_closure_wrapper6736 = function(arg0, arg1, arg2) {
|
|
1574
|
+
const ret = makeMutClosure(arg0, arg1, 2132, __wbg_adapter_52);
|
|
1575
1575
|
return addHeapObject(ret);
|
|
1576
1576
|
};
|
|
1577
1577
|
|
|
@@ -289,7 +289,7 @@ export interface ITestDescriptor {
|
|
|
289
289
|
}
|
|
290
290
|
|
|
291
291
|
export interface ICircuitConfig {
|
|
292
|
-
generationMethod: "simulate" | "classicalEval";
|
|
292
|
+
generationMethod: "simulate" | "classicalEval" | "static";
|
|
293
293
|
maxOperations: number;
|
|
294
294
|
sourceLocations: boolean;
|
|
295
295
|
groupByScope: boolean;
|
|
Binary file
|
package/lib/web/qsc_wasm.d.ts
CHANGED
|
@@ -289,7 +289,7 @@ export interface ITestDescriptor {
|
|
|
289
289
|
}
|
|
290
290
|
|
|
291
291
|
export interface ICircuitConfig {
|
|
292
|
-
generationMethod: "simulate" | "classicalEval";
|
|
292
|
+
generationMethod: "simulate" | "classicalEval" | "static";
|
|
293
293
|
maxOperations: number;
|
|
294
294
|
sourceLocations: boolean;
|
|
295
295
|
groupByScope: boolean;
|
package/lib/web/qsc_wasm.js
CHANGED
|
@@ -1525,8 +1525,8 @@ function __wbg_get_imports() {
|
|
|
1525
1525
|
const ret = false;
|
|
1526
1526
|
return ret;
|
|
1527
1527
|
};
|
|
1528
|
-
imports.wbg.
|
|
1529
|
-
const ret = makeMutClosure(arg0, arg1,
|
|
1528
|
+
imports.wbg.__wbindgen_closure_wrapper6736 = function(arg0, arg1, arg2) {
|
|
1529
|
+
const ret = makeMutClosure(arg0, arg1, 2132, __wbg_adapter_52);
|
|
1530
1530
|
return addHeapObject(ret);
|
|
1531
1531
|
};
|
|
1532
1532
|
imports.wbg.__wbindgen_debug_string = function(arg0, arg1) {
|
package/lib/web/qsc_wasm_bg.wasm
CHANGED
|
Binary file
|
package/package.json
CHANGED
|
@@ -32,10 +32,10 @@ export const groupBottomPadding = 10;
|
|
|
32
32
|
/** Top padding inside group box. */
|
|
33
33
|
export const groupTopPadding =
|
|
34
34
|
groupBottomPadding + labelFontSize + groupLabelPaddingY;
|
|
35
|
-
/** Additional offset for control
|
|
36
|
-
export const
|
|
37
|
-
/**
|
|
38
|
-
export const
|
|
35
|
+
/** Additional offset for the classical control circle. */
|
|
36
|
+
export const controlCircleOffset = 40;
|
|
37
|
+
/** Classical control circle radius. */
|
|
38
|
+
export const controlCircleRadius = 15;
|
|
39
39
|
/** Default font size for gate arguments. */
|
|
40
40
|
export const argsFontSize = 12;
|
|
41
41
|
/** Starting x coord for each register wire. */
|
|
@@ -362,7 +362,7 @@ const _dropzoneLayer = (context: Context) => {
|
|
|
362
362
|
);
|
|
363
363
|
|
|
364
364
|
columnOps.components.forEach((op, opIndex) => {
|
|
365
|
-
const [minTarget, maxTarget] = getMinMaxRegIdx(op
|
|
365
|
+
const [minTarget, maxTarget] = getMinMaxRegIdx(op);
|
|
366
366
|
// Add dropzones before the first target
|
|
367
367
|
while (wireIndex <= maxTarget) {
|
|
368
368
|
dropzoneLayer.appendChild(makeBox(opIndex, true));
|
package/ux/circuit-vis/events.ts
CHANGED
|
@@ -413,10 +413,7 @@ class CircuitEvents {
|
|
|
413
413
|
return;
|
|
414
414
|
|
|
415
415
|
// Add temporary dropzones specific to this operation
|
|
416
|
-
const [minTarget, maxTarget] = getMinMaxRegIdx(
|
|
417
|
-
this.selectedOperation,
|
|
418
|
-
this.wireData.length,
|
|
419
|
-
);
|
|
416
|
+
const [minTarget, maxTarget] = getMinMaxRegIdx(this.selectedOperation);
|
|
420
417
|
for (let wire = minTarget; wire <= maxTarget; wire++) {
|
|
421
418
|
if (wire === this.selectedWire) continue;
|
|
422
419
|
const indexes = locationStringToIndexes(selectedLocation);
|
|
@@ -921,17 +918,11 @@ class CircuitEvents {
|
|
|
921
918
|
);
|
|
922
919
|
if (!selectedOperationParent) return;
|
|
923
920
|
|
|
924
|
-
const [minTarget, maxTarget] = getMinMaxRegIdx(
|
|
925
|
-
selectedOperation,
|
|
926
|
-
this.wireData.length,
|
|
927
|
-
);
|
|
921
|
+
const [minTarget, maxTarget] = getMinMaxRegIdx(selectedOperation);
|
|
928
922
|
selectedOperationParent[columnIndex].components.forEach(
|
|
929
923
|
(op, opIndex) => {
|
|
930
924
|
if (opIndex === position) return; // Don't check the selected operation against itself
|
|
931
|
-
const [minOp, maxOp] = getMinMaxRegIdx(
|
|
932
|
-
op,
|
|
933
|
-
this.wireData.length,
|
|
934
|
-
);
|
|
925
|
+
const [minOp, maxOp] = getMinMaxRegIdx(op);
|
|
935
926
|
// Check if selectedOperation's range overlaps with op's range
|
|
936
927
|
if (
|
|
937
928
|
(minOp >= minTarget && minOp <= maxTarget) ||
|
|
@@ -7,13 +7,13 @@ import {
|
|
|
7
7
|
gateHeight,
|
|
8
8
|
labelFontSize,
|
|
9
9
|
argsFontSize,
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
controlCircleRadius,
|
|
11
|
+
controlCircleOffset,
|
|
12
12
|
groupPaddingX,
|
|
13
|
-
classicalRegHeight,
|
|
14
13
|
groupTopPadding,
|
|
15
14
|
labelPaddingX,
|
|
16
15
|
groupLabelPaddingY,
|
|
16
|
+
groupBottomPadding,
|
|
17
17
|
} from "../constants.js";
|
|
18
18
|
import {
|
|
19
19
|
createSvgElement,
|
|
@@ -107,15 +107,10 @@ const _createGate = (
|
|
|
107
107
|
// `GateType.Group` corresponds to an *expanded* group, which will contain clickable gates
|
|
108
108
|
// so therefore should not itself be clickable
|
|
109
109
|
if (renderData.link && renderData.type !== GateType.Group) {
|
|
110
|
-
const linkElem =
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
// Add title as a child <title> element for accessibility and hover tooltip
|
|
116
|
-
const titleElem = createSvgElement("title");
|
|
117
|
-
titleElem.textContent = renderData.link.title;
|
|
118
|
-
linkElem.appendChild(titleElem);
|
|
110
|
+
const linkElem = createLinkElement(
|
|
111
|
+
renderData.link.href,
|
|
112
|
+
renderData.link.title,
|
|
113
|
+
);
|
|
119
114
|
|
|
120
115
|
// Add the gate elements as children of the link
|
|
121
116
|
for (const e of svgElems) {
|
|
@@ -145,7 +140,8 @@ const _createGate = (
|
|
|
145
140
|
const _zoomButton = (renderData: GateRenderData): SVGElement | null => {
|
|
146
141
|
if (renderData == undefined) return null;
|
|
147
142
|
|
|
148
|
-
const
|
|
143
|
+
const { x: gateBoundingBoxX, y: gateBoundingBoxY } =
|
|
144
|
+
_gateBoundingBox(renderData);
|
|
149
145
|
let { dataAttributes } = renderData;
|
|
150
146
|
dataAttributes = dataAttributes || {};
|
|
151
147
|
|
|
@@ -180,15 +176,37 @@ const _zoomButton = (renderData: GateRenderData): SVGElement | null => {
|
|
|
180
176
|
*
|
|
181
177
|
* @param renderData Operation render data.
|
|
182
178
|
*
|
|
183
|
-
* @returns
|
|
179
|
+
* @returns Bounding box of the gate, including any control dots and circles.
|
|
184
180
|
*/
|
|
185
181
|
const _gateBoundingBox = (
|
|
186
182
|
renderData: GateRenderData,
|
|
187
|
-
):
|
|
188
|
-
const {
|
|
183
|
+
): { x: number; y: number; width: number; height: number } => {
|
|
184
|
+
const {
|
|
185
|
+
x: centerX,
|
|
186
|
+
width,
|
|
187
|
+
targetsY,
|
|
188
|
+
controlsY,
|
|
189
|
+
topPadding,
|
|
190
|
+
bottomPadding,
|
|
191
|
+
} = renderData;
|
|
189
192
|
|
|
190
193
|
const x = centerX - width / 2;
|
|
191
|
-
|
|
194
|
+
|
|
195
|
+
// If we are rendering a classically controlled group, we want the bounding box to go around
|
|
196
|
+
// the targets AND controls. This is because the classical control circle is rendered next
|
|
197
|
+
// to the dashed box, and needs to touch the box, like so:
|
|
198
|
+
// ┌╌╌╌╌╌┐
|
|
199
|
+
// ╎ ┌─┐ ╎
|
|
200
|
+
// ─────────┼─│X│─┼─
|
|
201
|
+
// ╎ └─┘ ╎
|
|
202
|
+
// ┌─┐ ╎ ┌─┐ ╎
|
|
203
|
+
// ─│M│─────┼─│Y│─┼─
|
|
204
|
+
// └╥┘ ╭─╮ ╎ └─┘ ╎
|
|
205
|
+
// ╚══╡ ╞═╪═════╪═
|
|
206
|
+
// │c│┄╎ ╎
|
|
207
|
+
// ╰─╯ └╌╌╌╌╌┘
|
|
208
|
+
const ys = targetsY.flatMap((y) => y as number[]).concat(controlsY);
|
|
209
|
+
|
|
192
210
|
const maxY = Math.max(...ys);
|
|
193
211
|
const minY = Math.min(...ys);
|
|
194
212
|
|
|
@@ -213,7 +231,7 @@ const _gateBoundingBox = (
|
|
|
213
231
|
const y = minY - gateHeight / 2 - topPadding;
|
|
214
232
|
const height = maxY - minY + gateHeight + bottomPadding + topPadding;
|
|
215
233
|
|
|
216
|
-
return
|
|
234
|
+
return { x, y, width, height };
|
|
217
235
|
};
|
|
218
236
|
|
|
219
237
|
/**
|
|
@@ -254,6 +272,19 @@ const _measure = (x: number, y: number, wireYs: number[]): SVGElement => {
|
|
|
254
272
|
|
|
255
273
|
const use_katex = true;
|
|
256
274
|
|
|
275
|
+
function createLinkElement(href: string, title: string) {
|
|
276
|
+
const linkElem = createSvgElement("a", {
|
|
277
|
+
href: href,
|
|
278
|
+
class: "qs-circuit-source-link",
|
|
279
|
+
});
|
|
280
|
+
|
|
281
|
+
// Add title as a child <title> element for accessibility and hover tooltip
|
|
282
|
+
const titleElem = createSvgElement("title");
|
|
283
|
+
titleElem.textContent = title;
|
|
284
|
+
linkElem.appendChild(titleElem);
|
|
285
|
+
return linkElem;
|
|
286
|
+
}
|
|
287
|
+
|
|
257
288
|
function _style_gate_text(gate: SVGTextElement) {
|
|
258
289
|
if (!use_katex) return;
|
|
259
290
|
let label = gate.textContent || "";
|
|
@@ -268,6 +299,12 @@ function _style_gate_text(gate: SVGTextElement) {
|
|
|
268
299
|
|
|
269
300
|
label = label.replace(italicChars, `<tspan class='qs-mathtext'>$&</tspan>`);
|
|
270
301
|
|
|
302
|
+
// Subscript any `_0`, `_1`, etc. in the label
|
|
303
|
+
label = label.replace(
|
|
304
|
+
/_(\d+)/g,
|
|
305
|
+
`<tspan baseline-shift="sub" font-size="65%">$1</tspan>`,
|
|
306
|
+
);
|
|
307
|
+
|
|
271
308
|
// Replace a trailing ' with the proper unicode dagger symbol
|
|
272
309
|
label = label.replace(
|
|
273
310
|
/'$/,
|
|
@@ -403,8 +440,12 @@ const _swap = (renderData: GateRenderData): SVGElement => {
|
|
|
403
440
|
const { x: centerX, targetsY } = renderData;
|
|
404
441
|
|
|
405
442
|
// Get SVGs of crosses
|
|
406
|
-
const
|
|
407
|
-
|
|
443
|
+
const {
|
|
444
|
+
x: boundingBoxX,
|
|
445
|
+
y: boundingBoxY,
|
|
446
|
+
width,
|
|
447
|
+
height,
|
|
448
|
+
} = _gateBoundingBox(renderData);
|
|
408
449
|
const ys = targetsY?.flatMap((y) => y as number[]) || [];
|
|
409
450
|
const bg: SVGElement = box(
|
|
410
451
|
boundingBoxX,
|
|
@@ -560,7 +601,7 @@ const _oplus = (x: number, y: number, wireYs: number[]): SVGElement => {
|
|
|
560
601
|
*/
|
|
561
602
|
const _groupedOperations = (renderData: GateRenderData): SVGElement => {
|
|
562
603
|
const { children, label } = renderData;
|
|
563
|
-
const
|
|
604
|
+
const { x, y, width: w, height: h } = _gateBoundingBox(renderData);
|
|
564
605
|
|
|
565
606
|
// Draw dashed box around children gates
|
|
566
607
|
const box: SVGElement = dashedBox(x, y, w, h, "gate-unitary");
|
|
@@ -573,7 +614,16 @@ const _groupedOperations = (renderData: GateRenderData): SVGElement => {
|
|
|
573
614
|
y + groupTopPadding / 2 + groupLabelPaddingY,
|
|
574
615
|
);
|
|
575
616
|
labelText.classList.add("qs-group-label");
|
|
576
|
-
|
|
617
|
+
|
|
618
|
+
if (renderData.link) {
|
|
619
|
+
const link = createLinkElement(renderData.link.href, renderData.link.title);
|
|
620
|
+
// Make the text element clickable
|
|
621
|
+
labelText.style.pointerEvents = "all";
|
|
622
|
+
link.appendChild(labelText);
|
|
623
|
+
elems.push(link);
|
|
624
|
+
} else {
|
|
625
|
+
elems.push(labelText);
|
|
626
|
+
}
|
|
577
627
|
|
|
578
628
|
return _createGate(elems, renderData);
|
|
579
629
|
};
|
|
@@ -590,67 +640,82 @@ const _classicalControlled = (
|
|
|
590
640
|
renderData: GateRenderData,
|
|
591
641
|
padding: number = groupPaddingX,
|
|
592
642
|
): SVGElement => {
|
|
593
|
-
const { controlsY, dataAttributes } =
|
|
594
|
-
|
|
595
|
-
const children: GateRenderData[][][] =
|
|
596
|
-
renderData.children as GateRenderData[][][];
|
|
597
|
-
let { x, width } = renderData;
|
|
643
|
+
const { controlsY, dataAttributes, label, classicalControlIds, children } =
|
|
644
|
+
renderData;
|
|
598
645
|
|
|
599
|
-
const
|
|
646
|
+
const boundingBox = _gateBoundingBox(renderData);
|
|
647
|
+
let { x, width } = boundingBox;
|
|
648
|
+
const { y, height } = boundingBox;
|
|
600
649
|
|
|
601
650
|
const elems: SVGElement[] = [];
|
|
602
651
|
|
|
603
|
-
|
|
604
|
-
|
|
605
|
-
|
|
606
|
-
|
|
607
|
-
|
|
652
|
+
for (let i = 0; i < controlsY.length; i++) {
|
|
653
|
+
const controlY = controlsY[i];
|
|
654
|
+
const label = classicalControlIds?.[i] ?? null;
|
|
655
|
+
// Draw control button and attached dashed line to dashed box
|
|
656
|
+
const controlCircleX: number = x + controlCircleRadius;
|
|
657
|
+
const controlCircle: SVGElement = _controlCircle(
|
|
658
|
+
controlCircleX,
|
|
659
|
+
controlY,
|
|
660
|
+
label,
|
|
661
|
+
);
|
|
662
|
+
const lineY1: number = controlY + controlCircleRadius;
|
|
663
|
+
const lineY2: number =
|
|
664
|
+
controlY + controlCircleRadius + groupBottomPadding / 2;
|
|
665
|
+
const vertLine: SVGElement = dashedLine(
|
|
666
|
+
controlCircleX,
|
|
667
|
+
lineY1,
|
|
668
|
+
controlCircleX,
|
|
669
|
+
lineY2,
|
|
670
|
+
"classical-line",
|
|
671
|
+
);
|
|
672
|
+
const lineEndX = x + controlCircleOffset;
|
|
673
|
+
const horLine: SVGElement = dashedLine(
|
|
674
|
+
controlCircleX,
|
|
675
|
+
lineY2,
|
|
676
|
+
lineEndX,
|
|
677
|
+
lineY2,
|
|
678
|
+
"classical-line",
|
|
679
|
+
);
|
|
608
680
|
|
|
609
|
-
|
|
610
|
-
const childrenZero: SVGElement = formatGates(children[0]);
|
|
611
|
-
childrenZero.setAttribute("class", "gates-zero");
|
|
612
|
-
elems.push(childrenZero);
|
|
613
|
-
|
|
614
|
-
// Get SVG for gates controlled on 1
|
|
615
|
-
const childrenOne: SVGElement = formatGates(children[1]);
|
|
616
|
-
childrenOne.setAttribute("class", "gates-one");
|
|
617
|
-
elems.push(childrenOne);
|
|
681
|
+
elems.push(horLine, vertLine, controlCircle);
|
|
618
682
|
}
|
|
619
683
|
|
|
620
|
-
|
|
621
|
-
const controlCircleX: number = x + controlBtnRadius;
|
|
622
|
-
const controlCircle: SVGElement = _controlCircle(controlCircleX, controlY);
|
|
623
|
-
const lineY1: number = controlY + controlBtnRadius,
|
|
624
|
-
lineY2: number = controlY + classicalRegHeight / 2;
|
|
625
|
-
const vertLine: SVGElement = dashedLine(
|
|
626
|
-
controlCircleX,
|
|
627
|
-
lineY1,
|
|
628
|
-
controlCircleX,
|
|
629
|
-
lineY2,
|
|
630
|
-
"classical-line",
|
|
631
|
-
);
|
|
632
|
-
x += controlBtnOffset;
|
|
633
|
-
const horLine: SVGElement = dashedLine(
|
|
634
|
-
controlCircleX,
|
|
635
|
-
lineY2,
|
|
636
|
-
x,
|
|
637
|
-
lineY2,
|
|
638
|
-
"classical-line",
|
|
639
|
-
);
|
|
684
|
+
x += controlCircleOffset;
|
|
640
685
|
|
|
641
|
-
width = width -
|
|
686
|
+
width = width - controlCircleOffset + (padding - groupPaddingX) * 2;
|
|
642
687
|
x += groupPaddingX - padding;
|
|
643
|
-
const y: number = targetsY[0] - gateHeight / 2 - padding;
|
|
644
|
-
const height: number = targetsY[1] - targetsY[0] + gateHeight + padding * 2;
|
|
645
688
|
|
|
646
689
|
// Draw dashed box around children gates
|
|
647
690
|
const box: SVGElement = dashedBox(x, y, width, height, "classical-container");
|
|
648
691
|
|
|
649
|
-
elems.push(
|
|
692
|
+
elems.push(box);
|
|
693
|
+
|
|
694
|
+
const labelText = _labelText(
|
|
695
|
+
label,
|
|
696
|
+
x + labelPaddingX,
|
|
697
|
+
y + groupTopPadding / 2 + groupLabelPaddingY,
|
|
698
|
+
);
|
|
699
|
+
labelText.classList.add("qs-group-label");
|
|
700
|
+
|
|
701
|
+
if (renderData.link) {
|
|
702
|
+
const link = createLinkElement(renderData.link.href, renderData.link.title);
|
|
703
|
+
// Make the text element clickable
|
|
704
|
+
labelText.style.pointerEvents = "all";
|
|
705
|
+
link.appendChild(labelText);
|
|
706
|
+
elems.push(link);
|
|
707
|
+
} else {
|
|
708
|
+
elems.push(labelText);
|
|
709
|
+
}
|
|
710
|
+
|
|
711
|
+
if (children != null) {
|
|
712
|
+
// Get SVG for gates controlled on 0
|
|
713
|
+
const childrenSvg: SVGElement = formatGates(children);
|
|
714
|
+
elems.push(childrenSvg);
|
|
715
|
+
}
|
|
650
716
|
|
|
651
|
-
// Display controlled operation in initial "unknown" state
|
|
652
717
|
const attributes: { [attr: string]: string } = {
|
|
653
|
-
class: `classically-controlled-group
|
|
718
|
+
class: `classically-controlled-group`,
|
|
654
719
|
};
|
|
655
720
|
if (dataAttributes != null)
|
|
656
721
|
Object.entries(dataAttributes).forEach(
|
|
@@ -664,21 +729,51 @@ const _classicalControlled = (
|
|
|
664
729
|
* Generates the SVG representation of the control circle on a classical register with interactivity support
|
|
665
730
|
* for toggling between bit values (unknown, 1, and 0).
|
|
666
731
|
*
|
|
667
|
-
* @param x
|
|
668
|
-
* @param y
|
|
669
|
-
* @param
|
|
732
|
+
* @param x Center x coord.
|
|
733
|
+
* @param y Center y coord.
|
|
734
|
+
* @param controlId ID label to display inside control circle
|
|
670
735
|
*
|
|
671
736
|
* @returns SVG representation of control circle.
|
|
672
737
|
*/
|
|
673
738
|
const _controlCircle = (
|
|
674
739
|
x: number,
|
|
675
740
|
y: number,
|
|
676
|
-
|
|
741
|
+
controlId: number | null,
|
|
677
742
|
): SVGElement =>
|
|
678
|
-
group([circle(x, y,
|
|
743
|
+
group([circle(x, y, controlCircleRadius), controlLabel(x, y, controlId)], {
|
|
679
744
|
class: "classically-controlled-btn",
|
|
680
745
|
});
|
|
681
746
|
|
|
747
|
+
/**
|
|
748
|
+
* Generates the text element label inside a classical control circle.
|
|
749
|
+
*
|
|
750
|
+
* @param x Center x coord.
|
|
751
|
+
* @param y Center y coord.
|
|
752
|
+
* @param label ID label to display inside control circle
|
|
753
|
+
*
|
|
754
|
+
* @returns SVG representation of control label
|
|
755
|
+
*/
|
|
756
|
+
function controlLabel(x: number, y: number, label: number | null): SVGElement {
|
|
757
|
+
const el: SVGElement = text("", x, y, labelFontSize);
|
|
758
|
+
|
|
759
|
+
// Create text content "c"
|
|
760
|
+
el.appendChild(document.createTextNode("c"));
|
|
761
|
+
|
|
762
|
+
// Create tspan with subscript label
|
|
763
|
+
const tspan = createSvgElement("tspan", {
|
|
764
|
+
"baseline-shift": "sub",
|
|
765
|
+
"font-size": "65%",
|
|
766
|
+
});
|
|
767
|
+
tspan.appendChild(document.createTextNode(String(label)));
|
|
768
|
+
el.appendChild(tspan);
|
|
769
|
+
|
|
770
|
+
el.setAttribute("text-anchor", "start");
|
|
771
|
+
el.setAttribute("dominant-baseline", "middle");
|
|
772
|
+
el.classList.add("qs-maintext");
|
|
773
|
+
|
|
774
|
+
return el;
|
|
775
|
+
}
|
|
776
|
+
|
|
682
777
|
/**
|
|
683
778
|
* Generates the SVG representation of the label text for a gate or grouped operation.
|
|
684
779
|
*
|
|
@@ -38,10 +38,11 @@ const formatRegisters = (
|
|
|
38
38
|
|
|
39
39
|
// Render classical wires
|
|
40
40
|
for (const classical of registers[qId].children || []) {
|
|
41
|
+
const ys: number[] = [];
|
|
41
42
|
for (const gate of allGates.flat()) {
|
|
42
43
|
if (
|
|
43
|
-
gate.type === GateType.Group
|
|
44
|
-
gate.
|
|
44
|
+
gate.type === GateType.Group ||
|
|
45
|
+
gate.type === GateType.ClassicalControlled
|
|
45
46
|
) {
|
|
46
47
|
// Don't render classical wires for a group that is expanded - the wires
|
|
47
48
|
// will be coming out of the measurement operations *inside* the group.
|
|
@@ -49,6 +50,10 @@ const formatRegisters = (
|
|
|
49
50
|
}
|
|
50
51
|
|
|
51
52
|
for (const y of gate.targetsY.flat().filter((y) => y === classical.y)) {
|
|
53
|
+
if (ys.includes(y)) {
|
|
54
|
+
continue;
|
|
55
|
+
}
|
|
56
|
+
ys.push(y);
|
|
52
57
|
// Found the gate that this classical wire originates from. Draw
|
|
53
58
|
// it starting at this gates x-coordinate.
|
|
54
59
|
|
|
@@ -52,7 +52,7 @@ export interface GateRenderData {
|
|
|
52
52
|
/** Gate width. */
|
|
53
53
|
width: number;
|
|
54
54
|
/** Children operations as part of group. */
|
|
55
|
-
children?: GateRenderData[][]
|
|
55
|
+
children?: GateRenderData[][];
|
|
56
56
|
/** Vertical space from the top of this gate to the top of the topmost contained gate. 0 for non-groups. */
|
|
57
57
|
topPadding: number;
|
|
58
58
|
/** Vertical space from the bottom of this gate to the bottom of the bottommost contained gate. 0 for non-groups. */
|
|
@@ -61,4 +61,6 @@ export interface GateRenderData {
|
|
|
61
61
|
dataAttributes?: DataAttributes;
|
|
62
62
|
/** Link href and title for clickable gate. */
|
|
63
63
|
link?: { href: string; title: string };
|
|
64
|
+
/** Labels for the classical control registers (applicable only for GateType.ClassicalControlled). */
|
|
65
|
+
classicalControlIds?: (number | null)[];
|
|
64
66
|
}
|
package/ux/circuit-vis/index.ts
CHANGED
|
@@ -24,9 +24,17 @@ export const draw = (
|
|
|
24
24
|
circuitGroup: CircuitGroup,
|
|
25
25
|
container: HTMLElement,
|
|
26
26
|
options: DrawOptions = {},
|
|
27
|
-
):
|
|
27
|
+
): {
|
|
28
|
+
userSetZoomLevel: (zoomLevel: number) => void;
|
|
29
|
+
} => {
|
|
28
30
|
const sqore = new Sqore(circuitGroup, options);
|
|
29
31
|
sqore.draw(container);
|
|
32
|
+
return {
|
|
33
|
+
userSetZoomLevel: (zoomLevel: number) => {
|
|
34
|
+
sqore.zoomOnResize = false;
|
|
35
|
+
sqore.updateZoomLevel(zoomLevel);
|
|
36
|
+
},
|
|
37
|
+
};
|
|
30
38
|
};
|
|
31
39
|
|
|
32
40
|
export type { DrawOptions, EditorHandlers } from "./sqore.js";
|