qsharp-lang 1.17.1-dev → 1.17.2-dev

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (350) hide show
  1. package/dist/browser.d.ts +10 -8
  2. package/dist/browser.js +5 -3
  3. package/dist/compiler/compiler.d.ts +1 -1
  4. package/dist/compiler/compiler.js +8 -7
  5. package/dist/{shared → data-structures}/circuit.d.ts +24 -0
  6. package/dist/data-structures/circuit.js +130 -0
  7. package/dist/data-structures/legacyCircuitUpdate.d.ts +16 -0
  8. package/dist/{shared → data-structures}/legacyCircuitUpdate.js +117 -61
  9. package/dist/{shared → data-structures}/register.d.ts +4 -0
  10. package/dist/data-structures/register.js +20 -0
  11. package/dist/debug-service/debug-service.d.ts +1 -1
  12. package/dist/debug-service/debug-service.js +1 -1
  13. package/dist/diagnostics.d.ts +21 -0
  14. package/dist/diagnostics.js +84 -0
  15. package/dist/katas-content.generated.js +7 -7
  16. package/dist/katas-content.generated.md.js +7 -7
  17. package/dist/main.d.ts +2 -2
  18. package/dist/main.js +2 -1
  19. package/dist/project.d.ts +10 -0
  20. package/dist/project.js +17 -0
  21. package/dist/samples.generated.js +1 -6
  22. package/dist/utils.d.ts +2 -10
  23. package/dist/utils.js +0 -39
  24. package/dist/workers/common.js +62 -17
  25. package/docs/Microsoft.Quantum.Core/Length.md +1 -1
  26. package/docs/Microsoft.Quantum.Core/Repeated.md +1 -1
  27. package/docs/Microsoft.Quantum.Core/index.md +1 -3
  28. package/docs/Std.Arithmetic/AddLE.md +1 -1
  29. package/docs/Std.Arithmetic/ApplyIfEqualL.md +1 -1
  30. package/docs/Std.Arithmetic/ApplyIfEqualLE.md +1 -1
  31. package/docs/Std.Arithmetic/ApplyIfGreaterL.md +1 -1
  32. package/docs/Std.Arithmetic/ApplyIfGreaterLE.md +1 -1
  33. package/docs/Std.Arithmetic/ApplyIfGreaterOrEqualL.md +1 -1
  34. package/docs/Std.Arithmetic/ApplyIfGreaterOrEqualLE.md +1 -1
  35. package/docs/Std.Arithmetic/ApplyIfLessL.md +1 -1
  36. package/docs/Std.Arithmetic/ApplyIfLessLE.md +1 -1
  37. package/docs/Std.Arithmetic/ApplyIfLessOrEqualL.md +1 -1
  38. package/docs/Std.Arithmetic/ApplyIfLessOrEqualLE.md +1 -1
  39. package/docs/Std.Arithmetic/FourierTDIncByLE.md +1 -1
  40. package/docs/Std.Arithmetic/IncByI.md +1 -1
  41. package/docs/Std.Arithmetic/IncByIUsingIncByLE.md +1 -1
  42. package/docs/Std.Arithmetic/IncByL.md +1 -1
  43. package/docs/Std.Arithmetic/IncByLE.md +1 -1
  44. package/docs/Std.Arithmetic/IncByLEUsingAddLE.md +1 -1
  45. package/docs/Std.Arithmetic/IncByLUsingIncByLE.md +1 -1
  46. package/docs/Std.Arithmetic/LookAheadDKRSAddLE.md +1 -1
  47. package/docs/Std.Arithmetic/MAJ.md +1 -1
  48. package/docs/Std.Arithmetic/ReflectAboutInteger.md +1 -1
  49. package/docs/Std.Arithmetic/RippleCarryCGAddLE.md +1 -1
  50. package/docs/Std.Arithmetic/RippleCarryCGIncByLE.md +1 -1
  51. package/docs/Std.Arithmetic/RippleCarryTTKIncByLE.md +1 -1
  52. package/docs/Std.Arithmetic/index.md +1 -3
  53. package/docs/Std.Arrays/All.md +1 -1
  54. package/docs/Std.Arrays/Any.md +1 -1
  55. package/docs/Std.Arrays/Chunks.md +1 -1
  56. package/docs/Std.Arrays/CircularlyShifted.md +1 -1
  57. package/docs/Std.Arrays/ColumnAt.md +1 -1
  58. package/docs/Std.Arrays/Count.md +1 -1
  59. package/docs/Std.Arrays/Diagonal.md +1 -1
  60. package/docs/Std.Arrays/DrawMany.md +1 -1
  61. package/docs/Std.Arrays/Enumerated.md +1 -1
  62. package/docs/Std.Arrays/Excluding.md +1 -1
  63. package/docs/Std.Arrays/Filtered.md +1 -1
  64. package/docs/Std.Arrays/FlatMapped.md +1 -1
  65. package/docs/Std.Arrays/Flattened.md +1 -1
  66. package/docs/Std.Arrays/Fold.md +1 -1
  67. package/docs/Std.Arrays/ForEach.md +1 -1
  68. package/docs/Std.Arrays/Head.md +1 -1
  69. package/docs/Std.Arrays/HeadAndRest.md +1 -1
  70. package/docs/Std.Arrays/IndexOf.md +1 -1
  71. package/docs/Std.Arrays/IndexRange.md +1 -1
  72. package/docs/Std.Arrays/Interleaved.md +1 -1
  73. package/docs/Std.Arrays/IsEmpty.md +1 -1
  74. package/docs/Std.Arrays/IsRectangularArray.md +1 -1
  75. package/docs/Std.Arrays/IsSorted.md +1 -1
  76. package/docs/Std.Arrays/IsSquareArray.md +1 -1
  77. package/docs/Std.Arrays/Mapped.md +1 -1
  78. package/docs/Std.Arrays/MappedByIndex.md +1 -1
  79. package/docs/Std.Arrays/MappedOverRange.md +1 -1
  80. package/docs/Std.Arrays/Most.md +1 -1
  81. package/docs/Std.Arrays/MostAndTail.md +1 -1
  82. package/docs/Std.Arrays/Padded.md +1 -1
  83. package/docs/Std.Arrays/Partitioned.md +1 -1
  84. package/docs/Std.Arrays/Rest.md +1 -1
  85. package/docs/Std.Arrays/Reversed.md +1 -1
  86. package/docs/Std.Arrays/SequenceI.md +1 -1
  87. package/docs/Std.Arrays/SequenceL.md +1 -1
  88. package/docs/Std.Arrays/Sorted.md +1 -1
  89. package/docs/Std.Arrays/Subarray.md +1 -1
  90. package/docs/Std.Arrays/Swapped.md +1 -1
  91. package/docs/Std.Arrays/Tail.md +1 -1
  92. package/docs/Std.Arrays/Transposed.md +1 -1
  93. package/docs/Std.Arrays/Unzipped.md +1 -1
  94. package/docs/Std.Arrays/Where.md +1 -1
  95. package/docs/Std.Arrays/Windows.md +1 -1
  96. package/docs/Std.Arrays/Zipped.md +1 -1
  97. package/docs/Std.Arrays/index.md +1 -3
  98. package/docs/Std.Canon/ApplyCNOTChain.md +1 -1
  99. package/docs/Std.Canon/ApplyControlledOnBitString.md +1 -1
  100. package/docs/Std.Canon/ApplyControlledOnInt.md +1 -1
  101. package/docs/Std.Canon/ApplyOperationPowerA.md +1 -1
  102. package/docs/Std.Canon/ApplyOperationPowerCA.md +24 -0
  103. package/docs/Std.Canon/ApplyP.md +1 -1
  104. package/docs/Std.Canon/ApplyPauli.md +1 -1
  105. package/docs/Std.Canon/ApplyPauliFromBitString.md +1 -1
  106. package/docs/Std.Canon/ApplyPauliFromInt.md +1 -1
  107. package/docs/Std.Canon/ApplyQFT.md +1 -1
  108. package/docs/Std.Canon/ApplyQPE.md +51 -0
  109. package/docs/Std.Canon/ApplyToEach.md +1 -1
  110. package/docs/Std.Canon/ApplyToEachA.md +1 -1
  111. package/docs/Std.Canon/ApplyToEachC.md +1 -1
  112. package/docs/Std.Canon/ApplyToEachCA.md +1 -1
  113. package/docs/Std.Canon/ApplyXorInPlace.md +1 -1
  114. package/docs/Std.Canon/ApplyXorInPlaceL.md +1 -1
  115. package/docs/Std.Canon/CX.md +1 -1
  116. package/docs/Std.Canon/CY.md +1 -1
  117. package/docs/Std.Canon/CZ.md +1 -1
  118. package/docs/Std.Canon/Fst.md +1 -1
  119. package/docs/Std.Canon/Relabel.md +1 -1
  120. package/docs/Std.Canon/Snd.md +1 -1
  121. package/docs/Std.Canon/SwapReverseRegister.md +1 -1
  122. package/docs/Std.Canon/index.md +3 -3
  123. package/docs/Std.Convert/BigIntAsBoolArray.md +1 -1
  124. package/docs/Std.Convert/BigIntAsInt.md +1 -1
  125. package/docs/Std.Convert/BoolArrayAsBigInt.md +1 -1
  126. package/docs/Std.Convert/BoolArrayAsInt.md +1 -1
  127. package/docs/Std.Convert/BoolArrayAsResultArray.md +1 -1
  128. package/docs/Std.Convert/BoolAsResult.md +1 -1
  129. package/docs/Std.Convert/ComplexAsComplexPolar.md +1 -1
  130. package/docs/Std.Convert/ComplexPolarAsComplex.md +1 -1
  131. package/docs/Std.Convert/DoubleAsStringWithPrecision.md +1 -1
  132. package/docs/Std.Convert/IntAsBigInt.md +1 -1
  133. package/docs/Std.Convert/IntAsBoolArray.md +1 -1
  134. package/docs/Std.Convert/IntAsDouble.md +1 -1
  135. package/docs/Std.Convert/ResultArrayAsBoolArray.md +1 -1
  136. package/docs/Std.Convert/ResultArrayAsInt.md +1 -1
  137. package/docs/Std.Convert/ResultAsBool.md +1 -1
  138. package/docs/Std.Convert/index.md +1 -3
  139. package/docs/Std.Core/Length.md +1 -1
  140. package/docs/Std.Core/Repeated.md +1 -1
  141. package/docs/Std.Core/index.md +1 -3
  142. package/docs/Std.Diagnostics/ApplyIdleNoise.md +1 -1
  143. package/docs/Std.Diagnostics/BitFlipNoise.md +1 -1
  144. package/docs/Std.Diagnostics/CheckAllZero.md +1 -1
  145. package/docs/Std.Diagnostics/CheckOperationsAreEqual.md +1 -1
  146. package/docs/Std.Diagnostics/CheckZero.md +1 -1
  147. package/docs/Std.Diagnostics/ConfigurePauliNoise.md +1 -1
  148. package/docs/Std.Diagnostics/DepolarizingNoise.md +1 -1
  149. package/docs/Std.Diagnostics/DumpMachine.md +1 -1
  150. package/docs/Std.Diagnostics/DumpOperation.md +1 -1
  151. package/docs/Std.Diagnostics/DumpRegister.md +1 -1
  152. package/docs/Std.Diagnostics/Fact.md +1 -1
  153. package/docs/Std.Diagnostics/NoNoise.md +1 -1
  154. package/docs/Std.Diagnostics/PhaseFlipNoise.md +1 -1
  155. package/docs/Std.Diagnostics/StartCountingFunction.md +1 -1
  156. package/docs/Std.Diagnostics/StartCountingOperation.md +1 -1
  157. package/docs/Std.Diagnostics/StartCountingQubits.md +1 -1
  158. package/docs/Std.Diagnostics/StopCountingFunction.md +1 -1
  159. package/docs/Std.Diagnostics/StopCountingOperation.md +1 -1
  160. package/docs/Std.Diagnostics/StopCountingQubits.md +1 -1
  161. package/docs/Std.Diagnostics/index.md +1 -3
  162. package/docs/Std.Intrinsic/AND.md +1 -1
  163. package/docs/Std.Intrinsic/ApplyUnitary.md +1 -1
  164. package/docs/Std.Intrinsic/CCNOT.md +1 -1
  165. package/docs/Std.Intrinsic/CNOT.md +1 -1
  166. package/docs/Std.Intrinsic/Exp.md +1 -1
  167. package/docs/Std.Intrinsic/H.md +1 -1
  168. package/docs/Std.Intrinsic/I.md +1 -1
  169. package/docs/Std.Intrinsic/M.md +1 -1
  170. package/docs/Std.Intrinsic/Measure.md +1 -1
  171. package/docs/Std.Intrinsic/Message.md +1 -1
  172. package/docs/Std.Intrinsic/R.md +1 -1
  173. package/docs/Std.Intrinsic/R1.md +1 -1
  174. package/docs/Std.Intrinsic/R1Frac.md +1 -1
  175. package/docs/Std.Intrinsic/RFrac.md +1 -1
  176. package/docs/Std.Intrinsic/Reset.md +1 -1
  177. package/docs/Std.Intrinsic/ResetAll.md +1 -1
  178. package/docs/Std.Intrinsic/Rx.md +1 -1
  179. package/docs/Std.Intrinsic/Rxx.md +1 -1
  180. package/docs/Std.Intrinsic/Ry.md +1 -1
  181. package/docs/Std.Intrinsic/Ryy.md +1 -1
  182. package/docs/Std.Intrinsic/Rz.md +1 -1
  183. package/docs/Std.Intrinsic/Rzz.md +1 -1
  184. package/docs/Std.Intrinsic/S.md +1 -1
  185. package/docs/Std.Intrinsic/SWAP.md +1 -1
  186. package/docs/Std.Intrinsic/SX.md +1 -1
  187. package/docs/Std.Intrinsic/T.md +1 -1
  188. package/docs/Std.Intrinsic/X.md +1 -1
  189. package/docs/Std.Intrinsic/Y.md +1 -1
  190. package/docs/Std.Intrinsic/Z.md +1 -1
  191. package/docs/Std.Intrinsic/index.md +1 -3
  192. package/docs/Std.Logical/Xor.md +1 -1
  193. package/docs/Std.Logical/index.md +1 -3
  194. package/docs/Std.Math/AbsComplex.md +1 -1
  195. package/docs/Std.Math/AbsComplexPolar.md +1 -1
  196. package/docs/Std.Math/AbsD.md +1 -1
  197. package/docs/Std.Math/AbsI.md +1 -1
  198. package/docs/Std.Math/AbsL.md +1 -1
  199. package/docs/Std.Math/AbsSquaredComplex.md +1 -1
  200. package/docs/Std.Math/AbsSquaredComplexPolar.md +1 -1
  201. package/docs/Std.Math/ApproximateFactorial.md +1 -1
  202. package/docs/Std.Math/ArcCos.md +1 -1
  203. package/docs/Std.Math/ArcCosh.md +1 -1
  204. package/docs/Std.Math/ArcSin.md +1 -1
  205. package/docs/Std.Math/ArcSinh.md +1 -1
  206. package/docs/Std.Math/ArcTan.md +1 -1
  207. package/docs/Std.Math/ArcTan2.md +1 -1
  208. package/docs/Std.Math/ArcTanh.md +1 -1
  209. package/docs/Std.Math/ArgComplex.md +1 -1
  210. package/docs/Std.Math/ArgComplexPolar.md +1 -1
  211. package/docs/Std.Math/Binom.md +1 -1
  212. package/docs/Std.Math/BitSizeI.md +1 -1
  213. package/docs/Std.Math/BitSizeL.md +1 -1
  214. package/docs/Std.Math/Ceiling.md +1 -1
  215. package/docs/Std.Math/Complex.md +1 -1
  216. package/docs/Std.Math/ComplexPolar.md +1 -1
  217. package/docs/Std.Math/ContinuedFractionConvergentI.md +1 -1
  218. package/docs/Std.Math/ContinuedFractionConvergentL.md +1 -1
  219. package/docs/Std.Math/Cos.md +1 -1
  220. package/docs/Std.Math/Cosh.md +1 -1
  221. package/docs/Std.Math/DivRemI.md +1 -1
  222. package/docs/Std.Math/DivRemL.md +1 -1
  223. package/docs/Std.Math/DividedByC.md +1 -1
  224. package/docs/Std.Math/DividedByCP.md +1 -1
  225. package/docs/Std.Math/E.md +1 -1
  226. package/docs/Std.Math/ExpModI.md +1 -1
  227. package/docs/Std.Math/ExpModL.md +1 -1
  228. package/docs/Std.Math/ExtendedGreatestCommonDivisorI.md +1 -1
  229. package/docs/Std.Math/ExtendedGreatestCommonDivisorL.md +1 -1
  230. package/docs/Std.Math/FactorialI.md +1 -1
  231. package/docs/Std.Math/FactorialL.md +1 -1
  232. package/docs/Std.Math/Floor.md +1 -1
  233. package/docs/Std.Math/GreatestCommonDivisorI.md +1 -1
  234. package/docs/Std.Math/GreatestCommonDivisorL.md +1 -1
  235. package/docs/Std.Math/HammingWeightI.md +1 -1
  236. package/docs/Std.Math/InverseModI.md +1 -1
  237. package/docs/Std.Math/InverseModL.md +1 -1
  238. package/docs/Std.Math/IsCoprimeI.md +1 -1
  239. package/docs/Std.Math/IsCoprimeL.md +1 -1
  240. package/docs/Std.Math/IsInfinite.md +1 -1
  241. package/docs/Std.Math/IsNaN.md +1 -1
  242. package/docs/Std.Math/LargestFixedPoint.md +1 -1
  243. package/docs/Std.Math/Lg.md +1 -1
  244. package/docs/Std.Math/Log.md +1 -1
  245. package/docs/Std.Math/Log10.md +1 -1
  246. package/docs/Std.Math/LogFactorialD.md +1 -1
  247. package/docs/Std.Math/LogGammaD.md +1 -1
  248. package/docs/Std.Math/LogOf2.md +1 -1
  249. package/docs/Std.Math/Max.md +1 -1
  250. package/docs/Std.Math/MaxD.md +1 -1
  251. package/docs/Std.Math/MaxI.md +1 -1
  252. package/docs/Std.Math/MaxL.md +1 -1
  253. package/docs/Std.Math/Min.md +1 -1
  254. package/docs/Std.Math/MinD.md +1 -1
  255. package/docs/Std.Math/MinI.md +1 -1
  256. package/docs/Std.Math/MinL.md +1 -1
  257. package/docs/Std.Math/MinusC.md +1 -1
  258. package/docs/Std.Math/MinusCP.md +1 -1
  259. package/docs/Std.Math/ModulusI.md +1 -1
  260. package/docs/Std.Math/ModulusL.md +1 -1
  261. package/docs/Std.Math/NegationC.md +1 -1
  262. package/docs/Std.Math/NegationCP.md +1 -1
  263. package/docs/Std.Math/PI.md +1 -1
  264. package/docs/Std.Math/PNorm.md +1 -1
  265. package/docs/Std.Math/PNormalized.md +1 -1
  266. package/docs/Std.Math/PlusC.md +1 -1
  267. package/docs/Std.Math/PlusCP.md +1 -1
  268. package/docs/Std.Math/PowC.md +1 -1
  269. package/docs/Std.Math/PowCP.md +1 -1
  270. package/docs/Std.Math/RealMod.md +1 -1
  271. package/docs/Std.Math/Round.md +1 -1
  272. package/docs/Std.Math/RoundHalfAwayFromZero.md +1 -1
  273. package/docs/Std.Math/SignD.md +1 -1
  274. package/docs/Std.Math/SignI.md +1 -1
  275. package/docs/Std.Math/SignL.md +1 -1
  276. package/docs/Std.Math/Sin.md +1 -1
  277. package/docs/Std.Math/Sinh.md +1 -1
  278. package/docs/Std.Math/SmallestFixedPoint.md +1 -1
  279. package/docs/Std.Math/Sqrt.md +1 -1
  280. package/docs/Std.Math/SquaredNorm.md +1 -1
  281. package/docs/Std.Math/Tan.md +1 -1
  282. package/docs/Std.Math/Tanh.md +1 -1
  283. package/docs/Std.Math/TimesC.md +1 -1
  284. package/docs/Std.Math/TimesCP.md +1 -1
  285. package/docs/Std.Math/TrailingZeroCountI.md +1 -1
  286. package/docs/Std.Math/TrailingZeroCountL.md +1 -1
  287. package/docs/Std.Math/Truncate.md +1 -1
  288. package/docs/Std.Math/index.md +1 -3
  289. package/docs/Std.Measurement/MResetEachZ.md +1 -1
  290. package/docs/Std.Measurement/MResetX.md +1 -1
  291. package/docs/Std.Measurement/MResetY.md +1 -1
  292. package/docs/Std.Measurement/MResetZ.md +1 -1
  293. package/docs/Std.Measurement/MeasureAllZ.md +1 -1
  294. package/docs/Std.Measurement/MeasureEachZ.md +1 -1
  295. package/docs/Std.Measurement/MeasureInteger.md +1 -1
  296. package/docs/Std.Measurement/index.md +1 -3
  297. package/docs/Std.Random/DrawRandomBool.md +1 -1
  298. package/docs/Std.Random/DrawRandomDouble.md +1 -1
  299. package/docs/Std.Random/DrawRandomInt.md +1 -1
  300. package/docs/Std.Random/index.md +1 -3
  301. package/docs/Std.Range/IsRangeEmpty.md +1 -1
  302. package/docs/Std.Range/RangeEnd.md +1 -1
  303. package/docs/Std.Range/RangeReverse.md +1 -1
  304. package/docs/Std.Range/RangeStart.md +1 -1
  305. package/docs/Std.Range/RangeStep.md +1 -1
  306. package/docs/Std.Range/index.md +1 -3
  307. package/docs/Std.ResourceEstimation/AccountForEstimates.md +1 -1
  308. package/docs/Std.ResourceEstimation/AuxQubitCount.md +1 -1
  309. package/docs/Std.ResourceEstimation/BeginEstimateCaching.md +1 -1
  310. package/docs/Std.ResourceEstimation/BeginRepeatEstimates.md +1 -1
  311. package/docs/Std.ResourceEstimation/CczCount.md +1 -1
  312. package/docs/Std.ResourceEstimation/EndEstimateCaching.md +1 -1
  313. package/docs/Std.ResourceEstimation/EndRepeatEstimates.md +1 -1
  314. package/docs/Std.ResourceEstimation/MeasurementCount.md +1 -1
  315. package/docs/Std.ResourceEstimation/PSSPCLayout.md +1 -1
  316. package/docs/Std.ResourceEstimation/RepeatEstimates.md +1 -1
  317. package/docs/Std.ResourceEstimation/RotationCount.md +1 -1
  318. package/docs/Std.ResourceEstimation/RotationDepth.md +1 -1
  319. package/docs/Std.ResourceEstimation/SingleVariant.md +1 -1
  320. package/docs/Std.ResourceEstimation/TCount.md +1 -1
  321. package/docs/Std.ResourceEstimation/index.md +1 -3
  322. package/docs/Std.StatePreparation/ApproximatelyPreparePureStateCP.md +1 -1
  323. package/docs/Std.StatePreparation/PreparePureStateD.md +1 -1
  324. package/docs/Std.StatePreparation/PrepareUniformSuperposition.md +1 -1
  325. package/docs/Std.StatePreparation/index.md +1 -3
  326. package/docs/Std.TableLookup/Select.md +1 -1
  327. package/docs/Std.TableLookup/index.md +1 -3
  328. package/docs/index.md +19 -21
  329. package/docs/toc.yml +2 -0
  330. package/lib/node/qsc_wasm.cjs +9 -6
  331. package/lib/node/qsc_wasm.d.cts +2 -1
  332. package/lib/node/qsc_wasm_bg.wasm +0 -0
  333. package/lib/web/qsc_wasm.d.ts +3 -2
  334. package/lib/web/qsc_wasm.js +9 -6
  335. package/lib/web/qsc_wasm_bg.wasm +0 -0
  336. package/package.json +4 -3
  337. package/ux/circuit-vis/circuit.ts +3 -3
  338. package/ux/circuit-vis/draggable.ts +1 -1
  339. package/ux/circuit-vis/events.ts +2 -1
  340. package/ux/circuit-vis/index.ts +3 -1
  341. package/ux/circuit-vis/panel.ts +64 -1
  342. package/ux/circuit-vis/register.ts +1 -1
  343. package/ux/circuit-vis/sqore.ts +7 -1
  344. package/ux/circuit-vis/utils.ts +47 -0
  345. package/ux/circuit.tsx +66 -25
  346. package/ux/data.ts +1 -0
  347. package/ux/qsharp-circuit.css +31 -0
  348. package/dist/shared/circuit.js +0 -20
  349. package/dist/shared/legacyCircuitUpdate.d.ts +0 -9
  350. package/dist/shared/register.js +0 -10
