qsharp-lang 1.13.1-dev → 1.13.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 (330) hide show
  1. package/dist/browser.d.ts +1 -0
  2. package/dist/compiler/compiler.d.ts +3 -3
  3. package/dist/compiler/compiler.js +2 -2
  4. package/dist/debug-service/debug-service.d.ts +1 -1
  5. package/dist/katas-content.generated.js +1 -1
  6. package/dist/katas-content.generated.md.js +1 -1
  7. package/dist/shared/circuit.d.ts +64 -0
  8. package/dist/shared/circuit.js +16 -0
  9. package/dist/shared/register.d.ts +35 -0
  10. package/dist/shared/register.js +10 -0
  11. package/docs/Microsoft.Quantum.Core/Length.md +1 -1
  12. package/docs/Microsoft.Quantum.Core/Repeated.md +1 -1
  13. package/docs/Microsoft.Quantum.Core/index.md +1 -1
  14. package/docs/Std.Arithmetic/AddLE.md +1 -1
  15. package/docs/Std.Arithmetic/ApplyIfEqualL.md +1 -1
  16. package/docs/Std.Arithmetic/ApplyIfEqualLE.md +1 -1
  17. package/docs/Std.Arithmetic/ApplyIfGreaterL.md +1 -1
  18. package/docs/Std.Arithmetic/ApplyIfGreaterLE.md +1 -1
  19. package/docs/Std.Arithmetic/ApplyIfGreaterOrEqualL.md +1 -1
  20. package/docs/Std.Arithmetic/ApplyIfGreaterOrEqualLE.md +1 -1
  21. package/docs/Std.Arithmetic/ApplyIfLessL.md +1 -1
  22. package/docs/Std.Arithmetic/ApplyIfLessLE.md +1 -1
  23. package/docs/Std.Arithmetic/ApplyIfLessOrEqualL.md +1 -1
  24. package/docs/Std.Arithmetic/ApplyIfLessOrEqualLE.md +1 -1
  25. package/docs/Std.Arithmetic/FourierTDIncByLE.md +1 -1
  26. package/docs/Std.Arithmetic/IncByI.md +1 -1
  27. package/docs/Std.Arithmetic/IncByIUsingIncByLE.md +1 -1
  28. package/docs/Std.Arithmetic/IncByL.md +1 -1
  29. package/docs/Std.Arithmetic/IncByLE.md +1 -1
  30. package/docs/Std.Arithmetic/IncByLEUsingAddLE.md +1 -1
  31. package/docs/Std.Arithmetic/IncByLUsingIncByLE.md +1 -1
  32. package/docs/Std.Arithmetic/LookAheadDKRSAddLE.md +1 -1
  33. package/docs/Std.Arithmetic/MAJ.md +1 -1
  34. package/docs/Std.Arithmetic/ReflectAboutInteger.md +1 -1
  35. package/docs/Std.Arithmetic/RippleCarryCGAddLE.md +1 -1
  36. package/docs/Std.Arithmetic/RippleCarryCGIncByLE.md +1 -1
  37. package/docs/Std.Arithmetic/RippleCarryTTKIncByLE.md +1 -1
  38. package/docs/Std.Arithmetic/index.md +1 -1
  39. package/docs/Std.Arrays/All.md +1 -1
  40. package/docs/Std.Arrays/Any.md +1 -1
  41. package/docs/Std.Arrays/Chunks.md +1 -1
  42. package/docs/Std.Arrays/CircularlyShifted.md +1 -1
  43. package/docs/Std.Arrays/ColumnAt.md +1 -1
  44. package/docs/Std.Arrays/Count.md +1 -1
  45. package/docs/Std.Arrays/Diagonal.md +1 -1
  46. package/docs/Std.Arrays/DrawMany.md +1 -1
  47. package/docs/Std.Arrays/Enumerated.md +1 -1
  48. package/docs/Std.Arrays/Excluding.md +1 -1
  49. package/docs/Std.Arrays/Filtered.md +1 -1
  50. package/docs/Std.Arrays/FlatMapped.md +1 -1
  51. package/docs/Std.Arrays/Flattened.md +1 -1
  52. package/docs/Std.Arrays/Fold.md +1 -1
  53. package/docs/Std.Arrays/ForEach.md +1 -1
  54. package/docs/Std.Arrays/Head.md +1 -1
  55. package/docs/Std.Arrays/HeadAndRest.md +1 -1
  56. package/docs/Std.Arrays/IndexOf.md +1 -1
  57. package/docs/Std.Arrays/IndexRange.md +1 -1
  58. package/docs/Std.Arrays/Interleaved.md +1 -1
  59. package/docs/Std.Arrays/IsEmpty.md +1 -1
  60. package/docs/Std.Arrays/IsRectangularArray.md +1 -1
  61. package/docs/Std.Arrays/IsSorted.md +1 -1
  62. package/docs/Std.Arrays/IsSquareArray.md +1 -1
  63. package/docs/Std.Arrays/Mapped.md +1 -1
  64. package/docs/Std.Arrays/MappedByIndex.md +1 -1
  65. package/docs/Std.Arrays/MappedOverRange.md +1 -1
  66. package/docs/Std.Arrays/Most.md +1 -1
  67. package/docs/Std.Arrays/MostAndTail.md +1 -1
  68. package/docs/Std.Arrays/Padded.md +1 -1
  69. package/docs/Std.Arrays/Partitioned.md +1 -1
  70. package/docs/Std.Arrays/Rest.md +1 -1
  71. package/docs/Std.Arrays/Reversed.md +1 -1
  72. package/docs/Std.Arrays/SequenceI.md +1 -1
  73. package/docs/Std.Arrays/SequenceL.md +1 -1
  74. package/docs/Std.Arrays/Sorted.md +1 -1
  75. package/docs/Std.Arrays/Subarray.md +1 -1
  76. package/docs/Std.Arrays/Swapped.md +1 -1
  77. package/docs/Std.Arrays/Tail.md +1 -1
  78. package/docs/Std.Arrays/Transposed.md +1 -1
  79. package/docs/Std.Arrays/Unzipped.md +1 -1
  80. package/docs/Std.Arrays/Where.md +1 -1
  81. package/docs/Std.Arrays/Windows.md +1 -1
  82. package/docs/Std.Arrays/Zipped.md +1 -1
  83. package/docs/Std.Arrays/index.md +1 -1
  84. package/docs/Std.Canon/ApplyCNOTChain.md +1 -1
  85. package/docs/Std.Canon/ApplyControlledOnBitString.md +1 -1
  86. package/docs/Std.Canon/ApplyControlledOnInt.md +1 -1
  87. package/docs/Std.Canon/ApplyP.md +1 -1
  88. package/docs/Std.Canon/ApplyPauli.md +1 -1
  89. package/docs/Std.Canon/ApplyPauliFromBitString.md +1 -1
  90. package/docs/Std.Canon/ApplyPauliFromInt.md +1 -1
  91. package/docs/Std.Canon/ApplyQFT.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/Relabel.md +1 -1
  103. package/docs/Std.Canon/Snd.md +1 -1
  104. package/docs/Std.Canon/SwapReverseRegister.md +1 -1
  105. package/docs/Std.Canon/index.md +1 -1
  106. package/docs/Std.Convert/BigIntAsBoolArray.md +1 -1
  107. package/docs/Std.Convert/BoolArrayAsBigInt.md +1 -1
  108. package/docs/Std.Convert/BoolArrayAsInt.md +1 -1
  109. package/docs/Std.Convert/BoolArrayAsResultArray.md +1 -1
  110. package/docs/Std.Convert/BoolAsResult.md +1 -1
  111. package/docs/Std.Convert/ComplexAsComplexPolar.md +1 -1
  112. package/docs/Std.Convert/ComplexPolarAsComplex.md +1 -1
  113. package/docs/Std.Convert/DoubleAsStringWithPrecision.md +1 -1
  114. package/docs/Std.Convert/IntAsBigInt.md +1 -1
  115. package/docs/Std.Convert/IntAsBoolArray.md +1 -1
  116. package/docs/Std.Convert/IntAsDouble.md +1 -1
  117. package/docs/Std.Convert/ResultArrayAsBoolArray.md +1 -1
  118. package/docs/Std.Convert/ResultArrayAsInt.md +1 -1
  119. package/docs/Std.Convert/ResultAsBool.md +1 -1
  120. package/docs/Std.Convert/index.md +1 -1
  121. package/docs/Std.Core/Length.md +1 -1
  122. package/docs/Std.Core/Repeated.md +1 -1
  123. package/docs/Std.Core/index.md +1 -1
  124. package/docs/Std.Diagnostics/ApplyIdleNoise.md +1 -1
  125. package/docs/Std.Diagnostics/BitFlipNoise.md +1 -1
  126. package/docs/Std.Diagnostics/CheckAllZero.md +1 -1
  127. package/docs/Std.Diagnostics/CheckOperationsAreEqual.md +1 -1
  128. package/docs/Std.Diagnostics/CheckZero.md +1 -1
  129. package/docs/Std.Diagnostics/ConfigurePauliNoise.md +1 -1
  130. package/docs/Std.Diagnostics/DepolarizingNoise.md +1 -1
  131. package/docs/Std.Diagnostics/DumpMachine.md +1 -1
  132. package/docs/Std.Diagnostics/DumpOperation.md +1 -1
  133. package/docs/Std.Diagnostics/DumpRegister.md +1 -1
  134. package/docs/Std.Diagnostics/Fact.md +1 -1
  135. package/docs/Std.Diagnostics/NoNoise.md +1 -1
  136. package/docs/Std.Diagnostics/PhaseFlipNoise.md +1 -1
  137. package/docs/Std.Diagnostics/StartCountingFunction.md +1 -1
  138. package/docs/Std.Diagnostics/StartCountingOperation.md +1 -1
  139. package/docs/Std.Diagnostics/StartCountingQubits.md +1 -1
  140. package/docs/Std.Diagnostics/StopCountingFunction.md +1 -1
  141. package/docs/Std.Diagnostics/StopCountingOperation.md +1 -1
  142. package/docs/Std.Diagnostics/StopCountingQubits.md +1 -1
  143. package/docs/Std.Diagnostics/index.md +1 -1
  144. package/docs/Std.Intrinsic/AND.md +1 -1
  145. package/docs/Std.Intrinsic/ApplyUnitary.md +1 -1
  146. package/docs/Std.Intrinsic/CCNOT.md +1 -1
  147. package/docs/Std.Intrinsic/CNOT.md +1 -1
  148. package/docs/Std.Intrinsic/Exp.md +1 -1
  149. package/docs/Std.Intrinsic/H.md +1 -1
  150. package/docs/Std.Intrinsic/I.md +1 -1
  151. package/docs/Std.Intrinsic/M.md +1 -1
  152. package/docs/Std.Intrinsic/Measure.md +1 -1
  153. package/docs/Std.Intrinsic/Message.md +1 -1
  154. package/docs/Std.Intrinsic/R.md +1 -1
  155. package/docs/Std.Intrinsic/R1.md +1 -1
  156. package/docs/Std.Intrinsic/R1Frac.md +1 -1
  157. package/docs/Std.Intrinsic/RFrac.md +1 -1
  158. package/docs/Std.Intrinsic/Reset.md +1 -1
  159. package/docs/Std.Intrinsic/ResetAll.md +1 -1
  160. package/docs/Std.Intrinsic/Rx.md +1 -1
  161. package/docs/Std.Intrinsic/Rxx.md +1 -1
  162. package/docs/Std.Intrinsic/Ry.md +1 -1
  163. package/docs/Std.Intrinsic/Ryy.md +1 -1
  164. package/docs/Std.Intrinsic/Rz.md +1 -1
  165. package/docs/Std.Intrinsic/Rzz.md +1 -1
  166. package/docs/Std.Intrinsic/S.md +1 -1
  167. package/docs/Std.Intrinsic/SWAP.md +1 -1
  168. package/docs/Std.Intrinsic/T.md +1 -1
  169. package/docs/Std.Intrinsic/X.md +1 -1
  170. package/docs/Std.Intrinsic/Y.md +1 -1
  171. package/docs/Std.Intrinsic/Z.md +1 -1
  172. package/docs/Std.Intrinsic/index.md +1 -1
  173. package/docs/Std.Logical/Xor.md +1 -1
  174. package/docs/Std.Logical/index.md +1 -1
  175. package/docs/Std.Math/AbsComplex.md +1 -1
  176. package/docs/Std.Math/AbsComplexPolar.md +1 -1
  177. package/docs/Std.Math/AbsD.md +1 -1
  178. package/docs/Std.Math/AbsI.md +1 -1
  179. package/docs/Std.Math/AbsL.md +1 -1
  180. package/docs/Std.Math/AbsSquaredComplex.md +1 -1
  181. package/docs/Std.Math/AbsSquaredComplexPolar.md +1 -1
  182. package/docs/Std.Math/ApproximateFactorial.md +1 -1
  183. package/docs/Std.Math/ArcCos.md +1 -1
  184. package/docs/Std.Math/ArcCosh.md +1 -1
  185. package/docs/Std.Math/ArcSin.md +1 -1
  186. package/docs/Std.Math/ArcSinh.md +1 -1
  187. package/docs/Std.Math/ArcTan.md +1 -1
  188. package/docs/Std.Math/ArcTan2.md +1 -1
  189. package/docs/Std.Math/ArcTanh.md +1 -1
  190. package/docs/Std.Math/ArgComplex.md +1 -1
  191. package/docs/Std.Math/ArgComplexPolar.md +1 -1
  192. package/docs/Std.Math/Binom.md +1 -1
  193. package/docs/Std.Math/BitSizeI.md +1 -1
  194. package/docs/Std.Math/BitSizeL.md +1 -1
  195. package/docs/Std.Math/Ceiling.md +1 -1
  196. package/docs/Std.Math/Complex.md +1 -1
  197. package/docs/Std.Math/ComplexPolar.md +1 -1
  198. package/docs/Std.Math/ContinuedFractionConvergentI.md +1 -1
  199. package/docs/Std.Math/ContinuedFractionConvergentL.md +1 -1
  200. package/docs/Std.Math/Cos.md +1 -1
  201. package/docs/Std.Math/Cosh.md +1 -1
  202. package/docs/Std.Math/DivRemI.md +1 -1
  203. package/docs/Std.Math/DivRemL.md +1 -1
  204. package/docs/Std.Math/DividedByC.md +1 -1
  205. package/docs/Std.Math/DividedByCP.md +1 -1
  206. package/docs/Std.Math/E.md +1 -1
  207. package/docs/Std.Math/ExpModI.md +1 -1
  208. package/docs/Std.Math/ExpModL.md +1 -1
  209. package/docs/Std.Math/ExtendedGreatestCommonDivisorI.md +1 -1
  210. package/docs/Std.Math/ExtendedGreatestCommonDivisorL.md +1 -1
  211. package/docs/Std.Math/FactorialI.md +1 -1
  212. package/docs/Std.Math/FactorialL.md +1 -1
  213. package/docs/Std.Math/Floor.md +1 -1
  214. package/docs/Std.Math/GreatestCommonDivisorI.md +1 -1
  215. package/docs/Std.Math/GreatestCommonDivisorL.md +1 -1
  216. package/docs/Std.Math/HammingWeightI.md +1 -1
  217. package/docs/Std.Math/InverseModI.md +1 -1
  218. package/docs/Std.Math/InverseModL.md +1 -1
  219. package/docs/Std.Math/IsCoprimeI.md +1 -1
  220. package/docs/Std.Math/IsCoprimeL.md +1 -1
  221. package/docs/Std.Math/IsInfinite.md +1 -1
  222. package/docs/Std.Math/IsNaN.md +1 -1
  223. package/docs/Std.Math/LargestFixedPoint.md +1 -1
  224. package/docs/Std.Math/Lg.md +1 -1
  225. package/docs/Std.Math/Log.md +1 -1
  226. package/docs/Std.Math/Log10.md +1 -1
  227. package/docs/Std.Math/LogFactorialD.md +1 -1
  228. package/docs/Std.Math/LogGammaD.md +1 -1
  229. package/docs/Std.Math/LogOf2.md +1 -1
  230. package/docs/Std.Math/Max.md +1 -1
  231. package/docs/Std.Math/MaxD.md +1 -1
  232. package/docs/Std.Math/MaxI.md +1 -1
  233. package/docs/Std.Math/MaxL.md +1 -1
  234. package/docs/Std.Math/Min.md +1 -1
  235. package/docs/Std.Math/MinD.md +1 -1
  236. package/docs/Std.Math/MinI.md +1 -1
  237. package/docs/Std.Math/MinL.md +1 -1
  238. package/docs/Std.Math/MinusC.md +1 -1
  239. package/docs/Std.Math/MinusCP.md +1 -1
  240. package/docs/Std.Math/ModulusI.md +1 -1
  241. package/docs/Std.Math/ModulusL.md +1 -1
  242. package/docs/Std.Math/NegationC.md +1 -1
  243. package/docs/Std.Math/NegationCP.md +1 -1
  244. package/docs/Std.Math/PI.md +1 -1
  245. package/docs/Std.Math/PNorm.md +1 -1
  246. package/docs/Std.Math/PNormalized.md +1 -1
  247. package/docs/Std.Math/PlusC.md +1 -1
  248. package/docs/Std.Math/PlusCP.md +1 -1
  249. package/docs/Std.Math/PowC.md +1 -1
  250. package/docs/Std.Math/PowCP.md +1 -1
  251. package/docs/Std.Math/RealMod.md +1 -1
  252. package/docs/Std.Math/Round.md +1 -1
  253. package/docs/Std.Math/SignD.md +1 -1
  254. package/docs/Std.Math/SignI.md +1 -1
  255. package/docs/Std.Math/SignL.md +1 -1
  256. package/docs/Std.Math/Sin.md +1 -1
  257. package/docs/Std.Math/Sinh.md +1 -1
  258. package/docs/Std.Math/SmallestFixedPoint.md +1 -1
  259. package/docs/Std.Math/Sqrt.md +1 -1
  260. package/docs/Std.Math/SquaredNorm.md +1 -1
  261. package/docs/Std.Math/Tan.md +1 -1
  262. package/docs/Std.Math/Tanh.md +1 -1
  263. package/docs/Std.Math/TimesC.md +1 -1
  264. package/docs/Std.Math/TimesCP.md +1 -1
  265. package/docs/Std.Math/TrailingZeroCountI.md +1 -1
  266. package/docs/Std.Math/TrailingZeroCountL.md +1 -1
  267. package/docs/Std.Math/Truncate.md +1 -1
  268. package/docs/Std.Math/index.md +1 -1
  269. package/docs/Std.Measurement/MResetEachZ.md +1 -1
  270. package/docs/Std.Measurement/MResetX.md +1 -1
  271. package/docs/Std.Measurement/MResetY.md +1 -1
  272. package/docs/Std.Measurement/MResetZ.md +1 -1
  273. package/docs/Std.Measurement/MeasureAllZ.md +1 -1
  274. package/docs/Std.Measurement/MeasureEachZ.md +1 -1
  275. package/docs/Std.Measurement/MeasureInteger.md +1 -1
  276. package/docs/Std.Measurement/index.md +1 -1
  277. package/docs/Std.Random/DrawRandomBool.md +1 -1
  278. package/docs/Std.Random/DrawRandomDouble.md +1 -1
  279. package/docs/Std.Random/DrawRandomInt.md +1 -1
  280. package/docs/Std.Random/index.md +1 -1
  281. package/docs/Std.Range/IsRangeEmpty.md +1 -1
  282. package/docs/Std.Range/RangeEnd.md +1 -1
  283. package/docs/Std.Range/RangeReverse.md +1 -1
  284. package/docs/Std.Range/RangeStart.md +1 -1
  285. package/docs/Std.Range/RangeStep.md +1 -1
  286. package/docs/Std.Range/index.md +1 -1
  287. package/docs/Std.ResourceEstimation/AccountForEstimates.md +1 -1
  288. package/docs/Std.ResourceEstimation/AuxQubitCount.md +1 -1
  289. package/docs/Std.ResourceEstimation/BeginEstimateCaching.md +1 -1
  290. package/docs/Std.ResourceEstimation/BeginRepeatEstimates.md +1 -1
  291. package/docs/Std.ResourceEstimation/CczCount.md +1 -1
  292. package/docs/Std.ResourceEstimation/EndEstimateCaching.md +1 -1
  293. package/docs/Std.ResourceEstimation/EndRepeatEstimates.md +1 -1
  294. package/docs/Std.ResourceEstimation/MeasurementCount.md +1 -1
  295. package/docs/Std.ResourceEstimation/PSSPCLayout.md +1 -1
  296. package/docs/Std.ResourceEstimation/RepeatEstimates.md +1 -1
  297. package/docs/Std.ResourceEstimation/RotationCount.md +1 -1
  298. package/docs/Std.ResourceEstimation/RotationDepth.md +1 -1
  299. package/docs/Std.ResourceEstimation/SingleVariant.md +1 -1
  300. package/docs/Std.ResourceEstimation/TCount.md +1 -1
  301. package/docs/Std.ResourceEstimation/index.md +1 -1
  302. package/docs/Std.StatePreparation/ApproximatelyPreparePureStateCP.md +1 -1
  303. package/docs/Std.StatePreparation/PreparePureStateD.md +1 -1
  304. package/docs/Std.StatePreparation/index.md +1 -1
  305. package/docs/Std.TableLookup/Select.md +1 -1
  306. package/docs/Std.TableLookup/index.md +1 -1
  307. package/docs/index.md +1 -1
  308. package/lib/node/qsc_wasm.cjs +17 -14
  309. package/lib/node/qsc_wasm.d.cts +3 -6
  310. package/lib/node/qsc_wasm_bg.wasm +0 -0
  311. package/lib/web/qsc_wasm.d.ts +4 -7
  312. package/lib/web/qsc_wasm.js +17 -14
  313. package/lib/web/qsc_wasm_bg.wasm +0 -0
  314. package/package.json +1 -1
  315. package/ux/circuit-vis/README.md +1 -0
  316. package/ux/circuit-vis/circuit.ts +10 -0
  317. package/ux/circuit-vis/constants.ts +39 -0
  318. package/ux/circuit-vis/formatters/formatUtils.ts +220 -0
  319. package/ux/circuit-vis/formatters/gateFormatter.ts +557 -0
  320. package/ux/circuit-vis/formatters/inputFormatter.ts +78 -0
  321. package/ux/circuit-vis/formatters/registerFormatter.ts +118 -0
  322. package/ux/circuit-vis/index.ts +30 -0
  323. package/ux/circuit-vis/metadata.ts +56 -0
  324. package/ux/circuit-vis/process.ts +536 -0
  325. package/ux/circuit-vis/register.ts +9 -0
  326. package/ux/circuit-vis/sqore.ts +376 -0
  327. package/ux/circuit-vis/styles.ts +236 -0
  328. package/ux/circuit-vis/utils.ts +77 -0
  329. package/ux/circuit.tsx +2 -2
  330. package/ux/data.ts +1 -1
