qsharp-lang 1.22.2-dev → 1.22.4-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 (337) 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 +8 -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 +6 -6
  321. package/lib/nodejs/qsc_wasm.d.cts +7 -1
  322. package/lib/nodejs/qsc_wasm_bg.wasm +0 -0
  323. package/lib/web/qsc_wasm.d.ts +7 -1
  324. package/lib/web/qsc_wasm.js +6 -6
  325. package/lib/web/qsc_wasm_bg.wasm +0 -0
  326. package/package.json +1 -1
  327. package/ux/circuit-vis/circuit.ts +1 -0
  328. package/ux/circuit-vis/formatters/gateFormatter.ts +66 -27
  329. package/ux/circuit-vis/formatters/inputFormatter.ts +28 -5
  330. package/ux/circuit-vis/gateRenderData.ts +2 -0
  331. package/ux/circuit-vis/index.ts +4 -7
  332. package/ux/circuit-vis/process.ts +17 -2
  333. package/ux/circuit-vis/sqore.ts +22 -15
  334. package/ux/circuit.tsx +40 -6
  335. package/ux/histogram.tsx +81 -18
  336. package/ux/qsharp-circuit.css +29 -1
  337. package/ux/qsharp-ux.css +8 -3
@@ -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,20 @@ 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
-
55
62
  /**
56
63
  * Initializes Sqore object.
57
64
  *
@@ -62,9 +69,7 @@ export class Sqore {
62
69
  */
63
70
  constructor(
64
71
  public circuitGroup: CircuitGroup,
65
- readonly isEditable = false,
66
- private editCallback?: (circuitGroup: CircuitGroup) => void,
67
- private runCallback?: () => void,
72
+ private options: DrawOptions = {},
68
73
  ) {
69
74
  if (
70
75
  this.circuitGroup == null ||
@@ -83,13 +88,11 @@ export class Sqore {
83
88
  * Render circuit into `container` at the specified layer depth.
84
89
  *
85
90
  * @param container HTML element for rendering visualization into.
86
- * @param renderDepth Initial layer depth at which to render gates.
87
91
  */
88
- draw(container: HTMLElement, renderDepth = 0): void {
92
+ draw(container: HTMLElement): void {
89
93
  // Inject into container
90
94
  if (container == null) throw new Error(`Container not provided.`);
91
95
 
92
- this.renderDepth = renderDepth;
93
96
  this.renderCircuit(container);
94
97
  }
95
98
 
@@ -103,7 +106,7 @@ export class Sqore {
103
106
  // Create copy of circuit to prevent mutation
104
107
  const _circuit: Circuit =
105
108
  circuit ?? JSON.parse(JSON.stringify(this.circuit));
106
- const renderDepth = this.renderDepth;
109
+ const renderDepth = this.options.renderDepth || 0;
107
110
 
108
111
  // Assign unique locations to each operation
109
112
  _circuit.componentGrid.forEach((col, colIndex) =>
@@ -150,16 +153,16 @@ export class Sqore {
150
153
  }
151
154
  this.addGateClickHandlers(container, _circuit);
152
155
 
153
- if (this.isEditable) {
156
+ if (this.options.isEditable) {
154
157
  createDropzones(container, this);
155
158
  createPanel(container);
156
- if (this.runCallback != undefined) {
157
- const callback = this.runCallback;
159
+ if (this.options.runCallback != undefined) {
160
+ const callback = this.options.runCallback;
158
161
  enableRunButton(container, callback);
159
162
  }
160
163
  enableEvents(container, this, () => this.renderCircuit(container));
161
- if (this.editCallback != undefined) {
162
- this.editCallback(this.minimizeCircuits(this.circuitGroup));
164
+ if (this.options.editCallback != undefined) {
165
+ this.options.editCallback(this.minimizeCircuits(this.circuitGroup));
163
166
  }
164
167
  }
165
168
  }
@@ -203,10 +206,14 @@ export class Sqore {
203
206
  };
204
207
 
205
208
  const { qubits, componentGrid } = circuit;
206
- const { qubitWires, registers, svgHeight } = formatInputs(qubits);
209
+ const { qubitWires, registers, svgHeight } = formatInputs(
210
+ qubits,
211
+ this.options.isEditable ? undefined : this.options.renderLocations,
212
+ );
207
213
  const { renderDataArray, svgWidth } = processOperations(
208
214
  componentGrid,
209
215
  registers,
216
+ this.options.isEditable ? undefined : this.options.renderLocations,
210
217
  );
211
218
  const formattedGates: SVGElement = formatGates(renderDataArray);
212
219
  const measureGates: GateRenderData[] = flatten(renderDataArray).filter(
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"}
@@ -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);