qsharp-lang 1.17.1-dev → 1.17.3-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 (352) hide show
  1. package/README.md +2 -2
  2. package/dist/browser.d.ts +10 -8
  3. package/dist/browser.js +5 -3
  4. package/dist/compiler/compiler.d.ts +1 -1
  5. package/dist/compiler/compiler.js +8 -7
  6. package/dist/{shared → data-structures}/circuit.d.ts +24 -0
  7. package/dist/data-structures/circuit.js +130 -0
  8. package/dist/data-structures/legacyCircuitUpdate.d.ts +16 -0
  9. package/dist/{shared → data-structures}/legacyCircuitUpdate.js +117 -61
  10. package/dist/{shared → data-structures}/register.d.ts +4 -0
  11. package/dist/data-structures/register.js +20 -0
  12. package/dist/debug-service/debug-service.d.ts +1 -1
  13. package/dist/debug-service/debug-service.js +1 -1
  14. package/dist/diagnostics.d.ts +21 -0
  15. package/dist/diagnostics.js +84 -0
  16. package/dist/katas-content.generated.js +7 -7
  17. package/dist/katas-content.generated.md.js +7 -7
  18. package/dist/main.d.ts +2 -2
  19. package/dist/main.js +2 -1
  20. package/dist/project.d.ts +10 -0
  21. package/dist/project.js +17 -0
  22. package/dist/samples.generated.js +1 -6
  23. package/dist/utils.d.ts +2 -10
  24. package/dist/utils.js +0 -39
  25. package/dist/workers/common.js +62 -17
  26. package/docs/Microsoft.Quantum.Core/Length.md +1 -1
  27. package/docs/Microsoft.Quantum.Core/Repeated.md +1 -1
  28. package/docs/Microsoft.Quantum.Core/index.md +1 -3
  29. package/docs/Std.Arithmetic/AddLE.md +1 -1
  30. package/docs/Std.Arithmetic/ApplyIfEqualL.md +1 -1
  31. package/docs/Std.Arithmetic/ApplyIfEqualLE.md +1 -1
  32. package/docs/Std.Arithmetic/ApplyIfGreaterL.md +1 -1
  33. package/docs/Std.Arithmetic/ApplyIfGreaterLE.md +1 -1
  34. package/docs/Std.Arithmetic/ApplyIfGreaterOrEqualL.md +1 -1
  35. package/docs/Std.Arithmetic/ApplyIfGreaterOrEqualLE.md +1 -1
  36. package/docs/Std.Arithmetic/ApplyIfLessL.md +1 -1
  37. package/docs/Std.Arithmetic/ApplyIfLessLE.md +1 -1
  38. package/docs/Std.Arithmetic/ApplyIfLessOrEqualL.md +1 -1
  39. package/docs/Std.Arithmetic/ApplyIfLessOrEqualLE.md +1 -1
  40. package/docs/Std.Arithmetic/FourierTDIncByLE.md +1 -1
  41. package/docs/Std.Arithmetic/IncByI.md +1 -1
  42. package/docs/Std.Arithmetic/IncByIUsingIncByLE.md +1 -1
  43. package/docs/Std.Arithmetic/IncByL.md +1 -1
  44. package/docs/Std.Arithmetic/IncByLE.md +1 -1
  45. package/docs/Std.Arithmetic/IncByLEUsingAddLE.md +1 -1
  46. package/docs/Std.Arithmetic/IncByLUsingIncByLE.md +1 -1
  47. package/docs/Std.Arithmetic/LookAheadDKRSAddLE.md +1 -1
  48. package/docs/Std.Arithmetic/MAJ.md +1 -1
  49. package/docs/Std.Arithmetic/ReflectAboutInteger.md +1 -1
  50. package/docs/Std.Arithmetic/RippleCarryCGAddLE.md +1 -1
  51. package/docs/Std.Arithmetic/RippleCarryCGIncByLE.md +1 -1
  52. package/docs/Std.Arithmetic/RippleCarryTTKIncByLE.md +1 -1
  53. package/docs/Std.Arithmetic/index.md +1 -3
  54. package/docs/Std.Arrays/All.md +1 -1
  55. package/docs/Std.Arrays/Any.md +1 -1
  56. package/docs/Std.Arrays/Chunks.md +1 -1
  57. package/docs/Std.Arrays/CircularlyShifted.md +1 -1
  58. package/docs/Std.Arrays/ColumnAt.md +1 -1
  59. package/docs/Std.Arrays/Count.md +1 -1
  60. package/docs/Std.Arrays/Diagonal.md +1 -1
  61. package/docs/Std.Arrays/DrawMany.md +1 -1
  62. package/docs/Std.Arrays/Enumerated.md +1 -1
  63. package/docs/Std.Arrays/Excluding.md +1 -1
  64. package/docs/Std.Arrays/Filtered.md +1 -1
  65. package/docs/Std.Arrays/FlatMapped.md +1 -1
  66. package/docs/Std.Arrays/Flattened.md +1 -1
  67. package/docs/Std.Arrays/Fold.md +1 -1
  68. package/docs/Std.Arrays/ForEach.md +1 -1
  69. package/docs/Std.Arrays/Head.md +1 -1
  70. package/docs/Std.Arrays/HeadAndRest.md +1 -1
  71. package/docs/Std.Arrays/IndexOf.md +1 -1
  72. package/docs/Std.Arrays/IndexRange.md +1 -1
  73. package/docs/Std.Arrays/Interleaved.md +1 -1
  74. package/docs/Std.Arrays/IsEmpty.md +1 -1
  75. package/docs/Std.Arrays/IsRectangularArray.md +1 -1
  76. package/docs/Std.Arrays/IsSorted.md +1 -1
  77. package/docs/Std.Arrays/IsSquareArray.md +1 -1
  78. package/docs/Std.Arrays/Mapped.md +1 -1
  79. package/docs/Std.Arrays/MappedByIndex.md +1 -1
  80. package/docs/Std.Arrays/MappedOverRange.md +1 -1
  81. package/docs/Std.Arrays/Most.md +1 -1
  82. package/docs/Std.Arrays/MostAndTail.md +1 -1
  83. package/docs/Std.Arrays/Padded.md +1 -1
  84. package/docs/Std.Arrays/Partitioned.md +1 -1
  85. package/docs/Std.Arrays/Rest.md +1 -1
  86. package/docs/Std.Arrays/Reversed.md +1 -1
  87. package/docs/Std.Arrays/SequenceI.md +1 -1
  88. package/docs/Std.Arrays/SequenceL.md +1 -1
  89. package/docs/Std.Arrays/Sorted.md +1 -1
  90. package/docs/Std.Arrays/Subarray.md +1 -1
  91. package/docs/Std.Arrays/Swapped.md +1 -1
  92. package/docs/Std.Arrays/Tail.md +1 -1
  93. package/docs/Std.Arrays/Transposed.md +1 -1
  94. package/docs/Std.Arrays/Unzipped.md +1 -1
  95. package/docs/Std.Arrays/Where.md +1 -1
  96. package/docs/Std.Arrays/Windows.md +1 -1
  97. package/docs/Std.Arrays/Zipped.md +1 -1
  98. package/docs/Std.Arrays/index.md +1 -3
  99. package/docs/Std.Canon/ApplyCNOTChain.md +1 -1
  100. package/docs/Std.Canon/ApplyControlledOnBitString.md +1 -1
  101. package/docs/Std.Canon/ApplyControlledOnInt.md +1 -1
  102. package/docs/Std.Canon/ApplyOperationPowerA.md +1 -1
  103. package/docs/Std.Canon/ApplyOperationPowerCA.md +24 -0
  104. package/docs/Std.Canon/ApplyP.md +1 -1
  105. package/docs/Std.Canon/ApplyPauli.md +1 -1
  106. package/docs/Std.Canon/ApplyPauliFromBitString.md +1 -1
  107. package/docs/Std.Canon/ApplyPauliFromInt.md +1 -1
  108. package/docs/Std.Canon/ApplyQFT.md +1 -1
  109. package/docs/Std.Canon/ApplyQPE.md +51 -0
  110. package/docs/Std.Canon/ApplyToEach.md +1 -1
  111. package/docs/Std.Canon/ApplyToEachA.md +1 -1
  112. package/docs/Std.Canon/ApplyToEachC.md +1 -1
  113. package/docs/Std.Canon/ApplyToEachCA.md +1 -1
  114. package/docs/Std.Canon/ApplyXorInPlace.md +1 -1
  115. package/docs/Std.Canon/ApplyXorInPlaceL.md +1 -1
  116. package/docs/Std.Canon/CX.md +1 -1
  117. package/docs/Std.Canon/CY.md +1 -1
  118. package/docs/Std.Canon/CZ.md +1 -1
  119. package/docs/Std.Canon/Fst.md +1 -1
  120. package/docs/Std.Canon/Relabel.md +1 -1
  121. package/docs/Std.Canon/Snd.md +1 -1
  122. package/docs/Std.Canon/SwapReverseRegister.md +1 -1
  123. package/docs/Std.Canon/index.md +3 -3
  124. package/docs/Std.Convert/BigIntAsBoolArray.md +1 -1
  125. package/docs/Std.Convert/BigIntAsInt.md +1 -1
  126. package/docs/Std.Convert/BoolArrayAsBigInt.md +1 -1
  127. package/docs/Std.Convert/BoolArrayAsInt.md +1 -1
  128. package/docs/Std.Convert/BoolArrayAsResultArray.md +1 -1
  129. package/docs/Std.Convert/BoolAsResult.md +1 -1
  130. package/docs/Std.Convert/ComplexAsComplexPolar.md +1 -1
  131. package/docs/Std.Convert/ComplexPolarAsComplex.md +1 -1
  132. package/docs/Std.Convert/DoubleAsStringWithPrecision.md +1 -1
  133. package/docs/Std.Convert/IntAsBigInt.md +1 -1
  134. package/docs/Std.Convert/IntAsBoolArray.md +1 -1
  135. package/docs/Std.Convert/IntAsDouble.md +1 -1
  136. package/docs/Std.Convert/ResultArrayAsBoolArray.md +1 -1
  137. package/docs/Std.Convert/ResultArrayAsInt.md +1 -1
  138. package/docs/Std.Convert/ResultAsBool.md +1 -1
  139. package/docs/Std.Convert/index.md +1 -3
  140. package/docs/Std.Core/Length.md +1 -1
  141. package/docs/Std.Core/Repeated.md +1 -1
  142. package/docs/Std.Core/index.md +1 -3
  143. package/docs/Std.Diagnostics/ApplyIdleNoise.md +1 -1
  144. package/docs/Std.Diagnostics/BitFlipNoise.md +1 -1
  145. package/docs/Std.Diagnostics/CheckAllZero.md +1 -1
  146. package/docs/Std.Diagnostics/CheckOperationsAreEqual.md +1 -1
  147. package/docs/Std.Diagnostics/CheckZero.md +1 -1
  148. package/docs/Std.Diagnostics/ConfigurePauliNoise.md +1 -1
  149. package/docs/Std.Diagnostics/DepolarizingNoise.md +1 -1
  150. package/docs/Std.Diagnostics/DumpMachine.md +1 -1
  151. package/docs/Std.Diagnostics/DumpOperation.md +1 -1
  152. package/docs/Std.Diagnostics/DumpRegister.md +1 -1
  153. package/docs/Std.Diagnostics/Fact.md +1 -1
  154. package/docs/Std.Diagnostics/NoNoise.md +1 -1
  155. package/docs/Std.Diagnostics/PhaseFlipNoise.md +1 -1
  156. package/docs/Std.Diagnostics/StartCountingFunction.md +1 -1
  157. package/docs/Std.Diagnostics/StartCountingOperation.md +1 -1
  158. package/docs/Std.Diagnostics/StartCountingQubits.md +1 -1
  159. package/docs/Std.Diagnostics/StopCountingFunction.md +1 -1
  160. package/docs/Std.Diagnostics/StopCountingOperation.md +1 -1
  161. package/docs/Std.Diagnostics/StopCountingQubits.md +1 -1
  162. package/docs/Std.Diagnostics/index.md +1 -3
  163. package/docs/Std.Intrinsic/AND.md +1 -1
  164. package/docs/Std.Intrinsic/ApplyUnitary.md +1 -1
  165. package/docs/Std.Intrinsic/CCNOT.md +1 -1
  166. package/docs/Std.Intrinsic/CNOT.md +1 -1
  167. package/docs/Std.Intrinsic/Exp.md +1 -1
  168. package/docs/Std.Intrinsic/H.md +1 -1
  169. package/docs/Std.Intrinsic/I.md +1 -1
  170. package/docs/Std.Intrinsic/M.md +1 -1
  171. package/docs/Std.Intrinsic/Measure.md +1 -1
  172. package/docs/Std.Intrinsic/Message.md +1 -1
  173. package/docs/Std.Intrinsic/R.md +1 -1
  174. package/docs/Std.Intrinsic/R1.md +1 -1
  175. package/docs/Std.Intrinsic/R1Frac.md +1 -1
  176. package/docs/Std.Intrinsic/RFrac.md +1 -1
  177. package/docs/Std.Intrinsic/Reset.md +1 -1
  178. package/docs/Std.Intrinsic/ResetAll.md +1 -1
  179. package/docs/Std.Intrinsic/Rx.md +1 -1
  180. package/docs/Std.Intrinsic/Rxx.md +1 -1
  181. package/docs/Std.Intrinsic/Ry.md +1 -1
  182. package/docs/Std.Intrinsic/Ryy.md +1 -1
  183. package/docs/Std.Intrinsic/Rz.md +1 -1
  184. package/docs/Std.Intrinsic/Rzz.md +1 -1
  185. package/docs/Std.Intrinsic/S.md +1 -1
  186. package/docs/Std.Intrinsic/SWAP.md +1 -1
  187. package/docs/Std.Intrinsic/SX.md +1 -1
  188. package/docs/Std.Intrinsic/T.md +1 -1
  189. package/docs/Std.Intrinsic/X.md +1 -1
  190. package/docs/Std.Intrinsic/Y.md +1 -1
  191. package/docs/Std.Intrinsic/Z.md +1 -1
  192. package/docs/Std.Intrinsic/index.md +1 -3
  193. package/docs/Std.Logical/Xor.md +1 -1
  194. package/docs/Std.Logical/index.md +1 -3
  195. package/docs/Std.Math/AbsComplex.md +1 -1
  196. package/docs/Std.Math/AbsComplexPolar.md +1 -1
  197. package/docs/Std.Math/AbsD.md +1 -1
  198. package/docs/Std.Math/AbsI.md +1 -1
  199. package/docs/Std.Math/AbsL.md +1 -1
  200. package/docs/Std.Math/AbsSquaredComplex.md +1 -1
  201. package/docs/Std.Math/AbsSquaredComplexPolar.md +1 -1
  202. package/docs/Std.Math/ApproximateFactorial.md +1 -1
  203. package/docs/Std.Math/ArcCos.md +1 -1
  204. package/docs/Std.Math/ArcCosh.md +1 -1
  205. package/docs/Std.Math/ArcSin.md +1 -1
  206. package/docs/Std.Math/ArcSinh.md +1 -1
  207. package/docs/Std.Math/ArcTan.md +1 -1
  208. package/docs/Std.Math/ArcTan2.md +1 -1
  209. package/docs/Std.Math/ArcTanh.md +1 -1
  210. package/docs/Std.Math/ArgComplex.md +1 -1
  211. package/docs/Std.Math/ArgComplexPolar.md +1 -1
  212. package/docs/Std.Math/Binom.md +1 -1
  213. package/docs/Std.Math/BitSizeI.md +1 -1
  214. package/docs/Std.Math/BitSizeL.md +1 -1
  215. package/docs/Std.Math/Ceiling.md +1 -1
  216. package/docs/Std.Math/Complex.md +1 -1
  217. package/docs/Std.Math/ComplexPolar.md +1 -1
  218. package/docs/Std.Math/ContinuedFractionConvergentI.md +1 -1
  219. package/docs/Std.Math/ContinuedFractionConvergentL.md +1 -1
  220. package/docs/Std.Math/Cos.md +1 -1
  221. package/docs/Std.Math/Cosh.md +1 -1
  222. package/docs/Std.Math/DivRemI.md +1 -1
  223. package/docs/Std.Math/DivRemL.md +1 -1
  224. package/docs/Std.Math/DividedByC.md +1 -1
  225. package/docs/Std.Math/DividedByCP.md +1 -1
  226. package/docs/Std.Math/E.md +1 -1
  227. package/docs/Std.Math/ExpModI.md +1 -1
  228. package/docs/Std.Math/ExpModL.md +1 -1
  229. package/docs/Std.Math/ExtendedGreatestCommonDivisorI.md +1 -1
  230. package/docs/Std.Math/ExtendedGreatestCommonDivisorL.md +1 -1
  231. package/docs/Std.Math/FactorialI.md +1 -1
  232. package/docs/Std.Math/FactorialL.md +1 -1
  233. package/docs/Std.Math/Floor.md +1 -1
  234. package/docs/Std.Math/GreatestCommonDivisorI.md +1 -1
  235. package/docs/Std.Math/GreatestCommonDivisorL.md +1 -1
  236. package/docs/Std.Math/HammingWeightI.md +1 -1
  237. package/docs/Std.Math/InverseModI.md +1 -1
  238. package/docs/Std.Math/InverseModL.md +1 -1
  239. package/docs/Std.Math/IsCoprimeI.md +1 -1
  240. package/docs/Std.Math/IsCoprimeL.md +1 -1
  241. package/docs/Std.Math/IsInfinite.md +1 -1
  242. package/docs/Std.Math/IsNaN.md +1 -1
  243. package/docs/Std.Math/LargestFixedPoint.md +1 -1
  244. package/docs/Std.Math/Lg.md +1 -1
  245. package/docs/Std.Math/Log.md +1 -1
  246. package/docs/Std.Math/Log10.md +1 -1
  247. package/docs/Std.Math/LogFactorialD.md +1 -1
  248. package/docs/Std.Math/LogGammaD.md +1 -1
  249. package/docs/Std.Math/LogOf2.md +1 -1
  250. package/docs/Std.Math/Max.md +1 -1
  251. package/docs/Std.Math/MaxD.md +1 -1
  252. package/docs/Std.Math/MaxI.md +1 -1
  253. package/docs/Std.Math/MaxL.md +1 -1
  254. package/docs/Std.Math/Min.md +1 -1
  255. package/docs/Std.Math/MinD.md +1 -1
  256. package/docs/Std.Math/MinI.md +1 -1
  257. package/docs/Std.Math/MinL.md +1 -1
  258. package/docs/Std.Math/MinusC.md +1 -1
  259. package/docs/Std.Math/MinusCP.md +1 -1
  260. package/docs/Std.Math/ModulusI.md +1 -1
  261. package/docs/Std.Math/ModulusL.md +1 -1
  262. package/docs/Std.Math/NegationC.md +1 -1
  263. package/docs/Std.Math/NegationCP.md +1 -1
  264. package/docs/Std.Math/PI.md +1 -1
  265. package/docs/Std.Math/PNorm.md +1 -1
  266. package/docs/Std.Math/PNormalized.md +1 -1
  267. package/docs/Std.Math/PlusC.md +1 -1
  268. package/docs/Std.Math/PlusCP.md +1 -1
  269. package/docs/Std.Math/PowC.md +1 -1
  270. package/docs/Std.Math/PowCP.md +1 -1
  271. package/docs/Std.Math/RealMod.md +1 -1
  272. package/docs/Std.Math/Round.md +1 -1
  273. package/docs/Std.Math/RoundHalfAwayFromZero.md +1 -1
  274. package/docs/Std.Math/SignD.md +1 -1
  275. package/docs/Std.Math/SignI.md +1 -1
  276. package/docs/Std.Math/SignL.md +1 -1
  277. package/docs/Std.Math/Sin.md +1 -1
  278. package/docs/Std.Math/Sinh.md +1 -1
  279. package/docs/Std.Math/SmallestFixedPoint.md +1 -1
  280. package/docs/Std.Math/Sqrt.md +1 -1
  281. package/docs/Std.Math/SquaredNorm.md +1 -1
  282. package/docs/Std.Math/Tan.md +1 -1
  283. package/docs/Std.Math/Tanh.md +1 -1
  284. package/docs/Std.Math/TimesC.md +1 -1
  285. package/docs/Std.Math/TimesCP.md +1 -1
  286. package/docs/Std.Math/TrailingZeroCountI.md +1 -1
  287. package/docs/Std.Math/TrailingZeroCountL.md +1 -1
  288. package/docs/Std.Math/Truncate.md +1 -1
  289. package/docs/Std.Math/index.md +1 -3
  290. package/docs/Std.Measurement/MResetEachZ.md +1 -1
  291. package/docs/Std.Measurement/MResetX.md +1 -1
  292. package/docs/Std.Measurement/MResetY.md +1 -1
  293. package/docs/Std.Measurement/MResetZ.md +1 -1
  294. package/docs/Std.Measurement/MeasureAllZ.md +1 -1
  295. package/docs/Std.Measurement/MeasureEachZ.md +1 -1
  296. package/docs/Std.Measurement/MeasureInteger.md +1 -1
  297. package/docs/Std.Measurement/index.md +1 -3
  298. package/docs/Std.Random/DrawRandomBool.md +1 -1
  299. package/docs/Std.Random/DrawRandomDouble.md +1 -1
  300. package/docs/Std.Random/DrawRandomInt.md +1 -1
  301. package/docs/Std.Random/index.md +1 -3
  302. package/docs/Std.Range/IsRangeEmpty.md +1 -1
  303. package/docs/Std.Range/RangeEnd.md +1 -1
  304. package/docs/Std.Range/RangeReverse.md +1 -1
  305. package/docs/Std.Range/RangeStart.md +1 -1
  306. package/docs/Std.Range/RangeStep.md +1 -1
  307. package/docs/Std.Range/index.md +1 -3
  308. package/docs/Std.ResourceEstimation/AccountForEstimates.md +1 -1
  309. package/docs/Std.ResourceEstimation/AuxQubitCount.md +1 -1
  310. package/docs/Std.ResourceEstimation/BeginEstimateCaching.md +1 -1
  311. package/docs/Std.ResourceEstimation/BeginRepeatEstimates.md +1 -1
  312. package/docs/Std.ResourceEstimation/CczCount.md +1 -1
  313. package/docs/Std.ResourceEstimation/EndEstimateCaching.md +1 -1
  314. package/docs/Std.ResourceEstimation/EndRepeatEstimates.md +1 -1
  315. package/docs/Std.ResourceEstimation/MeasurementCount.md +1 -1
  316. package/docs/Std.ResourceEstimation/PSSPCLayout.md +1 -1
  317. package/docs/Std.ResourceEstimation/RepeatEstimates.md +1 -1
  318. package/docs/Std.ResourceEstimation/RotationCount.md +1 -1
  319. package/docs/Std.ResourceEstimation/RotationDepth.md +1 -1
  320. package/docs/Std.ResourceEstimation/SingleVariant.md +1 -1
  321. package/docs/Std.ResourceEstimation/TCount.md +1 -1
  322. package/docs/Std.ResourceEstimation/index.md +1 -3
  323. package/docs/Std.StatePreparation/ApproximatelyPreparePureStateCP.md +1 -1
  324. package/docs/Std.StatePreparation/PreparePureStateD.md +1 -1
  325. package/docs/Std.StatePreparation/PrepareUniformSuperposition.md +1 -1
  326. package/docs/Std.StatePreparation/index.md +1 -3
  327. package/docs/Std.TableLookup/Select.md +1 -1
  328. package/docs/Std.TableLookup/index.md +1 -3
  329. package/docs/index.md +19 -21
  330. package/docs/toc.yml +2 -0
  331. package/lib/node/qsc_wasm.cjs +9 -6
  332. package/lib/node/qsc_wasm.d.cts +2 -1
  333. package/lib/node/qsc_wasm_bg.wasm +0 -0
  334. package/lib/web/qsc_wasm.d.ts +3 -2
  335. package/lib/web/qsc_wasm.js +9 -6
  336. package/lib/web/qsc_wasm_bg.wasm +0 -0
  337. package/package.json +4 -3
  338. package/ux/README.md +1 -1
  339. package/ux/circuit-vis/circuit.ts +3 -3
  340. package/ux/circuit-vis/draggable.ts +1 -1
  341. package/ux/circuit-vis/events.ts +2 -1
  342. package/ux/circuit-vis/index.ts +3 -1
  343. package/ux/circuit-vis/panel.ts +64 -1
  344. package/ux/circuit-vis/register.ts +1 -1
  345. package/ux/circuit-vis/sqore.ts +7 -1
  346. package/ux/circuit-vis/utils.ts +47 -0
  347. package/ux/circuit.tsx +66 -25
  348. package/ux/data.ts +1 -0
  349. package/ux/qsharp-circuit.css +31 -0
  350. package/dist/shared/circuit.js +0 -20
  351. package/dist/shared/legacyCircuitUpdate.d.ts +0 -9
  352. package/dist/shared/register.js +0 -10
