Skip to content
Open
3 changes: 2 additions & 1 deletion setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
6 changes: 4 additions & 2 deletions src/braket/aws/aws_device.py
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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)
Original file line number Diff line number Diff line change
Expand Up @@ -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]):
Expand Down
27 changes: 19 additions & 8 deletions src/braket/emulation/emulator.py
Original file line number Diff line number Diff line change
Expand Up @@ -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):

Expand Down Expand Up @@ -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:
"""
Expand Down