azure-quantum 2.0.0.dev0__tar.gz → 2.0.1__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 (89) hide show
  1. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/PKG-INFO +1 -1
  2. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/_client/_version.py +1 -1
  3. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/job/base_job.py +23 -3
  4. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/qiskit/backends/microsoft.py +1 -0
  5. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/qiskit/backends/qci.py +2 -0
  6. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/qiskit/backends/quantinuum.py +0 -6
  7. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/qiskit/backends/rigetti.py +2 -0
  8. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/qiskit/provider.py +16 -18
  9. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/target/quantinuum.py +0 -3
  10. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/target/rigetti/target.py +1 -5
  11. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/target/target_factory.py +8 -3
  12. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/version.py +1 -1
  13. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure_quantum.egg-info/PKG-INFO +1 -1
  14. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/README.md +0 -0
  15. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/__init__.py +0 -0
  16. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/_authentication/__init__.py +0 -0
  17. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/_authentication/_chained.py +0 -0
  18. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/_authentication/_default.py +0 -0
  19. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/_authentication/_token.py +0 -0
  20. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/_client/__init__.py +0 -0
  21. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/_client/_client.py +0 -0
  22. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/_client/_configuration.py +0 -0
  23. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/_client/_patch.py +0 -0
  24. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/_client/_serialization.py +0 -0
  25. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/_client/_vendor.py +0 -0
  26. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/_client/models/__init__.py +0 -0
  27. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/_client/models/_enums.py +0 -0
  28. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/_client/models/_models.py +0 -0
  29. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/_client/models/_patch.py +0 -0
  30. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/_client/operations/__init__.py +0 -0
  31. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/_client/operations/_operations.py +0 -0
  32. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/_client/operations/_patch.py +0 -0
  33. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/_constants.py +0 -0
  34. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/_workspace_connection_params.py +0 -0
  35. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/argument_types/__init__.py +0 -0
  36. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/argument_types/types.py +0 -0
  37. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/chemistry/__init__.py +0 -0
  38. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/cirq/__init__.py +0 -0
  39. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/cirq/job.py +0 -0
  40. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/cirq/service.py +0 -0
  41. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/cirq/targets/__init__.py +0 -0
  42. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/cirq/targets/ionq.py +0 -0
  43. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/cirq/targets/quantinuum.py +0 -0
  44. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/cirq/targets/target.py +0 -0
  45. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/job/__init__.py +0 -0
  46. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/job/filtered_job.py +0 -0
  47. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/job/job.py +0 -0
  48. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/job/job_failed_with_results_error.py +0 -0
  49. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/job/session.py +0 -0
  50. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/job/workspace_item.py +0 -0
  51. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/job/workspace_item_factory.py +0 -0
  52. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/qiskit/__init__.py +0 -0
  53. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/qiskit/backends/__init__.py +0 -0
  54. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/qiskit/backends/backend.py +0 -0
  55. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/qiskit/backends/ionq.py +0 -0
  56. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/qiskit/job.py +0 -0
  57. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/qiskit/results/__init__.py +0 -0
  58. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/qiskit/results/resource_estimator.py +0 -0
  59. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/storage.py +0 -0
  60. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/target/__init__.py +0 -0
  61. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/target/ionq.py +0 -0
  62. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/target/microsoft/__init__.py +0 -0
  63. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/target/microsoft/elements/__init__.py +0 -0
  64. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/target/microsoft/elements/dft/__init__.py +0 -0
  65. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/target/microsoft/elements/dft/job.py +0 -0
  66. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/target/microsoft/elements/dft/target.py +0 -0
  67. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/target/microsoft/job.py +0 -0
  68. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/target/microsoft/result.py +0 -0
  69. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/target/microsoft/target.py +0 -0
  70. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/target/params.py +0 -0
  71. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/target/pasqal/__init__.py +0 -0
  72. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/target/pasqal/result.py +0 -0
  73. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/target/pasqal/target.py +0 -0
  74. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/target/rigetti/__init__.py +0 -0
  75. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/target/rigetti/result.py +0 -0
  76. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/target/target.py +0 -0
  77. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure/quantum/workspace.py +0 -0
  78. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure_quantum.egg-info/SOURCES.txt +0 -0
  79. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure_quantum.egg-info/dependency_links.txt +0 -0
  80. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure_quantum.egg-info/requires.txt +0 -0
  81. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/azure_quantum.egg-info/top_level.txt +0 -0
  82. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/requirements-cirq.txt +0 -0
  83. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/requirements-dev.txt +0 -0
  84. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/requirements-qiskit.txt +0 -0
  85. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/requirements-qsharp.txt +0 -0
  86. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/requirements-quil.txt +0 -0
  87. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/requirements.txt +0 -0
  88. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/setup.cfg +0 -0
  89. {azure-quantum-2.0.0.dev0 → azure-quantum-2.0.1}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: azure-quantum
