Appendix 01 - Backend Wrapper

In Qiskit, there are several simulator source like BasicAer from qiskit, Aer from qiskit-aer or GPU-based qiskit-aer. Also, there are fake backends from qiskit-ibm-runtime and deprecated qiskit.provider.fake_provider. To make it easier to use, we can create a wrapper for each simulator. This notebook will show how to create a wrapper for the simulators.

See also

The complete source code of this tutorial can be found in

./a01_backend_wrapper.ipynb


A01.01 - All the methods in qiskit to get a simulator backend

1. BasicAer or BasicProvider from qiskit <= 0.46.0:

  • Ref: https://docs.quantum.ibm.com/api/qiskit/0.19/providers_basicaer

try:
    from qiskit import BasicAer
    from qiskit.providers.basicaer import QasmSimulatorPy

    print("| BasicAer, which can call by '.get_backend':")
    for backend_wrapper in BasicAer.backends():
        print(
            "| - "
            + (str(backend_wrapper) + " ").ljust(38, ".")
            + " "
            + repr(backend_wrapper)
        )

    print("| QasmSimulatorPy, which is a direct call:")
    qasm_simulator = QasmSimulatorPy()
    print(
        "| - " + (str(qasm_simulator) + " ").ljust(38, ".") + " " + repr(qasm_simulator)
    )

    display(qasm_simulator)
except ImportError as e:
    print("| - Your qiskit version does not support BasicAer.")
| - Your qiskit version does not support BasicAer.
try:
    from qiskit.providers.basic_provider import BasicProvider, BasicSimulator

    basic_provider = BasicProvider()
    print("| BasicProvider, which can call by '.get_backend':")
    for backend_wrapper in basic_provider.backends():
        print("| - " + repr(backend_wrapper))

    print("| BasicSimulator, which is a direct call:")
    basic_simulator = BasicSimulator()
    print("| - " + repr(basic_simulator))

    display(basic_simulator)
except ImportError as e:
    print("| - Your qiskit version does not support BasicProvider.")
| BasicProvider, which can call by '.get_backend':
| - <qiskit.providers.basic_provider.basic_simulator.BasicSimulator object at 0x71f192be3410>
| BasicSimulator, which is a direct call:
| - <qiskit.providers.basic_provider.basic_simulator.BasicSimulator object at 0x71f1cf7cf5f0>
<qiskit.providers.basic_provider.basic_simulator.BasicSimulator at 0x71f1cf7cf5f0>

2. Aer from qiskit-aer:

  • Ref: https://qiskit.github.io/qiskit-aer/getting_started.html

try:
    from qiskit_aer import AerProvider, AerSimulator

    print("| Via AerProvider, which can call by '.get_backend':")
    aer_provider = AerProvider()
    for backend_wrapper in aer_provider.backends():
        print(
            "| - "
            + (str(backend_wrapper) + " ").ljust(38, ".")
            + " "
            + repr(backend_wrapper)
        )

    print("| Via AerSimulator, which is a direct call:")
    aer_simulator = AerSimulator()
    print(
        "| - " + (str(aer_simulator) + " ").ljust(38, ".") + " " + repr(aer_simulator)
    )

    display(aer_simulator)
except ImportError as e:
    print(
        "| - You do not install qiskit_aer yet, install by using 'pip install qiskit-aer'."
    )
