iqm-exa-common 26.32.0__py3-none-any.whl → 27.0.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.
@@ -15,13 +15,11 @@
15
15
  """Base immutable class for sweeps specifications."""
16
16
 
17
17
  from typing import Any
18
- import warnings
19
18
 
20
- from exa.common.control.sweep.option import CenterSpanOptions, StartStopOptions, SweepOptions
19
+ from exa.common.control.sweep.option import CenterSpanOptions, StartStopOptions
21
20
  from exa.common.control.sweep.sweep_values import SweepValues
22
21
  from exa.common.data.base_model import BaseModel
23
22
  from exa.common.data.parameter import Parameter
24
- from exa.common.errors.exa_error import InvalidSweepOptionsTypeError
25
23
 
26
24
 
27
25
  class Sweep(BaseModel):
@@ -33,30 +31,6 @@ class Sweep(BaseModel):
33
31
  data: SweepValues
34
32
  """List of values for :attr:`parameter`"""
35
33
 
36
- def __init__(
37
- self, parameter: Parameter, options: SweepOptions | None = None, *, data: SweepValues | None = None, **kwargs
38
- ) -> None:
39
- if options is None and data is None:
40
- raise ValueError("Either 'options' or 'data' is required.")
41
- if options is not None and data is not None:
42
- raise ValueError(
43
- "Can't use both 'options' and 'data' at the same time, give only either of the parameters."
44
- )
45
- if options is not None:
46
- warnings.warn("'options' attribute is deprecated, use 'data' instead.", DeprecationWarning)
47
-
48
- if not isinstance(options, SweepOptions):
49
- raise InvalidSweepOptionsTypeError(str(type(options)))
50
-
51
- if isinstance(options, StartStopOptions):
52
- data = self.__from_start_stop(parameter, options)
53
- elif isinstance(options, CenterSpanOptions):
54
- data = self.__from_center_span(parameter, options)
55
- else:
56
- data = options.data
57
-
58
- super().__init__(parameter=parameter, data=data, **kwargs) # type: ignore[call-arg] # type: ignore[call-arg]
59
-
60
34
  def model_post_init(self, __context: Any) -> None:
61
35
  if not all(self.parameter.validate(value) for value in self.data):
62
36
  raise ValueError(f"Invalid range data {self.data} for parameter type {self.parameter.data_type}.")
@@ -75,6 +49,6 @@ class Sweep(BaseModel):
75
49
  return options.data
76
50
 
77
51
  @staticmethod
78
- def _validate_value(parameter: Parameter, value: int | float | complex | str | bool, value_label: str):
52
+ def _validate_value(parameter: Parameter, value: complex | str | bool, value_label: str) -> None:
79
53
  if not parameter.validate(value):
80
54
  raise ValueError(f"Invalid {value_label} value {value} for parameter type {parameter.data_type}.")
@@ -469,27 +469,27 @@ class Setting(BaseModel):
469
469
  return Setting(self.parameter, value, self.read_only, self.path, source=source)
470
470
 
471
471
  @property
472
- def name(self):
472
+ def name(self): # noqa: ANN201
473
473
  """Name used as identifier, same as name of :attr:`parameter`."""
474
474
  return self.parameter.name
475
475
 
476
476
  @property
477
- def parent_name(self):
477
+ def parent_name(self): # noqa: ANN201
478
478
  """Parent name of the parameter of ``self``."""
479
479
  return self.parameter.parent_name
480
480
 
481
481
  @property
482
- def label(self):
482
+ def label(self): # noqa: ANN201
483
483
  """Label used as pretty identifier for display purposes, same as label of :attr:`parameter`."""
484
484
  return self.parameter.label
485
485
 
486
486
  @property
487
- def parent_label(self):
487
+ def parent_label(self): # noqa: ANN201
488
488
  """Parent label of the parameter of ``self``."""
489
489
  return self.parameter.parent_label
490
490
 
491
491
  @property
492
- def unit(self):
492
+ def unit(self): # noqa: ANN201
493
493
  """SI unit of the :attr:`value`, if applicable, same as unit of :attr:`parameter`."""
494
494
  return self.parameter.unit
495
495
 
@@ -350,7 +350,7 @@ class SettingNode(BaseModel):
350
350
  if self.path and self.align_name:
351
351
  self.name = self.path
352
352
 
353
- def __getattr__(self, key):
353
+ def __getattr__(self, key): # noqa: ANN001
354
354
  if key == "settings":
