qsharp-lang 1.22.3-dev → 1.22.5-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/compiler/common.d.ts +16 -3
- package/dist/compiler/compiler.d.ts +3 -3
- package/dist/compiler/compiler.js +2 -2
- package/dist/data-structures/circuit.d.ts +13 -0
- package/docs/Microsoft.Quantum.Core/IsRangeEmpty.md +1 -1
- package/docs/Microsoft.Quantum.Core/Length.md +1 -1
- package/docs/Microsoft.Quantum.Core/RangeEnd.md +1 -1
- package/docs/Microsoft.Quantum.Core/RangeStart.md +1 -1
- package/docs/Microsoft.Quantum.Core/Repeated.md +1 -1
- package/docs/Microsoft.Quantum.Core/index.md +1 -1
- package/docs/Std.Arithmetic/AddLE.md +1 -1
- package/docs/Std.Arithmetic/ApplyIfEqualL.md +1 -1
- package/docs/Std.Arithmetic/ApplyIfEqualLE.md +1 -1
- package/docs/Std.Arithmetic/ApplyIfGreaterL.md +1 -1
- package/docs/Std.Arithmetic/ApplyIfGreaterLE.md +1 -1
- package/docs/Std.Arithmetic/ApplyIfGreaterOrEqualL.md +1 -1
- package/docs/Std.Arithmetic/ApplyIfGreaterOrEqualLE.md +1 -1
- package/docs/Std.Arithmetic/ApplyIfLessL.md +1 -1
- package/docs/Std.Arithmetic/ApplyIfLessLE.md +1 -1
- package/docs/Std.Arithmetic/ApplyIfLessOrEqualL.md +1 -1
- package/docs/Std.Arithmetic/ApplyIfLessOrEqualLE.md +1 -1
- package/docs/Std.Arithmetic/FourierTDIncByLE.md +1 -1
- package/docs/Std.Arithmetic/IncByI.md +1 -1
- package/docs/Std.Arithmetic/IncByIUsingIncByLE.md +1 -1
- package/docs/Std.Arithmetic/IncByL.md +1 -1
- package/docs/Std.Arithmetic/IncByLE.md +1 -1
- package/docs/Std.Arithmetic/IncByLEUsingAddLE.md +1 -1
- package/docs/Std.Arithmetic/IncByLUsingIncByLE.md +1 -1
- package/docs/Std.Arithmetic/LookAheadDKRSAddLE.md +1 -1
- package/docs/Std.Arithmetic/MAJ.md +1 -1
- package/docs/Std.Arithmetic/ReflectAboutInteger.md +1 -1
- package/docs/Std.Arithmetic/RippleCarryCGAddLE.md +1 -1
- package/docs/Std.Arithmetic/RippleCarryCGIncByLE.md +1 -1
- package/docs/Std.Arithmetic/RippleCarryTTKIncByLE.md +1 -1
- package/docs/Std.Arithmetic/index.md +1 -1
- package/docs/Std.Arrays/All.md +1 -1
- package/docs/Std.Arrays/Any.md +1 -1
- package/docs/Std.Arrays/Chunks.md +1 -1
- package/docs/Std.Arrays/CircularlyShifted.md +1 -1
- package/docs/Std.Arrays/ColumnAt.md +1 -1
- package/docs/Std.Arrays/Count.md +1 -1
- package/docs/Std.Arrays/Diagonal.md +1 -1
- package/docs/Std.Arrays/DrawMany.md +1 -1
- package/docs/Std.Arrays/Enumerated.md +1 -1
- package/docs/Std.Arrays/Excluding.md +1 -1
- package/docs/Std.Arrays/Filtered.md +1 -1
- package/docs/Std.Arrays/FlatMapped.md +1 -1
- package/docs/Std.Arrays/Flattened.md +1 -1
- package/docs/Std.Arrays/Fold.md +1 -1
- package/docs/Std.Arrays/ForEach.md +1 -1
- package/docs/Std.Arrays/Head.md +1 -1
- package/docs/Std.Arrays/HeadAndRest.md +1 -1
- package/docs/Std.Arrays/IndexOf.md +1 -1
- package/docs/Std.Arrays/IndexRange.md +1 -1
- package/docs/Std.Arrays/Interleaved.md +1 -1
- package/docs/Std.Arrays/IsEmpty.md +1 -1
- package/docs/Std.Arrays/IsRectangularArray.md +1 -1
- package/docs/Std.Arrays/IsSorted.md +1 -1
- package/docs/Std.Arrays/IsSquareArray.md +1 -1
- package/docs/Std.Arrays/Mapped.md +1 -1
- package/docs/Std.Arrays/MappedByIndex.md +1 -1
- package/docs/Std.Arrays/MappedOverRange.md +1 -1
- package/docs/Std.Arrays/Most.md +1 -1
- package/docs/Std.Arrays/MostAndTail.md +1 -1
- package/docs/Std.Arrays/Padded.md +1 -1
- package/docs/Std.Arrays/Partitioned.md +1 -1
- package/docs/Std.Arrays/Rest.md +1 -1
- package/docs/Std.Arrays/Reversed.md +1 -1
- package/docs/Std.Arrays/SequenceI.md +1 -1
- package/docs/Std.Arrays/SequenceL.md +1 -1
- package/docs/Std.Arrays/Sorted.md +1 -1
- package/docs/Std.Arrays/Subarray.md +1 -1
- package/docs/Std.Arrays/Swapped.md +1 -1
- package/docs/Std.Arrays/Tail.md +1 -1
- package/docs/Std.Arrays/Transposed.md +1 -1
- package/docs/Std.Arrays/Unzipped.md +1 -1
- package/docs/Std.Arrays/Where.md +1 -1
- package/docs/Std.Arrays/Windows.md +1 -1
- package/docs/Std.Arrays/Zipped.md +1 -1
- package/docs/Std.Arrays/index.md +1 -1
- package/docs/Std.Canon/ApplyCNOTChain.md +1 -1
- package/docs/Std.Canon/ApplyControlledOnBitString.md +1 -1
- package/docs/Std.Canon/ApplyControlledOnInt.md +1 -1
- package/docs/Std.Canon/ApplyOperationPowerA.md +1 -1
- package/docs/Std.Canon/ApplyOperationPowerCA.md +1 -1
- package/docs/Std.Canon/ApplyP.md +1 -1
- package/docs/Std.Canon/ApplyPauli.md +1 -1
- package/docs/Std.Canon/ApplyPauliFromBitString.md +1 -1
- package/docs/Std.Canon/ApplyPauliFromInt.md +1 -1
- package/docs/Std.Canon/ApplyQFT.md +1 -1
- package/docs/Std.Canon/ApplyQPE.md +1 -1
- package/docs/Std.Canon/ApplyToEach.md +1 -1
- package/docs/Std.Canon/ApplyToEachA.md +1 -1
- package/docs/Std.Canon/ApplyToEachC.md +1 -1
- package/docs/Std.Canon/ApplyToEachCA.md +1 -1
- package/docs/Std.Canon/ApplyXorInPlace.md +1 -1
- package/docs/Std.Canon/ApplyXorInPlaceL.md +1 -1
- package/docs/Std.Canon/CX.md +1 -1
- package/docs/Std.Canon/CY.md +1 -1
- package/docs/Std.Canon/CZ.md +1 -1
- package/docs/Std.Canon/Fst.md +1 -1
- package/docs/Std.Canon/MapPauliAxis.md +1 -1
- package/docs/Std.Canon/Relabel.md +1 -1
- package/docs/Std.Canon/Snd.md +1 -1
- package/docs/Std.Canon/SwapReverseRegister.md +1 -1
- package/docs/Std.Canon/index.md +1 -1
- package/docs/Std.Convert/BigIntAsBoolArray.md +1 -1
- package/docs/Std.Convert/BigIntAsInt.md +1 -1
- package/docs/Std.Convert/BoolArrayAsBigInt.md +1 -1
- package/docs/Std.Convert/BoolArrayAsInt.md +1 -1
- package/docs/Std.Convert/BoolArrayAsResultArray.md +1 -1
- package/docs/Std.Convert/BoolAsResult.md +1 -1
- package/docs/Std.Convert/ComplexAsComplexPolar.md +1 -1
- package/docs/Std.Convert/ComplexPolarAsComplex.md +1 -1
- package/docs/Std.Convert/DoubleAsStringWithPrecision.md +1 -1
- package/docs/Std.Convert/IntAsBigInt.md +1 -1
- package/docs/Std.Convert/IntAsBoolArray.md +1 -1
- package/docs/Std.Convert/IntAsDouble.md +1 -1
- package/docs/Std.Convert/ResultArrayAsBoolArray.md +1 -1
- package/docs/Std.Convert/ResultArrayAsInt.md +1 -1
- package/docs/Std.Convert/ResultAsBool.md +1 -1
- package/docs/Std.Convert/index.md +1 -1
- package/docs/Std.Core/Complex.md +1 -1
- package/docs/Std.Core/Length.md +1 -1
- package/docs/Std.Core/Repeated.md +1 -1
- package/docs/Std.Core/index.md +1 -1
- package/docs/Std.Diagnostics/ApplyIdleNoise.md +1 -1
- package/docs/Std.Diagnostics/BitFlipNoise.md +1 -1
- package/docs/Std.Diagnostics/CheckAllZero.md +1 -1
- package/docs/Std.Diagnostics/CheckOperationsAreEqual.md +1 -1
- package/docs/Std.Diagnostics/CheckZero.md +1 -1
- package/docs/Std.Diagnostics/ConfigurePauliNoise.md +1 -1
- package/docs/Std.Diagnostics/ConfigureQubitLoss.md +1 -1
- package/docs/Std.Diagnostics/DepolarizingNoise.md +1 -1
- package/docs/Std.Diagnostics/DumpMachine.md +1 -1
- package/docs/Std.Diagnostics/DumpOperation.md +1 -1
- package/docs/Std.Diagnostics/DumpRegister.md +1 -1
- package/docs/Std.Diagnostics/Fact.md +1 -1
- package/docs/Std.Diagnostics/NoNoise.md +1 -1
- package/docs/Std.Diagnostics/PhaseFlipNoise.md +1 -1
- package/docs/Std.Diagnostics/StartCountingFunction.md +1 -1
- package/docs/Std.Diagnostics/StartCountingOperation.md +1 -1
- package/docs/Std.Diagnostics/StartCountingQubits.md +1 -1
- package/docs/Std.Diagnostics/StopCountingFunction.md +1 -1
- package/docs/Std.Diagnostics/StopCountingOperation.md +1 -1
- package/docs/Std.Diagnostics/StopCountingQubits.md +1 -1
- package/docs/Std.Diagnostics/index.md +1 -1
- package/docs/Std.Intrinsic/AND.md +1 -1
- package/docs/Std.Intrinsic/ApplyUnitary.md +1 -1
- package/docs/Std.Intrinsic/CCNOT.md +1 -1
- package/docs/Std.Intrinsic/CNOT.md +1 -1
- package/docs/Std.Intrinsic/Exp.md +1 -1
- package/docs/Std.Intrinsic/H.md +1 -1
- package/docs/Std.Intrinsic/I.md +1 -1
- package/docs/Std.Intrinsic/M.md +1 -1
- package/docs/Std.Intrinsic/Measure.md +1 -1
- package/docs/Std.Intrinsic/Message.md +1 -1
- package/docs/Std.Intrinsic/R.md +1 -1
- package/docs/Std.Intrinsic/R1.md +1 -1
- package/docs/Std.Intrinsic/R1Frac.md +1 -1
- package/docs/Std.Intrinsic/RFrac.md +1 -1
- package/docs/Std.Intrinsic/Reset.md +1 -1
- package/docs/Std.Intrinsic/ResetAll.md +1 -1
- package/docs/Std.Intrinsic/Rx.md +1 -1
- package/docs/Std.Intrinsic/Rxx.md +1 -1
- package/docs/Std.Intrinsic/Ry.md +1 -1
- package/docs/Std.Intrinsic/Ryy.md +1 -1
- package/docs/Std.Intrinsic/Rz.md +1 -1
- package/docs/Std.Intrinsic/Rzz.md +1 -1
- package/docs/Std.Intrinsic/S.md +1 -1
- package/docs/Std.Intrinsic/SWAP.md +1 -1
- package/docs/Std.Intrinsic/SX.md +1 -1
- package/docs/Std.Intrinsic/T.md +1 -1
- package/docs/Std.Intrinsic/X.md +1 -1
- package/docs/Std.Intrinsic/Y.md +1 -1
- package/docs/Std.Intrinsic/Z.md +1 -1
- package/docs/Std.Intrinsic/index.md +1 -1
- package/docs/Std.Logical/Xor.md +1 -1
- package/docs/Std.Logical/index.md +1 -1
- package/docs/Std.Math/AbsComplex.md +1 -1
- package/docs/Std.Math/AbsComplexPolar.md +1 -1
- package/docs/Std.Math/AbsD.md +1 -1
- package/docs/Std.Math/AbsI.md +1 -1
- package/docs/Std.Math/AbsL.md +1 -1
- package/docs/Std.Math/AbsSquaredComplex.md +1 -1
- package/docs/Std.Math/AbsSquaredComplexPolar.md +1 -1
- package/docs/Std.Math/ApproximateFactorial.md +1 -1
- package/docs/Std.Math/ArcCos.md +1 -1
- package/docs/Std.Math/ArcCosh.md +1 -1
- package/docs/Std.Math/ArcSin.md +1 -1
- package/docs/Std.Math/ArcSinh.md +1 -1
- package/docs/Std.Math/ArcTan.md +1 -1
- package/docs/Std.Math/ArcTan2.md +1 -1
- package/docs/Std.Math/ArcTanh.md +1 -1
- package/docs/Std.Math/ArgComplex.md +1 -1
- package/docs/Std.Math/ArgComplexPolar.md +1 -1
- package/docs/Std.Math/Binom.md +1 -1
- package/docs/Std.Math/BitSizeI.md +1 -1
- package/docs/Std.Math/BitSizeL.md +1 -1
- package/docs/Std.Math/Ceiling.md +1 -1
- package/docs/Std.Math/Complex.md +1 -1
- package/docs/Std.Math/ComplexPolar.md +1 -1
- package/docs/Std.Math/ContinuedFractionConvergentI.md +1 -1
- package/docs/Std.Math/ContinuedFractionConvergentL.md +1 -1
- package/docs/Std.Math/Cos.md +1 -1
- package/docs/Std.Math/Cosh.md +1 -1
- package/docs/Std.Math/DivRemI.md +1 -1
- package/docs/Std.Math/DivRemL.md +1 -1
- package/docs/Std.Math/DividedByC.md +1 -1
- package/docs/Std.Math/DividedByCP.md +1 -1
- package/docs/Std.Math/E.md +1 -1
- package/docs/Std.Math/ExpModI.md +1 -1
- package/docs/Std.Math/ExpModL.md +1 -1
- package/docs/Std.Math/ExtendedGreatestCommonDivisorI.md +1 -1
- package/docs/Std.Math/ExtendedGreatestCommonDivisorL.md +1 -1
- package/docs/Std.Math/FactorialI.md +1 -1
- package/docs/Std.Math/FactorialL.md +1 -1
- package/docs/Std.Math/Floor.md +1 -1
- package/docs/Std.Math/GreatestCommonDivisorI.md +1 -1
- package/docs/Std.Math/GreatestCommonDivisorL.md +1 -1
- package/docs/Std.Math/HammingWeightI.md +1 -1
- package/docs/Std.Math/InverseModI.md +1 -1
- package/docs/Std.Math/InverseModL.md +1 -1
- package/docs/Std.Math/IsCoprimeI.md +1 -1
- package/docs/Std.Math/IsCoprimeL.md +1 -1
- package/docs/Std.Math/IsInfinite.md +1 -1
- package/docs/Std.Math/IsNaN.md +1 -1
- package/docs/Std.Math/LargestFixedPoint.md +1 -1
- package/docs/Std.Math/Lg.md +1 -1
- package/docs/Std.Math/Log.md +1 -1
- package/docs/Std.Math/Log10.md +1 -1
- package/docs/Std.Math/LogFactorialD.md +1 -1
- package/docs/Std.Math/LogGammaD.md +1 -1
- package/docs/Std.Math/LogOf2.md +1 -1
- package/docs/Std.Math/Max.md +1 -1
- package/docs/Std.Math/MaxD.md +1 -1
- package/docs/Std.Math/MaxI.md +1 -1
- package/docs/Std.Math/MaxL.md +1 -1
- package/docs/Std.Math/Min.md +1 -1
- package/docs/Std.Math/MinD.md +1 -1
- package/docs/Std.Math/MinI.md +1 -1
- package/docs/Std.Math/MinL.md +1 -1
- package/docs/Std.Math/MinusC.md +1 -1
- package/docs/Std.Math/MinusCP.md +1 -1
- package/docs/Std.Math/ModulusI.md +1 -1
- package/docs/Std.Math/ModulusL.md +1 -1
- package/docs/Std.Math/NegationC.md +1 -1
- package/docs/Std.Math/NegationCP.md +1 -1
- package/docs/Std.Math/PI.md +1 -1
- package/docs/Std.Math/PNorm.md +1 -1
- package/docs/Std.Math/PNormalized.md +1 -1
- package/docs/Std.Math/PlusC.md +1 -1
- package/docs/Std.Math/PlusCP.md +1 -1
- package/docs/Std.Math/PowC.md +1 -1
- package/docs/Std.Math/PowCP.md +1 -1
- package/docs/Std.Math/RealMod.md +1 -1
- package/docs/Std.Math/Round.md +1 -1
- package/docs/Std.Math/RoundHalfAwayFromZero.md +1 -1
- package/docs/Std.Math/SignD.md +1 -1
- package/docs/Std.Math/SignI.md +1 -1
- package/docs/Std.Math/SignL.md +1 -1
- package/docs/Std.Math/Sin.md +1 -1
- package/docs/Std.Math/Sinh.md +1 -1
- package/docs/Std.Math/SmallestFixedPoint.md +1 -1
- package/docs/Std.Math/Sqrt.md +1 -1
- package/docs/Std.Math/SquaredNorm.md +1 -1
- package/docs/Std.Math/Tan.md +1 -1
- package/docs/Std.Math/Tanh.md +1 -1
- package/docs/Std.Math/TimesC.md +1 -1
- package/docs/Std.Math/TimesCP.md +1 -1
- package/docs/Std.Math/TrailingZeroCountI.md +1 -1
- package/docs/Std.Math/TrailingZeroCountL.md +1 -1
- package/docs/Std.Math/Truncate.md +1 -1
- package/docs/Std.Math/index.md +1 -1
- package/docs/Std.Measurement/IsLossResult.md +1 -1
- package/docs/Std.Measurement/MResetEachZ.md +1 -1
- package/docs/Std.Measurement/MResetX.md +1 -1
- package/docs/Std.Measurement/MResetY.md +1 -1
- package/docs/Std.Measurement/MResetZ.md +1 -1
- package/docs/Std.Measurement/MResetZChecked.md +1 -1
- package/docs/Std.Measurement/MeasureAllZ.md +1 -1
- package/docs/Std.Measurement/MeasureEachZ.md +1 -1
- package/docs/Std.Measurement/MeasureInteger.md +1 -1
- package/docs/Std.Measurement/index.md +1 -1
- package/docs/Std.Random/DrawRandomBool.md +1 -1
- package/docs/Std.Random/DrawRandomDouble.md +1 -1
- package/docs/Std.Random/DrawRandomInt.md +1 -1
- package/docs/Std.Random/index.md +1 -1
- package/docs/Std.Range/IsRangeEmpty.md +1 -1
- package/docs/Std.Range/RangeEnd.md +1 -1
- package/docs/Std.Range/RangeReverse.md +1 -1
- package/docs/Std.Range/RangeStart.md +1 -1
- package/docs/Std.Range/RangeStep.md +1 -1
- package/docs/Std.Range/index.md +1 -1
- package/docs/Std.ResourceEstimation/AccountForEstimates.md +1 -1
- package/docs/Std.ResourceEstimation/AuxQubitCount.md +1 -1
- package/docs/Std.ResourceEstimation/BeginEstimateCaching.md +1 -1
- package/docs/Std.ResourceEstimation/BeginRepeatEstimates.md +1 -1
- package/docs/Std.ResourceEstimation/CczCount.md +1 -1
- package/docs/Std.ResourceEstimation/EnableMemoryComputeArchitecture.md +1 -1
- package/docs/Std.ResourceEstimation/EndEstimateCaching.md +1 -1
- package/docs/Std.ResourceEstimation/EndRepeatEstimates.md +1 -1
- package/docs/Std.ResourceEstimation/LeastFrequentlyUsed.md +1 -1
- package/docs/Std.ResourceEstimation/LeastRecentlyUsed.md +1 -1
- package/docs/Std.ResourceEstimation/MeasurementCount.md +1 -1
- package/docs/Std.ResourceEstimation/PSSPCLayout.md +1 -1
- package/docs/Std.ResourceEstimation/RepeatEstimates.md +1 -1
- package/docs/Std.ResourceEstimation/RotationCount.md +1 -1
- package/docs/Std.ResourceEstimation/RotationDepth.md +1 -1
- package/docs/Std.ResourceEstimation/SingleVariant.md +1 -1
- package/docs/Std.ResourceEstimation/TCount.md +1 -1
- package/docs/Std.ResourceEstimation/index.md +1 -1
- package/docs/Std.StatePreparation/ApproximatelyPreparePureStateCP.md +1 -1
- package/docs/Std.StatePreparation/PreparePureStateD.md +1 -1
- package/docs/Std.StatePreparation/PrepareUniformSuperposition.md +1 -1
- package/docs/Std.StatePreparation/index.md +1 -1
- package/docs/Std.TableLookup/Select.md +1 -1
- package/docs/Std.TableLookup/index.md +1 -1
- package/docs/index.md +1 -1
- package/lib/nodejs/qsc_wasm.cjs +85 -85
- package/lib/nodejs/qsc_wasm.d.cts +8 -1
- package/lib/nodejs/qsc_wasm_bg.wasm +0 -0
- package/lib/web/qsc_wasm.d.ts +8 -1
- package/lib/web/qsc_wasm.js +78 -78
- package/lib/web/qsc_wasm_bg.wasm +0 -0
- package/package.json +1 -1
- package/ux/atoms/controls.ts +216 -0
- package/ux/atoms/index.css +226 -0
- package/ux/atoms/index.ts +192 -0
- package/ux/atoms/layout.ts +730 -0
- package/ux/atoms/utils.ts +32 -0
- package/ux/chem/index.tsx +191 -0
- package/ux/chem/style.css +83 -0
- package/ux/circuit-vis/circuit.ts +1 -0
- package/ux/circuit-vis/events.ts +1 -5
- package/ux/circuit-vis/formatters/gateFormatter.ts +67 -28
- package/ux/circuit-vis/formatters/inputFormatter.ts +28 -5
- package/ux/circuit-vis/gateRenderData.ts +2 -0
- package/ux/circuit-vis/index.ts +4 -7
- package/ux/circuit-vis/process.ts +28 -5
- package/ux/circuit-vis/sqore.ts +31 -22
- package/ux/circuit.tsx +40 -6
- package/ux/histogram.tsx +81 -18
- package/ux/index.ts +2 -0
- package/ux/qsharp-circuit.css +29 -1
- package/ux/qsharp-ux.css +8 -3
|
@@ -8,7 +8,12 @@ import {
|
|
|
8
8
|
controlBtnOffset,
|
|
9
9
|
groupBoxPadding,
|
|
10
10
|
} from "./constants.js";
|
|
11
|
-
import {
|
|
11
|
+
import {
|
|
12
|
+
ComponentGrid,
|
|
13
|
+
Operation,
|
|
14
|
+
ConditionalRender,
|
|
15
|
+
SourceLocation,
|
|
16
|
+
} from "./circuit.js";
|
|
12
17
|
import { GateRenderData, GateType } from "./gateRenderData.js";
|
|
13
18
|
import { Register, RegisterMap } from "./register.js";
|
|
14
19
|
import { getGateWidth } from "./utils.js";
|
|
@@ -26,6 +31,7 @@ import { getGateWidth } from "./utils.js";
|
|
|
26
31
|
const processOperations = (
|
|
27
32
|
componentGrid: ComponentGrid,
|
|
28
33
|
registers: RegisterMap,
|
|
34
|
+
renderLocations?: (s: SourceLocation[]) => { title: string; href: string },
|
|
29
35
|
): { renderDataArray: GateRenderData[][]; svgWidth: number } => {
|
|
30
36
|
if (componentGrid.length === 0)
|
|
31
37
|
return { renderDataArray: [], svgWidth: startX + gatePadding * 2 };
|
|
@@ -40,7 +46,11 @@ const processOperations = (
|
|
|
40
46
|
const renderDataArray: GateRenderData[][] = componentGrid.map(
|
|
41
47
|
(col, colIndex) =>
|
|
42
48
|
col.components.map((op) => {
|
|
43
|
-
const renderData: GateRenderData = _opToRenderData(
|
|
49
|
+
const renderData: GateRenderData = _opToRenderData(
|
|
50
|
+
op,
|
|
51
|
+
registers,
|
|
52
|
+
renderLocations,
|
|
53
|
+
);
|
|
44
54
|
|
|
45
55
|
if (
|
|
46
56
|
op != null &&
|
|
@@ -141,6 +151,7 @@ const _getClassicalRegStart = (
|
|
|
141
151
|
const _opToRenderData = (
|
|
142
152
|
op: Operation | null,
|
|
143
153
|
registers: RegisterMap,
|
|
154
|
+
renderLocations?: (s: SourceLocation[]) => { title: string; href: string },
|
|
144
155
|
): GateRenderData => {
|
|
145
156
|
const renderData: GateRenderData = {
|
|
146
157
|
type: GateType.Invalid,
|
|
@@ -202,7 +213,11 @@ const _opToRenderData = (
|
|
|
202
213
|
),
|
|
203
214
|
}))
|
|
204
215
|
.filter((col) => col.components.length > 0);
|
|
205
|
-
let childrenInstrs = processOperations(
|
|
216
|
+
let childrenInstrs = processOperations(
|
|
217
|
+
onZeroOps,
|
|
218
|
+
registers,
|
|
219
|
+
renderLocations,
|
|
220
|
+
);
|
|
206
221
|
const zeroGates: GateRenderData[][] = childrenInstrs.renderDataArray;
|
|
207
222
|
const zeroChildWidth: number = childrenInstrs.svgWidth;
|
|
208
223
|
|
|
@@ -214,7 +229,7 @@ const _opToRenderData = (
|
|
|
214
229
|
),
|
|
215
230
|
}))
|
|
216
231
|
.filter((col) => col.components.length > 0);
|
|
217
|
-
childrenInstrs = processOperations(onOneOps, registers);
|
|
232
|
+
childrenInstrs = processOperations(onOneOps, registers, renderLocations);
|
|
218
233
|
const oneGates: GateRenderData[][] = childrenInstrs.renderDataArray;
|
|
219
234
|
const oneChildWidth: number = childrenInstrs.svgWidth;
|
|
220
235
|
|
|
@@ -236,7 +251,11 @@ const _opToRenderData = (
|
|
|
236
251
|
conditionalRender == ConditionalRender.AsGroup &&
|
|
237
252
|
(children?.length || 0) > 0
|
|
238
253
|
) {
|
|
239
|
-
const childrenInstrs = processOperations(
|
|
254
|
+
const childrenInstrs = processOperations(
|
|
255
|
+
children!,
|
|
256
|
+
registers,
|
|
257
|
+
renderLocations,
|
|
258
|
+
);
|
|
240
259
|
renderData.type = GateType.Group;
|
|
241
260
|
renderData.children = childrenInstrs.renderDataArray;
|
|
242
261
|
// _zoomButton function in gateFormatter.ts relies on
|
|
@@ -274,6 +293,10 @@ const _opToRenderData = (
|
|
|
274
293
|
// Set gate width
|
|
275
294
|
renderData.width = getGateWidth(renderData);
|
|
276
295
|
|
|
296
|
+
if (op.metadata?.source && renderLocations) {
|
|
297
|
+
renderData.link = renderLocations([op.metadata.source]);
|
|
298
|
+
}
|
|
299
|
+
|
|
277
300
|
// Extend existing data attributes with user-provided data attributes
|
|
278
301
|
if (dataAttributes != null)
|
|
279
302
|
renderData.dataAttributes = {
|
package/ux/circuit-vis/sqore.ts
CHANGED
|
@@ -12,6 +12,7 @@ import {
|
|
|
12
12
|
ComponentGrid,
|
|
13
13
|
Operation,
|
|
14
14
|
Column,
|
|
15
|
+
SourceLocation,
|
|
15
16
|
} from "./circuit.js";
|
|
16
17
|
import { GateRenderData, GateType } from "./gateRenderData.js";
|
|
17
18
|
import {
|
|
@@ -44,14 +45,21 @@ type GateRegistry = {
|
|
|
44
45
|
[location: string]: Operation;
|
|
45
46
|
};
|
|
46
47
|
|
|
48
|
+
export type DrawOptions = {
|
|
49
|
+
renderDepth?: number;
|
|
50
|
+
isEditable?: boolean;
|
|
51
|
+
editCallback?: (circuitGroup: CircuitGroup) => void;
|
|
52
|
+
runCallback?: () => void;
|
|
53
|
+
renderLocations?: (l: SourceLocation[]) => { title: string; href: string };
|
|
54
|
+
};
|
|
55
|
+
|
|
47
56
|
/**
|
|
48
57
|
* Entrypoint class for rendering circuit visualizations.
|
|
49
58
|
*/
|
|
50
59
|
export class Sqore {
|
|
51
60
|
circuit: Circuit;
|
|
52
61
|
gateRegistry: GateRegistry = {};
|
|
53
|
-
renderDepth = 0;
|
|
54
|
-
|
|
62
|
+
renderDepth: number = this.options.renderDepth ?? 0;
|
|
55
63
|
/**
|
|
56
64
|
* Initializes Sqore object.
|
|
57
65
|
*
|
|
@@ -62,9 +70,7 @@ export class Sqore {
|
|
|
62
70
|
*/
|
|
63
71
|
constructor(
|
|
64
72
|
public circuitGroup: CircuitGroup,
|
|
65
|
-
|
|
66
|
-
private editCallback?: (circuitGroup: CircuitGroup) => void,
|
|
67
|
-
private runCallback?: () => void,
|
|
73
|
+
private options: DrawOptions = {},
|
|
68
74
|
) {
|
|
69
75
|
if (
|
|
70
76
|
this.circuitGroup == null ||
|
|
@@ -83,13 +89,11 @@ export class Sqore {
|
|
|
83
89
|
* Render circuit into `container` at the specified layer depth.
|
|
84
90
|
*
|
|
85
91
|
* @param container HTML element for rendering visualization into.
|
|
86
|
-
* @param renderDepth Initial layer depth at which to render gates.
|
|
87
92
|
*/
|
|
88
|
-
draw(container: HTMLElement
|
|
93
|
+
draw(container: HTMLElement): void {
|
|
89
94
|
// Inject into container
|
|
90
95
|
if (container == null) throw new Error(`Container not provided.`);
|
|
91
96
|
|
|
92
|
-
this.renderDepth = renderDepth;
|
|
93
97
|
this.renderCircuit(container);
|
|
94
98
|
}
|
|
95
99
|
|
|
@@ -103,7 +107,6 @@ export class Sqore {
|
|
|
103
107
|
// Create copy of circuit to prevent mutation
|
|
104
108
|
const _circuit: Circuit =
|
|
105
109
|
circuit ?? JSON.parse(JSON.stringify(this.circuit));
|
|
106
|
-
const renderDepth = this.renderDepth;
|
|
107
110
|
|
|
108
111
|
// Assign unique locations to each operation
|
|
109
112
|
_circuit.componentGrid.forEach((col, colIndex) =>
|
|
@@ -115,7 +118,7 @@ export class Sqore {
|
|
|
115
118
|
// Render operations starting at given depth
|
|
116
119
|
_circuit.componentGrid = this.selectOpsAtDepth(
|
|
117
120
|
_circuit.componentGrid,
|
|
118
|
-
renderDepth,
|
|
121
|
+
this.renderDepth,
|
|
119
122
|
);
|
|
120
123
|
|
|
121
124
|
// If only one top-level operation, expand automatically:
|
|
@@ -126,7 +129,9 @@ export class Sqore {
|
|
|
126
129
|
Object.prototype.hasOwnProperty.call(
|
|
127
130
|
_circuit.componentGrid[0].components[0].dataAttributes,
|
|
128
131
|
"location",
|
|
129
|
-
)
|
|
132
|
+
) &&
|
|
133
|
+
_circuit.componentGrid[0].components[0].dataAttributes["expanded"] !==
|
|
134
|
+
"false"
|
|
130
135
|
) {
|
|
131
136
|
const location: string =
|
|
132
137
|
_circuit.componentGrid[0].components[0].dataAttributes["location"];
|
|
@@ -150,16 +155,16 @@ export class Sqore {
|
|
|
150
155
|
}
|
|
151
156
|
this.addGateClickHandlers(container, _circuit);
|
|
152
157
|
|
|
153
|
-
if (this.isEditable) {
|
|
158
|
+
if (this.options.isEditable) {
|
|
154
159
|
createDropzones(container, this);
|
|
155
160
|
createPanel(container);
|
|
156
|
-
if (this.runCallback != undefined) {
|
|
157
|
-
const callback = this.runCallback;
|
|
161
|
+
if (this.options.runCallback != undefined) {
|
|
162
|
+
const callback = this.options.runCallback;
|
|
158
163
|
enableRunButton(container, callback);
|
|
159
164
|
}
|
|
160
165
|
enableEvents(container, this, () => this.renderCircuit(container));
|
|
161
|
-
if (this.editCallback != undefined) {
|
|
162
|
-
this.editCallback(this.minimizeCircuits(this.circuitGroup));
|
|
166
|
+
if (this.options.editCallback != undefined) {
|
|
167
|
+
this.options.editCallback(this.minimizeCircuits(this.circuitGroup));
|
|
163
168
|
}
|
|
164
169
|
}
|
|
165
170
|
}
|
|
@@ -203,10 +208,14 @@ export class Sqore {
|
|
|
203
208
|
};
|
|
204
209
|
|
|
205
210
|
const { qubits, componentGrid } = circuit;
|
|
206
|
-
const { qubitWires, registers, svgHeight } = formatInputs(
|
|
211
|
+
const { qubitWires, registers, svgHeight } = formatInputs(
|
|
212
|
+
qubits,
|
|
213
|
+
this.options.isEditable ? undefined : this.options.renderLocations,
|
|
214
|
+
);
|
|
207
215
|
const { renderDataArray, svgWidth } = processOperations(
|
|
208
216
|
componentGrid,
|
|
209
217
|
registers,
|
|
218
|
+
this.options.isEditable ? undefined : this.options.renderLocations,
|
|
210
219
|
);
|
|
211
220
|
const formattedGates: SVGElement = formatGates(renderDataArray);
|
|
212
221
|
const measureGates: GateRenderData[] = flatten(renderDataArray).filter(
|
|
@@ -330,11 +339,11 @@ export class Sqore {
|
|
|
330
339
|
} else {
|
|
331
340
|
selectedCol.push(op);
|
|
332
341
|
}
|
|
333
|
-
selectedOps.push({ components: selectedCol });
|
|
334
|
-
if (extraCols.length > 0) {
|
|
335
|
-
selectedOps.push(...extraCols);
|
|
336
|
-
}
|
|
337
342
|
});
|
|
343
|
+
selectedOps.push({ components: selectedCol });
|
|
344
|
+
if (extraCols.length > 0) {
|
|
345
|
+
selectedOps.push(...extraCols);
|
|
346
|
+
}
|
|
338
347
|
});
|
|
339
348
|
return selectedOps;
|
|
340
349
|
}
|
|
@@ -471,7 +480,7 @@ export class Sqore {
|
|
|
471
480
|
// Collapse parent gate and its children
|
|
472
481
|
if (opId.startsWith(parentLoc)) {
|
|
473
482
|
op.conditionalRender = ConditionalRender.Always;
|
|
474
|
-
|
|
483
|
+
op.dataAttributes["expanded"] = "false";
|
|
475
484
|
}
|
|
476
485
|
}),
|
|
477
486
|
);
|
package/ux/circuit.tsx
CHANGED
|
@@ -5,7 +5,7 @@ import * as qviz from "./circuit-vis/index.js";
|
|
|
5
5
|
import { useEffect, useRef, useState } from "preact/hooks";
|
|
6
6
|
import { CircuitProps } from "./data.js";
|
|
7
7
|
import { Spinner } from "./spinner.js";
|
|
8
|
-
import { toCircuitGroup } from "./circuit-vis/circuit.js";
|
|
8
|
+
import { SourceLocation, toCircuitGroup } from "./circuit-vis/circuit.js";
|
|
9
9
|
|
|
10
10
|
// For perf reasons we set a limit on how many gates/qubits
|
|
11
11
|
// we attempt to render. This is still a lot higher than a human would
|
|
@@ -23,6 +23,7 @@ export function Circuit(props: {
|
|
|
23
23
|
isEditable: boolean;
|
|
24
24
|
editCallback?: (fileData: qviz.CircuitGroup) => void;
|
|
25
25
|
runCallback?: () => void;
|
|
26
|
+
renderLocations: (s: SourceLocation[]) => { title: string; href: string };
|
|
26
27
|
}) {
|
|
27
28
|
let unrenderable = false;
|
|
28
29
|
let qubits = 0;
|
|
@@ -67,6 +68,7 @@ function ZoomableCircuit(props: {
|
|
|
67
68
|
isEditable: boolean;
|
|
68
69
|
editCallback?: (fileData: qviz.CircuitGroup) => void;
|
|
69
70
|
runCallback?: () => void;
|
|
71
|
+
renderLocations: (s: SourceLocation[]) => { title: string; href: string };
|
|
70
72
|
}) {
|
|
71
73
|
const circuitDiv = useRef<HTMLDivElement>(null);
|
|
72
74
|
const [zoomLevel, setZoomLevel] = useState(100);
|
|
@@ -88,6 +90,7 @@ function ZoomableCircuit(props: {
|
|
|
88
90
|
props.circuitGroup,
|
|
89
91
|
container,
|
|
90
92
|
props.isEditable,
|
|
93
|
+
props.renderLocations,
|
|
91
94
|
props.editCallback,
|
|
92
95
|
props.runCallback,
|
|
93
96
|
);
|
|
@@ -174,17 +177,16 @@ function ZoomableCircuit(props: {
|
|
|
174
177
|
circuitGroup: qviz.CircuitGroup,
|
|
175
178
|
container: HTMLDivElement,
|
|
176
179
|
isEditable: boolean,
|
|
180
|
+
renderLocations?: (s: SourceLocation[]) => { title: string; href: string },
|
|
177
181
|
editCallback?: (fileData: qviz.CircuitGroup) => void,
|
|
178
182
|
runCallback?: () => void,
|
|
179
183
|
) {
|
|
180
|
-
qviz.draw(
|
|
181
|
-
circuitGroup,
|
|
182
|
-
container,
|
|
183
|
-
0,
|
|
184
|
+
qviz.draw(circuitGroup, container, {
|
|
184
185
|
isEditable,
|
|
185
186
|
editCallback,
|
|
186
187
|
runCallback,
|
|
187
|
-
|
|
188
|
+
renderLocations,
|
|
189
|
+
});
|
|
188
190
|
return container.getElementsByClassName("qviz")[0]!;
|
|
189
191
|
}
|
|
190
192
|
|
|
@@ -329,8 +331,40 @@ export function CircuitPanel(props: CircuitProps) {
|
|
|
329
331
|
isEditable={props.isEditable}
|
|
330
332
|
editCallback={props.editCallback}
|
|
331
333
|
runCallback={props.runCallback}
|
|
334
|
+
renderLocations={renderLocations}
|
|
332
335
|
></Circuit>
|
|
333
336
|
) : null}
|
|
334
337
|
</div>
|
|
335
338
|
);
|
|
336
339
|
}
|
|
340
|
+
|
|
341
|
+
function renderLocations(locations: SourceLocation[]) {
|
|
342
|
+
const qdkLocations = locations.map((location) => {
|
|
343
|
+
const position = {
|
|
344
|
+
line: location.line,
|
|
345
|
+
character: location.column,
|
|
346
|
+
};
|
|
347
|
+
return {
|
|
348
|
+
source: location.file,
|
|
349
|
+
span: {
|
|
350
|
+
start: position,
|
|
351
|
+
end: position,
|
|
352
|
+
},
|
|
353
|
+
};
|
|
354
|
+
});
|
|
355
|
+
|
|
356
|
+
const titles = locations.map((location) => {
|
|
357
|
+
const basename =
|
|
358
|
+
location.file.replace(/\/+$/, "").split("/").pop() ?? location.file;
|
|
359
|
+
const title = `${basename}:${location.line + 1}:${location.column + 1}`;
|
|
360
|
+
return title;
|
|
361
|
+
});
|
|
362
|
+
const title = titles.length > 1 ? `${titles[0]}, ...` : titles[0];
|
|
363
|
+
|
|
364
|
+
const argsStr = encodeURIComponent(JSON.stringify([qdkLocations]));
|
|
365
|
+
const href = `command:qsharp-vscode.gotoLocations?${argsStr}`;
|
|
366
|
+
return {
|
|
367
|
+
title,
|
|
368
|
+
href,
|
|
369
|
+
};
|
|
370
|
+
}
|
package/ux/histogram.tsx
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
// Copyright (c) Microsoft Corporation.
|
|
2
2
|
// Licensed under the MIT License.
|
|
3
3
|
|
|
4
|
-
import { useRef, useState } from "preact/hooks";
|
|
4
|
+
import { useEffect, useRef, useState } from "preact/hooks";
|
|
5
5
|
|
|
6
6
|
const menuItems = [
|
|
7
7
|
{
|
|
@@ -18,22 +18,67 @@ const menuItems = [
|
|
|
18
18
|
},
|
|
19
19
|
];
|
|
20
20
|
const maxMenuOptions = 3;
|
|
21
|
-
const defaultMenuSelection: { [idx: string]: number } = {
|
|
22
|
-
itemCount: 0,
|
|
23
|
-
sortOrder: 0,
|
|
24
|
-
labels: 0,
|
|
25
|
-
};
|
|
26
21
|
|
|
27
|
-
|
|
22
|
+
function getDefaultMenuSelection(
|
|
23
|
+
labels?: "raw" | "kets" | "none",
|
|
24
|
+
items?: "all" | "top-10" | "top-25",
|
|
25
|
+
sort?: "a-to-z" | "high-to-low" | "low-to-high",
|
|
26
|
+
): {
|
|
27
|
+
[idx: string]: number;
|
|
28
|
+
} {
|
|
29
|
+
const selection = {
|
|
30
|
+
itemCount: 0,
|
|
31
|
+
sortOrder: 0,
|
|
32
|
+
labels: 0,
|
|
33
|
+
};
|
|
34
|
+
switch (items) {
|
|
35
|
+
case "top-10":
|
|
36
|
+
selection["itemCount"] = 1;
|
|
37
|
+
break;
|
|
38
|
+
case "top-25":
|
|
39
|
+
selection["itemCount"] = 2;
|
|
40
|
+
break;
|
|
41
|
+
default:
|
|
42
|
+
selection["itemCount"] = 0;
|
|
43
|
+
break;
|
|
44
|
+
}
|
|
45
|
+
switch (sort) {
|
|
46
|
+
case "high-to-low":
|
|
47
|
+
selection["sortOrder"] = 1;
|
|
48
|
+
break;
|
|
49
|
+
case "low-to-high":
|
|
50
|
+
selection["sortOrder"] = 2;
|
|
51
|
+
break;
|
|
52
|
+
default:
|
|
53
|
+
selection["sortOrder"] = 0;
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
switch (labels) {
|
|
57
|
+
case "kets":
|
|
58
|
+
selection["labels"] = 1;
|
|
59
|
+
break;
|
|
60
|
+
case "none":
|
|
61
|
+
selection["labels"] = 2;
|
|
62
|
+
break;
|
|
63
|
+
default:
|
|
64
|
+
selection["labels"] = 0;
|
|
65
|
+
break;
|
|
66
|
+
}
|
|
67
|
+
return selection;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
const reKetResult = /^\[(?:(Zero|One|Loss), *)*(Zero|One|Loss)\]$/;
|
|
28
71
|
function resultToKet(result: string): string {
|
|
29
72
|
if (typeof result !== "string") return "ERROR";
|
|
30
73
|
|
|
31
74
|
if (reKetResult.test(result)) {
|
|
32
75
|
// The result is a simple array of Zero and One
|
|
33
76
|
// The below will return an array of "Zero" or "One" in the order found
|
|
34
|
-
const matches = result.match(/(One|Zero)/g);
|
|
77
|
+
const matches = result.match(/(One|Zero|Loss)/g);
|
|
35
78
|
let ket = "|";
|
|
36
|
-
matches?.forEach(
|
|
79
|
+
matches?.forEach(
|
|
80
|
+
(digit) => (ket += digit == "One" ? "1" : digit == "Zero" ? "0" : "-"),
|
|
81
|
+
);
|
|
37
82
|
ket += "⟩";
|
|
38
83
|
return ket;
|
|
39
84
|
} else {
|
|
@@ -47,10 +92,21 @@ export function Histogram(props: {
|
|
|
47
92
|
filter: string;
|
|
48
93
|
onFilter: (filter: string) => void;
|
|
49
94
|
shotsHeader: boolean;
|
|
95
|
+
labels?: "raw" | "kets" | "none";
|
|
96
|
+
items?: "all" | "top-10" | "top-25";
|
|
97
|
+
sort?: "a-to-z" | "high-to-low" | "low-to-high";
|
|
50
98
|
}) {
|
|
51
99
|
const [hoverLabel, setHoverLabel] = useState("");
|
|
52
100
|
const [scale, setScale] = useState({ zoom: 1.0, offset: 1.0 });
|
|
53
|
-
const [menuSelection, setMenuSelection] = useState(
|
|
101
|
+
const [menuSelection, setMenuSelection] = useState(() => {
|
|
102
|
+
return getDefaultMenuSelection(props.labels, props.items, props.sort);
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
useEffect(() => {
|
|
106
|
+
setMenuSelection(
|
|
107
|
+
getDefaultMenuSelection(props.labels, props.items, props.sort),
|
|
108
|
+
);
|
|
109
|
+
}, [props.labels, props.items, props.sort]);
|
|
54
110
|
|
|
55
111
|
const gMenu = useRef<SVGGElement>(null);
|
|
56
112
|
const gInfo = useRef<SVGGElement>(null);
|
|
@@ -92,9 +148,12 @@ export function Histogram(props: {
|
|
|
92
148
|
}
|
|
93
149
|
|
|
94
150
|
bucketArray.sort((a, b) => {
|
|
151
|
+
const a_label = showKetLabels ? resultToKet(a[0]) : a[0];
|
|
152
|
+
const b_label = showKetLabels ? resultToKet(b[0]) : b[0];
|
|
153
|
+
|
|
95
154
|
// If they can be converted to numbers, then sort as numbers, else lexically
|
|
96
|
-
const ax = Number(
|
|
97
|
-
const bx = Number(
|
|
155
|
+
const ax = Number(a_label);
|
|
156
|
+
const bx = Number(b_label);
|
|
98
157
|
switch (menuSelection["sortOrder"]) {
|
|
99
158
|
case 1: // high-to-low
|
|
100
159
|
return a[1] < b[1] ? 1 : -1;
|
|
@@ -104,7 +163,7 @@ export function Histogram(props: {
|
|
|
104
163
|
break;
|
|
105
164
|
default: // a-z
|
|
106
165
|
if (!isNaN(ax) && !isNaN(bx)) return ax < bx ? -1 : 1;
|
|
107
|
-
return
|
|
166
|
+
return a_label < b_label ? -1 : 1;
|
|
108
167
|
break;
|
|
109
168
|
}
|
|
110
169
|
});
|
|
@@ -248,6 +307,8 @@ export function Histogram(props: {
|
|
|
248
307
|
setScale({ zoom: newZoom, offset: boundScrollOffset });
|
|
249
308
|
}
|
|
250
309
|
|
|
310
|
+
const label_class = showKetLabels ? "bar-label bar-label-ket" : "bar-label";
|
|
311
|
+
|
|
251
312
|
return (
|
|
252
313
|
<>
|
|
253
314
|
{props.shotsHeader ? (
|
|
@@ -262,10 +323,12 @@ export function Histogram(props: {
|
|
|
262
323
|
const x = barBoxWidth * idx + barPaddingSize;
|
|
263
324
|
const labelX = barBoxWidth * idx + barBoxWidth / 2 - fontOffset;
|
|
264
325
|
const y = barAreaHeight + 15 - height;
|
|
265
|
-
const barLabel =
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
326
|
+
const barLabel =
|
|
327
|
+
props.shotCount == 0
|
|
328
|
+
? `${entry[1]}`
|
|
329
|
+
: `${label} at ${((entry[1] / totalAllBuckets) * 100).toFixed(
|
|
330
|
+
2,
|
|
331
|
+
)}%`;
|
|
269
332
|
let barClass = "bar";
|
|
270
333
|
|
|
271
334
|
if (entry[0] === props.filter) {
|
|
@@ -289,7 +352,7 @@ export function Histogram(props: {
|
|
|
289
352
|
</rect>
|
|
290
353
|
{
|
|
291
354
|
<text
|
|
292
|
-
class=
|
|
355
|
+
class={label_class}
|
|
293
356
|
x={labelX}
|
|
294
357
|
y="85"
|
|
295
358
|
visibility={showLabels ? "visible" : "hidden"}
|
package/ux/index.ts
CHANGED
|
@@ -20,3 +20,5 @@ export { EstimatesOverview } from "./estimatesOverview.js";
|
|
|
20
20
|
export { EstimatesPanel } from "./estimatesPanel.js";
|
|
21
21
|
export { Circuit, CircuitPanel } from "./circuit.js";
|
|
22
22
|
export { setRenderer, Markdown } from "./renderers.js";
|
|
23
|
+
export { Atoms, type ZoneLayout, type TraceData } from "./atoms/index.js";
|
|
24
|
+
export { MoleculeViewer } from "./chem/index.js";
|
package/ux/qsharp-circuit.css
CHANGED
|
@@ -72,6 +72,34 @@
|
|
|
72
72
|
fill: var(--vscode-button-secondaryForeground, #ffffff);
|
|
73
73
|
}
|
|
74
74
|
|
|
75
|
+
a.qs-circuit-source-link .qs-qubit-label {
|
|
76
|
+
pointer-events: auto;
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
/* Hover effect for clickable gates */
|
|
80
|
+
a.qs-circuit-source-link:hover .gate-unitary {
|
|
81
|
+
fill: var(--vscode-button-secondaryHoverBackground, #4d4d4d);
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
a.qs-circuit-source-link:hover .gate-measure,
|
|
85
|
+
a.qs-circuit-source-link:hover .gate-ket {
|
|
86
|
+
fill: var(--vscode-button-hoverBackground, #005a9e);
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
a.qs-circuit-source-link:hover .qs-qubit-label {
|
|
90
|
+
fill: var(--vscode-editorLink-activeForeground, #5d5d5d);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
a.qs-circuit-source-link:hover .control-dot {
|
|
94
|
+
fill: var(--vscode-editorLink-activeForeground, #5d5d5d);
|
|
95
|
+
stroke: var(--vscode-editorLink-activeForeground, #5d5d5d);
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
a.qs-circuit-source-link:hover .oplus > line,
|
|
99
|
+
a.qs-circuit-source-link:hover .oplus > circle {
|
|
100
|
+
stroke: var(--vscode-editorLink-activeForeground, #5d5d5d);
|
|
101
|
+
}
|
|
102
|
+
|
|
75
103
|
/* Default style for arg-button */
|
|
76
104
|
.arg-button {
|
|
77
105
|
fill: var(--vscode-editor-foreground, #ffffff);
|
|
@@ -108,7 +136,7 @@
|
|
|
108
136
|
}
|
|
109
137
|
|
|
110
138
|
/* Measurement gate icon */
|
|
111
|
-
.
|
|
139
|
+
.qs-line-measure,
|
|
112
140
|
.arc-measure {
|
|
113
141
|
stroke: var(--vscode-button-foreground, #ffffff);
|
|
114
142
|
fill: none;
|
package/ux/qsharp-ux.css
CHANGED
|
@@ -350,11 +350,12 @@ modern-normalize (see https://mattbrictson.com/blog/css-normalize-and-reset for
|
|
|
350
350
|
}
|
|
351
351
|
|
|
352
352
|
.bar {
|
|
353
|
-
fill: var(--vscode-
|
|
353
|
+
fill: var(--vscode-editorInfo-foreground, var(--nav-background));
|
|
354
354
|
}
|
|
355
355
|
|
|
356
356
|
.bar:hover {
|
|
357
|
-
|
|
357
|
+
stroke: gray;
|
|
358
|
+
stroke-width: 0.5;
|
|
358
359
|
}
|
|
359
360
|
|
|
360
361
|
.bar-selected {
|
|
@@ -364,11 +365,15 @@ modern-normalize (see https://mattbrictson.com/blog/css-normalize-and-reset for
|
|
|
364
365
|
|
|
365
366
|
.bar-label {
|
|
366
367
|
font-size: 3pt;
|
|
367
|
-
fill: var(--vscode-
|
|
368
|
+
fill: var(--vscode-icon-foreground, var(--main-color));
|
|
368
369
|
text-anchor: end;
|
|
369
370
|
pointer-events: none;
|
|
370
371
|
}
|
|
371
372
|
|
|
373
|
+
.bar-label-ket {
|
|
374
|
+
font-family: "Courier", monospace;
|
|
375
|
+
}
|
|
376
|
+
|
|
372
377
|
.histo-label {
|
|
373
378
|
font-size: 3.5pt;
|
|
374
379
|
fill: var(--vscode-foreground, #3b3b3b);
|