diff --git a/pyproject.toml b/pyproject.toml index db3f89f..d15fd6c 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -24,6 +24,7 @@ dynamic = ["version", "dependencies", "optional-dependencies"] [project.entry-points."braket.simulators"] braket_sv_v2 = "braket.simulator_v2.state_vector_simulator_v2:StateVectorSimulatorV2" braket_dm_v2 = "braket.simulator_v2.density_matrix_simulator_v2:DensityMatrixSimulatorV2" +braket_sv_branched = "braket.simulator_v2.state_vector_simulator_branched:StateVectorSimulatorBranched" [tool.setuptools] include-package-data=false diff --git a/src/braket/simulator_v2/__init__.py b/src/braket/simulator_v2/__init__.py index 92dc40a..03ea6fe 100644 --- a/src/braket/simulator_v2/__init__.py +++ b/src/braket/simulator_v2/__init__.py @@ -4,5 +4,8 @@ from braket.simulator_v2.state_vector_simulator_v2 import ( # noqa: F401 StateVectorSimulatorV2, ) +from braket.simulator_v2.state_vector_simulator_branched import ( + StateVectorSimulatorBranched +) from ._version import __version__ # noqa: F401 diff --git a/src/braket/simulator_v2/state_vector_simulator_branched.py b/src/braket/simulator_v2/state_vector_simulator_branched.py new file mode 100644 index 0000000..b5c93c0 --- /dev/null +++ b/src/braket/simulator_v2/state_vector_simulator_branched.py @@ -0,0 +1,182 @@ +import sys + +from braket.device_schema.simulators import ( + GateModelSimulatorDeviceCapabilities, + GateModelSimulatorDeviceParameters, +) + +from braket.simulator_v2.base_simulator_v2 import BaseLocalSimulatorV2 + + +class StateVectorSimulatorBranched(BaseLocalSimulatorV2): + """A state vector simulator meant to run directly on the user's machine using a Julia backend. + + This class wraps a BraketSimulator object so that it can be run and returns + results using constructs from the SDK rather than Braket IR. + """ + + DEVICE_ID = "braket_sv_branched" + + def __init__(self): + super().__init__(self.DEVICE_ID) + + @property + def properties(self) -> GateModelSimulatorDeviceCapabilities: + """ + Device properties for the StateVectorSimulator. + + Returns: + GateModelSimulatorDeviceCapabilities: Device capabilities for this simulator. + """ + observables = ["x", "y", "z", "h", "i", "hermitian"] + max_shots = sys.maxsize + qubit_count = 32 + return GateModelSimulatorDeviceCapabilities.parse_obj( + { + "service": { + "executionWindows": [ + { + "executionDay": "Everyday", + "windowStartHour": "00:00", + "windowEndHour": "23:59:59", + } + ], + "shotsRange": [0, max_shots], + }, + "action": { + "braket.ir.openqasm.program": { + "actionType": "braket.ir.openqasm.program", + "version": ["1"], + "supportedOperations": [ + # OpenQASM primitives + "U", + "GPhase", + # builtin Braket gates + "ccnot", + "cnot", + "cphaseshift", + "cphaseshift00", + "cphaseshift01", + "cphaseshift10", + "cswap", + "cv", + "cy", + "cz", + "ecr", + "gpi", + "gpi2", + "h", + "i", + "iswap", + "ms", + "pswap", + "phaseshift", + "rx", + "ry", + "rz", + "s", + "si", + "swap", + "t", + "ti", + "unitary", + "v", + "vi", + "x", + "xx", + "xy", + "y", + "yy", + "z", + "zz", + ], + "supportedModifiers": [ + { + "name": "ctrl", + }, + { + "name": "negctrl", + }, + { + "name": "pow", + "exponent_types": ["int", "float"], + }, + { + "name": "inv", + }, + ], + "supportedPragmas": [ + "braket_unitary_matrix", + "braket_result_type_state_vector", + "braket_result_type_density_matrix", + "braket_result_type_sample", + "braket_result_type_expectation", + "braket_result_type_variance", + "braket_result_type_probability", + "braket_result_type_amplitude", + ], + "forbiddenPragmas": [ + "braket_noise_amplitude_damping", + "braket_noise_bit_flip", + "braket_noise_depolarizing", + "braket_noise_kraus", + "braket_noise_pauli_channel", + "braket_noise_generalized_amplitude_damping", + "braket_noise_phase_flip", + "braket_noise_phase_damping", + "braket_noise_two_qubit_dephasing", + "braket_noise_two_qubit_depolarizing", + "braket_result_type_adjoint_gradient", + ], + "supportedResultTypes": [ + { + "name": "Sample", + "observables": observables, + "minShots": 1, + "maxShots": max_shots, + }, + { + "name": "Expectation", + "observables": observables, + "minShots": 0, + "maxShots": max_shots, + }, + { + "name": "Variance", + "observables": observables, + "minShots": 0, + "maxShots": max_shots, + }, + { + "name": "Probability", + "minShots": 0, + "maxShots": max_shots, + }, + { + "name": "StateVector", + "minShots": 0, + "maxShots": 0, + }, + { + "name": "DensityMatrix", + "minShots": 0, + "maxShots": 0, + }, + { + "name": "Amplitude", + "minShots": 0, + "maxShots": 0, + }, + ], + "supportPhysicalQubits": False, + "supportsPartialVerbatimBox": False, + "requiresContiguousQubitIndices": True, + "requiresAllQubitsMeasurement": True, + "supportsUnassignedMeasurements": True, + "disabledQubitRewiringSupported": False, + }, + }, + "paradigm": {"qubitCount": qubit_count}, + "deviceParameters": GateModelSimulatorDeviceParameters.schema(), + } + )