diff --git a/setup.py b/setup.py index 071d78aef..69b9bfe77 100644 --- a/setup.py +++ b/setup.py @@ -29,7 +29,8 @@ install_requires=[ "amazon-braket-schemas>=1.21.3", # "amazon-braket-default-simulator>=1.26.0", - "amazon-braket-default-simulator@git+https://github.com/Altanali/amazon-braket-default-simulator-python.git@optional_net_detuning", # noqa: E501 + # "amazon-braket-default-simulator@git+https://github.com/Altanali/amazon-braket-default-simulator-python.git@optional_net_detuning", # noqa: E501 + "amazon-braket-default-simulator@git+https://github.com/amazon-braket/amazon-braket-default-simulator-python.git@mao/ahs_noise", "oqpy~=0.3.5", "backoff", "boltons", diff --git a/src/braket/aws/aws_device.py b/src/braket/aws/aws_device.py index f78b6930f..d759b8248 100644 --- a/src/braket/aws/aws_device.py +++ b/src/braket/aws/aws_device.py @@ -931,7 +931,7 @@ def _setup_gate_device_emulator(self) -> Emulator: return self._emulator def _setup_ahs_device_emulator(self) -> Emulator: - self._emulator = Emulator(backend="braket_ahs", name=self._name) + self._emulator = Emulator(backend="braket_ahs_tn_noisy", name=self._name) self._emulator.add_pass(ahs_criterion(self.properties)) self._emulator.add_pass(ahs_noise_model(self.properties)) return self._emulator @@ -979,6 +979,8 @@ def emulate( task_specification: ProgramType, shots: Optional[int] = None, inputs: Optional[dict[str, float]] = None, + *args: Any, + **kwargs: Any, ) -> QuantumTask: """Emulate a quantum task specification on this quantum device emulator. A quantum task can be a circuit. Emulation @@ -999,4 +1001,4 @@ def emulate( QuantumTask: The QuantumTask tracking task execution on this device emulator. """ task_specification = deepcopy(task_specification) - return self.emulator.run(task_specification, shots, inputs) + return self.emulator.run(task_specification, shots, inputs, *args, **kwargs) diff --git a/src/braket/emulation/emulation_passes/ahs_passes/ahs_noisy_pass.py b/src/braket/emulation/emulation_passes/ahs_passes/ahs_noisy_pass.py index 1ed40c363..5cabeda82 100644 --- a/src/braket/emulation/emulation_passes/ahs_passes/ahs_noisy_pass.py +++ b/src/braket/emulation/emulation_passes/ahs_passes/ahs_noisy_pass.py @@ -29,7 +29,8 @@ class AhsNoiseData: atom_detection_error_false_negative: float -AhsProgramType = TypeVar('AhsProgramType', bound = AHSProgram | AnalogHamiltonianSimulation) +# AhsProgramType = TypeVar('AhsProgramType', bound = AHSProgram | AnalogHamiltonianSimulation) # Gives error TypeError: unsupported operand type(s) for |: 'ModelMetaclass' and 'type' +AhsProgramType = TypeVar('AhsProgramType', bound = Union[AHSProgram, AnalogHamiltonianSimulation]) class AhsNoise(EmulationPass[AhsProgramType]): diff --git a/src/braket/emulation/emulator.py b/src/braket/emulation/emulator.py index 51cc8e93b..f2d9f31e9 100644 --- a/src/braket/emulation/emulator.py +++ b/src/braket/emulation/emulator.py @@ -12,7 +12,7 @@ from braket.ir.openqasm import Program as OpenQasmProgram from braket.tasks import QuantumTask from braket.tasks.quantum_task_batch import QuantumTaskBatch - +from braket.ahs.analog_hamiltonian_simulation import AnalogHamiltonianSimulation class Emulator(Device, BaseEmulator): @@ -157,13 +157,24 @@ def run_passes( ProgramType: A compiled program with a noise model applied, if one exists for this emulator and apply_noise_model is true. """ - try: - program = super().run_passes(task_specification) - if apply_noise_model and self.noise_model: - return self._noise_model.apply(program) - return program - except Exception as e: - self._raise_exception(e) + if isinstance(task_specification, AnalogHamiltonianSimulation): + try: + if apply_noise_model: + program = super().run_passes(task_specification) + return program + else: + self.validate(task_specification) + return task_specification + except Exception as e: + self._raise_exception(e) + else: + try: + program = super().run_passes(task_specification) + if apply_noise_model and self.noise_model: + return self._noise_model.apply(program) + return program + except Exception as e: + self._raise_exception(e) def validate(self, task_specification: ProgramType) -> None: """