waveforms 1.6.0__tar.gz → 1.6.2__tar.gz

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 (231) hide show
  1. {waveforms-1.6.0/waveforms.egg-info → waveforms-1.6.2}/PKG-INFO +1 -1
  2. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/fit/spectrum.py +3 -3
  3. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/math.py +1 -1
  4. waveforms-1.6.2/waveforms/systemq_kernel/kernel/__init__.py +14 -0
  5. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/kernel/sched/sched.py +75 -11
  6. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/kernel/sched/task.py +2 -0
  7. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/kernel/terminal/scan.py +4 -1
  8. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/lib/arch/baqis.py +9 -1
  9. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/lib/gates/u3.py +33 -2
  10. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/storage/fs.py +13 -8
  11. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/version.py +1 -1
  12. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/visualization/__main__.py +24 -7
  13. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/waveform.py +44 -0
  14. {waveforms-1.6.0 → waveforms-1.6.2/waveforms.egg-info}/PKG-INFO +1 -1
  15. waveforms-1.6.0/waveforms/systemq_kernel/kernel/__init__.py +0 -11
  16. {waveforms-1.6.0 → waveforms-1.6.2}/LICENSE +0 -0
  17. {waveforms-1.6.0 → waveforms-1.6.2}/MANIFEST.in +0 -0
  18. {waveforms-1.6.0 → waveforms-1.6.2}/README.md +0 -0
  19. {waveforms-1.6.0 → waveforms-1.6.2}/pyproject.toml +0 -0
  20. {waveforms-1.6.0 → waveforms-1.6.2}/setup.cfg +0 -0
  21. {waveforms-1.6.0 → waveforms-1.6.2}/setup.py +0 -0
  22. {waveforms-1.6.0 → waveforms-1.6.2}/src/ikcp.c +0 -0
  23. {waveforms-1.6.0 → waveforms-1.6.2}/src/ikcp.h +0 -0
  24. {waveforms-1.6.0 → waveforms-1.6.2}/src/kcp.c +0 -0
  25. {waveforms-1.6.0 → waveforms-1.6.2}/src/prime.c +0 -0
  26. {waveforms-1.6.0 → waveforms-1.6.2}/src/waveform.c +0 -0
  27. {waveforms-1.6.0 → waveforms-1.6.2}/src/waveform.h +0 -0
  28. {waveforms-1.6.0 → waveforms-1.6.2}/tests/test_clifford.py +0 -0
  29. {waveforms-1.6.0 → waveforms-1.6.2}/tests/test_compile.py +0 -0
  30. {waveforms-1.6.0 → waveforms-1.6.2}/tests/test_config.py +0 -0
  31. {waveforms-1.6.0 → waveforms-1.6.2}/tests/test_cycles.py +0 -0
  32. {waveforms-1.6.0 → waveforms-1.6.2}/tests/test_dicttree.py +0 -0
  33. {waveforms-1.6.0 → waveforms-1.6.2}/tests/test_group.py +0 -0
  34. {waveforms-1.6.0 → waveforms-1.6.2}/tests/test_lisp.py +0 -0
  35. {waveforms-1.6.0 → waveforms-1.6.2}/tests/test_msgpack.py +0 -0
  36. {waveforms-1.6.0 → waveforms-1.6.2}/tests/test_namespace.py +0 -0
  37. {waveforms-1.6.0 → waveforms-1.6.2}/tests/test_registry.py +0 -0
  38. {waveforms-1.6.0 → waveforms-1.6.2}/tests/test_scan_iter.py +0 -0
  39. {waveforms-1.6.0 → waveforms-1.6.2}/tests/test_tomo.py +0 -0
  40. {waveforms-1.6.0 → waveforms-1.6.2}/tests/test_verify.py +0 -0
  41. {waveforms-1.6.0 → waveforms-1.6.2}/tests/test_vm.py +0 -0
  42. {waveforms-1.6.0 → waveforms-1.6.2}/tests/test_waveform.py +0 -0
  43. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/__init__.py +0 -0
  44. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/__main__.py +0 -0
  45. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/autoreload.py +0 -0
  46. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/baseconfig.py +0 -0
  47. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/cache.py +0 -0
  48. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/dicttree.py +0 -0
  49. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/loader.py +0 -0
  50. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/__init__.py +0 -0
  51. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/bayes.py +0 -0
  52. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/fibheap.py +0 -0
  53. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/fit/__init__.py +0 -0
  54. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/fit/_fit.py +0 -0
  55. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/fit/delay.py +0 -0
  56. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/fit/geo.py +0 -0
  57. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/fit/qubit_dynamics.py +0 -0
  58. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/fit/readout.py +0 -0
  59. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/fit/resonator.py +0 -0
  60. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/fit/simple.py +0 -0
  61. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/graph.py +0 -0
  62. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/group/_SU_n_.py +0 -0
  63. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/group/__init__.py +0 -0
  64. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/group/clifford/__init__.py +0 -0
  65. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/group/clifford/funtions.py +0 -0
  66. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/group/permutation_group.py +0 -0
  67. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/prime.py +0 -0
  68. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/signal/__init__.py +0 -0
  69. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/signal/demodulate.py +0 -0
  70. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/signal/distortion.py +0 -0
  71. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/signal/func.py +0 -0
  72. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/math/transmon.py +0 -0
  73. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/namespace.py +0 -0
  74. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/__init__.py +0 -0
  75. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/arch/__init__.py +0 -0
  76. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/assembly.py +0 -0
  77. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/base.py +0 -0
  78. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/commands.py +0 -0
  79. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/compiler.py +0 -0
  80. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/config.py +0 -0
  81. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/interpreter.py +0 -0
  82. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/library.py +0 -0
  83. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/libs/__init__.py +0 -0
  84. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/macro.py +0 -0
  85. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/parse.py +0 -0
  86. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/prog.py +0 -0
  87. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/__init__.py +0 -0
  88. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/eval.py +0 -0
  89. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/exceptions.py +0 -0
  90. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/libs/__init__.py +0 -0
  91. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/libs/qelib1.inc +0 -0
  92. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/__init__.py +0 -0
  93. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/barrier.py +0 -0
  94. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/binaryop.py +0 -0
  95. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/binaryoperator.py +0 -0
  96. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/creg.py +0 -0
  97. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/customunitary.py +0 -0
  98. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/expressionlist.py +0 -0
  99. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/external.py +0 -0
  100. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/format.py +0 -0
  101. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/gate.py +0 -0
  102. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/gatebody.py +0 -0
  103. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/id.py +0 -0
  104. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/idlist.py +0 -0
  105. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/if_.py +0 -0
  106. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/indexedid.py +0 -0
  107. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/intnode.py +0 -0
  108. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/measure.py +0 -0
  109. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/node.py +0 -0
  110. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/nodeexception.py +0 -0
  111. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/opaque.py +0 -0
  112. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/prefix.py +0 -0
  113. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/primarylist.py +0 -0
  114. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/program.py +0 -0
  115. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/qreg.py +0 -0
  116. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/real.py +0 -0
  117. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/reset.py +0 -0
  118. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/node/unaryoperator.py +0 -0
  119. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/qasm.py +0 -0
  120. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/qasmlexer.py +0 -0
  121. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/qasm/qasmparser.py +0 -0
  122. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/simulator/__init__.py +0 -0
  123. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/simulator/mat.py +0 -0
  124. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/simulator/simple.py +0 -0
  125. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/tokenize.py +0 -0
  126. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/qlisp/utils.py +0 -0
  127. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/__init__.py +0 -0
  128. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/circuit/__init__.py +0 -0
  129. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/circuit/qlisp/__init__.py +0 -0
  130. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/circuit/qlisp/arch/__init__.py +0 -0
  131. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/circuit/qlisp/arch/base.py +0 -0
  132. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/circuit/qlisp/assembly_left.py +0 -0
  133. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/circuit/qlisp/assembly_right.py +0 -0
  134. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/circuit/qlisp/compiler.py +0 -0
  135. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/circuit/qlisp/config.py +0 -0
  136. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/circuit/qlisp/library.py +0 -0
  137. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/circuit/qlisp/macro.py +0 -0
  138. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/circuit/qlisp/qasm.py +0 -0
  139. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/circuit/qlisp/qlisp.py +0 -0
  140. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/circuit/qlisp/stdlib.py +0 -0
  141. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/circuit/qlisp/utils.py +0 -0
  142. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/circuit/simulator/__init__.py +0 -0
  143. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/clifford/__init__.py +0 -0
  144. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/clifford/clifford.py +0 -0
  145. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/clifford/db.py +0 -0
  146. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/clifford/mat.py +0 -0
  147. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/clifford/seq2mat.py +0 -0
  148. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/rb.py +0 -0
  149. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/tomo.py +0 -0
  150. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/transmon.py +0 -0
  151. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/quantum/xeb.py +0 -0
  152. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/registry.py +0 -0
  153. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/scan/__init__.py +0 -0
  154. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/scan/dataset.py +0 -0
  155. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/scan/transforms.py +0 -0
  156. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/scan_iter.py +0 -0
  157. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/security/__init__.py +0 -0
  158. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/security/verify.py +0 -0
  159. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/server/__init__.py +0 -0
  160. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/server/__main__.py +0 -0
  161. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/server/umsgpack.py +0 -0
  162. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/sys/__init__.py +0 -0
  163. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/sys/chat.py +0 -0
  164. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/sys/device/__init__.py +0 -0
  165. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/sys/device/basedevice.py +0 -0
  166. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/sys/device/loader.py +0 -0
  167. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/sys/device/utils.py +0 -0
  168. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/sys/drivers/FakeInstrument.py +0 -0
  169. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/sys/drivers/__init__.py +0 -0
  170. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/sys/ipy_events.py +0 -0
  171. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/sys/net/__init__.py +0 -0
  172. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/sys/net/dhcp.py +0 -0
  173. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/sys/net/dhcpd.py +0 -0
  174. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/sys/net/kad.py +0 -0
  175. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/sys/net/kcp.py +0 -0
  176. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/sys/progress.py +0 -0
  177. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/sys/storage/__init__.py +0 -0
  178. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/sys/storage/crud.py +0 -0
  179. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/sys/storage/models.py +0 -0
  180. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/__init__.py +0 -0
  181. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/kernel/bootstrap.py +0 -0
  182. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/kernel/config.py +0 -0
  183. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/kernel/sched/__init__.py +0 -0
  184. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/kernel/sched/_bigbrother.py +0 -0
  185. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/kernel/sched/base.py +0 -0
  186. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/kernel/sched/executor.py +0 -0
  187. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/kernel/sched/progress.py +0 -0
  188. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/kernel/sched/scan.py +0 -0
  189. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/kernel/sched/scan_iters.py +0 -0
  190. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/kernel/sched/terminal.py +0 -0
  191. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/kernel/storage/__init__.py +0 -0
  192. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/kernel/storage/crud.py +0 -0
  193. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/kernel/storage/hdf5_utils.py +0 -0
  194. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/kernel/storage/models.py +0 -0
  195. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/kernel/terminal/__init__.py +0 -0
  196. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/kernel/terminal/app.py +0 -0
  197. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/lib/__init__.py +0 -0
  198. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/lib/apps/__init__.py +0 -0
  199. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/lib/arch/__init__.py +0 -0
  200. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/lib/arch/baqis_config.py +0 -0
  201. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/lib/arch/baqis_seq.py +0 -0
  202. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/lib/gates/__init__.py +0 -0
  203. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/lib/gates/cr.py +0 -0
  204. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/lib/gates/qudit.py +0 -0
  205. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/lib/gates/std.py +0 -0
  206. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/lib/math/__init__.py +0 -0
  207. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/lib/math/state_classify.py +0 -0
  208. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/qlisp/__init__.py +0 -0
  209. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/qlisp/base.py +0 -0
  210. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/qlisp/prog.py +0 -0
  211. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/storage/__init__.py +0 -0
  212. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/storage/crud/__init__.py +0 -0
  213. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/storage/crud/basic.py +0 -0
  214. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/storage/crud/record.py +0 -0
  215. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/storage/files.py +0 -0
  216. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/storage/git.py +0 -0
  217. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/storage/hdf5_utils.py +0 -0
  218. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/storage/ipy_events.py +0 -0
  219. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/storage/models.py +0 -0
  220. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/systemq_kernel/storage/utils.py +0 -0
  221. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/units/__init__.py +0 -0
  222. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/visualization/__init__.py +0 -0
  223. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/visualization/plot_layout.py +0 -0
  224. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/visualization/plot_seq.py +0 -0
  225. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/visualization/qdat.py +0 -0
  226. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms/waveform_parser.py +0 -0
  227. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms.egg-info/SOURCES.txt +0 -0
  228. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms.egg-info/dependency_links.txt +0 -0
  229. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms.egg-info/entry_points.txt +0 -0
  230. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms.egg-info/requires.txt +0 -0
  231. {waveforms-1.6.0 → waveforms-1.6.2}/waveforms.egg-info/top_level.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: waveforms