3
- Version: 2.0.0.dev0
3
+ Version: 2.0.1
4
4
  Summary: Python client for Azure Quantum
5
5
  Home-page: https://github.com/microsoft/azure-quantum-python
6
6
  Author: Microsoft
@@ -6,4 +6,4 @@
6
6
  # Changes may cause incorrect behavior and will be lost if the code is regenerated.
7
7
  # --------------------------------------------------------------------------
8
8
 
9
- VERSION = "2.0.0.dev0"
9
+ VERSION = "2.0.1"
@@ -7,7 +7,8 @@ import logging
7
7
  import uuid
8
8
 
9
9
  from enum import Enum
10
- from urllib.parse import urlparse
10
+ from datetime import datetime, timezone, timedelta
11
+ from urllib.parse import urlparse, parse_qs
11
12
  from typing import Any, Dict, Optional, TYPE_CHECKING
12
13
  from azure.storage.blob import BlobClient
13
14
 
@@ -368,8 +369,27 @@ class BaseJob(WorkspaceItem):
368
369
  :rtype: str
369
370
  """
370
371
  url = urlparse(blob_uri)
371
- if url.query.find("se=") == -1:
372
- # blob_uri does not contains SAS token,
372
+ query_params = parse_qs(url.query)
373
+ token_expire_query_param = query_params.get("se")
374
+
375
+ token_expire_time = None
376
+
377
+ if token_expire_query_param is not None:
378
+ token_expire_time_str = token_expire_query_param[0]
379
+
380
+ # Since python < 3.11 can not easily parse Z suffixed UTC timestamp and
381
+ # assuming that the timestamp is always UTC, we replace that suffix with UTC offset.
382
+ token_expire_time = datetime.fromisoformat(
383
+ token_expire_time_str.replace('Z', '+00:00')
384
+ )
385
+
386
+ # Make an expiration time a little earlier, so there's no case where token is
387
+ # used a second or so before of its expiration.
388
+ token_expire_time = token_expire_time - timedelta(minutes=5)
389
+
390
+ current_utc_time = datetime.now(tz=timezone.utc)
391
+ if token_expire_time is None or current_utc_time >= token_expire_time:
392
+ # blob_uri does not contains SAS token or it is expired,
373
393
  # get sas url from service
374
394
  blob_client = BlobClient.from_blob_url(
375
395
  blob_uri
@@ -104,6 +104,7 @@ class MicrosoftResourceEstimationBackend(MicrosoftBackend):
104
104
  {"name": "TODO", "parameters": [], "qasm_def": "TODO"}
105
105
  ], # NOTE: copied from other backends
106
106
  "azure": self._azure_config(),
107
+ "is_default": True,
107
108
  }
108
109
  )
109
110
  logger.info("Initializing MicrosoftResourceEstimationBackend")
@@ -119,6 +119,7 @@ class QCISimulatorBackend(QCIBackend):
119
119
  "open_pulse": False,
120
120
  "gates": [{"name": "TODO", "parameters": [], "qasm_def": "TODO"}],
121
121
  "azure": self._azure_config(),
122
+ "is_default": True,
122
123
  }
123
124
  )
124
125
  logger.info("Initializing QCISimulatorBackend")
@@ -150,6 +151,7 @@ class QCIQPUBackend(QCIBackend):
150
151
  "open_pulse": False,
151
152
  "gates": [{"name": "TODO", "parameters": [], "qasm_def": "TODO"}],
152
153
  "azure": self._azure_config(),
154
+ "is_default": True,
153
155
  }
154
156
  )
155
157
  logger.info("Initializing QCIQPUBackend")
@@ -103,7 +103,6 @@ class QuantinuumSyntaxCheckerQirBackend(QuantinuumQirBackendBase):
103
103
  backend_names = (
104
104
  # Note: Target names on the same line are equivalent.
105
105
  "quantinuum.sim.h1-1sc",
106
- "quantinuum.sim.h1-2sc",
107
106
  "quantinuum.sim.h2-1sc",
108
107
  )
109
108
 
@@ -141,7 +140,6 @@ class QuantinuumEmulatorQirBackend(QuantinuumQirBackendBase):
141
140
  backend_names = (
142
141
  # Note: Target names on the same line are equivalent.
143
142
  "quantinuum.sim.h1-1e",
144
- "quantinuum.sim.h1-2e",
145
143
  "quantinuum.sim.h2-1e",
146
144
  )
147
145
 
@@ -179,7 +177,6 @@ class QuantinuumQPUQirBackend(QuantinuumQirBackendBase):
179
177
  backend_names = (
180
178
  # Note: Target names on the same line are equivalent.
181
179
  "quantinuum.qpu.h1-1",
182
- "quantinuum.qpu.h1-2",
183
180
  "quantinuum.qpu.h2-1",
184
181
  )
185
182
 
@@ -281,7 +278,6 @@ class QuantinuumSyntaxCheckerBackend(QuantinuumBackend):
281
278
  backend_names = (
282
279
  # Note: Target names on the same line are equivalent.
283
280
  "quantinuum.sim.h1-1sc",
284
- "quantinuum.sim.h1-2sc",
285
281
  "quantinuum.sim.h2-1sc",
286
282
  )
287
283
 
@@ -319,7 +315,6 @@ class QuantinuumEmulatorBackend(QuantinuumBackend):
319
315
  backend_names = (
320
316
  # Note: Target names on the same line are equivalent.
321
317
  "quantinuum.sim.h1-1e",
322
- "quantinuum.sim.h1-2e",
323
318
  "quantinuum.sim.h2-1e",
324
319
  )
325
320
 
@@ -357,7 +352,6 @@ class QuantinuumQPUBackend(QuantinuumBackend):
357
352
  backend_names = (
358
353
  # Note: Target names on the same line are equivalent.
359
354
  "quantinuum.qpu.h1-1",
360
- "quantinuum.qpu.h1-2",
361
355
  "quantinuum.qpu.h2-1",
362
356
  )
363
357
 
@@ -94,6 +94,7 @@ class RigettiSimulatorBackend(RigettiBackend):
94
94
  "open_pulse": False,
95
95
  "gates": [{"name": "TODO", "parameters": [], "qasm_def": "TODO"}],
96
96
  "azure": self._azure_config(),
97
+ "is_default": True,
97
98
  }
98
99
  )
99
100
  logger.info("Initializing RigettiSimulatorBackend")
@@ -125,6 +126,7 @@ class RigettiQPUBackend(RigettiBackend):
125
126
  "open_pulse": False,
126
127
  "gates": [{"name": "TODO", "parameters": [], "qasm_def": "TODO"}],
127
128
  "azure": self._azure_config(),
129
+ "is_default": True,
128
130
  }
129
131
  )
130
132
  logger.info("Initializing RigettiQPUBackend")
@@ -70,22 +70,6 @@ class AzureQuantumProvider(Provider):
70
70
 
71
71
  backends = self.backends(name=name, **kwargs)
72
72
 
73
- if len(backends) > 1:
74
- def all_same(iterable):
75
- group_iter = groupby(iterable)
76
- return next(group_iter, True) and not next(group_iter, False)
77
-
78
- # If all backends have the same name, filter for default backend
79
- if all_same(backend.name() for backend in backends):
80
- backends = list(
81
- filter(
82
- lambda backend: self._match_all(
83
- backend.configuration().to_dict(), {"is_default": True}
84
- ),
85
- backends,
86
- )
87
- )
88
-
89
73
  if len(backends) > 1:
90
74
  raise QiskitBackendNotFoundError(
91
75
  "More than one backend matches the criteria"
@@ -132,11 +116,25 @@ see https://aka.ms/AQ/Docs/AddProvider"
132
116
  backend_list = [x for v in self._backends.values() for x in v]
133
117
 
134
118
  # filter by properties specified in the kwargs and filter function
135
- backends: List[Backend] = self._filter_backends(
119
+ filtered_backends: List[Backend] = self._filter_backends(
136
120
  backend_list, filters=workspace_allowed, **kwargs
137
121
  )
138
122
 
139
- return backends
123
+ # Also filter out non-default backends.
124
+ default_backends = list(
125
+ filter(
126
+ lambda backend: self._match_all(
127
+ backend.configuration().to_dict(), {"is_default": True}
128
+ ),
129
+ filtered_backends,
130
+ )
131
+ )
132
+ # If default backends were found - return them, otherwise return the filtered_backends collection.
133
+ # The latter case could happen where there's no default backend defined for the specified target.
134
+ if len(default_backends) > 0:
135
+ return default_backends
136
+
137
+ return filtered_backends
140
138
 
141
139
  def get_job(self, job_id) -> AzureQuantumJob:
142
140
  """Returns the Job instance associated with the given id.