| Via AerProvider, which can call by '.get_backend':
| - AerSimulator('aer_simulator') ........ AerSimulator('aer_simulator')
| - AerSimulator('aer_simulator') ........ AerSimulator('aer_simulator')
| - AerSimulator('aer_simulator_statevector')  AerSimulator('aer_simulator_statevector')
| - AerSimulator('aer_simulator_statevector_gpu')  AerSimulator('aer_simulator_statevector_gpu')
| - AerSimulator('aer_simulator_density_matrix')  AerSimulator('aer_simulator_density_matrix')
| - AerSimulator('aer_simulator_density_matrix_gpu')  AerSimulator('aer_simulator_density_matrix_gpu')
| - AerSimulator('aer_simulator_stabilizer')  AerSimulator('aer_simulator_stabilizer')
| - AerSimulator('aer_simulator_matrix_product_state')  AerSimulator('aer_simulator_matrix_product_state')
| - AerSimulator('aer_simulator_extended_stabilizer')  AerSimulator('aer_simulator_extended_stabilizer')
| - AerSimulator('aer_simulator_unitary')  AerSimulator('aer_simulator_unitary')
| - AerSimulator('aer_simulator_unitary_gpu')  AerSimulator('aer_simulator_unitary_gpu')
| - AerSimulator('aer_simulator_superop')  AerSimulator('aer_simulator_superop')
| - AerSimulator('aer_simulator_tensor_network_gpu')  AerSimulator('aer_simulator_tensor_network_gpu')
| - QasmSimulator('qasm_simulator') ...... QasmSimulator('qasm_simulator')
| - StatevectorSimulator('statevector_simulator')  StatevectorSimulator('statevector_simulator')
| - UnitarySimulator('unitary_simulator')  UnitarySimulator('unitary_simulator')
| Via AerSimulator, which is a direct call:
| - AerSimulator('aer_simulator') ........ AerSimulator('aer_simulator')
AerSimulator('aer_simulator')

3. Access qiskit-aer-gpu:

  • Ref: https://qiskit.github.io/qiskit-aer/getting_started.html

try:
    from qiskit_aer import AerSimulator

    aer_simulator_gpu = AerSimulator()

    print("| - Check the available devices:", aer_simulator_gpu.available_devices())

    print("| - Then set option as GPU")
    aer_simulator_gpu.set_options(device="GPU")

    print("| - And check again:")
    print(
        "| - "
        + (str(aer_simulator_gpu) + " ").ljust(38, ".")
        + " "
        + repr(aer_simulator_gpu)
    )

    display(aer_simulator_gpu)
except ImportError as e:
    print(
        "| - You do not install qiskit_aer yet, install by using 'pip install qiskit-aer'."
    )
| - Check the available devices: ('CPU', 'GPU')
| - Then set option as GPU
| - And check again:
| - AerSimulator('aer_simulator') ........ AerSimulator('aer_simulator')
AerSimulator('aer_simulator')

A01.02 - FackBackend

1. From qiskit <= 0.46.0:

try:
    from qiskit.providers.fake_provider import (
        FakeProvider as FakeProviderDep,
        FakeProviderForBackendV2 as FakeProviderForBackendV2Dep,
    )

    fake_provider_v1_old = FakeProviderDep()
    fake_provider_v2_old = FakeProviderForBackendV2Dep()
    print("| - Fake Backend from 'qiskit'")
    print("| - BackendV1")
    print([b.name() for b in fake_provider_v1_old.backends()])
    print("| - BackendV2")
    print([b.name for b in fake_provider_v2_old.backends()])
except ImportError as e:
    print("| - Your qiskit version does not support fake_provider.")
| - Your qiskit version does not support fake_provider.

2. From qiskit-ibm-runtime:

try:
    from qiskit_ibm_runtime.fake_provider import (
        FakeProviderForBackendV2 as FakeProviderForBackendV2Indep,
    )

    fake_provider_v2_new = FakeProviderForBackendV2Indep()
    print("| - BackendV2")
    print([b.name for b in fake_provider_v2_new.backends()])
except ImportError as e:
    print("| - Your qiskit version does not support fake_provider.")
except FileNotFoundError as e:
    print(e)
    print("| - The version of 'qiskit-ibm-runtime' may be 0.17.0")
    print(
        "| - Fake Backend is not available in this version, consider to use other version."
    )
    print(
        "| - For more detail, see: https://github.com/Qiskit/qiskit-ibm-runtime/issues/1318"
    )

try:
    from qiskit_ibm_runtime.fake_provider import (
        FakeProvider as FakeProviderIndep,
    )

    fake_provider_v1_new = FakeProviderIndep()
    print("| - Fake Backend from 'qiskit-ibm-runtime'")
    print("| - BackendV1")
    print([b.name() for b in fake_provider_v1_new.backends()])