package/dist/browser.d.ts CHANGED
@@ -1,28 +1,30 @@
1
- import * as wasm from "../lib/web/qsc_wasm.js";
2
- import { IProjectHost, TargetProfile, ProjectType } from "../lib/web/qsc_wasm.js";
1
+ import { IProjectHost, ProjectType, TargetProfile } from "../lib/web/qsc_wasm.js";
3
2
  import { ICompiler, ICompilerWorker } from "./compiler/compiler.js";
4
3
  import { IDebugService, IDebugServiceWorker } from "./debug-service/debug-service.js";
5
4
  import { ILanguageService, ILanguageServiceWorker, qsharpGithubUriScheme, qsharpLibraryUriScheme } from "./language-service/language-service.js";
6
5
  import { LogLevel, log } from "./log.js";
6
+ import { ProjectLoader } from "./project.js";
7
7
  export { qsharpGithubUriScheme, qsharpLibraryUriScheme };
8
8
  export declare function loadWasmModule(uriOrBuffer: string | ArrayBuffer): Promise<void>;
9
9
  export declare function getLibrarySourceContent(path: string): Promise<string | undefined>;
10
10
  export declare function getDebugService(): Promise<IDebugService>;
11
- export declare function getProjectLoader(host: IProjectHost): Promise<wasm.ProjectLoader>;
11
+ export declare function getProjectLoader(host: IProjectHost): Promise<ProjectLoader>;
12
12
  export declare function getDebugServiceWorker(worker: string | Worker): IDebugServiceWorker;
