Release Notes

0.10.5

New Features

  • Add strict_mode support to VersionedAPISession. Strict mode is now the default, implying API requests will fail if type/version is expected and the response doesn’t include it.

  • Add version_strict_mode config option to DWaveAPIClient. It corresponds to underlying session’s (VersionedAPISession) strict_mode.

  • Add VersionedAPISession, a requests.Session subclass (more precisely, further specialized LoggingSession) that enforces conformance of API response version with supported version range(s).

  • Add accepts decorator for declaring accepted media type and response format version (range) on dwave.cloud.api.Resource methods.

  • Simplify dwave.cloud.api.resource.accepts interface (require only media_type and version), but retain flexibility (pass all keyword arguments to VersionedAPISession.set_accept).

  • Support strict_mode control of API response type validation via @accepts interface.

Upgrade Notes

  • Response type version is now always required (regardless of strict_mode) if type is expected and received, and version is expected.

  • Enforce D-Wave API response format version on all cloud.api resources.

Bug Fixes

  • Fix dwave.cloud.api.resources.accepts to allow for partial decoration of Resource methods. See #544.

0.10.4

New Features

  • Add Python 3.11 support

  • Add dimod 0.12.x support

  • Add numpy 1.24.x support

0.10.3

New Features

  • Add support for NumPy scalars used as problem parameter values.

0.10.2

New Features

  • Added estimate_qpu_access_time method to dwave.cloud.solver.StructuredSolver to estimate quantum processing unit (QPU) access time for a submission to the selected solver.

0.10.1

Bug Fixes

  • Previously it was possible for mutually exclusive config options, if all specified on the same level, and depending on the order used, to not be correctly combined with options from a lower level. See #524, now fixed.

0.10.0

New Features

  • Add poll_backoff_base configuration option to control the exponential base of the (problem status) polling schedule. Available as a config file option and dwave.cloud.Client keyword argument.

Upgrade Notes

  • Make polling schedule denser in the beginning (by lowering the exponential base from 2 to 1.3), thus enabling much faster answer download for SAPI response times under two minutes.

  • Remove Client.solvers() method in favor of Client.get_solvers(). It was previously deprecated in dwave-cloud-client==0.5.0.

  • Remove dwave.cloud.computation.Future.error property in favor of dwave.cloud.computation.future.exception() method. The property was previously deprecated in dwave-cloud-client==0.7.3.

  • Remove dwave.cloud.computation.Future.{eta_min,eta_max}. These properties were previously deprecated in dwave-cloud-client==0.8.5 when the underlying SAPI feature/field was removed.

  • Remove dwave.cloud.computation.Future.occurrences alias in favor of dwave.cloud.computation.Future.num_occurrences property. The alias was previously deprecated in dwave-cloud-client==0.8.0.

  • CLI: use of -c for --config-file has been deprecated since dwave-cloud-client==0.8.5 in favor of -f, and the option is now removed in 0.10.0. Use --config-file or -f instead.

  • Remove support for dimod 0.8.x. Upgrade dimod to 0.9.0+.

  • Upgrade your python to 3.7+. We no longer support python 3.6 and below.

Deprecation Notes

  • Alias keys (samples and occurrences) in dwave.cloud.computation.Future.result()-returned dictionary are deprecated since dwave-cloud-client==0.8.0 and will be removed in dwave-cloud-client==0.12.0.

  • Positional arguments to dwave.cloud.Client constructor are deprecated since dwave-cloud-client==0.10.0 and will be removed in dwave-cloud-client==0.12.0. Use keywords arguments instead.

0.9.5

Bug Fixes

  • Preemptively resolve sampling answer during dwave ping and dwave sample, as to capture and properly output/format eventual errors. See #517.

0.9.4

New Features

  • Add StructuredSolver.reformat_parameters() method. This method can be used to format solver parameters for SAPI. See #465.

  • Support dimod<0.13.0

Bug Fixes

  • Make sure Future.wait_id() fails deterministically in a case of problem submit error. Previously it would hang if SAPI didn’t return problem_id for whatever reason. See #469 and #511.

0.9.3