@@ -21,9 +21,6 @@ class Quantinuum(Target):
21
21
  "quantinuum.qpu.h1-1",
22
22
  "quantinuum.sim.h1-1sc",
23
23
  "quantinuum.sim.h1-1e",
24
- "quantinuum.qpu.h1-2",
25
- "quantinuum.sim.h1-2sc",
26
- "quantinuum.sim.h1-2e"
27
24
  "quantinuum.qpu.h2-1",
28
25
  "quantinuum.sim.h2-1sc",
29
26
  "quantinuum.sim.h2-1e",
@@ -29,7 +29,6 @@ class RigettiTarget(str, Enum):
29
29
  QVM = "rigetti.sim.qvm"
30
30
  """A simulator target for Quil. See https://github.com/quil-lang/qvm for more info."""
31
31
 
32
- ANKAA_9Q_1 = "rigetti.qpu.ankaa-9q-1"
33
32
  ANKAA_2 = "rigetti.qpu.ankaa-2"
34
33
 
35
34
  def simulators() -> List[str]:
@@ -41,16 +40,13 @@ class RigettiTarget(str, Enum):
41
40
  def qpus() -> List[str]:
42
41
  """Returns a list of QPU targets"""
43
42
  return [
44
- RigettiTarget.ANKAA_9Q_1.value,
45
43
  RigettiTarget.ANKAA_2.value,
46
44
  ]