3
- Version: 1.6.0
3
+ Version: 1.6.2
4
4
  Summary: Edit waveforms used in experiment
5
5
  Author-email: feihoo87 <feihoo87@gmail.com>
6
6
  Maintainer-email: feihoo87 <feihoo87@gmail.com>
@@ -15,11 +15,11 @@ def get_2d_spectrum_background(data):
15
15
  Returns:
16
16
  bg (np.ndarray): background
17
17
  """
18
- x = np.median(data, axis=0)
19
- y = np.median(data, axis=1)
18
+ x = np.nanmedian(data, axis=0)
19
+ y = np.nanmedian(data, axis=1)
20
20
  x, y = np.meshgrid(x, y)
21
21
  bg = x + y
22
- offset = np.median(data - bg)
22
+ offset = np.nanmedian(data - bg)
23
23
  return bg - offset
24
24
 
25
25
 
@@ -158,7 +158,7 @@ def v2Hermitian(V):
158
158
  X = V[:(N**2 - N) // 2]
159
159
  Y = V[(N**2 - N) // 2:(N**2 - N)]
160
160
  Z = V[(N**2 - N):]
161
- H = np.diag(Z / 2).astype(np.complex)
161
+ H = np.diag(Z / 2).astype(complex)
162
162
 
163
163
  H[np.triu_indices(N, 1)] = X + 1j * Y
164
164
  H += dagger(H)
@@ -0,0 +1,14 @@
1
+ from .bootstrap import bootstrap
2
+ from .sched import sched as scheduler
3
+ from .sched.sched import (after_task_finished, before_task_start,
4
+ before_task_step, cancel, create_task, exec, get,
5
+ get_config, get_executor, get_system_info,
6
+ register_hook, session, set, submit,
7
+ unregister_all_hooks, unregister_hook,
8
+ update_parameters)
9
+ from .sched.task import set_default_lib, update_tags
10
+
11
+ bootstrap()
12
+
13
+ executor = get_executor()
14
+ cfg = get_config()
@@ -55,6 +55,43 @@ __system_info = {
55
55
  'packages': [],
56
56
  'repositories': {}
57
57
  }
58
+ __system_hooks = {
59
+ 'before_task_start': [],
60
+ 'after_task_finished': [],
61
+ 'before_task_step': [],
62
+ }
63
+
64
+
65
+ def register_hook(hook_name, func):
66
+ if func not in __system_hooks[hook_name]:
67
+ __system_hooks[hook_name].append(func)
68
+ return func
69
+
70
+
71
+ def unregister_hook(hook_name, func):
72
+ if func in __system_hooks[hook_name]:
73
+ __system_hooks[hook_name].remove(func)
74
+ return func
75
+
76
+
77
+ def unregister_all_hooks(hook_name):
78
+ if hook_name is None:
79
+ for k in __system_hooks.keys():
80
+ unregister_all_hooks(k)
81
+ elif hook_name in __system_hooks:
82
+ __system_hooks[hook_name].clear()
83
+
84
+
85
+ def before_task_start(func):
86
+ return register_hook('before_task_start', func)
87
+
88
+
89
+ def after_task_finished(func):
90
+ return register_hook('after_task_finished', func)
91
+
92
+
93
+ def before_task_step(func):
94
+ return register_hook('before_task_step', func)
58
95
 
59
96
 
60
97
  def _stack():
@@ -93,7 +130,12 @@ def clean_side_effects(task: Task,
93
130
  pass
94
131
  else:
95
132
  cmds.append(WRITE(k, v))
96
- return executor.feed(task.id, -2, cmds, priority=task.task_priority, name=task.name, next_feed_time=0)
133
+ return executor.feed(task.id,
134
+ -2,
135
+ cmds,
136
+ priority=task.task_priority,
137
+ name=task.name,
138
+ next_feed_time=0)
97
139
 
98
140
 
99
141
  def submit_loop(task_queue: PriorityQueue, current_stack: list[Task],
@@ -163,7 +205,7 @@ def _feed_step(task, feed_step, executor):
163
205
  task.runtime.prog.steps[feed_step].cmds,
164
206
  extra,
165
207
  priority=task.task_priority,
166
- name = task.name,
208
+ name=task.name,
167
209
  next_feed_time=30)
168
210
  if succeed == 0 and feed_step == 0:
169
211
  with task.runtime._status_lock:
@@ -252,8 +294,8 @@ def _save_data(task,
252
294
  return last_time, saved_step
253
295
 
254
296
 
255
- def _exec_hooks(task, step, executor):
256
- for hook in task._hooks:
297
+ def _exec_hooks(task, step, executor, hooks):
298
+ for hook in hooks:
257
299
  hook(task, step, executor)
258
300
  time.sleep(0.01)
259
301
 
@@ -283,7 +325,15 @@ def task_run_thread(task: Task, kill_event: threading.Event,
283
325
  circuit = task.circuits
284
326
  else:
285
327
  circuit = []
286
- executor.create_task(task.id, {'priority':task.task_priority,'user':user,'name':task.name,'circuit':circuit})
328
+ executor.create_task(
329
+ task.id, {
330
+ 'priority': task.task_priority,
331
+ 'user': user,
332
+ 'name': task.name,
333
+ 'circuit': circuit
334
+ })
335
+ if task._init_hooks:
336
+ _exec_hooks(task, feed_step, executor, task._init_hooks)
287
337
 
288
338
  try:
289
339
  while True:
@@ -314,7 +364,7 @@ def task_run_thread(task: Task, kill_event: threading.Event,
314
364
 
315
365
  if feed_more:
316
366
  if task._hooks:
317
- _exec_hooks(task, feed_step, executor)
367
+ _exec_hooks(task, feed_step, executor, task._hooks)
318
368
  _feed_step(task, feed_step, executor)
319
369
  feed_step += 1
320
370
 
@@ -324,8 +374,10 @@ def task_run_thread(task: Task, kill_event: threading.Event,
324
374
  if (feed_finished and
325
375
  task.runtime.finished_step >= task.runtime.compiled_step):
326
376
  # executor.save(task.id, task.data_path)
327
- executor.save(task.id, f'{task.data_path}/{task.record.id}', # save checkpoint once the Task is finished
328
- task.result()['index'])
377
+ executor.save(
378
+ task.id,
379
+ f'{task.data_path}/{task.record.id}', # save checkpoint once the Task is finished
380
+ task.result()['index'])
329
381
  task.runtime.finished_time = time.time()
330
382
  with task.runtime._status_lock:
331
383
  task.runtime.status = 'finished'
@@ -340,6 +392,8 @@ def task_run_thread(task: Task, kill_event: threading.Event,
340
392
  log.exception(f"{task.name}({task.id}) is failed")
341
393
  executor.free(task.id)
342
394
  finally:
395
+ if task._final_hooks:
396
+ _exec_hooks(task, feed_step, executor, task._final_hooks)
343
397
  if not side_effect_cleared:
344
398
  clean_side_effects(task, executor, task.runtime.keep_last_status)
345
399
  _save_data(task)
@@ -446,7 +500,7 @@ def set(key: str, value: Any, cache: bool = False):
446
500
  if not cache:
447
501
  cmds.append(WRITE(key, value))
448
502
  if len(cmds) > 0:
449
- succeed = __executor.feed(0, -1, cmds,next_feed_time=0)
503
+ succeed = __executor.feed(0, -1, cmds, next_feed_time=0)
450
504
  if succeed == 0:
451
505
  raise RuntimeError(
452
506
  f'Failed to set {key} to {value}, executor busy.')
@@ -499,6 +553,15 @@ def create_task(app, args=(), kwds={}):
499
553
  task.runtime.id = generate_task_id()
500
554
  task.runtime.user = __system_user
501
555
  task.runtime.system_info = get_system_info()
556
+ for fun in __system_hooks['before_task_start']:
557
+ if fun not in task._init_hooks:
558
+ task._init_hooks.append(fun)
559
+ for fun in __system_hooks['before_task_step']:
560
+ if fun not in task._hooks:
561
+ task._hooks.append(fun)
562
+ for fun in __system_hooks['after_task_finished']:
563
+ if fun not in task._final_hooks:
564
+ task._final_hooks.append(fun)
502
565
  return task
503
566
 
504
567
 
@@ -552,7 +615,8 @@ def exec(circuit,
552
615
  cmds=[],
553
616
  no_record=False,
554
617
  parent=None,
555
- dry_run: bool = False, **kw):
618
+ dry_run: bool = False,
619
+ **kw):
556
620
  """Execute a circuit.
