Configuring Access to the Leap’s Service (Advanced)#
The dwave-cloud-client package is a minimal implementation of the REST interface used to communicate with D-Wave’s Solver API (SAPI) servers.
SAPI is an application layer built to provide resource discovery, permissions, and scheduling for quantum computers and quantum-classical hybrid solvers at D-Wave. The dwave-cloud-client package provides a minimal Python interface to that layer without compromising the quality of interactions and workflow.
The package’s Solver
class enables low-level
control of problem submission. It is used, for example, by the
dwave-system package’s
DWaveSampler
, which enables quick incorporation
of a D-Wave quantum computer as a sampler in your code.
It’s recommended you set up your Cloud Client configuration through the interactive CLI utility.
As described in the Configuring Access to the Leap Service (Basic) section, for your code to access remote D-Wave compute resources, you must configure communication through SAPI; for example, your code needs your API token for authentication. The Cloud Client provides multiple options for configuring the required information:
One or more locally saved configuration files
Direct setting of key values in functions
These options can be flexibly used together.
Configuration Files#
If a Cloud Client configuration file is not explicitly specified when
instantiating a client or solver, auto-detection searches for candidate files in
a number of standard directories, depending on your local system’s operating
system. You can see the standard locations with the
get_configfile_paths()
method.
For example, on a Unix system, depending on its flavor, these might include (in order):
/usr/share/dwave/dwave.conf
/usr/local/share/dwave/dwave.conf
~/.config/dwave/dwave.conf
./dwave.conf
On Windows 7+, configuration files are expected to be located under:
C:\\Users\\<username>\\AppData\\Local\\dwavesystem\\dwave\\dwave.conf
On Mac OS X, configuration files are expected to be located under:
~/Library/Application Support/dwave/dwave.conf
(For details on the D-Wave API for determining platform-independent paths to user data and configuration folders see the homebase package.)
You can check the directories searched by the
get_configfile_paths()
method from a console using the
interactive CLI utility; for example:
$ dwave config ls -m
/etc/xdg/xdg-ubuntu/dwave/dwave.conf
/usr/share/upstart/xdg/dwave/dwave.conf
/etc/xdg/dwave/dwave.conf
/home/jane/.config/dwave/dwave.conf
./dwave.conf
A single Cloud Client configuration file can contain multiple profiles, each defining a separate combination of communication parameters such as the URL to the remote resource, authentication token, solver, etc. Configuration files conform to a standard Windows INI-style format: profiles are defined by sections such as, [profile-a] and [profile-b]. Default values for undefined profile keys are taken from the [defaults] section.
For example, if the configuration file, ~/.config/dwave/dwave.conf, selected through auto-detection as the default configuration, contains the following profiles,
[defaults]
token = ABC-123456789123456789123456789
[default-solver]
client = qpu
solver = {"num_qubits__gt": 5000}
[hybrid]
client = hybrid
[europe]
region = eu-central-1
[secondary-project]
token = DEF-987654321987654321987654321
[test-advantage2]
solver = {"topology__type": "zephyr"}
you can instantiate clients for a D-Wave quantum computer and a quantum-classical hybrid solver with:
>>> from dwave.cloud import Client
>>> client_qpu = Client.from_config()
>>> client_hybrid = Client.from_config(profile='hybrid')
Environment Variables#
In addition to files, you can set configuration information through environment variables; for example:
DWAVE_CONFIG_FILE
may select the configuration file path.DWAVE_PROFILE
may select the name of a profile (section).DWAVE_API_TOKEN
may select the API token.
For details on supported environment variables and prioritizing between these
and values set explicitly or through a configuration file, see the
dwave.cloud.config
module.
Work Flow#
A typical workflow may include the following steps:
Instantiate a
Client
class to manage communication with remote solver resources, selecting and authenticating access to available solvers; for example, you can list all solvers available to a client with itsget_solvers()
method and select and return one with itsget_solver()
method.Preferred use is with a context manager—a
with Client.from_config(...) as
construct—to ensure proper closure of all resources. The following example snippet creates a client based on an auto-detected configuration file and instantiates a solver.>>> with Client.from_config() as client: ... solver = client.get_solver(qpu=True)
Alternatively, the following example snippet creates a client for software resources that it later explicitly closes.
>>> client = Client.from_config(client='hybrid') >>> # code that uses client >>> client.close()
Instantiate a selected
Solver
class, a resource for solving problems. Solvers are responsible for:Encoding submitted problems
Checking submitted parameters
Adding problems to a client’s submission queue
Solvers that provide sampling for solving Ising and QUBO problems, such as an Advantage
DWaveSampler
sampler, or constrained quadratic models, such as a quantum-classical hybridLeapHybridCQMSampler
solver, might be remote resources.Submit your problem, using your solver, and then process the returned
Future
class, instantiated by your solver to handle remotely executed problem solving.