47
45
 
48
46
  def num_qubits(target_name) -> int:
49
47
  """Returns the number of qubits supported by the given target"""
50
48
 
51
- if target_name == RigettiTarget.ANKAA_9Q_1.value:
52
- return 9
53
- elif target_name == RigettiTarget.QVM.value:
49
+ if target_name == RigettiTarget.QVM.value:
54
50
  return 20
55
51
  elif target_name == RigettiTarget.ANKAA_2.value:
56
52
  return 84
@@ -111,8 +111,8 @@ https://github.com/microsoft/qdk-python/issues.")
111
111
 
112
112
  def get_targets(
113
113
  self,
114
- name: str,
115
- provider_id: str,
114
+ name: str = None,
115
+ provider_id: str = None,
116
116
  **kwargs
117
117
  ) -> Union[Target, List[Target]]:
118
118
  """Create targets that are available to this workspace
@@ -129,8 +129,13 @@ https://github.com/microsoft/qdk-python/issues.")
129
129
  """
130
130
  target_statuses = self._workspace._get_target_status(name, provider_id)
131
131
 
132
+ # TODO: Make this function always return a list in the next major release.
132
133
  if len(target_statuses) == 1:
133
- return self.from_target_status(*target_statuses[0], **kwargs)
134
+ result = self.from_target_status(*target_statuses[0], **kwargs)
135
+ if name is None:
136
+ return [result]
137
+ else:
138
+ return result
134
139
 
135
140
  else:
136
141
  # Don't return redundant targets
@@ -5,4 +5,4 @@
5
5
  # Copyright (c) Microsoft Corporation. All rights reserved.
6
6
  # Licensed under the MIT License.
7
7
  ##
8
- __version__ = "2.0.0.dev0"
8
+ __version__ = "2.0.1"
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: azure-quantum
3
- Version: 2.0.0.dev0
3
+ Version: 2.0.1
4
4
  Summary: Python client for Azure Quantum
5
5
  Home-page: https://github.com/microsoft/azure-quantum-python
6
6
  Author: Microsoft