557
621
 
558
622
  Parameters:
@@ -581,7 +645,7 @@ def exec(circuit,
581
645
  arch=arch,
582
646
  lib=lib,
583
647
  cfg=cfg,
584
- cmds=cmds)|kw)
648
+ cmds=cmds) | kw)
585
649
  if parent is not None:
586
650
  t.parent = parent.id
587
651
  t.runtime.prog.snapshot = parent.cfg.export()
@@ -141,6 +141,8 @@ class Task(BaseTask):
141
141
  self.__cfg = None
142
142
  self.__runtime.arch = get_arch(arch)
143
143
  self._hooks: list[Callable[[Task, int, Executor], None]] = []
144
+ self._init_hooks: list[Callable[[Task, int, Executor], None]] = []
145
+ self._final_hooks: list[Callable[[Task, int, Executor], None]] = []
144
146
 
145
147
  @property
146
148
  def signal(self):
@@ -225,6 +225,7 @@ class Scan(App):
225
225
  aggregation: None | dict[str, tuple[str, callable]] = None,
226
226
  find_dim: None | tuple[str, int | float | complex] = None,
227
227
  T=False,
228
+ figsize=None,
228
229
  **kwds):
229
230
  import matplotlib.pyplot as plt
230
231
  from waveforms.visualization import autoplot
