qsharp-lang 1.17.1-dev → 1.17.2-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 +10 -8
- package/dist/browser.js +5 -3
- package/dist/compiler/compiler.d.ts +1 -1
- package/dist/compiler/compiler.js +8 -7
- package/dist/{shared → data-structures}/circuit.d.ts +24 -0
- package/dist/data-structures/circuit.js +130 -0
- package/dist/data-structures/legacyCircuitUpdate.d.ts +16 -0
- package/dist/{shared → data-structures}/legacyCircuitUpdate.js +117 -61
- package/dist/{shared → data-structures}/register.d.ts +4 -0
- package/dist/data-structures/register.js +20 -0
- package/dist/debug-service/debug-service.d.ts +1 -1
- package/dist/debug-service/debug-service.js +1 -1
- package/dist/diagnostics.d.ts +21 -0
- package/dist/diagnostics.js +84 -0
- package/dist/katas-content.generated.js +7 -7
- package/dist/katas-content.generated.md.js +7 -7
- package/dist/main.d.ts +2 -2
- package/dist/main.js +2 -1
- package/dist/project.d.ts +10 -0
- package/dist/project.js +17 -0
- package/dist/samples.generated.js +1 -6
- package/dist/utils.d.ts +2 -10
- package/dist/utils.js +0 -39
- package/dist/workers/common.js +62 -17
- 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 -3
- 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 -3
- 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 -3
- 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 +24 -0
- 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 +51 -0
- 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 +3 -3
- 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 -3
- package/docs/Std.Core/Length.md +1 -1
- package/docs/Std.Core/Repeated.md +1 -1
- package/docs/Std.Core/index.md +1 -3
- 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 -3
- 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 -3
- package/docs/Std.Logical/Xor.md +1 -1
- package/docs/Std.Logical/index.md +1 -3
- 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 -3
- 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 -3
- 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 -3
- 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 -3
- 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 -3
- 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 -3
- package/docs/Std.TableLookup/Select.md +1 -1
- package/docs/Std.TableLookup/index.md +1 -3
- package/docs/index.md +19 -21
- package/docs/toc.yml +2 -0
- package/lib/node/qsc_wasm.cjs +9 -6
- package/lib/node/qsc_wasm.d.cts +2 -1
- package/lib/node/qsc_wasm_bg.wasm +0 -0
- package/lib/web/qsc_wasm.d.ts +3 -2
- package/lib/web/qsc_wasm.js +9 -6
- package/lib/web/qsc_wasm_bg.wasm +0 -0
- package/package.json +4 -3
- package/ux/circuit-vis/circuit.ts +3 -3
- package/ux/circuit-vis/draggable.ts +1 -1
- package/ux/circuit-vis/events.ts +2 -1
- package/ux/circuit-vis/index.ts +3 -1
- package/ux/circuit-vis/panel.ts +64 -1
- package/ux/circuit-vis/register.ts +1 -1
- package/ux/circuit-vis/sqore.ts +7 -1
- package/ux/circuit-vis/utils.ts +47 -0
- package/ux/circuit.tsx +66 -25
- package/ux/data.ts +1 -0
- package/ux/qsharp-circuit.css +31 -0
- package/dist/shared/circuit.js +0 -20
- package/dist/shared/legacyCircuitUpdate.d.ts +0 -9
- package/dist/shared/register.js +0 -10
package/dist/browser.d.ts
CHANGED
|
@@ -1,28 +1,30 @@
|
|
|
1
|
-
import
|
|
2
|
-
import { IProjectHost, TargetProfile, ProjectType } from "../lib/web/qsc_wasm.js";
|
|
1
|
+
import { IProjectHost, ProjectType, TargetProfile } from "../lib/web/qsc_wasm.js";
|
|
3
2
|
import { ICompiler, ICompilerWorker } from "./compiler/compiler.js";
|
|
4
3
|
import { IDebugService, IDebugServiceWorker } from "./debug-service/debug-service.js";
|
|
5
4
|
import { ILanguageService, ILanguageServiceWorker, qsharpGithubUriScheme, qsharpLibraryUriScheme } from "./language-service/language-service.js";
|
|
6
5
|
import { LogLevel, log } from "./log.js";
|
|
6
|
+
import { ProjectLoader } from "./project.js";
|
|
7
7
|
export { qsharpGithubUriScheme, qsharpLibraryUriScheme };
|
|
8
8
|
export declare function loadWasmModule(uriOrBuffer: string | ArrayBuffer): Promise<void>;
|
|
9
9
|
export declare function getLibrarySourceContent(path: string): Promise<string | undefined>;
|
|
10
10
|
export declare function getDebugService(): Promise<IDebugService>;
|
|
11
|
-
export declare function getProjectLoader(host: IProjectHost): Promise<
|
|
11
|
+
export declare function getProjectLoader(host: IProjectHost): Promise<ProjectLoader>;
|
|
12
12
|
export declare function getDebugServiceWorker(worker: string | Worker): IDebugServiceWorker;
|
|
13
13
|
export declare function getCompiler(): Promise<ICompiler>;
|
|
14
14
|
export declare function getCompilerWorker(worker: string | Worker): ICompilerWorker;
|
|
15
15
|
export declare function getLanguageService(host?: IProjectHost): Promise<ILanguageService>;
|
|
16
16
|
export declare function getLanguageServiceWorker(worker: string | Worker): ILanguageServiceWorker;
|
|
17
17
|
export { StepResultId } from "../lib/web/qsc_wasm.js";
|
|
18
|
-
export type { IBreakpointSpan, ICodeAction, ICodeLens, IDocFile, ILocation, IOperationInfo, IPosition, IProjectConfig, IProjectHost, IQSharpError, IRange, IStackFrame, IStructStepResult,
|
|
18
|
+
export type { IBreakpointSpan, ICodeAction, ICodeLens, IDocFile, ILocation, IOperationInfo, IPosition, IProjectConfig, IProjectHost, IQSharpError, IRange, IStackFrame, IStructStepResult, ITestDescriptor, IWorkspaceEdit, VSDiagnostic, } from "../lib/web/qsc_wasm.js";
|
|
19
19
|
export { type Dump, type ShotResult } from "./compiler/common.js";
|
|
20
20
|
export { type CompilerState, type ProgramConfig } from "./compiler/compiler.js";
|
|
21
21
|
export { QscEventTarget } from "./compiler/events.js";
|
|
22
|
+
export { QdkDiagnostics } from "./diagnostics.js";
|
|
22
23
|
export type { LanguageServiceDiagnosticEvent, LanguageServiceEvent, LanguageServiceTestCallablesEvent, } from "./language-service/language-service.js";
|
|
23
|
-
export { default as samples } from "./samples.generated.js";
|
|
24
24
|
export { default as openqasm_samples } from "./openqasm-samples.generated.js";
|
|
25
|
-
export
|
|
26
|
-
export
|
|
25
|
+
export type { ProjectLoader } from "./project.js";
|
|
26
|
+
export { default as samples } from "./samples.generated.js";
|
|
27
|
+
export type { CircuitGroup as CircuitData } from "./data-structures/circuit.js";
|
|
27
28
|
export * as utils from "./utils.js";
|
|
28
|
-
export type
|
|
29
|
+
export { log, type LogLevel, type ProjectType, type TargetProfile };
|
|
30
|
+
export type { ICompiler, ICompilerWorker, IDebugService, IDebugServiceWorker, ILanguageService, ILanguageServiceWorker, };
|
package/dist/browser.js
CHANGED
|
@@ -8,6 +8,7 @@ import { Compiler, compilerProtocol, } from "./compiler/compiler.js";
|
|
|
8
8
|
import { QSharpDebugService, debugServiceProtocol, } from "./debug-service/debug-service.js";
|
|
9
9
|
import { QSharpLanguageService, languageServiceProtocol, qsharpGithubUriScheme, qsharpLibraryUriScheme, } from "./language-service/language-service.js";
|
|
10
10
|
import { log } from "./log.js";
|
|
11
|
+
import { ProjectLoader } from "./project.js";
|
|
11
12
|
import { createProxy } from "./workers/browser.js";
|
|
12
13
|
export { qsharpGithubUriScheme, qsharpLibraryUriScheme };
|
|
13
14
|
// Create once. A module is stateless and can be efficiently passed to WebWorkers.
|
|
@@ -73,7 +74,7 @@ export async function getDebugService() {
|
|
|
73
74
|
}
|
|
74
75
|
export async function getProjectLoader(host) {
|
|
75
76
|
await instantiateWasm();
|
|
76
|
-
return new
|
|
77
|
+
return new ProjectLoader(wasm, host);
|
|
77
78
|
}
|
|
78
79
|
// Create the debugger inside a WebWorker and proxy requests.
|
|
79
80
|
// If the Worker was already created via other means and is ready to receive
|
|
@@ -109,7 +110,8 @@ export function getLanguageServiceWorker(worker) {
|
|
|
109
110
|
}
|
|
110
111
|
export { StepResultId } from "../lib/web/qsc_wasm.js";
|
|
111
112
|
export { QscEventTarget } from "./compiler/events.js";
|
|
112
|
-
export {
|
|
113
|
+
export { QdkDiagnostics } from "./diagnostics.js";
|
|
113
114
|
export { default as openqasm_samples } from "./openqasm-samples.generated.js";
|
|
114
|
-
export {
|
|
115
|
+
export { default as samples } from "./samples.generated.js";
|
|
115
116
|
export * as utils from "./utils.js";
|
|
117
|
+
export { log };
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type CircuitGroup as CircuitData } from "../
|
|
1
|
+
import { type CircuitGroup as CircuitData } from "../data-structures/circuit.js";
|
|
2
2
|
import { IDocFile, IOperationInfo, IPackageGraphSources, IProgramConfig as wasmIProgramConfig, TargetProfile, type VSDiagnostic, ProjectType } from "../../lib/web/qsc_wasm.js";
|
|
3
3
|
import { IServiceProxy, ServiceProtocol, ServiceState } from "../workers/common.js";
|
|
4
4
|
import { IQscEventTarget, QscEventData } from "./events.js";
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
// Copyright (c) Microsoft Corporation.
|
|
2
2
|
// Licensed under the MIT License.
|
|
3
|
-
import { CURRENT_VERSION, } from "../
|
|
3
|
+
import { CURRENT_VERSION, } from "../data-structures/circuit.js";
|
|
4
4
|
import { log } from "../log.js";
|
|
5
5
|
import { eventStringToMsg } from "./common.js";
|
|
6
6
|
import { makeEvent, } from "./events.js";
|
|
7
|
+
import { callAndTransformExceptions } from "../diagnostics.js";
|
|
7
8
|
export class Compiler {
|
|
8
9
|
constructor(wasm) {
|
|
9
10
|
log.info("Constructing a Compiler instance");
|
|
@@ -42,25 +43,25 @@ export class Compiler {
|
|
|
42
43
|
}
|
|
43
44
|
async getRir(program) {
|
|
44
45
|
const config = toWasmProgramConfig(program, program.profile || "adaptive_ri");
|
|
45
|
-
return this.wasm.get_rir(config);
|
|
46
|
+
return callAndTransformExceptions(async () => this.wasm.get_rir(config));
|
|
46
47
|
}
|
|
47
48
|
async run(program, expr, shots, eventHandler) {
|
|
48
49
|
// All results are communicated as events, but if there is a compiler error (e.g. an invalid
|
|
49
50
|
// entry expression or similar), it may throw on run. The caller should expect this promise
|
|
50
51
|
// may reject without all shots running or events firing.
|
|
51
|
-
this.wasm.run(toWasmProgramConfig(program, "unrestricted"), expr, (msg) => onCompilerEvent(msg, eventHandler), shots);
|
|
52
|
+
await callAndTransformExceptions(async () => this.wasm.run(toWasmProgramConfig(program, "unrestricted"), expr, (msg) => onCompilerEvent(msg, eventHandler), shots));
|
|
52
53
|
}
|
|
53
54
|
async runWithPauliNoise(program, expr, shots, pauliNoise, eventHandler) {
|
|
54
|
-
this.wasm.runWithPauliNoise(toWasmProgramConfig(program, "unrestricted"), expr, (msg) => onCompilerEvent(msg, eventHandler), shots, pauliNoise);
|
|
55
|
+
await callAndTransformExceptions(async () => this.wasm.runWithPauliNoise(toWasmProgramConfig(program, "unrestricted"), expr, (msg) => onCompilerEvent(msg, eventHandler), shots, pauliNoise));
|
|
55
56
|
}
|
|
56
57
|
async getQir(program) {
|
|
57
|
-
return this.wasm.get_qir(toWasmProgramConfig(program, "base"));
|
|
58
|
+
return callAndTransformExceptions(async () => this.wasm.get_qir(toWasmProgramConfig(program, "base")));
|
|
58
59
|
}
|
|
59
60
|
async getEstimates(program, expr, params) {
|
|
60
|
-
return this.wasm.get_estimates(toWasmProgramConfig(program, "unrestricted"), expr, params);
|
|
61
|
+
return callAndTransformExceptions(async () => this.wasm.get_estimates(toWasmProgramConfig(program, "unrestricted"), expr, params));
|
|
61
62
|
}
|
|
62
63
|
async getCircuit(program, simulate, operation) {
|
|
63
|
-
const circuit = this.wasm.get_circuit(toWasmProgramConfig(program, "unrestricted"), simulate, operation);
|
|
64
|
+
const circuit = await callAndTransformExceptions(async () => this.wasm.get_circuit(toWasmProgramConfig(program, "unrestricted"), simulate, operation));
|
|
64
65
|
return {
|
|
65
66
|
circuits: [circuit],
|
|
66
67
|
version: CURRENT_VERSION,
|
|
@@ -7,6 +7,10 @@ export interface CircuitGroup {
|
|
|
7
7
|
circuits: Circuit[];
|
|
8
8
|
version: number;
|
|
9
9
|
}
|
|
10
|
+
/**
|
|
11
|
+
* Runtime check: is this a valid CircuitGroup?
|
|
12
|
+
*/
|
|
13
|
+
export declare function isCircuitGroup(obj: any): obj is CircuitGroup;
|
|
10
14
|
/**
|
|
11
15
|
* Circuit to be visualized.
|
|
12
16
|
*/
|
|
@@ -15,10 +19,18 @@ export interface Circuit {
|
|
|
15
19
|
qubits: Qubit[];
|
|
16
20
|
componentGrid: ComponentGrid;
|
|
17
21
|
}
|
|
22
|
+
/**
|
|
23
|
+
* Runtime check: is this a valid Circuit?
|
|
24
|
+
*/
|
|
25
|
+
export declare function isCircuit(obj: any): obj is Circuit;
|
|
18
26
|
export type ComponentGrid = Column[];
|
|
19
27
|
export interface Column {
|
|
20
28
|
components: Component[];
|
|
21
29
|
}
|
|
30
|
+
/**
|
|
31
|
+
* Runtime check: is this a valid Column?
|
|
32
|
+
*/
|
|
33
|
+
export declare function isColumn(obj: any): obj is Column;
|
|
22
34
|
/**
|
|
23
35
|
* Represents a component of a circuit. Currently, the only component is an operation.
|
|
24
36
|
* In the future, this may be extended to include other components.
|
|
@@ -33,6 +45,10 @@ export interface Qubit {
|
|
|
33
45
|
/** Number of measurement results associated to the qubit. */
|
|
34
46
|
numResults?: number;
|
|
35
47
|
}
|
|
48
|
+
/**
|
|
49
|
+
* Runtime check: is this a valid Qubit?
|
|
50
|
+
*/
|
|
51
|
+
export declare function isQubit(obj: any): obj is Qubit;
|
|
36
52
|
/**
|
|
37
53
|
* Base type for operations.
|
|
38
54
|
*/
|
|
@@ -90,6 +106,10 @@ export interface Ket extends BaseOperation {
|
|
|
90
106
|
* Union type for operations.
|
|
91
107
|
*/
|
|
92
108
|
export type Operation = Unitary | Measurement | Ket;
|
|
109
|
+
/**
|
|
110
|
+
* Runtime check: is this a valid Operation?
|
|
111
|
+
*/
|
|
112
|
+
export declare function isOperation(obj: any): obj is Operation;
|
|
93
113
|
/**
|
|
94
114
|
* A parameter for an operation.
|
|
95
115
|
*/
|
|
@@ -99,6 +119,10 @@ export interface Parameter {
|
|
|
99
119
|
/** Parameter's Q# type. */
|
|
100
120
|
type: string;
|
|
101
121
|
}
|
|
122
|
+
/**
|
|
123
|
+
* Runtime check: is this a valid Parameter?
|
|
124
|
+
*/
|
|
125
|
+
export declare function isParameter(obj: any): obj is Parameter;
|
|
102
126
|
/**
|
|
103
127
|
* Conditions on when to render the given operation.
|
|
104
128
|
*/
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
|
2
|
+
// Licensed under the MIT license.
|
|
3
|
+
import { isRegister } from "./register.js";
|
|
4
|
+
/**
|
|
5
|
+
* Current format version.
|
|
6
|
+
*/
|
|
7
|
+
export const CURRENT_VERSION = 1;
|
|
8
|
+
/**
|
|
9
|
+
* Runtime check: is this a valid CircuitGroup?
|
|
10
|
+
*/
|
|
11
|
+
export function isCircuitGroup(obj) {
|
|
12
|
+
return (obj &&
|
|
13
|
+
typeof obj === "object" &&
|
|
14
|
+
typeof obj.version === "number" &&
|
|
15
|
+
Array.isArray(obj.circuits) &&
|
|
16
|
+
obj.circuits.length > 0 &&
|
|
17
|
+
obj.circuits.every(isCircuit));
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Runtime check: is this a valid Circuit?
|
|
21
|
+
*/
|
|
22
|
+
export function isCircuit(obj) {
|
|
23
|
+
return (obj &&
|
|
24
|
+
typeof obj === "object" &&
|
|
25
|
+
Array.isArray(obj.qubits) &&
|
|
26
|
+
obj.qubits.every(isQubit) &&
|
|
27
|
+
Array.isArray(obj.componentGrid) &&
|
|
28
|
+
obj.componentGrid.every(isColumn));
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Runtime check: is this a valid Column?
|
|
32
|
+
*/
|
|
33
|
+
export function isColumn(obj) {
|
|
34
|
+
return (obj &&
|
|
35
|
+
typeof obj === "object" &&
|
|
36
|
+
Array.isArray(obj.components) &&
|
|
37
|
+
obj.components.every(isOperation));
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Runtime check: is this a valid Qubit?
|
|
41
|
+
*/
|
|
42
|
+
export function isQubit(obj) {
|
|
43
|
+
return (obj &&
|
|
44
|
+
typeof obj === "object" &&
|
|
45
|
+
typeof obj.id === "number" &&
|
|
46
|
+
// numResults is optional, but if present must be a number
|
|
47
|
+
(obj.numResults === undefined || typeof obj.numResults === "number"));
|
|
48
|
+
}
|
|
49
|
+
/**
|
|
50
|
+
* Runtime check: is this a valid BaseOperation?
|
|
51
|
+
*/
|
|
52
|
+
function isBaseOperation(obj) {
|
|
53
|
+
return (obj &&
|
|
54
|
+
typeof obj === "object" &&
|
|
55
|
+
typeof obj.gate === "string" &&
|
|
56
|
+
// args is optional, but if present must be an array of strings
|
|
57
|
+
(obj.args === undefined ||
|
|
58
|
+
(Array.isArray(obj.args) &&
|
|
59
|
+
obj.args.every((arg) => typeof arg === "string"))) &&
|
|
60
|
+
// params is optional, but if present must be an array of Parameter
|
|
61
|
+
(obj.params === undefined ||
|
|
62
|
+
(Array.isArray(obj.params) && obj.params.every(isParameter))) &&
|
|
63
|
+
// children is optional, but if present must be a ComponentGrid
|
|
64
|
+
(obj.children === undefined ||
|
|
65
|
+
(Array.isArray(obj.children) && obj.children.every(isColumn))) &&
|
|
66
|
+
// dataAttributes is optional, but if present must be an object with string values
|
|
67
|
+
(obj.dataAttributes === undefined ||
|
|
68
|
+
(typeof obj.dataAttributes === "object" &&
|
|
69
|
+
obj.dataAttributes !== null &&
|
|
70
|
+
Object.values(obj.dataAttributes).every((val) => typeof val === "string"))) &&
|
|
71
|
+
// isConditional is optional, but if present must be boolean
|
|
72
|
+
(obj.isConditional === undefined ||
|
|
73
|
+
typeof obj.isConditional === "boolean") &&
|
|
74
|
+
// conditionalRender is optional, but if present must be a valid enum value
|
|
75
|
+
(obj.conditionalRender === undefined ||
|
|
76
|
+
Object.values(ConditionalRender).includes(obj.conditionalRender)));
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Runtime check: is this a valid Operation?
|
|
80
|
+
*/
|
|
81
|
+
export function isOperation(obj) {
|
|
82
|
+
if (!isBaseOperation(obj))
|
|
83
|
+
return false;
|
|
84
|
+
// Re-cast to any so we can check discriminated fields without narrowing
|
|
85
|
+
const op = obj;
|
|
86
|
+
if (op.kind === undefined || typeof op.kind !== "string")
|
|
87
|
+
return false;
|
|
88
|
+
switch (op.kind) {
|
|
89
|
+
case "unitary":
|
|
90
|
+
return (Array.isArray(op.targets) &&
|
|
91
|
+
op.targets.every(isRegister) &&
|
|
92
|
+
// controls is optional
|
|
93
|
+
(op.controls === undefined ||
|
|
94
|
+
(Array.isArray(op.controls) && op.controls.every(isRegister))) &&
|
|
95
|
+
// isAdjoint is optional
|
|
96
|
+
(op.isAdjoint === undefined || typeof op.isAdjoint === "boolean"));
|
|
97
|
+
case "measurement":
|
|
98
|
+
return (Array.isArray(op.qubits) &&
|
|
99
|
+
op.qubits.every(isRegister) &&
|
|
100
|
+
Array.isArray(op.results) &&
|
|
101
|
+
op.results.every(isRegister));
|
|
102
|
+
case "ket":
|
|
103
|
+
return Array.isArray(op.targets) && op.targets.every(isRegister);
|
|
104
|
+
default:
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
/**
|
|
109
|
+
* Runtime check: is this a valid Parameter?
|
|
110
|
+
*/
|
|
111
|
+
export function isParameter(obj) {
|
|
112
|
+
return (obj &&
|
|
113
|
+
typeof obj === "object" &&
|
|
114
|
+
typeof obj.name === "string" &&
|
|
115
|
+
typeof obj.type === "string");
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Conditions on when to render the given operation.
|
|
119
|
+
*/
|
|
120
|
+
export var ConditionalRender;
|
|
121
|
+
(function (ConditionalRender) {
|
|
122
|
+
/** Always rendered. */
|
|
123
|
+
ConditionalRender[ConditionalRender["Always"] = 0] = "Always";
|
|
124
|
+
/** Render classically-controlled operation when measurement is a zero. */
|
|
125
|
+
ConditionalRender[ConditionalRender["OnZero"] = 1] = "OnZero";
|
|
126
|
+
/** Render classically-controlled operation when measurement is a one. */
|
|
127
|
+
ConditionalRender[ConditionalRender["OnOne"] = 2] = "OnOne";
|
|
128
|
+
/** Render operation as a group of its nested operations. */
|
|
129
|
+
ConditionalRender[ConditionalRender["AsGroup"] = 3] = "AsGroup";
|
|
130
|
+
})(ConditionalRender || (ConditionalRender = {}));
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import { CircuitGroup } from "./circuit.js";
|
|
2
|
+
export type ToCircuitGroupResult = {
|
|
3
|
+
ok: true;
|
|
4
|
+
circuitGroup: CircuitGroup;
|
|
5
|
+
} | {
|
|
6
|
+
ok: false;
|
|
7
|
+
error: string;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Ensures that the given circuit object is a CircuitGroup, doing any
|
|
11
|
+
* necessary conversions from Circuit or legacy formats.
|
|
12
|
+
*
|
|
13
|
+
* @param circuit The circuit to convert.
|
|
14
|
+
* @returns The result of the conversion.
|
|
15
|
+
*/
|
|
16
|
+
export declare function toCircuitGroup(circuit: any): ToCircuitGroupResult;
|
|
@@ -1,13 +1,12 @@
|
|
|
1
1
|
// Copyright (c) Microsoft Corporation.
|
|
2
2
|
// Licensed under the MIT license.
|
|
3
|
-
import {
|
|
4
|
-
import { CURRENT_VERSION, } from "./circuit.js";
|
|
3
|
+
import { CURRENT_VERSION, isCircuit, isCircuitGroup, isOperation, } from "./circuit.js";
|
|
5
4
|
/**
|
|
6
5
|
* Ensures that the given circuit object is a CircuitGroup, doing any
|
|
7
6
|
* necessary conversions from Circuit or legacy formats.
|
|
8
7
|
*
|
|
9
8
|
* @param circuit The circuit to convert.
|
|
10
|
-
* @returns The
|
|
9
|
+
* @returns The result of the conversion.
|
|
11
10
|
*/
|
|
12
11
|
export function toCircuitGroup(circuit) {
|
|
13
12
|
const emptyCircuit = {
|
|
@@ -19,60 +18,96 @@ export function toCircuitGroup(circuit) {
|
|
|
19
18
|
circuits: [emptyCircuit],
|
|
20
19
|
};
|
|
21
20
|
if (circuit && Object.keys(circuit).length === 0) {
|
|
22
|
-
return emptyCircuitGroup;
|
|
21
|
+
return { ok: true, circuitGroup: emptyCircuitGroup };
|
|
23
22
|
}
|
|
24
23
|
if (circuit?.version) {
|
|
25
24
|
const version = circuit.version;
|
|
26
|
-
// If it has a "version" field, it is up-to-date
|
|
27
25
|
if (isCircuitGroup(circuit)) {
|
|
28
|
-
|
|
29
|
-
return circuit;
|
|
26
|
+
return { ok: true, circuitGroup: circuit };
|
|
30
27
|
}
|
|
31
28
|
else if (isCircuit(circuit)) {
|
|
32
|
-
|
|
33
|
-
return {
|
|
34
|
-
version,
|
|
35
|
-
circuits: [circuit],
|
|
36
|
-
};
|
|
29
|
+
return { ok: true, circuitGroup: { version, circuits: [circuit] } };
|
|
37
30
|
}
|
|
38
31
|
else {
|
|
39
|
-
|
|
40
|
-
|
|
32
|
+
return {
|
|
33
|
+
ok: false,
|
|
34
|
+
error: "Unknown schema: file is neither a CircuitGroup nor a Circuit.",
|
|
35
|
+
};
|
|
41
36
|
}
|
|
42
37
|
}
|
|
43
38
|
else if (isCircuit(circuit)) {
|
|
44
|
-
// If it's a Circuit without a version, wrap it in a CircuitGroup
|
|
45
39
|
return {
|
|
46
|
-
|
|
47
|
-
circuits: [circuit],
|
|
40
|
+
ok: true,
|
|
41
|
+
circuitGroup: { version: CURRENT_VERSION, circuits: [circuit] },
|
|
48
42
|
};
|
|
49
43
|
}
|
|
50
|
-
else if (circuit?.operations
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
44
|
+
else if (circuit?.operations &&
|
|
45
|
+
Array.isArray(circuit.operations) &&
|
|
46
|
+
circuit?.qubits &&
|
|
47
|
+
Array.isArray(circuit.qubits)) {
|
|
48
|
+
// If it has "operations" and "qubits", it is a legacy schema
|
|
49
|
+
return tryConvertLegacySchema(circuit);
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
return {
|
|
53
|
+
ok: false,
|
|
54
|
+
error: "Unknown schema: file does not match any known format.",
|
|
55
|
+
};
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Attempts to convert a legacy circuit schema to a CircuitGroup.
|
|
60
|
+
*
|
|
61
|
+
* @param circuit The legacy circuit object to convert.
|
|
62
|
+
* @returns A ToCircuitGroupResult containing the converted CircuitGroup on success,
|
|
63
|
+
* or an error message on failure.
|
|
64
|
+
*/
|
|
65
|
+
function tryConvertLegacySchema(circuit) {
|
|
66
|
+
try {
|
|
67
|
+
const qubits = circuit.qubits.map((qubit, idx) => {
|
|
68
|
+
if (typeof qubit !== "object" ||
|
|
69
|
+
qubit === null ||
|
|
70
|
+
typeof qubit.id !== "number") {
|
|
71
|
+
throw new Error(`Invalid qubit at index ${idx}.`);
|
|
72
|
+
}
|
|
57
73
|
return {
|
|
58
74
|
id: qubit.id,
|
|
59
|
-
numResults: qubit.numChildren || 0,
|
|
75
|
+
numResults: qubit.numChildren || 0,
|
|
60
76
|
};
|
|
61
77
|
});
|
|
62
|
-
const
|
|
78
|
+
const operationList = circuit.operations.map((op, idx) => {
|
|
79
|
+
try {
|
|
80
|
+
return toOperation(op);
|
|
81
|
+
}
|
|
82
|
+
catch (e) {
|
|
83
|
+
throw new Error(`Failed to convert operation at index ${idx}: ${e.message}`);
|
|
84
|
+
}
|
|
85
|
+
});
|
|
86
|
+
if (!operationList.every(isOperation)) {
|
|
87
|
+
return {
|
|
88
|
+
ok: false,
|
|
89
|
+
error: "Unknown schema: file contains invalid operations.",
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
const componentGrid = operationListToGrid(operationList, qubits.length);
|
|
63
93
|
return {
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
94
|
+
ok: true,
|
|
95
|
+
circuitGroup: {
|
|
96
|
+
version: CURRENT_VERSION,
|
|
97
|
+
circuits: [
|
|
98
|
+
{
|
|
99
|
+
qubits,
|
|
100
|
+
componentGrid,
|
|
101
|
+
},
|
|
102
|
+
],
|
|
103
|
+
},
|
|
71
104
|
};
|
|
72
105
|
}
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
106
|
+
catch (e) {
|
|
107
|
+
return {
|
|
108
|
+
ok: false,
|
|
109
|
+
error: `Legacy schema: ${e instanceof Error ? e.message : String(e)}`,
|
|
110
|
+
};
|
|
76
111
|
}
|
|
77
112
|
}
|
|
78
113
|
/**
|
|
@@ -109,7 +144,7 @@ function toOperation(op) {
|
|
|
109
144
|
};
|
|
110
145
|
}
|
|
111
146
|
else {
|
|
112
|
-
const ket = getKetLabel(op.gate);
|
|
147
|
+
const ket = op.gate === undefined ? "" : getKetLabel(op.gate);
|
|
113
148
|
if (ket.length > 0) {
|
|
114
149
|
return {
|
|
115
150
|
...op,
|
|
@@ -141,26 +176,6 @@ function toOperation(op) {
|
|
|
141
176
|
}
|
|
142
177
|
}
|
|
143
178
|
}
|
|
144
|
-
/**
|
|
145
|
-
* Checks if the given object is a CircuitGroup.
|
|
146
|
-
*
|
|
147
|
-
* @param circuit The object to check.
|
|
148
|
-
* @returns True if the object is a CircuitGroup, false otherwise.
|
|
149
|
-
*/
|
|
150
|
-
function isCircuitGroup(circuit) {
|
|
151
|
-
return circuit && Array.isArray(circuit.circuits);
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
* Checks if the given object is a Circuit.
|
|
155
|
-
*
|
|
156
|
-
* @param circuit The object to check.
|
|
157
|
-
* @returns True if the object is a Circuit, false otherwise.
|
|
158
|
-
*/
|
|
159
|
-
function isCircuit(circuit) {
|
|
160
|
-
return (circuit &&
|
|
161
|
-
Array.isArray(circuit.qubits) &&
|
|
162
|
-
Array.isArray(circuit.componentGrid));
|
|
163
|
-
}
|
|
164
179
|
/**
|
|
165
180
|
* Get the label from a ket string.
|
|
166
181
|
*
|
|
@@ -267,10 +282,12 @@ function groupOperations(operations, numQubits) {
|
|
|
267
282
|
const groupedOps = Array.from(Array(numQubits), () => new Array(0));
|
|
268
283
|
operations.forEach((operation, instrIdx) => {
|
|
269
284
|
const [minRegIdx, maxRegIdx] = getMinMaxRegIdx(operation, numQubits);
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
285
|
+
if (minRegIdx > -1 && maxRegIdx > -1) {
|
|
286
|
+
// Add operation also to registers that are in-between target registers
|
|
287
|
+
// so that other gates won't render in the middle.
|
|
288
|
+
for (let i = minRegIdx; i <= maxRegIdx; i++) {
|
|
289
|
+
groupedOps[i].push(instrIdx);
|
|
290
|
+
}
|
|
274
291
|
}
|
|
275
292
|
});
|
|
276
293
|
return groupedOps;
|
|
@@ -311,3 +328,42 @@ function alignOps(ops) {
|
|
|
311
328
|
}
|
|
312
329
|
return paddedOps;
|
|
313
330
|
}
|
|
331
|
+
/**
|
|
332
|
+
* Get the minimum and maximum register indices for a given operation.
|
|
333
|
+
*
|
|
334
|
+
* @param operation The operation for which to get the register indices.
|
|
335
|
+
* @param numQubits The number of qubits in the circuit.
|
|
336
|
+
* @returns A tuple containing the minimum and maximum register indices.
|
|
337
|
+
*/
|
|
338
|
+
function getMinMaxRegIdx(operation, numQubits) {
|
|
339
|
+
let targets;
|
|
340
|
+
let controls;
|
|
341
|
+
switch (operation.kind) {
|
|
342
|
+
case "measurement":
|
|
343
|
+
targets = operation.results;
|
|
344
|
+
controls = operation.qubits;
|
|
345
|
+
break;
|
|
346
|
+
case "unitary":
|
|
347
|
+
targets = operation.targets;
|
|
348
|
+
controls = operation.controls || [];
|
|
349
|
+
break;
|
|
350
|
+
case "ket":
|
|
351
|
+
targets = operation.targets;
|
|
352
|
+
controls = [];
|
|
353
|
+
break;
|
|
354
|
+
}
|
|
355
|
+
const qRegs = [...controls, ...targets]
|
|
356
|
+
.filter(({ result }) => result === undefined)
|
|
357
|
+
.map(({ qubit }) => qubit);
|
|
358
|
+
const clsControls = controls.filter(({ result }) => result !== undefined);
|
|
359
|
+
const isClassicallyControlled = clsControls.length > 0;
|
|
360
|
+
if (!isClassicallyControlled && qRegs.length === 0)
|
|
361
|
+
return [-1, -1];
|
|
362
|
+
// If operation is classically-controlled, pad all qubit registers. Otherwise, only pad
|
|
363
|
+
// the contiguous range of registers that it covers.
|
|
364
|
+
const minRegIdx = isClassicallyControlled ? 0 : Math.min(...qRegs);
|
|
365
|
+
const maxRegIdx = isClassicallyControlled
|
|
366
|
+
? numQubits - 1
|
|
367
|
+
: Math.max(...qRegs);
|
|
368
|
+
return [minRegIdx, maxRegIdx];
|
|
369
|
+
}
|
|
@@ -14,6 +14,10 @@ export interface Register {
|
|
|
14
14
|
/** Classical register ID. If present, register is classical register. */
|
|
15
15
|
result?: number;
|
|
16
16
|
}
|
|
17
|
+
/**
|
|
18
|
+
* Runtime check: is this a valid Register?
|
|
19
|
+
*/
|
|
20
|
+
export declare function isRegister(obj: any): obj is Register;
|
|
17
21
|
/**
|
|
18
22
|
* Rendering data for qubit register.
|
|
19
23
|
*/
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
|
2
|
+
// Licensed under the MIT license.
|
|
3
|
+
/**
|
|
4
|
+
* Type of register.
|
|
5
|
+
*/
|
|
6
|
+
export var RegisterType;
|
|
7
|
+
(function (RegisterType) {
|
|
8
|
+
RegisterType[RegisterType["Qubit"] = 0] = "Qubit";
|
|
9
|
+
RegisterType[RegisterType["Classical"] = 1] = "Classical";
|
|
10
|
+
})(RegisterType || (RegisterType = {}));
|
|
11
|
+
/**
|
|
12
|
+
* Runtime check: is this a valid Register?
|
|
13
|
+
*/
|
|
14
|
+
export function isRegister(obj) {
|
|
15
|
+
return (obj &&
|
|
16
|
+
typeof obj === "object" &&
|
|
17
|
+
typeof obj.qubit === "number" &&
|
|
18
|
+
// result is optional, but if present must be a number
|
|
19
|
+
(obj.result === undefined || typeof obj.result === "number"));
|
|
20
|
+
}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { type CircuitGroup as CircuitData } from "../
|
|
1
|
+
import { type CircuitGroup as CircuitData } from "../data-structures/circuit.js";
|
|
2
2
|
import type { IBreakpointSpan, IQuantumState, IStackFrame, IStructStepResult, IVariable } from "../../lib/web/qsc_wasm.js";
|
|
3
3
|
import { ProgramConfig } from "../browser.js";
|
|
4
4
|
import { IQscEventTarget, QscEventData } from "../compiler/events.js";
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Copyright (c) Microsoft Corporation.
|
|
2
2
|
// Licensed under the MIT License.
|
|
3
|
-
import { CURRENT_VERSION, } from "../
|
|
3
|
+
import { CURRENT_VERSION, } from "../data-structures/circuit.js";
|
|
4
4
|
import { eventStringToMsg } from "../compiler/common.js";
|
|
5
5
|
import { makeEvent, } from "../compiler/events.js";
|
|
6
6
|
import { log } from "../log.js";
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { IQSharpError } from "../lib/web/qsc_wasm.js";
|
|
2
|
+
/**
|
|
3
|
+
* Public error type for most `qsharp-lang` functions.
|
|
4
|
+
*
|
|
5
|
+
* This is typically thrown by functions that deal with compiling and
|
|
6
|
+
* running code. Contains one or more VS Code-like diagnostics.
|
|
7
|
+
*/
|
|
8
|
+
export declare class QdkDiagnostics extends Error {
|
|
9
|
+
readonly diagnostics: IQSharpError[];
|
|
10
|
+
constructor(diagnostics: IQSharpError[]);
|
|
11
|
+
}
|
|
12
|
+
/**
|
|
13
|
+
* Wrapper around QDK WASM functions to convert exceptions to a more ergonomic type.
|
|
14
|
+
*
|
|
15
|
+
* Many of the WASM functions throw exceptions that are of type `string`,
|
|
16
|
+
* which are really just JSON-serialized `IQSharpError[]`s.
|
|
17
|
+
*
|
|
18
|
+
* This function converts those exceptions into `QdkDiagnostics` instances
|
|
19
|
+
* that properly inherit from `Error`.
|
|
20
|
+
*/
|
|
21
|
+
export declare function callAndTransformExceptions<T>(fn: () => Promise<T>): Promise<T>;
|