13
13
  export declare function getCompiler(): Promise<ICompiler>;
14
14
  export declare function getCompilerWorker(worker: string | Worker): ICompilerWorker;
15
15
  export declare function getLanguageService(host?: IProjectHost): Promise<ILanguageService>;
16
16
  export declare function getLanguageServiceWorker(worker: string | Worker): ILanguageServiceWorker;
17
17
  export { StepResultId } from "../lib/web/qsc_wasm.js";
18
- export type { IBreakpointSpan, ICodeAction, ICodeLens, IDocFile, ILocation, IOperationInfo, IPosition, IProjectConfig, IProjectHost, IQSharpError, IRange, IStackFrame, IStructStepResult, IWorkspaceEdit, ProjectLoader, ITestDescriptor, VSDiagnostic, } from "../lib/web/qsc_wasm.js";
18
+ export type { IBreakpointSpan, ICodeAction, ICodeLens, IDocFile, ILocation, IOperationInfo, IPosition, IProjectConfig, IProjectHost, IQSharpError, IRange, IStackFrame, IStructStepResult, ITestDescriptor, IWorkspaceEdit, VSDiagnostic, } from "../lib/web/qsc_wasm.js";
19
19
  export { type Dump, type ShotResult } from "./compiler/common.js";
20
20
  export { type CompilerState, type ProgramConfig } from "./compiler/compiler.js";
