iqm-station-control-client 10.2.0__tar.gz → 11.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-10.2.0 → iqm_station_control_client-11.0.0}/CHANGELOG.rst +8 -0
  2. {iqm_station_control_client-10.2.0/src/iqm_station_control_client.egg-info → iqm_station_control_client-11.0.0}/PKG-INFO +1 -1
  3. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/client/qon.py +36 -20
  4. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0/src/iqm_station_control_client.egg-info}/PKG-INFO +1 -1
  5. iqm_station_control_client-11.0.0/version.txt +1 -0
  6. iqm_station_control_client-10.2.0/version.txt +0 -1
  7. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/LICENSE.txt +0 -0
  8. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/MANIFEST.in +0 -0
  9. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/README.rst +0 -0
  10. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/docs/API.rst +0 -0
  11. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/docs/Makefile +0 -0
  12. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/docs/_static/css/custom.css +0 -0
  13. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/docs/_static/images/favicon.ico +0 -0
  14. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/docs/_static/images/logo.png +0 -0
  15. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/docs/_templates/autosummary-class-template.rst +0 -0
  16. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/docs/_templates/autosummary-module-template.rst +0 -0
  17. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/docs/changelog.rst +0 -0
  18. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/docs/conf.py +0 -0
  19. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/docs/index.rst +0 -0
  20. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/docs/license.rst +0 -0
  21. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/pyproject.toml +0 -0
  22. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/requirements/base.in +0 -0
  23. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/requirements/base.in.internal +0 -0
  24. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/requirements/base.txt +0 -0
  25. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/setup.cfg +0 -0
  26. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/setup.py +0 -0
  27. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/client/__init__.py +0 -0
  28. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/client/iqm_server/__init__.py +0 -0
  29. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/client/iqm_server/error.py +0 -0
  30. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/client/iqm_server/grpc_utils.py +0 -0
  31. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/client/iqm_server/iqm_server_client.py +0 -0
  32. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/client/iqm_server/proto/__init__.py +0 -0
  33. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/client/iqm_server/proto/calibration_pb2.py +0 -0
  34. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/client/iqm_server/proto/calibration_pb2.pyi +0 -0
  35. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/client/iqm_server/proto/calibration_pb2_grpc.py +0 -0
  36. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/client/iqm_server/proto/common_pb2.py +0 -0
  37. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/client/iqm_server/proto/common_pb2.pyi +0 -0
  38. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/client/iqm_server/proto/common_pb2_grpc.py +0 -0
  39. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/client/iqm_server/proto/job_pb2.py +0 -0
  40. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/client/iqm_server/proto/job_pb2.pyi +0 -0
  41. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/client/iqm_server/proto/job_pb2_grpc.py +0 -0
  42. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/client/iqm_server/proto/qc_pb2.py +0 -0
  43. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/client/iqm_server/proto/qc_pb2.pyi +0 -0
  44. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/client/iqm_server/proto/qc_pb2_grpc.py +0 -0
  45. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/client/iqm_server/proto/uuid_pb2.py +0 -0
  46. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/client/iqm_server/proto/uuid_pb2.pyi +0 -0
  47. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/client/iqm_server/proto/uuid_pb2_grpc.py +0 -0
  48. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/client/iqm_server/testing/__init__.py +0 -0
  49. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/client/iqm_server/testing/iqm_server_mock.py +0 -0
  50. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/client/list_models.py +0 -0
  51. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/client/py.typed +0 -0
  52. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/client/serializers/__init__.py +0 -0
  53. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/client/serializers/channel_property_serializer.py +0 -0
  54. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/client/serializers/datetime_serializers.py +0 -0
  55. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/client/serializers/playlist_serializers.py +0 -0
  56. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/client/serializers/run_serializers.py +0 -0
  57. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/client/serializers/setting_node_serializer.py +0 -0
  58. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/client/serializers/struct_serializer.py +0 -0
  59. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/client/serializers/sweep_serializers.py +0 -0
  60. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/client/serializers/task_serializers.py +0 -0
  61. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/client/station_control.py +0 -0
  62. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/client/utils.py +0 -0
  63. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/interface/__init__.py +0 -0
  64. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/interface/list_with_meta.py +0 -0
  65. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/interface/models/__init__.py +0 -0
  66. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/interface/models/dut.py +0 -0
  67. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/interface/models/dynamic_quantum_architecture.py +0 -0
  68. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/interface/models/jobs.py +0 -0
  69. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/interface/models/monitor.py +0 -0
  70. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/interface/models/observation.py +0 -0
  71. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/interface/models/observation_set.py +0 -0
  72. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/interface/models/run.py +0 -0
  73. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/interface/models/sequence.py +0 -0
  74. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/interface/models/static_quantum_architecture.py +0 -0
  75. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/interface/models/sweep.py +0 -0
  76. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/interface/models/type_aliases.py +0 -0
  77. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/interface/py.typed +0 -0
  78. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/interface/pydantic_base.py +0 -0
  79. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm/station_control/interface/station_control.py +0 -0
  80. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm_station_control_client.egg-info/SOURCES.txt +0 -0
  81. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm_station_control_client.egg-info/dependency_links.txt +0 -0
  82. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm_station_control_client.egg-info/requires.txt +0 -0
  83. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/src/iqm_station_control_client.egg-info/top_level.txt +0 -0
  84. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/tests/.pylintrc +0 -0
  85. {iqm_station_control_client-10.2.0 → iqm_station_control_client-11.0.0}/tests/__init__.py +0 -0
