QuLab 2.12.2__tar.gz → 2.13.0__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 (192) hide show
  1. {qulab-2.12.2 → qulab-2.13.0}/PKG-INFO +8 -1
  2. {qulab-2.12.2 → qulab-2.13.0}/QuLab.egg-info/PKG-INFO +8 -1
  3. {qulab-2.12.2 → qulab-2.13.0}/QuLab.egg-info/SOURCES.txt +69 -10
  4. {qulab-2.12.2 → qulab-2.13.0}/QuLab.egg-info/requires.txt +7 -0
  5. {qulab-2.12.2 → qulab-2.13.0}/pyproject.toml +14 -0
  6. qulab-2.13.0/qulab/auto/__init__.py +109 -0
  7. qulab-2.13.0/qulab/auto/agent/__init__.py +34 -0
  8. qulab-2.13.0/qulab/auto/agent/analyzer.py +610 -0
  9. qulab-2.13.0/qulab/auto/agent/executor.py +552 -0
  10. qulab-2.13.0/qulab/auto/agent/loop.py +514 -0
  11. qulab-2.13.0/qulab/auto/agent/memory.py +223 -0
  12. qulab-2.13.0/qulab/auto/agent/planner.py +673 -0
  13. qulab-2.13.0/qulab/auto/bus/__init__.py +9 -0
  14. qulab-2.13.0/qulab/auto/bus/queue.py +427 -0
  15. qulab-2.13.0/qulab/auto/cli.py +715 -0
  16. qulab-2.13.0/qulab/auto/config.py +523 -0
  17. qulab-2.13.0/qulab/auto/exceptions.py +41 -0
  18. qulab-2.13.0/qulab/auto/executor/__init__.py +11 -0
  19. qulab-2.13.0/qulab/auto/executor/base.py +65 -0
  20. qulab-2.13.0/qulab/auto/executor/context.py +105 -0
  21. qulab-2.13.0/qulab/auto/executor/local.py +226 -0
  22. qulab-2.13.0/qulab/auto/llm/__init__.py +19 -0
  23. qulab-2.13.0/qulab/auto/llm/anthropic.py +172 -0
  24. qulab-2.13.0/qulab/auto/llm/base.py +60 -0
  25. qulab-2.13.0/qulab/auto/llm/openai.py +172 -0
  26. qulab-2.13.0/qulab/auto/llm/registry.py +110 -0
  27. qulab-2.13.0/qulab/auto/main.py +208 -0
  28. qulab-2.13.0/qulab/auto/models/__init__.py +5 -0
  29. qulab-2.13.0/qulab/auto/models/session.py +73 -0
  30. qulab-2.13.0/qulab/auto/skills/__init__.py +15 -0
  31. qulab-2.13.0/qulab/auto/skills/base.py +153 -0
  32. qulab-2.13.0/qulab/auto/skills/builtin/__init__.py +1 -0
  33. qulab-2.13.0/qulab/auto/skills/cache.py +235 -0
  34. qulab-2.13.0/qulab/auto/skills/generator.py +330 -0
  35. qulab-2.13.0/qulab/auto/skills/loader.py +265 -0
  36. qulab-2.13.0/qulab/auto/tools/__init__.py +18 -0
  37. qulab-2.13.0/qulab/auto/tools/analysis.py +619 -0
  38. qulab-2.13.0/qulab/auto/tools/base.py +126 -0
  39. qulab-2.13.0/qulab/auto/tools/config.py +50 -0
  40. qulab-2.13.0/qulab/auto/tools/human.py +61 -0
  41. qulab-2.13.0/qulab/auto/tools/lesson.py +410 -0
  42. qulab-2.13.0/qulab/auto/tools/measurement.py +454 -0
  43. qulab-2.13.0/qulab/auto/tools/query.py +156 -0
  44. qulab-2.13.0/qulab/auto/tools/registry.py +122 -0
  45. qulab-2.13.0/qulab/auto/world_model/__init__.py +20 -0
  46. qulab-2.13.0/qulab/auto/world_model/base.py +360 -0
  47. qulab-2.13.0/qulab/auto/world_model/history.py +318 -0
  48. qulab-2.13.0/qulab/auto/world_model/parameter.py +418 -0
  49. qulab-2.13.0/qulab/auto/world_model/state.py +415 -0
  50. {qulab-2.12.2 → qulab-2.13.0}/qulab/cli/commands.py +6 -0
  51. {qulab-2.12.2 → qulab-2.13.0}/qulab/cli/config.py +1 -1
  52. {qulab-2.12.2 → qulab-2.13.0}/qulab/executor/load.py +1 -5
  53. {qulab-2.12.2 → qulab-2.13.0}/qulab/executor/schedule.py +0 -1
  54. {qulab-2.12.2 → qulab-2.13.0}/qulab/monitor/__main__.py +2 -2
  55. {qulab-2.12.2 → qulab-2.13.0}/qulab/monitor/mainwindow.py +1 -1
  56. {qulab-2.12.2 → qulab-2.13.0}/qulab/monitor/monitor.py +2 -2
  57. {qulab-2.12.2 → qulab-2.13.0}/qulab/monitor/ploter.py +1 -1
  58. {qulab-2.12.2 → qulab-2.13.0}/qulab/monitor/toolbar.py +1 -1
  59. {qulab-2.12.2 → qulab-2.13.0}/qulab/scan/optimize.py +0 -1
  60. {qulab-2.12.2 → qulab-2.13.0}/qulab/scan/record.py +6 -6
  61. {qulab-2.12.2 → qulab-2.13.0}/qulab/scan/scan.py +2 -2
  62. {qulab-2.12.2 → qulab-2.13.0}/qulab/scan/server.py +7 -10
  63. {qulab-2.12.2 → qulab-2.13.0}/qulab/scan/space.py +0 -1
  64. qulab-2.13.0/qulab/storage/__init__.py +78 -0
  65. qulab-2.13.0/qulab/storage/__main__.py +6 -0
  66. qulab-2.13.0/qulab/storage/array.py +525 -0
  67. qulab-2.13.0/qulab/storage/array_utils.py +267 -0
  68. qulab-2.13.0/qulab/storage/attachment.py +264 -0
  69. qulab-2.13.0/qulab/storage/base.py +262 -0
  70. qulab-2.13.0/qulab/storage/chunk.py +100 -0
  71. qulab-2.13.0/qulab/storage/cli.py +328 -0
  72. qulab-2.13.0/qulab/storage/dataset.py +752 -0
  73. qulab-2.13.0/qulab/storage/document.py +535 -0
  74. qulab-2.13.0/qulab/storage/local.py +575 -0
  75. qulab-2.13.0/qulab/storage/models/__init__.py +79 -0
  76. qulab-2.13.0/qulab/storage/models/attachment.py +167 -0
  77. qulab-2.13.0/qulab/storage/models/base.py +50 -0
  78. qulab-2.13.0/qulab/storage/models/config.py +147 -0
  79. qulab-2.13.0/qulab/storage/models/dataset.py +255 -0
  80. qulab-2.13.0/qulab/storage/models/document.py +237 -0
  81. qulab-2.13.0/qulab/storage/models/script.py +146 -0
  82. {qulab-2.12.2 → qulab-2.13.0}/qulab/storage/models/tag.py +14 -11
  83. qulab-2.13.0/qulab/storage/remote.py +484 -0
  84. qulab-2.13.0/qulab/storage/render.py +285 -0
  85. qulab-2.13.0/qulab/storage/server.py +386 -0
  86. {qulab-2.12.2 → qulab-2.13.0}/qulab/sys/chat.py +0 -2
  87. {qulab-2.12.2 → qulab-2.13.0}/qulab/sys/device/loader.py +0 -1
  88. {qulab-2.12.2 → qulab-2.13.0}/qulab/sys/device/utils.py +5 -5
  89. {qulab-2.12.2 → qulab-2.13.0}/qulab/sys/ipy_events.py +5 -3
  90. {qulab-2.12.2 → qulab-2.13.0}/qulab/sys/net/dhcp.py +0 -2
  91. {qulab-2.12.2 → qulab-2.13.0}/qulab/sys/net/dhcpd.py +3 -6
  92. {qulab-2.12.2 → qulab-2.13.0}/qulab/sys/net/kad.py +2 -2
  93. {qulab-2.12.2 → qulab-2.13.0}/qulab/sys/net/kcp.py +1 -1
  94. {qulab-2.12.2 → qulab-2.13.0}/qulab/sys/rpc/msgpack.py +12 -21
  95. {qulab-2.12.2 → qulab-2.13.0}/qulab/sys/rpc/serialize.py +1 -1
  96. {qulab-2.12.2 → qulab-2.13.0}/qulab/sys/rpc/utils.py +0 -2
  97. qulab-2.13.0/qulab/tools/xlsx.py +81 -0
  98. qulab-2.13.0/qulab/trace/__init__.py +186 -0
  99. qulab-2.13.0/qulab/trace/capture.py +313 -0
  100. qulab-2.13.0/qulab/trace/cli.py +178 -0
  101. qulab-2.13.0/qulab/trace/client.py +476 -0
  102. qulab-2.13.0/qulab/trace/hooks.py +330 -0
  103. qulab-2.13.0/qulab/trace/models.py +189 -0
  104. qulab-2.13.0/qulab/trace/server.py +156 -0
  105. qulab-2.13.0/qulab/trace/storage.py +387 -0
  106. qulab-2.13.0/qulab/trace/watcher.py +242 -0
  107. qulab-2.13.0/qulab/typing.py +1 -0
  108. {qulab-2.12.2 → qulab-2.13.0}/qulab/utils.py +1 -1
  109. qulab-2.13.0/qulab/version.py +1 -0
  110. {qulab-2.12.2 → qulab-2.13.0}/qulab/visualization/__init__.py +2 -2
  111. {qulab-2.12.2 → qulab-2.13.0}/qulab/visualization/plot_circ.py +1 -1
  112. {qulab-2.12.2 → qulab-2.13.0}/qulab/visualization/plot_layout.py +6 -11
  113. {qulab-2.12.2 → qulab-2.13.0}/qulab/visualization/rot3d.py +0 -1
  114. qulab-2.13.0/qulab/visualization/widgets.py +821 -0
  115. qulab-2.13.0/tests/test_auto_framework.py +477 -0
  116. qulab-2.12.2/qulab/storage/__main__.py +0 -51
  117. qulab-2.12.2/qulab/storage/backend/redis.py +0 -204
  118. qulab-2.12.2/qulab/storage/base_dataset.py +0 -352
  119. qulab-2.12.2/qulab/storage/chunk.py +0 -60
  120. qulab-2.12.2/qulab/storage/dataset.py +0 -127
  121. qulab-2.12.2/qulab/storage/file.py +0 -273
  122. qulab-2.12.2/qulab/storage/models/__init__.py +0 -22
  123. qulab-2.12.2/qulab/storage/models/base.py +0 -4
  124. qulab-2.12.2/qulab/storage/models/config.py +0 -28
  125. qulab-2.12.2/qulab/storage/models/file.py +0 -89
  126. qulab-2.12.2/qulab/storage/models/ipy.py +0 -58
  127. qulab-2.12.2/qulab/storage/models/models.py +0 -88
  128. qulab-2.12.2/qulab/storage/models/record.py +0 -161
  129. qulab-2.12.2/qulab/storage/models/report.py +0 -22
  130. qulab-2.12.2/qulab/storage/storage.py +0 -95
  131. qulab-2.12.2/qulab/sys/rpc/__init__.py +0 -0
  132. qulab-2.12.2/qulab/tools/__init__.py +0 -0
  133. qulab-2.12.2/qulab/typing.py +0 -2
  134. qulab-2.12.2/qulab/version.py +0 -1
  135. qulab-2.12.2/qulab/visualization/widgets.py +0 -86
  136. {qulab-2.12.2 → qulab-2.13.0}/LICENSE +0 -0
  137. {qulab-2.12.2 → qulab-2.13.0}/MANIFEST.in +0 -0
  138. {qulab-2.12.2 → qulab-2.13.0}/QuLab.egg-info/dependency_links.txt +0 -0
  139. {qulab-2.12.2 → qulab-2.13.0}/QuLab.egg-info/entry_points.txt +0 -0
  140. {qulab-2.12.2 → qulab-2.13.0}/QuLab.egg-info/top_level.txt +0 -0
  141. {qulab-2.12.2 → qulab-2.13.0}/README.md +0 -0
  142. {qulab-2.12.2 → qulab-2.13.0}/qulab/__init__.py +0 -0
  143. {qulab-2.12.2 → qulab-2.13.0}/qulab/__main__.py +0 -0
  144. {qulab-2.12.2 → qulab-2.13.0}/qulab/cli/__init__.py +0 -0
  145. {qulab-2.12.2 → qulab-2.13.0}/qulab/cli/decorators.py +0 -0
  146. {qulab-2.12.2 → qulab-2.13.0}/qulab/executor/__init__.py +0 -0
  147. {qulab-2.12.2 → qulab-2.13.0}/qulab/executor/analyze.py +0 -0
  148. {qulab-2.12.2 → qulab-2.13.0}/qulab/executor/cli.py +0 -0
  149. {qulab-2.12.2 → qulab-2.13.0}/qulab/executor/registry.py +0 -0
  150. {qulab-2.12.2 → qulab-2.13.0}/qulab/executor/storage.py +0 -0
  151. {qulab-2.12.2 → qulab-2.13.0}/qulab/executor/template.py +0 -0
  152. {qulab-2.12.2 → qulab-2.13.0}/qulab/executor/utils.py +0 -0
  153. {qulab-2.12.2 → qulab-2.13.0}/qulab/monitor/__init__.py +0 -0
  154. {qulab-2.12.2 → qulab-2.13.0}/qulab/monitor/config.py +0 -0
  155. {qulab-2.12.2 → qulab-2.13.0}/qulab/monitor/dataset.py +0 -0
  156. {qulab-2.12.2 → qulab-2.13.0}/qulab/monitor/event_queue.py +0 -0
  157. {qulab-2.12.2 → qulab-2.13.0}/qulab/monitor/qt_compat.py +0 -0
  158. {qulab-2.12.2 → qulab-2.13.0}/qulab/scan/__init__.py +0 -0
  159. {qulab-2.12.2 → qulab-2.13.0}/qulab/scan/curd.py +0 -0
  160. {qulab-2.12.2 → qulab-2.13.0}/qulab/scan/models.py +0 -0
  161. {qulab-2.12.2 → qulab-2.13.0}/qulab/scan/query.py +0 -0
  162. {qulab-2.12.2 → qulab-2.13.0}/qulab/scan/utils.py +0 -0
  163. {qulab-2.12.2 → qulab-2.13.0}/qulab/sys/__init__.py +0 -0
  164. {qulab-2.12.2 → qulab-2.13.0}/qulab/sys/device/__init__.py +0 -0
  165. {qulab-2.12.2 → qulab-2.13.0}/qulab/sys/device/basedevice.py +0 -0
  166. {qulab-2.12.2 → qulab-2.13.0}/qulab/sys/drivers/FakeInstrument.py +0 -0
  167. {qulab-2.12.2/qulab/storage → qulab-2.13.0/qulab/sys/drivers}/__init__.py +0 -0
  168. {qulab-2.12.2/qulab/storage/backend → qulab-2.13.0/qulab/sys/net}/__init__.py +0 -0
  169. {qulab-2.12.2 → qulab-2.13.0}/qulab/sys/net/bencoder.py +0 -0
  170. {qulab-2.12.2 → qulab-2.13.0}/qulab/sys/net/cli.py +0 -0
  171. {qulab-2.12.2 → qulab-2.13.0}/qulab/sys/net/nginx.py +0 -0
  172. {qulab-2.12.2 → qulab-2.13.0}/qulab/sys/progress.py +0 -0
  173. {qulab-2.12.2/qulab/sys/drivers → qulab-2.13.0/qulab/sys/rpc}/__init__.py +0 -0
  174. {qulab-2.12.2 → qulab-2.13.0}/qulab/sys/rpc/client.py +0 -0
  175. {qulab-2.12.2 → qulab-2.13.0}/qulab/sys/rpc/exceptions.py +0 -0
  176. {qulab-2.12.2 → qulab-2.13.0}/qulab/sys/rpc/msgpack.pyi +0 -0
  177. {qulab-2.12.2 → qulab-2.13.0}/qulab/sys/rpc/router.py +0 -0
  178. {qulab-2.12.2 → qulab-2.13.0}/qulab/sys/rpc/rpc.py +0 -0
  179. {qulab-2.12.2 → qulab-2.13.0}/qulab/sys/rpc/server.py +0 -0
  180. {qulab-2.12.2 → qulab-2.13.0}/qulab/sys/rpc/socket.py +0 -0
  181. {qulab-2.12.2 → qulab-2.13.0}/qulab/sys/rpc/worker.py +0 -0
  182. {qulab-2.12.2 → qulab-2.13.0}/qulab/sys/rpc/zmq_socket.py +0 -0
  183. {qulab-2.12.2/qulab/sys/net → qulab-2.13.0/qulab/tools}/__init__.py +0 -0
  184. {qulab-2.12.2 → qulab-2.13.0}/qulab/tools/connection_helper.py +0 -0
  185. {qulab-2.12.2 → qulab-2.13.0}/qulab/visualization/__main__.py +0 -0
  186. {qulab-2.12.2 → qulab-2.13.0}/qulab/visualization/_autoplot.py +0 -0
  187. {qulab-2.12.2 → qulab-2.13.0}/qulab/visualization/plot_seq.py +0 -0
  188. {qulab-2.12.2 → qulab-2.13.0}/qulab/visualization/qdat.py +0 -0
  189. {qulab-2.12.2 → qulab-2.13.0}/setup.cfg +0 -0
  190. {qulab-2.12.2 → qulab-2.13.0}/setup.py +0 -0
  191. {qulab-2.12.2 → qulab-2.13.0}/src/qulab.h +0 -0
  192. {qulab-2.12.2 → qulab-2.13.0}/tests/test_scan.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: QuLab
