QuLab 2.11.16__py3-none-any.whl → 2.12.0__py3-none-any.whl

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.
qulab/version.py CHANGED
@@ -1 +1 @@
1
- __version__ = "2.11.16"
1
+ __version__ = "2.12.0"
@@ -54,6 +54,85 @@ def complete_layout(layout):
54
54
  return layout
55
55
 
56
56
 
57
+ def read_xlsx_to_dict(filepath: str,
58
+ key_col: int = 0,
59
+ value_col: int = 4,
60
+ sheet_name: str = 0) -> dict:
61
+ """
62
+ 读取 .xlsx 文件,将第 key_col 列和第 value_col 列的值分别作为 key、value,返回一个字典。
63
+
64
+ :param filepath: Excel 文件路径
65
+ :param key_col: 用作字典键的列索引(0 表示第一列)
66
+ :param value_col: 用作字典值的列索引(0 表示第一列)
67
+ :param sheet_name: 要读取的 sheet 名称或索引,默认第一个 sheet
68
+ :return: { key: value, ... } 形式的字典
69
+ """
70
+ import pandas as pd
71
+
72
+ # 读取整个表格
73
+ # df = pd.read_excel(filepath, sheet_name=sheet_name, header=None)
74
+ df = pd.read_excel(filepath, sheet_name=sheet_name)
75
+
76
+ # 提取指定列,生成键值对并返回字典
77
+ keys = df.iloc[:, key_col]
78
+ values = df.iloc[:, value_col]
79
+ return dict(zip(keys, values))
80
+
81
+
82
+ def load_layout_from_xlsx(qubit_info, coupler_info, pad_info):
83
+ """
84
+ 从 .xlsx 文件中加载布局信息。
85
+
86
+ :param qubit_info: 量子比特信息文件路径
87
+ :param coupler_info: 耦合器信息文件路径
88
+ :param pad_info: 垫片信息文件路径
89
+ :return: 布局信息
90
+ """
91
+ import pandas as pd
92
+
93
+ _qubits = {}
94
+
95
+ qubit_pad = read_xlsx_to_dict(qubit_info, value_col=4)
96
+ coupler_pad = read_xlsx_to_dict(coupler_info, value_col=3)
97
+ pads = {
98
+ v: k
99
+ for k, v in qubit_pad.items()
100
+ } | {
101
+ v: k
102
+ for k, v in coupler_pad.items()
103
+ }
104
+ pad_info = read_xlsx_to_dict(pad_info, value_col=2)
105
+
106
+ lyt = {'qubits': {}, 'couplers': {}, 'feedlines': {}}
107
+
108
+ for pad, script in pad_info.items():
109
+ info = eval(script)
110
+ match info['style']:
111
+ case 'Q':
112
+ qubit = pads[pad]
113
+ lyt['qubits'][qubit] = {'pos': info['qb'], 'pad': pad}
114
+ _qubits[info['qb']] = qubit
115
+ case 'C':
116
+ coupler = pads[pad]
117
+ if 'cpl' in info:
118
+ pos = tuple(info['cpl'])
119
+ else:
120
+ pos = tuple(info['qb'])
121
+ lyt['couplers'][coupler] = {'qubits': pos, 'pad': pad}
122
+ case 'TL':
123
+ l = info['tl']
124
+ if f"T{l}" in lyt['feedlines']:
125
+ lyt['feedlines'][f"T{l}"]['pads'].append(pad)
126
+ else:
127
+ lyt['feedlines'][f"T{l}"] = {'pads': [pad]}
128
+
129
+ for coupler in lyt['couplers']:
130
+ qubits = lyt['couplers'][coupler]['qubits']
131
+ lyt['couplers'][coupler]['qubits'] = [_qubits[p] for p in qubits]
132
+
133
+ return complete_layout(lyt)
134
+
135
+
57
136
  def get_shared_coupler(layout, q1, q2):
58
137
  for c in layout['qubits'][q1]['couplers']:
59
138
  if q2 in layout['couplers'][c]['qubits']:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: QuLab
3
- Version: 2.11.16
3
+ Version: 2.12.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>
@@ -2,7 +2,7 @@ qulab/__init__.py,sha256=ijh3NWuSCU_KWRrPfddX4vfPcYPmvKs64vSTl9qd-SU,2178
2
2
  qulab/__main__.py,sha256=fjaRSL_uUjNIzBGNgjlGswb9TJ2VD5qnkZHW3hItrD4,68
