Source code for qstone.connectors.connector
"""Connectors for different Quantum Stacks"""
import warnings
from enum import Enum
from typing import Optional
from qstone.connectors import connection
try:
from qstone.connectors.grpc.runner import GRPCConnecction
except ImportError:
warnings.warn("grpc failed to import", ImportWarning)
from qstone.connectors.backends.rigetti.runner import RigettiConnection
from qstone.connectors.http.runner import HttpConnection
from qstone.connectors.no_link.no_link import NoLinkConnection
[docs]
class ConnectorType(Enum):
"""Type of connection"""
GRPC = "GRPC"
NO_LINK = "NO_LINK"
HTTPS = "HTTPS"
RIGETTI = "RIGETTI"
[docs]
class Connector:
"""Class used to hold connection between HPC compute node and Quantum bridge"""
def __init__(
self,
conn_type: ConnectorType,
host: str,
server_port: int,
lockfile: Optional[str],
):
"""Initialise the connector object"""
self._protocol = conn_type
self._host = host
self._server_port = server_port
self._connection: connection.Connection
self._lockfile: Optional[str] = None if lockfile == "NONE" else lockfile
if self.protocol == ConnectorType.GRPC:
self._connection = GRPCConnecction()
elif self.protocol == ConnectorType.HTTPS:
self._connection = HttpConnection()
elif self.protocol == ConnectorType.NO_LINK:
self._connection = NoLinkConnection()
elif self.protocol == ConnectorType.RIGETTI:
self._connection = RigettiConnection()
@property
def protocol(self):
"""Returns the protocol information"""
return self._protocol
@property
def host(self):
"""Returns the host name"""
return self._host
@property
def server_port(self):
"""Returns the server_port"""
return self._server_port
@property
def connection(self):
"""Returns the server_port"""
return self._connection
@property
def address(self):
"""Returns the address of the Quantum bridge device"""
return f"{self.host}::{self.server_port}"
@property
def lockfile(self):
"""Returns the lockfile information"""
return self._lockfile
[docs]
def run(self, qasm: str, reps: int):
"""Runs the provided QASM circuit"""
return self.connection.run(
qasm, reps, self.host, self.server_port, self.lockfile
)