3
- Version: 2.12.2
3
+ Version: 2.13.0
4
4
  Summary: contral instruments and manage data
5
5
  Author-email: feihoo87 <feihoo87@gmail.com>
6
6
  Maintainer-email: feihoo87 <feihoo87@gmail.com>
@@ -35,8 +35,10 @@ Requires-Dist: matplotlib>=3.7.2
35
35
  Requires-Dist: msgpack>=1.0.5
36
36
  Requires-Dist: nevergrad>=1.0.2
37
37
  Requires-Dist: numpy>=1.13.3
38
+ Requires-Dist: openai>=1.0.0
38
39
  Requires-Dist: ply>=3.11
39
40
  Requires-Dist: pyperclip>=1.8.2
41
+ Requires-Dist: pyyaml>=6.0
40
42
  Requires-Dist: pyzmq>=25.1.0
41
43
  Requires-Dist: qlisp>=1.1.4
42
44
  Requires-Dist: qlispc>=1.1.8
@@ -48,6 +50,11 @@ Requires-Dist: watchdog>=4.0.0
48
50
  Requires-Dist: wath>=1.1.6
49
51
  Requires-Dist: waveforms>=1.9.4
50
52
  Requires-Dist: rich>=14.0.0
53
+ Requires-Dist: pydantic>=2.12.5
54
+ Requires-Dist: openpyxl>=3.1.5
55
+ Requires-Dist: anthropic>=0.84.0
56
+ Requires-Dist: fastapi>=0.115.0
57
+ Requires-Dist: uvicorn>=0.30.0
51
58
  Provides-Extra: full
