Skip to content

Release wave: QUBODrivers 0.6 / QUBOTools 0.13 compat + benchmark conformanceย #38

Description

@bernalde

Part of the benchmarking-readiness epic: JuliaQUBO/QUBO.jl#40 (WS2 โ€” coordinated driver release wave). Blocked by the QUBODrivers metadata/seed standardization and conformance-suite issues on that epic (WS1) โ€” adopt both in a single PR here so the package is only touched once.

Problem

QUBO.jl v0.6 requires QUBODrivers = "0.6" / QUBOTools = "0.13". DWave.jl's current compat is:

QUBODrivers = "0.3.3, 0.4, 0.5"
QUBOTools   = "0.10, 0.11, 0.12"

The intersection with QUBO.jl v0.6 (and with the QUBOLib-served QOBLib benchmarking stack) is empty โ€” this package cannot be installed alongside the rest of the ecosystem. A scheduled ecosystem-resolution canary is being added to QUBO.jl that will stay red until this lands.

Package-specific work

  • Largest driver in the wave: Neal, Greedy, Tabu, Random samplers plus the cloud QPU path. Conformance CI should run the offline samplers; the cloud path is exercised only when DWAVE_API_TOKEN is present (current test-skip pattern is fine โ€” keep it).
  • Expose RandomSeed for Neal (the underlying simulated-annealing sampler accepts a seed); cloud QPU declares supports_seed = false.
  • D-Wave timing is rich (qpu_access_time, qpu_sampling_time, etc.): map QPU access time to metadata["time"]["effective"] and preserve the full timing dict under a namespaced breakdown key โ€” TTS analysis on QPU results depends on this being faithful, not approximated by Python-side wall time (current behavior).
  • PythonCall = "0.9.26" pin: verify it does not conflict with PySA.jl (0.9.23) and CIMOptimizer (0.9) in one environment โ€” if it does, relax to "0.9" with a CondaPkg-level pin instead.

Common work (all drivers in the wave)

  1. Bump compat: QUBODrivers = "0.6" (drop pre-0.5 entries unless there's a reason to keep them) and QUBOTools = "0.13" where it is a direct dependency. Fix any breakage from the upgrade.
  2. Adopt the QUBODrivers metadata schema: metadata["time"]["effective"] (backend solve time) always set; seeds recorded under metadata["seeds"]; backend name/version under metadata["backend"].
  3. Declare capability traits honestly (supports_seed, honors_final_reads, enforces_time_limit).
  4. Adopt the standard RandomSeed attribute where the backend supports seeding (alias any existing seed attribute to it; keep the old one as deprecated).
  5. CI runs the upgraded QUBODrivers.test(Optimizer) with benchmark_conformance = true.
  6. Tag a release and verify it registers (General registry compat must match).

Checkpoints (anti-drift)

  • Before starting: wait for the reference driver run posted on the epic (first wave driver, suggested MQLib.jl) and use its conformance output as the template โ€” deviations should be deliberate, not accidental.
  • Mid-PR: post the conformance-suite output here (all sets, including which are trait-skipped and why).
  • Before merge: resolve a temp environment with QUBO@0.6 + this branch via Pkg.develop โ€” the actual coexistence check, not just compat-file edits.

Acceptance criteria

  • Registered release with QUBODrivers 0.6 / QUBOTools 0.13 compat, conformance suite green in CI, package resolves alongside QUBO.jl v0.6.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions