qsharp-lang 1.25.4-dev → 1.25.7-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/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 +1 -1
- package/lib/nodejs/qsc_wasm_bg.wasm +0 -0
- package/lib/web/qsc_wasm.js +1 -1
- package/lib/web/qsc_wasm_bg.wasm +0 -0
- package/package.json +2 -1
- package/ux/circuit-vis/angleExpression.ts +133 -0
- package/ux/circuit-vis/contextMenu.ts +8 -73
- package/ux/circuit-vis/events.ts +41 -1
- package/ux/circuit-vis/formatters/inputFormatter.ts +14 -6
- package/ux/circuit-vis/index.ts +12 -4
- package/ux/circuit-vis/panel.ts +65 -28
- package/ux/circuit-vis/sqore.ts +30 -16
- package/ux/circuit-vis/state-viz/stateViz.ts +748 -0
- package/ux/circuit-vis/state-viz/stateVizController.ts +285 -0
- package/ux/circuit-vis/state-viz/worker/index.ts +18 -0
- package/ux/circuit-vis/state-viz/worker/stateCompute.ts +260 -0
- package/ux/circuit-vis/state-viz/worker/stateVizPrep.ts +152 -0
- package/ux/circuit.tsx +15 -26
- package/ux/data.ts +5 -3
- package/ux/index.ts +2 -0
- package/ux/qdk-theme.css +15 -0
- package/ux/qsharp-circuit.css +310 -1
package/ux/circuit-vis/panel.ts
CHANGED
|
@@ -1,7 +1,16 @@
|
|
|
1
1
|
// Copyright (c) Microsoft Corporation.
|
|
2
2
|
// Licensed under the MIT license.
|
|
3
3
|
|
|
4
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
Ket,
|
|
6
|
+
Measurement,
|
|
7
|
+
Operation,
|
|
8
|
+
Unitary,
|
|
9
|
+
type Circuit,
|
|
10
|
+
} from "./circuit.js";
|
|
11
|
+
import { ensureStateVisualization } from "./state-viz/stateVizController.js";
|
|
12
|
+
import type { StateColumn } from "./state-viz/stateViz.js";
|
|
13
|
+
import type { PrepareStateVizOptions } from "./state-viz/worker/stateVizPrep.js";
|
|
5
14
|
import {
|
|
6
15
|
gateHeight,
|
|
7
16
|
horizontalGap,
|
|
@@ -12,55 +21,80 @@ import { formatGate } from "./formatters/gateFormatter.js";
|
|
|
12
21
|
import { GateType, GateRenderData } from "./gateRenderData.js";
|
|
13
22
|
import { getMinGateWidth } from "./utils.js";
|
|
14
23
|
|
|
15
|
-
|
|
16
|
-
* Create a panel for the circuit visualization.
|
|
17
|
-
* @param container HTML element for rendering visualization into
|
|
18
|
-
*/
|
|
19
|
-
const createPanel = (container: HTMLElement): void => {
|
|
20
|
-
// Find or create the wrapper
|
|
24
|
+
const getOrCreateCircuitWrapper = (container: HTMLElement) => {
|
|
21
25
|
let wrapper: HTMLElement | null = container.querySelector(".circuit-wrapper");
|
|
22
|
-
const circuit = container.querySelector("svg.qviz");
|
|
26
|
+
const circuit = container.querySelector("svg.qviz") as SVGElement | null;
|
|
23
27
|
if (circuit == null) {
|
|
24
28
|
throw new Error("No circuit found in the container");
|
|
25
29
|
}
|
|
26
30
|
if (!wrapper) {
|
|
27
|
-
wrapper =
|
|
31
|
+
wrapper = document.createElement("div");
|
|
28
32
|
wrapper.className = "circuit-wrapper";
|
|
29
|
-
wrapper.style.display = "block";
|
|
30
|
-
wrapper.style.overflow = "auto";
|
|
31
|
-
wrapper.style.width = "100%";
|
|
32
33
|
wrapper.appendChild(circuit);
|
|
33
34
|
container.appendChild(wrapper);
|
|
34
35
|
} else if (circuit.parentElement !== wrapper) {
|
|
35
|
-
// If wrapper exists but SVG is not inside, ensure it's appended
|
|
36
36
|
wrapper.appendChild(circuit);
|
|
37
37
|
}
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
return { wrapper, circuit };
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
const attachToolboxPanelIfMissing = (
|
|
43
|
+
container: HTMLElement,
|
|
44
|
+
createToolboxPanel: () => HTMLElement,
|
|
45
|
+
): void => {
|
|
46
|
+
if (container.querySelector(".panel") != null) return;
|
|
47
|
+
container.prepend(createToolboxPanel());
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
const removeEmptyCircuitMessage = (wrapper: HTMLElement): void => {
|
|
40
51
|
const prevMsg = wrapper.querySelector(".empty-circuit-message");
|
|
41
52
|
if (prevMsg) prevMsg.remove();
|
|
53
|
+
};
|
|
42
54
|
|
|
43
|
-
|
|
55
|
+
const addEmptyCircuitMessageIfEmpty = (
|
|
56
|
+
wrapper: HTMLElement,
|
|
57
|
+
circuit: SVGElement,
|
|
58
|
+
): void => {
|
|
44
59
|
const wiresGroup = circuit?.querySelector(".wires");
|
|
45
60
|
if (!wiresGroup || wiresGroup.children.length === 0) {
|
|
46
61
|
const emptyMsg = document.createElement("div");
|
|
47
62
|
emptyMsg.className = "empty-circuit-message";
|
|
48
63
|
emptyMsg.textContent =
|
|
49
64
|
"Your circuit is empty. Drag gates from the toolbox to get started!";
|
|
50
|
-
emptyMsg.style.padding = "2em";
|
|
51
|
-
emptyMsg.style.textAlign = "center";
|
|
52
|
-
emptyMsg.style.color = "#888";
|
|
53
|
-
emptyMsg.style.fontSize = "1.1em";
|
|
54
65
|
wrapper.appendChild(emptyMsg);
|
|
55
66
|
}
|
|
67
|
+
};
|
|
56
68
|
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
69
|
+
const applyCircuitEditorLayoutClasses = (
|
|
70
|
+
container: HTMLElement,
|
|
71
|
+
wrapper: HTMLElement,
|
|
72
|
+
): void => {
|
|
73
|
+
container.classList.add("circuit-editor-container");
|
|
74
|
+
wrapper.classList.add("circuit-wrapper");
|
|
75
|
+
};
|
|
76
|
+
|
|
77
|
+
/**
|
|
78
|
+
* Create a panel for the circuit visualization.
|
|
79
|
+
* @param container HTML element for rendering visualization into
|
|
80
|
+
* @param computeStateVizColumnsForCircuitModel Optional callback to compute
|
|
81
|
+
* state visualization columns from a circuit model, which enables state
|
|
82
|
+
* visualization features when provided.
|
|
83
|
+
*/
|
|
84
|
+
const createPanel = (
|
|
85
|
+
container: HTMLElement,
|
|
86
|
+
computeStateVizColumnsForCircuitModel?: (
|
|
87
|
+
model: Circuit,
|
|
88
|
+
opts?: PrepareStateVizOptions,
|
|
89
|
+
) => Promise<StateColumn[]>,
|
|
90
|
+
): void => {
|
|
91
|
+
const { wrapper, circuit } = getOrCreateCircuitWrapper(container);
|
|
92
|
+
removeEmptyCircuitMessage(wrapper);
|
|
93
|
+
attachToolboxPanelIfMissing(container, _panel);
|
|
94
|
+
addEmptyCircuitMessageIfEmpty(wrapper, circuit);
|
|
95
|
+
applyCircuitEditorLayoutClasses(container, wrapper);
|
|
96
|
+
|
|
97
|
+
ensureStateVisualization(container, computeStateVizColumnsForCircuitModel);
|
|
64
98
|
};
|
|
65
99
|
|
|
66
100
|
/**
|
|
@@ -82,7 +116,6 @@ const enableRunButton = (
|
|
|
82
116
|
|
|
83
117
|
/**
|
|
84
118
|
* Function to produce panel element
|
|
85
|
-
* @param context Context object to manage extension state
|
|
86
119
|
* @returns HTML element for panel
|
|
87
120
|
*/
|
|
88
121
|
const _panel = (): HTMLElement => {
|
|
@@ -94,7 +127,6 @@ const _panel = (): HTMLElement => {
|
|
|
94
127
|
|
|
95
128
|
/**
|
|
96
129
|
* Function to produce toolbox element
|
|
97
|
-
* @param context Context object to manage extension state
|
|
98
130
|
* @returns HTML element for toolbox
|
|
99
131
|
*/
|
|
100
132
|
const _createToolbox = (): HTMLElement => {
|
|
@@ -129,6 +161,11 @@ const _createToolbox = (): HTMLElement => {
|
|
|
129
161
|
const runButtonGroup = _createRunButton(prefixY + gateHeight + 20);
|
|
130
162
|
svgElem.appendChild(runButtonGroup);
|
|
131
163
|
|
|
164
|
+
// Size SVG to content height so the toolbox panel can scroll when window is short
|
|
165
|
+
const totalSvgHeight = prefixY + 2 * gateHeight + 32; // gates + button + padding
|
|
166
|
+
svgElem.setAttribute("height", totalSvgHeight.toString());
|
|
167
|
+
svgElem.setAttribute("width", "100%");
|
|
168
|
+
|
|
132
169
|
// Generate toolbox panel
|
|
133
170
|
const toolboxElem = _elem("div", "toolbox-panel");
|
|
134
171
|
_children(toolboxElem, [_title("Toolbox")]);
|
package/ux/circuit-vis/sqore.ts
CHANGED
|
@@ -25,6 +25,8 @@ import { createDropzones } from "./draggable.js";
|
|
|
25
25
|
import { enableEvents } from "./events.js";
|
|
26
26
|
import { createPanel, enableRunButton } from "./panel.js";
|
|
27
27
|
import { getMinMaxRegIdx } from "./utils.js";
|
|
28
|
+
import type { StateColumn } from "./state-viz/stateViz.js";
|
|
29
|
+
import type { PrepareStateVizOptions } from "./state-viz/worker/stateVizPrep.js";
|
|
28
30
|
|
|
29
31
|
/**
|
|
30
32
|
* Contains render data for visualization.
|
|
@@ -46,12 +48,25 @@ type GateRegistry = {
|
|
|
46
48
|
[location: string]: Operation;
|
|
47
49
|
};
|
|
48
50
|
|
|
51
|
+
export type EditorHandlers = {
|
|
52
|
+
editCallback: (circuitGroup: CircuitGroup) => void;
|
|
53
|
+
// When provided, enables the Run button in the toolbox.
|
|
54
|
+
runCallback?: () => void;
|
|
55
|
+
// Optional callback to offload state visualization computation.
|
|
56
|
+
// When provided (e.g., by the VS Code webview), the state visualizer can
|
|
57
|
+
// compute state in a Web Worker without relying on globals.
|
|
58
|
+
computeStateVizColumnsForCircuitModel?: (
|
|
59
|
+
model: Circuit,
|
|
60
|
+
opts?: PrepareStateVizOptions,
|
|
61
|
+
) => Promise<StateColumn[]>;
|
|
62
|
+
};
|
|
63
|
+
|
|
49
64
|
export type DrawOptions = {
|
|
50
65
|
renderDepth?: number;
|
|
51
|
-
isEditable?: boolean;
|
|
52
|
-
editCallback?: (circuitGroup: CircuitGroup) => void;
|
|
53
|
-
runCallback?: () => void;
|
|
54
66
|
renderLocations?: (l: SourceLocation[]) => { title: string; href: string };
|
|
67
|
+
// When provided, enables editing behaviors (dropzones, run button, etc.) and
|
|
68
|
+
// requires the callbacks necessary to support those behaviors.
|
|
69
|
+
editor?: EditorHandlers;
|
|
55
70
|
};
|
|
56
71
|
|
|
57
72
|
/**
|
|
@@ -65,9 +80,7 @@ export class Sqore {
|
|
|
65
80
|
* Initializes Sqore object.
|
|
66
81
|
*
|
|
67
82
|
* @param circuitGroup Group of circuits to be visualized.
|
|
68
|
-
* @param
|
|
69
|
-
* @param editCallback Callback function to be called when the circuit is edited.
|
|
70
|
-
* @param runCallback Callback function to be called when the circuit is run.
|
|
83
|
+
* @param options Optional rendering/interaction options.
|
|
71
84
|
*/
|
|
72
85
|
constructor(
|
|
73
86
|
public circuitGroup: CircuitGroup,
|
|
@@ -139,17 +152,16 @@ export class Sqore {
|
|
|
139
152
|
}
|
|
140
153
|
this.addGateClickHandlers(container, _circuit);
|
|
141
154
|
|
|
142
|
-
|
|
155
|
+
const editor = this.options.editor;
|
|
156
|
+
const isEditable = editor != null;
|
|
157
|
+
if (isEditable) {
|
|
143
158
|
createDropzones(container, this);
|
|
144
|
-
createPanel(container);
|
|
145
|
-
if (
|
|
146
|
-
|
|
147
|
-
enableRunButton(container, callback);
|
|
159
|
+
createPanel(container, editor.computeStateVizColumnsForCircuitModel);
|
|
160
|
+
if (editor.runCallback) {
|
|
161
|
+
enableRunButton(container, editor.runCallback);
|
|
148
162
|
}
|
|
149
163
|
enableEvents(container, this, () => this.renderCircuit(container));
|
|
150
|
-
|
|
151
|
-
this.options.editCallback(this.minimizeCircuits(this.circuitGroup));
|
|
152
|
-
}
|
|
164
|
+
editor.editCallback(this.minimizeCircuits(this.circuitGroup));
|
|
153
165
|
}
|
|
154
166
|
}
|
|
155
167
|
|
|
@@ -241,12 +253,14 @@ export class Sqore {
|
|
|
241
253
|
// expanded group borders need to fit between qubit wires.
|
|
242
254
|
const rowHeights = getRowHeights(qubits, componentGrid);
|
|
243
255
|
|
|
256
|
+
const isEditable = this.options.editor != null;
|
|
257
|
+
|
|
244
258
|
// Draw the qubit labels.
|
|
245
259
|
// Also calculate other register render data to be used later in the rendering.
|
|
246
260
|
const { qubitLabels, registers, svgHeight } = formatInputs(
|
|
247
261
|
qubits,
|
|
248
262
|
rowHeights,
|
|
249
|
-
|
|
263
|
+
isEditable ? undefined : this.options.renderLocations,
|
|
250
264
|
);
|
|
251
265
|
|
|
252
266
|
// Calculate the render data for the operations.
|
|
@@ -259,7 +273,7 @@ export class Sqore {
|
|
|
259
273
|
topY,
|
|
260
274
|
bottomY,
|
|
261
275
|
registers,
|
|
262
|
-
|
|
276
|
+
isEditable ? undefined : this.options.renderLocations,
|
|
263
277
|
);
|
|
264
278
|
|
|
265
279
|
// Draw the operations.
|