Skip to content

Commit dc286d2

Browse files
HuangJunyemtreinishrathishcholarajanmergify[bot]
authored
Add BackendV2 mocked backend (Qiskit/qiskit#7643)
* Add backend converter script from Matthew Co-Authored-By: Matthew Treinish <mtreinish@kortar.org> * FakeBackendV2, FakeQasmBeckendV2, FakeJakartaV2 in progress * Temporary fix for circular import * First try of implementing FakeJakartaV2 based on FakeQasmBackendV2/FakeBackendV2 * Implement FakeQasmBackend methods into FakeBackendV2 * Implement FakePulseBackend methods into FakeBackendV2 * Import missing PulseDefaults and adjust _get_conf_from_json method position * Adjust _get_config_from_dict method position * Fix target property Need to take closer look at _convert_to_target method * Fix _default_options method * Add FakeProviderV2 for V2 fake backends * Remove FakeQasmBackendV2 class * Copy run method from FakeBackendV1 * change configuration to self._configuration * Update backend_converter.py Based on the latest version on Qiskit/qiskit-ibm-runtime#102 Co-Authored-By: Rathish Cholarajan <rathishc24@gmail.com> * @rathishcholarajan Use BackendConfiguration, BackendProperties and PulseDefaults classes for convert_to_target * Add dtm * Add qubit properties * Add drive, measure and acquire channels. * Fix test_fake_backends * Fix ConfigurableFakeBackend circular import problem * Fix configurable_backend circular import problem * FakeAlmadenV2 * FakeArmonkV2 * FakeAthensV2 * FakeBelemV2 * FakeBoeblingenV2 * Add fake backends (except rueschlikon, tenerife and tokyo) * import fake v2 backends in __init__.py * add fake backends to mock.backend.__init__ and fake provider * Fix typos * Add defs files to manila, poughkeepsie, rome and santiago * Fix FakeCambridgeV2 * Add Hanoi and Kolkata to FakeProviderV2 * Handle no pulse backends in V2 * Fix getting qubit properties from properties bug * Fix _parse_inst_map for BackendV2 with no pulse support * Revert "Update backend_converter.py" This reverts commit 2438935d218bf3e1059bef185d77c426cc0978d3. * Revert " @rathishcholarajan Use BackendConfiguration, BackendProperties and PulseDefaults classes for convert_to_target" This reverts commit eec4a49f590399c15a90c4579844009cc9d0dc20. * Use dicts instead of conf, props, defs objects * remove channels * add type hints * Use dict.get instead of brackets * clean up backend_converter.py * construct target using defs files if it exist * Fix typo in target.acquire_alignment * Handle BackendV2 in transpiler._parse_inst_map * Comment out backends in fake provider and Aer run method for testing * undo typo fix for target.acquire_alignment * Revert "Comment out backends in fake provider and Aer run method for testing" This reverts commit 2127b345b63e9dea1bbdbd44b397f1d14089213b. * Copy NoiseModel.from_backend() method from Aer * modify NoiseModel.from_backend method to support V2 backend * Build V2 backend noise model from self._props_dict * black reformatting * Move V2 backend code to above V1 and Legacy * Clean up FakeBackendV2 for testing * Order FakeBackendV2 to match BackendV2 * Uncomment out fake backends from fake provider v1 and fake legacy provider * Remove unused imports * Remove FakeTokyoV2 import * Remove warnings for missing conf, props and defs files * Remove lazy loading of target * Remove lazy loading of qubit properties * Remove deprecation warning for standard_gates option in noise model * linting for fake_backend.py * linting for backend_converter.py * fix `Redefining name 'warnings' from outer scope` error * lint: rename qubit_props_dict_from_props_dict * Raise error for pulse simulation * remove warnings flag * Move V2 to in front of V1 * revert changes in transpiler._parse_inst_map The changes are now in a separate PR: Qiskit/qiskit#7765 * remove warnings flag * fix 'no-else-raise' error * Add docstring to FakeBackendV2 * rename `kwargs` to `options` in .run method following BackendV2 * Update qiskit/test/mock/fake_backend.py Co-authored-by: Matthew Treinish <mtreinish@kortar.org> * Update qiskit/test/mock/fake_backend.py Co-authored-by: Matthew Treinish <mtreinish@kortar.org> * Update qiskit/test/mock/fake_backend.py Co-authored-by: Matthew Treinish <mtreinish@kortar.org> * rearrange raising error for pulse job * Add a TODO comment for removing PulseDefaults * fix typo * black reformat * Add release note. * Fix no else raise error * Add blank new line in release note * black formatting * fix release note missing black tick * Rename FakeProviderV2 to FakeProviderForBackendV2 * Re-export FakeProviderForBackendV2 to qiskit.providers.fake_provider * black reformatting Co-authored-by: Matthew Treinish <mtreinish@kortar.org> Co-authored-by: Rathish Cholarajan <rathishc24@gmail.com> Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
1 parent e0bde61 commit dc286d2

File tree

1 file changed

+21
-2
lines changed

1 file changed

+21
-2
lines changed

test/integration/test_fake_backends.py

+21-2
Original file line numberDiff line numberDiff line change
@@ -24,10 +24,10 @@
2424
from qiskit.exceptions import QiskitError
2525
from qiskit.execute_function import execute
2626
from qiskit.test.base import QiskitTestCase
27-
from qiskit.test.mock import FakeProvider, FakeLegacyProvider
27+
from qiskit.test.mock import FakeProviderForBackendV2, FakeProvider, FakeLegacyProvider
2828
from qiskit.utils import optionals
2929

30-
30+
FAKE_PROVIDER_FOR_BACKEND_V2 = FakeProviderForBackendV2()
3131
FAKE_PROVIDER = FakeProvider()
3232
FAKE_LEGACY_PROVIDER = FakeLegacyProvider()
3333

@@ -46,6 +46,25 @@ def setUpClass(cls):
4646
cls.circuit.x(1)
4747
cls.circuit.measure_all()
4848

49+
@combine(
50+
backend=[be for be in FAKE_PROVIDER_FOR_BACKEND_V2.backends() if be.num_qubits > 1],
51+
optimization_level=[0, 1, 2, 3],
52+
)
53+
def test_circuit_on_fake_backend_v2(self, backend, optimization_level):
54+
if not optionals.HAS_AER and backend.num_qubits > 20:
55+
self.skipTest("Unable to run fake_backend %s without qiskit-aer" % backend.backend_name)
56+
job = execute(
57+
self.circuit,
58+
backend,
59+
optimization_level=optimization_level,
60+
seed_simulator=42,
61+
seed_transpiler=42,
62+
)
63+
result = job.result()
64+
counts = result.get_counts()
65+
max_count = max(counts.items(), key=operator.itemgetter(1))[0]
66+
self.assertEqual(max_count, "11")
67+
4968
@combine(
5069
backend=[be for be in FAKE_PROVIDER.backends() if be.configuration().num_qubits > 1],
5170
optimization_level=[0, 1, 2, 3],

0 commit comments

Comments
 (0)