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, mode: str, qpu_host: str, qpu_port: int, compiler_host: str, compiler_port: int, target: str, lockfile: Optional[str], ): """Initialise the connector object""" self._protocol = conn_type self._mode = mode self._qpu_host = qpu_host self._qpu_port = qpu_port self._compiler_host = compiler_host self._compiler_port = compiler_port self._target = target 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 mode(self): """Returns the mode in use (EMULATION, REAL, RANDOM)""" return self._mode @property def qpu_host(self): """Returns the qpu host name""" return self._qpu_host @property def qpu_port(self): """Returns the qpu port""" return self._qpu_port @property def compiler_host(self): """Returns the compiler host name""" return self._compiler_host @property def compiler_port(self): """Returns the compiler_port""" return self._compiler_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.qpu_host}::{self.qpu_port}" @property def target(self): """Returns the target name""" return self._target @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.mode, self.qpu_host, self.qpu_port, self.compiler_host, self.compiler_port, self.target, self.lockfile, )