355
355
  # Prevent infinite recursion. If settings actually exists, this method is not called anyway
356
356
  raise AttributeError
@@ -366,11 +366,11 @@ class SettingNode(BaseModel):
366
366
  """List settings and subtree names, so they occur in IPython autocomplete after ``node.<TAB>``."""
367
367
  return [name for name in list(self.settings) + list(self.subtrees) if name.isidentifier()] + super().__dir__()
368
368
 
369
- def _ipython_key_completions_(self):
369
+ def _ipython_key_completions_(self): # noqa: ANN202
370
370
  """List items and subtree names, so they occur in IPython autocomplete after ``node[<TAB>``"""
371
371
  return [*self.settings, *self.subtrees]
372
372
 
373
- def __setattr__(self, key, value):
373
+ def __setattr__(self, key, value): # noqa: ANN001
374
374
  """Overrides default attribute assignment to allow the following syntax: ``self.foo = 3`` which is
375
375
  equivalent to ``self.foo.value.update(3)`` (if ``foo`` is a :class:`.Setting`).
376
376
  """
@@ -395,7 +395,7 @@ class SettingNode(BaseModel):
395
395
  else:
396
396
  self.__dict__[key] = value
397
397
 
398
- def __delattr__(self, key):
398
+ def __delattr__(self, key): # noqa: ANN001
399
399
  if key in self.settings:
400
400
  del self.settings[key]
401
401
  elif key in self.subtrees:
@@ -429,7 +429,7 @@ class SettingNode(BaseModel):
429
429
  )
430
430
  self.add_for_path({path_fragments[-1]: value}, path=".".join(path_fragments[:-1]))
431
431
 
432
- def __delitem__(self, key):
432
+ def __delitem__(self, key): # noqa: ANN001
433
433
  """Allows dictionary syntax."""
434
434
  self.__delattr__(key)
435
435
 
@@ -476,7 +476,7 @@ class SettingNode(BaseModel):
476
476
 
477
477
  """
478
478
 
479
- def list_assign(value, array, indices_list) -> None:
479
+ def list_assign(value, array, indices_list) -> None: # noqa: ANN001
480
480
  sub_array = array
481
481
  for index in indices_list[:-1]:
482
482
  sub_array = sub_array[index]
@@ -593,7 +593,7 @@ class SettingNode(BaseModel):
593
593
  new[key] = copy(item)
594
594
  return new
595
595
 
596
- def merge_values(self, other: SettingNode, prioritize_other: bool = False):
596
+ def merge_values(self, other: SettingNode, prioritize_other: bool = False): # noqa: ANN201
597
597
  """Recursively combine the values from another :class:`SettingNode` to this one.
598
598
 
599
599
  The resulting tree structure the same as that of self.
@@ -627,7 +627,7 @@ class SettingNode(BaseModel):
627
627
 
628
628
  """
629
629
 
630
- def append_lines(node: SettingNode, lines: list[str], indents: list[bool]):
630
+ def append_lines(node: SettingNode, lines: list[str], indents: list[bool]): # noqa: ANN202
631
631
  indent = "".join([" ║ " if i else " " for i in indents])
632
632
  if len(indents) < levels:
633
633
  for key, setting in node.settings.items():
@@ -808,7 +808,7 @@ class SettingNode(BaseModel):
808
808
 
809
809
  return diff
810
810
 
811
- def _withsiprefix(self, val, unit):
811
+ def _withsiprefix(self, val, unit): # noqa: ANN001, ANN202
812
812
  """Turn a numerical value and unit, and return rescaled value and SI prefixed unit.
813
813
 
814
814
  Unit must be a whitelisted SI base unit.
@@ -834,7 +834,7 @@ class SettingNode(BaseModel):
834
834
 
835
835
  return val, f"{pfx}{unit}"
836
836
 
837
- def _repr_html_(self):
837
+ def _repr_html_(self): # noqa: ANN202
838
838
  tmpl_path = pathlib.Path(__file__).parent
839
839
  jenv = jinja2.Environment(loader=jinja2.FileSystemLoader(tmpl_path), auto_reload=True)
840
840
 
@@ -1074,7 +1074,7 @@ class SettingNode(BaseModel):
1074
1074
  str_loci = [locus]
1075
1075
  return str_loci
1076
1076
 
1077
- def _get_path(self, key) -> str:
1077
+ def _get_path(self, key) -> str: # noqa: ANN001
1078
1078
  if not self.path:
1079
1079
  return key