52
59
  Requires-Dist: paramiko>=3.5.1; extra == "full"
53
60
  Requires-Dist: uvloop>=0.19.0; extra == "full"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: QuLab
3
- Version: 2.12.2
3
+ Version: 2.13.0
4
4
  Summary: contral instruments and manage data
5
5
  Author-email: feihoo87 <feihoo87@gmail.com>
6
6
  Maintainer-email: feihoo87 <feihoo87@gmail.com>
@@ -35,8 +35,10 @@ Requires-Dist: matplotlib>=3.7.2
35
35
  Requires-Dist: msgpack>=1.0.5
36
36
  Requires-Dist: nevergrad>=1.0.2
37
37
  Requires-Dist: numpy>=1.13.3
38
+ Requires-Dist: openai>=1.0.0
38
39
  Requires-Dist: ply>=3.11
39
40
  Requires-Dist: pyperclip>=1.8.2
41
+ Requires-Dist: pyyaml>=6.0
40
42
  Requires-Dist: pyzmq>=25.1.0
41
43
  Requires-Dist: qlisp>=1.1.4
42
44
  Requires-Dist: qlispc>=1.1.8
@@ -48,6 +50,11 @@ Requires-Dist: watchdog>=4.0.0
48
50
  Requires-Dist: wath>=1.1.6
