def _( circuit: Circuit, aws_session: AwsSession, create_task_kwargs: Dict[str, Any], device_parameters: Union[dict, BraketSchemaBase], device_arn: str, *args, **kwargs, ) -> AwsQuantumTask: validate_circuit_and_shots(circuit, create_task_kwargs["shots"]) # TODO: Update this to use `deviceCapabilities` from Amazon Braket's GetDevice operation # in order to decide what parameters to build. paradigm_parameters = GateModelParameters(qubitCount=circuit.qubit_count) if "ionq" in device_arn: device_parameters = IonqDeviceParameters( paradigmParameters=paradigm_parameters) elif "rigetti" in device_arn: device_parameters = RigettiDeviceParameters( paradigmParameters=paradigm_parameters) else: # default to use simulator device_parameters = GateModelSimulatorDeviceParameters( paradigmParameters=paradigm_parameters) create_task_kwargs.update({ "action": circuit.to_ir().json(), "deviceParameters": device_parameters.json() }) task_arn = aws_session.create_quantum_task(**create_task_kwargs) return AwsQuantumTask(task_arn, aws_session, *args, **kwargs)
def test_validate_circuit_and_shots_100_noncommuting(): validate_circuit_and_shots( Circuit().h(0).expectation(observables.X() @ observables.Y(), [0, 1]).expectation( observables.Y() @ observables.X(), [0, 1]), 100, )
def _(circuit: Circuit, simulator: BraketSimulator, shots, *args, **kwargs): if DeviceActionType.JAQCD not in simulator.properties.action: raise NotImplementedError( f"{type(simulator)} does not support qubit gate-based programs") validate_circuit_and_shots(circuit, shots) program = circuit.to_ir() qubits = circuit.qubit_count results = simulator.run(program, qubits, shots, *args, **kwargs) return GateModelQuantumTaskResult.from_object(results)
def test_probability_limit(): circ = Circuit() for i in range(50): circ.h(i) circ.probability() too_many_qubits = "Probability target must be less than or equal to 40 qubits." with pytest.raises(ValueError, match=too_many_qubits): validate_circuit_and_shots(circ, 100)
def _( circuit: Circuit, aws_session: AwsSession, create_task_kwargs: Dict[str, Any], device_arn: str, device_parameters: Union[ dict, BraketSchemaBase], # Not currently used for circuits disable_qubit_rewiring: bool, *args, **kwargs, ) -> AwsQuantumTask: validate_circuit_and_shots(circuit, create_task_kwargs["shots"]) # TODO: Update this to use `deviceCapabilities` from Amazon Braket's GetDevice operation # in order to decide what parameters to build. paradigm_parameters = GateModelParameters( qubitCount=circuit.qubit_count, disableQubitRewiring=disable_qubit_rewiring) if "ionq" in device_arn: device_parameters = IonqDeviceParameters( paradigmParameters=paradigm_parameters) elif "rigetti" in device_arn: device_parameters = RigettiDeviceParameters( paradigmParameters=paradigm_parameters) elif "oqc" in device_arn: device_parameters = OqcDeviceParameters( paradigmParameters=paradigm_parameters) else: # default to use simulator device_parameters = GateModelSimulatorDeviceParameters( paradigmParameters=paradigm_parameters) qubit_reference_type = QubitReferenceType.VIRTUAL if disable_qubit_rewiring or Instruction( StartVerbatimBox()) in circuit.instructions: qubit_reference_type = QubitReferenceType.PHYSICAL serialization_properties = OpenQASMSerializationProperties( qubit_reference_type=qubit_reference_type) create_task_kwargs.update({ "action": circuit.to_ir( ir_type=IRType.OPENQASM, serialization_properties=serialization_properties, ).json(), "deviceParameters": device_parameters.json(), }) task_arn = aws_session.create_quantum_task(**create_task_kwargs) return AwsQuantumTask(task_arn, aws_session, *args, **kwargs)
def _( circuit: Circuit, aws_session: AwsSession, create_task_kwargs: Dict[str, Any], device_arn: str, device_parameters: Union[ dict, BraketSchemaBase], # Not currently used for circuits disable_qubit_rewiring, *args, **kwargs, ) -> AwsQuantumTask: validate_circuit_and_shots(circuit, create_task_kwargs["shots"]) if circuit.qubits_frozen and not disable_qubit_rewiring: raise ValueError( "disable_qubit_rewiring must be True to run circuit with compiler directives" ) # TODO: Update this to use `deviceCapabilities` from Amazon Braket's GetDevice operation # in order to decide what parameters to build. paradigm_parameters = GateModelParameters( qubitCount=circuit.qubit_count, disableQubitRewiring=disable_qubit_rewiring) if "ionq" in device_arn: device_parameters = IonqDeviceParameters( paradigmParameters=paradigm_parameters) elif "rigetti" in device_arn: device_parameters = RigettiDeviceParameters( paradigmParameters=paradigm_parameters) else: # default to use simulator device_parameters = GateModelSimulatorDeviceParameters( paradigmParameters=paradigm_parameters) create_task_kwargs.update({ "action": circuit.to_ir().json(), "deviceParameters": device_parameters.json() }) task_arn = aws_session.create_quantum_task(**create_task_kwargs) return AwsQuantumTask(task_arn, aws_session, *args, **kwargs)
def test_validate_circuit_and_shots_100_result_amplitude(): validate_circuit_and_shots(Circuit().h(0).amplitude(state=["0"]), 100)
def test_validate_circuit_and_shots_100_result_state_vector(): validate_circuit_and_shots(Circuit().h(0).state_vector(), 100)
def test_validate_circuit_and_shots_100_results(): assert validate_circuit_and_shots(Circuit().h(0).probability(), 100) is None
def test_validate_circuit_and_shots_0_results(): assert validate_circuit_and_shots(Circuit().h(0).state_vector(), 0) is None
def test_validate_circuit_and_shots_100_no_results(): assert validate_circuit_and_shots(Circuit().h(0), 100) is None
def test_validate_circuit_and_shots_0_no_results(): validate_circuit_and_shots(Circuit().h(0), 0)
def test_validate_circuit_and_shots_0_no_instructions(): validate_circuit_and_shots(Circuit(), 0)
def test_validate_circuit_and_shots_100_results_mixed_result(): assert (validate_circuit_and_shots( Circuit().h(0).expectation(observable=Observable.Z(), target=0), 100) is None)