1080
1080
  return f"{self.path}.{key}"
@@ -1,8 +1,3 @@
1
- from typing_extensions import deprecated
2
-
3
- from exa.common.helpers.deprecation import format_deprecated
4
-
5
-
6
1
  class ExaError(Exception):
7
2
  """Base class for exa errors.
8
3
 
@@ -11,11 +6,11 @@ class ExaError(Exception):
11
6
 
12
7
  """
13
8
 
14
- def __init__(self, message: str, *args):
9
+ def __init__(self, message: str, *args) -> None:
15
10
  super().__init__(message, *args)
16
11
  self.message = message
17
12
 
18
- def __str__(self):
13
+ def __str__(self) -> str:
19
14
  return self.message
20
15
 
21
16
 
@@ -25,11 +20,3 @@ class UnknownSettingError(ExaError, AttributeError):
25
20
 
26
21
  class EmptyComponentListError(ExaError, ValueError):
27
22
  """Error raised when an empty list is given as components for running an experiment."""
28
-
29
-
30
- @deprecated(format_deprecated(old="`InvalidSweepOptionsTypeError`", new="`Sweep.data`", since="28.3.2025"))
31
- class InvalidSweepOptionsTypeError(ExaError, TypeError):
32
- """The type of sweep options is invalid."""
33
-
34
- def __init__(self, options: str, *args):
35
- super().__init__(f"Options have unsupported type of {options}", *args)
@@ -30,7 +30,7 @@ class ExtraFormatter(logging.Formatter):
30
30
  self.extra_info_getter = extra_info_getter if extra_info_getter is not None else lambda: ""
31
31
  super().__init__(*args, **kwargs)
32
32
 
33
- def format(self, record):
33
+ def format(self, record): # noqa: ANN001, ANN201
34
34
  extra_info = self.extra_info_getter()
35
35
  record.__dict__.update(extra_info=extra_info)
36
36
  return super().format(record)
@@ -32,7 +32,7 @@ class Component(ImmutableBaseModel):
32
32
  name: str
33
33
  connections: tuple[str, ...] = ()
34
34
 
35
- def __lt__(self, other):
35
+ def __lt__(self, other): # noqa: ANN001
36
36
  return _natural_sort_key(self.name) < _natural_sort_key(other.name)
37
37
 
38
38
  @field_validator("connections", mode="before")
@@ -26,11 +26,11 @@ from six import BytesIO
26
26
 
27
27
 
28
28
  class FileAdapter(BaseAdapter):
29
- def __init__(self, set_content_length=True):
29
+ def __init__(self, set_content_length=True): # noqa: ANN001
30
30
  super(FileAdapter, self).__init__()
31
31
  self._set_content_length = set_content_length
32
32
 
33
- def send(self, request, **kwargs):
33
+ def send(self, request, **kwargs): # noqa: ANN001, ANN201
34
34
  """Sends PreparedRequest object. Returns Response object."""
35
35
  # Check that the method makes sense. Only support GET
36
36
  if request.method not in ("GET", "HEAD"):
@@ -60,5 +60,5 @@ class FileAdapter(BaseAdapter):
60
60
 
61
61
  return response
62
62
 
63
- def close(self):
63
+ def close(self): # noqa: ANN201
64
64
  pass
@@ -204,7 +204,7 @@ class _SweepDataEncoder(json.JSONEncoder):
204
204
 
