iqm-exa-common 26.8__tar.gz → 26.10__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 (80) hide show
  1. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/CHANGELOG.rst +16 -0
  2. {iqm_exa_common-26.8/src/iqm_exa_common.egg-info → iqm_exa_common-26.10}/PKG-INFO +1 -1
  3. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/pyproject.toml +1 -1
  4. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/api/proto_serialization/datum.py +6 -6
  5. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/api/proto_serialization/sequence.py +1 -1
  6. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/data/parameter.py +2 -1
  7. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/data/setting_node.py +2 -2
  8. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/helpers/data_helper.py +1 -2
  9. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/helpers/json_helper.py +2 -1
  10. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/helpers/software_version_helper.py +1 -2
  11. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/logger/logger.py +5 -4
  12. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/qcm_data/chad_model.py +1 -2
  13. {iqm_exa_common-26.8 → iqm_exa_common-26.10/src/iqm_exa_common.egg-info}/PKG-INFO +1 -1
  14. iqm_exa_common-26.10/version.txt +1 -0
  15. iqm_exa_common-26.8/version.txt +0 -1
  16. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/LICENSE.txt +0 -0
  17. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/MANIFEST.in +0 -0
  18. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/README.rst +0 -0
  19. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/docs/API.rst +0 -0
  20. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/docs/Makefile +0 -0
  21. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/docs/_static/.gitignore +0 -0
  22. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/docs/_static/css/custom.css +0 -0
  23. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/docs/_static/images/favicon.ico +0 -0
  24. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/docs/_static/images/logo.png +0 -0
  25. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/docs/_templates/autosummary-class-template.rst +0 -0
  26. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/docs/_templates/autosummary-module-template.rst +0 -0
  27. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/docs/changelog.rst +0 -0
  28. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/docs/conf.py +0 -0
  29. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/docs/index.rst +0 -0
  30. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/docs/license.rst +0 -0
  31. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/requirements/base.in +0 -0
  32. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/requirements/base.txt +0 -0
  33. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/setup.cfg +0 -0
  34. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/setup.py +0 -0
  35. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/__init__.py +0 -0
  36. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/api/__init__.py +0 -0
  37. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/api/proto_serialization/__init__.py +0 -0
  38. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/api/proto_serialization/_parameter.py +0 -0
  39. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/api/proto_serialization/array.py +0 -0
  40. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/api/proto_serialization/nd_sweep.py +0 -0
  41. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/api/proto_serialization/setting_node.py +0 -0
  42. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/control/__init__.py +0 -0
  43. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/control/sweep/__init__.py +0 -0
  44. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/control/sweep/exponential_sweep.py +0 -0
  45. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/control/sweep/fixed_sweep.py +0 -0
  46. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/control/sweep/linear_sweep.py +0 -0
  47. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/control/sweep/option/__init__.py +0 -0
  48. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/control/sweep/option/center_span_base_options.py +0 -0
  49. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/control/sweep/option/center_span_options.py +0 -0
  50. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/control/sweep/option/constants.py +0 -0
  51. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/control/sweep/option/fixed_options.py +0 -0
  52. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/control/sweep/option/option_converter.py +0 -0
  53. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/control/sweep/option/start_stop_base_options.py +0 -0
  54. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/control/sweep/option/start_stop_options.py +0 -0
  55. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/control/sweep/option/sweep_options.py +0 -0
  56. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/control/sweep/sweep.py +0 -0
  57. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/control/sweep/sweep_values.py +0 -0
  58. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/data/__init__.py +0 -0
  59. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/data/base_model.py +0 -0
  60. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/data/settingnode_v2.html.jinja2 +0 -0
  61. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/data/value.py +0 -0
  62. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/errors/__init__.py +0 -0
  63. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/errors/exa_error.py +0 -0
  64. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/errors/server_errors.py +0 -0
  65. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/helpers/__init__.py +0 -0
  66. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/helpers/deprecation.py +0 -0
  67. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/helpers/numpy_helper.py +0 -0
  68. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/logger/__init__.py +0 -0
  69. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/qcm_data/__init__.py +0 -0
  70. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/qcm_data/chip_topology.py +0 -0
  71. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/qcm_data/file_adapter.py +0 -0
  72. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/qcm_data/immutable_base_model.py +0 -0
  73. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/qcm_data/qcm_data_client.py +0 -0
  74. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/sweep/__init__.py +0 -0
  75. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/sweep/database_serialization.py +0 -0
  76. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/exa/common/sweep/util.py +0 -0
  77. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/iqm_exa_common.egg-info/SOURCES.txt +0 -0
  78. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/iqm_exa_common.egg-info/dependency_links.txt +0 -0
  79. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/iqm_exa_common.egg-info/requires.txt +0 -0
  80. {iqm_exa_common-26.8 → iqm_exa_common-26.10}/src/iqm_exa_common.egg-info/top_level.txt +0 -0
@@ -2,6 +2,22 @@
2
2
  Changelog
3
3
  =========
4
4
 
