qsharp-lang 1.26.2-dev → 1.26.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 (337) hide show
  1. package/dist/data-structures/circuit.d.ts +0 -15
  2. package/dist/data-structures/circuit.js +1 -19
  3. package/dist/katas-content.generated.js +1 -1
  4. package/dist/katas-content.generated.md.js +1 -1
  5. package/dist/samples.generated.js +4 -4
  6. package/docs/Microsoft.Quantum.Core/IsRangeEmpty.md +1 -1
  7. package/docs/Microsoft.Quantum.Core/Length.md +1 -1
  8. package/docs/Microsoft.Quantum.Core/RangeEnd.md +1 -1
  9. package/docs/Microsoft.Quantum.Core/RangeStart.md +1 -1
  10. package/docs/Microsoft.Quantum.Core/Repeated.md +1 -1
  11. package/docs/Microsoft.Quantum.Core/index.md +1 -1
  12. package/docs/Std.Arithmetic/AddLE.md +1 -1
  13. package/docs/Std.Arithmetic/ApplyIfEqualL.md +1 -1
  14. package/docs/Std.Arithmetic/ApplyIfEqualLE.md +1 -1
  15. package/docs/Std.Arithmetic/ApplyIfGreaterL.md +1 -1
  16. package/docs/Std.Arithmetic/ApplyIfGreaterLE.md +1 -1
  17. package/docs/Std.Arithmetic/ApplyIfGreaterOrEqualL.md +1 -1
  18. package/docs/Std.Arithmetic/ApplyIfGreaterOrEqualLE.md +1 -1
  19. package/docs/Std.Arithmetic/ApplyIfLessL.md +1 -1
  20. package/docs/Std.Arithmetic/ApplyIfLessLE.md +1 -1
  21. package/docs/Std.Arithmetic/ApplyIfLessOrEqualL.md +1 -1
  22. package/docs/Std.Arithmetic/ApplyIfLessOrEqualLE.md +1 -1
  23. package/docs/Std.Arithmetic/FourierTDIncByLE.md +1 -1
  24. package/docs/Std.Arithmetic/IncByI.md +1 -1
  25. package/docs/Std.Arithmetic/IncByIUsingIncByLE.md +1 -1
  26. package/docs/Std.Arithmetic/IncByL.md +1 -1
  27. package/docs/Std.Arithmetic/IncByLE.md +1 -1
  28. package/docs/Std.Arithmetic/IncByLEUsingAddLE.md +1 -1
  29. package/docs/Std.Arithmetic/IncByLUsingIncByLE.md +1 -1
  30. package/docs/Std.Arithmetic/LookAheadDKRSAddLE.md +1 -1
  31. package/docs/Std.Arithmetic/MAJ.md +1 -1
  32. package/docs/Std.Arithmetic/ReflectAboutInteger.md +1 -1
  33. package/docs/Std.Arithmetic/RippleCarryCGAddLE.md +1 -1
  34. package/docs/Std.Arithmetic/RippleCarryCGIncByLE.md +1 -1
  35. package/docs/Std.Arithmetic/RippleCarryTTKIncByLE.md +1 -1
  36. package/docs/Std.Arithmetic/index.md +1 -1
  37. package/docs/Std.Arrays/All.md +1 -1
  38. package/docs/Std.Arrays/Any.md +1 -1
  39. package/docs/Std.Arrays/Chunks.md +1 -1
  40. package/docs/Std.Arrays/CircularlyShifted.md +1 -1
  41. package/docs/Std.Arrays/ColumnAt.md +1 -1
  42. package/docs/Std.Arrays/Count.md +1 -1
  43. package/docs/Std.Arrays/Diagonal.md +1 -1
  44. package/docs/Std.Arrays/DrawMany.md +1 -1
  45. package/docs/Std.Arrays/Enumerated.md +1 -1
  46. package/docs/Std.Arrays/Excluding.md +1 -1
  47. package/docs/Std.Arrays/Filtered.md +1 -1
  48. package/docs/Std.Arrays/FlatMapped.md +1 -1
  49. package/docs/Std.Arrays/Flattened.md +1 -1
  50. package/docs/Std.Arrays/Fold.md +1 -1
  51. package/docs/Std.Arrays/ForEach.md +1 -1
  52. package/docs/Std.Arrays/Head.md +1 -1
  53. package/docs/Std.Arrays/HeadAndRest.md +1 -1
  54. package/docs/Std.Arrays/IndexOf.md +1 -1
  55. package/docs/Std.Arrays/IndexRange.md +1 -1
  56. package/docs/Std.Arrays/Interleaved.md +1 -1
  57. package/docs/Std.Arrays/IsEmpty.md +1 -1
  58. package/docs/Std.Arrays/IsRectangularArray.md +1 -1
  59. package/docs/Std.Arrays/IsSorted.md +1 -1
  60. package/docs/Std.Arrays/IsSquareArray.md +1 -1
  61. package/docs/Std.Arrays/Mapped.md +1 -1
  62. package/docs/Std.Arrays/MappedByIndex.md +1 -1
  63. package/docs/Std.Arrays/MappedOverRange.md +1 -1
  64. package/docs/Std.Arrays/Most.md +1 -1
  65. package/docs/Std.Arrays/MostAndTail.md +1 -1
  66. package/docs/Std.Arrays/Padded.md +1 -1
  67. package/docs/Std.Arrays/Partitioned.md +1 -1
  68. package/docs/Std.Arrays/Rest.md +1 -1
  69. package/docs/Std.Arrays/Reversed.md +1 -1
  70. package/docs/Std.Arrays/SequenceI.md +1 -1
  71. package/docs/Std.Arrays/SequenceL.md +1 -1
  72. package/docs/Std.Arrays/Sorted.md +1 -1
  73. package/docs/Std.Arrays/Subarray.md +1 -1
  74. package/docs/Std.Arrays/Swapped.md +1 -1
  75. package/docs/Std.Arrays/Tail.md +1 -1
  76. package/docs/Std.Arrays/Transposed.md +1 -1
  77. package/docs/Std.Arrays/Unzipped.md +1 -1
  78. package/docs/Std.Arrays/Where.md +1 -1
  79. package/docs/Std.Arrays/Windows.md +1 -1
  80. package/docs/Std.Arrays/Zipped.md +1 -1
  81. package/docs/Std.Arrays/index.md +1 -1
  82. package/docs/Std.Canon/ApplyCNOTChain.md +1 -1
  83. package/docs/Std.Canon/ApplyControlledOnBitString.md +1 -1
  84. package/docs/Std.Canon/ApplyControlledOnInt.md +1 -1
  85. package/docs/Std.Canon/ApplyOperationPowerA.md +1 -1
  86. package/docs/Std.Canon/ApplyOperationPowerCA.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/ApplyQPE.md +1 -1
  93. package/docs/Std.Canon/ApplyToEach.md +1 -1
  94. package/docs/Std.Canon/ApplyToEachA.md +1 -1
  95. package/docs/Std.Canon/ApplyToEachC.md +1 -1
  96. package/docs/Std.Canon/ApplyToEachCA.md +1 -1
  97. package/docs/Std.Canon/ApplyXorInPlace.md +1 -1
  98. package/docs/Std.Canon/ApplyXorInPlaceL.md +1 -1
  99. package/docs/Std.Canon/CX.md +1 -1
  100. package/docs/Std.Canon/CY.md +1 -1
  101. package/docs/Std.Canon/CZ.md +1 -1
  102. package/docs/Std.Canon/Fst.md +1 -1
  103. package/docs/Std.Canon/MapPauliAxis.md +1 -1
  104. package/docs/Std.Canon/Relabel.md +1 -1
  105. package/docs/Std.Canon/Snd.md +1 -1
  106. package/docs/Std.Canon/SwapReverseRegister.md +1 -1
  107. package/docs/Std.Canon/index.md +1 -1
  108. package/docs/Std.Convert/BigIntAsBoolArray.md +1 -1
  109. package/docs/Std.Convert/BigIntAsInt.md +1 -1
  110. package/docs/Std.Convert/BoolArrayAsBigInt.md +1 -1
  111. package/docs/Std.Convert/BoolArrayAsInt.md +1 -1
  112. package/docs/Std.Convert/BoolArrayAsResultArray.md +1 -1
  113. package/docs/Std.Convert/BoolAsResult.md +1 -1
  114. package/docs/Std.Convert/ComplexAsComplexPolar.md +1 -1
  115. package/docs/Std.Convert/ComplexPolarAsComplex.md +1 -1
  116. package/docs/Std.Convert/DoubleAsStringWithPrecision.md +1 -1
  117. package/docs/Std.Convert/IntAsBigInt.md +1 -1
  118. package/docs/Std.Convert/IntAsBoolArray.md +1 -1
  119. package/docs/Std.Convert/IntAsDouble.md +1 -1
  120. package/docs/Std.Convert/ResultArrayAsBoolArray.md +1 -1
  121. package/docs/Std.Convert/ResultArrayAsInt.md +1 -1
  122. package/docs/Std.Convert/ResultAsBool.md +1 -1
  123. package/docs/Std.Convert/index.md +1 -1
  124. package/docs/Std.Core/Complex.md +1 -1
  125. package/docs/Std.Core/Length.md +1 -1
  126. package/docs/Std.Core/Repeated.md +1 -1
  127. package/docs/Std.Core/index.md +1 -1
  128. package/docs/Std.Diagnostics/ApplyIdleNoise.md +1 -1
  129. package/docs/Std.Diagnostics/BitFlipNoise.md +1 -1
  130. package/docs/Std.Diagnostics/CheckAllZero.md +1 -1
  131. package/docs/Std.Diagnostics/CheckOperationsAreEqual.md +1 -1
  132. package/docs/Std.Diagnostics/CheckZero.md +1 -1
  133. package/docs/Std.Diagnostics/ConfigurePauliNoise.md +1 -1
  134. package/docs/Std.Diagnostics/ConfigureQubitLoss.md +1 -1
  135. package/docs/Std.Diagnostics/DepolarizingNoise.md +1 -1
  136. package/docs/Std.Diagnostics/DumpMachine.md +1 -1
  137. package/docs/Std.Diagnostics/DumpOperation.md +1 -1
  138. package/docs/Std.Diagnostics/DumpRegister.md +1 -1
  139. package/docs/Std.Diagnostics/Fact.md +1 -1
  140. package/docs/Std.Diagnostics/NoNoise.md +1 -1
  141. package/docs/Std.Diagnostics/PhaseFlipNoise.md +1 -1
  142. package/docs/Std.Diagnostics/PostSelectZ.md +40 -0
  143. package/docs/Std.Diagnostics/StartCountingFunction.md +1 -1
  144. package/docs/Std.Diagnostics/StartCountingOperation.md +1 -1
  145. package/docs/Std.Diagnostics/StartCountingQubits.md +1 -1
  146. package/docs/Std.Diagnostics/StopCountingFunction.md +1 -1
  147. package/docs/Std.Diagnostics/StopCountingOperation.md +1 -1
  148. package/docs/Std.Diagnostics/StopCountingQubits.md +1 -1
  149. package/docs/Std.Diagnostics/index.md +2 -1
  150. package/docs/Std.Intrinsic/AND.md +1 -1
  151. package/docs/Std.Intrinsic/ApplyUnitary.md +1 -1
  152. package/docs/Std.Intrinsic/CCNOT.md +1 -1
  153. package/docs/Std.Intrinsic/CNOT.md +1 -1
  154. package/docs/Std.Intrinsic/Exp.md +1 -1
  155. package/docs/Std.Intrinsic/H.md +1 -1
  156. package/docs/Std.Intrinsic/I.md +1 -1
  157. package/docs/Std.Intrinsic/M.md +1 -1
  158. package/docs/Std.Intrinsic/Measure.md +1 -1
  159. package/docs/Std.Intrinsic/Message.md +1 -1
  160. package/docs/Std.Intrinsic/R.md +1 -1
  161. package/docs/Std.Intrinsic/R1.md +1 -1
  162. package/docs/Std.Intrinsic/R1Frac.md +1 -1
  163. package/docs/Std.Intrinsic/RFrac.md +1 -1
  164. package/docs/Std.Intrinsic/Reset.md +1 -1
  165. package/docs/Std.Intrinsic/ResetAll.md +1 -1
  166. package/docs/Std.Intrinsic/Rx.md +1 -1
  167. package/docs/Std.Intrinsic/Rxx.md +1 -1
  168. package/docs/Std.Intrinsic/Ry.md +1 -1
  169. package/docs/Std.Intrinsic/Ryy.md +1 -1
  170. package/docs/Std.Intrinsic/Rz.md +1 -1
  171. package/docs/Std.Intrinsic/Rzz.md +1 -1
  172. package/docs/Std.Intrinsic/S.md +1 -1
  173. package/docs/Std.Intrinsic/SWAP.md +1 -1
  174. package/docs/Std.Intrinsic/SX.md +1 -1
  175. package/docs/Std.Intrinsic/T.md +1 -1
  176. package/docs/Std.Intrinsic/X.md +1 -1
  177. package/docs/Std.Intrinsic/Y.md +1 -1
  178. package/docs/Std.Intrinsic/Z.md +1 -1
  179. package/docs/Std.Intrinsic/index.md +1 -1
  180. package/docs/Std.Logical/Xor.md +1 -1
  181. package/docs/Std.Logical/index.md +1 -1
  182. package/docs/Std.Math/AbsComplex.md +1 -1
  183. package/docs/Std.Math/AbsComplexPolar.md +1 -1
  184. package/docs/Std.Math/AbsD.md +1 -1
  185. package/docs/Std.Math/AbsI.md +1 -1
  186. package/docs/Std.Math/AbsL.md +1 -1
  187. package/docs/Std.Math/AbsSquaredComplex.md +1 -1
  188. package/docs/Std.Math/AbsSquaredComplexPolar.md +1 -1
  189. package/docs/Std.Math/ApproximateFactorial.md +1 -1
  190. package/docs/Std.Math/ArcCos.md +1 -1
  191. package/docs/Std.Math/ArcCosh.md +1 -1
  192. package/docs/Std.Math/ArcSin.md +1 -1
  193. package/docs/Std.Math/ArcSinh.md +1 -1
  194. package/docs/Std.Math/ArcTan.md +1 -1
  195. package/docs/Std.Math/ArcTan2.md +1 -1
  196. package/docs/Std.Math/ArcTanh.md +1 -1
  197. package/docs/Std.Math/ArgComplex.md +1 -1
  198. package/docs/Std.Math/ArgComplexPolar.md +1 -1
  199. package/docs/Std.Math/Binom.md +1 -1
  200. package/docs/Std.Math/BitSizeI.md +1 -1
  201. package/docs/Std.Math/BitSizeL.md +1 -1
  202. package/docs/Std.Math/Ceiling.md +1 -1
  203. package/docs/Std.Math/Complex.md +1 -1
  204. package/docs/Std.Math/ComplexPolar.md +1 -1
  205. package/docs/Std.Math/ContinuedFractionConvergentI.md +1 -1
  206. package/docs/Std.Math/ContinuedFractionConvergentL.md +1 -1
  207. package/docs/Std.Math/Cos.md +1 -1
  208. package/docs/Std.Math/Cosh.md +1 -1
  209. package/docs/Std.Math/DivRemI.md +1 -1
  210. package/docs/Std.Math/DivRemL.md +1 -1
  211. package/docs/Std.Math/DividedByC.md +1 -1
  212. package/docs/Std.Math/DividedByCP.md +1 -1
  213. package/docs/Std.Math/E.md +1 -1
  214. package/docs/Std.Math/ExpModI.md +1 -1
  215. package/docs/Std.Math/ExpModL.md +1 -1
  216. package/docs/Std.Math/ExtendedGreatestCommonDivisorI.md +1 -1
  217. package/docs/Std.Math/ExtendedGreatestCommonDivisorL.md +1 -1
  218. package/docs/Std.Math/FactorialI.md +1 -1
  219. package/docs/Std.Math/FactorialL.md +1 -1
  220. package/docs/Std.Math/Floor.md +1 -1
  221. package/docs/Std.Math/GreatestCommonDivisorI.md +1 -1
  222. package/docs/Std.Math/GreatestCommonDivisorL.md +1 -1
  223. package/docs/Std.Math/HammingWeightI.md +1 -1
  224. package/docs/Std.Math/InverseModI.md +1 -1
  225. package/docs/Std.Math/InverseModL.md +1 -1
  226. package/docs/Std.Math/IsCoprimeI.md +1 -1
  227. package/docs/Std.Math/IsCoprimeL.md +1 -1
  228. package/docs/Std.Math/IsInfinite.md +1 -1
  229. package/docs/Std.Math/IsNaN.md +1 -1
  230. package/docs/Std.Math/LargestFixedPoint.md +1 -1
  231. package/docs/Std.Math/Lg.md +1 -1
  232. package/docs/Std.Math/Log.md +1 -1
  233. package/docs/Std.Math/Log10.md +1 -1
  234. package/docs/Std.Math/LogFactorialD.md +1 -1
  235. package/docs/Std.Math/LogGammaD.md +1 -1
  236. package/docs/Std.Math/LogOf2.md +1 -1
  237. package/docs/Std.Math/Max.md +1 -1
  238. package/docs/Std.Math/MaxD.md +1 -1
  239. package/docs/Std.Math/MaxI.md +1 -1
  240. package/docs/Std.Math/MaxL.md +1 -1
  241. package/docs/Std.Math/Min.md +1 -1
  242. package/docs/Std.Math/MinD.md +1 -1
  243. package/docs/Std.Math/MinI.md +1 -1
  244. package/docs/Std.Math/MinL.md +1 -1
  245. package/docs/Std.Math/MinusC.md +1 -1
  246. package/docs/Std.Math/MinusCP.md +1 -1
  247. package/docs/Std.Math/ModulusI.md +1 -1
  248. package/docs/Std.Math/ModulusL.md +1 -1
  249. package/docs/Std.Math/NegationC.md +1 -1
  250. package/docs/Std.Math/NegationCP.md +1 -1
  251. package/docs/Std.Math/PI.md +1 -1
  252. package/docs/Std.Math/PNorm.md +1 -1
  253. package/docs/Std.Math/PNormalized.md +1 -1
  254. package/docs/Std.Math/PlusC.md +1 -1
  255. package/docs/Std.Math/PlusCP.md +1 -1
  256. package/docs/Std.Math/PowC.md +1 -1
  257. package/docs/Std.Math/PowCP.md +1 -1
  258. package/docs/Std.Math/RealMod.md +1 -1
  259. package/docs/Std.Math/Round.md +1 -1
  260. package/docs/Std.Math/RoundHalfAwayFromZero.md +1 -1
  261. package/docs/Std.Math/SignD.md +1 -1
  262. package/docs/Std.Math/SignI.md +1 -1
  263. package/docs/Std.Math/SignL.md +1 -1
  264. package/docs/Std.Math/Sin.md +1 -1
  265. package/docs/Std.Math/Sinh.md +1 -1
  266. package/docs/Std.Math/SmallestFixedPoint.md +1 -1
  267. package/docs/Std.Math/Sqrt.md +1 -1
  268. package/docs/Std.Math/SquaredNorm.md +1 -1
  269. package/docs/Std.Math/Tan.md +1 -1
  270. package/docs/Std.Math/Tanh.md +1 -1
  271. package/docs/Std.Math/TimesC.md +1 -1
  272. package/docs/Std.Math/TimesCP.md +1 -1
  273. package/docs/Std.Math/TrailingZeroCountI.md +1 -1
  274. package/docs/Std.Math/TrailingZeroCountL.md +1 -1
  275. package/docs/Std.Math/Truncate.md +1 -1
  276. package/docs/Std.Math/index.md +1 -1
  277. package/docs/Std.Measurement/IsLossResult.md +1 -1
  278. package/docs/Std.Measurement/MResetEachZ.md +1 -1
  279. package/docs/Std.Measurement/MResetX.md +1 -1
  280. package/docs/Std.Measurement/MResetY.md +1 -1
  281. package/docs/Std.Measurement/MResetZ.md +1 -1
  282. package/docs/Std.Measurement/MResetZChecked.md +1 -1
  283. package/docs/Std.Measurement/MeasureAllZ.md +1 -1
  284. package/docs/Std.Measurement/MeasureEachZ.md +1 -1
  285. package/docs/Std.Measurement/MeasureInteger.md +1 -1
  286. package/docs/Std.Measurement/index.md +1 -1
  287. package/docs/Std.Random/DrawRandomBool.md +1 -1
  288. package/docs/Std.Random/DrawRandomDouble.md +1 -1
  289. package/docs/Std.Random/DrawRandomInt.md +1 -1
  290. package/docs/Std.Random/index.md +1 -1
  291. package/docs/Std.Range/IsRangeEmpty.md +1 -1
  292. package/docs/Std.Range/RangeEnd.md +1 -1
  293. package/docs/Std.Range/RangeReverse.md +1 -1
  294. package/docs/Std.Range/RangeStart.md +1 -1
  295. package/docs/Std.Range/RangeStep.md +1 -1
  296. package/docs/Std.Range/index.md +1 -1
  297. package/docs/Std.ResourceEstimation/AccountForEstimates.md +1 -1
  298. package/docs/Std.ResourceEstimation/AuxQubitCount.md +1 -1
  299. package/docs/Std.ResourceEstimation/BeginEstimateCaching.md +1 -1
  300. package/docs/Std.ResourceEstimation/BeginRepeatEstimates.md +1 -1
  301. package/docs/Std.ResourceEstimation/CczCount.md +1 -1
  302. package/docs/Std.ResourceEstimation/EnableMemoryComputeArchitecture.md +1 -1
  303. package/docs/Std.ResourceEstimation/EndEstimateCaching.md +1 -1
  304. package/docs/Std.ResourceEstimation/EndRepeatEstimates.md +1 -1
  305. package/docs/Std.ResourceEstimation/LeastFrequentlyUsed.md +1 -1
  306. package/docs/Std.ResourceEstimation/LeastRecentlyUsed.md +1 -1
  307. package/docs/Std.ResourceEstimation/MeasurementCount.md +1 -1
  308. package/docs/Std.ResourceEstimation/PSSPCLayout.md +1 -1
  309. package/docs/Std.ResourceEstimation/RepeatEstimates.md +1 -1
  310. package/docs/Std.ResourceEstimation/RotationCount.md +1 -1
  311. package/docs/Std.ResourceEstimation/RotationDepth.md +1 -1
  312. package/docs/Std.ResourceEstimation/SingleVariant.md +1 -1
  313. package/docs/Std.ResourceEstimation/TCount.md +1 -1
  314. package/docs/Std.ResourceEstimation/index.md +1 -1
  315. package/docs/Std.StatePreparation/ApproximatelyPreparePureStateCP.md +1 -1
  316. package/docs/Std.StatePreparation/PreparePureStateD.md +1 -1
  317. package/docs/Std.StatePreparation/PrepareUniformSuperposition.md +1 -1
  318. package/docs/Std.StatePreparation/index.md +1 -1
  319. package/docs/Std.TableLookup/Select.md +1 -1
  320. package/docs/Std.TableLookup/index.md +1 -1
  321. package/docs/index.md +1 -1
  322. package/docs/toc.yml +1 -0
  323. package/lib/nodejs/qsc_wasm.cjs +1318 -1392
  324. package/lib/nodejs/qsc_wasm.d.cts +313 -290
  325. package/lib/nodejs/qsc_wasm_bg.wasm +0 -0
  326. package/lib/web/qsc_wasm.d.ts +388 -364
  327. package/lib/web/qsc_wasm.js +1346 -1346
  328. package/lib/web/qsc_wasm_bg.wasm +0 -0
  329. package/package.json +1 -1
  330. package/ux/circuit-vis/circuit.ts +0 -1
  331. package/ux/circuit-vis/formatters/gateFormatter.ts +111 -86
  332. package/ux/circuit-vis/formatters/registerFormatter.ts +2 -5
  333. package/ux/circuit-vis/gateRenderData.ts +10 -3
  334. package/ux/circuit-vis/panel.ts +1 -0
  335. package/ux/circuit-vis/process.ts +162 -57
  336. package/ux/circuit-vis/sqore.ts +34 -28
  337. package/ux/circuit-vis/utils.ts +2 -1