49
51
  Requires-Dist: waveforms>=1.9.4
50
52
  Requires-Dist: rich>=14.0.0
53
+ Requires-Dist: pydantic>=2.12.5
54
+ Requires-Dist: openpyxl>=3.1.5
55
+ Requires-Dist: anthropic>=0.84.0
56
+ Requires-Dist: fastapi>=0.115.0
57
+ Requires-Dist: uvicorn>=0.30.0
51
58
  Provides-Extra: full
52
59
  Requires-Dist: paramiko>=3.5.1; extra == "full"
53
60
  Requires-Dist: uvloop>=0.19.0; extra == "full"
@@ -14,6 +14,50 @@ qulab/__main__.py
14
14
  qulab/typing.py
15
15
  qulab/utils.py
16
16
  qulab/version.py
17
+ qulab/auto/__init__.py
18
+ qulab/auto/cli.py
19
+ qulab/auto/config.py
20
+ qulab/auto/exceptions.py
21
+ qulab/auto/main.py
22
+ qulab/auto/agent/__init__.py
23
+ qulab/auto/agent/analyzer.py
24
+ qulab/auto/agent/executor.py
25
+ qulab/auto/agent/loop.py
26
+ qulab/auto/agent/memory.py
27
+ qulab/auto/agent/planner.py
28
+ qulab/auto/bus/__init__.py
29
+ qulab/auto/bus/queue.py
30
+ qulab/auto/executor/__init__.py
31
+ qulab/auto/executor/base.py
32
+ qulab/auto/executor/context.py
33
+ qulab/auto/executor/local.py
34
+ qulab/auto/llm/__init__.py
35
+ qulab/auto/llm/anthropic.py
36
+ qulab/auto/llm/base.py
37
+ qulab/auto/llm/openai.py
38
+ qulab/auto/llm/registry.py
39
+ qulab/auto/models/__init__.py
40
+ qulab/auto/models/session.py
41
+ qulab/auto/skills/__init__.py
42
+ qulab/auto/skills/base.py
43
+ qulab/auto/skills/cache.py
44
+ qulab/auto/skills/generator.py
45
+ qulab/auto/skills/loader.py
46
+ qulab/auto/skills/builtin/__init__.py
47
+ qulab/auto/tools/__init__.py
48
+ qulab/auto/tools/analysis.py
49
+ qulab/auto/tools/base.py
50
+ qulab/auto/tools/config.py
51
+ qulab/auto/tools/human.py
52
+ qulab/auto/tools/lesson.py
53
+ qulab/auto/tools/measurement.py
54
+ qulab/auto/tools/query.py
55
+ qulab/auto/tools/registry.py
56
+ qulab/auto/world_model/__init__.py
57
+ qulab/auto/world_model/base.py
58
+ qulab/auto/world_model/history.py
59
+ qulab/auto/world_model/parameter.py
60
+ qulab/auto/world_model/state.py
17
61
  qulab/cli/__init__.py