@@ -207,6 +207,52 @@ const getGateLocationString = (operation: Operation): string | null => {
207
207
  return operation.dataAttributes["location"];
208
208
  };
209
209
 
210
+ /**
211
+ * Get the minimum and maximum register indices for a given operation.
212
+ *
213
+ * @param operation The operation for which to get the register indices.
214
+ * @param numQubits The number of qubits in the circuit.
215
+ * @returns A tuple containing the minimum and maximum register indices.
216
+ */
217
+ function getMinMaxRegIdx(
218
+ operation: Operation,
219
+ numQubits: number,
220
+ ): [number, number] {
221
+ let targets: Register[];
222
+ let controls: Register[];
223
+ switch (operation.kind) {
224
+ case "measurement":
225
+ targets = operation.results;
226
+ controls = operation.qubits;
227
+ break;
228
+ case "unitary":
229
+ targets = operation.targets;
230
+ controls = operation.controls || [];
231
+ break;
232
+ case "ket":
233
+ targets = operation.targets;
234
+ controls = [];
235
+ break;
236
+ }
237
+
238
+ const qRegs = [...controls, ...targets]
239
+ .filter(({ result }) => result === undefined)
240
+ .map(({ qubit }) => qubit);
241
+ const clsControls: Register[] = controls.filter(
242
+ ({ result }) => result !== undefined,
243
+ );
244
+ const isClassicallyControlled: boolean = clsControls.length > 0;
245
+ if (!isClassicallyControlled && qRegs.length === 0) return [-1, -1];
246
+ // If operation is classically-controlled, pad all qubit registers. Otherwise, only pad
247
+ // the contiguous range of registers that it covers.
248
+ const minRegIdx: number = isClassicallyControlled ? 0 : Math.min(...qRegs);
249
+ const maxRegIdx: number = isClassicallyControlled
250
+ ? numQubits - 1
251
+ : Math.max(...qRegs);
252
+
253
+ return [minRegIdx, maxRegIdx];
254
+ }
255
+
210
256
  /**********************
211
257
  * Finder Functions *
212
258
  **********************/
