Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 8 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,20 +48,20 @@ $ python
```python
import qiskit
from qiskit import IBMQ
from qiskit.providers.aer import QasmSimulator
from qiskit.providers.aer import AerSimulator

# Generate 3-qubit GHZ state
circ = qiskit.QuantumCircuit(3, 3)
circ = qiskit.QuantumCircuit(3)
circ.h(0)
circ.cx(0, 1)
circ.cx(1, 2)
circ.measure([0, 1, 2], [0, 1 ,2])
circ.measure_all()

# Construct an ideal simulator
sim = QasmSimulator()
aersim = AerSimulator()

# Perform an ideal simulation
result_ideal = qiskit.execute(circ, sim).result()
result_ideal = qiskit.execute(circ, aersim).result()
counts_ideal = result_ideal.get_counts(0)
print('Counts(ideal):', counts_ideal)
# Counts(ideal): {'000': 493, '111': 531}
Expand All @@ -70,11 +70,11 @@ print('Counts(ideal):', counts_ideal)
# This simulator backend will be automatically configured
# using the device configuration and noise model
provider = IBMQ.load_account()
vigo_backend = provider.get_backend('ibmq_vigo')
vigo_sim = QasmSimulator.from_backend(vigo_backend)
backend = provider.get_backend('ibmq_athens')
aersim_backend = AerSimulator.from_backend(backend)

# Perform noisy simulation
result_noise = qiskit.execute(circ, vigo_sim).result()
result_noise = qiskit.execute(circ, aersim_backend).result()
counts_noise = result_noise.get_counts(0)

print('Counts(noise):', counts_noise)
Expand Down
10 changes: 9 additions & 1 deletion qiskit/providers/aer/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,21 @@
Simulator Backends
==================

.. autosummary::
:toctree: ../stubs/

AerSimulator
PulseSimulator

Legacy Simulator Backends
=========================

.. autosummary::
:toctree: ../stubs/

QasmSimulator
StatevectorSimulator
UnitarySimulator
PulseSimulator

Job Class
=========
Expand Down
47 changes: 38 additions & 9 deletions qiskit/providers/aer/aerprovider.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
from qiskit.providers import ProviderV1 as Provider
from qiskit.providers.providerutils import filter_backends

from .backends.aer_simulator import AerSimulator
from .backends.qasm_simulator import QasmSimulator
from .backends.statevector_simulator import StatevectorSimulator
from .backends.unitary_simulator import UnitarySimulator
Expand All @@ -25,14 +26,37 @@
class AerProvider(Provider):
"""Provider for Qiskit Aer backends."""

_BACKENDS = None

def __init__(self):
# Populate the list of Aer simulator backends.
self._backends = [
('qasm_simulator', QasmSimulator),
('statevector_simulator', StatevectorSimulator),
('unitary_simulator', UnitarySimulator),
('pulse_simulator', PulseSimulator)
]
if AerProvider._BACKENDS is None:
# Populate the list of Aer simulator backends.
methods = AerSimulator().available_methods()
devices = AerSimulator().available_devices()
backends = []
for method in methods:
name = 'aer_simulator'
if method not in [None, 'automatic']:
name += f'_{method}'
device_name = 'CPU'
backends.append((name, AerSimulator, method, device_name))

# Add GPU device backends
if method in ['statevector', 'density_matrix', 'unitary']:
for device in devices:
if device != 'CPU':
new_name = f'{name}_{device}'.lower()
device_name = device
backends.append((new_name, AerSimulator, method, device_name))

# Add legacy backend names
backends += [
('qasm_simulator', QasmSimulator, None, None),
('statevector_simulator', StatevectorSimulator, None, None),
('unitary_simulator', UnitarySimulator, None, None),
('pulse_simulator', PulseSimulator, None, None)
]
AerProvider._BACKENDS = backends

def get_backend(self, name=None, **kwargs):
return super().get_backend(name=name, **kwargs)
Expand All @@ -42,9 +66,14 @@ def backends(self, name=None, filters=None, **kwargs):
# Instantiate a new backend instance so if config options
# are set they will only last as long as that backend object exists
backends = []
for backend_name, backend_cls in self._backends:
for backend_name, backend_cls, method, device in self._BACKENDS:
opts = {'provider': self}
if method is not None:
opts['method'] = method
if device is not None:
opts['device'] = device
if name is None or backend_name == name:
backends.append(backend_cls(provider=self))
backends.append(backend_cls(**opts))
return filter_backends(backends, filters=filters)

def __str__(self):
Expand Down
1 change: 1 addition & 0 deletions qiskit/providers/aer/backends/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@
Aer Provider Simulator Backends
"""

from .aer_simulator import AerSimulator
from .qasm_simulator import QasmSimulator
from .statevector_simulator import StatevectorSimulator
from .unitary_simulator import UnitarySimulator
Expand Down
Loading