Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Move qiskit.test.mock to qiskit.providers.fake_provider and deprecate #8121

Merged
merged 73 commits into from
Jun 23, 2022
Merged
Show file tree
Hide file tree
Changes from 71 commits
Commits
Show all changes
73 commits
Select commit Hold shift + click to select a range
60e56d7
redirect imports from qiskit.test.mock to qiskit.providers.fake_provider
HuangJunye May 25, 2022
6e2fd80
import the rest of classes in fake_backend_v2 to fake_provider
HuangJunye May 25, 2022
49e532a
redirect imports to fake_provider
HuangJunye May 25, 2022
f63b1ff
change jupyter-execute to code-block
HuangJunye May 26, 2022
d63922c
redirect import
HuangJunye May 26, 2022
b1262fb
Combine multiple imports into one
HuangJunye May 26, 2022
eab4d67
Add missing )
HuangJunye May 26, 2022
b4ec80e
move all files except __init__ from qiskit.test.mock to qiskit.provid…
HuangJunye May 26, 2022
3775c05
redirect imports in fake_provider.__init__.py
HuangJunye May 26, 2022
bc65bc3
redirect imports in mock.__init__.py
HuangJunye May 26, 2022
701688f
Use relative imports in fake_provider.__init__.py
HuangJunye May 26, 2022
048acf8
redirect .utlis imports
HuangJunye May 26, 2022
f446ab9
Don't import fake_backend_v2.py in __init__ to avoid clashes of FakeB…
HuangJunye May 31, 2022
66710f5
Match imports from the old and new __init__
HuangJunye May 31, 2022
7d09331
Organize imports
HuangJunye May 31, 2022
d718007
Merge branch 'main' into move-qiskit-test-mock
HuangJunye May 31, 2022
c9f7daa
black linting
HuangJunye May 31, 2022
e27ab0c
Fix FakePulseBackend import order dependency
HuangJunye May 31, 2022
60851fc
fix cyclic import
HuangJunye Jun 1, 2022
0c52266
move relative import after absolute import
HuangJunye Jun 1, 2022
9c8f719
fix cyclic import
HuangJunye Jun 1, 2022
d3b55d9
Update MANIFEST.ini with new path
HuangJunye Jun 1, 2022
53a888c
add deprecation warning
HuangJunye Jun 2, 2022
af0f110
add deprecation test
HuangJunye Jun 2, 2022
a012590
add release note
HuangJunye Jun 2, 2022
b238b65
move test files from test.python.mock to test.python.providers.fake_p…
HuangJunye Jun 2, 2022
0588806
linting
HuangJunye Jun 2, 2022
dc1e9bc
linting
HuangJunye Jun 2, 2022
95ae51f
change deprecation warning location
HuangJunye Jun 2, 2022
434da55
update path for tools/update_fake_backends.py
HuangJunye Jun 2, 2022
3e3f7a7
rename docstrings
HuangJunye Jun 2, 2022
ad7a0e8
Update ibmq_mock.py
HuangJunye Jun 2, 2022
ab0ce9a
import back FakeBackendV2 and FakeBackend5QV2 in __init__
HuangJunye Jun 7, 2022
1082bd8
Modify release note
HuangJunye Jun 7, 2022
1bb25ff
Merge remote-tracking branch 'upstream/main' into move-qiskit-test-mock
HuangJunye Jun 7, 2022
113a65a
reformat release note
HuangJunye Jun 9, 2022
cab72ae
remove unnecessary tests
HuangJunye Jun 9, 2022
19bf4c0
Merge remote-tracking branch 'upstream/main' into move-qiskit-test-mock
HuangJunye Jun 9, 2022
94369f0
Use relative imports
HuangJunye Jun 9, 2022
3ae61e8
redirect import in test_schedular.py
HuangJunye Jun 20, 2022
f456e83
Merge branch 'main' into move-qiskit-test-mock
HuangJunye Jun 20, 2022
98c7fc4
first draft of module level doc
HuangJunye Jun 20, 2022
b3b19dc
Update docstring of fake provider v1 and v2
HuangJunye Jun 20, 2022
dcfe277
Update wording of module level doc
HuangJunye Jun 20, 2022
2a79ab0
add fake V1 and V2 backends
HuangJunye Jun 20, 2022
61a33eb
Correct fake v1 and v2 backends in the list
HuangJunye Jun 20, 2022
61308eb
comment on backends that do not have V2 versions
HuangJunye Jun 20, 2022
2c24b47
list special fake backends
HuangJunye Jun 20, 2022
a864a38
Add descriptions for sections
HuangJunye Jun 21, 2022
2af0c11
add code example using jupyter execute
HuangJunye Jun 21, 2022
b43ed0c
Update code example and improve descriptions of the module
HuangJunye Jun 21, 2022
1b4f8a3
not using fake provider before fake provider get backend name is fixed
HuangJunye Jun 21, 2022
98225d0
Merge branch 'main' into move-qiskit-test-mock
HuangJunye Jun 21, 2022
7ead738
modify comment
HuangJunye Jun 21, 2022
88d6812
formating fix
HuangJunye Jun 21, 2022
3aee7a8
Remove fake backend coupling map from docstrings
HuangJunye Jun 21, 2022
170e075
Merge branch 'main' into move-qiskit-test-mock
HuangJunye Jun 21, 2022
eddfa65
linting
HuangJunye Jun 21, 2022
4560748
remove coupling map of Pooughkeepsie
HuangJunye Jun 21, 2022
fe1f927
Merge branch 'main' into move-qiskit-test-mock
HuangJunye Jun 21, 2022
c750e79
add qiskit-aer to tox.ini as deps for docs build
HuangJunye Jun 22, 2022
7dee87f
Merge branch 'main' into move-qiskit-test-mock
HuangJunye Jun 22, 2022
e4170e1
Revert "remove coupling map of Pooughkeepsie"
HuangJunye Jun 22, 2022
20cdd4f
Revert "linting"
HuangJunye Jun 22, 2022
a29f409
Revert "Remove fake backend coupling map from docstrings"
HuangJunye Jun 22, 2022
4547eb2
fix coupling maps
HuangJunye Jun 22, 2022
7390620
Merge branch 'main' into move-qiskit-test-mock
HuangJunye Jun 22, 2022
c2d2939
Fix minor typos
jakelishman Jun 22, 2022
3991e70
Issue deprecation warnings from all levels of package
jakelishman Jun 22, 2022
c956195
Merge remote-tracking branch 'ibm/main' into move-qiskit-test-mock
jakelishman Jun 22, 2022
be51db0
Merge remote-tracking branch 'ibm/main' into move-qiskit-test-mock
jakelishman Jun 22, 2022
795f688
Import from the correct location
jakelishman Jun 22, 2022
20da0cc
Merge branch 'main' into move-qiskit-test-mock
mergify[bot] Jun 23, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion MANIFEST.in
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ include qiskit/VERSION.txt
recursive-include qiskit *.pyx
recursive-include qiskit *.pxd
include qiskit/visualization/styles/*.json
recursive-include qiskit/test/mock/backends *.json
recursive-include qiskit/providers/fake_provider/backends *.json

# Include the tests files.
recursive-include test *.py
Expand Down
6 changes: 6 additions & 0 deletions docs/apidocs/providers_fake_provider.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
.. _qiskit-providers-fakeprovider:

.. automodule:: qiskit.providers.fake_provider
:no-members:
:no-inherited-members:
:no-special-members:
1 change: 1 addition & 0 deletions docs/apidocs/terra.rst
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@ Qiskit Terra API Reference
extensions
providers_basicaer
providers
providers_fake_provider
providers_models
pulse
scheduler
Expand Down
259 changes: 234 additions & 25 deletions qiskit/providers/fake_provider/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,32 +11,241 @@
# that they have been altered from the originals.

"""
Utilities for mocking the IBMQ provider, including job responses and backends.
======================================================
Fake Provider (:mod:`qiskit.providers.fake_provider`)
======================================================

The module includes dummy provider, backends, and jobs.
The purpose of these classes is to fake backends for testing purposes:
testing local timeouts, arbitrary responses or behavior, etc.
.. currentmodule:: qiskit.providers.fake_provider

Overview
========

The fake provider module contains fake providers and fake backends classes. The fake backends are
built to mimic the behaviors of IBM Quantum systems using system snapshots. The system snapshots
contain important information about the quantum system such as coupling map, basis gates, qubit
properties (T1, T2, error rate, etc.) which are useful for testing the transpiler and performing
noisy simulation of the system.

Example Usage
=============

Here is an example of using a fake backend for transpilation and simulation.

.. jupyter-execute::

from qiskit import QuantumCircuit
from qiskit.providers.fake_provider import FakeManilaV2

# Get a fake backend from the fake provider
backend = FakeManilaV2()

# Create a simple circuit
circuit = QuantumCircuit(3)
circuit.h(0)
circuit.cx(0,1)
circuit.cx(0,2)
circuit.measure_all()
circuit.draw()

.. jupyter-execute::

from qiskit import transpile

# Transpile the ideal circuit to a circuit that can be directly executed by the backend
transpiled_circuit = transpile(circuit, backend)
transpiled_circuit.draw()

.. jupyter-execute::

from qiskit.tools.visualization import plot_histogram

# Run the transpiled circuit using the simulated fake backend
job = backend.run(transpiled_circuit)
counts = job.result().get_counts()
plot_histogram(counts)

.. important::

Please note that the simulation is done using a noise model generated from system snapshots
obtained in the past (sometimes a few years ago) and the results are not representative of the
latest behaviours of the real quantum system which the fake backend is mimicking. If you want to
run noisy simulations to compare with the real quantum system, please follow steps below to
generate a simulator mimics a real quantum system with the latest calibration results.

.. code-block:: python

from qiskit import IBMQ
from qiskit.providers.aer import AerSimulator

# get a real backend from a real provider
provider = IBMQ.load_account()
backend = provider.get_backend('ibmq_manila')

# generate a simulator that mimics the real quantum system with the latest calibration results
backend_sim = AerSimulator.from_backend(backend)


Fake Providers
==============

Fake providers provide access to a list of fake backends.

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

FakeProviderForBackendV2
FakeProvider

Fake Backends
=============

Fake V2 Backends
----------------

Fake V2 backends are fake backends with IBM Quantum systems snapshots implemented with
:mod:`~qiskit.providers.backend.BackendV2` interface.

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

FakeAlmadenV2
FakeArmonkV2
FakeAthensV2
FakeBelemV2
FakeBoeblingenV2
FakeBogotaV2
FakeBrooklynV2
FakeBurlingtonV2
FakeCairoV2
FakeCambridgeV2
FakeCasablancaV2
FakeEssexV2
FakeGuadalupeV2
FakeHanoiV2
FakeJakartaV2
FakeJohannesburgV2
FakeKolkataV2
FakeLagosV2
FakeLimaV2
FakeLondonV2
FakeManhattanV2
FakeManilaV2
FakeMelbourneV2
FakeMontrealV2
FakeMumbaiV2
FakeNairobiV2
FakeOurenseV2
FakeParisV2
FakePoughkeepsieV2
FakeQuitoV2
FakeRochesterV2
FakeRomeV2
.. FakeRueschlikonV2 # no v2 version
FakeSantiagoV2
FakeSingaporeV2
FakeSydneyV2
.. FakeTenerifeV2 # no v2 version
.. FakeTokyoV2 # no v2 version
FakeTorontoV2
FakeValenciaV2
FakeVigoV2
FakeWashingtonV2
FakeYorktownV2

Fake V1 Backends
----------------

Fake V1 backends are fake backends with IBM Quantum systems snapshots implemented with
:mod:`~qiskit.providers.backend.BackendV1` interface.

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

FakeAlmaden
FakeArmonk
FakeAthens
FakeBelem
FakeBoeblingen
FakeBogota
FakeBrooklyn
FakeBurlington
FakeCairo
FakeCambridge
FakeCasablanca
FakeEssex
FakeGuadalupe
FakeHanoi
FakeJakarta
FakeJohannesburg
FakeKolkata
FakeLagos
FakeLima
FakeLondon
FakeManhattan
FakeManila
FakeMelbourne
FakeMontreal
FakeMumbai
FakeNairobi
FakeOurense
FakeParis
FakePoughkeepsie
FakeQuito
FakeRochester
FakeRome
FakeRueschlikon
FakeSantiago
FakeSingapore
FakeSydney
FakeTenerife
FakeTokyo
FakeToronto
FakeValencia
FakeVigo
FakeWashington
FakeYorktown

Special Fake Backends
=====================

Special fake backends are fake backends that were created for special testing purposes.

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

FakeQasmSimulator
FakeOpenPulse2Q
FakeOpenPulse3Q
Fake1Q
FakeBackendV2
FakeBackend5QV2
FakeMumbaiFractionalCX
ConfigurableFakeBackend

The mock devices are mainly for testing the compiler.
"""

from qiskit.test.mock.fake_provider import (
FakeProviderForBackendV2,
FakeProvider,
)
from qiskit.test.mock.fake_provider import FakeProviderFactory
from qiskit.test.mock.fake_backend import FakeBackend
from qiskit.test.mock.fake_pulse_backend import FakePulseBackend
from qiskit.test.mock.fake_qasm_backend import FakeQasmBackend
from qiskit.test.mock.utils.configurable_backend import ConfigurableFakeBackend
from qiskit.test.mock.fake_backend_v2 import FakeBackendV2, FakeBackend5QV2
HuangJunye marked this conversation as resolved.
Show resolved Hide resolved
from qiskit.test.mock.fake_mumbai_v2 import FakeMumbaiFractionalCX
from qiskit.test.mock.fake_job import FakeJob
from qiskit.test.mock.fake_qobj import FakeQobj

from qiskit.test.mock.backends import *

from qiskit.test.mock.fake_qasm_simulator import FakeQasmSimulator
from qiskit.test.mock.fake_openpulse_2q import FakeOpenPulse2Q
from qiskit.test.mock.fake_openpulse_3q import FakeOpenPulse3Q
from qiskit.test.mock.fake_1q import Fake1Q
# Fake job and qobj classes
from .fake_job import FakeJob
from .fake_qobj import FakeQobj

# Base classes for fake backends
from .fake_backend import FakeBackend
HuangJunye marked this conversation as resolved.
Show resolved Hide resolved
from .fake_qasm_backend import FakeQasmBackend
from .fake_pulse_backend import FakePulseBackend

# Fake providers
from .fake_provider import FakeProviderFactory, FakeProviderForBackendV2, FakeProvider

# Standard fake backends with IBM Quantum systems snapshots
from .backends import *

# Special fake backends for special testing perpurposes
from .fake_qasm_simulator import FakeQasmSimulator
from .fake_openpulse_2q import FakeOpenPulse2Q
from .fake_openpulse_3q import FakeOpenPulse3Q
from .fake_1q import Fake1Q
from .fake_backend_v2 import FakeBackendV2, FakeBackend5QV2
from .fake_mumbai_v2 import FakeMumbaiFractionalCX

# Configurable fake backend
from .utils.configurable_backend import ConfigurableFakeBackend
104 changes: 104 additions & 0 deletions qiskit/providers/fake_provider/backends/__init__.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
# This code is part of Qiskit.
#
# (C) Copyright IBM 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.


"""
Mocked versions of real quantum backends.
"""

# BackendV2 Backends
from .almaden import FakeAlmadenV2
from .armonk import FakeArmonkV2
from .athens import FakeAthensV2
from .belem import FakeBelemV2
from .boeblingen import FakeBoeblingenV2
from .bogota import FakeBogotaV2
from .brooklyn import FakeBrooklynV2
from .burlington import FakeBurlingtonV2
from .cairo import FakeCairoV2
from .cambridge import FakeCambridgeV2
from .casablanca import FakeCasablancaV2
from .essex import FakeEssexV2
from .guadalupe import FakeGuadalupeV2
from .hanoi import FakeHanoiV2
from .jakarta import FakeJakartaV2
from .johannesburg import FakeJohannesburgV2
from .kolkata import FakeKolkataV2
from .lagos import FakeLagosV2
from .lima import FakeLimaV2
from .london import FakeLondonV2
from .manhattan import FakeManhattanV2
from .manila import FakeManilaV2
from .melbourne import FakeMelbourneV2
from .montreal import FakeMontrealV2
from .mumbai import FakeMumbaiV2
from .nairobi import FakeNairobiV2
from .ourense import FakeOurenseV2
from .paris import FakeParisV2
from .poughkeepsie import FakePoughkeepsieV2
from .quito import FakeQuitoV2
from .rochester import FakeRochesterV2
from .rome import FakeRomeV2
from .santiago import FakeSantiagoV2
from .singapore import FakeSingaporeV2
from .sydney import FakeSydneyV2
from .toronto import FakeTorontoV2
from .valencia import FakeValenciaV2
from .vigo import FakeVigoV2
from .washington import FakeWashingtonV2
from .yorktown import FakeYorktownV2

# BackendV1 Backends
from .almaden import FakeAlmaden
from .armonk import FakeArmonk
from .athens import FakeAthens
from .belem import FakeBelem
from .boeblingen import FakeBoeblingen
from .bogota import FakeBogota
from .brooklyn import FakeBrooklyn
from .burlington import FakeBurlington
from .cairo import FakeCairo
from .cambridge import FakeCambridge
from .cambridge import FakeCambridgeAlternativeBasis
from .casablanca import FakeCasablanca
from .essex import FakeEssex
from .guadalupe import FakeGuadalupe
from .hanoi import FakeHanoi
from .jakarta import FakeJakarta
from .johannesburg import FakeJohannesburg
from .kolkata import FakeKolkata
from .lagos import FakeLagos
from .lima import FakeLima
from .london import FakeLondon
from .manhattan import FakeManhattan
from .manila import FakeManila
from .melbourne import FakeMelbourne
from .montreal import FakeMontreal
from .mumbai import FakeMumbai
from .nairobi import FakeNairobi
from .ourense import FakeOurense
from .paris import FakeParis
from .poughkeepsie import FakePoughkeepsie
from .quito import FakeQuito
from .rochester import FakeRochester
from .rome import FakeRome
from .rueschlikon import FakeRueschlikon
from .santiago import FakeSantiago
from .singapore import FakeSingapore
from .sydney import FakeSydney
from .tenerife import FakeTenerife
from .tokyo import FakeTokyo
from .toronto import FakeToronto
from .valencia import FakeValencia
from .vigo import FakeVigo
from .washington import FakeWashington
from .yorktown import FakeYorktown
Loading