21
21
  export { QscEventTarget } from "./compiler/events.js";
22
+ export { QdkDiagnostics } from "./diagnostics.js";
22
23
  export type { LanguageServiceDiagnosticEvent, LanguageServiceEvent, LanguageServiceTestCallablesEvent, } from "./language-service/language-service.js";
23
- export { default as samples } from "./samples.generated.js";
24
24
  export { default as openqasm_samples } from "./openqasm-samples.generated.js";
25
- export { log, type LogLevel, type TargetProfile, type ProjectType };
26
- export type { ICompiler, ICompilerWorker, IDebugService, IDebugServiceWorker, ILanguageService, ILanguageServiceWorker, };
25
+ export type { ProjectLoader } from "./project.js";
26
+ export { default as samples } from "./samples.generated.js";
27
+ export type { CircuitGroup as CircuitData } from "./data-structures/circuit.js";
27
28
  export * as utils from "./utils.js";
28
- export type { CircuitGroup as CircuitData } from "./shared/circuit.js";
29
+ export { log, type LogLevel, type ProjectType, type TargetProfile };
30
+ export type { ICompiler, ICompilerWorker, IDebugService, IDebugServiceWorker, ILanguageService, ILanguageServiceWorker, };
package/dist/browser.js CHANGED
@@ -8,6 +8,7 @@ import { Compiler, compilerProtocol, } from "./compiler/compiler.js";
8
8
  import { QSharpDebugService, debugServiceProtocol, } from "./debug-service/debug-service.js";