except ImportError as e:
    print("| - Since 0.33.0, FakeProvider for BackendV! has been deprecated.")
    print("| - Or your qiskit version does not support fake_provider.")
except FileNotFoundError as e:
    print(e)
    print("| - The version of 'qiskit-ibm-runtime' may be 0.17.0")
    print(
        "| - Fake Backend is not available in this version, consider to use other version."
    )
    print(
        "| - For more detail, see: https://github.com/Qiskit/qiskit-ibm-runtime/issues/1318"
    )
| - BackendV2
['fake_algiers', 'fake_almaden', 'fake_armonk', 'fake_athens', 'fake_auckland', 'fake_belem', 'fake_boeblingen', 'fake_bogota', 'fake_brisbane', 'fake_brooklyn', 'fake_burlington', 'fake_cairo', 'fake_cambridge', 'fake_casablanca', 'fake_cusco', 'fake_essex', 'fake_fez', 'fake_fractional', 'fake_geneva', 'fake_guadalupe', 'fake_hanoi', 'fake_jakarta', 'fake_johannesburg', 'fake_kawasaki', 'fake_kolkata', 'fake_kyiv', 'fake_kyoto', 'fake_lagos', 'fake_lima', 'fake_london', 'fake_manhattan', 'fake_manila', 'fake_melbourne', 'fake_marrakesh', 'fake_montreal', 'fake_mumbai', 'fake_nairobi', 'fake_osaka', 'fake_oslo', 'fake_ourense', 'fake_paris', 'fake_peekskill', 'fake_perth', 'fake_prague', 'fake_poughkeepsie', 'fake_quebec', 'fake_quito', 'fake_rochester', 'fake_rome', 'fake_santiago', 'fake_sherbrooke', 'fake_singapore', 'fake_sydney', 'fake_torino', 'fake_toronto', 'fake_valencia', 'fake_vigo', 'fake_washington', 'fake_yorktown']
| - Since 0.33.0, FakeProvider for BackendV! has been deprecated.
| - Or your qiskit version does not support fake_provider.

A01.03 - Backend Wrapper

As previously mentioned, getting a simulator backend is complicated. So Qurry introduce a wrapper to make it easier to get a simulator backend.

from qurry import BackendWrapper

backend_wrapper = BackendWrapper()
backend_wrapper("sim")
<AerSimulator('aer_simulator')>
  • If your environment includes the GPU acceleration, qiskit-aer-gpu, it will be check the availability to access, if does, the GPU backend will also be available.

print("| Does we have GPU backend to access:", backend_wrapper.is_aer_gpu)
try:
    # If you have GPU, you can use this backend.
    display(backend_wrapper("aer_gpu"))
except ValueError as err:
    print("| - There is not GPU backend to access:", err)
| Does we have GPU backend to access: True
| - There is not GPU backend to access: 'aer_gpu' unknown backend or backend callsign.
print(backend_wrapper.statesheet())
backend_wrapper.available_backends
------------------------------------------------------------
 ### BackendWrapper Statesheet
------------------------------------------------------------
 #### Simulator
 - Aer GPU ........................... True
 - Simulator Provider by ............. qiskit_aer
   sim
   No Callsign Added
------------------------------------------------------------
 #### IBM
   No Backends Available. Real backends need to be loaded by 'BackendManager' instead of 'BackendWrapper'.
   No Callsign Added