@@ -2,6 +2,14 @@
2
2
  Changelog
3
3
  =========
4
4
 
5
+ Version 11.0.0 (2025-09-30)
6
+ ===========================
7
+
8
+ Breaking changes
9
+ ----------------
10
+
11
+ - Change ``QON.locus`` to ``QON.locus_str`` to match the common nomenclature.
12
+
5
13
  Version 10.2.0 (2025-09-17)
6
14
  ===========================
7
15
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: iqm-station-control-client
3
- Version: 10.2.0
3
+ Version: 11.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
@@ -47,11 +47,16 @@ Suffixes: TypeAlias = dict[str, str]
47
47
  """Suffixes in a dut_field, split into key/value pairs."""
48
48
 
49
49
 
50
- def locus_to_locus_str(locus: Locus) -> str:
50
+ def locus_to_locus_str(locus: Iterable[str]) -> str:
51
51
  """Convert a locus into a locus string."""
52
52
  return LOCUS_SEPARATOR.join(locus)
53
53
 
54
54
 
55
+ def locus_str_to_locus(locus_str: str) -> Locus:
56
+ """Convert a locus string into a locus."""
57
+ return tuple(locus_str.split(LOCUS_SEPARATOR))
58
+
59
+
55
60
  class Domain(StrEnum):
56
61
  """Known observation domains/categories."""
57
62
 
@@ -251,8 +256,9 @@ class QONMetric(QON):
251
256
  """
252
257
 
253
258
  method: Annotated[str, Field(pattern=_PATTERN)]
254
- locus: str
255
- """Sequence of names of QPU components on which the gate is applied, or on which the experiment is run."""
259
+ locus_str: str
260
+ """Sequence of names of QPU components on which the gate is applied, or on which the experiment is run,
261
+ encoded into a string."""
256
262
  metric: Annotated[str, Field(pattern=r"^[A-Za-z_0-9][A-Za-z0-9_]*$")]
257
263
  """Measured metric."""
258
264
 
@@ -267,6 +273,11 @@ class QONMetric(QON):
267
273
  """Return the QON domain for metrics."""
268
274
  return Domain.METRIC
269
275
 
276
+ @property
277
+ def locus(self) -> Locus:
278
+ """Locus of the metric."""
279
+ return locus_str_to_locus(self.locus_str)
280
+
270
281
  @classmethod
271
282
  def _parse(cls, method: str, method_specific_part: str) -> QONMetric:
272
283
  """Parse a metric observation name using the appropriate registered subclass.
@@ -316,7 +327,7 @@ class QONGateMetric(QONMetric):
316
327
  method: ssro
317
328
  gate: measure
318
329
  implementation: constant
319
- locus: QB1
330
+ locus_str: QB1
320
331
  metric: fidelity
321
332
  suffixes: {"aaa": "bbb", "par": "d1"}
322
333
 
@@ -325,7 +336,7 @@ class QONGateMetric(QONMetric):
325
336
  method: ssro
326
337
  gate: measure
327
338
  implementation: constant
328
- locus: QB1
339
+ locus_str: QB1
329
340
  metric: fidelity
330
341
  suffixes: {}
331
342
 
@@ -334,7 +345,7 @@ class QONGateMetric(QONMetric):
334
345
  method: rb
335
346
  gate: prx
336
347
  implementation: drag_crf
337
- locus: QB4
348
+ locus_str: QB4
338
349
  metric: fidelity
339
350
  suffixes: {"par": "d2"}
