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/ux/circuit-vis/utils.ts
CHANGED
|
@@ -207,6 +207,52 @@ const getGateLocationString = (operation: Operation): string | null => {
|
|
|
207
207
|
return operation.dataAttributes["location"];
|
|
208
208
|
};
|
|
209
209
|
|
|
210
|
+
/**
|
|
211
|
+
* Get the minimum and maximum register indices for a given operation.
|
|
212
|
+
*
|
|
213
|
+
* @param operation The operation for which to get the register indices.
|
|
214
|
+
* @param numQubits The number of qubits in the circuit.
|
|
215
|
+
* @returns A tuple containing the minimum and maximum register indices.
|
|
216
|
+
*/
|
|
217
|
+
function getMinMaxRegIdx(
|
|
218
|
+
operation: Operation,
|
|
219
|
+
numQubits: number,
|
|
220
|
+
): [number, number] {
|
|
221
|
+
let targets: Register[];
|
|
222
|
+
let controls: Register[];
|
|
223
|
+
switch (operation.kind) {
|
|
224
|
+
case "measurement":
|
|
225
|
+
targets = operation.results;
|
|
226
|
+
controls = operation.qubits;
|
|
227
|
+
break;
|
|
228
|
+
case "unitary":
|
|
229
|
+
targets = operation.targets;
|
|
230
|
+
controls = operation.controls || [];
|
|
231
|
+
break;
|
|
232
|
+
case "ket":
|
|
233
|
+
targets = operation.targets;
|
|
234
|
+
controls = [];
|
|
235
|
+
break;
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
const qRegs = [...controls, ...targets]
|
|
239
|
+
.filter(({ result }) => result === undefined)
|
|
240
|
+
.map(({ qubit }) => qubit);
|
|
241
|
+
const clsControls: Register[] = controls.filter(
|
|
242
|
+
({ result }) => result !== undefined,
|
|
243
|
+
);
|
|
244
|
+
const isClassicallyControlled: boolean = clsControls.length > 0;
|
|
245
|
+
if (!isClassicallyControlled && qRegs.length === 0) return [-1, -1];
|
|
246
|
+
// If operation is classically-controlled, pad all qubit registers. Otherwise, only pad
|
|
247
|
+
// the contiguous range of registers that it covers.
|
|
248
|
+
const minRegIdx: number = isClassicallyControlled ? 0 : Math.min(...qRegs);
|
|
249
|
+
const maxRegIdx: number = isClassicallyControlled
|
|
250
|
+
? numQubits - 1
|
|
251
|
+
: Math.max(...qRegs);
|
|
252
|
+
|
|
253
|
+
return [minRegIdx, maxRegIdx];
|
|
254
|
+
}
|
|
255
|
+
|
|
210
256
|
/**********************
|
|
211
257
|
* Finder Functions *
|
|
212
258
|
**********************/
|
|
@@ -399,6 +445,7 @@ export {
|
|
|
399
445
|
getChildTargets,
|
|
400
446
|
locationStringToIndexes,
|
|
401
447
|
getGateLocationString,
|
|
448
|
+
getMinMaxRegIdx,
|
|
402
449
|
findGateElem,
|
|
403
450
|
findLocation,
|
|
404
451
|
findParentOperation,
|
package/ux/circuit.tsx
CHANGED
|
@@ -22,31 +22,41 @@ export function Circuit(props: {
|
|
|
22
22
|
circuit?: qviz.CircuitGroup | qviz.Circuit;
|
|
23
23
|
isEditable: boolean;
|
|
24
24
|
editCallback?: (fileData: qviz.CircuitGroup) => void;
|
|
25
|
+
runCallback?: () => void;
|
|
25
26
|
}) {
|
|
26
|
-
|
|
27
|
-
|
|
27
|
+
let unrenderable = false;
|
|
28
|
+
let qubits = 0;
|
|
29
|
+
let operations = 0;
|
|
30
|
+
let errorMsg: string | undefined = undefined;
|
|
28
31
|
|
|
29
|
-
|
|
30
|
-
if (
|
|
32
|
+
const result = toCircuitGroup(props.circuit);
|
|
33
|
+
if (result.ok) {
|
|
34
|
+
const circuit = result.circuitGroup.circuits[0];
|
|
35
|
+
if (circuit.componentGrid === undefined) circuit.componentGrid = [];
|
|
36
|
+
if (circuit.qubits === undefined) circuit.qubits = [];
|
|
37
|
+
qubits = circuit.qubits.length;
|
|
38
|
+
operations = circuit.componentGrid.length;
|
|
31
39
|
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
+
unrenderable =
|
|
41
|
+
unrenderable ||
|
|
42
|
+
result.circuitGroup.circuits.length > MAX_CIRCUITS ||
|
|
43
|
+
(!props.isEditable && qubits === 0) ||
|
|
44
|
+
operations > MAX_OPERATIONS ||
|
|
45
|
+
qubits > MAX_QUBITS;
|
|
46
|
+
} else {
|
|
47
|
+
errorMsg = result.error;
|
|
48
|
+
}
|
|
40
49
|
|
|
41
50
|
return (
|
|
42
51
|
<div>
|
|
43
|
-
{unrenderable ? (
|
|
52
|
+
{!result.ok || unrenderable ? (
|
|
44
53
|
<Unrenderable
|
|
45
|
-
qubits={
|
|
46
|
-
operations={
|
|
54
|
+
qubits={qubits}
|
|
55
|
+
operations={operations}
|
|
56
|
+
error={errorMsg}
|
|
47
57
|
/>
|
|
48
58
|
) : (
|
|
49
|
-
<ZoomableCircuit {...props} circuitGroup={circuitGroup} />
|
|
59
|
+
<ZoomableCircuit {...props} circuitGroup={result.circuitGroup} />
|
|
50
60
|
)}
|
|
51
61
|
</div>
|
|
52
62
|
);
|
|
@@ -56,6 +66,7 @@ function ZoomableCircuit(props: {
|
|
|
56
66
|
circuitGroup: qviz.CircuitGroup;
|
|
57
67
|
isEditable: boolean;
|
|
58
68
|
editCallback?: (fileData: qviz.CircuitGroup) => void;
|
|
69
|
+
runCallback?: () => void;
|
|
59
70
|
}) {
|
|
60
71
|
const circuitDiv = useRef<HTMLDivElement>(null);
|
|
61
72
|
const [zoomLevel, setZoomLevel] = useState(100);
|
|
@@ -78,6 +89,7 @@ function ZoomableCircuit(props: {
|
|
|
78
89
|
container,
|
|
79
90
|
props.isEditable,
|
|
80
91
|
props.editCallback,
|
|
92
|
+
props.runCallback,
|
|
81
93
|
);
|
|
82
94
|
|
|
83
95
|
if (!props.isEditable) {
|
|
@@ -163,8 +175,16 @@ function ZoomableCircuit(props: {
|
|
|
163
175
|
container: HTMLDivElement,
|
|
164
176
|
isEditable: boolean,
|
|
165
177
|
editCallback?: (fileData: qviz.CircuitGroup) => void,
|
|
178
|
+
runCallback?: () => void,
|
|
166
179
|
) {
|
|
167
|
-
qviz.draw(
|
|
180
|
+
qviz.draw(
|
|
181
|
+
circuitGroup,
|
|
182
|
+
container,
|
|
183
|
+
0,
|
|
184
|
+
isEditable,
|
|
185
|
+
editCallback,
|
|
186
|
+
runCallback,
|
|
187
|
+
);
|
|
168
188
|
return container.getElementsByClassName("qviz")[0]!;
|
|
169
189
|
}
|
|
170
190
|
|
|
@@ -192,29 +212,49 @@ function ZoomableCircuit(props: {
|
|
|
192
212
|
}
|
|
193
213
|
}
|
|
194
214
|
|
|
195
|
-
function Unrenderable(props: {
|
|
196
|
-
|
|
197
|
-
|
|
215
|
+
function Unrenderable(props: {
|
|
216
|
+
qubits: number;
|
|
217
|
+
operations: number;
|
|
218
|
+
error?: string;
|
|
219
|
+
}) {
|
|
220
|
+
let errorDiv = null;
|
|
221
|
+
|
|
222
|
+
if (props.error) {
|
|
223
|
+
errorDiv = (
|
|
224
|
+
<div>
|
|
225
|
+
<p>
|
|
226
|
+
<b>Unable to render circuit:</b>
|
|
227
|
+
</p>
|
|
228
|
+
<pre>{props.error}</pre>
|
|
229
|
+
</div>
|
|
230
|
+
);
|
|
231
|
+
} else if (props.qubits === 0) {
|
|
232
|
+
errorDiv = (
|
|
198
233
|
<div>
|
|
199
234
|
<p>No circuit to display. No qubits have been allocated.</p>
|
|
200
235
|
</div>
|
|
201
|
-
)
|
|
202
|
-
|
|
203
|
-
|
|
236
|
+
);
|
|
237
|
+
} else if (props.operations > MAX_OPERATIONS) {
|
|
238
|
+
// Don't show the real number of operations here, as that number is
|
|
239
|
+
// *already* truncated by the underlying circuit builder.
|
|
240
|
+
errorDiv = (
|
|
204
241
|
<div>
|
|
205
242
|
<p>
|
|
206
243
|
This circuit has too many gates to display. The maximum supported
|
|
207
244
|
number of gates is {MAX_OPERATIONS}.
|
|
208
245
|
</p>
|
|
209
246
|
</div>
|
|
210
|
-
)
|
|
247
|
+
);
|
|
248
|
+
} else if (props.qubits > MAX_QUBITS) {
|
|
249
|
+
errorDiv = (
|
|
211
250
|
<div>
|
|
212
251
|
<p>
|
|
213
252
|
This circuit has too many qubits to display. It has {props.qubits}{" "}
|
|
214
253
|
qubits, but the maximum supported is {MAX_QUBITS}.
|
|
215
254
|
</p>
|
|
216
255
|
</div>
|
|
217
|
-
)
|
|
256
|
+
);
|
|
257
|
+
}
|
|
218
258
|
|
|
219
259
|
return <div class="qs-circuit-error">{errorDiv}</div>;
|
|
220
260
|
}
|
|
@@ -288,6 +328,7 @@ export function CircuitPanel(props: CircuitProps) {
|
|
|
288
328
|
circuit={props.circuit}
|
|
289
329
|
isEditable={props.isEditable}
|
|
290
330
|
editCallback={props.editCallback}
|
|
331
|
+
runCallback={props.runCallback}
|
|
291
332
|
></Circuit>
|
|
292
333
|
) : null}
|
|
293
334
|
</div>
|
package/ux/data.ts
CHANGED
package/ux/qsharp-circuit.css
CHANGED
|
@@ -327,6 +327,37 @@
|
|
|
327
327
|
.ghost-opacity {
|
|
328
328
|
opacity: 0.5;
|
|
329
329
|
}
|
|
330
|
+
|
|
331
|
+
.svg-run-button-rect {
|
|
332
|
+
fill: var(--vscode-button-background, #007acc);
|
|
333
|
+
rx: 8;
|
|
334
|
+
filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.15));
|
|
335
|
+
transition:
|
|
336
|
+
fill 0.2s,
|
|
337
|
+
filter 0.2s;
|
|
338
|
+
}
|
|
339
|
+
|
|
340
|
+
.svg-run-button:hover .svg-run-button-rect,
|
|
341
|
+
.svg-run-button:focus .svg-run-button-rect {
|
|
342
|
+
fill: var(--vscode-button-hoverBackground, #005a9e);
|
|
343
|
+
filter: drop-shadow(0 4px 8px rgba(0, 0, 0, 0.25));
|
|
344
|
+
}
|
|
345
|
+
|
|
346
|
+
.svg-run-button-text {
|
|
347
|
+
fill: var(--vscode-button-foreground, #ffffff);
|
|
348
|
+
font-size: 16px;
|
|
349
|
+
font-family: "Segoe UI", Arial, sans-serif;
|
|
350
|
+
font-weight: bold;
|
|
351
|
+
text-anchor: middle;
|
|
352
|
+
dominant-baseline: middle;
|
|
353
|
+
pointer-events: none;
|
|
354
|
+
letter-spacing: 1px;
|
|
355
|
+
user-select: none;
|
|
356
|
+
}
|
|
357
|
+
|
|
358
|
+
.svg-run-button {
|
|
359
|
+
cursor: pointer;
|
|
360
|
+
}
|
|
330
361
|
}
|
|
331
362
|
|
|
332
363
|
.context-menu {
|
package/dist/shared/circuit.js
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
// Copyright (c) Microsoft Corporation.
|
|
2
|
-
// Licensed under the MIT license.
|
|
3
|
-
/**
|
|
4
|
-
* Current format version.
|
|
5
|
-
*/
|
|
6
|
-
export const CURRENT_VERSION = 1;
|
|
7
|
-
/**
|
|
8
|
-
* Conditions on when to render the given operation.
|
|
9
|
-
*/
|
|
10
|
-
export var ConditionalRender;
|
|
11
|
-
(function (ConditionalRender) {
|
|
12
|
-
/** Always rendered. */
|
|
13
|
-
ConditionalRender[ConditionalRender["Always"] = 0] = "Always";
|
|
14
|
-
/** Render classically-controlled operation when measurement is a zero. */
|
|
15
|
-
ConditionalRender[ConditionalRender["OnZero"] = 1] = "OnZero";
|
|
16
|
-
/** Render classically-controlled operation when measurement is a one. */
|
|
17
|
-
ConditionalRender[ConditionalRender["OnOne"] = 2] = "OnOne";
|
|
18
|
-
/** Render operation as a group of its nested operations. */
|
|
19
|
-
ConditionalRender[ConditionalRender["AsGroup"] = 3] = "AsGroup";
|
|
20
|
-
})(ConditionalRender || (ConditionalRender = {}));
|
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
import { CircuitGroup } from "./circuit.js";
|
|
2
|
-
/**
|
|
3
|
-
* Ensures that the given circuit object is a CircuitGroup, doing any
|
|
4
|
-
* necessary conversions from Circuit or legacy formats.
|
|
5
|
-
*
|
|
6
|
-
* @param circuit The circuit to convert.
|
|
7
|
-
* @returns The converted CircuitGroup.
|
|
8
|
-
*/
|
|
9
|
-
export declare function toCircuitGroup(circuit: any): CircuitGroup;
|
package/dist/shared/register.js
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
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 = {}));
|