"""Backend Utils (:mod:`qurry.tools.backend.utils`)For `qiskit-aer` has been seperated from qiskit,So it needs to be imported differently by trying to import `qiskit-aer` first.And `qiskit-ibmq-provider` has been deprecated,but for some user may still need to use it,so it needs to be imported also differently by trying to import `qiskit-ibm-provider` first.So this file is used to unify the import point of AerProvider, `IBMProvider`/`IBMQProvider`.Avoiding the import error occurs on different parts of Qurrium."""fromtypingimportUnion,Callable,Optionalfromqiskit.providersimportBackendV2,BackendbackendName:Callable[[Union[BackendV2,Backend]],str]=lambdaback:(back.nameifisinstance(back,BackendV2)else"unknown_backend")"""Get the name of backend.Args: back (Union[BackendV2, Backend]): The backend instance.Returns: str: The name of backend."""
[docs]defbackend_name_getter(back:Union[BackendV2,Backend,str])->str:"""Get the name of backend. Args: back (Union[BackendV1, BackendV2, Backend, str]): The backend instance. Returns: str: The name of backend. """ifisinstance(back,str):returnbackifisinstance(back,BackendV2):returnback.nameifisinstance(back,Callable):returnback.name()# type: ignoreifisinstance(back,Backend):returnstr(back)return"unknown_backend"
[docs]defshorten_name(name:str,drop:Optional[list[str]]=None,exclude:Optional[list[str]]=None,)->str:"""Shorten the name of backend. Args: name (str): The name of backend. drop (list[str], optional): The strings to drop from the name. Defaults to []. exclude (list[str], optional): The strings to exclude from the name. Defaults to []. Returns: str: The shortened name of backend. """ifdropisNone:drop=[]ifexcludeisNone:exclude=[]ifnameinexclude:returnnamedrop=sorted(drop,key=len,reverse=True)for_sindrop:if_sinname:returnname.replace(_s,"")returnname