New Features

  • Add Python 3.10 support.

  • Add --json output option to dwave sample.

  • Add --sampling-params option to dwave sample. --num-reads has been kept, and it now overwrites value given in sampling params.

  • Add --label option to dwave ping and dwave sample, with a default value set. See #481.

  • Add --full option to dwave setup, propagated to dwave config create. Clarified dwave setup operation in CLI help.

  • Filter out API token-like strings from logs. Most notably, we make sure to redact Solver API tokens, but will filter out any prefixed hex token. See #391.

Bug Fixes

  • Improved error and output handling in dwave sample. See #300.

0.9.2

New Features

  • Added Metadata API client, Regions model and API resource.

  • Added multi-region support to dwave.cloud.Client.

    New config option for region selection is called region, and environment variable is called DWAVE_API_REGION.

    New config option for specifying Metadata API endpoint URL is exposed as metadata_api_endpoint and DWAVE_METADATA_API_ENDPOINT.

    List of available regions available with dwave.cloud.Client.get_regions.

  • Add context manager protocol support to dwave.cloud.api.client.DWaveAPIClient to ensure resources are easily cleaned up (session closed). Note that close() method is available for cases when context manager pattern is inconvenient.

    Similarly, we add close() method to resources in dwave.cloud.api.resource.*, in addition to the existing context manager protocol support.

  • Add --region and --endpoint options to the relevant dwave CLI subcommands: ping, solvers, sample, upload.

Upgrade Notes

  • To access solvers in a non-default region (na-west-1), you can use the region config option and DWAVE_API_REGION environment variable.

  • dwave.cloud.config.load_config used to return some minimal (but arbitrary) set of always-set options (set to None if undefined). Now it returns just the options set either in config file, environment, or kwargs.

Bug Fixes

  • Fix dwave.cloud.api.constants.ProblemType enumeration to include the CQM problem type.

0.9.1

New Features

  • Add Leap hybrid CQM solvers support.

Upgrade Notes

  • Sampling on structured solvers of problems with incompatible graph/structure now fails with ProblemStructureError.

Bug Fixes

  • Make StructuredSolver.check_problem faster (15-20%). See #487.

0.9.0

New Features

  • Default dwave config create configuration flow is now simplified to prompt only for essential parameters (at the moment that’s only token).

    Interactive configuration of an extended set of non-essential parameters (i.e. the previous default) is now available via a new flag: --full.

    See #304

Upgrade Notes

  • To configure non-essential parameters such as endpoint, client and solver, configuration create command now has to be called with the --full option:

    dwave config create --full
    

Bug Fixes

  • When a path to a nonexistent config file is provided to dwave config create, we’ll now happily create that file, instead of failing.

0.9.0.dev0

Prelude

We began using Reno as a changelog tool after the release of 0.8.7. Content added before that release is not included. See releases for previous release notes.

New Features

  • A low-level dwave.cloud.api.client added to abstract SAPI communication details (like authentication, response decoding, error handling, retries, etc).

  • All SAPI requests and responses modelled in dwave.cloud.api.models.*. These models are used for data validation and representation.

  • Added model-level interfaces to SAPI resources (in a REST sense), dwave.cloud.api.resources.Solvers and dwave.cloud.api.resources.Problems.

  • Added mock solver data generators.

  • New layer of exceptions added in dwave.cloud.api.exceptions. Base exception RequestError subclasses requests’s exception and includes raw .response object, along with .error_msg and .error_code returned by SAPI.

  • Begin using reno for changelog.

Upgrade Notes

  • SAPIError exception is now just an alias for dwave.cloud.api.exceptions.RequestError.

  • dwave.cloud.client module is now a namespace containing all client subclasses as submodules. You should update your imports accordingly:

    dwave.cloud.Client         -->  dwave.cloud.client.base.Client
    dwave.cloud.hybrid.Client  -->  dwave.cloud.client.hybrid.Client
    dwave.cloud.qpu.Client     -->  dwave.cloud.client.qpu.Client
    dwave.cloud.sw.Client      -->  dwave.cloud.client.sw.Client
    

    For backwards compatibility, old import paths still work, but are deprecated.

Deprecation Notes

  • Import paths dwave.cloud.{hybrid,qpu,sw}.Client are deprecated and should be replaced with dwave.cloud.client.{hybrid,qpu,sw}.Client.

Bug Fixes

  • Configured client session creation is sped up by caching user-agent construction (per client). Client session is now created ~200x faster, making it on par with requests.Session creation time (~50us).

  • Avoid character encoding / charset guessing for speed and stability.