Skip to content

Release wave: QUBODrivers 0.6 compat + typed attributes + benchmark conformance #18

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". CIMOptimizer.jl's current compat is:

QUBODrivers = "0.5"
(QUBOTools: via QUBODrivers)

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

  • All ~50 hyperparameters go through untyped RawOptimizerAttribute keys — fine for the long tail, but promote the campaign-relevant ones (num_runs, time limit, seed if the cim-optimizer backend supports one) to typed @setup attributes.
  • Timing comes from solver.result["time"] — verify what it measures (PyTorch solve loop vs including tensor setup) and map it to "effective" accordingly; document under the namespaced breakdown if setup is significant.
  • PyTorch dependency makes this the heaviest Python environment in the wave: confirm CondaPkg resolution alongside PySA/DWave in one environment, or document that it needs an isolated environment (the harness supports per-solver environments either way, but it must be known).

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