18
62
  qulab/cli/commands.py
19
63
  qulab/cli/config.py
@@ -49,21 +93,25 @@ qulab/scan/space.py
49
93
  qulab/scan/utils.py
50
94
  qulab/storage/__init__.py
51
95
  qulab/storage/__main__.py
52
- qulab/storage/base_dataset.py
96
+ qulab/storage/array.py
97
+ qulab/storage/array_utils.py
98
+ qulab/storage/attachment.py
99
+ qulab/storage/base.py
53
100
  qulab/storage/chunk.py
101
+ qulab/storage/cli.py
54
102
  qulab/storage/dataset.py
55
- qulab/storage/file.py
56
- qulab/storage/storage.py
57
- qulab/storage/backend/__init__.py
58
- qulab/storage/backend/redis.py
103
+ qulab/storage/document.py
104
+ qulab/storage/local.py
105
+ qulab/storage/remote.py
106
+ qulab/storage/render.py
107
+ qulab/storage/server.py
59
108
  qulab/storage/models/__init__.py
109
+ qulab/storage/models/attachment.py
60
110
  qulab/storage/models/base.py
61
111
  qulab/storage/models/config.py
62
- qulab/storage/models/file.py
63
- qulab/storage/models/ipy.py
64
- qulab/storage/models/models.py
65
- qulab/storage/models/record.py
66
- qulab/storage/models/report.py
112
+ qulab/storage/models/dataset.py
113
+ qulab/storage/models/document.py
114
+ qulab/storage/models/script.py
67
115
  qulab/storage/models/tag.py
