Source code for qurry.tools.backend.import_simulator
"""Import Simulator (:mod:`qurry.tools.backend.import_simulator`)This module provides the default simulator for Qurrium.For the simulator, the following sources are considered:- qiskit_aer- qiskit.providers.aer- qiskit.providers.basicaer- qiskit.providers.basic_providerwhich are used in different qiskit, qiskit-aer version,and ordered by priority."""fromtypingimportLiteral,Type,Optional,Anyfromqiskit.providersimportBackendV2,Backendfrom..qiskit_versionimportQISKIT_VERSIONfrom.utilsimportbackend_name_getter# pylint: disable=ungrouped-importsImportPointType=Literal["qiskit_aer","qiskit.providers.aer","qiskit.providers.basicaer","qiskit.providers.basic_provider",]ImportPointOrder=["qiskit_aer","qiskit.providers.basic_provider","qiskit.providers.basicaer","qiskit.providers.aer",]SIMULATOR_SOURCES:dict[ImportPointType,Type[Backend]]={}SIM_BACKEND_SOURCES:dict[ImportPointType,Type[Backend]]={}SIM_PROVIDER_SOURCES:dict[ImportPointType,Type[Any]]={}SIM_VERSION_INFOS:dict[ImportPointType,Optional[str]]={}SIM_IMPORT_ERROR_INFOS:dict[ImportPointType,ImportError]={}try:fromqiskit_aerimportAerProvider,AerSimulator# type: ignorefromqiskit_aer.backends.aerbackendimportAerBackend# type: ignorefromqiskit_aer.versionimportget_version_infoasget_version_info_aer# type: ignoreSIM_VERSION_INFOS["qiskit_aer"]=get_version_info_aer()SIMULATOR_SOURCES["qiskit_aer"]=AerSimulatorSIM_BACKEND_SOURCES["qiskit_aer"]=AerBackendSIM_PROVIDER_SOURCES["qiskit_aer"]=AerProvider# type: ignore# wtf, AerProvider is not inherited from Provider for qiskit-aer 0.15.0exceptImportErroraserr:SIM_IMPORT_ERROR_INFOS["qiskit_aer"]=errtry:fromqiskit.providers.basic_providerimportBasicSimulator,BasicProvider# type: ignoreSIM_VERSION_INFOS["qiskit.providers.basic_provider"]=QISKIT_VERSION.get("qiskit")SIMULATOR_SOURCES["qiskit.providers.basic_provider"]=BasicSimulatorSIM_BACKEND_SOURCES["qiskit.providers.basic_provider"]=BackendV2SIM_PROVIDER_SOURCES["qiskit.providers.basic_provider"]=BasicProviderexceptImportErroraserr:SIM_IMPORT_ERROR_INFOS["qiskit.providers.basic_provider"]=errtry:fromqiskit.providers.aerimport(# type: ignoreAerProviderasAerProviderDep,# type: ignoreAerSimulatorasAerSimulatorDep,# type: ignore)fromqiskit.providers.aer.backends.aerbackendimport(# type: ignoreAerBackendasAerBackendDep,)# type: ignorefromqiskit.providers.aer.versionimportVERSION# type: ignoreSIM_VERSION_INFOS["qiskit.providers.aer"]=VERSIONSIMULATOR_SOURCES["qiskit.providers.aer"]=AerSimulatorDepSIM_BACKEND_SOURCES["qiskit.providers.aer"]=AerBackendDepSIM_PROVIDER_SOURCES["qiskit.providers.aer"]=AerProviderDepexceptImportErroraserr:SIM_IMPORT_ERROR_INFOS["qiskit.providers.aer"]=errtry:fromqiskit.providers.basicaer.basicaerproviderimport(# type: ignoreBasicAerProvider,QasmSimulatorPy,)SIM_VERSION_INFOS["qiskit.providers.basicaer"]=QISKIT_VERSION.get("qiskit")SIMULATOR_SOURCES["qiskit.providers.basicaer"]=QasmSimulatorPySIM_BACKEND_SOURCES["qiskit.providers.basicaer"]=BackendSIM_PROVIDER_SOURCES["qiskit.providers.basicaer"]=BasicAerProviderexceptImportErroraserr:SIM_IMPORT_ERROR_INFOS["qiskit.providers.basicaer"]=err
[docs]defget_default_sim_source()->ImportPointType:"""Get the default source for the simulator. Returns: ImportPointType: The default source for the simulator. Raises: ImportError: If no available simulator source is found. """forsourceinImportPointOrder:ifsourceinSIMULATOR_SOURCES:returnsourceraiseImportError("No available simulator source, please check the installation of qiskit.")