diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index 58a800be3a..69f74c33a1 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -79,7 +79,7 @@ jobs: CIBW_MANYLINUX_X86_64_IMAGE: "quay.io/pypa/manylinux2010_x86_64:2020-12-03-912b0de" CIBW_MANYLINUX_I686_IMAGE: "quay.io/pypa/manylinux2010_i686:2020-12-03-912b0de" CIBW_TEST_COMMAND: "python3 {project}/tools/verify_wheels.py" - CIBW_TEST_REQUIRES: "git+https://github.com/Qiskit/qiskit-terra.git" + CIBW_TEST_REQUIRES: "git+https://github.com/mtreinish/qiskit-cpre@namespace-no-more" run: cibuildwheel --output-dir wheelhouse - uses: actions/upload-artifact@v2 with: diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 628ce52135..f63f18fe3c 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -69,7 +69,7 @@ jobs: git clone https://github.com/Qiskit/qiskit-tutorials --depth=1 python -m pip install --upgrade pip wheel pip install -U -r requirements-dev.txt -c constraints.txt - pip install -c constraints.txt git+https://github.com/Qiskit/qiskit-terra + pip install -c constraints.txt git+https://github.com/mtreinish/qiskit-core@namespace-no-more pip install -c constraints.txt . pip install -U "qiskit-ibmq-provider" "z3-solver" "qiskit-ignis" "qiskit-aqua" "pyscf<1.7.4" "matplotlib<3.3.0" jupyter pylatexenc sphinx nbsphinx sphinx_rtd_theme cvxpy -c constraints.txt python setup.py build_ext --inplace diff --git a/.github/workflows/tests_linux.yml b/.github/workflows/tests_linux.yml index 6a67fb9f3f..f1dbb1cc86 100644 --- a/.github/workflows/tests_linux.yml +++ b/.github/workflows/tests_linux.yml @@ -29,14 +29,14 @@ jobs: run: | set -e pip install -U pip wheel - pip install -U -c constraints.txt git+https://github.com/Qiskit/qiskit-terra + pip install -U -c constraints.txt git+https://github.com/mtreinish/qiskit-core@namespace-no-more pip install -U -c constraints.txt -r requirements-dev.txt shell: bash - name: Run Lint run: | set -e - pycodestyle --ignore=E402,W504 --max-line-length=100 qiskit/providers/aer - pylint -j 2 -rn qiskit/providers/aer + pycodestyle --ignore=E402,W504 --max-line-length=100 qiskit_aer + pylint -j 2 -rn qiskit_aer sdist: runs-on: ${{ matrix.platform.os }} needs: ["lint"] @@ -76,7 +76,7 @@ jobs: set -e mkdir out; cd out; virtualenv aer-test aer-test/bin/pip install ../dist/*tar.gz - aer-test/bin/pip install -c ../constraints.txt git+https://github.com/Qiskit/qiskit-terra + aer-test/bin/pip install -c ../constraints.txt git+https://github.com/mtreinish/qiskit-core@namespace-no-more aer-test/bin/python ../tools/verify_wheels.py aer-test/bin/pip check shell: bash @@ -107,7 +107,7 @@ jobs: ${{ runner.os }}-${{ matrix.python-version}}-pip- ${{ runner.os }}-${{ matrix.python-version}}- - name: Install Deps - run: python -m pip install -U -c constraints.txt -r requirements-dev.txt wheel git+https://github.com/Qiskit/qiskit-terra + run: python -m pip install -U -c constraints.txt -r requirements-dev.txt wheel git+https://github.com/mtreinish/qiskit-core@namespace-no-more - name: Install openblas run: | set -e diff --git a/.github/workflows/tests_mac.yml b/.github/workflows/tests_mac.yml index c0fd673bff..67911259f8 100644 --- a/.github/workflows/tests_mac.yml +++ b/.github/workflows/tests_mac.yml @@ -29,14 +29,14 @@ jobs: run: | set -e pip install -U pip wheel - pip install -U -c constraints.txt git+https://github.com/Qiskit/qiskit-terra + pip install -U -c constraints.txt git+https://github.com/mtreinish/qiskit-core@namespace-no-more pip install -U -c constraints.txt -r requirements-dev.txt shell: bash - name: Run Lint run: | set -e - pycodestyle --ignore=E402,W504 --max-line-length=100 qiskit/providers/aer - pylint -j 2 -rn qiskit/providers/aer + pycodestyle --ignore=E402,W504 --max-line-length=100 qiskit_aer + pylint -j 2 -rn qiskit_aer sdist: runs-on: ${{ matrix.platform.os }} needs: ["lint"] @@ -70,7 +70,7 @@ jobs: set -e mkdir out; cd out; virtualenv aer-test aer-test/bin/pip install ../dist/*tar.gz - aer-test/bin/pip install -c ../constraints.txt git+https://github.com/Qiskit/qiskit-terra + aer-test/bin/pip install -c ../constraints.txt git+https://github.com/mtreinish/qiskit-core@namespace-no-more aer-test/bin/python ../tools/verify_wheels.py aer-test/bin/pip check shell: bash @@ -103,7 +103,7 @@ jobs: - name: Install Deps run: | set -e - pip install -U -c constraints.txt wheel git+https://github.com/Qiskit/qiskit-terra + pip install -U -c constraints.txt wheel git+https://github.com/mtreinish/qiskit-core@namespace-no-more pip install -U -c constraints.txt -r requirements-dev.txt - name: Install Aer run: python -m pip install -U . diff --git a/.github/workflows/tests_windows.yml b/.github/workflows/tests_windows.yml index 97c9195b77..183e636086 100644 --- a/.github/workflows/tests_windows.yml +++ b/.github/workflows/tests_windows.yml @@ -28,14 +28,14 @@ jobs: - name: Install deps run: | set -e - pip install -U -c constraints.txt git+https://github.com/Qiskit/qiskit-terra + pip install -U -c constraints.txt git+https://github.com/mtreinish/qiskit-core@namespace-no-more pip install -U -c constraints.txt -r requirements-dev.txt shell: bash - name: Run Lint run: | set -e - pycodestyle --ignore=E402,W504 --max-line-length=100 qiskit/providers/aer - pylint -j 2 -rn qiskit/providers/aer + pycodestyle --ignore=E402,W504 --max-line-length=100 qiskit_aer + pylint -j 2 -rn qiskit_aer shell: bash tests: runs-on: ${{ matrix.os }} @@ -66,7 +66,7 @@ jobs: - name: Add msbuild to PATH uses: microsoft/setup-msbuild@v1.0.2 - name: Install Deps - run: python -m pip install -U -c constraints.txt -r requirements-dev.txt wheel git+https://github.com/Qiskit/qiskit-terra + run: python -m pip install -U -c constraints.txt -r requirements-dev.txt wheel git+https://github.com/mtreinish/qiskit-core@namespace-no-more - name: Install Aer Windows run: | set -e diff --git a/.gitignore b/.gitignore index d63da1eb63..8353474cd2 100644 --- a/.gitignore +++ b/.gitignore @@ -18,7 +18,7 @@ rhs*_op.pyx *.whl *.egg* build/* -qiskit/providers/aer/backends/libomp.dylib +*libomp.dylib # Ignore macOS DS_Store .DS_Store diff --git a/.pylintrc b/.pylintrc index 35c7b0e5ed..0e70dff7f2 100644 --- a/.pylintrc +++ b/.pylintrc @@ -295,7 +295,7 @@ ignore-mixin-members=yes # (useful for modules/projects where namespaces are manipulated during runtime # and thus existing member attributes cannot be deduced by static analysis. It # supports qualified module names, as well as Unix pattern matching. -ignored-modules=matplotlib.cm,numpy.random +ignored-modules=matplotlib.cm,numpy.random,qiskit.providers # List of class names for which member attributes should not be checked (useful # for classes with dynamically set attributes). This supports the use of diff --git a/CMakeLists.txt b/CMakeLists.txt index e443ee0e3c..71f779555d 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -9,7 +9,7 @@ # be linked statically per Apple's indications. cmake_minimum_required(VERSION 3.8 FATAL_ERROR) -file(STRINGS "qiskit/providers/aer/VERSION.txt" VERSION_NUM) +file(STRINGS "qiskit_aer/VERSION.txt" VERSION_NUM) include(CheckLanguage) project(qasm_simulator VERSION ${VERSION_NUM} LANGUAGES CXX C) @@ -321,7 +321,7 @@ set(AER_LIBRARIES set(AER_COMPILER_DEFINITIONS ${AER_COMPILER_DEFINITIONS} ${CONAN_DEFINES}) if(SKBUILD) # Terra Addon build set(AER_LIBRARIES ${AER_LIBRARIES} AER_DEPENDENCY_PKG::muparserx) - add_subdirectory(qiskit/providers/aer/backends/wrappers) + add_subdirectory(qiskit_aer/backends/wrappers) add_subdirectory(src/open_pulse) else() # Standalone build diff --git a/MANIFEST.in b/MANIFEST.in index 188797a1b2..f1d9956c38 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,16 +1,16 @@ include MANIFEST.in include README.md -recursive-include qiskit *pyx -recursive-include qiskit *pxd -recursive-include qiskit *.pxi -recursive-include qiskit *cpp -recursive-include qiskit *hpp +recursive-include qiskit_aer *pyx +recursive-include qiskit_aer *pxd +recursive-include qiskit_aer *.pxi +recursive-include qiskit_aer *cpp +recursive-include qiskit_aer *hpp graft src graft contrib -include qiskit/providers/aer/backends/wrappers/CMakeLists.txt -include qiskit/providers/aer/backends/wrappers/bindings.cc -include qiskit/providers/aer/pulse/qutip_extra_lite/cy/CMakeLists.txt -include qiskit/providers/aer/VERSION.txt +include qiskit_aer/backends/wrappers/CMakeLists.txt +include qiskit_aer/backends/wrappers/bindings.cc +include qiskit_aer/pulse/qutip_extra_lite/cy/CMakeLists.txt +include qiskit_aer/VERSION.txt include CMakeLists.txt include cmake/*.cmake # Exclude static libraries (they are all compressed with 7z) diff --git a/docs/apidocs/aer_extensions.rst b/docs/apidocs/aer_extensions.rst index 164b6e5801..ee3bce1aed 100644 --- a/docs/apidocs/aer_extensions.rst +++ b/docs/apidocs/aer_extensions.rst @@ -1,6 +1,6 @@ .. _aer-circuit-extensions: -.. automodule:: qiskit.providers.aer.extensions +.. automodule:: qiskit_aer.extensions :no-members: :no-inherited-members: :no-special-members: \ No newline at end of file diff --git a/docs/apidocs/aer_noise.rst b/docs/apidocs/aer_noise.rst index c86b8036d9..5349384a5f 100644 --- a/docs/apidocs/aer_noise.rst +++ b/docs/apidocs/aer_noise.rst @@ -1,6 +1,6 @@ .. _aer-noise: -.. automodule:: qiskit.providers.aer.noise +.. automodule:: qiskit_aer.noise :no-members: :no-inherited-members: :no-special-members: \ No newline at end of file diff --git a/docs/apidocs/aer_provider.rst b/docs/apidocs/aer_provider.rst index 2661425968..d9f28e0f9a 100644 --- a/docs/apidocs/aer_provider.rst +++ b/docs/apidocs/aer_provider.rst @@ -1,6 +1,6 @@ .. _aer-provider: -.. automodule:: qiskit.providers.aer +.. automodule:: qiskit_aer :no-members: :no-inherited-members: :no-special-members: \ No newline at end of file diff --git a/docs/apidocs/aer_pulse.rst b/docs/apidocs/aer_pulse.rst index 54069dccb5..72f2520e3a 100644 --- a/docs/apidocs/aer_pulse.rst +++ b/docs/apidocs/aer_pulse.rst @@ -1,6 +1,6 @@ .. _aer-pulse: -.. automodule:: qiskit.providers.aer.pulse +.. automodule:: qiskit_aer.pulse :no-members: :no-inherited-members: :no-special-members: \ No newline at end of file diff --git a/docs/apidocs/aer_utils.rst b/docs/apidocs/aer_utils.rst index 222a4f5fc3..3743a5944e 100644 --- a/docs/apidocs/aer_utils.rst +++ b/docs/apidocs/aer_utils.rst @@ -1,6 +1,6 @@ .. _aer-utils: -.. automodule:: qiskit.providers.aer.utils +.. automodule:: qiskit_aer.utils :no-members: :no-inherited-members: :no-special-members: \ No newline at end of file diff --git a/qiskit/__init__.pxd b/qiskit/__init__.pxd deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/qiskit/providers/__init__.pxd b/qiskit/providers/__init__.pxd deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/qiskit/providers/aer/noise/errors/__init__.py b/qiskit/providers/aer/noise/errors/__init__.py deleted file mode 100644 index 7a8dd4bc6f..0000000000 --- a/qiskit/providers/aer/noise/errors/__init__.py +++ /dev/null @@ -1,28 +0,0 @@ -# This code is part of Qiskit. -# -# (C) Copyright IBM 2018, 2019. -# -# This code is licensed under the Apache License, Version 2.0. You may -# obtain a copy of this license in the LICENSE.txt file in the root directory -# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0. -# -# Any modifications or derivative works of this code must retain this -# copyright notice, and modified files need to carry a notice indicating -# that they have been altered from the originals. - -""" -Errors for qiskit-aer noise models. -""" - -from .readout_error import ReadoutError -from .quantum_error import QuantumError -from .standard_errors import kraus_error -from .standard_errors import mixed_unitary_error -from .standard_errors import coherent_unitary_error -from .standard_errors import pauli_error -from .standard_errors import depolarizing_error -from .standard_errors import reset_error -from .standard_errors import thermal_relaxation_error -from .standard_errors import phase_amplitude_damping_error -from .standard_errors import amplitude_damping_error -from .standard_errors import phase_damping_error diff --git a/qiskit/providers/aer/VERSION.txt b/qiskit_aer/VERSION.txt similarity index 100% rename from qiskit/providers/aer/VERSION.txt rename to qiskit_aer/VERSION.txt diff --git a/qiskit/providers/aer/__init__.py b/qiskit_aer/__init__.py similarity index 79% rename from qiskit/providers/aer/__init__.py rename to qiskit_aer/__init__.py index 871e2c2f90..716182ecad 100644 --- a/qiskit/providers/aer/__init__.py +++ b/qiskit_aer/__init__.py @@ -12,10 +12,10 @@ """ ========================================== -Aer Provider (:mod:`qiskit.providers.aer`) +Aer Provider (:mod:`qiskit_aer`) ========================================== -.. currentmodule:: qiskit.providers.aer +.. currentmodule:: qiskit_aer Simulator Provider ================== @@ -42,13 +42,6 @@ :toctree: ../stubs/ AerJob - -Exceptions -========== -.. autosummary:: - :toctree: ../stubs/ - - AerError """ # https://github.com/Qiskit/qiskit-aer/issues/1 @@ -61,14 +54,14 @@ # ... ¯\_(ツ)_/¯ # pylint: disable=wrong-import-position -from .aerprovider import AerProvider -from .aerjob import AerJob -from .aererror import AerError -from .backends import * -from . import pulse -from . import noise -from . import utils -from .version import __version__ +from qiskit_aer.aerprovider import AerProvider +from qiskit_aer.aerjob import AerJob +from qiskit_aer.backends import * +from qiskit_aer import pulse +from qiskit_aer import noise +from qiskit_aer import utils +from qiskit_aer.version import __version__ +from qiskit_aer.exceptions import AerError # Deprecated # Global instance to be used as the entry point for convenience. Aer = AerProvider() # pylint: disable=invalid-name diff --git a/qiskit/providers/aer/aererror.py b/qiskit_aer/aererror.py similarity index 95% rename from qiskit/providers/aer/aererror.py rename to qiskit_aer/aererror.py index 4e3311c0ff..ecfaa3ccea 100644 --- a/qiskit/providers/aer/aererror.py +++ b/qiskit_aer/aererror.py @@ -14,7 +14,7 @@ Exception for errors raised by Qiskit Aer simulators backends. """ -from qiskit import QiskitError +from qiskit.exceptions import QiskitError class AerError(QiskitError): diff --git a/qiskit/providers/aer/aerjob.py b/qiskit_aer/aerjob.py similarity index 97% rename from qiskit/providers/aer/aerjob.py rename to qiskit_aer/aerjob.py index 5912f2b505..9085a55ada 100644 --- a/qiskit/providers/aer/aerjob.py +++ b/qiskit_aer/aerjob.py @@ -19,7 +19,8 @@ import logging import functools -from qiskit.providers import BaseJob, JobStatus, JobError +from qiskit.providers.basejob import BaseJob, JobStatus +from qiskit.providers.exceptions import JobError logger = logging.getLogger(__name__) diff --git a/qiskit/providers/aer/aerprovider.py b/qiskit_aer/aerprovider.py similarity index 84% rename from qiskit/providers/aer/aerprovider.py rename to qiskit_aer/aerprovider.py index 28881492c6..107521c918 100644 --- a/qiskit/providers/aer/aerprovider.py +++ b/qiskit_aer/aerprovider.py @@ -14,13 +14,13 @@ """Provider for Qiskit Aer backends.""" -from qiskit.providers import BaseProvider +from qiskit.providers.baseprovider import BaseProvider from qiskit.providers.providerutils import filter_backends -from .backends.qasm_simulator import QasmSimulator -from .backends.statevector_simulator import StatevectorSimulator -from .backends.unitary_simulator import UnitarySimulator -from .backends.pulse_simulator import PulseSimulator +from qiskit_aer.backends.qasm_simulator import QasmSimulator +from qiskit_aer.backends.statevector_simulator import StatevectorSimulator +from qiskit_aer.backends.unitary_simulator import UnitarySimulator +from qiskit_aer.backends.pulse_simulator import PulseSimulator class AerProvider(BaseProvider): diff --git a/qiskit/providers/aer/backends/__init__.py b/qiskit_aer/backends/__init__.py similarity index 66% rename from qiskit/providers/aer/backends/__init__.py rename to qiskit_aer/backends/__init__.py index 669afa8a78..577c23c35a 100644 --- a/qiskit/providers/aer/backends/__init__.py +++ b/qiskit_aer/backends/__init__.py @@ -14,7 +14,7 @@ Aer Provider Simulator Backends """ -from .qasm_simulator import QasmSimulator -from .statevector_simulator import StatevectorSimulator -from .unitary_simulator import UnitarySimulator -from .pulse_simulator import PulseSimulator +from qiskit_aer.backends.qasm_simulator import QasmSimulator +from qiskit_aer.backends.statevector_simulator import StatevectorSimulator +from qiskit_aer.backends.unitary_simulator import UnitarySimulator +from qiskit_aer.backends.pulse_simulator import PulseSimulator diff --git a/qiskit/providers/aer/backends/aerbackend.py b/qiskit_aer/backends/aerbackend.py similarity index 99% rename from qiskit/providers/aer/backends/aerbackend.py rename to qiskit_aer/backends/aerbackend.py index 215c84fa6f..9b1d152e48 100644 --- a/qiskit/providers/aer/backends/aerbackend.py +++ b/qiskit_aer/backends/aerbackend.py @@ -23,12 +23,12 @@ from abc import ABC, abstractmethod from numpy import ndarray -from qiskit.providers import BaseBackend +from qiskit.providers.basebackend import BaseBackend from qiskit.providers.models import BackendStatus from qiskit.result import Result -from ..aerjob import AerJob -from ..aererror import AerError +from qiskit_aer.aerjob import AerJob +from qiskit_aer.aererror import AerError # Logger logger = logging.getLogger(__name__) diff --git a/qiskit/providers/aer/backends/backend_utils.py b/qiskit_aer/backends/backend_utils.py similarity index 100% rename from qiskit/providers/aer/backends/backend_utils.py rename to qiskit_aer/backends/backend_utils.py diff --git a/qiskit/providers/aer/backends/pulse_simulator.py b/qiskit_aer/backends/pulse_simulator.py similarity index 93% rename from qiskit/providers/aer/backends/pulse_simulator.py rename to qiskit_aer/backends/pulse_simulator.py index 5dc9bdabae..2e196c2081 100644 --- a/qiskit/providers/aer/backends/pulse_simulator.py +++ b/qiskit_aer/backends/pulse_simulator.py @@ -21,11 +21,11 @@ from qiskit.providers.models import BackendConfiguration, PulseDefaults -from ..version import __version__ -from ..aererror import AerError -from ..pulse.controllers.pulse_controller import pulse_controller -from ..pulse.system_models.pulse_system_model import PulseSystemModel -from .aerbackend import AerBackend +from qiskit_aer.version import __version__ +from qiskit_aer.pulse.controllers.pulse_controller import pulse_controller +from qiskit_aer.pulse.system_models.pulse_system_model import PulseSystemModel +from qiskit_aer.backends.aerbackend import AerBackend +from qiskit_aer.aererror import AerError logger = logging.getLogger(__name__) @@ -53,7 +53,7 @@ class PulseSimulator(AerBackend): The ``PulseSimulator`` simulates continuous time Hamiltonian dynamics of a quantum system, with controls specified by pulse :class:`~qiskit.Schedule` objects, and the model of the - physical system specified by :class:`~qiskit.providers.aer.pulse.PulseSystemModel` objects. + physical system specified by :class:`~qiskit_aer.pulse.PulseSystemModel` objects. Results are returned in the same format as when jobs are submitted to actual devices. **Examples** @@ -69,17 +69,14 @@ class PulseSimulator(AerBackend): # Set the pulse system model for the simulator backend_sim.set_options(system_model=system_model) - # Assemble schedules using PulseSimulator as the backend - pulse_qobj = assemble(schedules, backend=backend_sim) - - # Run simulation - results = backend_sim.run(pulse_qobj) - - or by supplying the system model at runtime, e.g.: + To use the simulator, first :func:`~qiskit.assemble` a :class:`PulseQobj` object + from a list of pulse :class:`~qiskit.Schedule` objects, using ``backend=PulseSimulator()``. + Call the simulator with the :class:`PulseQobj` and a + :class:`~qiskit_aer.pulse.PulseSystemModel` object representing the physical system. .. code-block:: python - backend_sim = qiskit.providers.aer.PulseSimulator() + backend_sim = qiskit_aer.PulseSimulator() # Assemble schedules using PulseSimulator as the backend pulse_qobj = assemble(schedules, backend=backend_sim) @@ -107,7 +104,7 @@ class PulseSimulator(AerBackend): * ``qubit_lo_freq``: Local oscillator frequencies for each :class:`DriveChannel`. Defaults to either the value given in the - :class:`~qiskit.providers.aer.pulse.PulseSystemModel`, or is calculated directly + :class:`~qiskit_aer.pulse.PulseSystemModel`, or is calculated directly from the Hamiltonian. * ``meas_level``: Type of desired measurement output, in ``[1, 2]``. ``1`` gives complex numbers (IQ values), and ``2`` gives discriminated states ``|0>`` and @@ -120,7 +117,7 @@ class PulseSimulator(AerBackend): The simulator uses the ``zvode`` differential equation solver method through ``scipy``. Simulation is performed in the rotating frame of the diagonal of the drift Hamiltonian - contained in the :class:`~qiskit.providers.aer.pulse.PulseSystemModel`. Measurements + contained in the :class:`~qiskit_aer.pulse.PulseSystemModel`. Measurements are performed in the `dressed basis` of the drift Hamiltonian. **Other options** diff --git a/qiskit/providers/aer/backends/qasm_simulator.py b/qiskit_aer/backends/qasm_simulator.py similarity index 98% rename from qiskit/providers/aer/backends/qasm_simulator.py rename to qiskit_aer/backends/qasm_simulator.py index e880293e58..10b5eea10e 100644 --- a/qiskit/providers/aer/backends/qasm_simulator.py +++ b/qiskit_aer/backends/qasm_simulator.py @@ -15,14 +15,15 @@ import copy import logging + from qiskit.providers.models import QasmBackendConfiguration -from ..version import __version__ -from .aerbackend import AerBackend -from .backend_utils import (cpp_execute, available_methods, - MAX_QUBITS_STATEVECTOR) -# pylint: disable=import-error, no-name-in-module -from .controller_wrappers import qasm_controller_execute +from qiskit_aer.version import __version__ +from qiskit_aer.backends.aerbackend import AerBackend +from qiskit_aer.backends.backend_utils import (cpp_execute, available_methods, + MAX_QUBITS_STATEVECTOR) +# pylint: disable=import-error,no-name-in-module +from qiskit_aer.backends.controller_wrappers import qasm_controller_execute logger = logging.getLogger(__name__) @@ -175,7 +176,7 @@ class QasmSimulator(AerBackend): * ``stabilizer_max_snapshot_probabilities`` (int): set the maximum qubit number for the - `~qiskit.providers.aer.extensions.SnapshotProbabilities` + `~qiskit_aer.extensions.SnapshotProbabilities` instruction (Default: 32). These backend options only apply when using the ``"extended_stabilizer"`` diff --git a/qiskit/providers/aer/backends/statevector_simulator.py b/qiskit_aer/backends/statevector_simulator.py similarity index 94% rename from qiskit/providers/aer/backends/statevector_simulator.py rename to qiskit_aer/backends/statevector_simulator.py index 1bb5cf8a32..442743e8a7 100644 --- a/qiskit/providers/aer/backends/statevector_simulator.py +++ b/qiskit_aer/backends/statevector_simulator.py @@ -14,16 +14,17 @@ """ import logging + from qiskit.util import local_hardware_info from qiskit.providers.models import QasmBackendConfiguration -from ..aererror import AerError -from ..version import __version__ -from .aerbackend import AerBackend -from .backend_utils import (cpp_execute, available_methods, - MAX_QUBITS_STATEVECTOR) -# pylint: disable=import-error, no-name-in-module -from .controller_wrappers import statevector_controller_execute +from qiskit_aer.aererror import AerError +from qiskit_aer.version import __version__ +from qiskit_aer.backends.aerbackend import AerBackend +from qiskit_aer.backends.backend_utils import (cpp_execute, available_methods, + MAX_QUBITS_STATEVECTOR) +# pylint: disable=import-error,no-name-in-module +from qiskit_aer.backends.controller_wrappers import statevector_controller_execute # Logger logger = logging.getLogger(__name__) diff --git a/qiskit/providers/aer/backends/unitary_simulator.py b/qiskit_aer/backends/unitary_simulator.py similarity index 95% rename from qiskit/providers/aer/backends/unitary_simulator.py rename to qiskit_aer/backends/unitary_simulator.py index 8b34f71057..37e7dbc929 100644 --- a/qiskit/providers/aer/backends/unitary_simulator.py +++ b/qiskit_aer/backends/unitary_simulator.py @@ -16,16 +16,17 @@ """ import logging + from qiskit.util import local_hardware_info from qiskit.providers.models import QasmBackendConfiguration -from ..aererror import AerError -from ..version import __version__ -from .aerbackend import AerBackend -from .backend_utils import (cpp_execute, available_methods, - MAX_QUBITS_STATEVECTOR) -# pylint: disable=import-error, no-name-in-module -from .controller_wrappers import unitary_controller_execute +from qiskit_aer.aererror import AerError +from qiskit_aer.version import __version__ +from qiskit_aer.backends.aerbackend import AerBackend +from qiskit_aer.backends.backend_utils import (cpp_execute, available_methods, + MAX_QUBITS_STATEVECTOR) +# pylint: disable=import-error,no-name-in-module +from qiskit_aer.backends.controller_wrappers import unitary_controller_execute # Logger logger = logging.getLogger(__name__) diff --git a/qiskit/providers/aer/backends/wrappers/CMakeLists.txt b/qiskit_aer/backends/wrappers/CMakeLists.txt similarity index 90% rename from qiskit/providers/aer/backends/wrappers/CMakeLists.txt rename to qiskit_aer/backends/wrappers/CMakeLists.txt index e3cff03581..fc414590be 100644 --- a/qiskit/providers/aer/backends/wrappers/CMakeLists.txt +++ b/qiskit_aer/backends/wrappers/CMakeLists.txt @@ -8,9 +8,9 @@ find_package(Pybind11 REQUIRED) string(REPLACE " -static " "" CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}") if(CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "x86_64" OR CMAKE_HOST_SYSTEM_PROCESSOR STREQUAL "AMD64") - # We build SIMD filed separately, because they will be reached only if the + # We build SIMD file separately, because they will be reached only if the # machine running the code has SIMD support - set(SIMD_SOURCE_FILE "../../../../../src/simulators/statevector/qv_avx2.cpp") + set(SIMD_SOURCE_FILE "../../../src/simulators/statevector/qv_avx2.cpp") endif() set(AER_SIMULATOR_SOURCES "bindings.cc" "${SIMD_SOURCE_FILE}") @@ -41,7 +41,7 @@ target_include_directories(controller_wrappers PRIVATE ${AER_SIMULATOR_CPP_SRC_D PRIVATE ${AER_SIMULATOR_CPP_EXTERNAL_LIBS}) target_link_libraries(controller_wrappers ${AER_LIBRARIES}) target_compile_definitions(controller_wrappers PRIVATE ${AER_COMPILER_DEFINITIONS}) -install(TARGETS controller_wrappers LIBRARY DESTINATION qiskit/providers/aer/backends) +install(TARGETS controller_wrappers LIBRARY DESTINATION qiskit_aer/backends) # Install redistributable dependencies install(FILES ${BACKEND_REDIST_DEPS} DESTINATION qiskit/providers/aer/backends) diff --git a/qiskit/providers/aer/backends/wrappers/bindings.cc b/qiskit_aer/backends/wrappers/bindings.cc similarity index 100% rename from qiskit/providers/aer/backends/wrappers/bindings.cc rename to qiskit_aer/backends/wrappers/bindings.cc diff --git a/qiskit/providers/aer/noise/device/__init__.py b/qiskit_aer/exceptions.py similarity index 51% rename from qiskit/providers/aer/noise/device/__init__.py rename to qiskit_aer/exceptions.py index 658baf69c0..b126bcaf13 100644 --- a/qiskit/providers/aer/noise/device/__init__.py +++ b/qiskit_aer/exceptions.py @@ -1,6 +1,6 @@ # This code is part of Qiskit. # -# (C) Copyright IBM 2018, 2019. +# (C) Copyright IBM 2020. # # This code is licensed under the Apache License, Version 2.0. You may # obtain a copy of this license in the LICENSE.txt file in the root directory @@ -11,15 +11,9 @@ # that they have been altered from the originals. """ -Functions for building noise models from backend properties. +Exception for errors raised by Qiskit Aer simulators backends. """ -from .models import basic_device_readout_errors -from .models import basic_device_gate_errors -from .parameters import gate_param_values -from .parameters import gate_error_values -from .parameters import gate_length_values -from .parameters import readout_error_values -from .parameters import thermal_relaxation_values - -from . import parameters +# pylint: disable=unused-import +from qiskit_aer.aererror import AerError +from qiskit_aer.noise.noiseerror import NoiseError diff --git a/qiskit/providers/aer/extensions/__init__.py b/qiskit_aer/extensions/__init__.py similarity index 71% rename from qiskit/providers/aer/extensions/__init__.py rename to qiskit_aer/extensions/__init__.py index 10f2635620..a737e13969 100644 --- a/qiskit/providers/aer/extensions/__init__.py +++ b/qiskit_aer/extensions/__init__.py @@ -12,10 +12,10 @@ """ =========================================================== -Circuit Extensions (:mod:`qiskit.providers.aer.extensions`) +Circuit Extensions (:mod:`qiskit_aer.extensions`) =========================================================== -.. currentmodule:: qiskit.providers.aer.extensions +.. currentmodule:: qiskit_aer.extensions Snapshots ========= @@ -36,9 +36,9 @@ SnapshotStabilizer """ -from .snapshot import * -from .snapshot_statevector import * -from .snapshot_stabilizer import * -from .snapshot_density_matrix import * -from .snapshot_probabilities import * -from .snapshot_expectation_value import * +from qiskit_aer.extensions.snapshot import * +from qiskit_aer.extensions.snapshot_statevector import * +from qiskit_aer.extensions.snapshot_stabilizer import * +from qiskit_aer.extensions.snapshot_density_matrix import * +from qiskit_aer.extensions.snapshot_probabilities import * +from qiskit_aer.extensions.snapshot_expectation_value import * diff --git a/qiskit/providers/aer/extensions/snapshot.py b/qiskit_aer/extensions/snapshot.py similarity index 99% rename from qiskit/providers/aer/extensions/snapshot.py rename to qiskit_aer/extensions/snapshot.py index d5cd6165fd..2b6c8e51de 100644 --- a/qiskit/providers/aer/extensions/snapshot.py +++ b/qiskit_aer/extensions/snapshot.py @@ -16,7 +16,7 @@ import warnings -from qiskit import QuantumCircuit +from qiskit.circuit import QuantumCircuit from qiskit.circuit.quantumregister import QuantumRegister from qiskit.circuit import Instruction from qiskit.extensions.exceptions import ExtensionError diff --git a/qiskit/providers/aer/extensions/snapshot_amplitudes.py b/qiskit_aer/extensions/snapshot_amplitudes.py similarity index 100% rename from qiskit/providers/aer/extensions/snapshot_amplitudes.py rename to qiskit_aer/extensions/snapshot_amplitudes.py diff --git a/qiskit/providers/aer/extensions/snapshot_density_matrix.py b/qiskit_aer/extensions/snapshot_density_matrix.py similarity index 95% rename from qiskit/providers/aer/extensions/snapshot_density_matrix.py rename to qiskit_aer/extensions/snapshot_density_matrix.py index 63a3196a94..9976418d2b 100644 --- a/qiskit/providers/aer/extensions/snapshot_density_matrix.py +++ b/qiskit_aer/extensions/snapshot_density_matrix.py @@ -14,8 +14,8 @@ Simulator command to snapshot internal simulator representation. """ -from qiskit import QuantumCircuit -from .snapshot import Snapshot +from qiskit.circuit import QuantumCircuit +from qiskit_aer.extensions.snapshot import Snapshot class SnapshotDensityMatrix(Snapshot): diff --git a/qiskit/providers/aer/extensions/snapshot_expectation_value.py b/qiskit_aer/extensions/snapshot_expectation_value.py similarity index 98% rename from qiskit/providers/aer/extensions/snapshot_expectation_value.py rename to qiskit_aer/extensions/snapshot_expectation_value.py index ee579a0bbc..03cd17d097 100644 --- a/qiskit/providers/aer/extensions/snapshot_expectation_value.py +++ b/qiskit_aer/extensions/snapshot_expectation_value.py @@ -16,12 +16,12 @@ from warnings import warn import math import numpy -from qiskit import QuantumCircuit +from qiskit.circuit import QuantumCircuit from qiskit.circuit import Instruction from qiskit.extensions.exceptions import ExtensionError from qiskit.qobj import QasmQobjInstruction from qiskit.quantum_info.operators import Pauli, Operator -from .snapshot import Snapshot +from qiskit_aer.extensions.snapshot import Snapshot class SnapshotExpectationValue(Snapshot): diff --git a/qiskit/providers/aer/extensions/snapshot_probabilities.py b/qiskit_aer/extensions/snapshot_probabilities.py similarity index 96% rename from qiskit/providers/aer/extensions/snapshot_probabilities.py rename to qiskit_aer/extensions/snapshot_probabilities.py index c209a45bfb..78963f50f1 100644 --- a/qiskit/providers/aer/extensions/snapshot_probabilities.py +++ b/qiskit_aer/extensions/snapshot_probabilities.py @@ -15,8 +15,8 @@ """ from warnings import warn -from qiskit import QuantumCircuit -from .snapshot import Snapshot +from qiskit.circuit import QuantumCircuit +from qiskit_aer.extensions.snapshot import Snapshot class SnapshotProbabilities(Snapshot): diff --git a/qiskit/providers/aer/extensions/snapshot_stabilizer.py b/qiskit_aer/extensions/snapshot_stabilizer.py similarity index 95% rename from qiskit/providers/aer/extensions/snapshot_stabilizer.py rename to qiskit_aer/extensions/snapshot_stabilizer.py index 97d8cb556d..4d2b7417fc 100644 --- a/qiskit/providers/aer/extensions/snapshot_stabilizer.py +++ b/qiskit_aer/extensions/snapshot_stabilizer.py @@ -14,8 +14,8 @@ Simulator command to snapshot internal simulator representation. """ -from qiskit import QuantumCircuit -from .snapshot import Snapshot +from qiskit.circuit import QuantumCircuit +from qiskit_aer.extensions.snapshot import Snapshot class SnapshotStabilizer(Snapshot): diff --git a/qiskit/providers/aer/extensions/snapshot_statevector.py b/qiskit_aer/extensions/snapshot_statevector.py similarity index 95% rename from qiskit/providers/aer/extensions/snapshot_statevector.py rename to qiskit_aer/extensions/snapshot_statevector.py index 8c7a23a5d3..39a23f5faa 100644 --- a/qiskit/providers/aer/extensions/snapshot_statevector.py +++ b/qiskit_aer/extensions/snapshot_statevector.py @@ -14,8 +14,8 @@ Simulator command to snapshot internal simulator representation. """ -from qiskit import QuantumCircuit -from .snapshot import Snapshot +from qiskit.circuit import QuantumCircuit +from qiskit_aer.extensions.snapshot import Snapshot class SnapshotStatevector(Snapshot): diff --git a/qiskit/providers/aer/noise/__init__.py b/qiskit_aer/noise/__init__.py similarity index 84% rename from qiskit/providers/aer/noise/__init__.py rename to qiskit_aer/noise/__init__.py index 841019e7ec..59663e9397 100644 --- a/qiskit/providers/aer/noise/__init__.py +++ b/qiskit_aer/noise/__init__.py @@ -12,10 +12,10 @@ r""" ================================================ -Noise Models (:mod:`qiskit.providers.aer.noise`) +Noise Models (:mod:`qiskit_aer.noise`) ================================================ -.. currentmodule:: qiskit.providers.aer.noise +.. currentmodule:: qiskit_aer.noise This module contains classes and functions to build a noise model for simulating a Qiskit quantum circuit in the presence of errors. @@ -25,7 +25,7 @@ ===================== The :class:`NoiseModel` class is used to represent noise model for the -:class:`~qiskit.providers.aer.QasmSimulator`. It can be used to construct +:class:`~qiskit_aer.QasmSimulator`. It can be used to construct custom noise models for simulator, to to automatically generate a basic device noise model for an IBMQ backend. @@ -176,22 +176,22 @@ """ # Noise and Error classes -from .noise_model import NoiseModel -from .errors import QuantumError -from .errors import ReadoutError +from qiskit_aer.noise.noise_model import NoiseModel +from qiskit_aer.noise.errors import QuantumError +from qiskit_aer.noise.errors import ReadoutError # Error generating functions -from .errors import kraus_error -from .errors import mixed_unitary_error -from .errors import coherent_unitary_error -from .errors import pauli_error -from .errors import depolarizing_error -from .errors import reset_error -from .errors import thermal_relaxation_error -from .errors import phase_amplitude_damping_error -from .errors import amplitude_damping_error -from .errors import phase_damping_error +from qiskit_aer.noise.errors import kraus_error +from qiskit_aer.noise.errors import mixed_unitary_error +from qiskit_aer.noise.errors import coherent_unitary_error +from qiskit_aer.noise.errors import pauli_error +from qiskit_aer.noise.errors import depolarizing_error +from qiskit_aer.noise.errors import reset_error +from qiskit_aer.noise.errors import thermal_relaxation_error +from qiskit_aer.noise.errors import phase_amplitude_damping_error +from qiskit_aer.noise.errors import amplitude_damping_error +from qiskit_aer.noise.errors import phase_damping_error # Submodules -from . import errors -from . import device +from qiskit_aer.noise import errors +from qiskit_aer.noise import device diff --git a/qiskit_aer/noise/device/__init__.py b/qiskit_aer/noise/device/__init__.py new file mode 100644 index 0000000000..c90b1cab36 --- /dev/null +++ b/qiskit_aer/noise/device/__init__.py @@ -0,0 +1,26 @@ +# This code is part of Qiskit. +# +# (C) Copyright IBM 2018, 2019. +# +# This code is licensed under the Apache License, Version 2.0. You may +# obtain a copy of this license in the LICENSE.txt file in the root directory +# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0. +# +# Any modifications or derivative works of this code must retain this +# copyright notice, and modified files need to carry a notice indicating +# that they have been altered from the originals. + +""" +Functions for building noise models from backend properties. +""" + +from qiskit_aer.noise.device.basic_device_model import basic_device_noise_model +from qiskit_aer.noise.device.models import basic_device_readout_errors +from qiskit_aer.noise.device.models import basic_device_gate_errors +from qiskit_aer.noise.device.parameters import gate_param_values +from qiskit_aer.noise.device.parameters import gate_error_values +from qiskit_aer.noise.device.parameters import gate_length_values +from qiskit_aer.noise.device.parameters import readout_error_values +from qiskit_aer.noise.device.parameters import thermal_relaxation_values + +from qiskit_aer.noise.device import parameters diff --git a/qiskit_aer/noise/device/basic_device_model.py b/qiskit_aer/noise/device/basic_device_model.py new file mode 100644 index 0000000000..f8af40a418 --- /dev/null +++ b/qiskit_aer/noise/device/basic_device_model.py @@ -0,0 +1,127 @@ +# This code is part of Qiskit. +# +# (C) Copyright IBM 2018, 2019. +# +# This code is licensed under the Apache License, Version 2.0. You may +# obtain a copy of this license in the LICENSE.txt file in the root directory +# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0. +# +# Any modifications or derivative works of this code must retain this +# copyright notice, and modified files need to carry a notice indicating +# that they have been altered from the originals. +# pylint: disable=invalid-name,import-outside-toplevel +""" +Simplified noise models for devices backends. +""" + +import warnings + + +def basic_device_noise_model(properties, + gate_error=True, + readout_error=True, + thermal_relaxation=True, + temperature=0, + gate_lengths=None, + gate_length_units='ns', + standard_gates=True): + """ + Return a noise model derived from a devices backend properties. + + This function generates a noise model based on: + + * 1 and 2 qubit gate errors consisting of a + :func:`depolarizing_error` followed + by a :func:`thermal_relaxation_error`. + + * Single qubit :class:`ReadoutError` on all measurements. + + The Error error parameters are tuned for each individual qubit based on + the :math:`T_1`, :math:`T_2`, frequency and readout error parameters for + each qubit, and the gate error and gate time parameters for each gate + obtained from the device backend properties. + + **Additional Information** + + The noise model includes the following errors: + + * If ``readout_error=True`` include single qubit readout + errors on measurements. + + * If ``gate_error=True`` and ``thermal_relaxation=True`` include: + + * Single-qubit gate errors consisting of a :func:`depolarizing_error` + followed by a :func:`thermal_relaxation_error` for the qubit the + gate acts on. + + * Two-qubit gate errors consisting of a 2-qubit + :func:`depolarizing_error` followed by single qubit + :func:`thermal_relaxation_error` on each qubit participating in + the gate. + + * If ``gate_error=True`` is ``True`` and ``thermal_relaxation=False``: + + * An N-qubit :func:`depolarizing_error` on each N-qubit gate. + + * If ``gate_error=False`` and ``thermal_relaxation=True`` include + single-qubit :func:`thermal_relaxation_errors` on each qubits + participating in a multi-qubit gate. + + For best practice in simulating a backend make sure that the + circuit is compiled using the set of basis gates in the noise + module by setting ``basis_gates=noise_model.basis_gates`` + and using the device coupling map with + ``coupling_map=backend.configuration().coupling_map`` + + **Specifying custom gate times** + + The ``gate_lengths`` kwarg can be used to specify custom gate times + to add gate errors using the :math:`T_1` and :math:`T_2` values from + the backend properties. This should be passed as a list of tuples + ``gate_lengths=[(name, value), ...]`` + where ``name`` is the gate name string, and ``value`` is the gate time + in nanoseconds. + + If a custom gate is specified that already exists in + the backend properties, the ``gate_lengths`` value will override the + gate time value from the backend properties. + If non-default values are used gate_lengths should be a list + + Args: + properties (BackendProperties): backend properties. + gate_error (bool): Include depolarizing gate errors (Default: True). + readout_error (Bool): Include readout errors in model + (Default: True). + thermal_relaxation (Bool): Include thermal relaxation errors + (Default: True). + temperature (double): qubit temperature in milli-Kelvin (mK) for + thermal relaxation errors (Default: 0). + gate_lengths (list): Custom gate times for thermal relaxation errors. + Used to extend or override the gate times in + the backend properties (Default: None)) + gate_length_units (str): Time units for gate length values in gate_lengths. + Can be 'ns', 'ms', 'us', or 's' (Default: 'ns'). + standard_gates (bool): If true return errors as standard + qobj gates. If false return as unitary + qobj instructions (Default: True) + + Returns: + NoiseModel: An approximate noise model for the device backend. + """ + warnings.warn( + 'This function is been deprecated and moved to a method of the' + '`NoiseModel` class. For equivalent functionality use' + ' `NoiseModel.from_backend(properties, **kwargs).', + DeprecationWarning) + # This wrapper is for the deprecated function + # We need to import noise model here to avoid cyclic import errors + # pylint: disable=import-outside-toplevel + from qiskit_aer.noise.noise_model import NoiseModel + return NoiseModel.from_backend(properties, + gate_error=gate_error, + readout_error=readout_error, + thermal_relaxation=thermal_relaxation, + temperature=temperature, + gate_lengths=gate_lengths, + gate_length_units=gate_length_units, + standard_gates=standard_gates) diff --git a/qiskit/providers/aer/noise/device/models.py b/qiskit_aer/noise/device/models.py similarity index 95% rename from qiskit/providers/aer/noise/device/models.py rename to qiskit_aer/noise/device/models.py index 3a66c316ed..d7a4d28ae7 100644 --- a/qiskit/providers/aer/noise/device/models.py +++ b/qiskit_aer/noise/device/models.py @@ -20,14 +20,13 @@ from numpy import inf, exp, allclose import qiskit.quantum_info as qi -from .parameters import readout_error_values -from .parameters import gate_param_values -from .parameters import thermal_relaxation_values -from .parameters import _NANOSECOND_UNITS - -from ..errors.readout_error import ReadoutError -from ..errors.standard_errors import depolarizing_error -from ..errors.standard_errors import thermal_relaxation_error +from qiskit_aer.noise.errors.readout_error import ReadoutError +from qiskit_aer.noise.errors.standard_errors import (depolarizing_error, + thermal_relaxation_error) +from qiskit_aer.noise.device.parameters import readout_error_values +from qiskit_aer.noise.device.parameters import gate_param_values +from qiskit_aer.noise.device.parameters import thermal_relaxation_values +from qiskit_aer.noise.device.parameters import _NANOSECOND_UNITS logger = logging.getLogger(__name__) diff --git a/qiskit/providers/aer/noise/device/parameters.py b/qiskit_aer/noise/device/parameters.py similarity index 100% rename from qiskit/providers/aer/noise/device/parameters.py rename to qiskit_aer/noise/device/parameters.py diff --git a/qiskit_aer/noise/errors/__init__.py b/qiskit_aer/noise/errors/__init__.py new file mode 100644 index 0000000000..b6667cecbb --- /dev/null +++ b/qiskit_aer/noise/errors/__init__.py @@ -0,0 +1,28 @@ +# This code is part of Qiskit. +# +# (C) Copyright IBM 2018, 2019. +# +# This code is licensed under the Apache License, Version 2.0. You may +# obtain a copy of this license in the LICENSE.txt file in the root directory +# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0. +# +# Any modifications or derivative works of this code must retain this +# copyright notice, and modified files need to carry a notice indicating +# that they have been altered from the originals. + +""" +Errors for qiskit-aer noise models. +""" + +from qiskit_aer.noise.errors.readout_error import ReadoutError +from qiskit_aer.noise.errors.quantum_error import QuantumError +from qiskit_aer.noise.errors.standard_errors import kraus_error +from qiskit_aer.noise.errors.standard_errors import mixed_unitary_error +from qiskit_aer.noise.errors.standard_errors import coherent_unitary_error +from qiskit_aer.noise.errors.standard_errors import pauli_error +from qiskit_aer.noise.errors.standard_errors import depolarizing_error +from qiskit_aer.noise.errors.standard_errors import reset_error +from qiskit_aer.noise.errors.standard_errors import thermal_relaxation_error +from qiskit_aer.noise.errors.standard_errors import phase_amplitude_damping_error +from qiskit_aer.noise.errors.standard_errors import amplitude_damping_error +from qiskit_aer.noise.errors.standard_errors import phase_damping_error diff --git a/qiskit/providers/aer/noise/errors/errorutils.py b/qiskit_aer/noise/errors/errorutils.py similarity index 99% rename from qiskit/providers/aer/noise/errors/errorutils.py rename to qiskit_aer/noise/errors/errorutils.py index 5f98234ed0..c9a7fe07d3 100644 --- a/qiskit/providers/aer/noise/errors/errorutils.py +++ b/qiskit_aer/noise/errors/errorutils.py @@ -23,7 +23,7 @@ from qiskit.quantum_info.operators.predicates import matrix_equal from qiskit.quantum_info.operators.predicates import ATOL_DEFAULT -from ..noiseerror import NoiseError +from qiskit_aer.noise.noiseerror import NoiseError def standard_gates_instructions(instructions): diff --git a/qiskit/providers/aer/noise/errors/quantum_error.py b/qiskit_aer/noise/errors/quantum_error.py similarity index 98% rename from qiskit/providers/aer/noise/errors/quantum_error.py rename to qiskit_aer/noise/errors/quantum_error.py index 3aedfdbb70..df3df972ec 100644 --- a/qiskit/providers/aer/noise/errors/quantum_error.py +++ b/qiskit_aer/noise/errors/quantum_error.py @@ -21,11 +21,11 @@ from qiskit.quantum_info.operators import Kraus, SuperOp, Choi, Operator from qiskit.quantum_info.operators.predicates import ATOL_DEFAULT, RTOL_DEFAULT -from ..noiseerror import NoiseError -from .errorutils import kraus2instructions -from .errorutils import circuit2superop -from .errorutils import standard_instruction_channel -from .errorutils import standard_instruction_operator +from qiskit_aer.noise.noiseerror import NoiseError +from qiskit_aer.noise.errors.errorutils import kraus2instructions +from qiskit_aer.noise.errors.errorutils import circuit2superop +from qiskit_aer.noise.errors.errorutils import standard_instruction_channel +from qiskit_aer.noise.errors.errorutils import standard_instruction_operator logger = logging.getLogger(__name__) diff --git a/qiskit/providers/aer/noise/errors/readout_error.py b/qiskit_aer/noise/errors/readout_error.py similarity index 99% rename from qiskit/providers/aer/noise/errors/readout_error.py rename to qiskit_aer/noise/errors/readout_error.py index 6db9072f17..399f65687a 100644 --- a/qiskit/providers/aer/noise/errors/readout_error.py +++ b/qiskit_aer/noise/errors/readout_error.py @@ -21,8 +21,8 @@ from qiskit.circuit import Instruction from qiskit.quantum_info.operators.predicates import ATOL_DEFAULT, RTOL_DEFAULT -from ..noiseerror import NoiseError -from .errorutils import qubits_from_mat +from qiskit_aer.noise.noiseerror import NoiseError +from qiskit_aer.noise.errors.errorutils import qubits_from_mat class ReadoutError: diff --git a/qiskit/providers/aer/noise/errors/standard_errors.py b/qiskit_aer/noise/errors/standard_errors.py similarity index 98% rename from qiskit/providers/aer/noise/errors/standard_errors.py rename to qiskit_aer/noise/errors/standard_errors.py index af8607a66b..619831a786 100644 --- a/qiskit/providers/aer/noise/errors/standard_errors.py +++ b/qiskit_aer/noise/errors/standard_errors.py @@ -22,11 +22,11 @@ from qiskit.quantum_info.operators.predicates import is_unitary_matrix from qiskit.quantum_info.operators.predicates import is_identity_matrix -from ..noiseerror import NoiseError -from .errorutils import make_unitary_instruction -from .errorutils import qubits_from_mat -from .errorutils import standard_gate_unitary -from .quantum_error import QuantumError +from qiskit_aer.noise.noiseerror import NoiseError +from qiskit_aer.noise.errors.errorutils import make_unitary_instruction +from qiskit_aer.noise.errors.errorutils import qubits_from_mat +from qiskit_aer.noise.errors.errorutils import standard_gate_unitary +from qiskit_aer.noise.errors.quantum_error import QuantumError def kraus_error(noise_ops, standard_gates=True, canonical_kraus=False): diff --git a/qiskit/providers/aer/noise/noise_model.py b/qiskit_aer/noise/noise_model.py similarity index 98% rename from qiskit/providers/aer/noise/noise_model.py rename to qiskit_aer/noise/noise_model.py index 11976f1faf..6d940365e6 100644 --- a/qiskit/providers/aer/noise/noise_model.py +++ b/qiskit_aer/noise/noise_model.py @@ -21,13 +21,14 @@ from qiskit.providers import BaseBackend, Backend from qiskit.providers.models import BackendProperties -from ..backends.aerbackend import AerJSONEncoder -from ..backends.qasm_simulator import QasmSimulator -from .noiseerror import NoiseError -from .errors.quantum_error import QuantumError -from .errors.readout_error import ReadoutError -from .device.models import basic_device_gate_errors -from .device.models import basic_device_readout_errors +from qiskit_aer.backends.aerbackend import AerJSONEncoder +from qiskit_aer.backends.qasm_simulator import QasmSimulator + +from qiskit_aer.noise.noiseerror import NoiseError +from qiskit_aer.noise.errors.quantum_error import QuantumError +from qiskit_aer.noise.errors.readout_error import ReadoutError +from qiskit_aer.noise.device.models import basic_device_gate_errors +from qiskit_aer.noise.device.models import basic_device_readout_errors logger = logging.getLogger(__name__) @@ -36,10 +37,10 @@ class NoiseModel: """Noise model class for Qiskit Aer simulators. This class is used to represent noise model for the - :class:`~qiskit.providers.aer.QasmSimulator`. It can be used to construct + :class:`~qiskit_aer.QasmSimulator`. It can be used to construct custom noise models for simulator, or to automatically generate a basic device noise model for an IBMQ backend. See the - :mod:`~qiskit.providers.aer.noise` module documentation for additional + :mod:`~qiskit_aer.noise` module documentation for additional information. **Example: Basic device noise model** @@ -111,9 +112,9 @@ def __init__(self, basis_gates=None): Additional Information: Errors added to the noise model will have their instruction appended to the noise model basis_gates if the instruction is in - the :class:`~qiskit.providers.aer.QasmSimulator` basis_gates. If + the :class:`~qiskit_aer.QasmSimulator` basis_gates. If the instruction is not in the - :class:`~qiskit.providers.aer.QasmSimulator` basis_gates it is + :class:`~qiskit_aer.QasmSimulator` basis_gates it is assumed to be a label for a standard gate, and that gate should be added to the `NoiseModel` basis_gates either using the init method, or the :meth:`add_basis_gates` method. diff --git a/qiskit/providers/aer/noise/noiseerror.py b/qiskit_aer/noise/noiseerror.py similarity index 95% rename from qiskit/providers/aer/noise/noiseerror.py rename to qiskit_aer/noise/noiseerror.py index 32edb0febf..de39b5d4be 100644 --- a/qiskit/providers/aer/noise/noiseerror.py +++ b/qiskit_aer/noise/noiseerror.py @@ -14,7 +14,7 @@ Exception for errors raised by Qiskit Aer noise module. """ -from qiskit import QiskitError +from qiskit.exceptions import QiskitError class NoiseError(QiskitError): diff --git a/qiskit_aer/noise/utils/__init__.py b/qiskit_aer/noise/utils/__init__.py new file mode 100644 index 0000000000..9d0006d2e7 --- /dev/null +++ b/qiskit_aer/noise/utils/__init__.py @@ -0,0 +1,191 @@ +# This code is part of Qiskit. +# +# (C) Copyright IBM 2018, 2019. +# +# This code is licensed under the Apache License, Version 2.0. You may +# obtain a copy of this license in the LICENSE.txt file in the root directory +# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0. +# +# Any modifications or derivative works of this code must retain this +# copyright notice, and modified files need to carry a notice indicating +# that they have been altered from the originals. +""" +The functions here have been moved to `qiskit_aer.utils`. +""" + +import warnings as warn + +# DEPRECATED: these functions have been moved +from qiskit_aer.utils import remap_noise_model as _remap_noise_model +from qiskit_aer.utils import NoiseTransformer as _NoiseTransformer +from qiskit_aer.utils import approximate_quantum_error as _approximate_quantum_error +from qiskit_aer.utils import approximate_noise_model as _approximate_noise_model +from qiskit_aer.utils import insert_noise as _insert_noise + + +def remap_noise_model(noise_model, + remapping, + discard_qubits=False, + warnings=True): + """Remap qubits in a noise model. + + This remaps the specified gate qubits for local quantum errors, the gate + and noise qubits for non-local quantum errors, and the gate qubits for + local ReadoutErrors. All-qubit quantum and readout errors are unaffected. + + Args: + noise_model (NoiseModel): a noise model to remap qubits. + remapping (list): list or remappings of old qubit to new qubit. + See Additional Information. + discard_qubits (bool): if True discard qubits not in remapping keys, + if False an identity mapping wil be assumed + for unnamed qubits (Default: False). + warnings (bool): display warnings if qubits being remapped are not + in the input noise model (Default: True). + + Returns: + NoiseModel: a new noise model with the same errors but remapped + gate and noise qubits for local and non-local errors. + + Raises: + NoiseError: if remapping has duplicate qubits in the remapped qubits. + + Additional Information: + * The remapping map be specified as either a list of pairs: + ``[(old, new), ...]``, or a list of old qubits where the new qubit is + inferred from the position: ``[old0, old1, ...]`` is treated as + ``[(old0, 0), (old1, 1), ...]``. + + * If ``discard_qubits`` is ``False``, any qubits in the noise model not + specified in the list of old qubits will be added to the remapping as + a trivial mapping ``(qubit, qubit)``. + """ + warn.warn( + 'This function is been moved to `qiskit.providers.aer.utils.remap_noise_model`.' + ' Importing it from `qiskit.providers.aer.noise.utils` will be' + ' removed in a future release.', DeprecationWarning) + return _remap_noise_model(noise_model, + remapping, + discard_qubits=discard_qubits, + warnings=warnings) + + +def insert_noise(circuits, noise_model, transpile=False): + """Return a noisy version of a QuantumCircuit. + + Args: + circuits (QuantumCircuit or list[QuantumCircuit]): Input noise-free circuits. + noise_model (NoiseModel): The noise model containing the errors to add + transpile (Boolean): Should the circuit be transpiled into the noise model basis gates + + Returns: + QuantumCircuit: The new circuit with the Kraus noise instructions inserted. + + Additional Information: + The noisy circuit return by this function will consist of the + original circuit with ``Kraus`` instructions inserted after all + instructions referenced in the ``noise_model``. The resulting circuit + cannot be ran on a quantum computer but can be executed on the + :class:`~qiskit_aer.QasmSimulator`. + """ + warn.warn( + 'This function is been moved to `qiskit.providers.aer.utils.insert_noise`.' + ' Importing it from `qiskit.providers.aer.noise.utils` will be' + ' removed in a future release.', DeprecationWarning) + return _insert_noise(circuits, noise_model, transpile=transpile) + + +def approximate_quantum_error(error, + *, + operator_string=None, + operator_dict=None, + operator_list=None): + """ + Return an approximate QuantumError bases on the Hilbert-Schmidt metric. + + Currently this is only implemented for 1-qubit QuantumErrors. + + Args: + error (QuantumError): the error to be approximated. + operator_string (string or None): a name for a pre-made set of + building blocks for the output channel (Default: None). + operator_dict (dict or None): a dictionary whose values are the + building blocks for the output channel (Default: None). + operator_list (dict or None): list of building blocks for the + output channel (Default: None). + + Returns: + QuantumError: the approximate quantum error. + + Raises: + NoiseError: if number of qubits is not supported or approximation + failed. + RuntimeError: If there's no information about the noise type. + + Additional Information: + The operator input precedence is: ``list`` < ``dict`` < ``str``. + If a string is given, dict is overwritten; if a dict is given, list is + overwritten. Oossible values for string are ``'pauli'``, ``'reset'``, + ``'clifford'``. + For further information see :meth:`NoiseTransformer.named_operators`. + """ + warn.warn( + 'This function is been moved to `qiskit.providers.aer.utils.approximate_qauntum_error`.' + ' Importing it from `qiskit.providers.aer.noise.utils` will be removed' + ' in a future release.', + DeprecationWarning) + return _approximate_quantum_error(error, + operator_string=operator_string, + operator_dict=operator_dict, + operator_list=operator_list) + + +def approximate_noise_model(model, + *, + operator_string=None, + operator_dict=None, + operator_list=None): + """ + Return an approximate noise model. + + Args: + model (NoiseModel): the noise model to be approximated. + operator_string (string or None): a name for a pre-made set of + building blocks for the output channel (Default: None). + operator_dict (dict or None): a dictionary whose values are the + building blocks for the output channel (Default: None). + operator_list (dict or None): list of building blocks for the + output channel (Default: None). + + Returns: + NoiseModel: the approximate noise model. + + Raises: + NoiseError: if number of qubits is not supported or approximation + failed. + + Additional Information: + The operator input precedence is: ``list`` < ``dict`` < ``str``. + If a string is given, dict is overwritten; if a dict is given, list is + overwritten. Oossible values for string are ``'pauli'``, ``'reset'``, + ``'clifford'``. + For further information see :meth:`NoiseTransformer.named_operators`. + """ + warn.warn( + 'This function is been moved to `qiskit.providers.aer.utils.approximate_noise_model`.' + ' Importing it from `qiskit.providers.aer.noise.utils` will be removed in a' + ' future release.', DeprecationWarning) + return _approximate_noise_model(model, + operator_string=operator_string, + operator_dict=operator_dict, + operator_list=operator_list) + + +class NoiseTransformer(_NoiseTransformer): + """Transforms one quantum channel to another based on a specified criteria.""" + def __init__(self): + warn.warn( + 'This function is been moved to `qiskit.providers.aer.utils.NoiseTransformer`.' + ' Importing it from `qiskit.providers.aer.noise.utils` will be removed in a' + ' future release.', DeprecationWarning) + super().__init__() diff --git a/qiskit/providers/aer/pulse/__init__.py b/qiskit_aer/pulse/__init__.py similarity index 84% rename from qiskit/providers/aer/pulse/__init__.py rename to qiskit_aer/pulse/__init__.py index cb588e5966..3983121fbd 100644 --- a/qiskit/providers/aer/pulse/__init__.py +++ b/qiskit_aer/pulse/__init__.py @@ -14,10 +14,10 @@ """ ======================================================= -Pulse System Models (:mod:`qiskit.providers.aer.pulse`) +Pulse System Models (:mod:`qiskit_aer.pulse`) ======================================================= -.. currentmodule:: qiskit.providers.aer.pulse +.. currentmodule:: qiskit_aer.pulse This module contains classes and functions to build a pulse system model for simulating a Qiskit pulse schedule. @@ -48,8 +48,8 @@ import distutils.sysconfig # noqa import numpy as np -from .system_models.duffing_model_generators import duffing_system_model -from .system_models.pulse_system_model import PulseSystemModel +from qiskit_aer.pulse.system_models import duffing_system_model +from qiskit_aer.pulse.system_models import PulseSystemModel # Remove -Wstrict-prototypes from cflags CFG_VARS = distutils.sysconfig.get_config_vars() diff --git a/qiskit/providers/aer/pulse/controllers/__init__.py b/qiskit_aer/pulse/controllers/__init__.py similarity index 100% rename from qiskit/providers/aer/pulse/controllers/__init__.py rename to qiskit_aer/pulse/controllers/__init__.py diff --git a/qiskit/providers/aer/pulse/controllers/digest_pulse_qobj.py b/qiskit_aer/pulse/controllers/digest_pulse_qobj.py similarity index 99% rename from qiskit/providers/aer/pulse/controllers/digest_pulse_qobj.py rename to qiskit_aer/pulse/controllers/digest_pulse_qobj.py index b0a3d8a557..5407c23859 100644 --- a/qiskit/providers/aer/pulse/controllers/digest_pulse_qobj.py +++ b/qiskit_aer/pulse/controllers/digest_pulse_qobj.py @@ -18,9 +18,9 @@ from collections import OrderedDict import numpy as np -from ...aererror import AerError +from qiskit_aer.aererror import AerError # pylint: disable=no-name-in-module -from .pulse_utils import oplist_to_array +from qiskit_aer.pulse.controllers.pulse_utils import oplist_to_array class DigestedPulseQobj: diff --git a/qiskit/providers/aer/pulse/controllers/mc_controller.py b/qiskit_aer/pulse/controllers/mc_controller.py similarity index 100% rename from qiskit/providers/aer/pulse/controllers/mc_controller.py rename to qiskit_aer/pulse/controllers/mc_controller.py diff --git a/qiskit/providers/aer/pulse/controllers/pulse_controller.py b/qiskit_aer/pulse/controllers/pulse_controller.py similarity index 100% rename from qiskit/providers/aer/pulse/controllers/pulse_controller.py rename to qiskit_aer/pulse/controllers/pulse_controller.py diff --git a/qiskit/providers/aer/pulse/controllers/pulse_de_solver.py b/qiskit_aer/pulse/controllers/pulse_de_solver.py similarity index 95% rename from qiskit/providers/aer/pulse/controllers/pulse_de_solver.py rename to qiskit_aer/pulse/controllers/pulse_de_solver.py index 167365c974..cd2c91af75 100644 --- a/qiskit/providers/aer/pulse/controllers/pulse_de_solver.py +++ b/qiskit_aer/pulse/controllers/pulse_de_solver.py @@ -20,7 +20,7 @@ """Set up DE solver for problems in qutip format.""" -from ..de.DE_Methods import method_from_string +from qiskit_aer.pulse.de.DE_Methods import method_from_string def setup_de_solver(exp, y0, pulse_de_model, de_options): diff --git a/qiskit/providers/aer/pulse/controllers/pulse_sim_options.py b/qiskit_aer/pulse/controllers/pulse_sim_options.py similarity index 98% rename from qiskit/providers/aer/pulse/controllers/pulse_sim_options.py rename to qiskit_aer/pulse/controllers/pulse_sim_options.py index 9357078803..0ed41aef06 100644 --- a/qiskit/providers/aer/pulse/controllers/pulse_sim_options.py +++ b/qiskit_aer/pulse/controllers/pulse_sim_options.py @@ -14,7 +14,7 @@ """Pulse solver options""" -from ..de.DE_Options import DE_Options +from qiskit_aer.pulse.de.DE_Options import DE_Options class PulseSimOptions(): diff --git a/qiskit/providers/aer/pulse/controllers/unitary_controller.py b/qiskit_aer/pulse/controllers/unitary_controller.py similarity index 97% rename from qiskit/providers/aer/pulse/controllers/unitary_controller.py rename to qiskit_aer/pulse/controllers/unitary_controller.py index 0397e12f25..cc6e0c905f 100644 --- a/qiskit/providers/aer/pulse/controllers/unitary_controller.py +++ b/qiskit_aer/pulse/controllers/unitary_controller.py @@ -21,8 +21,8 @@ import numpy as np from scipy.linalg.blas import get_blas_funcs from qiskit.tools.parallel import parallel_map, CPU_COUNT -from .pulse_sim_options import PulseSimOptions -from .pulse_de_solver import setup_de_solver +from qiskit_aer.pulse.controllers.pulse_sim_options import PulseSimOptions +from qiskit_aer.pulse.controllers.pulse_de_solver import setup_de_solver from .pulse_utils import occ_probabilities, write_shots_memory diff --git a/qiskit/providers/aer/pulse/de/DE_Methods.py b/qiskit_aer/pulse/de/DE_Methods.py similarity index 99% rename from qiskit/providers/aer/pulse/de/DE_Methods.py rename to qiskit_aer/pulse/de/DE_Methods.py index f0994c4aaa..6bd90a3da0 100644 --- a/qiskit/providers/aer/pulse/de/DE_Methods.py +++ b/qiskit_aer/pulse/de/DE_Methods.py @@ -25,8 +25,8 @@ import numpy as np from scipy.integrate import ode, solve_ivp from scipy.integrate._ode import zvode -from .DE_Options import DE_Options -from .type_utils import StateTypeConverter +from qiskit_aer.pulse.de.DE_Options import DE_Options +from qiskit_aer.pulse.de.type_utils import StateTypeConverter class ODE_Method(ABC): diff --git a/qiskit/providers/aer/pulse/de/DE_Options.py b/qiskit_aer/pulse/de/DE_Options.py similarity index 100% rename from qiskit/providers/aer/pulse/de/DE_Options.py rename to qiskit_aer/pulse/de/DE_Options.py diff --git a/qiskit/providers/aer/pulse/de/__init__.py b/qiskit_aer/pulse/de/__init__.py similarity index 100% rename from qiskit/providers/aer/pulse/de/__init__.py rename to qiskit_aer/pulse/de/__init__.py diff --git a/qiskit/providers/aer/pulse/de/type_utils.py b/qiskit_aer/pulse/de/type_utils.py similarity index 100% rename from qiskit/providers/aer/pulse/de/type_utils.py rename to qiskit_aer/pulse/de/type_utils.py diff --git a/qiskit/providers/aer/pulse/system_models/__init__.py b/qiskit_aer/pulse/system_models/__init__.py similarity index 70% rename from qiskit/providers/aer/pulse/system_models/__init__.py rename to qiskit_aer/pulse/system_models/__init__.py index 963d7fbcff..479ba888da 100644 --- a/qiskit/providers/aer/pulse/system_models/__init__.py +++ b/qiskit_aer/pulse/system_models/__init__.py @@ -14,3 +14,7 @@ """Models for objects built around tensor product systems. """ + +from qiskit_aer.pulse.system_models.pulse_system_model import PulseSystemModel +from qiskit_aer.pulse.system_models.hamiltonian_model import HamiltonianModel +from qiskit_aer.pulse.system_models.duffing_model_generators import duffing_system_model diff --git a/qiskit/providers/aer/pulse/system_models/duffing_model_generators.py b/qiskit_aer/pulse/system_models/duffing_model_generators.py similarity index 99% rename from qiskit/providers/aer/pulse/system_models/duffing_model_generators.py rename to qiskit_aer/pulse/system_models/duffing_model_generators.py index 4fc5431971..0aab133b88 100644 --- a/qiskit/providers/aer/pulse/system_models/duffing_model_generators.py +++ b/qiskit_aer/pulse/system_models/duffing_model_generators.py @@ -18,8 +18,8 @@ from warnings import warn from collections.abc import Iterable from qiskit.providers.models.backendconfiguration import UchannelLO -from .hamiltonian_model import HamiltonianModel -from .pulse_system_model import PulseSystemModel +from qiskit_aer.pulse.system_models.hamiltonian_model import HamiltonianModel +from qiskit_aer.pulse.system_models.pulse_system_model import PulseSystemModel def duffing_system_model(dim_oscillators, diff --git a/qiskit/providers/aer/pulse/system_models/hamiltonian_model.py b/qiskit_aer/pulse/system_models/hamiltonian_model.py similarity index 98% rename from qiskit/providers/aer/pulse/system_models/hamiltonian_model.py rename to qiskit_aer/pulse/system_models/hamiltonian_model.py index a4b6c90f1d..7154a45fdc 100644 --- a/qiskit/providers/aer/pulse/system_models/hamiltonian_model.py +++ b/qiskit_aer/pulse/system_models/hamiltonian_model.py @@ -18,8 +18,8 @@ from collections import OrderedDict import numpy as np import numpy.linalg as la -from ...aererror import AerError -from .string_model_parser.string_model_parser import HamiltonianParser +from qiskit_aer.aererror import AerError +from qiskit_aer.pulse.system_models.string_model_parser.string_model_parser import HamiltonianParser class HamiltonianModel(): diff --git a/qiskit/providers/aer/pulse/system_models/pulse_system_model.py b/qiskit_aer/pulse/system_models/pulse_system_model.py similarity index 99% rename from qiskit/providers/aer/pulse/system_models/pulse_system_model.py rename to qiskit_aer/pulse/system_models/pulse_system_model.py index 72efc860b0..707f3c9f2e 100644 --- a/qiskit/providers/aer/pulse/system_models/pulse_system_model.py +++ b/qiskit_aer/pulse/system_models/pulse_system_model.py @@ -26,7 +26,7 @@ class PulseSystemModel(): r"""Physical model object for pulse simulator. This class contains model information required by the - :class:`~qiskit.providers.aer.PulseSimulator`. It contains: + :class:`~qiskit_aer.PulseSimulator`. It contains: * ``"hamiltonian"``: a :class:`HamiltonianModel` object representing the Hamiltonian of the system. diff --git a/qiskit/providers/aer/pulse/system_models/string_model_parser/__init__.py b/qiskit_aer/pulse/system_models/string_model_parser/__init__.py similarity index 100% rename from qiskit/providers/aer/pulse/system_models/string_model_parser/__init__.py rename to qiskit_aer/pulse/system_models/string_model_parser/__init__.py diff --git a/qiskit/providers/aer/pulse/system_models/string_model_parser/apply_str_func_to_qobj.py b/qiskit_aer/pulse/system_models/string_model_parser/apply_str_func_to_qobj.py similarity index 100% rename from qiskit/providers/aer/pulse/system_models/string_model_parser/apply_str_func_to_qobj.py rename to qiskit_aer/pulse/system_models/string_model_parser/apply_str_func_to_qobj.py diff --git a/qiskit/providers/aer/pulse/system_models/string_model_parser/gen_operator.py b/qiskit_aer/pulse/system_models/string_model_parser/gen_operator.py similarity index 100% rename from qiskit/providers/aer/pulse/system_models/string_model_parser/gen_operator.py rename to qiskit_aer/pulse/system_models/string_model_parser/gen_operator.py diff --git a/qiskit/providers/aer/pulse/system_models/string_model_parser/operator_from_string.py b/qiskit_aer/pulse/system_models/string_model_parser/operator_from_string.py similarity index 100% rename from qiskit/providers/aer/pulse/system_models/string_model_parser/operator_from_string.py rename to qiskit_aer/pulse/system_models/string_model_parser/operator_from_string.py diff --git a/qiskit/providers/aer/pulse/system_models/string_model_parser/operator_generators.py b/qiskit_aer/pulse/system_models/string_model_parser/operator_generators.py similarity index 100% rename from qiskit/providers/aer/pulse/system_models/string_model_parser/operator_generators.py rename to qiskit_aer/pulse/system_models/string_model_parser/operator_generators.py diff --git a/qiskit_aer/pulse/system_models/string_model_parser/qobj_from_string.py b/qiskit_aer/pulse/system_models/string_model_parser/qobj_from_string.py new file mode 100644 index 0000000000..dc485f9d22 --- /dev/null +++ b/qiskit_aer/pulse/system_models/string_model_parser/qobj_from_string.py @@ -0,0 +1,80 @@ +# -*- coding: utf-8 -*- + +# This code is part of Qiskit. +# +# (C) Copyright IBM 2018, 2019, 2020. +# +# This code is licensed under the Apache License, Version 2.0. You may +# obtain a copy of this license in the LICENSE.txt file in the root directory +# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0. +# +# Any modifications or derivative works of this code must retain this +# copyright notice, and modified files need to carry a notice indicating +# that they have been altered from the originals. +# pylint: disable=invalid-name + +"""Module for creating quantum operators.""" + +from . import operator_generators as op_gen + + +def gen_oper(opname, index, h_osc, h_qub, states=None): + """Generate quantum operators. + + Args: + opname (str): Name of the operator to be returned. + index (int): Index of operator. + h_osc (dict): Dimension of oscillator subspace + h_qub (dict): Dimension of qubit subspace + states (tuple): State indices of projection operator. + + Returns: + Qobj: quantum operator for target qubit. + """ + + opr_tmp = None + + # get number of levels in Hilbert space + if opname in ['X', 'Y', 'Z', 'Sp', 'Sm', 'I', 'O', 'P']: + is_qubit = True + dim = h_qub.get(index, 2) + + if opname in ['X', 'Y', 'Z'] and dim > 2: + if opname == 'X': + opr_tmp = (op_gen.get_oper('A', dim) + + op_gen.get_oper('C', dim)) + elif opname == 'Y': + opr_tmp = (-1j * op_gen.get_oper('A', dim) + + 1j * op_gen.get_oper('C', dim)) + else: + opr_tmp = (op_gen.get_oper('I', dim) - + 2 * op_gen.get_oper('N', dim)) + + else: + is_qubit = False + dim = h_osc.get(index, 5) + + if opname == 'P': + opr_tmp = op_gen.get_oper(opname, dim, states) + else: + if opr_tmp is None: + opr_tmp = op_gen.get_oper(opname, dim) + + # reverse sort by index + rev_h_osc = sorted(h_osc.items(), key=lambda x: x[0])[::-1] + rev_h_qub = sorted(h_qub.items(), key=lambda x: x[0])[::-1] + + # osc_n * … * osc_0 * qubit_n * … * qubit_0 + opers = [] + for ii, dd in rev_h_osc: + if ii == index and not is_qubit: + opers.append(opr_tmp) + else: + opers.append(op_gen.qeye(dd)) + for ii, dd in rev_h_qub: + if ii == index and is_qubit: + opers.append(opr_tmp) + else: + opers.append(op_gen.qeye(dd)) + + return op_gen.tensor(opers) diff --git a/qiskit/providers/aer/pulse/system_models/string_model_parser/string_model_parser.py b/qiskit_aer/pulse/system_models/string_model_parser/string_model_parser.py similarity index 100% rename from qiskit/providers/aer/pulse/system_models/string_model_parser/string_model_parser.py rename to qiskit_aer/pulse/system_models/string_model_parser/string_model_parser.py diff --git a/qiskit/providers/aer/utils/__init__.py b/qiskit_aer/utils/__init__.py similarity index 65% rename from qiskit/providers/aer/utils/__init__.py rename to qiskit_aer/utils/__init__.py index 98bbfaa946..31bed2eb36 100644 --- a/qiskit/providers/aer/utils/__init__.py +++ b/qiskit_aer/utils/__init__.py @@ -12,13 +12,13 @@ """ ============================================= -Utilities (:mod:`qiskit.providers.aer.utils`) +Utilities (:mod:`qiskit_aer.utils`) ============================================= -.. currentmodule:: qiskit.providers.aer.utils +.. currentmodule:: qiskit_aer.utils This module contains utility functions for modifying -:class:`~qiskit.providers.aer.noise.NoiseModel` objects and ``QuantumCircuits`` +:class:`~qiskit_aer.noise.NoiseModel` objects and ``QuantumCircuits`` using noise models. @@ -43,8 +43,8 @@ approximate_noise_model """ -from .noise_remapper import remap_noise_model -from .noise_transformation import NoiseTransformer -from .noise_transformation import approximate_quantum_error -from .noise_transformation import approximate_noise_model -from .noise_model_inserter import insert_noise +from qiskit_aer.utils.noise_remapper import remap_noise_model +from qiskit_aer.utils.noise_transformation import NoiseTransformer +from qiskit_aer.utils.noise_transformation import approximate_quantum_error +from qiskit_aer.utils.noise_transformation import approximate_noise_model +from qiskit_aer.utils.noise_model_inserter import insert_noise diff --git a/qiskit/providers/aer/utils/noise_model_inserter.py b/qiskit_aer/utils/noise_model_inserter.py similarity index 98% rename from qiskit/providers/aer/utils/noise_model_inserter.py rename to qiskit_aer/utils/noise_model_inserter.py index 9eda9b8422..871ae319c0 100644 --- a/qiskit/providers/aer/utils/noise_model_inserter.py +++ b/qiskit_aer/utils/noise_model_inserter.py @@ -33,7 +33,7 @@ def insert_noise(circuits, noise_model, transpile=False): original circuit with ``Kraus`` instructions inserted after all instructions referenced in the ``noise_model``. The resulting circuit cannot be ran on a quantum computer but can be executed on the - :class:`~qiskit.providers.aer.QasmSimulator`. + :class:`~qiskit_aer.QasmSimulator`. """ is_circuits_list = isinstance(circuits, (list, tuple)) circuits = circuits if is_circuits_list else [circuits] diff --git a/qiskit/providers/aer/utils/noise_remapper.py b/qiskit_aer/utils/noise_remapper.py similarity index 97% rename from qiskit/providers/aer/utils/noise_remapper.py rename to qiskit_aer/utils/noise_remapper.py index 248c4b77a0..673ca2b55b 100644 --- a/qiskit/providers/aer/utils/noise_remapper.py +++ b/qiskit_aer/utils/noise_remapper.py @@ -16,8 +16,8 @@ import logging -from ..noise.noise_model import NoiseModel -from ..noise.noiseerror import NoiseError +from qiskit_aer.noise.noise_model import NoiseModel +from qiskit_aer.noise.noiseerror import NoiseError logger = logging.getLogger(__name__) diff --git a/qiskit/providers/aer/utils/noise_transformation.py b/qiskit_aer/utils/noise_transformation.py similarity index 99% rename from qiskit/providers/aer/utils/noise_transformation.py rename to qiskit_aer/utils/noise_transformation.py index 4e30731ade..3c80f68f86 100644 --- a/qiskit/providers/aer/utils/noise_transformation.py +++ b/qiskit_aer/utils/noise_transformation.py @@ -33,10 +33,10 @@ from qiskit.quantum_info.operators.channel import Kraus from qiskit.quantum_info.operators.channel import SuperOp -from ..noise.errors import QuantumError -from ..noise.noise_model import NoiseModel -from ..noise.noiseerror import NoiseError -from ..noise.errors.errorutils import single_qubit_clifford_instructions +from qiskit_aer.noise.errors import QuantumError +from qiskit_aer.noise.noise_model import NoiseModel +from qiskit_aer.noise.noiseerror import NoiseError +from qiskit_aer.noise.errors.errorutils import single_qubit_clifford_instructions logger = logging.getLogger(__name__) diff --git a/qiskit/providers/aer/version.py b/qiskit_aer/version.py similarity index 100% rename from qiskit/providers/aer/version.py rename to qiskit_aer/version.py diff --git a/releasenotes/notes/drop-py35-880076756b0d7777.yaml b/releasenotes/notes/drop-py35-880076756b0d7777.yaml new file mode 100644 index 0000000000..e30bc0e281 --- /dev/null +++ b/releasenotes/notes/drop-py35-880076756b0d7777.yaml @@ -0,0 +1,7 @@ +--- +upgrade: + - | + The deprecated support for running qiskit-aer with Python 3.5 has + been removed. To use qiskit-aer >=0.7.0 you will now need at + least Python 3.6. If you are using Python 3.5 the last version which will + work is qiskit-aer 0.6.x. diff --git a/setup.py b/setup.py index b8fae05461..c06b443e3d 100644 --- a/setup.py +++ b/setup.py @@ -62,16 +62,8 @@ requirements = common_requirements + ['qiskit-terra>=0.16.0'] -if not hasattr(setuptools, - 'find_namespace_packages') or not inspect.ismethod( - setuptools.find_namespace_packages): - print("Your setuptools version:'{}' does not support PEP 420 " - "(find_namespace_packages). Upgrade it to version >='40.1.0' and " - "repeat install.".format(setuptools.__version__)) - sys.exit(1) - VERSION_PATH = os.path.join(os.path.dirname(__file__), - "qiskit", "providers", "aer", "VERSION.txt") + "qiskit_aer", "VERSION.txt") with open(VERSION_PATH, "r") as version_file: VERSION = version_file.read().strip() @@ -83,7 +75,7 @@ setup( name=PACKAGE_NAME, version=VERSION, - packages=setuptools.find_namespace_packages(include=['qiskit.*']), + packages=setuptools.find_packages(exclude=['test*']), cmake_source_dir='.', description="Qiskit Aer - High performance simulators for Qiskit", long_description=README, diff --git a/src/open_pulse/CMakeLists.txt b/src/open_pulse/CMakeLists.txt index a4f293100b..efd720f0f6 100644 --- a/src/open_pulse/CMakeLists.txt +++ b/src/open_pulse/CMakeLists.txt @@ -21,4 +21,4 @@ endfunction() numpy_pybind11_add_module(pulse_utils pulse_utils_bindings.cpp pulse_utils.cpp numeric_integrator.cpp zspmv.cpp) numpy_pybind11_add_module(test_python_to_cpp test_python_to_cpp.cpp) -install(TARGETS pulse_utils test_python_to_cpp LIBRARY DESTINATION "qiskit/providers/aer/pulse/controllers/") +install(TARGETS pulse_utils test_python_to_cpp LIBRARY DESTINATION "qiskit_aer/pulse/controllers/") diff --git a/test/terra/backends/qasm_simulator/qasm_basics.py b/test/terra/backends/qasm_simulator/qasm_basics.py index 0e60c2b462..b95d816827 100644 --- a/test/terra/backends/qasm_simulator/qasm_basics.py +++ b/test/terra/backends/qasm_simulator/qasm_basics.py @@ -15,7 +15,7 @@ from test.terra.utils.mock import FakeFailureQasmSimulator, FakeSuccessQasmSimulator from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit from qiskit.compiler import transpile, assemble -from qiskit.providers.aer import AerError +from qiskit.providers.aer.exceptions import AerError class QasmBasicsTests: diff --git a/test/terra/backends/qasm_simulator/qasm_method.py b/test/terra/backends/qasm_simulator/qasm_method.py index 92663ef10d..5093a37198 100644 --- a/test/terra/backends/qasm_simulator/qasm_method.py +++ b/test/terra/backends/qasm_simulator/qasm_method.py @@ -19,7 +19,7 @@ from test.terra.reference import ref_non_clifford from qiskit.compiler import assemble from qiskit.providers.aer import QasmSimulator -from qiskit.providers.aer import AerError +from qiskit.providers.aer.exceptions import AerError from qiskit.providers.aer.noise import NoiseModel from qiskit.providers.aer.noise.errors import QuantumError from qiskit.providers.aer.noise.errors import pauli_error diff --git a/test/terra/backends/qasm_simulator/qasm_snapshot.py b/test/terra/backends/qasm_simulator/qasm_snapshot.py index 00daa1b971..c1006badae 100644 --- a/test/terra/backends/qasm_simulator/qasm_snapshot.py +++ b/test/terra/backends/qasm_simulator/qasm_snapshot.py @@ -22,7 +22,7 @@ from qiskit.compiler import assemble from qiskit.quantum_info import DensityMatrix, Pauli, Operator from qiskit.providers.aer import QasmSimulator -from qiskit.providers.aer import AerError +from qiskit.providers.aer.exceptions import AerError from qiskit.providers.aer.extensions import Snapshot from test.terra.reference.ref_snapshot_state import ( diff --git a/test/terra/backends/qasm_simulator/qasm_truncate.py b/test/terra/backends/qasm_simulator/qasm_truncate.py index b28a59e304..9c60b3c4f3 100644 --- a/test/terra/backends/qasm_simulator/qasm_truncate.py +++ b/test/terra/backends/qasm_simulator/qasm_truncate.py @@ -9,7 +9,7 @@ QasmSimulator Integration Tests """ import json -from qiskit import execute, QuantumRegister, ClassicalRegister, QuantumCircuit, Aer +from qiskit import execute, QuantumRegister, ClassicalRegister, QuantumCircuit from qiskit.providers.aer import QasmSimulator from qiskit.providers.aer import noise from qiskit.providers.aer.noise import NoiseModel @@ -152,7 +152,7 @@ def test_truncate_ideal_sparse_circuit(self): circuit.measure(20, 1) - qasm_sim = Aer.get_backend('qasm_simulator') + qasm_sim = QasmSimulator() backend_options = self.BACKEND_OPTS.copy() backend_options["truncate_verbose"] = True backend_options['optimize_ideal_threshold'] = 1 @@ -183,7 +183,7 @@ def test_truncate_nonlocal_noise(self): error = depolarizing_error(0.1, 2) noise_model.add_nonlocal_quantum_error(error, ['x'], [5], [4, 6]) - qasm_sim = Aer.get_backend('qasm_simulator') + qasm_sim = QasmSimulator() backend_options = self.BACKEND_OPTS.copy() backend_options["truncate_verbose"] = True backend_options['optimize_ideal_threshold'] = 1 @@ -206,7 +206,7 @@ def test_truncate(self): """Test truncation with noise model option""" circuit = self.create_circuit_for_truncate() - qasm_sim = Aer.get_backend('qasm_simulator') + qasm_sim = QasmSimulator() backend_options = self.BACKEND_OPTS.copy() backend_options["truncate_verbose"] = True backend_options['optimize_ideal_threshold'] = 1 @@ -225,7 +225,7 @@ def test_no_truncate(self): """Test truncation with noise model option""" circuit = self.create_circuit_for_truncate() - qasm_sim = Aer.get_backend('qasm_simulator') + qasm_sim = QasmSimulator() backend_options = self.BACKEND_OPTS.copy() backend_options["truncate_verbose"] = True backend_options['optimize_ideal_threshold'] = 1 @@ -245,7 +245,7 @@ def test_truncate_disable(self): """Test explicitly disabling truncation with noise model option""" circuit = self.create_circuit_for_truncate() - qasm_sim = Aer.get_backend('qasm_simulator') + qasm_sim = QasmSimulator() backend_options = self.BACKEND_OPTS.copy() backend_options["truncate_verbose"] = True backend_options["truncate_enable"] = False diff --git a/test/terra/backends/test_pulse_simulator.py b/test/terra/backends/test_pulse_simulator.py index 11cf93db4a..2be2b74439 100644 --- a/test/terra/backends/test_pulse_simulator.py +++ b/test/terra/backends/test_pulse_simulator.py @@ -31,8 +31,8 @@ AcquireChannel, MemorySlot) from qiskit.providers.aer.pulse.de.DE_Methods import ScipyODE from qiskit.providers.aer.pulse.de.DE_Options import DE_Options -from qiskit.providers.aer.pulse.system_models.pulse_system_model import PulseSystemModel -from qiskit.providers.aer.pulse.system_models.hamiltonian_model import HamiltonianModel +from qiskit.providers.aer.pulse.system_models import PulseSystemModel +from qiskit.providers.aer.pulse.system_models import HamiltonianModel from qiskit.providers.models.backendconfiguration import UchannelLO from .pulse_sim_independent import (simulate_1q_model, diff --git a/test/terra/common.py b/test/terra/common.py index 647a833293..9200a6c5c0 100644 --- a/test/terra/common.py +++ b/test/terra/common.py @@ -30,16 +30,15 @@ from qiskit.quantum_info import Operator, Statevector from qiskit.quantum_info.operators.predicates import matrix_equal from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit -from qiskit.providers.aer import __path__ as main_path from qiskit.test import QiskitTestCase class Path(Enum): """Helper with paths commonly used during the tests.""" - MAIN = main_path[0] TEST = os.path.dirname(__file__) - # Examples path: examples/ - EXAMPLES = os.path.join(MAIN, '../examples') + # Examples path: examples + EXAMPLES = os.path.join(os.path.dirname(os.path.dirname( + os.path.abspath(__file__))), 'examples') class QiskitAerTestCase(QiskitTestCase): diff --git a/test/terra/decorators.py b/test/terra/decorators.py index ceb9d07015..a6dec5d397 100644 --- a/test/terra/decorators.py +++ b/test/terra/decorators.py @@ -19,7 +19,7 @@ from qiskit import QuantumCircuit, assemble, execute from qiskit.providers.aer import AerProvider, QasmSimulator -from qiskit.providers.aer import AerError +from qiskit.providers.aer.exceptions import AerError # Backwards compatibility for Terra <= 0.13 if not hasattr(QuantumCircuit, 'i'): diff --git a/test/terra/extensions/test_wrappers.py b/test/terra/extensions/test_wrappers.py index 83411fff85..b44a629868 100644 --- a/test/terra/extensions/test_wrappers.py +++ b/test/terra/extensions/test_wrappers.py @@ -28,9 +28,9 @@ class TestControllerExecuteWrappers(QiskitAerTestCase): """Basic functionality tests for pybind-generated wrappers""" - CFUNCS = [qasm_controller_execute(), - statevector_controller_execute(), - unitary_controller_execute()] + CFUNCS = [wrap.qasm_controller_execute(), + wrap.statevector_controller_execute(), + wrap.unitary_controller_execute()] def test_deepcopy(self): """Test that the functors are deepcopy-able.""" @@ -64,21 +64,21 @@ def _map_and_test(self, cfunc, qobj): def test_mappable_qasm(self): """Test that the qasm controller can be mapped.""" - cfunc = qasm_controller_execute() + cfunc = wrap.qasm_controller_execute() sim = QasmSimulator() fqobj = self._create_qobj(sim) self._map_and_test(cfunc, fqobj) def test_mappable_statevector(self): """Test that the statevector controller can be mapped.""" - cfunc = statevector_controller_execute() + cfunc = wrap.statevector_controller_execute() sim = StatevectorSimulator() fqobj = self._create_qobj(sim) self._map_and_test(cfunc, fqobj) def test_mappable_unitary(self): """Test that the unitary controller can be mapped.""" - cfunc = unitary_controller_execute() + cfunc = wrap.unitary_controller_execute() sim = UnitarySimulator() fqobj = self._create_qobj(sim) self._map_and_test(cfunc, fqobj) diff --git a/test/terra/noise/test_noise_remapper.py b/test/terra/noise/test_noise_remapper.py index 185e4fda03..51435be3ce 100644 --- a/test/terra/noise/test_noise_remapper.py +++ b/test/terra/noise/test_noise_remapper.py @@ -5,7 +5,7 @@ import unittest from test.terra import common from qiskit.providers.aer.noise import NoiseModel -from qiskit.providers.aer.noise.noiseerror import NoiseError +from qiskit.providers.aer.exceptions import NoiseError from qiskit.providers.aer.noise.errors import depolarizing_error from qiskit.providers.aer.utils import remap_noise_model diff --git a/test/terra/noise/test_quantum_error.py b/test/terra/noise/test_quantum_error.py index 42f1e1c24c..ec3bd1f6c8 100644 --- a/test/terra/noise/test_quantum_error.py +++ b/test/terra/noise/test_quantum_error.py @@ -19,7 +19,7 @@ from qiskit.quantum_info.operators import SuperOp, Kraus from qiskit.providers.aer.noise import QuantumError -from qiskit.providers.aer.noise.noiseerror import NoiseError +from qiskit.providers.aer.exceptions import NoiseError from qiskit.providers.aer.noise.errors.errorutils import standard_gate_unitary diff --git a/test/terra/noise/test_readout_error.py b/test/terra/noise/test_readout_error.py index 3033a694cf..0b44710422 100644 --- a/test/terra/noise/test_readout_error.py +++ b/test/terra/noise/test_readout_error.py @@ -18,7 +18,7 @@ import numpy as np -from qiskit.providers.aer.noise.noiseerror import NoiseError +from qiskit.providers.aer.exceptions import NoiseError from qiskit.providers.aer.noise.errors.readout_error import ReadoutError diff --git a/test/terra/noise/test_standard_errors.py b/test/terra/noise/test_standard_errors.py index 84972b9029..da8ca65621 100644 --- a/test/terra/noise/test_standard_errors.py +++ b/test/terra/noise/test_standard_errors.py @@ -19,7 +19,7 @@ import numpy as np from qiskit.quantum_info.operators.pauli import Pauli -from qiskit.providers.aer.noise.noiseerror import NoiseError +from qiskit.providers.aer.exceptions import NoiseError from qiskit.providers.aer.noise.errors.errorutils import standard_gate_unitary from qiskit.providers.aer.noise.errors.standard_errors import kraus_error from qiskit.providers.aer.noise.errors.standard_errors import mixed_unitary_error diff --git a/test/terra/pulse/test_duffing_model_generators.py b/test/terra/pulse/test_duffing_model_generators.py index b18067a659..0bad5aa2b1 100644 --- a/test/terra/pulse/test_duffing_model_generators.py +++ b/test/terra/pulse/test_duffing_model_generators.py @@ -16,8 +16,8 @@ import unittest from numpy import array, array_equal, kron from test.terra.common import QiskitAerTestCase -from qiskit.providers.aer.pulse.system_models.pulse_system_model import PulseSystemModel -from qiskit.providers.aer.pulse.system_models.hamiltonian_model import HamiltonianModel +from qiskit.providers.aer.pulse.system_models import PulseSystemModel +from qiskit.providers.aer.pulse.system_models import HamiltonianModel from qiskit.providers.aer.pulse.system_models import duffing_model_generators as model_gen from qiskit.providers.aer.pulse.system_models.string_model_parser.operator_generators import get_oper from qiskit.providers.models.backendconfiguration import UchannelLO diff --git a/test/terra/utils/mock.py b/test/terra/utils/mock.py index 1334d34c77..0d1e5eb6bd 100644 --- a/test/terra/utils/mock.py +++ b/test/terra/utils/mock.py @@ -38,7 +38,7 @@ from qiskit.providers.jobstatus import JobStatus from qiskit.providers.baseprovider import BaseProvider from qiskit.providers.exceptions import QiskitBackendNotFoundError -from qiskit.providers.aer import AerError +from qiskit.providers.aer.exceptions import AerError logger = logging.getLogger(__name__) diff --git a/tools/verify_wheels.py b/tools/verify_wheels.py index da1f9f62d4..dda7646d08 100644 --- a/tools/verify_wheels.py +++ b/tools/verify_wheels.py @@ -19,10 +19,10 @@ from qiskit.pulse import (Schedule, Play, Acquire, Waveform, DriveChannel, AcquireChannel, MemorySlot) -from qiskit.providers.aer import QasmSimulator -from qiskit.providers.aer import StatevectorSimulator -from qiskit.providers.aer import UnitarySimulator -from qiskit.providers.aer import PulseSimulator +from qiskit_aer import QasmSimulator +from qiskit_aer import StatevectorSimulator +from qiskit_aer import UnitarySimulator +from qiskit_aer import PulseSimulator # Backwards compatibility for Terra <= 0.13 if not hasattr(QuantumCircuit, 'i'): diff --git a/tox.ini b/tox.ini index 1145705ef6..a816c49622 100644 --- a/tox.ini +++ b/tox.ini @@ -33,8 +33,8 @@ deps = pylint git+https://github.com/Qiskit/qiskit-terra.git commands = - pycodestyle --ignore=E402,W504 --max-line-length=100 qiskit/providers/aer - pylint -j 2 -rn qiskit/providers/aer + pycodestyle --ignore=E402,W504 --max-line-length=100 qiskit_aer + pylint -j 2 -rn qiskit_aer [testenv:docs] deps =