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". PySA.jl's current compat is:
QUBODrivers = "0.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
- Parameter naming is inconsistent with the rest of the ecosystem:
n_reads, n_sweeps, n_replicas vs the conventional num_reads etc. Keep the existing raw keys for compatibility but add the standard attribute aliases; document the mapping.
- PySA currently exposes no seed — the underlying pysa solver accepts one; plumb it through as the standard
RandomSeed attribute. Without it PySA cannot participate in reproducible sweeps.
- Temperature schedule attributes (
MinimumTemperature, MaximumTemperature) are exactly the kind of parameters the campaign will sweep — make sure they are settable via MOI.RawOptimizerAttribute string keys too (harness sets params generically from TOML).
PythonCall = "0.9.23" pin: align with DWave/CIMOptimizer (see DWave issue note).
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". PySA.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
n_reads,n_sweeps,n_replicasvs the conventionalnum_readsetc. Keep the existing raw keys for compatibility but add the standard attribute aliases; document the mapping.RandomSeedattribute. Without it PySA cannot participate in reproducible sweeps.MinimumTemperature,MaximumTemperature) are exactly the kind of parameters the campaign will sweep — make sure they are settable viaMOI.RawOptimizerAttributestring keys too (harness sets params generically from TOML).PythonCall = "0.9.23"pin: align with DWave/CIMOptimizer (see DWave issue note).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