From ec7d04718550c7454c06922859ba0d6a62e4cd7b Mon Sep 17 00:00:00 2001 From: Cody Wang Date: Mon, 6 Nov 2023 16:31:36 -0800 Subject: [PATCH] Remove `retrying` dependency (#129) * Use Braket SDK for polling * Use args directly * Update version.py * Extra fixes * Update version.py * Update .gitignore * Update braket_backend.py * Update braket_backend.py * Update test_adapter.py * Update braket_backend.py * Update version.py * Update test_adapter.py --- .gitignore | 2 + .../providers/braket_job.py | 55 ++++++++----------- qiskit_braket_provider/version.py | 2 +- requirements.txt | 1 - tests/providers/test_adapter.py | 43 +++++++-------- 5 files changed, 45 insertions(+), 58 deletions(-) diff --git a/.gitignore b/.gitignore index 468fb4e4..77e8fd1f 100644 --- a/.gitignore +++ b/.gitignore @@ -4,7 +4,9 @@ __pycache__ venv/ .idea/ +*.iml .vscode/ +*.DS_Store # Distribution / packaging .Python diff --git a/qiskit_braket_provider/providers/braket_job.py b/qiskit_braket_provider/providers/braket_job.py index 9043c314..2e754622 100644 --- a/qiskit_braket_provider/providers/braket_job.py +++ b/qiskit_braket_provider/providers/braket_job.py @@ -1,5 +1,4 @@ """AWS Braket job.""" -import os from datetime import datetime from typing import List, Optional, Union from warnings import warn @@ -11,7 +10,6 @@ from qiskit.providers import BackendV2, JobStatus, JobV1 from qiskit.result import Result from qiskit.result.models import ExperimentResult, ExperimentResultData -from retrying import retry def retry_if_result_none(result): @@ -19,12 +17,6 @@ def retry_if_result_none(result): return result is None -@retry( - retry_on_result=retry_if_result_none, - stop_max_delay=int(os.environ.get("QISKIT_BRAKET_PROVIDER_MAX_DELAY", 60000)), - wait_fixed=int(os.environ.get("QISKIT_BRAKET_PROVIDER_WAIT_TIME", 2000)), - wrap_exception=True, -) def _get_result_from_aws_tasks( tasks: Union[List[LocalQuantumTask], List[AwsQuantumTask]] ) -> Optional[List[ExperimentResult]]: @@ -41,32 +33,31 @@ def _get_result_from_aws_tasks( # For each task the results is get and filled into an ExperimentResult object for task in tasks: - if task.state() in AwsQuantumTask.RESULTS_READY_STATES: - result: GateModelQuantumTaskResult = task.result() - - if result.task_metadata.shots == 0: - statevector = result.values[ - result._result_types_indices[ - "{'type': }" - ] + result: GateModelQuantumTaskResult = task.result() + if not result: + return None + + if result.task_metadata.shots == 0: + statevector = result.values[ + result._result_types_indices[ + "{'type': }" ] - data = ExperimentResultData( - statevector=statevector, - ) - else: - counts = { - k[::-1]: v for k, v in dict(result.measurement_counts).items() - } # convert to little-endian - - data = ExperimentResultData( - counts=counts, - memory=[ - "".join(shot_result[::-1].astype(str)) - for shot_result in result.measurements - ], - ) + ] + data = ExperimentResultData( + statevector=statevector, + ) else: - return None + counts = { + k[::-1]: v for k, v in dict(result.measurement_counts).items() + } # convert to little-endian + + data = ExperimentResultData( + counts=counts, + memory=[ + "".join(shot_result[::-1].astype(str)) + for shot_result in result.measurements + ], + ) experiment_result = ExperimentResult( shots=result.task_metadata.shots, diff --git a/qiskit_braket_provider/version.py b/qiskit_braket_provider/version.py index 614cead4..671335ba 100644 --- a/qiskit_braket_provider/version.py +++ b/qiskit_braket_provider/version.py @@ -1,2 +1,2 @@ """Qiskit-Braket provider version.""" -__version__ = "0.0.4" +__version__ = "0.0.5" diff --git a/requirements.txt b/requirements.txt index bb5345c6..9b99a9c9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,7 +2,6 @@ certifi>=2021.5.30 qiskit-aer>=0.10.2 qiskit-terra>=0.19.2 amazon-braket-sdk>=1.56.0 -retrying==1.3.3 setuptools>=40.1.0 numpy>=1.3 diff --git a/tests/providers/test_adapter.py b/tests/providers/test_adapter.py index ac9809cf..a104bbca 100644 --- a/tests/providers/test_adapter.py +++ b/tests/providers/test_adapter.py @@ -1,6 +1,5 @@ """Tests for Qiskti to Braket adapter.""" from unittest import TestCase -import pytest from braket.circuits import Circuit, FreeParameter, observables from braket.devices import LocalSimulator @@ -201,32 +200,28 @@ def test_standard_gate_decomp(self): parameter_bindings = dict(zip(parameters, parameter_values)) qiskit_circuit = qiskit_circuit.assign_parameters(parameter_bindings) - if standard_gate.name != "cu": - with self.subTest(f"Circuit with {standard_gate.name} gate."): - braket_job = backend.run(qiskit_circuit, shots=1000) - braket_result = braket_job.result().get_counts() + with self.subTest(f"Circuit with {standard_gate.name} gate."): + braket_job = backend.run(qiskit_circuit, shots=1000) + braket_result = braket_job.result().get_counts() - qiskit_job = execute(qiskit_circuit, aer_backend, shots=1000) - qiskit_result = qiskit_job.result().get_counts() + qiskit_job = execute(qiskit_circuit, aer_backend, shots=1000) + qiskit_result = qiskit_job.result().get_counts() - combined_results = combine_dicts( - {k: float(v) / 1000.0 for k, v in braket_result.items()}, - qiskit_result, - ) + combined_results = combine_dicts( + {k: float(v) / 1000.0 for k, v in braket_result.items()}, + qiskit_result, + ) - for key, values in combined_results.items(): - percent_diff = abs( - ((float(values[0]) - values[1]) / values[0]) * 100 - ) - abs_diff = abs(values[0] - values[1]) - self.assertTrue( - percent_diff < 10 or abs_diff < 0.05, - f"Key {key} with percent difference {percent_diff} " - f"and absolute difference {abs_diff}. Original values {values}", - ) - else: - with pytest.raises(TypeError): - convert_qiskit_to_braket_circuit(qiskit_circuit) + for key, values in combined_results.items(): + percent_diff = abs( + ((float(values[0]) - values[1]) / values[0]) * 100 + ) + abs_diff = abs(values[0] - values[1]) + self.assertTrue( + percent_diff < 10 or abs_diff < 0.05, + f"Key {key} with percent difference {percent_diff} " + f"and absolute difference {abs_diff}. Original values {values}", + ) def test_exponential_gate_decomp(self): """Tests adapter translation of exponential gates"""