qsharp-lang 1.14.5-dev → 1.15.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 +1 -1
- package/dist/compiler/compiler.d.ts +1 -1
- package/dist/compiler/compiler.js +6 -1
- package/dist/debug-service/debug-service.d.ts +1 -1
- package/dist/debug-service/debug-service.js +6 -1
- package/dist/katas-content.generated.js +1 -1
- package/dist/katas-content.generated.md.js +1 -1
- package/dist/samples.generated.js +1 -1
- package/dist/shared/circuit.d.ts +86 -30
- package/dist/shared/circuit.js +4 -0
- package/dist/shared/legacyCircuitUpdate.d.ts +9 -0
- package/dist/shared/legacyCircuitUpdate.js +312 -0
- package/dist/shared/register.d.ts +3 -5
- package/dist/utils.d.ts +9 -0
- package/dist/utils.js +41 -0
- 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/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/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/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/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/lib/node/qsc_wasm.cjs +2 -2
- package/lib/node/qsc_wasm_bg.wasm +0 -0
- 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/circuit.ts +11 -0
- package/ux/circuit-vis/circuitManipulation.ts +549 -0
- package/ux/circuit-vis/constants.ts +7 -0
- package/ux/circuit-vis/contextMenu.ts +376 -0
- package/ux/circuit-vis/draggable.ts +352 -0
- package/ux/circuit-vis/events.ts +818 -0
- package/ux/circuit-vis/formatters/gateFormatter.ts +56 -23
- package/ux/circuit-vis/formatters/inputFormatter.ts +38 -7
- package/ux/circuit-vis/formatters/registerFormatter.ts +12 -30
- package/ux/circuit-vis/index.ts +16 -11
- package/ux/circuit-vis/metadata.ts +3 -1
- package/ux/circuit-vis/panel.ts +333 -0
- package/ux/circuit-vis/process.ts +136 -232
- package/ux/circuit-vis/sqore.ts +231 -116
- package/ux/circuit-vis/utils.ts +269 -1
- package/ux/circuit.tsx +71 -37
- package/ux/data.ts +4 -2
- package/ux/index.ts +1 -1
- package/ux/qsharp-circuit.css +260 -4
- package/ux/circuit-vis/styles.ts +0 -236
|
@@ -0,0 +1,333 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
|
2
|
+
// Licensed under the MIT license.
|
|
3
|
+
|
|
4
|
+
import { Ket, Measurement, Operation, Unitary } from "./circuit";
|
|
5
|
+
import {
|
|
6
|
+
gateHeight,
|
|
7
|
+
horizontalGap,
|
|
8
|
+
minGateWidth,
|
|
9
|
+
verticalGap,
|
|
10
|
+
} from "./constants";
|
|
11
|
+
import { formatGate } from "./formatters/gateFormatter";
|
|
12
|
+
import { GateType, Metadata } from "./metadata";
|
|
13
|
+
import { getGateWidth } from "./utils";
|
|
14
|
+
|
|
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
|
+
if (container.querySelector(".panel") == null) {
|
|
21
|
+
const circuit = container.querySelector("svg[id]");
|
|
22
|
+
if (circuit == null) {
|
|
23
|
+
throw new Error("No circuit found in the container");
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
const wrapper = _elem("div", "");
|
|
27
|
+
wrapper.style.display = "block";
|
|
28
|
+
wrapper.style.overflow = "auto";
|
|
29
|
+
wrapper.style.width = "100%";
|
|
30
|
+
wrapper.appendChild(_qubitLineControl());
|
|
31
|
+
container.appendChild(wrapper);
|
|
32
|
+
wrapper.appendChild(circuit);
|
|
33
|
+
|
|
34
|
+
const panelElem = _panel();
|
|
35
|
+
container.prepend(panelElem);
|
|
36
|
+
container.style.display = "flex";
|
|
37
|
+
container.style.height = "80vh";
|
|
38
|
+
container.style.width = "95vw";
|
|
39
|
+
}
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
const _qubitLineControl = (): HTMLElement => {
|
|
43
|
+
const qubitLineControlElem = _elem("div", "qubit-line-control");
|
|
44
|
+
_children(qubitLineControlElem, [
|
|
45
|
+
_title("Add/Remove Qubit Lines:"),
|
|
46
|
+
_addQubitLineControl(),
|
|
47
|
+
_removeQubitLineControl(),
|
|
48
|
+
]);
|
|
49
|
+
return qubitLineControlElem;
|
|
50
|
+
};
|
|
51
|
+
|
|
52
|
+
const _addQubitLineControl = (): HTMLElement => {
|
|
53
|
+
const addQubitLineControlElem = _elem("button", "add-qubit-line");
|
|
54
|
+
addQubitLineControlElem.textContent = "+";
|
|
55
|
+
return addQubitLineControlElem;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
const _removeQubitLineControl = (): HTMLElement => {
|
|
59
|
+
const removeQubitLineControlElem = _elem("button", "remove-qubit-line");
|
|
60
|
+
removeQubitLineControlElem.textContent = "-";
|
|
61
|
+
return removeQubitLineControlElem;
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Function to produce panel element
|
|
66
|
+
* @param context Context object to manage extension state
|
|
67
|
+
* @returns HTML element for panel
|
|
68
|
+
*/
|
|
69
|
+
const _panel = (): HTMLElement => {
|
|
70
|
+
const panelElem = _elem("div");
|
|
71
|
+
panelElem.className = "panel";
|
|
72
|
+
_children(panelElem, [_createToolbox()]);
|
|
73
|
+
return panelElem;
|
|
74
|
+
};
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Function to produce toolbox element
|
|
78
|
+
* @param context Context object to manage extension state
|
|
79
|
+
* @returns HTML element for toolbox
|
|
80
|
+
*/
|
|
81
|
+
const _createToolbox = (): HTMLElement => {
|
|
82
|
+
// Generate gate elements in a 3xN grid
|
|
83
|
+
let prefixX = 0;
|
|
84
|
+
let prefixY = 0;
|
|
85
|
+
const gateElems = Object.keys(toolboxGateDictionary).map((key, index) => {
|
|
86
|
+
const { width: gateWidth } = toMetadata(toolboxGateDictionary[key], 0, 0);
|
|
87
|
+
|
|
88
|
+
// Increment prefixX for every gate, and reset after 2 gates (2 columns)
|
|
89
|
+
if (index % 2 === 0 && index !== 0) {
|
|
90
|
+
prefixX = 0;
|
|
91
|
+
prefixY += gateHeight + verticalGap;
|
|
92
|
+
}
|
|
93
|
+
|
|
94
|
+
const gateElem = _gate(
|
|
95
|
+
toolboxGateDictionary,
|
|
96
|
+
key.toString(),
|
|
97
|
+
prefixX,
|
|
98
|
+
prefixY,
|
|
99
|
+
);
|
|
100
|
+
prefixX += gateWidth + horizontalGap;
|
|
101
|
+
return gateElem;
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
// Generate svg container to store gate elements
|
|
105
|
+
const svgElem = document.createElementNS("http://www.w3.org/2000/svg", "svg");
|
|
106
|
+
svgElem.classList.add("toolbox-panel-svg");
|
|
107
|
+
_childrenSvg(svgElem, gateElems);
|
|
108
|
+
|
|
109
|
+
// Generate toolbox panel
|
|
110
|
+
const toolboxElem = _elem("div", "toolbox-panel");
|
|
111
|
+
_children(toolboxElem, [_title("Toolbox")]);
|
|
112
|
+
toolboxElem.appendChild(svgElem);
|
|
113
|
+
|
|
114
|
+
return toolboxElem;
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Factory function to produce HTML element
|
|
119
|
+
* @param tag Tag name
|
|
120
|
+
* @param className Class name
|
|
121
|
+
* @returns HTML element
|
|
122
|
+
*/
|
|
123
|
+
const _elem = (tag: string, className?: string): HTMLElement => {
|
|
124
|
+
const _elem = document.createElement(tag);
|
|
125
|
+
if (className) {
|
|
126
|
+
_elem.className = className;
|
|
127
|
+
}
|
|
128
|
+
return _elem;
|
|
129
|
+
};
|
|
130
|
+
|
|
131
|
+
/**
|
|
132
|
+
* Append all child elements to a parent HTML element
|
|
133
|
+
* @param parentElem Parent HTML element
|
|
134
|
+
* @param childElems Array of HTML child elements
|
|
135
|
+
* @returns Parent HTML element with all children appended
|
|
136
|
+
*/
|
|
137
|
+
const _children = (
|
|
138
|
+
parentElem: HTMLElement,
|
|
139
|
+
childElems: HTMLElement[],
|
|
140
|
+
): HTMLElement => {
|
|
141
|
+
childElems.map((elem) => parentElem.appendChild(elem));
|
|
142
|
+
return parentElem;
|
|
143
|
+
};
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Append all child elements to a parent SVG element
|
|
147
|
+
* @param parentElem Parent SVG element
|
|
148
|
+
* @param childElems Array of SVG child elements
|
|
149
|
+
* @returns Parent SVG element with all children appended
|
|
150
|
+
*/
|
|
151
|
+
const _childrenSvg = (
|
|
152
|
+
parentElem: SVGElement,
|
|
153
|
+
childElems: SVGElement[],
|
|
154
|
+
): SVGElement => {
|
|
155
|
+
childElems.map((elem) => parentElem.appendChild(elem));
|
|
156
|
+
return parentElem;
|
|
157
|
+
};
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Function to produce title element
|
|
161
|
+
* @param text Text
|
|
162
|
+
* @returns Title element
|
|
163
|
+
*/
|
|
164
|
+
const _title = (text: string): HTMLElement => {
|
|
165
|
+
const titleElem = _elem("h2");
|
|
166
|
+
titleElem.className = "title";
|
|
167
|
+
titleElem.textContent = text;
|
|
168
|
+
return titleElem;
|
|
169
|
+
};
|
|
170
|
+
|
|
171
|
+
/**
|
|
172
|
+
* Wrapper to generate metadata based on _opToMetadata with mock registers and limited support
|
|
173
|
+
* @param operation Operation object
|
|
174
|
+
* @param x x coordinate at starting point from the left
|
|
175
|
+
* @param y y coordinate at starting point from the top
|
|
176
|
+
* @returns Metadata object
|
|
177
|
+
*/
|
|
178
|
+
const toMetadata = (
|
|
179
|
+
operation: Operation | undefined,
|
|
180
|
+
x: number,
|
|
181
|
+
y: number,
|
|
182
|
+
): Metadata => {
|
|
183
|
+
const target = y + 1 + gateHeight / 2; // offset by 1 for top padding
|
|
184
|
+
const metadata: Metadata = {
|
|
185
|
+
type: GateType.Invalid,
|
|
186
|
+
x: x + 1 + minGateWidth / 2, // offset by 1 for left padding
|
|
187
|
+
controlsY: [],
|
|
188
|
+
targetsY: [target],
|
|
189
|
+
label: "",
|
|
190
|
+
width: -1,
|
|
191
|
+
};
|
|
192
|
+
|
|
193
|
+
if (operation === undefined) return metadata;
|
|
194
|
+
|
|
195
|
+
switch (operation.kind) {
|
|
196
|
+
case "unitary": {
|
|
197
|
+
const { gate, controls } = operation;
|
|
198
|
+
|
|
199
|
+
if (gate === "SWAP") {
|
|
200
|
+
metadata.type = GateType.Swap;
|
|
201
|
+
} else if (controls && controls.length > 0) {
|
|
202
|
+
metadata.type =
|
|
203
|
+
gate === "X" ? GateType.Cnot : GateType.ControlledUnitary;
|
|
204
|
+
metadata.label = gate;
|
|
205
|
+
if (gate !== "X") {
|
|
206
|
+
metadata.targetsY = [[target]];
|
|
207
|
+
}
|
|
208
|
+
} else if (gate === "X") {
|
|
209
|
+
metadata.type = GateType.X;
|
|
210
|
+
metadata.label = gate;
|
|
211
|
+
} else {
|
|
212
|
+
metadata.type = GateType.Unitary;
|
|
213
|
+
metadata.label = gate;
|
|
214
|
+
metadata.targetsY = [[target]];
|
|
215
|
+
}
|
|
216
|
+
break;
|
|
217
|
+
}
|
|
218
|
+
case "measurement":
|
|
219
|
+
metadata.type = GateType.Measure;
|
|
220
|
+
metadata.controlsY = [target];
|
|
221
|
+
break;
|
|
222
|
+
case "ket":
|
|
223
|
+
metadata.type = GateType.Ket;
|
|
224
|
+
metadata.label = operation.gate;
|
|
225
|
+
metadata.targetsY = [[target]];
|
|
226
|
+
break;
|
|
227
|
+
}
|
|
228
|
+
|
|
229
|
+
if (operation.args !== undefined && operation.args.length > 0)
|
|
230
|
+
metadata.displayArgs = operation.args[0];
|
|
231
|
+
|
|
232
|
+
metadata.width = getGateWidth(metadata);
|
|
233
|
+
metadata.x = x + 1 + metadata.width / 2; // offset by 1 for left padding
|
|
234
|
+
|
|
235
|
+
return metadata;
|
|
236
|
+
};
|
|
237
|
+
|
|
238
|
+
/**
|
|
239
|
+
* Generate an SVG gate element for the Toolbox panel based on the type of gate.
|
|
240
|
+
* This function retrieves the operation metadata from the gate dictionary,
|
|
241
|
+
* formats the gate, and returns the corresponding SVG element.
|
|
242
|
+
*
|
|
243
|
+
* @param gateDictionary - The dictionary containing gate operations.
|
|
244
|
+
* @param type - The type of gate. Example: 'H' or 'X'.
|
|
245
|
+
* @param x - The x coordinate at the starting point from the left.
|
|
246
|
+
* @param y - The y coordinate at the starting point from the top.
|
|
247
|
+
* @returns The generated SVG element representing the gate.
|
|
248
|
+
* @throws Will throw an error if the gate type is not available in the dictionary.
|
|
249
|
+
*/
|
|
250
|
+
const _gate = (
|
|
251
|
+
gateDictionary: GateDictionary,
|
|
252
|
+
type: string,
|
|
253
|
+
x: number,
|
|
254
|
+
y: number,
|
|
255
|
+
): SVGElement => {
|
|
256
|
+
const gate = gateDictionary[type];
|
|
257
|
+
if (gate == null) throw new Error(`Gate ${type} not available`);
|
|
258
|
+
const metadata = toMetadata(gate, x, y);
|
|
259
|
+
metadata.dataAttributes = { type: type };
|
|
260
|
+
const gateElem = formatGate(metadata).cloneNode(true) as SVGElement;
|
|
261
|
+
gateElem.setAttribute("toolbox-item", "true");
|
|
262
|
+
|
|
263
|
+
return gateElem;
|
|
264
|
+
};
|
|
265
|
+
|
|
266
|
+
/**
|
|
267
|
+
* Interface for gate dictionary
|
|
268
|
+
*/
|
|
269
|
+
interface GateDictionary {
|
|
270
|
+
[index: string]: Operation;
|
|
271
|
+
}
|
|
272
|
+
|
|
273
|
+
/**
|
|
274
|
+
* Function to create a unitary operation
|
|
275
|
+
*
|
|
276
|
+
* @param gate - The name of the gate
|
|
277
|
+
* @returns Unitary operation object
|
|
278
|
+
*/
|
|
279
|
+
const _makeUnitary = (gate: string): Unitary => {
|
|
280
|
+
return {
|
|
281
|
+
kind: "unitary",
|
|
282
|
+
gate: gate,
|
|
283
|
+
targets: [{ qubit: 0 }],
|
|
284
|
+
};
|
|
285
|
+
};
|
|
286
|
+
|
|
287
|
+
/**
|
|
288
|
+
* Function to create a measurement operation
|
|
289
|
+
*
|
|
290
|
+
* @param gate - The name of the gate
|
|
291
|
+
* @returns Unitary operation object
|
|
292
|
+
*/
|
|
293
|
+
const _makeMeasurement = (gate: string): Measurement => {
|
|
294
|
+
return {
|
|
295
|
+
kind: "measurement",
|
|
296
|
+
gate: gate,
|
|
297
|
+
qubits: [{ qubit: 0 }],
|
|
298
|
+
results: [{ qubit: 0, result: 0 }],
|
|
299
|
+
};
|
|
300
|
+
};
|
|
301
|
+
|
|
302
|
+
const _makeKet = (gate: string): Ket => {
|
|
303
|
+
return {
|
|
304
|
+
kind: "ket",
|
|
305
|
+
gate: gate,
|
|
306
|
+
targets: [{ qubit: 0 }],
|
|
307
|
+
};
|
|
308
|
+
};
|
|
309
|
+
|
|
310
|
+
/**
|
|
311
|
+
* Object for default gate dictionary
|
|
312
|
+
*/
|
|
313
|
+
const toolboxGateDictionary: GateDictionary = {
|
|
314
|
+
RX: _makeUnitary("Rx"),
|
|
315
|
+
X: _makeUnitary("X"),
|
|
316
|
+
RY: _makeUnitary("Ry"),
|
|
317
|
+
Y: _makeUnitary("Y"),
|
|
318
|
+
RZ: _makeUnitary("Rz"),
|
|
319
|
+
Z: _makeUnitary("Z"),
|
|
320
|
+
S: _makeUnitary("S"),
|
|
321
|
+
T: _makeUnitary("T"),
|
|
322
|
+
H: _makeUnitary("H"),
|
|
323
|
+
SX: _makeUnitary("SX"),
|
|
324
|
+
Reset: _makeKet("0"),
|
|
325
|
+
ResetOne: _makeKet("1"),
|
|
326
|
+
Measure: _makeMeasurement("Measure"),
|
|
327
|
+
};
|
|
328
|
+
|
|
329
|
+
toolboxGateDictionary["RX"].params = [{ name: "theta", type: "Double" }];
|
|
330
|
+
toolboxGateDictionary["RY"].params = [{ name: "theta", type: "Double" }];
|
|
331
|
+
toolboxGateDictionary["RZ"].params = [{ name: "theta", type: "Double" }];
|
|
332
|
+
|
|
333
|
+
export { createPanel, toolboxGateDictionary, toMetadata };
|