# Software Environment and Tools¶

## Working with the D-Wave System¶

Fig. 53 shows a simplified diagram of the computation
workflow on a D-Wave system. Each problem consists of a single input
together with parameters specifying, for example, the number of reads. A problem
is sent across a network to the SAPI server and joins a queue. Queued problems are
assigned to workers, which can run in parallel. A worker prepares the problem for
the QPU, sends the problem to the QPU queue, receives results, and bundles the
results with additional information about the problem (such as runtime information).
Postprocessing (PP) includes calculating final energies for the returned samples
and, optionally for D-Wave 2000Q and earlier systems, the sampling and optimization
postprocessing methods described in *Postprocessing Methods on D-Wave Systems*.

The total time for a problem to pass through the system is the service time. Note that service time includes wait time in two queues, which can vary according to the number of problems and workers active at any moment. The QPU handles problems one at a time; the time for one problem to move through the QPU is the QPU access time.

Note the following considerations and recommendations on system overhead and network latency:

- Timing anomalies (spikes) are present in any system.
- Submit jobs at time of least contention; for example, small jobs versus large jobs.

**Further Information**

- The
*Solver Computation Time*guide describes the computation process, in the context of system timing, on D-Wave quantum computers.

## Open-Source Software Tools¶

The D-Wave GitHub site is located here: Ocean Software and is documented here: Ocean Documentation.

D-Wave GitHub provides an open-source development environment for utilities that many users can find helpful in solving the types of problems relevant to the D-Wave system; for example,

- dimod provides a shared API for Binary Quadratic Program (BQP) samplers as well as helpful utilities for conversion, higher-order models, and more.
- dwavebinarycsp provides a library to construct a binary quadratic model from a constraint satisfaction problem with small constraints over binary variables.
- dwave_cloud_client is a minimal implementation of the REST interface used to communicate with D-Wave Solver API (SAPI) servers.
- dwave-hybrid is a general, minimal Python framework for building hybrid asynchronous decomposition samplers for quadratic unconstrained binary optimization (QUBO) problems.
- dwave-networkX provides an extension to NetworkX, a Python language package for exploration and analysis of networks and network algorithms.
- dwave-system includes DWaveSampler, a dimod sampler that accepts and passes system parameters such as system identification and authentication down the stack. It also includes several useful composites—layers of pre- and post-processing—that can be used with DWaveSampler to handle minor-embedding, optimize chain strength, etc.
- penaltymodel provides an approach to solve a constraint satisfaction problem (CSP) using an Ising model or a QUBO, is to map each individual constraint in the CSP to a ‘small’ Ising model or QUBO.
- minorminer provides tools for minor embedding.
- Samplers such as dwave_neal, a C++ simulated annealing sampler for general Ising model graphs, and dwave-tabu, an implementation of the MST2 multistart tabu search algorithm for quadratic unconstrained binary optimization (QUBO) problems with a dimod Python wrapper.

For the latest software in this environment, see the documentation on Ocean Documentation.

## Sampling Service¶

D-Wave simplifies the training of probabilistic models by providing access to high performance classical and quantum resources through the D-Wave Sampling Service—a set of Python libraries that make it easy to sample and perform the required Monte Carlo calculations. The service provides access to statistics from undirected graphical models based on samples from Boltzmann and quantum Boltzmann distributions.