------------------------------------------------------------
 #### Fake
   fake_algiers, fake_almaden, fake_armonk,
   fake_athens, fake_auckland, fake_belem,
   fake_boeblingen, fake_bogota, fake_brisbane,
   fake_brooklyn, fake_burlington, fake_cairo,
   fake_cambridge, fake_casablanca, fake_cusco,
   fake_essex, fake_fez, fake_fractional,
   fake_geneva, fake_guadalupe, fake_hanoi,
   fake_jakarta, fake_johannesburg, fake_kawasaki,
   fake_kolkata, fake_kyiv, fake_kyoto,
   fake_lagos, fake_lima, fake_london,
   fake_manhattan, fake_manila, fake_melbourne,
   fake_marrakesh, fake_montreal, fake_mumbai,
   fake_nairobi, fake_osaka, fake_oslo,
   fake_ourense, fake_paris, fake_peekskill,
   fake_perth, fake_prague, fake_poughkeepsie,
   fake_quebec, fake_quito, fake_rochester,
   fake_rome, fake_santiago, fake_sherbrooke,
   fake_singapore, fake_sydney, fake_torino,
   fake_toronto, fake_valencia, fake_vigo,
   fake_washington, fake_yorktown
 - Available Fake Backends Callsign
   - fake_algiers ...................... fake_algiers
   - fake_almaden ...................... fake_almaden
   - fake_armonk ....................... fake_armonk
   - fake_athens ....................... fake_athens
   - fake_auckland ..................... fake_auckland
   - fake_belem ........................ fake_belem
   - fake_boeblingen ................... fake_boeblingen
   - fake_bogota ....................... fake_bogota
   - fake_brisbane ..................... fake_brisbane
   - fake_brooklyn ..................... fake_brooklyn
   - fake_burlington ................... fake_burlington
   - fake_cairo ........................ fake_cairo
   - fake_cambridge .................... fake_cambridge
   - fake_casablanca ................... fake_casablanca
   - fake_cusco ........................ fake_cusco
   - fake_essex ........................ fake_essex
   - fake_fez .......................... fake_fez
   - fake_fractional ................... fake_fractional
   - fake_geneva ....................... fake_geneva
   - fake_guadalupe .................... fake_guadalupe
   - fake_hanoi ........................ fake_hanoi
   - fake_jakarta ...................... fake_jakarta
   - fake_johannesburg ................. fake_johannesburg
   - fake_kawasaki ..................... fake_kawasaki
   - fake_kolkata ...................... fake_kolkata
   - fake_kyiv ......................... fake_kyiv
   - fake_kyoto ........................ fake_kyoto
   - fake_lagos ........................ fake_lagos
   - fake_lima ......................... fake_lima
   - fake_london ....................... fake_london
   - fake_manhattan .................... fake_manhattan
   - fake_manila ....................... fake_manila
   - fake_melbourne .................... fake_melbourne
   - fake_marrakesh .................... fake_marrakesh
   - fake_montreal ..................... fake_montreal
   - fake_mumbai ....................... fake_mumbai
   - fake_nairobi ...................... fake_nairobi
   - fake_osaka ........................ fake_osaka
   - fake_oslo ......................... fake_oslo
   - fake_ourense ...................... fake_ourense
   - fake_paris ........................ fake_paris
   - fake_peekskill .................... fake_peekskill
   - fake_perth ........................ fake_perth
   - fake_prague ....................... fake_prague
   - fake_poughkeepsie ................. fake_poughkeepsie
   - fake_quebec ....................... fake_quebec
   - fake_quito ........................ fake_quito
   - fake_rochester .................... fake_rochester
   - fake_rome ......................... fake_rome
   - fake_santiago ..................... fake_santiago
   - fake_sherbrooke ................... fake_sherbrooke
   - fake_singapore .................... fake_singapore
   - fake_sydney ....................... fake_sydney
   - fake_torino ....................... fake_torino
   - fake_toronto ...................... fake_toronto
   - fake_valencia ..................... fake_valencia
   - fake_vigo ......................... fake_vigo
   - fake_washington ................... fake_washington
   - fake_yorktown ..................... fake_yorktown
   - fake_qasm ......................... fake_qasm_simulator