@@ -261,7 +262,9 @@ class Scan(App):
261
262
  row += 1
262
263
 
263
264
  if fig is None:
264
- fig, axis = plt.subplots(row, col, figsize=(5 * col, 4 * row))
265
+ if figsize is None:
266
+ figsize = (5 * col, 4 * row)
267
+ fig, axis = plt.subplots(row, col, figsize=figsize)
265
268
  #plt.tight_layout()
266
269
  axis = np.array([axis]).reshape(row, col)
267
270
 
@@ -245,7 +245,15 @@ def _process_classify(data, gate_params_list, signal, classify):
245
245
  result['population'].append(p1)
246
246
  result['population'] = np.asarray(result['population'])
247
247
  for i in range(4):
248
- result[f'P{i}'] = populations[i]
248
+ result[f'P{i}'] = populations[i]
249
+ for i, gate_params in enumerate(gate_params_list):
250
+ M = gate_params['params'].get('M', np.eye(4))
251
+ q = np.linalg.inv(np.asarray(M)) @ populations[:M.shape[0], i]
252
+ for j, v in enumerate(q):
253
+ if f'Q{j}' in result:
254
+ result[f'Q{j}'].append(v)
255
+ else:
256
+ result[f'Q{j}'] = [v]
249
257
  elif signal & Signal.state:
