def test_timeout_no_result_terminal_state(aws_session): _mock_metadata(aws_session, "RUNNING") _mock_s3(aws_session, MockS3.MOCK_S3_RESULT_GATE_MODEL) # Setup the poll timing such that the timeout will occur after one API poll quantum_task = AwsQuantumTask( "foo:bar:arn", aws_session, poll_timeout_seconds=0.5, poll_interval_seconds=1 ) assert quantum_task.result() is None _mock_metadata(aws_session, "FAILED") assert quantum_task.result() is None
def test_timeout_completed(aws_session): _mock_metadata(aws_session, "RUNNING") _mock_s3(aws_session, MockS3.MOCK_S3_RESULT_GATE_MODEL) # Setup the poll timing such that the timeout will occur after one API poll quantum_task = AwsQuantumTask( "foo:bar:arn", aws_session, poll_timeout_seconds=0.5, poll_interval_seconds=1 ) assert quantum_task.result() is None _mock_metadata(aws_session, "COMPLETED") assert quantum_task.state() == "COMPLETED" assert quantum_task.result() == GateModelQuantumTaskResult.from_string( MockS3.MOCK_S3_RESULT_GATE_MODEL )
def test_timeout_completed(aws_session): _mock_metadata(aws_session, "RUNNING") _mock_s3(aws_session, MockS3.MOCK_S3_RESULT_GATE_MODEL) # Setup the poll timing such that the timeout will occur after one API poll quantum_task = AwsQuantumTask( "foo:bar:arn", aws_session, poll_timeout_seconds=0.5, poll_interval_seconds=1, poll_outside_execution_window=True, ) assert quantum_task.result() is None _mock_metadata(aws_session, "COMPLETED") assert quantum_task.state() == "COMPLETED" assert quantum_task.result() == GateModelQuantumTaskResult.from_string( MockS3.MOCK_S3_RESULT_GATE_MODEL) # Cached status is still COMPLETED, so result should be fetched _mock_metadata(aws_session, "RUNNING") quantum_task._result = None assert quantum_task.result() == GateModelQuantumTaskResult.from_string( MockS3.MOCK_S3_RESULT_GATE_MODEL)
class AmazonCloudPromise(AmazonPromiseBase): """ AWS Cloud Promise """ try: S3_BUCKET = (open( os.path.join(os.path.dirname(__file__), "../../s3_location.txt"), "r").read().strip()) except FileNotFoundError: S3_BUCKET = None def __init__(self, circuit: braket.circuits.Circuit, device, num_shots: int, *, s3_bucket: str = S3_BUCKET, s3_bucket_folder: str = "benchmarks"): super().__init__() self.s3_path = (s3_bucket, s3_bucket_folder) self.task = device.run(circuit, self.s3_path, shots=num_shots, poll_timeout_seconds=5 * 24 * 60 * 60) def job_id(self): """ Return a job id. """ return self.task.id def status(self): """ Return the status. """ state = self.task.state() if state == "COMPLETED": return "DONE" elif state == "CREATED" or state == "QUEUED" or state == "RUNNING": return "PENDING" else: return "FAILURE" def freeze(self): """ Since promises that resolve immediately will never be pickled, we can just pass self. The real promise can return a separate frozen instance if necessary. """ if not isinstance(self.task, str): self.task = self.job_id() return self def thaw(self): """ No thawing necessary. The real promise should probably have this method in the frozen instance class. """ from braket.aws import AwsQuantumTask if isinstance(self.task, str): self.task = AwsQuantumTask(arn=self.task) return self def result(self): if self.status() == "DONE": return self.task.result() else: return None