------------------------------------------------------------
 #### Extra
   No Backends Available.
   No Callsign Added
{'sim': {'sim': <AerSimulator('aer_simulator')>},
 'real': {},
 'fake': {'fake_algiers': <qiskit_ibm_runtime.fake_provider.backends.algiers.fake_algiers.FakeAlgiers at 0x71f192a3a600>,
  'fake_almaden': <qiskit_ibm_runtime.fake_provider.backends.almaden.fake_almaden.FakeAlmadenV2 at 0x71f192ae3e60>,
  'fake_armonk': <qiskit_ibm_runtime.fake_provider.backends.armonk.fake_armonk.FakeArmonkV2 at 0x71f0ede18530>,
  'fake_athens': <qiskit_ibm_runtime.fake_provider.backends.athens.fake_athens.FakeAthensV2 at 0x71f0ede1b440>,
  'fake_auckland': <qiskit_ibm_runtime.fake_provider.backends.auckland.fake_auckland.FakeAuckland at 0x71f0ede1be90>,
  'fake_belem': <qiskit_ibm_runtime.fake_provider.backends.belem.fake_belem.FakeBelemV2 at 0x71f0ede31b80>,
  'fake_boeblingen': <qiskit_ibm_runtime.fake_provider.backends.boeblingen.fake_boeblingen.FakeBoeblingenV2 at 0x71f0edf00a40>,
  'fake_bogota': <qiskit_ibm_runtime.fake_provider.backends.bogota.fake_bogota.FakeBogotaV2 at 0x71f0ede616d0>,
  'fake_brisbane': <qiskit_ibm_runtime.fake_provider.backends.brisbane.fake_brisbane.FakeBrisbane at 0x71f0ee0dbfe0>,
  'fake_brooklyn': <qiskit_ibm_runtime.fake_provider.backends.brooklyn.fake_brooklyn.FakeBrooklynV2 at 0x71f0ede89460>,
  'fake_burlington': <qiskit_ibm_runtime.fake_provider.backends.burlington.fake_burlington.FakeBurlingtonV2 at 0x71f0edd699d0>,
  'fake_cairo': <qiskit_ibm_runtime.fake_provider.backends.cairo.fake_cairo.FakeCairoV2 at 0x71f0eddbfc50>,
  'fake_cambridge': <qiskit_ibm_runtime.fake_provider.backends.cambridge.fake_cambridge.FakeCambridgeV2 at 0x71f0eddd41a0>,
  'fake_casablanca': <qiskit_ibm_runtime.fake_provider.backends.casablanca.fake_casablanca.FakeCasablancaV2 at 0x71f0eddea840>,
  'fake_cusco': <qiskit_ibm_runtime.fake_provider.backends.cusco.fake_cusco.FakeCusco at 0x71f0eddead50>,
  'fake_essex': <qiskit_ibm_runtime.fake_provider.backends.essex.fake_essex.FakeEssexV2 at 0x71f0edc09280>,
  'fake_fez': <qiskit_ibm_runtime.fake_provider.backends.fez.fake_fez.FakeFez at 0x71f0edcc7b90>,
  'fake_fractional': <qiskit_ibm_runtime.fake_provider.backends.fractional.fake_fractional.FakeFractionalBackend at 0x71f0edcd8140>,
  'fake_geneva': <qiskit_ibm_runtime.fake_provider.backends.geneva.fake_geneva.FakeGeneva at 0x71f0edb71520>,
  'fake_guadalupe': <qiskit_ibm_runtime.fake_provider.backends.guadalupe.fake_guadalupe.FakeGuadalupeV2 at 0x71f0edb73200>,
  'fake_hanoi': <qiskit_ibm_runtime.fake_provider.backends.hanoi.fake_hanoi.FakeHanoiV2 at 0x71f0edfacf20>,
  'fake_jakarta': <qiskit_ibm_runtime.fake_provider.backends.jakarta.fake_jakarta.FakeJakartaV2 at 0x71f0edbb3920>,
  'fake_johannesburg': <qiskit_ibm_runtime.fake_provider.backends.johannesburg.fake_johannesburg.FakeJohannesburgV2 at 0x71f0edfcc230>,
  'fake_kawasaki': <qiskit_ibm_runtime.fake_provider.backends.kawasaki.fake_kawasaki.FakeKawasaki at 0x71f0edf8b110>,
  'fake_kolkata': <qiskit_ibm_runtime.fake_provider.backends.kolkata.fake_kolkata.FakeKolkataV2 at 0x71f0eda148c0>,
  'fake_kyiv': <qiskit_ibm_runtime.fake_provider.backends.kyiv.fake_kyiv.FakeKyiv at 0x71f0edacf170>,
  'fake_kyoto': <qiskit_ibm_runtime.fake_provider.backends.kyoto.fake_kyoto.FakeKyoto at 0x71f0ed902cf0>,
  'fake_lagos': <qiskit_ibm_runtime.fake_provider.backends.lagos.fake_lagos.FakeLagosV2 at 0x71f0ed9d5640>,
  'fake_lima': <qiskit_ibm_runtime.fake_provider.backends.lima.fake_lima.FakeLimaV2 at 0x71f0edf8b0e0>,
  'fake_london': <qiskit_ibm_runtime.fake_provider.backends.london.fake_london.FakeLondonV2 at 0x71f0ed86d370>,
  'fake_manhattan': <qiskit_ibm_runtime.fake_provider.backends.manhattan.fake_manhattan.FakeManhattanV2 at 0x71f0ed885460>,
  'fake_manila': <qiskit_ibm_runtime.fake_provider.backends.manila.fake_manila.FakeManilaV2 at 0x71f0ed885970>,
  'fake_melbourne': <qiskit_ibm_runtime.fake_provider.backends.melbourne.fake_melbourne.FakeMelbourneV2 at 0x71f0ed8e3bc0>,
  'fake_marrakesh': <qiskit_ibm_runtime.fake_provider.backends.marrakesh.fake_marrakesh.FakeMarrakesh at 0x71f0ed6fd8e0>,
  'fake_montreal': <qiskit_ibm_runtime.fake_provider.backends.montreal.fake_montreal.FakeMontrealV2 at 0x71f0ed6fdee0>,
  'fake_mumbai': <qiskit_ibm_runtime.fake_provider.backends.mumbai.fake_mumbai.FakeMumbaiV2 at 0x71f0ed7a32c0>,
  'fake_nairobi': <qiskit_ibm_runtime.fake_provider.backends.nairobi.fake_nairobi.FakeNairobiV2 at 0x71f0ed7cade0>,
  'fake_osaka': <qiskit_ibm_runtime.fake_provider.backends.osaka.fake_osaka.FakeOsaka at 0x71f0ed5fe900>,
  'fake_oslo': <qiskit_ibm_runtime.fake_provider.backends.oslo.fake_oslo.FakeOslo at 0x71f0ed610e60>,
  'fake_ourense': <qiskit_ibm_runtime.fake_provider.backends.ourense.fake_ourense.FakeOurenseV2 at 0x71f0ed6b0b00>,
  'fake_paris': <qiskit_ibm_runtime.fake_provider.backends.paris.fake_paris.FakeParisV2 at 0x71f0ef19a660>,
  'fake_peekskill': <qiskit_ibm_runtime.fake_provider.backends.peekskill.fake_peekskill.FakePeekskill at 0x71f0ed6b30e0>,
  'fake_perth': <qiskit_ibm_runtime.fake_provider.backends.perth.fake_perth.FakePerth at 0x71f0ed6df1a0>,
  'fake_prague': <qiskit_ibm_runtime.fake_provider.backends.prague.fake_prague.FakePrague at 0x71f0eecfb0b0>,
  'fake_poughkeepsie': <qiskit_ibm_runtime.fake_provider.backends.poughkeepsie.fake_poughkeepsie.FakePoughkeepsieV2 at 0x71f0ed509790>,
  'fake_quebec': <qiskit_ibm_runtime.fake_provider.backends.quebec.fake_quebec.FakeQuebec at 0x71f0ed53bda0>,
  'fake_quito': <qiskit_ibm_runtime.fake_provider.backends.quito.fake_quito.FakeQuitoV2 at 0x71f0ee0483e0>,
  'fake_rochester': <qiskit_ibm_runtime.fake_provider.backends.rochester.fake_rochester.FakeRochesterV2 at 0x71f0ed40f980>,
  'fake_rome': <qiskit_ibm_runtime.fake_provider.backends.rome.fake_rome.FakeRomeV2 at 0x71f0ed4295e0>,
  'fake_santiago': <qiskit_ibm_runtime.fake_provider.backends.santiago.fake_santiago.FakeSantiagoV2 at 0x71f0ed429ac0>,
  'fake_sherbrooke': <qiskit_ibm_runtime.fake_provider.backends.sherbrooke.fake_sherbrooke.FakeSherbrooke at 0x71f0ed42b770>,
  'fake_singapore': <qiskit_ibm_runtime.fake_provider.backends.singapore.fake_singapore.FakeSingaporeV2 at 0x71f0ed441430>,
  'fake_sydney': <qiskit_ibm_runtime.fake_provider.backends.sydney.fake_sydney.FakeSydneyV2 at 0x71f0ed303d40>,
  'fake_torino': <qiskit_ibm_runtime.fake_provider.backends.torino.fake_torino.FakeTorino at 0x71f0ed316c60>,
  'fake_toronto': <qiskit_ibm_runtime.fake_provider.backends.toronto.fake_toronto.FakeTorontoV2 at 0x71f0ed33a780>,
  'fake_valencia': <qiskit_ibm_runtime.fake_provider.backends.valencia.fake_valencia.FakeValenciaV2 at 0x71f0ed3cb7a0>,
  'fake_vigo': <qiskit_ibm_runtime.fake_provider.backends.vigo.fake_vigo.FakeVigoV2 at 0x71f0ed3ef320>,
  'fake_washington': <qiskit_ibm_runtime.fake_provider.backends.washington.fake_washington.FakeWashingtonV2 at 0x71f0ed208ec0>,
  'fake_yorktown': <qiskit_ibm_runtime.fake_provider.backends.yorktown.fake_yorktown.FakeYorktownV2 at 0x71f0ed209460>},
 'extra': {}}