Binary file
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "qsharp-lang",
3
3
  "description": "qsharp language package for quantum development",
4
- "version": "1.26.2-dev",
4
+ "version": "1.26.3-dev",
5
5
  "license": "MIT",
6
6
  "engines": {
7
7
  "node": ">=16.17.0"
@@ -2,7 +2,6 @@
2
2
  // Licensed under the MIT License.
3
3
 
4
4
  export {
5
- ConditionalRender,
6
5
  type CircuitGroup,
7
6
  type Circuit,
8
7
  type ComponentGrid,
@@ -9,7 +9,6 @@ import {
9
9
  argsFontSize,
10
10
  controlCircleRadius,
11
11
  controlCircleOffset,
12
- groupPaddingX,
13
12
  groupTopPadding,
14
13
  labelPaddingX,
15
14
  groupLabelPaddingY,
@@ -58,11 +57,26 @@ const formatGate = (renderData: GateRenderData): SVGElement => {
58
57
  switch (type) {
59
58
  case GateType.Measure:
60
59
  return _createGate([_measure(x, controlsY[0], controlsY)], renderData);
61
- case GateType.Unitary:
60
+ case GateType.Unitary: {
61
+ let bodyWidth = width;
62
+ let bodyX = x;
63
+ if (renderData.classicalControlIds != null) {
64
+ bodyWidth = width - controlCircleOffset;
65
+ bodyX = x + controlCircleOffset / 2;
66
+ }
62
67
  return _createGate(
63
- [_unitary(label, x, targetsY as number[][], width, displayArgs)],
68
+ [
69
+ _unitary(
70
+ label,
71
+ bodyX,
72
+ targetsY as number[][],
73
+ bodyWidth,
74
+ displayArgs,
75
+ ),
76
+ ],
64
77
  renderData,
65
78
  );
79
+ }
66
80
  case GateType.X:
67
81
  return _createGate([_x(renderData)], renderData);
68
82
  case GateType.Ket:
@@ -76,8 +90,6 @@ const formatGate = (renderData: GateRenderData): SVGElement => {
76
90
  return _controlledGate(renderData);
77
91
  case GateType.Group:
78
92
  return _groupedOperations(renderData);
79
- case GateType.ClassicalControlled:
80
- return _classicalControlled(renderData);
81
93
  default:
82
94
  throw new Error(`ERROR: unknown gate (${label}) of type ${type}.`);
83
95
  }
@@ -97,27 +109,38 @@ const _createGate = (
97
109
  renderData: GateRenderData,
98
110
  ): SVGElement => {
99
111
  const { dataAttributes } = renderData || {};
112
+ const expanded = renderData.isExpanded;
100
113
  const attributes: { [attr: string]: string } = { class: "gate" };
101
114
  Object.entries(dataAttributes || {}).forEach(
102
115
  ([attr, val]) => (attributes[`data-${attr}`] = val),
103
116
  );
104
117
 
118
+ const hasClassicalControls =
119
+ renderData.classicalControlIds != null && renderData.controlsY.length > 0;
120
+ const classicalControlElems: SVGElement[] = hasClassicalControls
121
+ ? _classicalControls(_gateBoundingBox(renderData).x, renderData)
122
+ : [];
123
+
105
124
  // If there's a source location, wrap the gate in an SVG <a> element to make it clickable
106
125
  //
107
- // `GateType.Group` corresponds to an *expanded* group, which will contain clickable gates
108
- // so therefore should not itself be clickable
109
- if (renderData.link && renderData.type !== GateType.Group) {
126
+ // Expanded groups contain clickable child gates, so the group itself should not be clickable.
127
+ // Collapsed groups are rendered as a single summary gate and can be clickable.
128
+ if (renderData.link && !(renderData.type === GateType.Group && expanded)) {
110
129
  const linkElem = createLinkElement(
111
130
  renderData.link.href,
112
131
  renderData.link.title,
113
132
  );
114
133
 
115
- // Add the gate elements as children of the link
134
+ // Add the gate elements as children of the link.
135
+ // If this operation is classically controlled, keep the control circles
136
+ // outside the link so they remain independently interactive.
116
137
  for (const e of svgElems) {
117
138
  linkElem.appendChild(e);
118
139
  }
119
140
 
120
- svgElems = [linkElem];
141
+ svgElems = classicalControlElems.concat([linkElem]);
142
+ } else {
143
+ svgElems = classicalControlElems.concat(svgElems);
121
144
  }
122
145
 
123
146
  // Zoom button comes last so it's on top of the <a> element if both are present
@@ -125,7 +148,12 @@ const _createGate = (
125
148
  const zoomBtn: SVGElement | null = _zoomButton(renderData);
126
149
  if (zoomBtn != null) svgElems = svgElems.concat([zoomBtn]);
127
150
 
128
- return group(svgElems, attributes);
151
+ const gate = group(svgElems, attributes);
152
+ if (hasClassicalControls) {
153
+ gate.classList.add("classically-controlled-group");
154
+ }
155
+
156
+ return gate;
129
157
  };
130
158
 
131
159
  /**
@@ -142,12 +170,17 @@ const _zoomButton = (renderData: GateRenderData): SVGElement | null => {
142
170
 
143
171
  const { x: gateBoundingBoxX, y: gateBoundingBoxY } =
144
172
  _gateBoundingBox(renderData);
145
- let { dataAttributes } = renderData;
146
- dataAttributes = dataAttributes || {};
173
+ const expanded = renderData.isExpanded;
147
174
 
148
- const expanded = dataAttributes["expanded"] == "true";
175
+ // If this operation has classical controls, the overall gate bounding box includes
176
+ // extra space on the left for the control circles. The expand/collapse button should
177
+ // align with the left edge of the gate *body* (dashed box / unitary box), not the
178
+ // outermost bounding box.
179
+ const hasClassicalControls =
180
+ renderData.classicalControlIds != null && renderData.controlsY.length > 0;
149
181
 
150
- const x = gateBoundingBoxX + 2;
182
+ const x =
183
+ gateBoundingBoxX + 2 + (hasClassicalControls ? controlCircleOffset : 0);
151
184
  const y = gateBoundingBoxY + 2;
152
185
  const circleBorder: SVGElement = circle(x, y, 10);
153
186
 
@@ -158,8 +191,8 @@ const _zoomButton = (renderData: GateRenderData): SVGElement | null => {
158
191
  });
159
192
  const elements: SVGElement[] = [circleBorder, minusSign];
160
193
  return group(elements, { class: "gate-control gate-collapse" });
161
- } else if (dataAttributes["zoom-in"] == "true") {
162
- // Create expand button if operation can be zoomed in
194
+ } else if (renderData.type === GateType.Group) {
195
+ // Create expand button if operation is a composite/group gate
163
196
  const plusSign: SVGElement = createSvgElement("path", {
164
197
  d: `M${x},${y - 7} v14 M${x - 7},${y} h14`,
165
198
  });
@@ -600,18 +633,61 @@ const _oplus = (x: number, y: number, wireYs: number[]): SVGElement => {
600
633
  * @returns SVG representation of gate.
601
634
  */
602
635
  const _groupedOperations = (renderData: GateRenderData): SVGElement => {
603
- const { children, label } = renderData;
604
- const { x, y, width: w, height: h } = _gateBoundingBox(renderData);
636
+ const { children, label, displayArgs, x, targetsY, width } = renderData;
637
+ const expanded = renderData.isExpanded;
638
+
639
+ // Collapsed composite: render as a single summary gate (unitary-style), but keep
640
+ // the GateType as Group so the UI can still offer an expand button.
641
+ if (!expanded) {
642
+ // `targetsY` for groups is typically a flat `number[]` (not split into groups).
643
+ // `_unitary` expects a `number[][]` where each entry is a contiguous set of wires.
644
+ const normalizedTargetsY: number[][] = Array.isArray(targetsY[0])
645
+ ? (targetsY as number[][])
646
+ : [targetsY as number[]];
647
+
648
+ let bodyWidth = width;
649
+ let bodyX = x;
650
+ if (renderData.classicalControlIds != null) {
651
+ bodyWidth = width - controlCircleOffset;
652
+ bodyX = x + controlCircleOffset / 2;
653
+ }
654
+
655
+ return _createGate(
656
+ [_unitary(label, bodyX, normalizedTargetsY, bodyWidth, displayArgs)],
657
+ renderData,
658
+ );
659
+ }
660
+
661
+ const boundingBox = _gateBoundingBox(renderData);
662
+
663
+ const hasClassicalControls =
664
+ renderData.classicalControlIds != null && renderData.controlsY.length > 0;
665
+
666
+ const elems: SVGElement[] = [];
667
+
668
+ let boxX = boundingBox.x;
669
+ let boxWidth = boundingBox.width;
670
+
671
+ if (hasClassicalControls) {
672
+ boxX += controlCircleOffset;
673
+ boxWidth -= controlCircleOffset;
674
+ }
605
675
 
606
676
  // Draw dashed box around children gates
607
- const box: SVGElement = dashedBox(x, y, w, h, "gate-unitary");
608
- const elems: SVGElement[] = [box];
677
+ const boxElem: SVGElement = dashedBox(
678
+ boxX,
679
+ boundingBox.y,
680
+ boxWidth,
681
+ boundingBox.height,
682
+ hasClassicalControls ? "classical-container" : "gate-unitary",
683
+ );
684
+ elems.push(boxElem);
609
685
  if (children != null) elems.push(formatGates(children as GateRenderData[][]));
610
686
 
611
687
  const labelText = _labelText(
612
688
  label,
613
- x + labelPaddingX,
614
- y + groupTopPadding / 2 + groupLabelPaddingY,
689
+ boxX + labelPaddingX,
690
+ boundingBox.y + groupTopPadding / 2 + groupLabelPaddingY,
615
691
  );
616
692
  labelText.classList.add("qs-group-label");
617
693
 
@@ -628,40 +704,29 @@ const _groupedOperations = (renderData: GateRenderData): SVGElement => {
628
704
  return _createGate(elems, renderData);
629
705
  };
630
706
 
631
- /**
632
- * Generates the SVG for a classically controlled group of operations.
633
- *
634
- * @param renderData Render data of gate.
635
- * @param padding Padding within dashed box.
636
- *
637
- * @returns SVG representation of gate.
638
- */
639
- const _classicalControlled = (
707
+ const _classicalControls = (
708
+ leftX: number,
640
709
  renderData: GateRenderData,
641
- padding: number = groupPaddingX,
642
- ): SVGElement => {
643
- const { controlsY, dataAttributes, label, classicalControlIds, children } =
644
- renderData;
645
-
646
- const boundingBox = _gateBoundingBox(renderData);
647
- let { x, width } = boundingBox;
648
- const { y, height } = boundingBox;
649
-
710
+ ): SVGElement[] => {
711
+ const { controlsY, classicalControlIds } = renderData;
650
712
  const elems: SVGElement[] = [];
651
713
 
652
714
  for (let i = 0; i < controlsY.length; i++) {
653
715
  const controlY = controlsY[i];
654
716
  const label = classicalControlIds?.[i] ?? null;
655
- // Draw control button and attached dashed line to dashed box
656
- const controlCircleX: number = x + controlCircleRadius;
717
+
718
+ // Draw control button and attached dashed line to the gate body.
719
+ const controlCircleX: number = leftX + controlCircleRadius;
657
720
  const controlCircle: SVGElement = _controlCircle(
658
721
  controlCircleX,
659
722
  controlY,
660
723
  label,
661
724
  );
725
+
662
726
  const lineY1: number = controlY + controlCircleRadius;
663
727
  const lineY2: number =
664
728
  controlY + controlCircleRadius + groupBottomPadding / 2;
729
+
665
730
  const vertLine: SVGElement = dashedLine(
666
731
  controlCircleX,
667
732
  lineY1,
@@ -669,7 +734,8 @@ const _classicalControlled = (
669
734
  lineY2,
670
735
  "classical-line",
671
736
  );
672
- const lineEndX = x + controlCircleOffset;
737
+
738
+ const lineEndX = leftX + controlCircleOffset;
673
739
  const horLine: SVGElement = dashedLine(
674
740
  controlCircleX,
675
741
  lineY2,
@@ -681,48 +747,7 @@ const _classicalControlled = (
681
747
  elems.push(horLine, vertLine, controlCircle);
682
748
  }
683
749
 
684
- x += controlCircleOffset;
685
-
686
- width = width - controlCircleOffset + (padding - groupPaddingX) * 2;
687
- x += groupPaddingX - padding;
688
-
689
- // Draw dashed box around children gates
690
- const box: SVGElement = dashedBox(x, y, width, height, "classical-container");
691
-
692
- elems.push(box);
693
-
694
- const labelText = _labelText(
695
- label,
696
- x + labelPaddingX,
697
- y + groupTopPadding / 2 + groupLabelPaddingY,
698
- );
699
- labelText.classList.add("qs-group-label");
700
-
701
- if (renderData.link) {
702
- const link = createLinkElement(renderData.link.href, renderData.link.title);
703
- // Make the text element clickable
704
- labelText.style.pointerEvents = "all";
705
- link.appendChild(labelText);
706
- elems.push(link);
707
- } else {
708
- elems.push(labelText);
709
- }
710
-
711
- if (children != null) {
712
- // Get SVG for gates controlled on 0
713
- const childrenSvg: SVGElement = formatGates(children);
714
- elems.push(childrenSvg);
715
- }
716
-
717
- const attributes: { [attr: string]: string } = {
718
- class: `classically-controlled-group`,
719
- };
720
- if (dataAttributes != null)
721
- Object.entries(dataAttributes).forEach(
722
- ([attr, val]) => (attributes[`data-${attr}`] = val),
723
- );
724
-
725
- return group(elems, attributes);
750
+ return elems;
726
751
  };
727
752
 
728
753
  /**
@@ -40,13 +40,10 @@ const formatRegisters = (
40
40
  for (const classical of registers[qId].children || []) {
41
41
  const ys: number[] = [];
42
42
  for (const gate of allGates.flat()) {
43
- if (
44
- gate.type === GateType.Group ||
45
- gate.type === GateType.ClassicalControlled
46
- ) {
43
+ if (gate.type === GateType.Group) {
47
44
  // Don't render classical wires for a group that is expanded - the wires
48
45
  // will be coming out of the measurement operations *inside* the group.
49
- continue;
46
+ if (gate.isExpanded) continue;
50
47
  }
51
48
 
52
49
  for (const y of gate.targetsY.flat().filter((y) => y === classical.y)) {
@@ -2,6 +2,7 @@
2
2
  // Licensed under the MIT license.
3
3
 
4
4
  import { DataAttributes } from "./circuit.js";
5
+ import { Register } from "./register.js";
5
6
 
6
7
  /**
7
8
  * Enum for the various gate operations handled.
@@ -21,8 +22,6 @@ export enum GateType {
21
22
  Unitary,
22
23
  /** Single/multi controlled unitary gate. */
23
24
  ControlledUnitary,
24
- /** Nested group of classically-controlled gates. */
25
- ClassicalControlled,
26
25
  /** Group of nested gates */
27
26
  Group,
28
27
  /** Invalid gate. */
@@ -36,6 +35,8 @@ export enum GateType {
36
35
  export interface GateRenderData {
37
36
  /** Gate type. */
38
37
  type: GateType;
38
+ /** Whether this group gate is currently expanded. Always false for non-group gates. */
39
+ isExpanded: boolean;
39
40
  /** Centre x coord for gate position. */
40
41
  x: number;
41
42
  /** Array of y coords of control registers. */
@@ -61,6 +62,12 @@ export interface GateRenderData {
61
62
  dataAttributes?: DataAttributes;
62
63
  /** Link href and title for clickable gate. */
63
64
  link?: { href: string; title: string };
64
- /** Labels for the classical control registers (applicable only for GateType.ClassicalControlled). */
65
+ /** Labels for the classical control registers (when present, this group is rendered with classical controls). */
65
66
  classicalControlIds?: (number | null)[];
67
+ /**
68
+ * Classical control registers used by this operation or any descendant.
69
+ * Used by processOperations to decide which classical wires may pass through
70
+ * this gate body without forcing a split.
71
+ */
72
+ classicalControlRegs?: Register[];
66
73
  }
@@ -285,6 +285,7 @@ const toRenderData = (
285
285
  const target = y + 1 + gateHeight / 2; // offset by 1 for top padding
286
286
  const renderData: GateRenderData = {
287
287
  type: GateType.Invalid,
288
+ isExpanded: false,
288
289
  x: x + 1 + minGateWidth / 2, // offset by 1 for left padding
289
290
  controlsY: [],
290
291
  targetsY: [target],