qsharp-lang 1.22.4-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/data-structures/circuit.d.ts +6 -1
- 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 +81 -81
- package/lib/nodejs/qsc_wasm.d.cts +2 -1
- package/lib/nodejs/qsc_wasm_bg.wasm +0 -0
- package/lib/web/qsc_wasm.d.ts +2 -1
- package/lib/web/qsc_wasm.js +74 -74
- 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/events.ts +1 -5
- package/ux/circuit-vis/formatters/gateFormatter.ts +1 -1
- package/ux/circuit-vis/process.ts +13 -5
- package/ux/circuit-vis/sqore.ts +10 -8
- package/ux/index.ts +2 -0
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
|
+
|
|
4
|
+
// **** Helper functions for rendering SVG elements ****
|
|
5
|
+
|
|
6
|
+
type StringMap = Record<string, string>;
|
|
7
|
+
|
|
8
|
+
export function createSvgElements(...tags: string[]): SVGElement[] {
|
|
9
|
+
return tags.map((tag) =>
|
|
10
|
+
document.createElementNS("http://www.w3.org/2000/svg", tag),
|
|
11
|
+
);
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
export function setAttributes(el: SVGElement, attrs: StringMap) {
|
|
15
|
+
for (const key in attrs) el.setAttribute(key, attrs[key]);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
export function appendChildren(parent: Element, children: Element[]) {
|
|
19
|
+
children.forEach((child) => parent.appendChild(child));
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
export function addChildWithClass(
|
|
23
|
+
parent: HTMLElement,
|
|
24
|
+
childTag: string,
|
|
25
|
+
className: string,
|
|
26
|
+
): HTMLElement {
|
|
27
|
+
const parentDoc = parent.ownerDocument;
|
|
28
|
+
const child = parentDoc.createElement(childTag);
|
|
29
|
+
child.classList.add(className);
|
|
30
|
+
parent.appendChild(child);
|
|
31
|
+
return child;
|
|
32
|
+
}
|
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
|
+
|
|
4
|
+
import { useRef, useEffect, useState } from "preact/hooks";
|
|
5
|
+
import { createViewer, GLViewer } from "3dmol";
|
|
6
|
+
|
|
7
|
+
import "./style.css";
|
|
8
|
+
|
|
9
|
+
const themeAttribute = "data-vscode-theme-kind";
|
|
10
|
+
|
|
11
|
+
export function MoleculeViewer(props: {
|
|
12
|
+
moleculeData: string;
|
|
13
|
+
cubeData: { [key: string]: string };
|
|
14
|
+
isoValue?: number;
|
|
15
|
+
}) {
|
|
16
|
+
// Holds reference to the viewer div and 3Dmol viewer object.
|
|
17
|
+
const viewerRef = useRef<HTMLDivElement>(null);
|
|
18
|
+
const viewer = useRef<GLViewer | null>(null);
|
|
19
|
+
const activeCubeData = useRef([] as any[]);
|
|
20
|
+
|
|
21
|
+
const [viewStyle, setViewStyle] = useState("Sphere");
|
|
22
|
+
const [isoval, setIsoval] = useState(props.isoValue || 0.02);
|
|
23
|
+
const [cubeKey, setCubeKey] = useState(Object.keys(props.cubeData)[0] || "");
|
|
24
|
+
|
|
25
|
+
// Runs after the DOM has been created. Create the 3Dmol viewer and adds the model.
|
|
26
|
+
useEffect(() => {
|
|
27
|
+
if (props.moleculeData && viewerRef.current) {
|
|
28
|
+
const molViewer =
|
|
29
|
+
viewer.current ??
|
|
30
|
+
createViewer(viewerRef.current, {
|
|
31
|
+
backgroundColor: getComputedStyle(document.body).getPropertyValue(
|
|
32
|
+
"--vscode-editor-background",
|
|
33
|
+
),
|
|
34
|
+
});
|
|
35
|
+
try {
|
|
36
|
+
molViewer.clear(); // If the model is being replaced, clear the old one. Perhaps should get and update instead?
|
|
37
|
+
molViewer.addModel(props.moleculeData.trim(), "xyz", {
|
|
38
|
+
assignBonds: true,
|
|
39
|
+
});
|
|
40
|
+
} catch (error) {
|
|
41
|
+
console.error("Error adding model:", error);
|
|
42
|
+
}
|
|
43
|
+
viewer.current = molViewer;
|
|
44
|
+
viewer.current.zoomTo();
|
|
45
|
+
}
|
|
46
|
+
|
|
47
|
+
// Respond to theme changes
|
|
48
|
+
const callback = (mutations: MutationRecord[]) => {
|
|
49
|
+
for (const mutation of mutations) {
|
|
50
|
+
if (mutation.attributeName === themeAttribute) {
|
|
51
|
+
const newBackgroundColor = getComputedStyle(
|
|
52
|
+
document.body,
|
|
53
|
+
).getPropertyValue("--vscode-editor-background");
|
|
54
|
+
if (viewer.current) {
|
|
55
|
+
viewer.current.setBackgroundColor(newBackgroundColor, 1.0);
|
|
56
|
+
viewer.current.render();
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
};
|
|
61
|
+
const observer = new MutationObserver(callback);
|
|
62
|
+
observer.observe(document.body, { attributeFilter: [themeAttribute] });
|
|
63
|
+
}, [props.moleculeData]);
|
|
64
|
+
|
|
65
|
+
useEffect(() => {
|
|
66
|
+
const currViewer = viewer.current;
|
|
67
|
+
if (!currViewer) {
|
|
68
|
+
return;
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
if (cubeKey && props.cubeData[cubeKey]) {
|
|
72
|
+
activeCubeData.current.forEach((voldata) => {
|
|
73
|
+
currViewer.removeShape(voldata);
|
|
74
|
+
});
|
|
75
|
+
activeCubeData.current = [];
|
|
76
|
+
const cubeData = props.cubeData[cubeKey];
|
|
77
|
+
activeCubeData.current.push(
|
|
78
|
+
currViewer.addVolumetricData(cubeData.trim(), "cube", {
|
|
79
|
+
isoval,
|
|
80
|
+
opacity: 1,
|
|
81
|
+
color: "red",
|
|
82
|
+
}),
|
|
83
|
+
);
|
|
84
|
+
activeCubeData.current.push(
|
|
85
|
+
currViewer.addVolumetricData(cubeData.trim(), "cube", {
|
|
86
|
+
isoval: -1 * isoval,
|
|
87
|
+
opacity: 1,
|
|
88
|
+
color: "green",
|
|
89
|
+
}),
|
|
90
|
+
);
|
|
91
|
+
}
|
|
92
|
+
|
|
93
|
+
if (viewStyle === "Sphere") {
|
|
94
|
+
currViewer.setStyle({}, { sphere: { scale: 0.3 }, stick: {} });
|
|
95
|
+
} else if (viewStyle === "Stick") {
|
|
96
|
+
currViewer.setStyle({}, { stick: { radius: 0.2 } });
|
|
97
|
+
} else if (viewStyle === "Line") {
|
|
98
|
+
currViewer.setStyle({}, { line: { linewidth: 5.0 } });
|
|
99
|
+
}
|
|
100
|
+
currViewer.render();
|
|
101
|
+
|
|
102
|
+
// Sometimes keys are added later. If that's the case, change the cubeKey to the first available.
|
|
103
|
+
if (!cubeKey && Object.keys(props.cubeData).length > 0) {
|
|
104
|
+
setCubeKey(Object.keys(props.cubeData)[0]);
|
|
105
|
+
}
|
|
106
|
+
}, [viewStyle, isoval, cubeKey, props.moleculeData, props.cubeData]);
|
|
107
|
+
|
|
108
|
+
// React to changes in the initial isovalue prop, just in case the widget updates state in parts.
|
|
109
|
+
useEffect(() => {
|
|
110
|
+
setIsoval(props.isoValue || 0.02);
|
|
111
|
+
}, [props.isoValue]);
|
|
112
|
+
|
|
113
|
+
return (
|
|
114
|
+
<div id="viewer-container">
|
|
115
|
+
<div
|
|
116
|
+
id="viewer"
|
|
117
|
+
ref={viewerRef}
|
|
118
|
+
style="width: 640px; height: 480px;"
|
|
119
|
+
></div>
|
|
120
|
+
|
|
121
|
+
<div id="view-dropdown-container" class="view-option">
|
|
122
|
+
<label for="viewSelector">Visualization Style:</label>
|
|
123
|
+
<select
|
|
124
|
+
id="viewSelector"
|
|
125
|
+
onChange={(e) => {
|
|
126
|
+
const style = (e.target as HTMLSelectElement).value;
|
|
127
|
+
setViewStyle(style);
|
|
128
|
+
}}
|
|
129
|
+
>
|
|
130
|
+
<option value="Sphere">Sphere</option>
|
|
131
|
+
<option value="Stick">Stick</option>
|
|
132
|
+
<option value="Line">Line</option>
|
|
133
|
+
</select>
|
|
134
|
+
</div>
|
|
135
|
+
{cubeKey ? (
|
|
136
|
+
<>
|
|
137
|
+
<div id="cube-dropdown-container" class="view-option">
|
|
138
|
+
<label for="cubeSelector">Cube selection:</label>
|
|
139
|
+
<select
|
|
140
|
+
id="cubeSelector"
|
|
141
|
+
onChange={(e) => {
|
|
142
|
+
const key = (e.target as HTMLSelectElement).value;
|
|
143
|
+
setCubeKey(key);
|
|
144
|
+
}}
|
|
145
|
+
>
|
|
146
|
+
{Object.keys(props.cubeData).map((key) => (
|
|
147
|
+
<option value={key} selected={key === cubeKey}>
|
|
148
|
+
{key}
|
|
149
|
+
</option>
|
|
150
|
+
))}
|
|
151
|
+
</select>
|
|
152
|
+
</div>
|
|
153
|
+
|
|
154
|
+
<div id="isoval-slider-container" class="view-option">
|
|
155
|
+
<label for="isovalSlider">Adjust isovalue:</label>
|
|
156
|
+
<input
|
|
157
|
+
type="range"
|
|
158
|
+
id="isovalSlider"
|
|
159
|
+
min="0.005"
|
|
160
|
+
max="0.1"
|
|
161
|
+
step="0.005"
|
|
162
|
+
value={isoval}
|
|
163
|
+
onInput={(e) => {
|
|
164
|
+
const new_isoval = parseFloat(
|
|
165
|
+
(e.target as HTMLInputElement).value,
|
|
166
|
+
);
|
|
167
|
+
setIsoval(new_isoval);
|
|
168
|
+
}}
|
|
169
|
+
/>
|
|
170
|
+
<input
|
|
171
|
+
type="number"
|
|
172
|
+
id="isovalInput"
|
|
173
|
+
min="0.005"
|
|
174
|
+
max="0.1"
|
|
175
|
+
step="0.001"
|
|
176
|
+
value={isoval}
|
|
177
|
+
onInput={(e) => {
|
|
178
|
+
const new_isoval = parseFloat(
|
|
179
|
+
(e.target as HTMLInputElement).value,
|
|
180
|
+
);
|
|
181
|
+
if (!isNaN(new_isoval)) {
|
|
182
|
+
setIsoval(new_isoval);
|
|
183
|
+
}
|
|
184
|
+
}}
|
|
185
|
+
/>
|
|
186
|
+
</div>
|
|
187
|
+
</>
|
|
188
|
+
) : null}
|
|
189
|
+
</div>
|
|
190
|
+
);
|
|
191
|
+
}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
#viewer {
|
|
2
|
+
width: 100%;
|
|
3
|
+
height: 100%;
|
|
4
|
+
margin: 0;
|
|
5
|
+
overflow: hidden;
|
|
6
|
+
}
|
|
7
|
+
|
|
8
|
+
#viewer-container {
|
|
9
|
+
width: 100%;
|
|
10
|
+
height: 100%;
|
|
11
|
+
margin: 0;
|
|
12
|
+
overflow: hidden;
|
|
13
|
+
/* border: 1px solid gray; */
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
#viewer {
|
|
17
|
+
width: 100%;
|
|
18
|
+
height: 100%;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
#view-dropdown-container {
|
|
22
|
+
position: absolute;
|
|
23
|
+
top: 10px; /* distance from bottom */
|
|
24
|
+
left: 10px; /* distance from right */
|
|
25
|
+
height: 20px;
|
|
26
|
+
padding: 10px;
|
|
27
|
+
border-radius: 4px;
|
|
28
|
+
z-index: 10;
|
|
29
|
+
font-family: system-ui;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
#viewSelector {
|
|
33
|
+
padding-left: 4px;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
.view-option {
|
|
37
|
+
display: flex;
|
|
38
|
+
align-items: center;
|
|
39
|
+
gap: 8px;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
.view-option label {
|
|
43
|
+
margin-right: 0;
|
|
44
|
+
white-space: nowrap;
|
|
45
|
+
min-width: 120px;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
.view-option select,
|
|
49
|
+
.view-option input[type="range"] {
|
|
50
|
+
color: var(--vscode-editor-foreground);
|
|
51
|
+
background-color: var(--vscode-editor-background);
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
#cube-dropdown-container {
|
|
55
|
+
position: absolute;
|
|
56
|
+
top: 40px; /* distance from bottom */
|
|
57
|
+
left: 10px; /* distance from right */
|
|
58
|
+
padding: 10px;
|
|
59
|
+
height: 20px;
|
|
60
|
+
border-radius: 4px;
|
|
61
|
+
z-index: 10;
|
|
62
|
+
font-family: system-ui;
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
#isoval-slider-container {
|
|
66
|
+
position: absolute;
|
|
67
|
+
top: 70px; /* distance from bottom */
|
|
68
|
+
left: 10px; /* distance from right */
|
|
69
|
+
padding: 10px;
|
|
70
|
+
height: 40px;
|
|
71
|
+
border-radius: 4px;
|
|
72
|
+
z-index: 10;
|
|
73
|
+
font-family: system-ui;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
#isovalSlider {
|
|
77
|
+
width: 100px;
|
|
78
|
+
outline: none;
|
|
79
|
+
}
|
|
80
|
+
|
|
81
|
+
#isovalInput {
|
|
82
|
+
width: 64px;
|
|
83
|
+
}
|
package/ux/circuit-vis/events.ts
CHANGED
|
@@ -170,11 +170,7 @@ class CircuitEvents {
|
|
|
170
170
|
this.selectedOperation.controls != null &&
|
|
171
171
|
this.selectedWire != null
|
|
172
172
|
) {
|
|
173
|
-
|
|
174
|
-
(control) => control.qubit === this.selectedWire,
|
|
175
|
-
);
|
|
176
|
-
if (controlIndex !== -1)
|
|
177
|
-
this.selectedOperation.controls.splice(controlIndex, 1);
|
|
173
|
+
removeControl(this, this.selectedOperation, this.selectedWire);
|
|
178
174
|
} else {
|
|
179
175
|
// Otherwise, remove the selectedOperation
|
|
180
176
|
removeOperation(this, selectedLocation);
|
|
@@ -164,7 +164,7 @@ const _zoomButton = (
|
|
|
164
164
|
let { dataAttributes } = renderData;
|
|
165
165
|
dataAttributes = dataAttributes || {};
|
|
166
166
|
|
|
167
|
-
const expanded = "expanded"
|
|
167
|
+
const expanded = dataAttributes["expanded"] == "true";
|
|
168
168
|
|
|
169
169
|
const x = gateBoundingBoxX + 2;
|
|
170
170
|
const y = gateBoundingBoxY + 2;
|
|
@@ -213,7 +213,11 @@ const _opToRenderData = (
|
|
|
213
213
|
),
|
|
214
214
|
}))
|
|
215
215
|
.filter((col) => col.components.length > 0);
|
|
216
|
-
let childrenInstrs = processOperations(
|
|
216
|
+
let childrenInstrs = processOperations(
|
|
217
|
+
onZeroOps,
|
|
218
|
+
registers,
|
|
219
|
+
renderLocations,
|
|
220
|
+
);
|
|
217
221
|
const zeroGates: GateRenderData[][] = childrenInstrs.renderDataArray;
|
|
218
222
|
const zeroChildWidth: number = childrenInstrs.svgWidth;
|
|
219
223
|
|
|
@@ -225,7 +229,7 @@ const _opToRenderData = (
|
|
|
225
229
|
),
|
|
226
230
|
}))
|
|
227
231
|
.filter((col) => col.components.length > 0);
|
|
228
|
-
childrenInstrs = processOperations(onOneOps, registers);
|
|
232
|
+
childrenInstrs = processOperations(onOneOps, registers, renderLocations);
|
|
229
233
|
const oneGates: GateRenderData[][] = childrenInstrs.renderDataArray;
|
|
230
234
|
const oneChildWidth: number = childrenInstrs.svgWidth;
|
|
231
235
|
|
|
@@ -247,7 +251,11 @@ const _opToRenderData = (
|
|
|
247
251
|
conditionalRender == ConditionalRender.AsGroup &&
|
|
248
252
|
(children?.length || 0) > 0
|
|
249
253
|
) {
|
|
250
|
-
const childrenInstrs = processOperations(
|
|
254
|
+
const childrenInstrs = processOperations(
|
|
255
|
+
children!,
|
|
256
|
+
registers,
|
|
257
|
+
renderLocations,
|
|
258
|
+
);
|
|
251
259
|
renderData.type = GateType.Group;
|
|
252
260
|
renderData.children = childrenInstrs.renderDataArray;
|
|
253
261
|
// _zoomButton function in gateFormatter.ts relies on
|
|
@@ -285,8 +293,8 @@ const _opToRenderData = (
|
|
|
285
293
|
// Set gate width
|
|
286
294
|
renderData.width = getGateWidth(renderData);
|
|
287
295
|
|
|
288
|
-
if (op.source && renderLocations) {
|
|
289
|
-
renderData.link = renderLocations([op.source]);
|
|
296
|
+
if (op.metadata?.source && renderLocations) {
|
|
297
|
+
renderData.link = renderLocations([op.metadata.source]);
|
|
290
298
|
}
|
|
291
299
|
|
|
292
300
|
// Extend existing data attributes with user-provided data attributes
|
package/ux/circuit-vis/sqore.ts
CHANGED
|
@@ -59,6 +59,7 @@ export type DrawOptions = {
|
|
|
59
59
|
export class Sqore {
|
|
60
60
|
circuit: Circuit;
|
|
61
61
|
gateRegistry: GateRegistry = {};
|
|
62
|
+
renderDepth: number = this.options.renderDepth ?? 0;
|
|
62
63
|
/**
|
|
63
64
|
* Initializes Sqore object.
|
|
64
65
|
*
|
|
@@ -106,7 +107,6 @@ export class Sqore {
|
|
|
106
107
|
// Create copy of circuit to prevent mutation
|
|
107
108
|
const _circuit: Circuit =
|
|
108
109
|
circuit ?? JSON.parse(JSON.stringify(this.circuit));
|
|
109
|
-
const renderDepth = this.options.renderDepth || 0;
|
|
110
110
|
|
|
111
111
|
// Assign unique locations to each operation
|
|
112
112
|
_circuit.componentGrid.forEach((col, colIndex) =>
|
|
@@ -118,7 +118,7 @@ export class Sqore {
|
|
|
118
118
|
// Render operations starting at given depth
|
|
119
119
|
_circuit.componentGrid = this.selectOpsAtDepth(
|
|
120
120
|
_circuit.componentGrid,
|
|
121
|
-
renderDepth,
|
|
121
|
+
this.renderDepth,
|
|
122
122
|
);
|
|
123
123
|
|
|
124
124
|
// If only one top-level operation, expand automatically:
|
|
@@ -129,7 +129,9 @@ export class Sqore {
|
|
|
129
129
|
Object.prototype.hasOwnProperty.call(
|
|
130
130
|
_circuit.componentGrid[0].components[0].dataAttributes,
|
|
131
131
|
"location",
|
|
132
|
-
)
|
|
132
|
+
) &&
|
|
133
|
+
_circuit.componentGrid[0].components[0].dataAttributes["expanded"] !==
|
|
134
|
+
"false"
|
|
133
135
|
) {
|
|
134
136
|
const location: string =
|
|
135
137
|
_circuit.componentGrid[0].components[0].dataAttributes["location"];
|
|
@@ -337,11 +339,11 @@ export class Sqore {
|
|
|
337
339
|
} else {
|
|
338
340
|
selectedCol.push(op);
|
|
339
341
|
}
|
|
340
|
-
selectedOps.push({ components: selectedCol });
|
|
341
|
-
if (extraCols.length > 0) {
|
|
342
|
-
selectedOps.push(...extraCols);
|
|
343
|
-
}
|
|
344
342
|
});
|
|
343
|
+
selectedOps.push({ components: selectedCol });
|
|
344
|
+
if (extraCols.length > 0) {
|
|
345
|
+
selectedOps.push(...extraCols);
|
|
346
|
+
}
|
|
345
347
|
});
|
|
346
348
|
return selectedOps;
|
|
347
349
|
}
|
|
@@ -478,7 +480,7 @@ export class Sqore {
|
|
|
478
480
|
// Collapse parent gate and its children
|
|
479
481
|
if (opId.startsWith(parentLoc)) {
|
|
480
482
|
op.conditionalRender = ConditionalRender.Always;
|
|
481
|
-
|
|
483
|
+
op.dataAttributes["expanded"] = "false";
|
|
482
484
|
}
|
|
483
485
|
}),
|
|
484
486
|
);
|
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";
|