from qurry.process import AVAIBILITY_STATESHEET
from qurry.tools.qiskit_version import QISKIT_VERSION_STATESHEET

print(AVAIBILITY_STATESHEET)
print(QISKIT_VERSION_STATESHEET)
 | Qurrium version: 0.13.0
---------------------------------------------------------------------------
 ### Qurrium Post-Processing
   - Backend Availability ................... Python Cython Rust   JAX   
 - randomized_measure
   - entangled_entropy.entropy_core_2 ....... Yes    Depr.  Yes    No    
   - entangle_entropy.purity_cell_2 ......... Yes    Depr.  Yes    No    
   - entangled_entropy_v1.entropy_core ...... Yes    Depr.  Yes    No    
   - entangle_entropy_v1.purity_cell ........ Yes    Depr.  Yes    No    
   - wavefunction_overlap.echo_core_2 ....... Yes    Depr.  Yes    No    
   - wavefunction_overlap.echo_cell_2 ....... Yes    Depr.  Yes    No    
   - wavefunction_overlap_v1.echo_core ...... Yes    Depr.  Yes    No    
   - wavefunction_overlap_v1.echo_cell ...... Yes    Depr.  Yes    No    
 - hadamard_test
   - purity_echo_core ....................... Yes    No     Yes    No    
 - magnet_square
   - magnsq_core ............................ Yes    No     Yes    No    
 - string_operator
   - strop_core ............................. Yes    No     Yes    No    
 - classical_shadow
   - rho_m_core ............................. Yes    No     No     Yes   
 - utils
   - randomized ............................. Yes    Depr.  Yes    No    
   - counts_process ......................... Yes    No     Yes    No    
   - bit_slice .............................. Yes    No     Yes    No    
   - dummy .................................. Yes    No     Yes    No    
   - test ................................... Yes    No     Yes    No    
---------------------------------------------------------------------------
   + Yes ...... Working normally.
   + Error .... Exception occurred.
   + No ....... Not supported.
   + Depr. .... Deprecated.
---------------------------------------------------------------------------

 | Qurrium version: 0.13.0
--------------------------------------------
 ### Qiskit version
 - main
   - qiskit-aer .............. 0.17.0
   - qiskit-aer-gpu .......... 0.15.1
   - qiskit-aer-gpu-cu11 ..... 0.17.0
   - qiskit-ibm-runtime ...... 0.39.0
 - deprecated
 - into-community
--------------------------------------------
 + qiskit-aer-gpu and qiskit-aer-gpu-cu11 should have the same version as qiskit-aer.
--------------------------------------------