Skip to content

Commit

Permalink
Basicaer renaming. (Qiskit#1854)
Browse files Browse the repository at this point in the history
* Renaming built-in basic are

* Small update

* Linting
  • Loading branch information
jaygambetta authored and nonhermitian committed Feb 23, 2019
1 parent cdf7d0e commit cd2dafa
Show file tree
Hide file tree
Showing 15 changed files with 85 additions and 88 deletions.
2 changes: 1 addition & 1 deletion qiskit/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@
__path__ = pkgutil.extend_path(__path__, __name__)

# Please note these are global instances, not modules.
from qiskit.providers.builtinsimulators import BasicAer
from qiskit.providers.basicaer import BasicAer

# Try to import the Aer provider if the Aer element is installed.
try:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,14 @@
# This source code is licensed under the Apache License, Version 2.0 found in
# the LICENSE.txt file in the root directory of this source tree.

"""Built-in Terra basic Python simulators."""
"""BasicAer Provider: Contains Python simulators."""

from .simulatorsprovider import SimulatorsProvider
from .simulatorsjob import SimulatorsJob
from .basicaerprovider import BasicAerProvider
from .basicaerjob import BasicAerJob
from .qasm_simulator import QasmSimulatorPy
from .statevector_simulator import StatevectorSimulatorPy
from .unitary_simulator import UnitarySimulatorPy
from .exceptions import SimulatorError
from .exceptions import BasicAerError

# Global instance to be used as the entry point for convenience.
BasicAer = SimulatorsProvider() # pylint: disable=invalid-name
BasicAer = BasicAerProvider() # pylint: disable=invalid-name
Original file line number Diff line number Diff line change
Expand Up @@ -7,11 +7,8 @@

# pylint: disable=invalid-name

"""Contains functions used by the simulators.
"""Contains functions used by the basic aer simulators.
Functions
index2 -- Takes a bitstring k and inserts bits b1 as the i1th bit
and b2 as the i2th bit
"""

from string import ascii_uppercase, ascii_lowercase
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
# This source code is licensed under the Apache License, Version 2.0 found in
# the LICENSE.txt file in the root directory of this source tree.

"""This module implements the job class used by simulator backends."""
"""This module implements the job class used by Basic Aer Provider."""

from concurrent import futures
import logging
Expand Down Expand Up @@ -37,8 +37,8 @@ def _wrapper(self, *args, **kwargs):
return _wrapper


class SimulatorsJob(BaseJob):
"""SimulatorsJob class.
class BasicAerJob(BaseJob):
"""BasicAerJob class.
Attributes:
_executor (futures.Executor): executor to handle asynchronous jobs
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@
# the LICENSE.txt file in the root directory of this source tree.


"""Provider for built-in simulator backends."""
"""Provider for Basic Aer simulator backends."""

from collections import OrderedDict
import logging
Expand All @@ -30,13 +30,13 @@
]


class SimulatorsProvider(BaseProvider):
"""Provider for builtin simulators backends."""
class BasicAerProvider(BaseProvider):
"""Provider for Basic Aer backends."""

def __init__(self, *args, **kwargs):
super().__init__(args, kwargs)

# Populate the list of builtin simulators backends.
# Populate the list of Basic Aer backends.
self._backends = self._verify_backends()

def get_backend(self, name=None, **kwargs):
Expand Down Expand Up @@ -93,12 +93,12 @@ def _deprecated_backend_names():

def _verify_backends(self):
"""
Return the builtin simulators backends in `BACKENDS` that are
Return the Basic Aer backends in `BACKENDS` that are
effectively available (as some of them might depend on the presence
of an optional dependency or on the existence of a binary).
Returns:
dict[str:BaseBackend]: a dict of builtin simulators backend instances for
dict[str:BaseBackend]: a dict of Basic Aer backend instances for
the backends that could be instantiated, keyed by backend name.
"""
ret = OrderedDict()
Expand All @@ -109,7 +109,7 @@ def _verify_backends(self):
ret[backend_name] = backend_instance
except QiskitError as err:
# Ignore backends that could not be initialized.
logger.info('builtin simulators backend %s is not available: %s',
logger.info('Basic Aer backend %s is not available: %s',
backend_cls, str(err))
return ret

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,14 @@
# the LICENSE.txt file in the root directory of this source tree.

"""
Exception for errors raised by simulators.
Exception for errors raised by Basic Aer.
"""

from qiskit.exceptions import QiskitError


class SimulatorError(QiskitError):
"""Base class for errors raised by simulators."""
class BasicAerError(QiskitError):
"""Base class for errors raised by Basic Aer."""

def __init__(self, *message):
"""Set the error message."""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
QasmSimulatorPy().run(qobj)
Where the input is a Qobj object and the output is a SimulatorsJob object, which can
Where the input is a Qobj object and the output is a BasicAerJob object, which can
later be queried for the Result object. The result will contain a 'memory' data
field, which is a result of measurements for each shot.
"""
Expand All @@ -36,11 +36,11 @@
from qiskit.providers.models import BackendConfiguration
from qiskit.result import Result
from qiskit.providers import BaseBackend
from qiskit.providers.builtinsimulators.simulatorsjob import SimulatorsJob
from .exceptions import SimulatorError
from ._simulatortools import single_gate_matrix
from ._simulatortools import cx_gate_matrix
from ._simulatortools import einsum_vecmul_index
from qiskit.providers.basicaer.basicaerjob import BasicAerJob
from .exceptions import BasicAerError
from ._basicaertools import single_gate_matrix
from ._basicaertools import cx_gate_matrix
from ._basicaertools import einsum_vecmul_index

logger = logging.getLogger(__name__)

Expand Down Expand Up @@ -268,8 +268,8 @@ def _validate_initial_statevector(self):
length = len(self._initial_statevector)
required_dim = 2 ** self._number_of_qubits
if length != required_dim:
raise SimulatorError('initial statevector is incorrect length: ' +
'{} != {}'.format(length, required_dim))
raise BasicAerError('initial statevector is incorrect length: ' +
'{} != {}'.format(length, required_dim))

def _set_options(self, qobj_config=None, backend_options=None):
"""Set the backend options for all experiments in a qobj"""
Expand All @@ -291,8 +291,8 @@ def _set_options(self, qobj_config=None, backend_options=None):
# Check the initial statevector is normalized
norm = np.linalg.norm(self._initial_statevector)
if round(norm, 12) != 1:
raise SimulatorError('initial statevector is not normalized: ' +
'norm {} != 1'.format(norm))
raise BasicAerError('initial statevector is not normalized: ' +
'norm {} != 1'.format(norm))
# Check for custom chop threshold
# Replace with custom options
if 'chop_threshold' in backend_options:
Expand Down Expand Up @@ -364,7 +364,7 @@ def run(self, qobj, backend_options=None):
backend_options (dict): backend options
Returns:
SimulatorsJob: derived from BaseJob
BasicAerJob: derived from BaseJob
Additional Information:
backend_options: Is a dict of options for the backend. It may contain
Expand All @@ -384,7 +384,7 @@ def run(self, qobj, backend_options=None):
self._set_options(qobj_config=qobj.config,
backend_options=backend_options)
job_id = str(uuid.uuid4())
job = SimulatorsJob(self, job_id, self._run_job, qobj)
job = BasicAerJob(self, job_id, self._run_job, qobj)
job.submit()
return job

Expand Down Expand Up @@ -442,7 +442,7 @@ def run_experiment(self, experiment):
"time_taken": simulation time of this single experiment
}
Raises:
SimulatorError: if an error occurred.
BasicAerError: if an error occurred.
"""
start = time.time()
self._number_of_qubits = experiment.config.n_qubits
Expand Down Expand Up @@ -526,7 +526,7 @@ def run_experiment(self, experiment):
else:
backend = self.name()
err_msg = '{0} encountered unrecognized operation "{1}"'
raise SimulatorError(err_msg.format(backend, operation.name))
raise BasicAerError(err_msg.format(backend, operation.name))

# Add final creg data to memory list
if self._number_of_cbits > 0:
Expand Down Expand Up @@ -566,9 +566,9 @@ def _validate(self, qobj):
n_qubits = qobj.config.n_qubits
max_qubits = self.configuration().n_qubits
if n_qubits > max_qubits:
raise SimulatorError('Number of qubits {} '.format(n_qubits) +
'is greater than maximum ({}) '.format(max_qubits) +
'for "{}".'.format(self.name()))
raise BasicAerError('Number of qubits {} '.format(n_qubits) +
'is greater than maximum ({}) '.format(max_qubits) +
'for "{}".'.format(self.name()))
for experiment in qobj.experiments:
name = experiment.header.name
if experiment.config.memory_slots == 0:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@
import logging
from math import log2
from qiskit._util import local_hardware_info
from qiskit.providers.builtinsimulators.exceptions import SimulatorError
from qiskit.providers.basicaer.exceptions import BasicAerError
from qiskit.providers.models import BackendConfiguration
from .qasm_simulator import QasmSimulatorPy

Expand Down Expand Up @@ -98,7 +98,7 @@ def run(self, qobj, backend_options=None):
backend_options (dict): backend options
Returns:
SimulatorsJob: derived from BaseJob
BasicAerJob: derived from BaseJob
Additional Information::
Expand Down Expand Up @@ -134,9 +134,9 @@ def _validate(self, qobj):
n_qubits = qobj.config.n_qubits
max_qubits = self.configuration().n_qubits
if n_qubits > max_qubits:
raise SimulatorError('Number of qubits {} '.format(n_qubits) +
'is greater than maximum ({}) '.format(max_qubits) +
'for "{}".'.format(self.name()))
raise BasicAerError('Number of qubits {} '.format(n_qubits) +
'is greater than maximum ({}) '.format(max_qubits) +
'for "{}".'.format(self.name()))
if qobj.config.shots != 1:
logger.info('"%s" only supports 1 shot. Setting shots=1.',
self.name())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
UnitarySimulator().run(qobj)
Where the input is a Qobj object and the output is a SimulatorsJob object, which can
Where the input is a Qobj object and the output is a BasicAerJob object, which can
later be queried for the Result object. The result will contain a 'unitary'
data field, which is a 2**n x 2**n complex numpy array representing the
circuit's unitary matrix.
Expand All @@ -29,12 +29,12 @@
from qiskit._util import local_hardware_info
from qiskit.providers.models import BackendConfiguration
from qiskit.providers import BaseBackend
from qiskit.providers.builtinsimulators.simulatorsjob import SimulatorsJob
from qiskit.providers.basicaer.basicaerjob import BasicAerJob
from qiskit.result import Result
from .exceptions import SimulatorError
from ._simulatortools import single_gate_matrix
from ._simulatortools import cx_gate_matrix
from ._simulatortools import einsum_matmul_index
from .exceptions import BasicAerError
from ._basicaertools import single_gate_matrix
from ._basicaertools import cx_gate_matrix
from ._basicaertools import einsum_matmul_index

logger = logging.getLogger(__name__)

Expand Down Expand Up @@ -150,8 +150,8 @@ def _validate_initial_unitary(self):
required_shape = (2 ** self._number_of_qubits,
2 ** self._number_of_qubits)
if shape != required_shape:
raise SimulatorError('initial unitary is incorrect shape: ' +
'{} != 2 ** {}'.format(shape, required_shape))
raise BasicAerError('initial unitary is incorrect shape: ' +
'{} != 2 ** {}'.format(shape, required_shape))

def _set_options(self, qobj_config=None, backend_options=None):
"""Set the backend options for all experiments in a qobj"""
Expand All @@ -173,13 +173,13 @@ def _set_options(self, qobj_config=None, backend_options=None):
# Check the initial unitary is actually unitary
shape = np.shape(self._initial_unitary)
if len(shape) != 2 or shape[0] != shape[1]:
raise SimulatorError("initial unitary is not a square matrix")
raise BasicAerError("initial unitary is not a square matrix")
iden = np.eye(len(self._initial_unitary))
u_dagger_u = np.dot(self._initial_unitary.T.conj(),
self._initial_unitary)
norm = np.linalg.norm(u_dagger_u - iden)
if round(norm, 10) != 0:
raise SimulatorError("initial unitary is not unitary")
raise BasicAerError("initial unitary is not unitary")
# Check the initial statevector is normalized

# Check for custom chop threshold
Expand Down Expand Up @@ -219,7 +219,7 @@ def run(self, qobj, backend_options=None):
backend_options (dict): backend options
Returns:
SimulatorsJob: derived from BaseJob
BasicAerJob: derived from BaseJob
Additional Information::
Expand Down Expand Up @@ -249,7 +249,7 @@ def run(self, qobj, backend_options=None):
self._set_options(qobj_config=qobj.config,
backend_options=backend_options)
job_id = str(uuid.uuid4())
job = SimulatorsJob(self, job_id, self._run_job, qobj)
job = BasicAerJob(self, job_id, self._run_job, qobj)
job.submit()
return job

Expand Down Expand Up @@ -305,7 +305,7 @@ def run_experiment(self, experiment):
}
Raises:
SimulatorError: if the number of qubits in the circuit is greater than 24.
BasicAerError: if the number of qubits in the circuit is greater than 24.
Note that the practical qubit limit is much lower than 24.
"""
start = time.time()
Expand Down Expand Up @@ -336,7 +336,7 @@ def run_experiment(self, experiment):
else:
backend = self.name()
err_msg = '{0} encountered unrecognized operation "{1}"'
raise SimulatorError(err_msg.format(backend, operation.name))
raise BasicAerError(err_msg.format(backend, operation.name))
# Add final state to data
data = {'unitary': self._get_unitary()}
end = time.time()
Expand All @@ -357,9 +357,9 @@ def _validate(self, qobj):
n_qubits = qobj.config.n_qubits
max_qubits = self.configuration().n_qubits
if n_qubits > max_qubits:
raise SimulatorError('Number of qubits {} '.format(n_qubits) +
'is greater than maximum ({}) '.format(max_qubits) +
'for "{}".'.format(self.name()))
raise BasicAerError('Number of qubits {} '.format(n_qubits) +
'is greater than maximum ({}) '.format(max_qubits) +
'for "{}".'.format(self.name()))
if qobj.config.shots != 1:
logger.info('"%s" only supports 1 shot. Setting shots=1.',
self.name())
Expand All @@ -373,6 +373,6 @@ def _validate(self, qobj):
experiment.config.shots = 1
for operation in experiment.instructions:
if operation.name in ['measure', 'reset']:
raise SimulatorError('Unsupported "%s" instruction "%s" ' +
'in circuit "%s" ', self.name(),
operation.name, name)
raise BasicAerError('Unsupported "%s" instruction "%s" ' +
'in circuit "%s" ', self.name(),
operation.name, name)
2 changes: 1 addition & 1 deletion qiskit/test/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ def tearDown(self):
IBMQ._accounts.clear()
except ImportError:
pass
from qiskit.providers.builtinsimulators import BasicAer
from qiskit.providers.basicaer import BasicAer

BasicAer._backends = BasicAer._verify_backends()

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@

@requires_aer_provider
class TestExtensionsSimulator(QiskitTestCase):
"""Test instruction extensions for builtinsimulators simulators:
"""Test instruction extensions for basicaer simulators:
save, load, noise, snapshot, wait
"""
_desired_fidelity = 0.99
Expand Down
Loading

0 comments on commit cd2dafa

Please sign in to comment.