250
258
  result['state'] = state
251
259
 
@@ -1,10 +1,11 @@
1
1
  from pathlib import Path
2
2
 
3
3
  from numpy import mod, pi
4
+
4
5
  from waveforms.qlisp.base import MeasurementTask
5
6
  from waveforms.qlisp.library import Library
6
7
  from waveforms.qlisp.macro import add_VZ_rule
7
- from waveforms.waveform import (cos, coshPulse, cosPulse, gaussian, mixing,
8
+ from waveforms.waveform import (cos, coshPulse, cosPulse, gaussian, mixing, pi,
8
9
  sin, square, zero)
9
10
  from waveforms.waveform_parser import wave_eval
10
11
 
@@ -26,7 +27,6 @@ def get_frequency_phase(ctx, qubit, phi, level1, level2):
26
27
  return freq, phi
27
28
 
28
29
 
29
- @lib.opaque('R')
30
30
  def R(ctx, qubits, phi=0, level1=0, level2=1):
31
31
  qubit, = qubits
32
32
 
@@ -68,9 +68,20 @@ def R(ctx, qubits, phi=0, level1=0, level2=1):
68
68
  yield ('!add', 'time', width + plateau + buffer), qubit
69
69
 
70
70
 
71
+ @lib.opaque('R')
72
+ def _R(ctx, qubits, phi=0, level1=0, level2=1):
73
+ yield from R(ctx, qubits, phi, level1, level2)
74
+
75
+
76
+ @lib.opaque('R12')
77
+ def _R12(ctx, qubits, phi=0, level1=0, level2=1):
78
+ yield from R(ctx, qubits, phi, level1, level2)
79
+
80
+
71
81
  @lib.opaque('P')
72
82
  def P(ctx, qubits, phi):
73
83
  import numpy as np
84
+
74
85
  from waveforms.qlisp.assembly import call_opaque
75
86
 
76
87
  phi += ctx.phases[qubits[0]]
@@ -382,3 +393,23 @@ def CZ(ctx, qubits):
382
393
 
383
394
  yield ('!add', 'phase', ctx.params['phi1']), qubits[0]
384
395
  yield ('!add', 'phase', ctx.params['phi2']), qubits[1]
396
+
397
+
398
+ @lib.opaque('Reset')
399
+ def Reset(ctx, qubits):
400
+ qubit, *_ = qubits
401
+
402
+ f12 = ctx.cfg.query(f'gate.R12.{qubit}.params.frequency')
403
+ duration = ctx.params.get('duration', 1e-6)
404
+ amp_ef = ctx.params.get('amp_ef', 1.0)
405
+ amp_f0_g1 = ctx.params.get('amp_f0_g1', 1.0)
406
+ freq_f0_g1 = ctx.params.get('freq_f0_g1', 1e9)
407
+
408
+ wav1 = amp_ef * square(duration) * cos(2 * pi * f12)
409
+ wav2 = amp_f0_g1 * square(duration) * cos(2 * pi * freq_f0_g1)
410
+
411
+ t = ctx.time[qubit]
412
+
413
+ yield ('!add', 'waveform', wav1 >> t), ('RF', qubit)
414
+ yield ('!add', 'waveform', wav2 >> t), ('Z', qubit)
415
+ yield ('!add', 'time', duration), qubit
@@ -1,7 +1,11 @@
1
+ import gzip
1
2
  import hashlib
3
+ import pickle
2
4
  import zlib
3
5
  from pathlib import Path
4
6
 
7
+ import dill
8
+
5
9
  DATAPATH = Path.home() / 'data'
6
10
  CHUNKSIZE = 1024 * 1024 * 4 # 4 MB
7
11
 
@@ -16,10 +20,10 @@ def get_data_path() -> Path:
16
20
 
17
21
 
18
22
  def _save_object(data) -> tuple[str, str]:
19
- import gzip
20
- import pickle
21
-
22
- data = pickle.dumps(data)
23
+ try:
24
+ data = pickle.dumps(data)
25
+ except:
26
+ data = dill.dumps(data)
23
27
  hashstr = hashlib.sha1(data).hexdigest()
24
28
  file = get_data_path(
25
29
  ) / 'objects' / hashstr[:2] / hashstr[2:4] / hashstr[4:]
@@ -30,11 +34,12 @@ def _save_object(data) -> tuple[str, str]:
30
34
 
31
35
 
32
36
  def _load_object(file: str) -> bytes:
33
- import gzip
34
- import pickle
35
-
36
37
  with gzip.open(get_data_path() / file, 'rb') as f:
37
- data = pickle.load(f)
38
+ try:
39
+ data = pickle.load(f)
40
+ except:
41
+ f.seek(0)
42
+ data = dill.load(f)
38
43
  return data
39
44
 
40
45
 
@@ -1,2 +1,2 @@
1
1
  """Define version number here and read it from setup.py automatically"""
2
- __version__ = "1.6.0"
2
+ __version__ = "1.6.2"
@@ -1,6 +1,8 @@
1
- import pickle
2
1
  import pathlib
2
+ import pickle
3
+
3
4
  import click
5
+ import dill
4
6
  import matplotlib.pyplot as plt
5
7
  import numpy as np
6
8
 
@@ -12,15 +14,30 @@ default_draw_methods = {
12
14
 
13
15
 
14
16
  def load_data(fname):
17
+ try:
18
+ from home.hkxu.tools import get_record_by_id
19
+ record_id = int(fname)
20
+ return get_record_by_id(record_id).data
21
+ except:
22
+ pass
15
23
  with open(fname, 'rb') as f:
16
- data = pickle.load(f)
24
+ try:
25
+ data = pickle.load(f)
26
+ except:
27
+ f.seek(0)
28
+ data = dill.load(f)
17
29
  return data
18
30
 
19
31
 
20
- def draw(data):
21
- script = data['meta']['plot_script']
22
- global_namespace = {'plt': plt, 'np': np, 'result': data}
23
- exec(script, global_namespace)
32
+ def draw_common(data):
33
+ try:
34
+ script = data['meta']['plot_script']
35
+ assert script.strip()
36
+ global_namespace = {'plt': plt, 'np': np, 'result': data}
37
+ exec(script, global_namespace)
38
+ except:
39
+ from home.hkxu.tools import plot_record
40
+ plot_record(data['meta']['id'])
24
41
 
25
42
 
26
43
  def draw_error(data, text="No validate plot script found"):
@@ -39,7 +56,7 @@ def plot(fname):
39
56
  fname = pathlib.Path(fname)
40
57
  data = load_data(fname)
41
58
  try:
42
- draw(data)
59
+ draw_common(data)
43
60
  except:
44
61
  default_draw_methods.get(fname.suffix, draw_error)(data)
45
62
  except FileNotFoundError:
@@ -687,6 +687,50 @@ class Waveform:
687
687
  ])
