Add BackendV2 mocked backend#7643
Conversation
Co-Authored-By: Matthew Treinish <mtreinish@kortar.org>
Need to take closer look at _convert_to_target method
Based on the latest version on Qiskit/qiskit-ibm-runtime#102 Co-Authored-By: Rathish Cholarajan <rathishc24@gmail.com>
…ulseDefaults classes for convert_to_target
mtreinish
left a comment
There was a problem hiding this comment.
This LGTM, just one last minute thing I just remembered we're going to need to fix around the FakeMumbaiV2 name. Once that's done I think this is ready.
mtreinish
left a comment
There was a problem hiding this comment.
One other thing I just remembered while reviewing #7839 should we need to expose the new FakeProviderV2 class from https://github.com/Qiskit/qiskit-terra/blob/main/qiskit/providers/fake_provider/__init__.py
| return self.fake_provider | ||
|
|
||
|
|
||
| class FakeProviderV2(ProviderV1): |
There was a problem hiding this comment.
I'm wondering if we want a different name for this class because what if we ever finish #5629 and want to have an implementation of the ProviderV2 interface. Not really a blocker but given my other comment now is the time to change it,
There was a problem hiding this comment.
Good catch. I was thinking the same when I was writing the code :) How about FakeProviderForBackendV2?
mtreinish
left a comment
There was a problem hiding this comment.
LGTM, thanks for doing this and sticking with it and all the updates.
…Junye/qiskit-terra into add-v2-mocked-backend-7391
|
Thank you for your advice along the way. I am very happy that the PR is read to merge! |
|
oh, nice! |
* 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>
* 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>
* 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#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>
* 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 2438935. * Revert " @rathishcholarajan Use BackendConfiguration, BackendProperties and PulseDefaults classes for convert_to_target" This reverts commit eec4a49. * 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 2127b34. * 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#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>
Summary
Still work in progress. Create mocked backends based on new BackendV2. These mocked backends are useful for testing purposes.
Fixes #7391
To do
Follow up issues
FakeBackendV2after Aer adds support for BackendV2 #7831FakeBackendV2.runmethod after Aer adds support for BackendV2 UpdateFakeBackendV2.runmethod after Aer adds support for BackendV2 #7829drive_channel,measure_channel,acquire_channel,control_channel): Add pulse channels toFakeBackendV2#7832fake_backend_v2.pyfile and classes to more meaningful names because they used for testing specific research devices that have non-homogeneous gate sets.Details and comments
Added
FakeBackendV2class that buildsBackendV2object and itsTargetusing IBM Quantum System snapshots json files (configuration, properties and pulse defaults)FakeBackendV2removes the distinction of QasmBackend and PulseBackend. It also get rids of the usage ofQasmBackendConfiguration,PulseBackendConfiguration,BackendProperties(except inrunmethod) objects andFakeQasmBackendandFakePulseBackendclasses that were introduced due to historical reasons.target,dtm,meas_map,qubit_properties,max_circuitsattributes forBackendV2class. Pulse channels (drive_channel,measure_channel,acquire_channel,control_channel) are not implemented.runmethod. Added_get_noise_model_from_backend_v2method to generate NoiseModel for noisy simulation as a work-around until Are supports V2 backend. [Issue]backend_converter.pywritten by Matthew underqiskit.test.mock.utilsfor convertingTargetobject using configuration, properties and pulse defaults dictionary.FakeProviderV2to contain allFakeBackendV2for testing.test_circuit_on_fake_backend_v2intest.python.providers.test_fake_backends.pyfor testing fake v2 backends.Changed
ConfigurableFakeBackendinqiskit.test.mock.utils.__init__.pyto resolve circular import issue. Import statements across files whereConfigurableFakeBackendare used were also changed.