9
9
  import { QSharpLanguageService, languageServiceProtocol, qsharpGithubUriScheme, qsharpLibraryUriScheme, } from "./language-service/language-service.js";
10
10
  import { log } from "./log.js";
11
+ import { ProjectLoader } from "./project.js";
11
12
  import { createProxy } from "./workers/browser.js";
12
13
  export { qsharpGithubUriScheme, qsharpLibraryUriScheme };
13
14
  // Create once. A module is stateless and can be efficiently passed to WebWorkers.
@@ -73,7 +74,7 @@ export async function getDebugService() {
73
74
  }
74
75
  export async function getProjectLoader(host) {
75
76
  await instantiateWasm();
76
- return new wasm.ProjectLoader(host);
77
+ return new ProjectLoader(wasm, host);
77
78
  }
78
79
  // Create the debugger inside a WebWorker and proxy requests.
79
80
  // If the Worker was already created via other means and is ready to receive
@@ -109,7 +110,8 @@ export function getLanguageServiceWorker(worker) {
109
110
  }
110
111
  export { StepResultId } from "../lib/web/qsc_wasm.js";
111
112
  export { QscEventTarget } from "./compiler/events.js";
112
- export { default as samples } from "./samples.generated.js";
113
+ export { QdkDiagnostics } from "./diagnostics.js";
113
114
  export { default as openqasm_samples } from "./openqasm-samples.generated.js";
114
- export { log };
115
+ export { default as samples } from "./samples.generated.js";
115
116
  export * as utils from "./utils.js";
117
+ export { log };
@@ -1,4 +1,4 @@
1
- import { type CircuitGroup as CircuitData } from "../shared/circuit.js";
1
+ import { type CircuitGroup as CircuitData } from "../data-structures/circuit.js";
2
2
  import { IDocFile, IOperationInfo, IPackageGraphSources, IProgramConfig as wasmIProgramConfig, TargetProfile, type VSDiagnostic, ProjectType } from "../../lib/web/qsc_wasm.js";
3
3
  import { IServiceProxy, ServiceProtocol, ServiceState } from "../workers/common.js";
4
4
  import { IQscEventTarget, QscEventData } from "./events.js";
@@ -1,9 +1,10 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
2
  // Licensed under the MIT License.
3
- import { CURRENT_VERSION, } from "../shared/circuit.js";
3
+ import { CURRENT_VERSION, } from "../data-structures/circuit.js";
4
4
  import { log } from "../log.js";
5
5
  import { eventStringToMsg } from "./common.js";
6
6
  import { makeEvent, } from "./events.js";
