FoundryProductsTechnologyCompanyInvestor relationsResource libraryNews
Contact us
Resource library
    Resource library home
    Developer resources
    Applications
    Lessons
    Research and publications
    Support
      Software packages
        eqc-direct software package
        qci-client software package
        uqrng-direct software package
        emucore-direct software package
        eqc-models software package
          Getting Started
          Basic Usage
          eqc_models
          Dependencies
      Spec sheets
      User guides

Couldn’t find what you are looking for? Reach out to technical support.

Contact support
Privacy PolicyCookie PolicyTerms of UseForward Looking StatementsAccessibility Statement
Terms and Conditions of SaleEnd User License Agreement

© 2018-2026 Quantum Computing Inc.

Download

Default

Source code for eqc_models.solvers.eqcdirect

  • # (C) Quantum Computing Inc., 2025.
  • import logging
  • from typing import Dict
  • try:
  • from eqc_direct.client import EqcClient
  • except ModuleNotFoundError:
  • # Only warn here to try to disrupt package behavior as least as possible.
  • logging.warning("eqc-direct package not available")
  • class EqcClient:
  • """This is a stub for unsupported EqcClient."""
  • def __init__(*_, **__) -> None:
  • """Raise exception when client cannot be created."""
  • raise ModuleNotFoundError(
  • "eqc-direct package not available, likely because Python version is 3.11+"
  • )
  • from eqc_models.base.base import EqcModel, ModelSolver
  • from eqc_models.base.results import SolutionResults
  • log = logging.getLogger(name=__name__)
  • [docs]
  • class Dirac3DirectSolver(ModelSolver):
  • ip_addr: str = "localhost"
  • port: str = "50051"
  • cert_file: str = None
  • [docs]
  • def solve(
  • self,
  • model,
  • sum_constraint,
  • relaxation_schedule=1,
  • num_samples=1,
  • mean_photon_number=None,
  • quantum_fluctuation_coefficient=None,
  • ):
  • polynomial = model.polynomial
  • coefficients = polynomial.coefficients
  • indices = polynomial.indices
  • num_variables = 0
  • for i in range(len(indices)):
  • if max(indices[i]) > num_variables:
  • num_variables = max(indices[i])
  • # add machine slacks
  • num_variables += model.machine_slacks
  • print("Num variables:", num_variables)
  • client = self.client
  • lock_id, startts, endts = client.wait_for_lock()
  • # assert lock["status_code"] == 0
  • # lock_id = lock["lock_id"]
  • response = None
  • try:
  • response = client.solve_sum_constrained(
  • coefficients,
  • indices,
  • num_variables,
  • num_samples=num_samples,
  • lock_id=lock_id,
  • relaxation_schedule=relaxation_schedule,
  • sum_constraint=sum_constraint,
  • mean_photon_number=mean_photon_number,
  • quantum_fluctuation_coefficient=quantum_fluctuation_coefficient,
  • )
  • finally:
  • client.release_lock(lock_id=lock_id)
  • return response
  • [docs]
  • def connect(self, ip_addr: str, port: str, cert_file: str = None):
  • self.ip_addr = ip_addr
  • self.port = port
  • self.cert_file = cert_file
  • client = self.client
  • return client.system_status()
  • @property
  • def client(self) -> EqcClient:
  • """Return a new client from eqc-direct based on class config."""
  • return EqcClient(self.ip_addr, self.port, cert_file=self.cert_file)
  • [docs]
  • def makeResults(self, model : EqcModel, response : Dict):
  • """ Builds the results object """
  • return SolutionResults.from_eqcdirect_response(model, response, self)
Next page

Content

  • Source code for eqc_models.solvers.eqcdirect