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.
Files changed (346) hide show
  1. package/dist/compiler/common.d.ts +16 -3
  2. package/dist/compiler/compiler.d.ts +3 -3
  3. package/dist/compiler/compiler.js +2 -2
  4. package/dist/data-structures/circuit.d.ts +13 -0
  5. package/docs/Microsoft.Quantum.Core/IsRangeEmpty.md +1 -1
  6. package/docs/Microsoft.Quantum.Core/Length.md +1 -1
  7. package/docs/Microsoft.Quantum.Core/RangeEnd.md +1 -1
  8. package/docs/Microsoft.Quantum.Core/RangeStart.md +1 -1
  9. package/docs/Microsoft.Quantum.Core/Repeated.md +1 -1
  10. package/docs/Microsoft.Quantum.Core/index.md +1 -1
  11. package/docs/Std.Arithmetic/AddLE.md +1 -1
  12. package/docs/Std.Arithmetic/ApplyIfEqualL.md +1 -1
  13. package/docs/Std.Arithmetic/ApplyIfEqualLE.md +1 -1
  14. package/docs/Std.Arithmetic/ApplyIfGreaterL.md +1 -1
  15. package/docs/Std.Arithmetic/ApplyIfGreaterLE.md +1 -1
  16. package/docs/Std.Arithmetic/ApplyIfGreaterOrEqualL.md +1 -1
  17. package/docs/Std.Arithmetic/ApplyIfGreaterOrEqualLE.md +1 -1
  18. package/docs/Std.Arithmetic/ApplyIfLessL.md +1 -1
  19. package/docs/Std.Arithmetic/ApplyIfLessLE.md +1 -1
  20. package/docs/Std.Arithmetic/ApplyIfLessOrEqualL.md +1 -1
  21. package/docs/Std.Arithmetic/ApplyIfLessOrEqualLE.md +1 -1
  22. package/docs/Std.Arithmetic/FourierTDIncByLE.md +1 -1
  23. package/docs/Std.Arithmetic/IncByI.md +1 -1
  24. package/docs/Std.Arithmetic/IncByIUsingIncByLE.md +1 -1
  25. package/docs/Std.Arithmetic/IncByL.md +1 -1
  26. package/docs/Std.Arithmetic/IncByLE.md +1 -1
  27. package/docs/Std.Arithmetic/IncByLEUsingAddLE.md +1 -1
  28. package/docs/Std.Arithmetic/IncByLUsingIncByLE.md +1 -1
  29. package/docs/Std.Arithmetic/LookAheadDKRSAddLE.md +1 -1
  30. package/docs/Std.Arithmetic/MAJ.md +1 -1
  31. package/docs/Std.Arithmetic/ReflectAboutInteger.md +1 -1
  32. package/docs/Std.Arithmetic/RippleCarryCGAddLE.md +1 -1
  33. package/docs/Std.Arithmetic/RippleCarryCGIncByLE.md +1 -1
  34. package/docs/Std.Arithmetic/RippleCarryTTKIncByLE.md +1 -1
  35. package/docs/Std.Arithmetic/index.md +1 -1
  36. package/docs/Std.Arrays/All.md +1 -1
  37. package/docs/Std.Arrays/Any.md +1 -1
  38. package/docs/Std.Arrays/Chunks.md +1 -1
  39. package/docs/Std.Arrays/CircularlyShifted.md +1 -1
  40. package/docs/Std.Arrays/ColumnAt.md +1 -1
  41. package/docs/Std.Arrays/Count.md +1 -1
  42. package/docs/Std.Arrays/Diagonal.md +1 -1
  43. package/docs/Std.Arrays/DrawMany.md +1 -1
  44. package/docs/Std.Arrays/Enumerated.md +1 -1
  45. package/docs/Std.Arrays/Excluding.md +1 -1
  46. package/docs/Std.Arrays/Filtered.md +1 -1
  47. package/docs/Std.Arrays/FlatMapped.md +1 -1
  48. package/docs/Std.Arrays/Flattened.md +1 -1
  49. package/docs/Std.Arrays/Fold.md +1 -1
  50. package/docs/Std.Arrays/ForEach.md +1 -1
  51. package/docs/Std.Arrays/Head.md +1 -1
  52. package/docs/Std.Arrays/HeadAndRest.md +1 -1
  53. package/docs/Std.Arrays/IndexOf.md +1 -1
  54. package/docs/Std.Arrays/IndexRange.md +1 -1
  55. package/docs/Std.Arrays/Interleaved.md +1 -1
  56. package/docs/Std.Arrays/IsEmpty.md +1 -1
  57. package/docs/Std.Arrays/IsRectangularArray.md +1 -1
  58. package/docs/Std.Arrays/IsSorted.md +1 -1
  59. package/docs/Std.Arrays/IsSquareArray.md +1 -1
  60. package/docs/Std.Arrays/Mapped.md +1 -1
  61. package/docs/Std.Arrays/MappedByIndex.md +1 -1
  62. package/docs/Std.Arrays/MappedOverRange.md +1 -1
  63. package/docs/Std.Arrays/Most.md +1 -1
  64. package/docs/Std.Arrays/MostAndTail.md +1 -1
  65. package/docs/Std.Arrays/Padded.md +1 -1
  66. package/docs/Std.Arrays/Partitioned.md +1 -1
  67. package/docs/Std.Arrays/Rest.md +1 -1
  68. package/docs/Std.Arrays/Reversed.md +1 -1
  69. package/docs/Std.Arrays/SequenceI.md +1 -1
  70. package/docs/Std.Arrays/SequenceL.md +1 -1
  71. package/docs/Std.Arrays/Sorted.md +1 -1
  72. package/docs/Std.Arrays/Subarray.md +1 -1
  73. package/docs/Std.Arrays/Swapped.md +1 -1
  74. package/docs/Std.Arrays/Tail.md +1 -1
  75. package/docs/Std.Arrays/Transposed.md +1 -1
  76. package/docs/Std.Arrays/Unzipped.md +1 -1
  77. package/docs/Std.Arrays/Where.md +1 -1
  78. package/docs/Std.Arrays/Windows.md +1 -1
  79. package/docs/Std.Arrays/Zipped.md +1 -1
  80. package/docs/Std.Arrays/index.md +1 -1
  81. package/docs/Std.Canon/ApplyCNOTChain.md +1 -1
  82. package/docs/Std.Canon/ApplyControlledOnBitString.md +1 -1
  83. package/docs/Std.Canon/ApplyControlledOnInt.md +1 -1
  84. package/docs/Std.Canon/ApplyOperationPowerA.md +1 -1
  85. package/docs/Std.Canon/ApplyOperationPowerCA.md +1 -1
  86. package/docs/Std.Canon/ApplyP.md +1 -1
  87. package/docs/Std.Canon/ApplyPauli.md +1 -1
  88. package/docs/Std.Canon/ApplyPauliFromBitString.md +1 -1
  89. package/docs/Std.Canon/ApplyPauliFromInt.md +1 -1
  90. package/docs/Std.Canon/ApplyQFT.md +1 -1
  91. package/docs/Std.Canon/ApplyQPE.md +1 -1
  92. package/docs/Std.Canon/ApplyToEach.md +1 -1
  93. package/docs/Std.Canon/ApplyToEachA.md +1 -1
  94. package/docs/Std.Canon/ApplyToEachC.md +1 -1
  95. package/docs/Std.Canon/ApplyToEachCA.md +1 -1
  96. package/docs/Std.Canon/ApplyXorInPlace.md +1 -1
  97. package/docs/Std.Canon/ApplyXorInPlaceL.md +1 -1
  98. package/docs/Std.Canon/CX.md +1 -1
  99. package/docs/Std.Canon/CY.md +1 -1
  100. package/docs/Std.Canon/CZ.md +1 -1
  101. package/docs/Std.Canon/Fst.md +1 -1
  102. package/docs/Std.Canon/MapPauliAxis.md +1 -1
  103. package/docs/Std.Canon/Relabel.md +1 -1
  104. package/docs/Std.Canon/Snd.md +1 -1
  105. package/docs/Std.Canon/SwapReverseRegister.md +1 -1
  106. package/docs/Std.Canon/index.md +1 -1
  107. package/docs/Std.Convert/BigIntAsBoolArray.md +1 -1
  108. package/docs/Std.Convert/BigIntAsInt.md +1 -1
  109. package/docs/Std.Convert/BoolArrayAsBigInt.md +1 -1
  110. package/docs/Std.Convert/BoolArrayAsInt.md +1 -1
  111. package/docs/Std.Convert/BoolArrayAsResultArray.md +1 -1
  112. package/docs/Std.Convert/BoolAsResult.md +1 -1
  113. package/docs/Std.Convert/ComplexAsComplexPolar.md +1 -1
  114. package/docs/Std.Convert/ComplexPolarAsComplex.md +1 -1
  115. package/docs/Std.Convert/DoubleAsStringWithPrecision.md +1 -1
  116. package/docs/Std.Convert/IntAsBigInt.md +1 -1
  117. package/docs/Std.Convert/IntAsBoolArray.md +1 -1
  118. package/docs/Std.Convert/IntAsDouble.md +1 -1
  119. package/docs/Std.Convert/ResultArrayAsBoolArray.md +1 -1
  120. package/docs/Std.Convert/ResultArrayAsInt.md +1 -1
  121. package/docs/Std.Convert/ResultAsBool.md +1 -1
  122. package/docs/Std.Convert/index.md +1 -1
  123. package/docs/Std.Core/Complex.md +1 -1
  124. package/docs/Std.Core/Length.md +1 -1
  125. package/docs/Std.Core/Repeated.md +1 -1
  126. package/docs/Std.Core/index.md +1 -1
  127. package/docs/Std.Diagnostics/ApplyIdleNoise.md +1 -1
  128. package/docs/Std.Diagnostics/BitFlipNoise.md +1 -1
  129. package/docs/Std.Diagnostics/CheckAllZero.md +1 -1
  130. package/docs/Std.Diagnostics/CheckOperationsAreEqual.md +1 -1
  131. package/docs/Std.Diagnostics/CheckZero.md +1 -1
  132. package/docs/Std.Diagnostics/ConfigurePauliNoise.md +1 -1
  133. package/docs/Std.Diagnostics/ConfigureQubitLoss.md +1 -1
  134. package/docs/Std.Diagnostics/DepolarizingNoise.md +1 -1
  135. package/docs/Std.Diagnostics/DumpMachine.md +1 -1
  136. package/docs/Std.Diagnostics/DumpOperation.md +1 -1
  137. package/docs/Std.Diagnostics/DumpRegister.md +1 -1
  138. package/docs/Std.Diagnostics/Fact.md +1 -1
  139. package/docs/Std.Diagnostics/NoNoise.md +1 -1
  140. package/docs/Std.Diagnostics/PhaseFlipNoise.md +1 -1
  141. package/docs/Std.Diagnostics/StartCountingFunction.md +1 -1
  142. package/docs/Std.Diagnostics/StartCountingOperation.md +1 -1
  143. package/docs/Std.Diagnostics/StartCountingQubits.md +1 -1
  144. package/docs/Std.Diagnostics/StopCountingFunction.md +1 -1
  145. package/docs/Std.Diagnostics/StopCountingOperation.md +1 -1
  146. package/docs/Std.Diagnostics/StopCountingQubits.md +1 -1
  147. package/docs/Std.Diagnostics/index.md +1 -1
  148. package/docs/Std.Intrinsic/AND.md +1 -1
  149. package/docs/Std.Intrinsic/ApplyUnitary.md +1 -1
  150. package/docs/Std.Intrinsic/CCNOT.md +1 -1
  151. package/docs/Std.Intrinsic/CNOT.md +1 -1
  152. package/docs/Std.Intrinsic/Exp.md +1 -1
  153. package/docs/Std.Intrinsic/H.md +1 -1
  154. package/docs/Std.Intrinsic/I.md +1 -1
  155. package/docs/Std.Intrinsic/M.md +1 -1
  156. package/docs/Std.Intrinsic/Measure.md +1 -1
  157. package/docs/Std.Intrinsic/Message.md +1 -1
  158. package/docs/Std.Intrinsic/R.md +1 -1
  159. package/docs/Std.Intrinsic/R1.md +1 -1
  160. package/docs/Std.Intrinsic/R1Frac.md +1 -1
  161. package/docs/Std.Intrinsic/RFrac.md +1 -1
  162. package/docs/Std.Intrinsic/Reset.md +1 -1
  163. package/docs/Std.Intrinsic/ResetAll.md +1 -1
  164. package/docs/Std.Intrinsic/Rx.md +1 -1
  165. package/docs/Std.Intrinsic/Rxx.md +1 -1
  166. package/docs/Std.Intrinsic/Ry.md +1 -1
  167. package/docs/Std.Intrinsic/Ryy.md +1 -1
  168. package/docs/Std.Intrinsic/Rz.md +1 -1
  169. package/docs/Std.Intrinsic/Rzz.md +1 -1
  170. package/docs/Std.Intrinsic/S.md +1 -1
  171. package/docs/Std.Intrinsic/SWAP.md +1 -1
  172. package/docs/Std.Intrinsic/SX.md +1 -1
  173. package/docs/Std.Intrinsic/T.md +1 -1
  174. package/docs/Std.Intrinsic/X.md +1 -1
  175. package/docs/Std.Intrinsic/Y.md +1 -1
  176. package/docs/Std.Intrinsic/Z.md +1 -1
  177. package/docs/Std.Intrinsic/index.md +1 -1
  178. package/docs/Std.Logical/Xor.md +1 -1
  179. package/docs/Std.Logical/index.md +1 -1
  180. package/docs/Std.Math/AbsComplex.md +1 -1
  181. package/docs/Std.Math/AbsComplexPolar.md +1 -1
  182. package/docs/Std.Math/AbsD.md +1 -1
  183. package/docs/Std.Math/AbsI.md +1 -1
  184. package/docs/Std.Math/AbsL.md +1 -1
  185. package/docs/Std.Math/AbsSquaredComplex.md +1 -1
  186. package/docs/Std.Math/AbsSquaredComplexPolar.md +1 -1
  187. package/docs/Std.Math/ApproximateFactorial.md +1 -1
  188. package/docs/Std.Math/ArcCos.md +1 -1
  189. package/docs/Std.Math/ArcCosh.md +1 -1
  190. package/docs/Std.Math/ArcSin.md +1 -1
  191. package/docs/Std.Math/ArcSinh.md +1 -1
  192. package/docs/Std.Math/ArcTan.md +1 -1
  193. package/docs/Std.Math/ArcTan2.md +1 -1
  194. package/docs/Std.Math/ArcTanh.md +1 -1
  195. package/docs/Std.Math/ArgComplex.md +1 -1
  196. package/docs/Std.Math/ArgComplexPolar.md +1 -1
  197. package/docs/Std.Math/Binom.md +1 -1
  198. package/docs/Std.Math/BitSizeI.md +1 -1
  199. package/docs/Std.Math/BitSizeL.md +1 -1
  200. package/docs/Std.Math/Ceiling.md +1 -1
  201. package/docs/Std.Math/Complex.md +1 -1
  202. package/docs/Std.Math/ComplexPolar.md +1 -1
  203. package/docs/Std.Math/ContinuedFractionConvergentI.md +1 -1
  204. package/docs/Std.Math/ContinuedFractionConvergentL.md +1 -1
  205. package/docs/Std.Math/Cos.md +1 -1
  206. package/docs/Std.Math/Cosh.md +1 -1
  207. package/docs/Std.Math/DivRemI.md +1 -1
  208. package/docs/Std.Math/DivRemL.md +1 -1
  209. package/docs/Std.Math/DividedByC.md +1 -1
  210. package/docs/Std.Math/DividedByCP.md +1 -1
  211. package/docs/Std.Math/E.md +1 -1
  212. package/docs/Std.Math/ExpModI.md +1 -1
  213. package/docs/Std.Math/ExpModL.md +1 -1
  214. package/docs/Std.Math/ExtendedGreatestCommonDivisorI.md +1 -1
  215. package/docs/Std.Math/ExtendedGreatestCommonDivisorL.md +1 -1
  216. package/docs/Std.Math/FactorialI.md +1 -1
  217. package/docs/Std.Math/FactorialL.md +1 -1
  218. package/docs/Std.Math/Floor.md +1 -1
  219. package/docs/Std.Math/GreatestCommonDivisorI.md +1 -1
  220. package/docs/Std.Math/GreatestCommonDivisorL.md +1 -1
  221. package/docs/Std.Math/HammingWeightI.md +1 -1
  222. package/docs/Std.Math/InverseModI.md +1 -1
  223. package/docs/Std.Math/InverseModL.md +1 -1
  224. package/docs/Std.Math/IsCoprimeI.md +1 -1
  225. package/docs/Std.Math/IsCoprimeL.md +1 -1
  226. package/docs/Std.Math/IsInfinite.md +1 -1
  227. package/docs/Std.Math/IsNaN.md +1 -1
  228. package/docs/Std.Math/LargestFixedPoint.md +1 -1
  229. package/docs/Std.Math/Lg.md +1 -1
  230. package/docs/Std.Math/Log.md +1 -1
  231. package/docs/Std.Math/Log10.md +1 -1
  232. package/docs/Std.Math/LogFactorialD.md +1 -1
  233. package/docs/Std.Math/LogGammaD.md +1 -1
  234. package/docs/Std.Math/LogOf2.md +1 -1
  235. package/docs/Std.Math/Max.md +1 -1
  236. package/docs/Std.Math/MaxD.md +1 -1
  237. package/docs/Std.Math/MaxI.md +1 -1
  238. package/docs/Std.Math/MaxL.md +1 -1
  239. package/docs/Std.Math/Min.md +1 -1
  240. package/docs/Std.Math/MinD.md +1 -1
  241. package/docs/Std.Math/MinI.md +1 -1
  242. package/docs/Std.Math/MinL.md +1 -1
  243. package/docs/Std.Math/MinusC.md +1 -1
  244. package/docs/Std.Math/MinusCP.md +1 -1
  245. package/docs/Std.Math/ModulusI.md +1 -1
  246. package/docs/Std.Math/ModulusL.md +1 -1
  247. package/docs/Std.Math/NegationC.md +1 -1
  248. package/docs/Std.Math/NegationCP.md +1 -1
  249. package/docs/Std.Math/PI.md +1 -1
  250. package/docs/Std.Math/PNorm.md +1 -1
  251. package/docs/Std.Math/PNormalized.md +1 -1
  252. package/docs/Std.Math/PlusC.md +1 -1
  253. package/docs/Std.Math/PlusCP.md +1 -1
  254. package/docs/Std.Math/PowC.md +1 -1
  255. package/docs/Std.Math/PowCP.md +1 -1
  256. package/docs/Std.Math/RealMod.md +1 -1
  257. package/docs/Std.Math/Round.md +1 -1
  258. package/docs/Std.Math/RoundHalfAwayFromZero.md +1 -1
  259. package/docs/Std.Math/SignD.md +1 -1
  260. package/docs/Std.Math/SignI.md +1 -1
  261. package/docs/Std.Math/SignL.md +1 -1
  262. package/docs/Std.Math/Sin.md +1 -1
  263. package/docs/Std.Math/Sinh.md +1 -1
  264. package/docs/Std.Math/SmallestFixedPoint.md +1 -1
  265. package/docs/Std.Math/Sqrt.md +1 -1
  266. package/docs/Std.Math/SquaredNorm.md +1 -1
  267. package/docs/Std.Math/Tan.md +1 -1
  268. package/docs/Std.Math/Tanh.md +1 -1
  269. package/docs/Std.Math/TimesC.md +1 -1
  270. package/docs/Std.Math/TimesCP.md +1 -1
  271. package/docs/Std.Math/TrailingZeroCountI.md +1 -1
  272. package/docs/Std.Math/TrailingZeroCountL.md +1 -1
  273. package/docs/Std.Math/Truncate.md +1 -1
  274. package/docs/Std.Math/index.md +1 -1
  275. package/docs/Std.Measurement/IsLossResult.md +1 -1
  276. package/docs/Std.Measurement/MResetEachZ.md +1 -1
  277. package/docs/Std.Measurement/MResetX.md +1 -1
  278. package/docs/Std.Measurement/MResetY.md +1 -1
  279. package/docs/Std.Measurement/MResetZ.md +1 -1
  280. package/docs/Std.Measurement/MResetZChecked.md +1 -1
  281. package/docs/Std.Measurement/MeasureAllZ.md +1 -1
  282. package/docs/Std.Measurement/MeasureEachZ.md +1 -1
  283. package/docs/Std.Measurement/MeasureInteger.md +1 -1
  284. package/docs/Std.Measurement/index.md +1 -1
  285. package/docs/Std.Random/DrawRandomBool.md +1 -1
  286. package/docs/Std.Random/DrawRandomDouble.md +1 -1
  287. package/docs/Std.Random/DrawRandomInt.md +1 -1
  288. package/docs/Std.Random/index.md +1 -1
  289. package/docs/Std.Range/IsRangeEmpty.md +1 -1
  290. package/docs/Std.Range/RangeEnd.md +1 -1
  291. package/docs/Std.Range/RangeReverse.md +1 -1
  292. package/docs/Std.Range/RangeStart.md +1 -1
  293. package/docs/Std.Range/RangeStep.md +1 -1
  294. package/docs/Std.Range/index.md +1 -1
  295. package/docs/Std.ResourceEstimation/AccountForEstimates.md +1 -1
  296. package/docs/Std.ResourceEstimation/AuxQubitCount.md +1 -1
  297. package/docs/Std.ResourceEstimation/BeginEstimateCaching.md +1 -1
  298. package/docs/Std.ResourceEstimation/BeginRepeatEstimates.md +1 -1
  299. package/docs/Std.ResourceEstimation/CczCount.md +1 -1
  300. package/docs/Std.ResourceEstimation/EnableMemoryComputeArchitecture.md +1 -1
  301. package/docs/Std.ResourceEstimation/EndEstimateCaching.md +1 -1
  302. package/docs/Std.ResourceEstimation/EndRepeatEstimates.md +1 -1
  303. package/docs/Std.ResourceEstimation/LeastFrequentlyUsed.md +1 -1
  304. package/docs/Std.ResourceEstimation/LeastRecentlyUsed.md +1 -1
  305. package/docs/Std.ResourceEstimation/MeasurementCount.md +1 -1
  306. package/docs/Std.ResourceEstimation/PSSPCLayout.md +1 -1
  307. package/docs/Std.ResourceEstimation/RepeatEstimates.md +1 -1
  308. package/docs/Std.ResourceEstimation/RotationCount.md +1 -1
  309. package/docs/Std.ResourceEstimation/RotationDepth.md +1 -1
  310. package/docs/Std.ResourceEstimation/SingleVariant.md +1 -1
  311. package/docs/Std.ResourceEstimation/TCount.md +1 -1
  312. package/docs/Std.ResourceEstimation/index.md +1 -1
  313. package/docs/Std.StatePreparation/ApproximatelyPreparePureStateCP.md +1 -1
  314. package/docs/Std.StatePreparation/PreparePureStateD.md +1 -1
  315. package/docs/Std.StatePreparation/PrepareUniformSuperposition.md +1 -1
  316. package/docs/Std.StatePreparation/index.md +1 -1
  317. package/docs/Std.TableLookup/Select.md +1 -1
  318. package/docs/Std.TableLookup/index.md +1 -1
  319. package/docs/index.md +1 -1
  320. package/lib/nodejs/qsc_wasm.cjs +85 -85
  321. package/lib/nodejs/qsc_wasm.d.cts +8 -1
  322. package/lib/nodejs/qsc_wasm_bg.wasm +0 -0
  323. package/lib/web/qsc_wasm.d.ts +8 -1
  324. package/lib/web/qsc_wasm.js +78 -78
  325. package/lib/web/qsc_wasm_bg.wasm +0 -0
  326. package/package.json +1 -1
  327. package/ux/atoms/controls.ts +216 -0
  328. package/ux/atoms/index.css +226 -0
  329. package/ux/atoms/index.ts +192 -0
  330. package/ux/atoms/layout.ts +730 -0
  331. package/ux/atoms/utils.ts +32 -0
  332. package/ux/chem/index.tsx +191 -0
  333. package/ux/chem/style.css +83 -0
  334. package/ux/circuit-vis/circuit.ts +1 -0
  335. package/ux/circuit-vis/events.ts +1 -5
  336. package/ux/circuit-vis/formatters/gateFormatter.ts +67 -28
  337. package/ux/circuit-vis/formatters/inputFormatter.ts +28 -5
  338. package/ux/circuit-vis/gateRenderData.ts +2 -0
  339. package/ux/circuit-vis/index.ts +4 -7
  340. package/ux/circuit-vis/process.ts +28 -5
  341. package/ux/circuit-vis/sqore.ts +31 -22
  342. package/ux/circuit.tsx +40 -6
  343. package/ux/histogram.tsx +81 -18
  344. package/ux/index.ts +2 -0
  345. package/ux/qsharp-circuit.css +29 -1
  346. 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 { ComponentGrid, Operation, ConditionalRender } from "./circuit.js";
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(op, registers);
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(onZeroOps, registers);
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(children!, registers);
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 = {
@@ -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
- readonly isEditable = false,
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, renderDepth = 0): void {
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(qubits);
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
- delete op.dataAttributes["expanded"];
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
- const reKetResult = /^\[(?:(Zero|One), *)*(Zero|One)\]$/;
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((digit) => (ket += digit == "One" ? "1" : "0"));
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(defaultMenuSelection);
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(a[0]);
97
- const bx = Number(b[0]);
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 a[0] < b[0] ? -1 : 1;
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 = `${label} at ${(
266
- (entry[1] / totalAllBuckets) *
267
- 100
268
- ).toFixed(2)}%`;
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="bar-label"
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";
@@ -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
- .gate > g > line,
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-button-background, var(--nav-background));
353
+ fill: var(--vscode-editorInfo-foreground, var(--nav-background));
354
354
  }
355
355
 
356
356
  .bar:hover {
357
- fill: var(--vscode-button-hoverBackground, var(--nav-hover-background));
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-button-foreground, var(--main-color));
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);