3
3
  qulab/typing.py,sha256=vg62sGqxuD9CI5677ejlzAmf2fVdAESZCQjAE_xSxPg,69
4
4
  qulab/utils.py,sha256=B_8QdY9OMY7WU-F200v93BDJXJpQcKAHihnOXeEvv_w,3966
5
- qulab/version.py,sha256=z1ogNWpE3sfhj8z_vJdEtWVUcmSF3lOrnReD_efKPwM,23
5
+ qulab/version.py,sha256=9qeMwbCMEAjH-vk_63Tak43katUwSOLexvq8N_IKi8c,22
6
6
  qulab/cli/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
7
7
  qulab/cli/commands.py,sha256=ywKmwbGNBCVASx8OsgrRttaLz9ogwY38ZdKj7I-tdJ4,813
8
8
  qulab/cli/config.py,sha256=Z-lePcDMeeQmwFpdfQHqZuaXTPhWUHN5KrlSqrya73Y,6324
@@ -91,14 +91,14 @@ qulab/visualization/__init__.py,sha256=26cuHt3QIJXUb3VaMxlJx3IQTOUVJFKlYBZr7WMP5
91
91
  qulab/visualization/__main__.py,sha256=9zKK3yZFy0leU40ou6BpRC1Fsetfc1gjjFzIZYIwP6Y,1639
92
92
  qulab/visualization/_autoplot.py,sha256=2ECb2USU3_MSwo2d8qzMMO4DK9OU1bA6RYr7FCss1D0,14369
93
93
  qulab/visualization/plot_circ.py,sha256=Lxi-Nnik9MBtsNur0iyp9DTdy_IMALRsHBg2hZbPkGc,8769
94
- qulab/visualization/plot_layout.py,sha256=mRHinWX1Iq1qpcZ1OKrtcRoqJuv_a8d2qXrj23MeEjQ,17793
94
+ qulab/visualization/plot_layout.py,sha256=Q8yOGYQ-oOle1W7cN4am9ABI8T-Xtk3W6BEX5bFSeWg,20464
95
95
  qulab/visualization/plot_seq.py,sha256=UWTS6p9nfX_7B8ehcYo6UnSTUCjkBsNU9jiOeW2calY,6751
96
96
  qulab/visualization/qdat.py,sha256=ZeevBYWkzbww4xZnsjHhw7wRorJCBzbG0iEu-XQB4EA,5735
97
97
  qulab/visualization/rot3d.py,sha256=CuLfG1jw1032HNNZxzC0OWtNzKsbj2e2WRYhMWDgvMQ,1321
98
98
  qulab/visualization/widgets.py,sha256=6KkiTyQ8J-ei70LbPQZAK35wjktY47w2IveOa682ftA,3180
99
- qulab-2.11.16.dist-info/licenses/LICENSE,sha256=PRzIKxZtpQcH7whTG6Egvzl1A0BvnSf30tmR2X2KrpA,1065
100
- qulab-2.11.16.dist-info/METADATA,sha256=XXJq2QfRxVsTyN5Szli0eQEIF-xEvr_4U0zsofxCMtc,3945
101
- qulab-2.11.16.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
102
- qulab-2.11.16.dist-info/entry_points.txt,sha256=b0v1GXOwmxY-nCCsPN_rHZZvY9CtTbWqrGj8u1m8yHo,45
103
- qulab-2.11.16.dist-info/top_level.txt,sha256=3T886LbAsbvjonu_TDdmgxKYUn939BVTRPxPl9r4cEg,6
104
- qulab-2.11.16.dist-info/RECORD,,
99
+ qulab-2.12.0.dist-info/licenses/LICENSE,sha256=PRzIKxZtpQcH7whTG6Egvzl1A0BvnSf30tmR2X2KrpA,1065
100
+ qulab-2.12.0.dist-info/METADATA,sha256=ciOrjSwiDMrPsQizRcfSzDphr_TCmgrDFjx3Njx6qto,3944
101
+ qulab-2.12.0.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
102
+ qulab-2.12.0.dist-info/entry_points.txt,sha256=b0v1GXOwmxY-nCCsPN_rHZZvY9CtTbWqrGj8u1m8yHo,45
103
+ qulab-2.12.0.dist-info/top_level.txt,sha256=3T886LbAsbvjonu_TDdmgxKYUn939BVTRPxPl9r4cEg,6
104
+ qulab-2.12.0.dist-info/RECORD,,