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)
- 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.
- Adopt the QUBODrivers metadata schema:
metadata["time"]["effective"] (backend solve time) always set; seeds recorded under metadata["seeds"]; backend name/version under metadata["backend"].
- Declare capability traits honestly (
supports_seed, honors_final_reads, enforces_time_limit).
- Adopt the standard
RandomSeed attribute where the backend supports seeding (alias any existing seed attribute to it; keep the old one as deprecated).
- CI runs the upgraded
QUBODrivers.test(Optimizer) with benchmark_conformance = true.
- Tag a release and verify it registers (General registry compat must match).
Checkpoints (anti-drift)
Acceptance criteria
- Registered release with QUBODrivers 0.6 / QUBOTools 0.13 compat, conformance suite green in CI, package resolves alongside QUBO.jl v0.6.
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: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
DWAVE_API_TOKENis present (current test-skip pattern is fine โ keep it).RandomSeedfor Neal (the underlying simulated-annealing sampler accepts a seed); cloud QPU declaressupports_seed = false.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)
QUBODrivers = "0.6"(drop pre-0.5 entries unless there's a reason to keep them) andQUBOTools = "0.13"where it is a direct dependency. Fix any breakage from the upgrade.metadata["time"]["effective"](backend solve time) always set; seeds recorded undermetadata["seeds"]; backend name/version undermetadata["backend"].supports_seed,honors_final_reads,enforces_time_limit).RandomSeedattribute where the backend supports seeding (alias any existing seed attribute to it; keep the old one as deprecated).QUBODrivers.test(Optimizer)withbenchmark_conformance = true.Checkpoints (anti-drift)
QUBO@0.6+ this branch viaPkg.developโ the actual coexistence check, not just compat-file edits.Acceptance criteria