@@ -399,6 +445,7 @@ export {
399
445
  getChildTargets,
400
446
  locationStringToIndexes,
401
447
  getGateLocationString,
448
+ getMinMaxRegIdx,
402
449
  findGateElem,
403
450
  findLocation,
404
451
  findParentOperation,
package/ux/circuit.tsx CHANGED
@@ -22,31 +22,41 @@ export function Circuit(props: {
22
22
  circuit?: qviz.CircuitGroup | qviz.Circuit;
23
23
  isEditable: boolean;
24
24
  editCallback?: (fileData: qviz.CircuitGroup) => void;
25
+ runCallback?: () => void;
25
26
  }) {
26
- const circuitGroup = toCircuitGroup(props.circuit);
27
- const circuit = circuitGroup.circuits[0];
27
+ let unrenderable = false;
28
+ let qubits = 0;
29
+ let operations = 0;
30
+ let errorMsg: string | undefined = undefined;
28
31
 
29
- if (circuit.componentGrid === undefined) circuit.componentGrid = [];
30
- if (circuit.qubits === undefined) circuit.qubits = [];
32
+ const result = toCircuitGroup(props.circuit);
33
+ if (result.ok) {
34
+ const circuit = result.circuitGroup.circuits[0];
35
+ if (circuit.componentGrid === undefined) circuit.componentGrid = [];
36
+ if (circuit.qubits === undefined) circuit.qubits = [];
37
+ qubits = circuit.qubits.length;
38
+ operations = circuit.componentGrid.length;
31
39
 
32
- if (circuit.componentGrid === undefined) circuit.componentGrid = [];
33
- if (circuit.qubits === undefined) circuit.qubits = [];
34
-
35
- const unrenderable =
36
- circuitGroup.circuits.length > MAX_CIRCUITS ||
37
- (!props.isEditable && circuit.qubits.length === 0) ||
38
- circuit.componentGrid.length > MAX_OPERATIONS ||
39
- circuit.qubits.length > MAX_QUBITS;
40
+ unrenderable =
41
+ unrenderable ||
42
+ result.circuitGroup.circuits.length > MAX_CIRCUITS ||
43
+ (!props.isEditable && qubits === 0) ||
44
+ operations > MAX_OPERATIONS ||
45
+ qubits > MAX_QUBITS;
46
+ } else {
47
+ errorMsg = result.error;
48
+ }
40
49
 
41
50
  return (
42
51
  <div>
43
- {unrenderable ? (
52
+ {!result.ok || unrenderable ? (
44
53
  <Unrenderable
45
- qubits={circuit.qubits.length}
46
- operations={circuit.componentGrid.length}
54
+ qubits={qubits}
55
+ operations={operations}
56
+ error={errorMsg}
47
57
  />
48
58
  ) : (
49
- <ZoomableCircuit {...props} circuitGroup={circuitGroup} />
59
+ <ZoomableCircuit {...props} circuitGroup={result.circuitGroup} />
50
60
  )}
51
61
  </div>
52
62
  );
@@ -56,6 +66,7 @@ function ZoomableCircuit(props: {
56
66
  circuitGroup: qviz.CircuitGroup;
57
67
  isEditable: boolean;
58
68
  editCallback?: (fileData: qviz.CircuitGroup) => void;
69
+ runCallback?: () => void;
59
70
  }) {
60
71
  const circuitDiv = useRef<HTMLDivElement>(null);
61
72
  const [zoomLevel, setZoomLevel] = useState(100);
@@ -78,6 +89,7 @@ function ZoomableCircuit(props: {
78
89
  container,
79
90
  props.isEditable,
80
91
  props.editCallback,
92
+ props.runCallback,
81
93
  );
82
94
 
83
95
  if (!props.isEditable) {
@@ -163,8 +175,16 @@ function ZoomableCircuit(props: {
163
175
  container: HTMLDivElement,
164
176
  isEditable: boolean,
165
177
  editCallback?: (fileData: qviz.CircuitGroup) => void,
178
+ runCallback?: () => void,
166
179
  ) {
167
- qviz.draw(circuitGroup, container, 0, isEditable, editCallback);
180
+ qviz.draw(
181
+ circuitGroup,
182
+ container,
183
+ 0,
184
+ isEditable,
185
+ editCallback,
186
+ runCallback,
187
+ );
168
188
  return container.getElementsByClassName("qviz")[0]!;
169
189
  }
170
190
 
@@ -192,29 +212,49 @@ function ZoomableCircuit(props: {
192
212
  }
193
213
  }
194
214
 
195
- function Unrenderable(props: { qubits: number; operations: number }) {
196
- const errorDiv =
197
- props.qubits === 0 ? (
215
+ function Unrenderable(props: {
216
+ qubits: number;
217
+ operations: number;
218
+ error?: string;
219
+ }) {
220
+ let errorDiv = null;
221
+
222
+ if (props.error) {
223
+ errorDiv = (
224
+ <div>
225
+ <p>
226
+ <b>Unable to render circuit:</b>
227
+ </p>
228
+ <pre>{props.error}</pre>
229
+ </div>
230
+ );
231
+ } else if (props.qubits === 0) {
232
+ errorDiv = (
198
233
  <div>
199
234
  <p>No circuit to display. No qubits have been allocated.</p>
200
235
  </div>
201
- ) : props.operations > MAX_OPERATIONS ? (
202
- // Don't show the real number of operations here, as that number is
203
- // *already* truncated by the underlying circuit builder.
236
+ );
237
+ } else if (props.operations > MAX_OPERATIONS) {
238
+ // Don't show the real number of operations here, as that number is
239
+ // *already* truncated by the underlying circuit builder.
240
+ errorDiv = (
204
241
  <div>
205
242
  <p>
206
243
  This circuit has too many gates to display. The maximum supported
207
244
  number of gates is {MAX_OPERATIONS}.
208
245
  </p>
209
246
  </div>
210
- ) : props.qubits > MAX_QUBITS ? (
247
+ );
248
+ } else if (props.qubits > MAX_QUBITS) {
249
+ errorDiv = (
211
250
  <div>
212
251
  <p>
213
252
  This circuit has too many qubits to display. It has {props.qubits}{" "}
214
253
  qubits, but the maximum supported is {MAX_QUBITS}.
215
254
  </p>
216
255
  </div>
217
- ) : undefined;
256
+ );
257
+ }
218
258
 
219
259
  return <div class="qs-circuit-error">{errorDiv}</div>;
220
260
  }
@@ -288,6 +328,7 @@ export function CircuitPanel(props: CircuitProps) {
288
328
  circuit={props.circuit}
289
329
  isEditable={props.isEditable}
290
330
  editCallback={props.editCallback}
331
+ runCallback={props.runCallback}
291
332
  ></Circuit>
292
333
  ) : null}
293
334
  </div>
package/ux/data.ts CHANGED
@@ -75,6 +75,7 @@ export type CircuitProps = {
75
75
  calculating: boolean;
76
76
  isEditable: boolean;
77
77
  editCallback?: (fileData: CircuitGroup) => void;
78
+ runCallback?: () => void;
78
79
  };
79
80
 
80
81
  export type CircuitGroup = import("./circuit-vis/circuit").CircuitGroup;
@@ -327,6 +327,37 @@
327
327
  .ghost-opacity {
328
328
  opacity: 0.5;
329
329
  }
330
+
331
+ .svg-run-button-rect {
332
+ fill: var(--vscode-button-background, #007acc);
333
+ rx: 8;
334
+ filter: drop-shadow(0 2px 4px rgba(0, 0, 0, 0.15));
335
+ transition:
336
+ fill 0.2s,
337
+ filter 0.2s;
338
+ }
339
+
340
+ .svg-run-button:hover .svg-run-button-rect,
341
+ .svg-run-button:focus .svg-run-button-rect {
342
+ fill: var(--vscode-button-hoverBackground, #005a9e);
343
+ filter: drop-shadow(0 4px 8px rgba(0, 0, 0, 0.25));
344
+ }
345
+
346
+ .svg-run-button-text {
347
+ fill: var(--vscode-button-foreground, #ffffff);
348
+ font-size: 16px;
349
+ font-family: "Segoe UI", Arial, sans-serif;
350
+ font-weight: bold;
351
+ text-anchor: middle;
352
+ dominant-baseline: middle;
353
+ pointer-events: none;
354
+ letter-spacing: 1px;
355
+ user-select: none;
356
+ }
357
+
358
+ .svg-run-button {
359
+ cursor: pointer;
360
+ }
330
361
  }
331
362
 
332
363
  .context-menu {
@@ -1,20 +0,0 @@
1
- // Copyright (c) Microsoft Corporation.
2
- // Licensed under the MIT license.
3
- /**
4
- * Current format version.
5
- */
6
- export const CURRENT_VERSION = 1;
7
- /**
8
- * Conditions on when to render the given operation.
9
- */
10
- export var ConditionalRender;
11
- (function (ConditionalRender) {
12
- /** Always rendered. */
13
- ConditionalRender[ConditionalRender["Always"] = 0] = "Always";
14
- /** Render classically-controlled operation when measurement is a zero. */
15
- ConditionalRender[ConditionalRender["OnZero"] = 1] = "OnZero";
16
- /** Render classically-controlled operation when measurement is a one. */
17
- ConditionalRender[ConditionalRender["OnOne"] = 2] = "OnOne";
18
- /** Render operation as a group of its nested operations. */
19
- ConditionalRender[ConditionalRender["AsGroup"] = 3] = "AsGroup";
20
- })(ConditionalRender || (ConditionalRender = {}));
@@ -1,9 +0,0 @@
1
- import { CircuitGroup } from "./circuit.js";
2
- /**
3
- * Ensures that the given circuit object is a CircuitGroup, doing any
4
- * necessary conversions from Circuit or legacy formats.
5
- *
6
- * @param circuit The circuit to convert.
7
- * @returns The converted CircuitGroup.
8
- */
9
- export declare function toCircuitGroup(circuit: any): CircuitGroup;
@@ -1,10 +0,0 @@
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 = {}));