iqm-station-control-client 9.17.0__tar.gz → 10.0.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 (85) hide show
  1. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/CHANGELOG.rst +16 -0
  2. {iqm_station_control_client-9.17.0/src/iqm_station_control_client.egg-info → iqm_station_control_client-10.0.0}/PKG-INFO +1 -1
  3. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/pyproject.toml +3 -3
  4. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/client/iqm_server/grpc_utils.py +4 -4
  5. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/client/iqm_server/iqm_server_client.py +1 -1
  6. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/client/iqm_server/testing/iqm_server_mock.py +11 -11
  7. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/client/list_models.py +1 -1
  8. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/client/qon.py +1 -1
  9. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/client/station_control.py +1 -1
  10. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/interface/models/jobs.py +2 -2
  11. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/interface/models/observation_set.py +14 -1
  12. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/interface/models/type_aliases.py +0 -1
  13. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0/src/iqm_station_control_client.egg-info}/PKG-INFO +1 -1
  14. iqm_station_control_client-10.0.0/version.txt +1 -0
  15. iqm_station_control_client-9.17.0/version.txt +0 -1
  16. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/LICENSE.txt +0 -0
  17. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/MANIFEST.in +0 -0
  18. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/README.rst +0 -0
  19. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/docs/API.rst +0 -0
  20. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/docs/Makefile +0 -0
  21. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/docs/_static/css/custom.css +0 -0
  22. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/docs/_static/images/favicon.ico +0 -0
  23. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/docs/_static/images/logo.png +0 -0
  24. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/docs/_templates/autosummary-class-template.rst +0 -0
  25. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/docs/_templates/autosummary-module-template.rst +0 -0
  26. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/docs/changelog.rst +0 -0
  27. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/docs/conf.py +0 -0
  28. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/docs/index.rst +0 -0
  29. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/docs/license.rst +0 -0
  30. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/requirements/base.in +0 -0
  31. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/requirements/base.in.internal +0 -0
  32. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/requirements/base.txt +0 -0
  33. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/setup.cfg +0 -0
  34. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/setup.py +0 -0
  35. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/client/__init__.py +0 -0
  36. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/client/iqm_server/__init__.py +0 -0
  37. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/client/iqm_server/error.py +0 -0
  38. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/client/iqm_server/proto/__init__.py +0 -0
  39. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/client/iqm_server/proto/calibration_pb2.py +0 -0
  40. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/client/iqm_server/proto/calibration_pb2.pyi +0 -0
  41. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/client/iqm_server/proto/calibration_pb2_grpc.py +0 -0
  42. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/client/iqm_server/proto/common_pb2.py +0 -0
  43. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/client/iqm_server/proto/common_pb2.pyi +0 -0
  44. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/client/iqm_server/proto/common_pb2_grpc.py +0 -0
  45. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/client/iqm_server/proto/job_pb2.py +0 -0
  46. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/client/iqm_server/proto/job_pb2.pyi +0 -0
  47. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/client/iqm_server/proto/job_pb2_grpc.py +0 -0
  48. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/client/iqm_server/proto/qc_pb2.py +0 -0
  49. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/client/iqm_server/proto/qc_pb2.pyi +0 -0
  50. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/client/iqm_server/proto/qc_pb2_grpc.py +0 -0
  51. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/client/iqm_server/proto/uuid_pb2.py +0 -0
  52. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/client/iqm_server/proto/uuid_pb2.pyi +0 -0
  53. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/client/iqm_server/proto/uuid_pb2_grpc.py +0 -0
  54. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/client/iqm_server/testing/__init__.py +0 -0
  55. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/client/py.typed +0 -0
  56. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/client/serializers/__init__.py +0 -0
  57. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/client/serializers/channel_property_serializer.py +0 -0
  58. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/client/serializers/datetime_serializers.py +0 -0
  59. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/client/serializers/playlist_serializers.py +0 -0
  60. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/client/serializers/run_serializers.py +0 -0
  61. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/client/serializers/setting_node_serializer.py +0 -0
  62. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/client/serializers/struct_serializer.py +0 -0
  63. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/client/serializers/sweep_serializers.py +0 -0
  64. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/client/serializers/task_serializers.py +0 -0
  65. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/client/utils.py +0 -0
  66. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/interface/__init__.py +0 -0
  67. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/interface/list_with_meta.py +0 -0
  68. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/interface/models/__init__.py +1 -1
  69. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/interface/models/dut.py +0 -0
  70. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/interface/models/dynamic_quantum_architecture.py +0 -0
  71. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/interface/models/monitor.py +0 -0
  72. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/interface/models/observation.py +0 -0
  73. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/interface/models/run.py +0 -0
  74. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/interface/models/sequence.py +0 -0
  75. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/interface/models/static_quantum_architecture.py +0 -0
  76. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/interface/models/sweep.py +0 -0
  77. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/interface/py.typed +0 -0
  78. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/interface/pydantic_base.py +0 -0
  79. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm/station_control/interface/station_control.py +0 -0
  80. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm_station_control_client.egg-info/SOURCES.txt +0 -0
  81. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm_station_control_client.egg-info/dependency_links.txt +0 -0
  82. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm_station_control_client.egg-info/requires.txt +0 -0
  83. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/src/iqm_station_control_client.egg-info/top_level.txt +0 -0
  84. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/tests/.pylintrc +0 -0
  85. {iqm_station_control_client-9.17.0 → iqm_station_control_client-10.0.0}/tests/__init__.py +0 -0