68
116
  qulab/sys/__init__.py
69
117
  qulab/sys/chat.py
@@ -98,6 +146,16 @@ qulab/sys/rpc/worker.py
98
146
  qulab/sys/rpc/zmq_socket.py
99
147
  qulab/tools/__init__.py
100
148
  qulab/tools/connection_helper.py
149
+ qulab/tools/xlsx.py
150
+ qulab/trace/__init__.py
151
+ qulab/trace/capture.py
152
+ qulab/trace/cli.py
153
+ qulab/trace/client.py
154
+ qulab/trace/hooks.py
155
+ qulab/trace/models.py
156
+ qulab/trace/server.py
157
+ qulab/trace/storage.py
158
+ qulab/trace/watcher.py
101
159
  qulab/visualization/__init__.py
102
160
  qulab/visualization/__main__.py
103
161
  qulab/visualization/_autoplot.py
@@ -108,4 +166,5 @@ qulab/visualization/qdat.py
108
166
  qulab/visualization/rot3d.py
109
167
  qulab/visualization/widgets.py
110
168
  src/qulab.h
169
+ tests/test_auto_framework.py
111
170
  tests/test_scan.py
@@ -9,8 +9,10 @@ matplotlib>=3.7.2
9
9
  msgpack>=1.0.5
10
10
  nevergrad>=1.0.2