340
351
  """
@@ -347,7 +358,7 @@ class QONGateMetric(QONMetric):
347
358
  """Suffixes defining the metric further (if any)."""
348
359
 
349
360
  def __str__(self) -> str:
350
- parts = [self.domain, self.method, self.gate, self.implementation, self.locus, self.metric]
361
+ parts = [self.domain, self.method, self.gate, self.implementation, self.locus_str, self.metric]
351
362
  name = _FIELD_SEPARATOR.join(parts)
352
363
  if self.suffixes:
353
364
  suffix_str = _SUFFIX_SEPARATOR.join(f"{k}={v}" for k, v in sorted(self.suffixes.items()))
@@ -372,12 +383,12 @@ class QONGateMetric(QONMetric):
372
383
  parts, suffixes = _split_obs_name(method_specific_part, maxsplit=3)
373
384
  if len(parts) < 4:
374
385
  raise ValueError(f"{method} gate quality metric name has less than 6 parts")
375
- gate, implementation, locus, metric = parts
386
+ gate, implementation, locus_str, metric = parts
376
387
  return cls(
377
388
  method=method,
378
389
  gate=gate,
379
390
  implementation=implementation,
380
- locus=locus,
391
+ locus_str=locus_str,
381
392
  metric=metric,
382
393
  suffixes=suffixes,
383
394
  )
@@ -388,7 +399,7 @@ class QONGateMetric(QONMetric):
388
399
  class QONSystemMetric(QONMetric):
389
400
  """QON representing a system quality metric.
390
401
 
391
- Has the form ``metrics.{method}.{locus}.{metric}``.
402
+ Has the form ``metrics.{method}.{locus_str}.{metric}``.
392
403
 
393
404
  Can parse/represent e.g. the following metrics:
394
405
 
@@ -397,21 +408,21 @@ class QONSystemMetric(QONMetric):
397
408
  method: irb
398
409
  gate: circuit
399
410
  implementation: random_circuit
400
- locus: QB4
411
+ locus_str: QB4
401
412
  metric: fidelity
402
413
  suffixes: {"par": "d2"}
403
414
 
404
415
  ``metrics.ghz_state.QB1__QB2.coherence_lower_bound``
405
416
 
406
417
  method: ghz_state
407
- locus: QB1__QB2
418
+ locus_str: QB1__QB2
408
419
  metric: coherence_lower_bound
409
420
 
410
421
  Subclasses implement parsing and string representation for specific methods.
411
422
  """
412
423
 
413
424
  def __str__(self) -> str:
414
- parts = [self.domain, self.method, self.locus, self.metric]
425
+ parts = [self.domain, self.method, self.locus_str, self.metric]
415
426
  return _FIELD_SEPARATOR.join(parts)
416
427
 
417
428
  @classmethod
@@ -432,10 +443,10 @@ class QONSystemMetric(QONMetric):
432
443
  parts = method_specific_part.split(_FIELD_SEPARATOR, maxsplit=1)
433
444
  if len(parts) < 2:
434
445
  raise ValueError(f"{method} system quality metric name has less than 4 parts")
435
- locus, metric = parts
446
+ locus_str, metric = parts
436
447
  return cls(
437
448
  method=method,
438
- locus=locus,
449
+ locus_str=locus_str,
439
450
  metric=metric,
440
451
  )
441
452
 
@@ -479,8 +490,8 @@ class QONGateParam(QON):
479
490
  """Name of the gate/quantum operation."""
480
491
  implementation: Annotated[str, Field(pattern=_PATTERN)]
481
492
  """Name of the gate implementation."""
482
- locus: str
483
- """Sequence of names of QPU components on which the gate is applied."""
493
+ locus_str: str
494
+ """Sequence of names of QPU components on which the gate is applied, encoded into a string."""
484
495
  parameter: str
485
496
  """Name of the gate parameter. May have further dotted structure."""
486
497
 
@@ -488,8 +499,13 @@ class QONGateParam(QON):
488
499
  def domain(self) -> Domain:
489
500
  return Domain.GATE_PARAMETER
490
501
 
502
+ @property
503
+ def locus(self) -> Locus:
504
+ """Locus of the gate parameter."""
505
+ return locus_str_to_locus(self.locus_str)
506
+
491
507
  def __str__(self) -> str:
492
- return _FIELD_SEPARATOR.join([self.domain, self.gate, self.implementation, self.locus, self.parameter])
508
+ return _FIELD_SEPARATOR.join([self.domain, self.gate, self.implementation, self.locus_str, self.parameter])
493
509
 
494
510
  @classmethod
495
511
  def _parse(cls, gate: str, rest: str) -> QONGateParam:
@@ -497,11 +513,11 @@ class QONGateParam(QON):
497
513
  parts = rest.split(_FIELD_SEPARATOR, maxsplit=2)
498
514
  if len(parts) < 3:
499
515
  raise ValueError("Gate parameter observation name has less than 5 parts")
500
- implementation, locus, param = parts
516
+ implementation, locus_str, param = parts
501
517
  return cls(
502
518
  gate=gate,
503
519
  implementation=implementation,
504
- locus=locus,
520
+ locus_str=locus_str,
505
521
  parameter=param,
506
522
  )
507
523
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: iqm-station-control-client
3
- Version: 10.2.0
3
+ Version: 11.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
+ 11.0.0
@@ -1 +0,0 @@
1
- 10.2.0