7
+ import { callAndTransformExceptions } from "../diagnostics.js";
7
8
  export class Compiler {
8
9
  constructor(wasm) {
9
10
  log.info("Constructing a Compiler instance");
@@ -42,25 +43,25 @@ export class Compiler {
42
43
  }
43
44
  async getRir(program) {
44
45
  const config = toWasmProgramConfig(program, program.profile || "adaptive_ri");
45
- return this.wasm.get_rir(config);
46
+ return callAndTransformExceptions(async () => this.wasm.get_rir(config));
46
47
  }
47
48
  async run(program, expr, shots, eventHandler) {
48
49
  // All results are communicated as events, but if there is a compiler error (e.g. an invalid
49
50
  // entry expression or similar), it may throw on run. The caller should expect this promise
50
51
  // may reject without all shots running or events firing.
51
- this.wasm.run(toWasmProgramConfig(program, "unrestricted"), expr, (msg) => onCompilerEvent(msg, eventHandler), shots);
52
+ await callAndTransformExceptions(async () => this.wasm.run(toWasmProgramConfig(program, "unrestricted"), expr, (msg) => onCompilerEvent(msg, eventHandler), shots));
52
53
  }
53
54
  async runWithPauliNoise(program, expr, shots, pauliNoise, eventHandler) {
54
- this.wasm.runWithPauliNoise(toWasmProgramConfig(program, "unrestricted"), expr, (msg) => onCompilerEvent(msg, eventHandler), shots, pauliNoise);
55
+ await callAndTransformExceptions(async () => this.wasm.runWithPauliNoise(toWasmProgramConfig(program, "unrestricted"), expr, (msg) => onCompilerEvent(msg, eventHandler), shots, pauliNoise));
55
56
  }
56
57
  async getQir(program) {
57
- return this.wasm.get_qir(toWasmProgramConfig(program, "base"));
58
+ return callAndTransformExceptions(async () => this.wasm.get_qir(toWasmProgramConfig(program, "base")));
58
59
  }
59
60
  async getEstimates(program, expr, params) {
60
- return this.wasm.get_estimates(toWasmProgramConfig(program, "unrestricted"), expr, params);
61
+ return callAndTransformExceptions(async () => this.wasm.get_estimates(toWasmProgramConfig(program, "unrestricted"), expr, params));
61
62
  }
62
63
  async getCircuit(program, simulate, operation) {
63
- const circuit = this.wasm.get_circuit(toWasmProgramConfig(program, "unrestricted"), simulate, operation);
64
+ const circuit = await callAndTransformExceptions(async () => this.wasm.get_circuit(toWasmProgramConfig(program, "unrestricted"), simulate, operation));
64
65
  return {
65
66
  circuits: [circuit],
66
67
  version: CURRENT_VERSION,
@@ -7,6 +7,10 @@ export interface CircuitGroup {
7
7
  circuits: Circuit[];
8
8
  version: number;
9
9
  }
10
+ /**
11
+ * Runtime check: is this a valid CircuitGroup?
12
+ */
13
+ export declare function isCircuitGroup(obj: any): obj is CircuitGroup;
10
14
  /**
11
15
  * Circuit to be visualized.
12
16
  */
@@ -15,10 +19,18 @@ export interface Circuit {
15
19
  qubits: Qubit[];
16
20
  componentGrid: ComponentGrid;
17
21
  }
22
+ /**
23
+ * Runtime check: is this a valid Circuit?
24
+ */
25
+ export declare function isCircuit(obj: any): obj is Circuit;
18
26
  export type ComponentGrid = Column[];
19
27
  export interface Column {
20
28
  components: Component[];
21
29
  }
30
+ /**
31
+ * Runtime check: is this a valid Column?
32
+ */
33
+ export declare function isColumn(obj: any): obj is Column;
22
34
  /**
23
35
  * Represents a component of a circuit. Currently, the only component is an operation.
24
36
  * In the future, this may be extended to include other components.
@@ -33,6 +45,10 @@ export interface Qubit {
33
45
  /** Number of measurement results associated to the qubit. */
34
46
  numResults?: number;
35
47
  }
48
+ /**
49
+ * Runtime check: is this a valid Qubit?
50
+ */
51
+ export declare function isQubit(obj: any): obj is Qubit;
36
52
  /**
37
53
  * Base type for operations.
38
54
  */
@@ -90,6 +106,10 @@ export interface Ket extends BaseOperation {
90
106
  * Union type for operations.
91
107
  */
92
108
  export type Operation = Unitary | Measurement | Ket;
109
+ /**
110
+ * Runtime check: is this a valid Operation?
111
+ */
112
+ export declare function isOperation(obj: any): obj is Operation;
93
113
  /**
94
114
  * A parameter for an operation.
95
115
  */
@@ -99,6 +119,10 @@ export interface Parameter {
99
119
  /** Parameter's Q# type. */
100
120
  type: string;
101
121
  }
122
+ /**
123
+ * Runtime check: is this a valid Parameter?
124
+ */
125
+ export declare function isParameter(obj: any): obj is Parameter;
102
126
  /**
103
127
  * Conditions on when to render the given operation.
104
128
  */
@@ -0,0 +1,130 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+ import { isRegister } from "./register.js";
4
+ /**
5
+ * Current format version.
6
+ */
7
+ export const CURRENT_VERSION = 1;
8
+ /**
9
+ * Runtime check: is this a valid CircuitGroup?
10
+ */
11
+ export function isCircuitGroup(obj) {
12
+ return (obj &&
13
+ typeof obj === "object" &&
14
+ typeof obj.version === "number" &&
15
+ Array.isArray(obj.circuits) &&
16
+ obj.circuits.length > 0 &&
17
+ obj.circuits.every(isCircuit));
18
+ }
19
+ /**
20
+ * Runtime check: is this a valid Circuit?
21
+ */
22
+ export function isCircuit(obj) {
23
+ return (obj &&
24
+ typeof obj === "object" &&
25
+ Array.isArray(obj.qubits) &&
26
+ obj.qubits.every(isQubit) &&
27
+ Array.isArray(obj.componentGrid) &&
28
+ obj.componentGrid.every(isColumn));
29
+ }
30
+ /**
31
+ * Runtime check: is this a valid Column?
32
+ */
33
+ export function isColumn(obj) {
34
+ return (obj &&
35
+ typeof obj === "object" &&
36
+ Array.isArray(obj.components) &&
37
+ obj.components.every(isOperation));
38
+ }
39
+ /**
40
+ * Runtime check: is this a valid Qubit?
41
+ */
42
+ export function isQubit(obj) {
43
+ return (obj &&
44
+ typeof obj === "object" &&
45
+ typeof obj.id === "number" &&
46
+ // numResults is optional, but if present must be a number
47
+ (obj.numResults === undefined || typeof obj.numResults === "number"));
48
+ }
49
+ /**
50
+ * Runtime check: is this a valid BaseOperation?
51
+ */
52
+ function isBaseOperation(obj) {
53
+ return (obj &&
54
+ typeof obj === "object" &&
55
+ typeof obj.gate === "string" &&
56
+ // args is optional, but if present must be an array of strings
57
+ (obj.args === undefined ||
58
+ (Array.isArray(obj.args) &&
59
+ obj.args.every((arg) => typeof arg === "string"))) &&
60
+ // params is optional, but if present must be an array of Parameter
61
+ (obj.params === undefined ||
62
+ (Array.isArray(obj.params) && obj.params.every(isParameter))) &&
63
+ // children is optional, but if present must be a ComponentGrid
64
+ (obj.children === undefined ||
65
+ (Array.isArray(obj.children) && obj.children.every(isColumn))) &&
66
+ // dataAttributes is optional, but if present must be an object with string values
67
+ (obj.dataAttributes === undefined ||
68
+ (typeof obj.dataAttributes === "object" &&
69
+ obj.dataAttributes !== null &&
70
+ Object.values(obj.dataAttributes).every((val) => typeof val === "string"))) &&
71
+ // isConditional is optional, but if present must be boolean
72
+ (obj.isConditional === undefined ||
73
+ typeof obj.isConditional === "boolean") &&
74
+ // conditionalRender is optional, but if present must be a valid enum value
75
+ (obj.conditionalRender === undefined ||
76
+ Object.values(ConditionalRender).includes(obj.conditionalRender)));
77
+ }
78
+ /**
79
+ * Runtime check: is this a valid Operation?
80
+ */
81
+ export function isOperation(obj) {
82
+ if (!isBaseOperation(obj))
83
+ return false;
84
+ // Re-cast to any so we can check discriminated fields without narrowing
85
+ const op = obj;
86
+ if (op.kind === undefined || typeof op.kind !== "string")
87
+ return false;
88
+ switch (op.kind) {
89
+ case "unitary":
90
+ return (Array.isArray(op.targets) &&
91
+ op.targets.every(isRegister) &&
92
+ // controls is optional
93
+ (op.controls === undefined ||
94
+ (Array.isArray(op.controls) && op.controls.every(isRegister))) &&
95
+ // isAdjoint is optional
96
+ (op.isAdjoint === undefined || typeof op.isAdjoint === "boolean"));
97
+ case "measurement":
98
+ return (Array.isArray(op.qubits) &&
99
+ op.qubits.every(isRegister) &&
100
+ Array.isArray(op.results) &&
101
+ op.results.every(isRegister));
102
+ case "ket":
103
+ return Array.isArray(op.targets) && op.targets.every(isRegister);
104
+ default:
105
+ return false;
106
+ }
107
+ }
108
+ /**
109
+ * Runtime check: is this a valid Parameter?
110
+ */
111
+ export function isParameter(obj) {
112
+ return (obj &&
113
+ typeof obj === "object" &&
114
+ typeof obj.name === "string" &&
115
+ typeof obj.type === "string");
116
+ }
117
+ /**
118
+ * Conditions on when to render the given operation.
119
+ */
120
+ export var ConditionalRender;
121
+ (function (ConditionalRender) {
122
+ /** Always rendered. */
123
+ ConditionalRender[ConditionalRender["Always"] = 0] = "Always";
124
+ /** Render classically-controlled operation when measurement is a zero. */
125
+ ConditionalRender[ConditionalRender["OnZero"] = 1] = "OnZero";
126
+ /** Render classically-controlled operation when measurement is a one. */
127
+ ConditionalRender[ConditionalRender["OnOne"] = 2] = "OnOne";
128
+ /** Render operation as a group of its nested operations. */
129
+ ConditionalRender[ConditionalRender["AsGroup"] = 3] = "AsGroup";
130
+ })(ConditionalRender || (ConditionalRender = {}));
@@ -0,0 +1,16 @@
1
+ import { CircuitGroup } from "./circuit.js";
2
+ export type ToCircuitGroupResult = {
3
+ ok: true;
4
+ circuitGroup: CircuitGroup;
5
+ } | {
6
+ ok: false;
7
+ error: string;
8
+ };
9
+ /**
10
+ * Ensures that the given circuit object is a CircuitGroup, doing any
11
+ * necessary conversions from Circuit or legacy formats.
12
+ *
13
+ * @param circuit The circuit to convert.
14
+ * @returns The result of the conversion.
15
+ */
16
+ export declare function toCircuitGroup(circuit: any): ToCircuitGroupResult;
@@ -1,13 +1,12 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
2
  // Licensed under the MIT license.
3
- import { getMinMaxRegIdx } from "../utils.js";
4
- import { CURRENT_VERSION, } from "./circuit.js";
3
+ import { CURRENT_VERSION, isCircuit, isCircuitGroup, isOperation, } from "./circuit.js";
5
4
  /**
6
5
  * Ensures that the given circuit object is a CircuitGroup, doing any
7
6
  * necessary conversions from Circuit or legacy formats.
8
7
  *
9
8
  * @param circuit The circuit to convert.
10
- * @returns The converted CircuitGroup.
9
+ * @returns The result of the conversion.
11
10
  */
12
11
  export function toCircuitGroup(circuit) {
13
12
  const emptyCircuit = {
@@ -19,60 +18,96 @@ export function toCircuitGroup(circuit) {
19
18
  circuits: [emptyCircuit],
20
19
  };
21
20
  if (circuit && Object.keys(circuit).length === 0) {
22
- return emptyCircuitGroup;
21
+ return { ok: true, circuitGroup: emptyCircuitGroup };
23
22
  }
24
23
  if (circuit?.version) {
25
24
  const version = circuit.version;
26
- // If it has a "version" field, it is up-to-date
27
25
  if (isCircuitGroup(circuit)) {
28
- // If it's already a CircuitGroup, return it as is
29
- return circuit;
26
+ return { ok: true, circuitGroup: circuit };
30
27
  }
31
28
  else if (isCircuit(circuit)) {
32
- // If it's a Circuit, wrap it in a CircuitGroup
33
- return {
34
- version,
35
- circuits: [circuit],
36
- };
29
+ return { ok: true, circuitGroup: { version, circuits: [circuit] } };
37
30
  }
38
31
  else {
39
- console.error("Unknown schema: circuit is neither a CircuitGroup nor a Circuit.");
40
- return emptyCircuitGroup;
32
+ return {
33
+ ok: false,
34
+ error: "Unknown schema: file is neither a CircuitGroup nor a Circuit.",
35
+ };
41
36
  }
42
37
  }
43
38
  else if (isCircuit(circuit)) {
44
- // If it's a Circuit without a version, wrap it in a CircuitGroup
45
39
  return {
46
- version: CURRENT_VERSION,
47
- circuits: [circuit],
40
+ ok: true,
41
+ circuitGroup: { version: CURRENT_VERSION, circuits: [circuit] },
48
42
  };
49
43
  }
50
- else if (circuit?.operations) {
51
- // Legacy schema: convert to CircuitGroup
52
- if (circuit.qubits === undefined || !Array.isArray(circuit.qubits)) {
53
- console.error("Unknown schema: circuit is missing qubit information.");
54
- return emptyCircuitGroup;
55
- }
56
- const qubits = circuit.qubits.map((qubit) => {
44
+ else if (circuit?.operations &&
45
+ Array.isArray(circuit.operations) &&
46
+ circuit?.qubits &&
47
+ Array.isArray(circuit.qubits)) {
48
+ // If it has "operations" and "qubits", it is a legacy schema
49
+ return tryConvertLegacySchema(circuit);
50
+ }
51
+ else {
52
+ return {
53
+ ok: false,
54
+ error: "Unknown schema: file does not match any known format.",
55
+ };
56
+ }
57
+ }
58
+ /**
59
+ * Attempts to convert a legacy circuit schema to a CircuitGroup.
60
+ *
61
+ * @param circuit The legacy circuit object to convert.
62
+ * @returns A ToCircuitGroupResult containing the converted CircuitGroup on success,
63
+ * or an error message on failure.
64
+ */
65
+ function tryConvertLegacySchema(circuit) {
66
+ try {
67
+ const qubits = circuit.qubits.map((qubit, idx) => {
68
+ if (typeof qubit !== "object" ||
69
+ qubit === null ||
70
+ typeof qubit.id !== "number") {
71
+ throw new Error(`Invalid qubit at index ${idx}.`);
72
+ }
57
73
  return {
58
74
  id: qubit.id,
59
- numResults: qubit.numChildren || 0, // Rename "numChildren" to "numResults"
75
+ numResults: qubit.numChildren || 0,
60
76
  };
61
77
  });
62
- const componentGrid = operationListToGrid(circuit.operations.map(toOperation), qubits.length);
78
+ const operationList = circuit.operations.map((op, idx) => {
79
+ try {
80
+ return toOperation(op);
81
+ }
82
+ catch (e) {
83
+ throw new Error(`Failed to convert operation at index ${idx}: ${e.message}`);
84
+ }
85
+ });
86
+ if (!operationList.every(isOperation)) {
87
+ return {
88
+ ok: false,
89
+ error: "Unknown schema: file contains invalid operations.",
90
+ };
91
+ }
92
+ const componentGrid = operationListToGrid(operationList, qubits.length);
63
93
  return {
64
- version: CURRENT_VERSION,
65
- circuits: [
66
- {
67
- qubits,
68
- componentGrid,
69
- },
70
- ],
94
+ ok: true,
95
+ circuitGroup: {
96
+ version: CURRENT_VERSION,
97
+ circuits: [
98
+ {
99
+ qubits,
100
+ componentGrid,
101
+ },
102
+ ],
103
+ },
71
104
  };
72
105
  }
73
- else {
74
- console.error("Unknown schema: circuit does not match any known format.");
75
- return emptyCircuitGroup;
106
+ catch (e) {
107
+ return {
108
+ ok: false,
109
+ error: `Legacy schema: ${e instanceof Error ? e.message : String(e)}`,
110
+ };
76
111
  }
77
112
  }
78
113
  /**
@@ -109,7 +144,7 @@ function toOperation(op) {
109
144
  };
110
145
  }
111
146
  else {
112
- const ket = getKetLabel(op.gate);
147
+ const ket = op.gate === undefined ? "" : getKetLabel(op.gate);
113
148
  if (ket.length > 0) {
114
149
  return {
115
150
  ...op,
@@ -141,26 +176,6 @@ function toOperation(op) {
141
176
  }
142
177
  }
143
178
  }
144
- /**
145
- * Checks if the given object is a CircuitGroup.
146
- *
147
- * @param circuit The object to check.
148
- * @returns True if the object is a CircuitGroup, false otherwise.
149
- */
150
- function isCircuitGroup(circuit) {
151
- return circuit && Array.isArray(circuit.circuits);
152
- }
153
- /**
154
- * Checks if the given object is a Circuit.
155
- *
156
- * @param circuit The object to check.
157
- * @returns True if the object is a Circuit, false otherwise.
158
- */
159
- function isCircuit(circuit) {
160
- return (circuit &&
161
- Array.isArray(circuit.qubits) &&
162
- Array.isArray(circuit.componentGrid));
163
- }
164
179
  /**
165
180
  * Get the label from a ket string.
166
181
  *
@@ -267,10 +282,12 @@ function groupOperations(operations, numQubits) {
267
282
  const groupedOps = Array.from(Array(numQubits), () => new Array(0));
268
283
  operations.forEach((operation, instrIdx) => {
269
284
  const [minRegIdx, maxRegIdx] = getMinMaxRegIdx(operation, numQubits);
270
- // Add operation also to registers that are in-between target registers
271
- // so that other gates won't render in the middle.
272
- for (let i = minRegIdx; i <= maxRegIdx; i++) {
273
- groupedOps[i].push(instrIdx);
285
+ if (minRegIdx > -1 && maxRegIdx > -1) {
286
+ // Add operation also to registers that are in-between target registers
287
+ // so that other gates won't render in the middle.
288
+ for (let i = minRegIdx; i <= maxRegIdx; i++) {
289
+ groupedOps[i].push(instrIdx);
290
+ }
274
291
  }
275
292
  });
276
293
  return groupedOps;
@@ -311,3 +328,42 @@ function alignOps(ops) {
311
328
  }
312
329
  return paddedOps;
313
330
  }
331
+ /**
332
+ * Get the minimum and maximum register indices for a given operation.
333
+ *
334
+ * @param operation The operation for which to get the register indices.
335
+ * @param numQubits The number of qubits in the circuit.
336
+ * @returns A tuple containing the minimum and maximum register indices.
337
+ */
338
+ function getMinMaxRegIdx(operation, numQubits) {
339
+ let targets;
340
+ let controls;
341
+ switch (operation.kind) {
342
+ case "measurement":
343
+ targets = operation.results;
344
+ controls = operation.qubits;
345
+ break;
346
+ case "unitary":
347
+ targets = operation.targets;
348
+ controls = operation.controls || [];
349
+ break;
350
+ case "ket":
351
+ targets = operation.targets;
352
+ controls = [];
353
+ break;
354
+ }
355
+ const qRegs = [...controls, ...targets]
356
+ .filter(({ result }) => result === undefined)
357
+ .map(({ qubit }) => qubit);
358
+ const clsControls = controls.filter(({ result }) => result !== undefined);
359
+ const isClassicallyControlled = clsControls.length > 0;
360
+ if (!isClassicallyControlled && qRegs.length === 0)
361
+ return [-1, -1];
362
+ // If operation is classically-controlled, pad all qubit registers. Otherwise, only pad
363
+ // the contiguous range of registers that it covers.
364
+ const minRegIdx = isClassicallyControlled ? 0 : Math.min(...qRegs);
365
+ const maxRegIdx = isClassicallyControlled
366
+ ? numQubits - 1
367
+ : Math.max(...qRegs);
368
+ return [minRegIdx, maxRegIdx];
369
+ }
@@ -14,6 +14,10 @@ export interface Register {
14
14
  /** Classical register ID. If present, register is classical register. */
15
15
  result?: number;
16
16
  }
17
+ /**
18
+ * Runtime check: is this a valid Register?
19
+ */
20
+ export declare function isRegister(obj: any): obj is Register;
17
21
  /**
18
22
  * Rendering data for qubit register.
19
23
  */
@@ -0,0 +1,20 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+ /**
4
+ * Type of register.
5
+ */
6
+ export var RegisterType;
7
+ (function (RegisterType) {
8
+ RegisterType[RegisterType["Qubit"] = 0] = "Qubit";
9
+ RegisterType[RegisterType["Classical"] = 1] = "Classical";
10
+ })(RegisterType || (RegisterType = {}));
11
+ /**
12
+ * Runtime check: is this a valid Register?
13
+ */
14
+ export function isRegister(obj) {
15
+ return (obj &&
16
+ typeof obj === "object" &&
17
+ typeof obj.qubit === "number" &&
18
+ // result is optional, but if present must be a number
19
+ (obj.result === undefined || typeof obj.result === "number"));
20
+ }
@@ -1,4 +1,4 @@
1
- import { type CircuitGroup as CircuitData } from "../shared/circuit.js";
1
+ import { type CircuitGroup as CircuitData } from "../data-structures/circuit.js";
2
2
  import type { IBreakpointSpan, IQuantumState, IStackFrame, IStructStepResult, IVariable } from "../../lib/web/qsc_wasm.js";
3
3
  import { ProgramConfig } from "../browser.js";
4
4
  import { IQscEventTarget, QscEventData } from "../compiler/events.js";
@@ -1,6 +1,6 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
2
  // Licensed under the MIT License.
3
- import { CURRENT_VERSION, } from "../shared/circuit.js";
3
+ import { CURRENT_VERSION, } from "../data-structures/circuit.js";
4
4
  import { eventStringToMsg } from "../compiler/common.js";
5
5
  import { makeEvent, } from "../compiler/events.js";
6
6
  import { log } from "../log.js";
@@ -0,0 +1,21 @@
1
+ import type { IQSharpError } from "../lib/web/qsc_wasm.js";
2
+ /**
3
+ * Public error type for most `qsharp-lang` functions.
4
+ *
5
+ * This is typically thrown by functions that deal with compiling and
6
+ * running code. Contains one or more VS Code-like diagnostics.
7
+ */
8
+ export declare class QdkDiagnostics extends Error {
9
+ readonly diagnostics: IQSharpError[];
10
+ constructor(diagnostics: IQSharpError[]);
11
+ }
12
+ /**
13
+ * Wrapper around QDK WASM functions to convert exceptions to a more ergonomic type.
14
+ *
15
+ * Many of the WASM functions throw exceptions that are of type `string`,
16
+ * which are really just JSON-serialized `IQSharpError[]`s.
17
+ *
18
+ * This function converts those exceptions into `QdkDiagnostics` instances
19
+ * that properly inherit from `Error`.
20
+ */
21
+ export declare function callAndTransformExceptions<T>(fn: () => Promise<T>): Promise<T>;