11
11
  numpy>=1.13.3
12
+ openai>=1.0.0
12
13
  ply>=3.11
13
14
  pyperclip>=1.8.2
15
+ pyyaml>=6.0
14
16
  pyzmq>=25.1.0
15
17
  qlisp>=1.1.4
16
18
  qlispc>=1.1.8
@@ -22,6 +24,11 @@ watchdog>=4.0.0
22
24
  wath>=1.1.6
23
25
  waveforms>=1.9.4
24
26
  rich>=14.0.0
27
+ pydantic>=2.12.5
28
+ openpyxl>=3.1.5
29
+ anthropic>=0.84.0
30
+ fastapi>=0.115.0
31
+ uvicorn>=0.30.0
25
32
 
26
33
  [full]
27
34
  paramiko>=3.5.1
@@ -39,8 +39,10 @@ dependencies = [
39
39
  "msgpack>=1.0.5",
40
40
  "nevergrad>=1.0.2",
41
41
  "numpy>=1.13.3",
42
+ "openai>=1.0.0",
42
43
  "ply>=3.11",
43
44
  "pyperclip>=1.8.2",
45
+ "pyyaml>=6.0",
44
46
  "pyzmq>=25.1.0",
45
47
  "qlisp>=1.1.4",
46
48
  "qlispc>=1.1.8",
@@ -52,6 +54,11 @@ dependencies = [
52
54
  "wath>=1.1.6",
53
55
  "waveforms>=1.9.4",
54
56
  "rich>=14.0.0",
57
+ "pydantic>=2.12.5",
58
+ "openpyxl>=3.1.5",
59
+ "anthropic>=0.84.0",
60
+ "fastapi>=0.115.0",
61
+ "uvicorn>=0.30.0",
55
62
  ]
56
63
  dynamic = ["version"]
57
64
 
@@ -79,3 +86,10 @@ include-package-data = true
79
86
 
80
87
  [tool.setuptools.dynamic]
81
88
  version = {attr = "qulab.version.__version__"}
89
+
90
+ [dependency-groups]
91
+ dev = [
92
+ "pylint[spelling]>=4.0.5",
93
+ "pytest>=9.0.2",
94
+ "pytest-asyncio>=1.3.0",
95
+ ]
@@ -0,0 +1,109 @@
1
+ """QuLab Automatic Experiment Framework
2
+
3
+ This module provides an automated experiment framework similar to nanobot,
4
+ using LLM as the decision center for coordinating measurement and analysis tasks.
5
+
6
+ Example:
7
+ >>> from qulab.auto import AutoLab
8
+ >>> from qulab.storage import LocalStorage
9
+ >>>
10
+ >>> # Initialize storage
11
+ >>> storage = LocalStorage("./data")
12
+ >>>
13
+ >>> # Initialize AutoLab with Kimi
14
+ >>> lab = AutoLab(storage, llm_config={
15
+ ... "provider": "openai",
16
+ ... "base_url": "https://api.moonshot.cn/v1",
17
+ ... "api_key": "sk-...",
18
+ ... "model": "kimi-k2.5"
19
+ ... })
20
+ >>>
21
+ >>> # Start a session
22
+ >>> async for event in lab.start("Calibrate qubit 1 frequency"):
23
+ ... print(f"[{event.type}] {event.content}")
24
+
25
+ The framework consists of:
26
+ - **Agent**: ReAct decision loop that coordinates tasks
27
+ - **LLM**: Pluggable LLM providers (Anthropic, OpenAI-compatible like Kimi)
28
+ - **Skills**: YAML + Markdown files describing experiments and analyses
29
+ - **Tools**: Query, measurement, analysis, config update, and human query
30
+ - **Storage**: Persistent storage via qulab.storage
31
+ """
32
+
33
+ from .config import (
34
+ AutoLabConfig,
35
+ BusConfig,
36
+ ExecutorConfig,
37
+ LLMConfig,
38
+ MemoryConfig,
39
+ SkillConfig,
40
+ WorldModelConfig,
41
+ )
42
+ from .exceptions import (
43
+ AutoLabError,
44
+ ConfigError,
45
+ LLMError,
46
+ SessionError,
47
+ SkillError,
48
+ SkillNotFoundError,
49
+ ToolError,
50
+ ToolNotFoundError,
51
+ )
52
+ from .main import AutoLab
53
+
54
+ __all__ = [
55
+ # Main class
56
+ "AutoLab",
57
+ # Configuration
58
+ "AutoLabConfig",
59
+ "LLMConfig",
60
+ "SkillConfig",
61
+ "ExecutorConfig",
62
+ "MemoryConfig",
63
+ "WorldModelConfig",
64
+ "BusConfig",
65
+ # Exceptions
66
+ "AutoLabError",
67
+ "SkillError",
68
+ "SkillNotFoundError",
69
+ "ToolError",
70
+ "ToolNotFoundError",
71
+ "LLMError",
72
+ "ConfigError",
73
+ "SessionError",
74
+ ]
75
+
76
+
77
+ def __getattr__(name):
78
+ """Lazy import for agent components."""
79
+ if name == "AgentLoop":
80
+ from .agent.loop import AgentLoop
81
+ return AgentLoop
82
+ if name == "AgentConfig":
83
+ from .agent.loop import AgentConfig
84
+ return AgentConfig
85
+ if name == "AgentEvent":
86
+ from .agent.loop import AgentEvent
87
+ return AgentEvent
88
+ if name == "PlannerAgent":
89
+ from .agent.planner import PlannerAgent
90
+ return PlannerAgent
91
+ if name == "ExecutorAgent":
92
+ from .agent.executor import ExecutorAgent
93
+ return ExecutorAgent
94
+ if name == "AnalysisAgent":
95
+ from .agent.analyzer import AnalysisAgent
96
+ return AnalysisAgent
97
+ if name == "Skill":
98
+ from .skills.base import Skill
99
+ return Skill
100
+ if name == "SkillLoader":
101
+ from .skills.loader import SkillLoader
102
+ return SkillLoader
103
+ if name == "MessageBus":
104
+ from .bus import MessageBus
105
+ return MessageBus
106
+ if name == "WorldModel":
107
+ from .world_model import WorldModel
108
+ return WorldModel
109
+ raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
@@ -0,0 +1,34 @@
1
+ """Agent system for auto experiment framework.
2
+
3
+ This module provides a three-layer agent architecture:
4
+ - PlannerAgent: High-level strategy and planning
5
+ - ExecutorAgent: Experiment skill execution
6
+ - AnalysisAgent: Data analysis execution
7
+ """
8
+
9
+ from .analyzer import AnalysisAgent, AnalysisContext, AnalysisResult
10
+ from .executor import ExecutorAgent, ExecutionContext, ExecutionResult
11
+ from .loop import AgentConfig, AgentEvent, AgentLoop
12
+ from .memory import SessionMemory
13
+ from .planner import ExecutionPlan, PlanStatus, PlanStep, PlannerAgent
14
+
15
+ __all__ = [
16
+ # Original classes
17
+ "AgentLoop",
18
+ "AgentConfig",
19
+ "AgentEvent",
20
+ "SessionMemory",
21
+ # Planner Agent
22
+ "PlannerAgent",
23
+ "ExecutionPlan",
24
+ "PlanStep",
25
+ "PlanStatus",
26
+ # Executor Agent
27
+ "ExecutorAgent",
28
+ "ExecutionContext",
29
+ "ExecutionResult",
30
+ # Analysis Agent
31
+ "AnalysisAgent",
32
+ "AnalysisContext",
33
+ "AnalysisResult",
34
+ ]