205
205
  """
206
206
 
207
- def _encode_tuples(item):
207
+ def _encode_tuples(item): # noqa: ANN001, ANN202
208
208
  if isinstance(item, tuple):
209
209
  return get_json_encoder()[tuple](item)
210
210
  if isinstance(item, list):
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: iqm-exa-common
3
- Version: 26.32.0
3
+ Version: 27.0.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
@@ -10,10 +10,7 @@ exa/common/api/proto_serialization/sequence.py,sha256=4yQgdTUenbsY8yNu7JqSQSq2Us
10
10
  exa/common/api/proto_serialization/setting_node.py,sha256=oAlJOmkQTmMSd6wpofoDLz3YIlkiqxX7kY84WnZZ4b4,4073
11
11
  exa/common/control/__init__.py,sha256=00T_xV0lL20QZcEt__vWq81N1oGF0KpJMhTitfAI4VI,629
12
12
  exa/common/control/sweep/__init__.py,sha256=GzKoQdQsLutcHhmrLPyPrW1n7Cpg766p3OWDHlRpuTs,607
13
- exa/common/control/sweep/exponential_sweep.py,sha256=OIGqSifkAgQcS2EdffDpIjibB80XteLVF82kS63vPro,2121
14
- exa/common/control/sweep/fixed_sweep.py,sha256=QXO5lrllHHlhLiA95s8iTE82QkAEzgjJ2dA0flRJLhs,1493
15
- exa/common/control/sweep/linear_sweep.py,sha256=fX7OuZDYtUSGcAJLsGTVHcCIRkUHkZNLy5YSe_kgb8M,1966
16
- exa/common/control/sweep/sweep.py,sha256=CeCd7-nh0nIlaay4ggMICu61anVxlg3MISGhkK44-VQ,3520
13
+ exa/common/control/sweep/sweep.py,sha256=7iaW_8baA0vZZjR7s6P1jkkG-B5Ncjez25xyExbKlf4,2260
17
14
  exa/common/control/sweep/sweep_values.py,sha256=c868qpnh3SP6DYN3eAt0SLaePuzzQwxTWYwnQwL4A-I,2277
18
15
  exa/common/control/sweep/option/__init__.py,sha256=Z01JS0FpchMvR8zfWBCs3jcPjh2H8X29YkN0SFxWLTY,906
19
16
  exa/common/control/sweep/option/center_span_base_options.py,sha256=uHWt4euQVF7EVXJid8wnIXo8PtJnyUdydxxAXPEMnV4,2558
@@ -26,12 +23,12 @@ exa/common/control/sweep/option/start_stop_options.py,sha256=vJottC6QX80MhVyg9_R
26
23
  exa/common/control/sweep/option/sweep_options.py,sha256=BhKB7RHP0VXJ9iUQKVzeQOM4j_x9AsMhRJgoR3gkiaY,933
27
24
  exa/common/data/__init__.py,sha256=F5SRe5QHBTjef4XJVQ63kO5Oxc_AiZnPbV560i7La0Y,644
28
25
  exa/common/data/base_model.py,sha256=U508YCtvZabBGnKe1fqUimunmwGulOTM6DOKTUqnYp8,1835
29
- exa/common/data/parameter.py,sha256=AQxeTvItMjOvT2QUvhKCn9aK5ibrfaN8LI_Oc68ZzII,24420
30
- exa/common/data/setting_node.py,sha256=KlmxesAnxRMc26sq1hUWVTMYpwlvjH_z9WeSa9KAWtc,44598
26
+ exa/common/data/parameter.py,sha256=4CtvR6u5XT-5TJb_bTe9DYvBhOCNMlvOMepeGgr80FA,24500
27
+ exa/common/data/setting_node.py,sha256=rTXo-D9v42L8HkJoNoCMtm8cyUEuNtpYGhHfi45ZPhA,44782
31
28
  exa/common/data/settingnode_v2.html.jinja2,sha256=mo-rlLLmU-Xxf6znJAisispAZK8sbV-2C13byKAtj_Q,3166
32
29
  exa/common/data/value.py,sha256=mtMws5UPGx1pCADK6Q2Tx4BwCXznvVRSNQRfcQ3NMmY,1853
33
30
  exa/common/errors/__init__.py,sha256=ArMBdpmx1EUenBpzrSNG63kmUf7PM0gCqSYnaCnL9Qk,597
34
- exa/common/errors/exa_error.py,sha256=iw8ueZgqx1JXkfjRoJfPUsSE7cfhzIWpdDaFuka9Ss0,990
31
+ exa/common/errors/exa_error.py,sha256=wFfJbdeGs15XVF0VJvXPEjNavC2hXVJjchFcLfCfAiw,560
35
32
  exa/common/errors/station_control_errors.py,sha256=s0LimSOthQF8NWKyW556p-9vEapOxtn_W5ZiZVPTv_g,4489
36
33
  exa/common/helpers/__init__.py,sha256=IgtVD3tojIFA4MTV2mT5uYM6jb2qny9kBIIhEZT2PuI,610
37
34
  exa/common/helpers/data_helper.py,sha256=-AP0vwrf7WgyumLsicDtNP2VP5rhG4_oiOZgG4alNb4,2001
@@ -41,18 +38,18 @@ exa/common/helpers/numpy_helper.py,sha256=KKKyZ_fD0O1gn7_InEQROYnX3WGMA6C1qHh8Kz
41
38
  exa/common/helpers/software_version_helper.py,sha256=q7SVw7dSFBZIJQGwEpAR3rAFDlrC_s48-bM3Tqu5CQ0,5428
42
39
  exa/common/helpers/yaml_helper.py,sha256=wLy-7Nyit597FoWBemduUilYP2VCk_aDDT8y62i3ox8,1626
43
40
  exa/common/logger/__init__.py,sha256=1bIsGxHzfujXlkgtcAnWToKMkw3dpU5PEd_7LE_NpgQ,686
44
- exa/common/logger/logger.py,sha256=0aSjkx4pXy_CCKtspOnFgwMmhZVFAZUlopQ6HUjBMko,5689
41
+ exa/common/logger/logger.py,sha256=TA9HxFZDyFB7ai8C6mCZOm1cx3JMRAhB8DcMCwDAKt0,5713
45
42
  exa/common/qcm_data/__init__.py,sha256=VtsYkGoaniSjCkY0oQlqkcYJCtmC2sTDxfrIe_kpqZg,567
46
- exa/common/qcm_data/chad_model.py,sha256=s8p9zaQsoo1douqXAuLbAV5hjOCbrhEJFNzi5Yq9y98,11263
43
+ exa/common/qcm_data/chad_model.py,sha256=1vWpB8gsrnIEDqEOqqQAXrofN2jM6c8AypZvOSH5I18,11279
47
44
  exa/common/qcm_data/chip_topology.py,sha256=-IsWh0hev_vnAWs0z3iWBvProe6LypgKs1Erp8HCb0M,20027
48
- exa/common/qcm_data/file_adapter.py,sha256=U1XZm_PEswkW7kAztbWFLMufz4mPKPupWbh5yJXdZCI,2263
45
+ exa/common/qcm_data/file_adapter.py,sha256=VAvyV4FrCE93bvy7YP2DDlS_cgHQe-uwPdMQwMlZveQ,2319
49
46
  exa/common/qcm_data/immutable_base_model.py,sha256=QXmKIWQbsbWQvovXwKT1d9jtyf2LNJtjQquIwO52zOU,901
50
47
  exa/common/qcm_data/qcm_data_client.py,sha256=Rze6yQd0xUeH6eUMv3wduYbiDCTP3C4WECtCe7ONmyc,6061
51
48
  exa/common/sweep/__init__.py,sha256=uEKk5AtzSgSnf8Y0geRPwUpqXIBIXpeCxsN64sX7F1o,591
52
- exa/common/sweep/database_serialization.py,sha256=NUu1umxRQZpKtRmw1vNDsSbnofqbHvKFg_xQ2mdhY6k,7469
49
+ exa/common/sweep/database_serialization.py,sha256=9n96OqmEnjy1x2F1HwaNOQgwX_39HjLtE9EUoetSw0E,7493
53
50
  exa/common/sweep/util.py,sha256=-QE2AaH-WDkYAVH5-Z-30leLgY0x4efmby4kc1JTCgY,3732
54
- iqm_exa_common-26.32.0.dist-info/LICENSE.txt,sha256=R6Q7eUrLyoCQgWYorQ8WJmVmWKYU3dxA3jYUp0wwQAw,11332
55
- iqm_exa_common-26.32.0.dist-info/METADATA,sha256=whsRRUZ9aPMqaDU4HGv2hFLnL5hA1GVX1RhYv7RVZpA,14742
56
- iqm_exa_common-26.32.0.dist-info/WHEEL,sha256=y4mX-SOX4fYIkonsAGA5N0Oy-8_gI4FXw5HNI1xqvWg,91
57
- iqm_exa_common-26.32.0.dist-info/top_level.txt,sha256=Clphg2toaZ3_jSFRPhjMNEmLurkMNMc4lkK2EFYsSlM,4
58
- iqm_exa_common-26.32.0.dist-info/RECORD,,
51
+ iqm_exa_common-27.0.0.dist-info/LICENSE.txt,sha256=R6Q7eUrLyoCQgWYorQ8WJmVmWKYU3dxA3jYUp0wwQAw,11332
52
+ iqm_exa_common-27.0.0.dist-info/METADATA,sha256=HSADQ--8rxKTImWGTmuX7t6lDJ1Tajdke8LLVC98trw,14741
53
+ iqm_exa_common-27.0.0.dist-info/WHEEL,sha256=y4mX-SOX4fYIkonsAGA5N0Oy-8_gI4FXw5HNI1xqvWg,91
54
+ iqm_exa_common-27.0.0.dist-info/top_level.txt,sha256=Clphg2toaZ3_jSFRPhjMNEmLurkMNMc4lkK2EFYsSlM,4
55
+ iqm_exa_common-27.0.0.dist-info/RECORD,,
@@ -1,53 +0,0 @@
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
-
19
- from typing_extensions import deprecated
20
-
21
- from exa.common.control.sweep.option import CenterSpanBaseOptions, StartStopBaseOptions
22
- from exa.common.control.sweep.sweep import Sweep
23
- from exa.common.data.parameter import Parameter
24
- from exa.common.errors.exa_error import InvalidSweepOptionsTypeError
25
- from exa.common.helpers.deprecation import format_deprecated
26
-
27
-
28
- @deprecated(format_deprecated(old="`ExponentialSweep`", new="`Sweep`", since="28.3.2025"))
29
- class ExponentialSweep(Sweep):
30
- """Generates parameter values spaced evenly on a geometric progression based on `options`.
31
-
32
- - If `options` is instance of :class:`.StartStopBaseOptions`,
33
- the start and stop of the interval are calculated from powers of start and stop.
34
- - If `options` is instance of :class:`.CenterSpanBaseOptions`,
35
- the start and stop of the interval are calculated from powers of start and stop,
36
- which are derived from center and span.
37
-
38
- Raises:
39
- ValueError: Error is raised if `options` is inconsistent.
40
-
41
- """
42
-
43
- def __init__(
44
- self,
45
- parameter: Parameter,
46
- options: StartStopBaseOptions | CenterSpanBaseOptions | None = None,
47
- *,
48
- data: list[Any] | None = None,
49
- **kwargs,
50
- ) -> None:
51
- if options and not isinstance(options, StartStopBaseOptions | CenterSpanBaseOptions):
52
- raise InvalidSweepOptionsTypeError(str(type(options)))
53
- super().__init__(parameter, options, data=data, **kwargs)
@@ -1,37 +0,0 @@
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 arbitrary values."""
16
-
17
- from typing import Any
18
-
19
- from typing_extensions import deprecated
20
-
21
- from exa.common.control.sweep.option import FixedOptions
22
- from exa.common.control.sweep.sweep import Sweep
23
- from exa.common.data.parameter import Parameter
24
- from exa.common.errors.exa_error import InvalidSweepOptionsTypeError
25
- from exa.common.helpers.deprecation import format_deprecated
26
-
27
-
28
- @deprecated(format_deprecated(old="`FixedSweep`", new="`Sweep`", since="28.3.2025"))
29
- class FixedSweep(Sweep):
30
- """A sweep over arbitrary set of values, given by `options`."""
31
-
32
- def __init__(
33
- self, parameter: Parameter, options: FixedOptions | None = None, *, data: list[Any] | None = None, **kwargs
34
- ) -> None:
35
- if options and not isinstance(options, FixedOptions):
36
- raise InvalidSweepOptionsTypeError(str(type(options)))
37
- super().__init__(parameter, options, data=data, **kwargs)
@@ -1,51 +0,0 @@
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
-
19
- from typing_extensions import deprecated
20
-
21
- from exa.common.control.sweep.option import CenterSpanOptions, StartStopOptions
22
- from exa.common.control.sweep.sweep import Sweep
23
- from exa.common.data.parameter import Parameter
24
- from exa.common.errors.exa_error import InvalidSweepOptionsTypeError
25
- from exa.common.helpers.deprecation import format_deprecated
26
-
27
-
28
- @deprecated(format_deprecated(old="`LinearSweep`", new="`Sweep`", since="28.3.2025"))
29
- class LinearSweep(Sweep):
30
- """Generates evenly spaced parameter values based on `options`.
31
-
32
- - If `options` is instance of :class:`.StartStopOptions`, then start and stop options are used for interval
33
- - If `options` is instance of :class:`.CenterSpanOptions`,
34
- then the start and stop of the interval are calculated from center and span values
35
-
36
- Raises:
37
- ValueError: Error is raised if `options` is inconsistent.
38
-
39
- """
40
-
41
- def __init__(
42
- self,
43
- parameter: Parameter,
44
- options: StartStopOptions | CenterSpanOptions | None = None,
45
- *,
46
- data: list[Any] | None = None,
47
- **kwargs,
48
- ) -> None:
49
- if options and not isinstance(options, StartStopOptions | CenterSpanOptions):
50
- raise InvalidSweepOptionsTypeError(str(type(options)))
51
- super().__init__(parameter, options, data=data, **kwargs)