@@ -2,6 +2,22 @@
2
2
  Changelog
3
3
  =========
4
4
 
5
+ Version 10.0.0 (2025-09-12)
6
+ ===========================
7
+
8
+ Breaking changes
9
+ ----------------
10
+
11
+ - ObservationSetType is now ``StrEnum`` instead of the old ``Literal``.
12
+
13
+ Version 9.18.0 (2025-09-03)
14
+ ===========================
15
+
16
+ Features
17
+ --------
18
+
19
+ - Enable ruff rule for missing annotations and mark exemptions.
20
+
5
21
  Version 9.17.0 (2025-08-20)
6
22
  ===========================
7
23
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: iqm-station-control-client
3
- Version: 9.17.0
3
+ Version: 10.0.0
4
4
  Summary: Python client for communicating with Station Control Service
5
5
  Author-email: IQM Finland Oy <info@meetiqm.com>
6
6
  License: Apache License
@@ -53,7 +53,7 @@ nb_diff_ignore = [ "/metadata/language_info", "/metadata/widgets", "/cells/*/exe
53
53
 
54
54
  [tool.ruff.lint]
55
55
  ignore = [ "D203", "D213",]
56
- select = [ "E4", "E7", "E9", "E5", "F", "Q", "PL", "I", "D", "UP007", "UP006", "UP035",]
56
+ select = [ "E4", "E7", "E9", "E5", "F", "Q", "PL", "I", "D", "UP007", "UP006", "UP035", "ANN001", "ANN201", "ANN202",]
57
57
  unfixable = [ "F401",]
58
58
 
59
59
  [tool.ruff.lint.isort]
@@ -66,9 +66,9 @@ relative-imports-order = "closest-to-furthest"
66
66
  [tool.ruff.lint.per-file-ignores]
67
67
  "**/__init__.py" = [ "F401", "PLR0402",]
68
68
  "**/docs/*" = [ "E402", "D100",]
69
- "**/setup.py" = [ "D100", "D103", "I001",]
69
+ "**/setup.py" = [ "D100", "D103", "I001", "ANN201",]
70
70
  "**/src/*" = [ "PLR2004", "D400", "D415", "D205", "D401", "D417", "D100", "D101", "D107", "D102", "D105", "D103", "D404", "D104",]
71
- "**/tests/*" = [ "F632", "PLR2004", "PLR0402", "PLC0414", "D",]
71
+ "**/tests/*" = [ "F632", "PLR2004", "PLR0402", "PLC0414", "D", "ANN001", "ANN201", "ANN202",]
72
72
 
73
73
  [tool.ruff.lint.pylint]
74
74
  max-args = 8
@@ -29,7 +29,7 @@ from iqm.station_control.interface.models.type_aliases import StrUUID
29
29
 
30
30
 
31
31
  class ClientCallDetails(grpc.ClientCallDetails):
32
- def __init__(self, details):
32
+ def __init__(self, details): # noqa: ANN001
33
33
  self.method = details.method
34
34
  self.metadata = list(details.metadata or [])
35
35
  self.timeout = details.timeout
@@ -42,15 +42,15 @@ class ApiTokenAuth(grpc.UnaryUnaryClientInterceptor, grpc.UnaryStreamClientInter
42
42
  def __init__(self, get_token_callback: Callable[[], str]):
43
43
  self.get_token_callback = get_token_callback
44
44
 
45
- def _add_auth_header(self, client_call_details) -> ClientCallDetails:
45
+ def _add_auth_header(self, client_call_details) -> ClientCallDetails: # noqa: ANN001
46
46
  details = ClientCallDetails(client_call_details)
47
47
  details.metadata.append(("authorization", self.get_token_callback()))
48
48
  return details
49
49
 
50
- def intercept_unary_stream(self, continuation, client_call_details, request):
50
+ def intercept_unary_stream(self, continuation, client_call_details, request): # noqa: ANN001, ANN201
51
51
  return continuation(self._add_auth_header(client_call_details), request)
52
52
 
53
- def intercept_unary_unary(self, continuation, client_call_details, request):
53
+ def intercept_unary_unary(self, continuation, client_call_details, request): # noqa: ANN001, ANN201
54
54
  return continuation(self._add_auth_header(client_call_details), request)
55
55
 
56
56
 
@@ -493,7 +493,7 @@ def parse_json(data: bytes) -> Any:
493
493
 
494
494
 
495
495
  @contextmanager
496
- def wrap_error(title: str):
496
+ def wrap_error(title: str): # noqa: ANN201
497
497
  try:
498
498
  yield
499
499
  except grpc.RpcError as e:
@@ -63,40 +63,40 @@ class _MockChannel(grpc.Channel):
63
63
  def __init__(self, mock: IqmServerMockBase):
64
64
  self._mock = mock
65
65
 
66
- def subscribe(self, callback, try_to_connect=False):
66
+ def subscribe(self, callback, try_to_connect=False): # noqa: ANN001, ANN202
67
67
  pass
68
68
 
69
- def unsubscribe(self, callback):
69
+ def unsubscribe(self, callback): # noqa: ANN001, ANN202
70
70
  pass
71
71
 
72
- def unary_unary(self, method, *args, **kwargs):
72
+ def unary_unary(self, method, *args, **kwargs): # noqa: ANN001, ANN202
73
73
  return self._create_callable(method)
74
74
 
75
- def unary_stream(self, method, *args, **kwargs):
75
+ def unary_stream(self, method, *args, **kwargs): # noqa: ANN001, ANN202
76
76
  return self._create_callable(method)
77
77
 
78
- def stream_unary(self, method, *args, **kwargs):
78
+ def stream_unary(self, method, *args, **kwargs): # noqa: ANN001, ANN202
79
79
  return self._create_callable(method)
80
80
 
81
- def stream_stream(self, method, *args, **kwargs):
81
+ def stream_stream(self, method, *args, **kwargs): # noqa: ANN001, ANN202
82
82
  return self._create_callable(method)
83
83
 
84
- def close(self):
84
+ def close(self): # noqa: ANN202
85
85
  pass
86
86
 
87
- def _create_callable(self, fq_method: str):
87
+ def _create_callable(self, fq_method: str): # noqa: ANN202
88
88
  _, fn_name = fq_method.lstrip("/").split("/")
89
89
  f = getattr(self._mock, fn_name)
90
90
 
91
- def callable(request):
91
+ def callable(request): # noqa: ANN001, ANN202
92
92
  return f(request, _MockContext())
93
93
 
94
94
  return callable
95
95
 
96
96
 
97
97
  class _MockContext:
98
- def set_code(self, code):
98
+ def set_code(self, code): # noqa: ANN001, ANN202
99
99
  pass
100
100
 
101
- def set_details(self, details):
101
+ def set_details(self, details): # noqa: ANN001, ANN202
102
102
  pass
@@ -50,7 +50,7 @@ class ListModel(RootModel):
50
50
  def __iter__(self):
51
51
  return iter(self.root)
52
52
 
53
- def __getitem__(self, item):
53
+ def __getitem__(self, item): # noqa: ANN001
54
54
  return self.root[item]
55
55
 
56
56
  def __len__(self) -> int:
@@ -203,7 +203,7 @@ class QONMetricRegistry:
203
203
 
204
204
  """
205
205
 
206
- def decorator(subclass: type[QONMetric]):
206
+ def decorator(subclass: type[QONMetric]): # noqa: ANN202
207
207
  for name in method_names:
208
208
  if (owner := cls._registry.get(name)) is not None:
209
209
  raise ValueError(f"Method {name} already registered to {owner.__name__}")
@@ -567,7 +567,7 @@ class StationControlClient(_StationControlClientBase):
567
567
  return model.model_dump_json()
568
568
 
569
569
  # TODO SW-1387: Remove this when using v1 API, not needed
570
- def _check_api_versions(self):
570
+ def _check_api_versions(self): # noqa: ANN202
571
571
  client_api_version = self._get_client_api_version()
572
572
  # Parse versions using standard packaging.version implementation.
573
573
  # For that purpose, we need to convert our custom " (local editable)" to follow packaging.version syntax.
@@ -125,7 +125,7 @@ class JobExecutorStatus(Enum):
125
125
  def __hash__(self):
126
126
  return hash(self.name)
127
127
 
128
- def __eq__(self, other):
128
+ def __eq__(self, other): # noqa: ANN001
129
129
  if isinstance(other, str):
130
130
  try:
131
131
  other = JobExecutorStatus(other.lower())
@@ -135,7 +135,7 @@ class JobExecutorStatus(Enum):
135
135
  return NotImplemented
136
136
  return self.name == other.name
137
137
 
138
- def __lt__(self, other):
138
+ def __lt__(self, other): # noqa: ANN001
139
139
  """Comparison according to definition order.
140
140
 
141
141
  :meta public:
@@ -14,15 +14,28 @@
14
14
  """Observation set related station control interface models."""
15
15
 
16
16
  from datetime import datetime
17
+ import enum
17
18
  import uuid
18
19
 
19
20
  from pydantic import ConfigDict, Field
20
21
 
21
22
  from iqm.station_control.interface.models.observation import ObservationLite
22
- from iqm.station_control.interface.models.type_aliases import ObservationSetType
23
23
  from iqm.station_control.interface.pydantic_base import PydanticBase
24
24
 
25
25
 
26
+ class ObservationSetType(enum.StrEnum):
27
+ """Different types of observation sets."""
28
+
29
+ GENERIC_SET = "generic-set"
30
+ """For human users."""
31
+ CALIBRATION_SET = "calibration-set"
32
+ """Describes an operating point of a quantum computer."""
33
+ QUALITY_METRIC_SET = "quality-metric-set"
34
+ """Describes the quality of a calibration set at a certain point in time."""
35
+ CHARACTERIZATION_SET = "characterization-set"
36
+ """Starting point for a calibration procedure."""
37
+
38
+
26
39
  class ObservationSetBase(PydanticBase):
27
40
  """Abstract base class of the observation set definition and data."""
28
41
 
@@ -25,7 +25,6 @@ StrUUID = str | UUID
25
25
 
26
26
  DutType = Literal["chip", "twpa"]
27
27
  GetObservationsMode = Literal["all_latest", "tags_and", "tags_or", "sequence"]
28
- ObservationSetType = Literal["calibration-set", "characterization-set", "generic-set", "quality-metric-set"]
29
28
  SoftwareVersionSet = dict[str, str]
30
29
  Statuses = list[tuple[str, int, int]]
31
30
  SweepResults = dict[str, list[np.ndarray]]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: iqm-station-control-client
3
- Version: 9.17.0
3
+ Version: 10.0.0
4
4
  Summary: Python client for communicating with Station Control Service
5
5
  Author-email: IQM Finland Oy <info@meetiqm.com>
6
6
  License: Apache License
@@ -0,0 +1 @@
1
+ 10.0.0
@@ -1 +0,0 @@
1
- 9.17.0
@@ -36,6 +36,7 @@ from iqm.station_control.interface.models.observation import (
36
36
  from iqm.station_control.interface.models.observation_set import (
37
37
  ObservationSetData,
38
38
  ObservationSetDefinition,
39
+ ObservationSetType,
39
40
  ObservationSetUpdate,
40
41
  ObservationSetWithObservations,
41
42
  QualityMetrics,
@@ -52,7 +53,6 @@ from iqm.station_control.interface.models.sweep import SweepData, SweepDefinitio
52
53
  from iqm.station_control.interface.models.type_aliases import (
53
54
  DutType,
54
55
  GetObservationsMode,
55
- ObservationSetType,
56
56
  SoftwareVersionSet,
57
57
  Statuses,
58
58
  SweepResults,