5
+ Version 26.10 (2025-04-07)
6
+ ==========================
7
+
8
+ Features
9
+ --------
10
+
11
+ - Fix package version in published docs footers, :issue:`SW-1392`.
12
+
13
+ Version 26.9 (2025-04-03)
14
+ =========================
15
+
16
+ Feature
17
+ *******
18
+
19
+ - Format code and enable PEP 604 in linting rules, :issue:`SW-1230`.
20
+
5
21
  Version 26.8 (2025-04-02)
6
22
  =========================
7
23
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: iqm-exa-common
3
- Version: 26.8
3
+ Version: 26.10
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
@@ -44,7 +44,7 @@ nb_diff_ignore = [ "/metadata/language_info", "/metadata/widgets", "/cells/*/exe
44
44
 
45
45
  [tool.ruff.lint]
46
46
  ignore = [ "D203", "D213",]
47
- select = [ "E4", "E7", "E9", "E5", "F", "Q", "PL", "I", "D",]
47
+ select = [ "E4", "E7", "E9", "E5", "F", "Q", "PL", "I", "D", "UP007", "UP006", "UP035",]
48
48
  unfixable = [ "F401",]
49
49
 
50
50
  [tool.ruff.lint.isort]
@@ -14,7 +14,7 @@
14
14
 
15
15
  """Convert native Python types and numpy arrays to protos and back."""
16
16
 
17
- from typing import Optional, Sequence, Union
17
+ from collections.abc import Sequence
18
18
 
19
19
  import iqm.data_definitions.common.v1.data_types_pb2 as dpb
20
20
  import numpy as np
@@ -22,7 +22,7 @@ import numpy as np
22
22
  from exa.common.api.proto_serialization import array, sequence
23
23
 
24
24
 
25
- def pack(value: Union[None, bool, str, int, float, complex, np.ndarray, Sequence]) -> dpb.Datum:
25
+ def pack(value: None | bool | str | int | float | complex | np.ndarray | Sequence) -> dpb.Datum:
26
26
  """Packs a string, numerical value, or an array thereof into protobuf format.
27
27
 
28
28
  Supported data types are:
@@ -66,7 +66,7 @@ def pack(value: Union[None, bool, str, int, float, complex, np.ndarray, Sequence
66
66
  raise TypeError(f"Encoding of type '{type(value)}' is not supported.")
67
67
 
68
68
 
69
- def unpack(source: dpb.Datum) -> Union[None, str, bool, int, float, complex, np.ndarray, list]:
69
+ def unpack(source: dpb.Datum) -> None | str | bool | int | float | complex | np.ndarray | list:
70
70
  """Unpacks a protobuf into a native Python type or a numpy array. Reverse operation of :func:`.pack`.
71
71
 
72
72
  Args:
@@ -99,7 +99,7 @@ def unpack(source: dpb.Datum) -> Union[None, str, bool, int, float, complex, np.
99
99
  raise TypeError(f"Unrecognized datatype field {field_name}")
100
100
 
101
101
 
102
- def serialize(value: Union[None, bool, str, int, float, complex, np.ndarray, Sequence]) -> bytes:
102
+ def serialize(value: None | bool | str | int | float | complex | np.ndarray | Sequence) -> bytes:
103
103
  """Serialize a piece of data into a bitstring.
104
104
 
105
105
  Args:
@@ -112,7 +112,7 @@ def serialize(value: Union[None, bool, str, int, float, complex, np.ndarray, Seq
112
112
  return pack(value).SerializeToString()
113
113
 
114
114
 
115
- def deserialize(source: bytes) -> Union[None, str, bool, int, float, complex, np.ndarray, list]:
115
+ def deserialize(source: bytes) -> None | str | bool | int | float | complex | np.ndarray | list:
116
116
  """Deserialize a bitstring into a native Python type or a numpy array. Reverse operation of :func:`.serialize`.
117
117
 
118
118
  Args:
@@ -127,7 +127,7 @@ def deserialize(source: bytes) -> Union[None, str, bool, int, float, complex, np
127
127
  return unpack(proto)
128
128
 
129
129
 
130
- def _pack_complex128(value: Union[np.complex128, complex], target: Optional[dpb.Complex128] = None) -> dpb.Complex128:
130
+ def _pack_complex128(value: np.complex128 | complex, target: dpb.Complex128 | None = None) -> dpb.Complex128:
131
131
  """Packs a numpy complex128 to the respective protobuf type."""
132
132
  target = target or dpb.Complex128()
133
133
  target.real = value.real
@@ -14,7 +14,7 @@
14
14
 
15
15
  """Convert Python Sequences to protos and back."""
16
16
 
17
- from typing import Sequence
17
+ from collections.abc import Sequence
18
18
 
19
19
  import iqm.data_definitions.common.v1.data_types_pb2 as dpb
20
20
  import numpy as np
@@ -58,9 +58,10 @@ parameter.
58
58
  from __future__ import annotations
59
59
 
60
60
  import ast
61
+ from collections.abc import Hashable
61
62
  import copy
62
63
  from enum import IntEnum
63
- from typing import Any, Hashable, Self
64
+ from typing import Any, Self
64
65
  import warnings
65
66
 
66
67
  import numpy as np
@@ -205,13 +205,13 @@ flag is used.
205
205
 
206
206
  from __future__ import annotations
207
207
 
208
- from collections.abc import Generator, ItemsView, Iterator
208
+ from collections.abc import Generator, ItemsView, Iterable, Iterator
209
209
  from copy import copy
210
210
  from itertools import permutations
211
211
  import logging
212
212
  import numbers
213
213
  import pathlib
214
- from typing import Any, Iterable
214
+ from typing import Any
215
215
 
216
216
  import jinja2
217
217
  import numpy as np
@@ -12,7 +12,6 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
- from typing import Optional
16
15
 
17
16
  import xarray as xr
18
17
 
@@ -20,7 +19,7 @@ import xarray as xr
20
19
  """
21
20
 
22
21
 
23
- def add_data_array(ds: xr.Dataset, da: xr.DataArray, name: Optional[str] = None) -> xr.Dataset:
22
+ def add_data_array(ds: xr.Dataset, da: xr.DataArray, name: str | None = None) -> xr.Dataset:
24
23
  """Add data array `da` to dataset `ds`.
25
24
 
26
25
  Unlike the default xarray command, preserves metadata of the dataset.
@@ -13,7 +13,8 @@
13
13
  # limitations under the License.
14
14
 
15
15
  import base64
16
- from typing import Any, Callable
16
+ from collections.abc import Callable
17
+ from typing import Any
17
18
 
18
19
  import numpy as np
19
20
 
@@ -17,7 +17,6 @@ from importlib.metadata import distribution
17
17
  import os
18
18
  import platform
19
19
  import subprocess
20
- from typing import Optional
21
20
 
22
21
  import pkg_resources
23
22
 
@@ -79,7 +78,7 @@ def get_all_software_versions(reload_module: bool = False) -> dict[str, str]:
79
78
  return software_versions
80
79
 
81
80
 
82
- def get_vcs_description(root_directory: str) -> Optional[str]:
81
+ def get_vcs_description(root_directory: str) -> str | None:
83
82
  """Get Version Control System (VCS) description for the caller's current working directory.
84
83
 
85
84
  The description is used to verify if a directory is installed under VCS and whether changes to the files have
@@ -12,9 +12,10 @@
12
12
  # See the License for the specific language governing permissions and
13
13
  # limitations under the License.
14
14
 
15
+ from collections.abc import Callable
15
16
  import logging
16
17
  import logging.config
17
- from typing import Any, Callable, Optional
18
+ from typing import Any
18
19
 
19
20
  BRIEF_DATEFMT = "%m-%d %H:%M:%S"
20
21
 
@@ -25,7 +26,7 @@ VERBOSE = "[{asctime};{levelname};{processName}({process});{threadName}({thread}
25
26
  class ExtraFormatter(logging.Formatter):
26
27
  """Helper formatter class to pass in arbitrary extra information to log messages."""
27
28
 
28
- def __init__(self, *args, extra_info_getter: Optional[Callable[[], str]] = None, **kwargs):
29
+ def __init__(self, *args, extra_info_getter: Callable[[], str] | None = None, **kwargs):
29
30
  self.extra_info_getter = extra_info_getter if extra_info_getter is not None else lambda: ""
30
31
  super().__init__(*args, **kwargs)
31
32
 
@@ -43,10 +44,10 @@ class InfoFilter(logging.Filter):
43
44
 
44
45
 
45
46
  def init_loggers(
46
- loggers: Optional[dict[str, Optional[str]]] = None,
47
+ loggers: dict[str, str | None] | None = None,
47
48
  default_level: str = "INFO",
48
49
  verbose: bool = False,
49
- extra_info_getter: Optional[Callable[[], str]] = None,
50
+ extra_info_getter: Callable[[], str] | None = None,
50
51
  ) -> None:
51
52
  """Set the log level of given logger names.
52
53
 
@@ -17,7 +17,6 @@
17
17
  from collections.abc import Collection
18
18
  from functools import cached_property
19
19
  import re
20
- from typing import Union
21
20
 
22
21
  from pydantic import Field, field_validator
23
22
 
@@ -167,7 +166,7 @@ class CHAD(ImmutableBaseModel):
167
166
 
168
167
  launchers = {launcher.name: launcher for launcher in self.components.launchers}
169
168
 
170
- component: Union[Qubit, Coupler]
169
+ component: Qubit | Coupler
171
170
  for component in [*self.components.qubits, *self.components.couplers]:
172
171
  component_type = "qubit" if isinstance(component, Qubit) else "coupler"
173
172
  if component.name in component_names:
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: iqm-exa-common
3
- Version: 26.8
3
+ Version: 26.10
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
@@ -0,0 +1 @@
1
+ 26.10
@@ -1 +0,0 @@
1
- 26.8
File without changes
File without changes
File without changes