@@ -0,0 +1,118 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+
4
+ import { RegisterMap } from "../register";
5
+ import { regLineStart } from "../constants";
6
+ import { Metadata, GateType } from "../metadata";
7
+ import { group, line, text } from "./formatUtils";
8
+
9
+ /**
10
+ * Generate the SVG representation of the qubit register wires in `registers` and the classical wires
11
+ * stemming from each measurement gate.
12
+ *
13
+ * @param registers Map from register IDs to register metadata.
14
+ * @param measureGates Array of measurement gates metadata.
15
+ * @param endX End x coord.
16
+ *
17
+ * @returns SVG representation of register wires.
18
+ */
19
+ const formatRegisters = (
20
+ registers: RegisterMap,
21
+ measureGates: Metadata[],
22
+ endX: number,
23
+ ): SVGElement => {
24
+ const formattedRegs: SVGElement[] = [];
25
+ // Render qubit wires
26
+ for (const qId in registers) {
27
+ formattedRegs.push(_qubitRegister(Number(qId), endX, registers[qId].y));
28
+ }
29
+ // Render classical wires
30
+ measureGates.forEach(({ type, x, targetsY, controlsY }) => {
31
+ if (type !== GateType.Measure) return;
32
+ const gateY: number = controlsY[0];
33
+ (targetsY as number[]).forEach((y) => {
34
+ formattedRegs.push(_classicalRegister(x, gateY, endX, y));
35
+ });
36
+ });
37
+ return group(formattedRegs);
38
+ };
39
+
40
+ /**
41
+ * Generates the SVG representation of a classical register.
42
+ *
43
+ * @param startX Start x coord.
44
+ * @param gateY y coord of measurement gate.
45
+ * @param endX End x coord.
46
+ * @param wireY y coord of wire.
47
+ *
48
+ * @returns SVG representation of the given classical register.
49
+ */
50
+ const _classicalRegister = (
51
+ startX: number,
52
+ gateY: number,
53
+ endX: number,
54
+ wireY: number,
55
+ ): SVGElement => {
56
+ const wirePadding = 1;
57
+ // Draw vertical lines
58
+ const vLine1: SVGElement = line(
59
+ startX + wirePadding,
60
+ gateY,
61
+ startX + wirePadding,
62
+ wireY - wirePadding,
63
+ "register-classical",
64
+ );
65
+ const vLine2: SVGElement = line(
66
+ startX - wirePadding,
67
+ gateY,
68
+ startX - wirePadding,
69
+ wireY + wirePadding,
70
+ "register-classical",
71
+ );
72
+
73
+ // Draw horizontal lines
74
+ const hLine1: SVGElement = line(
75
+ startX + wirePadding,
76
+ wireY - wirePadding,
77
+ endX,
78
+ wireY - wirePadding,
79
+ "register-classical",
80
+ );
81
+ const hLine2: SVGElement = line(
82
+ startX - wirePadding,
83
+ wireY + wirePadding,
84
+ endX,
85
+ wireY + wirePadding,
86
+ "register-classical",
87
+ );
88
+
89
+ return group([vLine1, vLine2, hLine1, hLine2]);
90
+ };
91
+
92
+ /**
93
+ * Generates the SVG representation of a qubit register.
94
+ *
95
+ * @param qId Qubit register index.
96
+ * @param endX End x coord.
97
+ * @param y y coord of wire.
98
+ * @param labelOffset y offset for wire label.
99
+ *
100
+ * @returns SVG representation of the given qubit register.
101
+ */
102
+ const _qubitRegister = (
103
+ qId: number,
104
+ endX: number,
105
+ y: number,
106
+ labelOffset = 16,
107
+ ): SVGElement => {
108
+ const wire: SVGElement = line(regLineStart, y, endX, y);
109
+
110
+ const label: SVGElement = text(`q${qId}`, regLineStart, y - labelOffset);
111
+ label.setAttribute("dominant-baseline", "hanging");
112
+ label.setAttribute("text-anchor", "start");
113
+ label.setAttribute("font-size", "75%");
114
+
115
+ return group([wire, label]);
116
+ };
117
+
118
+ export { formatRegisters, _classicalRegister, _qubitRegister };
@@ -0,0 +1,30 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+
4
+ import { Sqore } from "./sqore";
5
+ import { Circuit } from "./circuit";
6
+ import { StyleConfig } from "./styles";
7
+
8
+ /**
9
+ * Render `circuit` into `container` at the specified layer depth.
10
+ *
11
+ * @param circuit Circuit to be visualized.
12
+ * @param container HTML element for rendering visualization into.
13
+ * @param style Custom visualization style.
14
+ * @param renderDepth Initial layer depth at which to render gates.
15
+ */
16
+ export const draw = (
17
+ circuit: Circuit,
18
+ container: HTMLElement,
19
+ style: StyleConfig | string = {},
20
+ renderDepth = 0,
21
+ ): void => {
22
+ const sqore = new Sqore(circuit, style);
23
+ sqore.draw(container, renderDepth);
24
+ };
25
+
26
+ export { STYLES } from "./styles";
27
+
28
+ // Export types
29
+ export type { StyleConfig } from "./styles";
30
+ export type { Circuit, Qubit, Operation } from "./circuit";
@@ -0,0 +1,56 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT license.
3
+
4
+ import { DataAttributes } from "./circuit";
5
+
6
+ /**
7
+ * Enum for the various gate operations handled.
8
+ */
9
+ export enum GateType {
10
+ /** Measurement gate. */
11
+ Measure,
12
+ /** CNOT gate. */
13
+ Cnot,
14
+ /** SWAP gate. */
15
+ Swap,
16
+ /** X gate. */
17
+ X,
18
+ /** Single/multi qubit unitary gate. */
19
+ Unitary,
20
+ /** Single/multi controlled unitary gate. */
21
+ ControlledUnitary,
22
+ /** Nested group of classically-controlled gates. */
23
+ ClassicalControlled,
24
+ /** Group of nested gates */
25
+ Group,
26
+ /** Invalid gate. */
27
+ Invalid,
28
+ }
29
+
30
+ /**
31
+ * Metadata used to store information pertaining to a given
32
+ * operation for rendering its corresponding SVG.
33
+ */
34
+ export interface Metadata {
35
+ /** Gate type. */
36
+ type: GateType;
37
+ /** Centre x coord for gate position. */
38
+ x: number;
39
+ /** Array of y coords of control registers. */
40
+ controlsY: number[];
41
+ /** Array of y coords of target registers.
42
+ * For `GateType.Unitary` or `GateType.ControlledUnitary`, this is an array of groups of
43
+ * y coords, where each group represents a unitary box to be rendered separately.
44
+ */
45
+ targetsY: (number | number[])[];
46
+ /** Gate label. */
47
+ label: string;
48
+ /** Gate arguments as string. */
49
+ displayArgs?: string;
50
+ /** Gate width. */
51
+ width: number;
52
+ /** Children operations as part of group. */
53
+ children?: (Metadata | Metadata[])[];
54
+ /** Custom data attributes to attach to gate element. */
55
+ dataAttributes?: DataAttributes;
56
+ }