Highlights since v0.5.0
This is a cumulative release absorbing 0.5.1, 0.5.2, 0.5.3 (which
lived in git history but were never uploaded to PyPI).
Major additions
- Population Annealing backend (
qqa.population_annealing): parallel
chain sampling with importance resampling between inverse temperatures,
full free-energy / log-Z estimates, and an optional genealogy /
ancestry record.PAResultdataclass andqqa solve --backend paCLI
expose the new path. - MaxCut G-set family via
scripts/fetch_gset_data.pyand the
qqa4co-benchdataset. qqa.benchpublic Python API (run,plot,list_suites,
resolve_suite) mirroring theqqa benchCLI so notebooks can
dispatch a benchmark without subprocess boilerplate.- Polished benchmark report figure (
scripts/plot_benchmarks.py)
with stable per-family colours, KPI band, radar, per-subset bars,
feasibility bars and per-instance violin+strip plots, A/B/C ready. - Backend-aware Visualize page: PQQA-only tabs for PQQA runs
(family tree, PCA embedding, diversity, parallel coordinates) and
PA-only tabs for PA runs (ESS, free-energy trajectory, equilibration
diagnostic, Thermodynamics, Lineage vs energy, Ancestry Sankey). - Up-front PA capability probe in Solve: problems PA cannot sample
(categorical / structured binary, e.g. TSP, QAP, Coloring, NQueens)
now show a clear warning banner instead of failing mid-run.
Quality-of-life
- Uniform polish contract across QQA / SA / PA: every backend now
acceptspolish=True/Falseand exposes apolished_sol, routed
through the singleqqa.polish.apply_polish_if_improveshelper. _validate_chain_problemnow rejects structuredBinaryRelaxation
(e.g. TSP) with an actionable error that steers users to
qqa.anneal.- Hugging Face dataset renamed to
Yuma-Ichikawa/qqa4co-bench
(from the legacydiscs-co-benchid).scripts/setup_*.shand all
docs updated.
Internal / refactor
qqa.polish.apply_polish_if_improvesis the single entry point for
the greedy 1-flip QUBO polish — removes five copies of the same
if polish and Q_mat is not None: …block across annealing / SA /
PA / PI-GNN trainers.tests/conftest.pyexposes shared fixtures (APP,PAGE_DIR,
make_problem_config,set_slider);test_gui_apptest.pyis 60
lines lighter.app/_common.retheme_plotly+as_numpyreplace per-page clones.SpinRelaxation.perturb_now inherits fromBinaryRelaxation—
both share the same[0, 1]latent cube.qqa.benchcollapsed two near-identicalsys.path / importlib
call sites into one_load_scripts_module(name).
Maintenance
- Renamed
LICENCE.txt→LICENSEso GitHub's licensee and PyPI
license classifier auto-detect the license. License terms unchanged
(BSD-3-Clause-Clear; theNO EXPRESS OR IMPLIED LICENSES TO ANY PARTY'S PATENT RIGHTSclause distinguishes it from plain
BSD-3-Clause). - Fixed Hugging Face account handle typo
Yuma-Ichikawsa→
Yuma-Ichikawain README, docs, data/*, and setup scripts
(17 occurrences across 11 files).
Removed
qqa.sa._qubo_glauber_sweepdeprecated alias dropped — it
forwarded to_qubo_seq_glauber_sweepand the buggy parallel-update
semantics it warned about have been gone since0.4.0.
Install
pip install qqa==0.6.0
pip install "qqa[gui]==0.6.0"Upgrade notes
- Python 3.10+ (unchanged).
- No public API breakage: all user-facing entry points kept their
signatures; only the private_qubo_glauber_sweepalias was removed. - If you pin
qqa>=0.5.1,<0.6, there is nothing on PyPI in that range;
bump directly toqqa>=0.6.0.
Detailed changelog
See CHANGELOG.md
for the per-version breakdown of 0.5.1 / 0.5.2 / 0.5.3 / 0.6.0.