688
688
  return "$$\n{}\n$$".format(expr)
689
689
 
690
+ def _play(self, time_unit):
691
+ RATE = 48000
692
+ y = self.sample(sample_rate=RATE / time_unit)
693
+ play(y, RATE)
694
+
695
+ def play(self, time_unit=1):
696
+ import multiprocessing as mp
697
+ p = mp.Process(target=self._play, args=(time_unit, ), daemon=True)
698
+ p.start()
699
+
700
+
701
+ def play(data, rate=48000):
702
+ import io
703
+ import pyaudio
704
+
705
+ CHUNK = 1024
706
+
707
+ max_amp = np.max(np.abs(data))
708
+
709
+ if max_amp > 1:
710
+ data /= max_amp
711
+
712
+ data = np.array(2**15 * 0.999 * data, dtype=np.int16)
713
+ buff = io.BytesIO(data.data)
714
+ p = pyaudio.PyAudio()
715
+
716
+ try:
717
+ stream = p.open(format=pyaudio.paInt16,
718
+ channels=1,
719
+ rate=rate,
720
+ output=True)
721
+ try:
722
+ while True:
723
+ data = buff.read(CHUNK)
724
+ if data:
725
+ stream.write(data)
726
+ else:
727
+ break
728
+ finally:
729
+ stream.stop_stream()
730
+ stream.close()
731
+ finally:
732
+ p.terminate()
733
+
690
734
 
691
735
  _zero_waveform = Waveform()
692
736
  _one_waveform = Waveform(seq=(_one, ))
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: waveforms
3
- Version: 1.6.0
3
+ Version: 1.6.2
4
4
  Summary: Edit waveforms used in experiment
5
5
  Author-email: feihoo87 <feihoo87@gmail.com>
6
6
  Maintainer-email: feihoo87 <feihoo87@gmail.com>
@@ -1,11 +0,0 @@
1
- from .bootstrap import bootstrap
2
- from .sched import sched as scheduler
3
- from .sched.sched import (cancel, create_task, exec, get, get_config,
4
- get_executor, get_system_info, session, set, submit,
5
- update_parameters)
6
- from .sched.task import set_default_lib, update_tags
7
-
8
- bootstrap()
9
-
10
- executor = get_executor()
11
- cfg = get_config()
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes