iqm-exa-common 25.34__tar.gz → 26.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.
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/CHANGELOG.rst +79 -34
- {iqm_exa_common-25.34/src/iqm_exa_common.egg-info → iqm_exa_common-26.0}/PKG-INFO +2 -2
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/requirements/base.in +1 -1
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/requirements/base.txt +1 -1
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/api/proto_serialization/_parameter.py +4 -3
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/api/proto_serialization/nd_sweep.py +3 -8
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/api/proto_serialization/sequence.py +5 -5
- iqm_exa_common-26.0/src/exa/common/control/sweep/exponential_sweep.py +51 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/control/sweep/fixed_sweep.py +10 -14
- iqm_exa_common-26.0/src/exa/common/control/sweep/linear_sweep.py +49 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/control/sweep/option/__init__.py +1 -1
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/control/sweep/option/center_span_base_options.py +14 -7
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/control/sweep/option/center_span_options.py +13 -6
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/control/sweep/option/constants.py +2 -2
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/control/sweep/option/fixed_options.py +8 -2
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/control/sweep/option/option_converter.py +4 -8
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/control/sweep/option/start_stop_base_options.py +20 -6
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/control/sweep/option/start_stop_options.py +20 -5
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/control/sweep/option/sweep_options.py +9 -0
- iqm_exa_common-26.0/src/exa/common/control/sweep/sweep.py +80 -0
- iqm_exa_common-26.0/src/exa/common/control/sweep/sweep_values.py +58 -0
- iqm_exa_common-26.0/src/exa/common/data/base_model.py +40 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/data/parameter.py +123 -68
- iqm_exa_common-26.0/src/exa/common/data/setting_node.py +1052 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/data/settingnode_v2.html.jinja2 +6 -6
- iqm_exa_common-26.0/src/exa/common/data/value.py +49 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/logger/logger.py +1 -1
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/qcm_data/file_adapter.py +2 -6
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/qcm_data/qcm_data_client.py +1 -37
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/sweep/database_serialization.py +30 -98
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/sweep/util.py +4 -5
- {iqm_exa_common-25.34 → iqm_exa_common-26.0/src/iqm_exa_common.egg-info}/PKG-INFO +2 -2
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/iqm_exa_common.egg-info/SOURCES.txt +3 -8
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/iqm_exa_common.egg-info/requires.txt +1 -1
- iqm_exa_common-26.0/version.txt +1 -0
- iqm_exa_common-25.34/src/exa/common/api/model/__init__.py +0 -15
- iqm_exa_common-25.34/src/exa/common/api/model/parameter_model.py +0 -111
- iqm_exa_common-25.34/src/exa/common/api/model/setting_model.py +0 -63
- iqm_exa_common-25.34/src/exa/common/api/model/setting_node_model.py +0 -72
- iqm_exa_common-25.34/src/exa/common/api/model/sweep_model.py +0 -63
- iqm_exa_common-25.34/src/exa/common/control/sweep/exponential_sweep.py +0 -83
- iqm_exa_common-25.34/src/exa/common/control/sweep/function_sweep.py +0 -35
- iqm_exa_common-25.34/src/exa/common/control/sweep/linear_sweep.py +0 -74
- iqm_exa_common-25.34/src/exa/common/control/sweep/option/function_options.py +0 -26
- iqm_exa_common-25.34/src/exa/common/control/sweep/sweep.py +0 -44
- iqm_exa_common-25.34/src/exa/common/control/sweep/utils.py +0 -43
- iqm_exa_common-25.34/src/exa/common/data/setting_node.py +0 -706
- iqm_exa_common-25.34/version.txt +0 -1
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/LICENSE.txt +0 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/MANIFEST.in +0 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/README.rst +0 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/docs/API.rst +0 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/docs/Makefile +0 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/docs/_static/.gitignore +0 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/docs/_static/css/custom.css +0 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/docs/_static/images/favicon.ico +0 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/docs/_static/images/logo.png +0 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/docs/_templates/autosummary-class-template.rst +0 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/docs/_templates/autosummary-module-template.rst +0 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/docs/changelog.rst +0 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/docs/conf.py +0 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/docs/index.rst +0 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/docs/license.rst +0 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/pyproject.toml +0 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/setup.cfg +0 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/setup.py +0 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/__init__.py +0 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/api/__init__.py +0 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/api/proto_serialization/__init__.py +0 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/api/proto_serialization/array.py +0 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/api/proto_serialization/datum.py +0 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/api/proto_serialization/setting_node.py +0 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/control/__init__.py +0 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/control/sweep/__init__.py +0 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/data/__init__.py +0 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/errors/__init__.py +0 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/errors/exa_error.py +0 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/helpers/__init__.py +0 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/helpers/data_helper.py +0 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/helpers/json_helper.py +0 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/helpers/numpy_helper.py +0 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/helpers/software_version_helper.py +0 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/logger/__init__.py +0 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/qcm_data/__init__.py +0 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/qcm_data/chad_model.py +0 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/qcm_data/chip_topology.py +0 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/qcm_data/immutable_base_model.py +0 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/sweep/__init__.py +0 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/iqm_exa_common.egg-info/dependency_links.txt +0 -0
- {iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/iqm_exa_common.egg-info/top_level.txt +0 -0
|
@@ -2,8 +2,53 @@
|
|
|
2
2
|
Changelog
|
|
3
3
|
=========
|
|
4
4
|
|
|
5
|
+
Version 26.0 (2025-02-27)
|
|
6
|
+
=========================
|
|
7
|
+
|
|
8
|
+
|
|
9
|
+
Features
|
|
10
|
+
--------
|
|
11
|
+
|
|
12
|
+
Breaking changes
|
|
13
|
+
****************
|
|
14
|
+
|
|
15
|
+
- Remove Pydantic based ``ParameterModel``, ``SettingModel``, ``SettingNodeModel``, and ``SweepModel``,
|
|
16
|
+
and inherit ``Parameter``, ``Setting``, ``SettingNode``, and ``Sweep`` from Pydantic model directly.
|
|
17
|
+
As a result, the signature of usage has changed. :issue:`SW-798`
|
|
18
|
+
- Instead of ``copy``, ``model_copy`` (with an optional ``update`` parameter) should be used.
|
|
19
|
+
- For deserialization, for now, use :meth:`SettingNode.deserialize` (Pydantic native approach will be implemented later)
|
|
20
|
+
- ``FunctionSweep`` and ``FunctionOptions`` has been deleted.
|
|
21
|
+
- :class:`.SettingNode` now supports "the path notation" when inserting/getting nodes
|
|
22
|
+
|
|
23
|
+
- Example: ``settings["flux.my.new.path.foo"] = SettingNode(...)`` adds the specified node under the specified path.
|
|
24
|
+
Any missing subnodes will be added.
|
|
25
|
+
|
|
26
|
+
- :class:`.SettingNode` and :class:`.Setting` now have an attribute ``path`` which will be populated by their relative
|
|
27
|
+
path within the settings tree when inserting/creating the node. The base class will also automatically align the name
|
|
28
|
+
of a node with its path, but there is an attribute ``align_name`` which can be set to ``False`` to not align
|
|
29
|
+
(used e.g. in the controllers section of the EXA settings tree).
|
|
30
|
+
- Remove deprecated ``QCMClient.get_chad`` and ``QCMClient.get_qubit_design_properties``.
|
|
31
|
+
|
|
32
|
+
Features
|
|
33
|
+
--------
|
|
34
|
+
|
|
35
|
+
- Settings can now be declared read-only by setting ``read_only = True`` when
|
|
36
|
+
initialising the setting.
|
|
37
|
+
- Modified the html representation of settings tree to support read_only settings.
|
|
38
|
+
- Methods :meth:`.SettingNode.get_gate_node_for_locus`, :meth:`.SettingNode.get_gate_properties_for_locus`,
|
|
39
|
+
:meth:`.SettingNode.get_default_implementation`, and :meth:`.SettingNode.get_locus_node_paths_for` added
|
|
40
|
+
for accessing EXA-specific gate/characterization nodes in the settings tree.
|
|
41
|
+
- Methods :meth:`.SettingNode.add_for_path` and :meth:`.get_node_for_path` that facilitate dealing with long paths
|
|
42
|
+
in setting trees.
|
|
43
|
+
in setting trees.
|
|
44
|
+
- ``Sweep.options`` is deprecated, use ``Sweep.data`` instead. ``data`` can be still generated using different
|
|
45
|
+
sweep options.
|
|
46
|
+
- ``ExponentialSweep``, ``FixedSweep``, and ``LinearSweep`` are deprecated, use ``Sweep`` instead.
|
|
47
|
+
- Split ``DataType.NUMBER`` to ``DataType.FLOAT`` and ``DataType.INT``. ``DataType.NUMBER`` is now handled as a
|
|
48
|
+
deprecated alias for ``DataType.FLOAT``.
|
|
49
|
+
|
|
5
50
|
Version 25.34 (2025-02-06)
|
|
6
|
-
|
|
51
|
+
==========================
|
|
7
52
|
|
|
8
53
|
Bug fixes
|
|
9
54
|
---------
|
|
@@ -11,7 +56,7 @@ Bug fixes
|
|
|
11
56
|
- Bump mechanize test dependency.
|
|
12
57
|
|
|
13
58
|
Version 25.33 (2025-02-04)
|
|
14
|
-
|
|
59
|
+
==========================
|
|
15
60
|
|
|
16
61
|
Features
|
|
17
62
|
--------
|
|
@@ -20,7 +65,7 @@ Features
|
|
|
20
65
|
|
|
21
66
|
|
|
22
67
|
Version 25.32 (2025-02-04)
|
|
23
|
-
|
|
68
|
+
==========================
|
|
24
69
|
|
|
25
70
|
Features
|
|
26
71
|
--------
|
|
@@ -29,14 +74,14 @@ Features
|
|
|
29
74
|
|
|
30
75
|
|
|
31
76
|
Version 25.31 (2025-01-28)
|
|
32
|
-
|
|
77
|
+
==========================
|
|
33
78
|
|
|
34
79
|
Features
|
|
35
80
|
********
|
|
36
81
|
- Support broader range of `numpy` versions and verify compatibily with ruff, see migration guide `https://numpy.org/doc/stable/numpy_2_0_migration_guide.html`.
|
|
37
82
|
|
|
38
83
|
Version 25.30 (2025-01-28)
|
|
39
|
-
|
|
84
|
+
==========================
|
|
40
85
|
|
|
41
86
|
Bug Fixes
|
|
42
87
|
---------
|
|
@@ -45,7 +90,7 @@ Bug Fixes
|
|
|
45
90
|
computational resonators.
|
|
46
91
|
|
|
47
92
|
Version 25.29 (2025-01-27)
|
|
48
|
-
|
|
93
|
+
==========================
|
|
49
94
|
|
|
50
95
|
Features
|
|
51
96
|
--------
|
|
@@ -53,7 +98,7 @@ Features
|
|
|
53
98
|
- Bump version for an updated repo organization. No functional changes. :issue:`SW-1042`
|
|
54
99
|
|
|
55
100
|
Version 25.28 (2025-01-08)
|
|
56
|
-
|
|
101
|
+
==========================
|
|
57
102
|
|
|
58
103
|
Features
|
|
59
104
|
--------
|
|
@@ -61,14 +106,14 @@ Features
|
|
|
61
106
|
- Remove gitlab links from public pages. :issue:`SW-776`
|
|
62
107
|
|
|
63
108
|
Version 25.27 (2024-12-19)
|
|
64
|
-
|
|
109
|
+
==========================
|
|
65
110
|
|
|
66
111
|
Features
|
|
67
112
|
********
|
|
68
113
|
- Bumps xarray
|
|
69
114
|
|
|
70
115
|
Version 25.26 (2024-12-12)
|
|
71
|
-
|
|
116
|
+
==========================
|
|
72
117
|
|
|
73
118
|
Features
|
|
74
119
|
--------
|
|
@@ -76,7 +121,7 @@ Features
|
|
|
76
121
|
- Bump exa-experiments
|
|
77
122
|
|
|
78
123
|
Version 25.25 (2024-12-11)
|
|
79
|
-
|
|
124
|
+
==========================
|
|
80
125
|
|
|
81
126
|
Features
|
|
82
127
|
--------
|
|
@@ -84,7 +129,7 @@ Features
|
|
|
84
129
|
- Fix public PyPI publishing. :issue:`SW-776`
|
|
85
130
|
|
|
86
131
|
Version 25.24 (2024-12-11)
|
|
87
|
-
|
|
132
|
+
==========================
|
|
88
133
|
|
|
89
134
|
Features
|
|
90
135
|
--------
|
|
@@ -92,7 +137,7 @@ Features
|
|
|
92
137
|
- Change license info to Apache 2.0. :issue:`SW-776`
|
|
93
138
|
|
|
94
139
|
Version 25.23 (2024-12-09)
|
|
95
|
-
|
|
140
|
+
==========================
|
|
96
141
|
|
|
97
142
|
Features
|
|
98
143
|
--------
|
|
@@ -100,7 +145,7 @@ Features
|
|
|
100
145
|
Fix extlinks to MRs and issues in sphinx docs config :issue:`SW-916`
|
|
101
146
|
|
|
102
147
|
Version 25.22 (2024-12-05)
|
|
103
|
-
|
|
148
|
+
==========================
|
|
104
149
|
|
|
105
150
|
Features
|
|
106
151
|
--------
|
|
@@ -108,14 +153,14 @@ Features
|
|
|
108
153
|
- Fix intersphinx reference paths in docs :issue:`SW-916`
|
|
109
154
|
|
|
110
155
|
Version 25.21 (2024-12-04)
|
|
111
|
-
|
|
156
|
+
==========================
|
|
112
157
|
|
|
113
158
|
Test
|
|
114
159
|
****
|
|
115
160
|
- Adds unit test for sorting couplers
|
|
116
161
|
|
|
117
162
|
Version 25.20 (2024-12-04)
|
|
118
|
-
|
|
163
|
+
==========================
|
|
119
164
|
|
|
120
165
|
Features
|
|
121
166
|
--------
|
|
@@ -123,7 +168,7 @@ Features
|
|
|
123
168
|
- Bump version for an updated repo organization. No functional changes. :issue:`SW-665`
|
|
124
169
|
|
|
125
170
|
Version 25.19 (2024-11-29)
|
|
126
|
-
|
|
171
|
+
==========================
|
|
127
172
|
|
|
128
173
|
Features
|
|
129
174
|
--------
|
|
@@ -132,7 +177,7 @@ Features
|
|
|
132
177
|
gates, required for :issue:`GBC-589`.
|
|
133
178
|
|
|
134
179
|
Version 25.18 (2024-11-27)
|
|
135
|
-
|
|
180
|
+
==========================
|
|
136
181
|
|
|
137
182
|
Features
|
|
138
183
|
--------
|
|
@@ -140,7 +185,7 @@ Features
|
|
|
140
185
|
- Expand allowed CHEDDAR versions in `qcm_data_client` to include versions 2.x.
|
|
141
186
|
|
|
142
187
|
Version 25.17 (2024-11-19)
|
|
143
|
-
|
|
188
|
+
==========================
|
|
144
189
|
|
|
145
190
|
Features
|
|
146
191
|
--------
|
|
@@ -148,7 +193,7 @@ Features
|
|
|
148
193
|
- Bump version for an updated repo organization. No functional changes. :issue:`SW-774`
|
|
149
194
|
|
|
150
195
|
Version 25.16 (2024-11-15)
|
|
151
|
-
|
|
196
|
+
==========================
|
|
152
197
|
|
|
153
198
|
Bug fixes
|
|
154
199
|
---------
|
|
@@ -156,7 +201,7 @@ Bug fixes
|
|
|
156
201
|
- Remove iqm-internal web links in customer docs artifacts.
|
|
157
202
|
|
|
158
203
|
Version 25.15 (2024-11-08)
|
|
159
|
-
|
|
204
|
+
==========================
|
|
160
205
|
|
|
161
206
|
Features
|
|
162
207
|
--------
|
|
@@ -164,43 +209,43 @@ Features
|
|
|
164
209
|
- New changelog workflow, no functional changes. :issue:`SW-774`
|
|
165
210
|
|
|
166
211
|
Version 25.14 (2024-10-30)
|
|
167
|
-
|
|
212
|
+
==========================
|
|
168
213
|
|
|
169
214
|
- Bump Pydantic to version 2.9.2, :issue:`SW-804`.
|
|
170
215
|
|
|
171
216
|
|
|
172
217
|
Version 25.13 (2024-10-28)
|
|
173
|
-
|
|
218
|
+
==========================
|
|
174
219
|
|
|
175
220
|
- Bump NumPy to version 1.25.2.
|
|
176
221
|
|
|
177
222
|
|
|
178
223
|
Version 25.12 (2024-10-24)
|
|
179
|
-
|
|
224
|
+
==========================
|
|
180
225
|
|
|
181
226
|
- Add sweep validation to :func:`convert_sweeps_to_list_of_tuples` function.
|
|
182
227
|
|
|
183
228
|
|
|
184
229
|
Version 25.11 (2024-10-11)
|
|
185
|
-
|
|
230
|
+
==========================
|
|
186
231
|
|
|
187
232
|
- Add :func:`get_all_common_resonators`
|
|
188
233
|
|
|
189
234
|
|
|
190
235
|
Version 25.10 (2024-10-02)
|
|
191
|
-
|
|
236
|
+
==========================
|
|
192
237
|
|
|
193
238
|
- Bump `iqm-data-definitions` to 2.0.
|
|
194
239
|
|
|
195
240
|
|
|
196
241
|
Version 25.9 (2024-09-23)
|
|
197
|
-
|
|
242
|
+
=========================
|
|
198
243
|
|
|
199
244
|
- Bump dependency `requests` to version 2.32.3
|
|
200
245
|
|
|
201
246
|
|
|
202
247
|
Version 25.8 (2024-09-10)
|
|
203
|
-
|
|
248
|
+
=========================
|
|
204
249
|
|
|
205
250
|
Features
|
|
206
251
|
--------
|
|
@@ -209,7 +254,7 @@ Features
|
|
|
209
254
|
|
|
210
255
|
|
|
211
256
|
Version 25.7 (2024-08-23)
|
|
212
|
-
|
|
257
|
+
=========================
|
|
213
258
|
|
|
214
259
|
Bug fix
|
|
215
260
|
-------
|
|
@@ -217,7 +262,7 @@ Bug fix
|
|
|
217
262
|
|
|
218
263
|
|
|
219
264
|
Version 25.6 (2024-08-16)
|
|
220
|
-
|
|
265
|
+
=========================
|
|
221
266
|
|
|
222
267
|
Bug fix
|
|
223
268
|
-------
|
|
@@ -226,7 +271,7 @@ Bug fix
|
|
|
226
271
|
|
|
227
272
|
|
|
228
273
|
Version 25.5 (2024-08-15)
|
|
229
|
-
|
|
274
|
+
=========================
|
|
230
275
|
|
|
231
276
|
Features
|
|
232
277
|
--------
|
|
@@ -237,7 +282,7 @@ Features
|
|
|
237
282
|
|
|
238
283
|
|
|
239
284
|
Version 25.4 (2024-07-12)
|
|
240
|
-
|
|
285
|
+
=========================
|
|
241
286
|
|
|
242
287
|
Features
|
|
243
288
|
--------
|
|
@@ -246,7 +291,7 @@ Features
|
|
|
246
291
|
|
|
247
292
|
|
|
248
293
|
Version 25.3 (2024-07-05)
|
|
249
|
-
|
|
294
|
+
=========================
|
|
250
295
|
|
|
251
296
|
Features
|
|
252
297
|
--------
|
|
@@ -257,7 +302,7 @@ Features
|
|
|
257
302
|
|
|
258
303
|
|
|
259
304
|
Version 25.2 (2024-07-04)
|
|
260
|
-
|
|
305
|
+
=========================
|
|
261
306
|
|
|
262
307
|
Features
|
|
263
308
|
--------
|
|
@@ -266,7 +311,7 @@ Features
|
|
|
266
311
|
|
|
267
312
|
|
|
268
313
|
Version 25.1 (2024-06-27)
|
|
269
|
-
|
|
314
|
+
=========================
|
|
270
315
|
|
|
271
316
|
Features
|
|
272
317
|
--------
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: iqm-exa-common
|
|
3
|
-
Version:
|
|
3
|
+
Version: 26.0
|
|
4
4
|
Summary: Framework for control and measurement of superconducting qubits: common library
|
|
5
5
|
Author-email: IQM Finland Oy <info@meetiqm.com>
|
|
6
6
|
License: Apache License
|
|
@@ -215,7 +215,7 @@ Description-Content-Type: text/x-rst
|
|
|
215
215
|
License-File: LICENSE.txt
|
|
216
216
|
Requires-Dist: iqm-data-definitions<3.0,>=2.6
|
|
217
217
|
Requires-Dist: numpy<3.0,>=1.25.2
|
|
218
|
-
Requires-Dist: pydantic<3.0,>=2.
|
|
218
|
+
Requires-Dist: pydantic<3.0,>=2.10.4
|
|
219
219
|
Requires-Dist: python-dotenv==0.21.1
|
|
220
220
|
Requires-Dist: xarray==2024.10.0
|
|
221
221
|
Requires-Dist: requests==2.32.3
|
{iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/api/proto_serialization/_parameter.py
RENAMED
|
@@ -27,13 +27,14 @@ _collection_types_inv = {v: k for k, v in _COLLECTION_TYPES.items()}
|
|
|
27
27
|
|
|
28
28
|
_DATA_TYPES = {
|
|
29
29
|
DataType.ANYTHING: ppb.Parameter.DataType.DATA_TYPE_UNSPECIFIED,
|
|
30
|
-
DataType.NUMBER: ppb.Parameter.DataType.DATA_TYPE_FLOAT64,
|
|
30
|
+
DataType.NUMBER: ppb.Parameter.DataType.DATA_TYPE_FLOAT64, # Deprecated
|
|
31
31
|
DataType.STRING: ppb.Parameter.DataType.DATA_TYPE_STRING,
|
|
32
32
|
DataType.COMPLEX: ppb.Parameter.DataType.DATA_TYPE_COMPLEX128,
|
|
33
33
|
DataType.BOOLEAN: ppb.Parameter.DataType.DATA_TYPE_BOOL,
|
|
34
|
+
DataType.INT: ppb.Parameter.DataType.DATA_TYPE_INT64,
|
|
35
|
+
DataType.FLOAT: ppb.Parameter.DataType.DATA_TYPE_FLOAT64,
|
|
34
36
|
}
|
|
35
|
-
_data_types_inv = {v: k for k, v in _DATA_TYPES.items()}
|
|
36
|
-
_data_types_inv[ppb.Parameter.DataType.DATA_TYPE_INT64] = DataType.NUMBER # TODO add DataType.INT?
|
|
37
|
+
_data_types_inv = {v: k for k, v in _DATA_TYPES.items() if k != DataType.NUMBER}
|
|
37
38
|
|
|
38
39
|
|
|
39
40
|
def pack(parameter: Parameter) -> ppb.Parameter:
|
{iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/api/proto_serialization/nd_sweep.py
RENAMED
|
@@ -18,8 +18,6 @@ import iqm.data_definitions.common.v1.sweep_pb2 as spb
|
|
|
18
18
|
|
|
19
19
|
from exa.common.api.proto_serialization import sequence
|
|
20
20
|
import exa.common.api.proto_serialization._parameter as param_proto
|
|
21
|
-
from exa.common.control.sweep.fixed_sweep import FixedSweep
|
|
22
|
-
from exa.common.control.sweep.option.fixed_options import FixedOptions
|
|
23
21
|
from exa.common.control.sweep.sweep import Sweep
|
|
24
22
|
from exa.common.data.parameter import DataType, Parameter
|
|
25
23
|
from exa.common.sweep.util import NdSweep
|
|
@@ -41,10 +39,7 @@ def pack(nd_sweep: NdSweep, minimal: bool = True) -> spb.CartesianSweep:
|
|
|
41
39
|
|
|
42
40
|
|
|
43
41
|
def unpack(proto: spb.CartesianSweep) -> NdSweep:
|
|
44
|
-
"""Convert protobuf representation into a NdSweep. Reverse operation of :func:`.pack`.
|
|
45
|
-
|
|
46
|
-
Note: All sweeps will be of type :class:`.FixedSweep`.
|
|
47
|
-
"""
|
|
42
|
+
"""Convert protobuf representation into a NdSweep. Reverse operation of :func:`.pack`."""
|
|
48
43
|
nd_sweep = []
|
|
49
44
|
for parallel_proto in reversed(proto.parallel_sweeps):
|
|
50
45
|
parallel = tuple(_unpack_single_sweep(sweep) for sweep in parallel_proto.single_parameter_sweeps)
|
|
@@ -59,10 +54,10 @@ def _pack_single_sweep(sweep: Sweep, minimal: bool) -> spb.SingleParameterSweep:
|
|
|
59
54
|
return spb.SingleParameterSweep(**kwargs)
|
|
60
55
|
|
|
61
56
|
|
|
62
|
-
def _unpack_single_sweep(proto: spb.SingleParameterSweep) ->
|
|
57
|
+
def _unpack_single_sweep(proto: spb.SingleParameterSweep) -> Sweep:
|
|
63
58
|
sweep_values = sequence.unpack(proto.values)
|
|
64
59
|
if proto.HasField("parameter"):
|
|
65
60
|
parameter = param_proto.unpack(proto.parameter)
|
|
66
61
|
else:
|
|
67
62
|
parameter = Parameter(proto.parameter_name, data_type=DataType.ANYTHING)
|
|
68
|
-
return
|
|
63
|
+
return Sweep(parameter=parameter, data=sweep_values)
|
{iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/api/proto_serialization/sequence.py
RENAMED
|
@@ -37,18 +37,18 @@ def pack(values: Sequence) -> dpb.Sequence:
|
|
|
37
37
|
if not values:
|
|
38
38
|
return target
|
|
39
39
|
dtype = type(values[0])
|
|
40
|
-
if dtype
|
|
40
|
+
if dtype is complex:
|
|
41
41
|
target_field = target.complex128_array
|
|
42
42
|
target_field.real.MergeFrom(np.real(values))
|
|
43
43
|
target_field.imag.MergeFrom(np.imag(values))
|
|
44
44
|
return target
|
|
45
|
-
if dtype
|
|
45
|
+
if dtype is bool:
|
|
46
46
|
target_field = target.bool_array
|
|
47
|
-
elif dtype
|
|
47
|
+
elif dtype is int:
|
|
48
48
|
target_field = target.int64_array
|
|
49
|
-
elif dtype
|
|
49
|
+
elif dtype is float:
|
|
50
50
|
target_field = target.float64_array
|
|
51
|
-
elif dtype
|
|
51
|
+
elif dtype is str:
|
|
52
52
|
target_field = target.string_array
|
|
53
53
|
else:
|
|
54
54
|
raise TypeError(f"Unsupported numpy array type {dtype} for a sequence.")
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Copyright 2024 IQM
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
"""Sweep specification with exponentially spaced values."""
|
|
16
|
+
|
|
17
|
+
from typing import Any
|
|
18
|
+
import warnings
|
|
19
|
+
|
|
20
|
+
from exa.common.control.sweep.option import CenterSpanBaseOptions, StartStopBaseOptions
|
|
21
|
+
from exa.common.control.sweep.sweep import Sweep
|
|
22
|
+
from exa.common.data.parameter import Parameter
|
|
23
|
+
from exa.common.errors.exa_error import InvalidSweepOptionsTypeError
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class ExponentialSweep(Sweep):
|
|
27
|
+
"""Generates parameter values spaced evenly on a geometric progression based on `options`.
|
|
28
|
+
|
|
29
|
+
- If `options` is instance of :class:`.StartStopBaseOptions`,
|
|
30
|
+
the start and stop of the interval are calculated from powers of start and stop.
|
|
31
|
+
- If `options` is instance of :class:`.CenterSpanBaseOptions`,
|
|
32
|
+
the start and stop of the interval are calculated from powers of start and stop,
|
|
33
|
+
which are derived from center and span.
|
|
34
|
+
|
|
35
|
+
Raises:
|
|
36
|
+
ValueError: Error is raised if `options` is inconsistent.
|
|
37
|
+
|
|
38
|
+
"""
|
|
39
|
+
|
|
40
|
+
def __init__(
|
|
41
|
+
self,
|
|
42
|
+
parameter: Parameter,
|
|
43
|
+
options: StartStopBaseOptions | CenterSpanBaseOptions | None = None,
|
|
44
|
+
*,
|
|
45
|
+
data: list[Any] | None = None,
|
|
46
|
+
**kwargs,
|
|
47
|
+
) -> None:
|
|
48
|
+
warnings.warn("ExponentialSweep is deprecated, use Sweep instead.", DeprecationWarning)
|
|
49
|
+
if options and not isinstance(options, StartStopBaseOptions | CenterSpanBaseOptions):
|
|
50
|
+
raise InvalidSweepOptionsTypeError(str(type(options)))
|
|
51
|
+
super().__init__(parameter, options, data=data, **kwargs)
|
|
@@ -14,26 +14,22 @@
|
|
|
14
14
|
|
|
15
15
|
"""Sweep specification with arbitrary values."""
|
|
16
16
|
|
|
17
|
-
from
|
|
18
|
-
|
|
19
|
-
import numpy as np
|
|
17
|
+
from typing import Any
|
|
18
|
+
import warnings
|
|
20
19
|
|
|
21
20
|
from exa.common.control.sweep.option import FixedOptions
|
|
22
21
|
from exa.common.control.sweep.sweep import Sweep
|
|
22
|
+
from exa.common.data.parameter import Parameter
|
|
23
23
|
from exa.common.errors.exa_error import InvalidSweepOptionsTypeError
|
|
24
24
|
|
|
25
25
|
|
|
26
|
-
@dataclass(frozen=True)
|
|
27
26
|
class FixedSweep(Sweep):
|
|
28
27
|
"""A sweep over arbitrary set of values, given by `options`."""
|
|
29
28
|
|
|
30
|
-
def
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
if not
|
|
35
|
-
raise
|
|
36
|
-
|
|
37
|
-
)
|
|
38
|
-
data = np.asarray(self.options.fixed).tolist()
|
|
39
|
-
object.__setattr__(self, "_data", data)
|
|
29
|
+
def __init__(
|
|
30
|
+
self, parameter: Parameter, options: FixedOptions | None = None, *, data: list[Any] | None = None, **kwargs
|
|
31
|
+
) -> None:
|
|
32
|
+
warnings.warn("FixedSweep is deprecated, use Sweep instead.", DeprecationWarning)
|
|
33
|
+
if options and not isinstance(options, FixedOptions):
|
|
34
|
+
raise InvalidSweepOptionsTypeError(str(type(options)))
|
|
35
|
+
super().__init__(parameter, options, data=data, **kwargs)
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Copyright 2024 IQM
|
|
2
|
+
#
|
|
3
|
+
# Licensed under the Apache License, Version 2.0 (the "License");
|
|
4
|
+
# you may not use this file except in compliance with the License.
|
|
5
|
+
# You may obtain a copy of the License at
|
|
6
|
+
#
|
|
7
|
+
# http://www.apache.org/licenses/LICENSE-2.0
|
|
8
|
+
#
|
|
9
|
+
# Unless required by applicable law or agreed to in writing, software
|
|
10
|
+
# distributed under the License is distributed on an "AS IS" BASIS,
|
|
11
|
+
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
|
+
# See the License for the specific language governing permissions and
|
|
13
|
+
# limitations under the License.
|
|
14
|
+
|
|
15
|
+
"""Sweep specification with linearly spaced values."""
|
|
16
|
+
|
|
17
|
+
from typing import Any
|
|
18
|
+
import warnings
|
|
19
|
+
|
|
20
|
+
from exa.common.control.sweep.option import CenterSpanOptions, StartStopOptions
|
|
21
|
+
from exa.common.control.sweep.sweep import Sweep
|
|
22
|
+
from exa.common.data.parameter import Parameter
|
|
23
|
+
from exa.common.errors.exa_error import InvalidSweepOptionsTypeError
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
class LinearSweep(Sweep):
|
|
27
|
+
"""Generates evenly spaced parameter values based on `options`.
|
|
28
|
+
|
|
29
|
+
- If `options` is instance of :class:`.StartStopOptions`, then start and stop options are used for interval
|
|
30
|
+
- If `options` is instance of :class:`.CenterSpanOptions`,
|
|
31
|
+
then the start and stop of the interval are calculated from center and span values
|
|
32
|
+
|
|
33
|
+
Raises:
|
|
34
|
+
ValueError: Error is raised if `options` is inconsistent.
|
|
35
|
+
|
|
36
|
+
"""
|
|
37
|
+
|
|
38
|
+
def __init__(
|
|
39
|
+
self,
|
|
40
|
+
parameter: Parameter,
|
|
41
|
+
options: StartStopOptions | CenterSpanOptions | None = None,
|
|
42
|
+
*,
|
|
43
|
+
data: list[Any] | None = None,
|
|
44
|
+
**kwargs,
|
|
45
|
+
) -> None:
|
|
46
|
+
warnings.warn("LinearSweep is deprecated, use Sweep instead.", DeprecationWarning)
|
|
47
|
+
if options and not isinstance(options, StartStopOptions | CenterSpanOptions):
|
|
48
|
+
raise InvalidSweepOptionsTypeError(str(type(options)))
|
|
49
|
+
super().__init__(parameter, options, data=data, **kwargs)
|
{iqm_exa_common-25.34 → iqm_exa_common-26.0}/src/exa/common/control/sweep/option/__init__.py
RENAMED
|
@@ -11,12 +11,12 @@
|
|
|
11
11
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
|
+
|
|
14
15
|
"""Range specifications for Sweeps."""
|
|
15
16
|
|
|
16
17
|
from .center_span_base_options import CenterSpanBaseOptions
|
|
17
18
|
from .center_span_options import CenterSpanOptions
|
|
18
19
|
from .fixed_options import FixedOptions
|
|
19
|
-
from .function_options import FunctionOptions
|
|
20
20
|
from .start_stop_base_options import StartStopBaseOptions
|
|
21
21
|
from .start_stop_options import StartStopOptions
|
|
22
22
|
from .sweep_options import SweepOptions
|
|
@@ -12,12 +12,12 @@
|
|
|
12
12
|
# See the License for the specific language governing permissions and
|
|
13
13
|
# limitations under the License.
|
|
14
14
|
|
|
15
|
-
"""Range specification used with
|
|
15
|
+
"""Range specification used with exponential sweeps."""
|
|
16
16
|
|
|
17
17
|
from dataclasses import dataclass
|
|
18
|
-
from typing import Union
|
|
19
18
|
|
|
20
19
|
from exa.common.control.sweep.option.constants import DEFAULT_BASE, DEFAULT_COUNT
|
|
20
|
+
from exa.common.control.sweep.option.start_stop_base_options import StartStopBaseOptions
|
|
21
21
|
from exa.common.control.sweep.option.sweep_options import SweepOptions
|
|
22
22
|
|
|
23
23
|
|
|
@@ -32,17 +32,17 @@ class CenterSpanBaseOptions(SweepOptions):
|
|
|
32
32
|
"""
|
|
33
33
|
|
|
34
34
|
#: Value of interval center for the power.
|
|
35
|
-
center:
|
|
35
|
+
center: int | float
|
|
36
36
|
#: Size of the interval for the power
|
|
37
|
-
span:
|
|
37
|
+
span: int | float
|
|
38
38
|
#: Number of values to generate. Default to
|
|
39
39
|
#: :const:`exa.common.control.sweep.option.constants.DEFAULT_COUNT`.
|
|
40
|
-
count: int = None
|
|
40
|
+
count: int | None = None
|
|
41
41
|
#: Number, that is raised to the power of the range with the center `center` and the size of `span`.
|
|
42
42
|
# Default to :const:`exa.common.control.sweep.option.constants.DEFAULT_BASE`.
|
|
43
|
-
base:
|
|
43
|
+
base: int | float | None = None
|
|
44
44
|
#: Order of generated values. Default to ascending
|
|
45
|
-
asc: bool = None
|
|
45
|
+
asc: bool | None = None
|
|
46
46
|
|
|
47
47
|
def __post_init__(self):
|
|
48
48
|
if self.count is None:
|
|
@@ -51,3 +51,10 @@ class CenterSpanBaseOptions(SweepOptions):
|
|
|
51
51
|
object.__setattr__(self, "base", DEFAULT_BASE)
|
|
52
52
|
if self.asc is None:
|
|
53
53
|
object.__setattr__(self, "asc", True)
|
|
54
|
+
|
|
55
|
+
@property
|
|
56
|
+
def data(self) -> list[int | float | complex]:
|
|
57
|
+
start = self.center - (self.span / 2)
|
|
58
|
+
stop = self.center + (self.span / 2)
|
|
59
|
+
(start, stop) = (start, stop) if self.asc else (stop, start)
|
|
60
|
+
return StartStopBaseOptions(start, stop, count=self.count, base=self.base).data
|