gammonview 2.0.1__tar.gz → 2.0.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {gammonview-2.0.1 → gammonview-2.0.2}/CHANGELOG.md +12 -1
- {gammonview-2.0.1 → gammonview-2.0.2}/PKG-INFO +1 -1
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat/ogxm2_writer.py +6 -1
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/package.json +1 -1
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/src/ogxm2_writer.js +5 -1
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/test-ogxm2-writer.js +13 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/.gitattributes +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/.github/workflows/ci.yml +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/.github/workflows/engine.yml +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/.github/workflows/publish.yml +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/.gitignore +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/.python-version +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/CLAUDE.md +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/CONTRIBUTING.md +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/LICENSE +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/README.md +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/THIRD-PARTY-NOTICES.md +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/assets/logo.png +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/docs/CLI.md +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/docs/METHODOLOGY.md +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/docs/OGXM_COMPUTED_FIELDS.md +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/docs/OGXM_JSON_SPEC_GAMMONVIEW.md +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/docs/OGXM_V2_PROFILE.md +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/docs/PRESET_ACCURACY.md +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/docs/upstream-bgsage.md +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/docs/v1/OGXM_FORMAT_SPEC_GAMMONVIEW.md +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/experiments/2026-09-16-checker-mid-tier.md +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/experiments/2026-09-17-checker-mid-tier-followup.md +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/experiments/2026-09-19-cross-machine-costs.md +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/experiments/2026-09-20-corpus-rerun.md +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/experiments/bench.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvanalysis/__init__.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvanalysis/batch.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvanalysis/checker_eval.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvanalysis/compare_gva.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvanalysis/game_eval.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvanalysis/loader.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvanalysis/luck.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvanalysis/match.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvanalysis/ogxm_reconstructor.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvanalysis/parentwatch.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvanalysis/position.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvanalysis/presets.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvanalysis/progress.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvanalysis/reconstruct_mat.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvanalysis/share.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat/__init__.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat/basefill.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat/bgf.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat/binary.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat/export.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat/game_reconstructor.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat/legality.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat/mat.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat/mat_parser.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat/merge.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat/met.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat/notation.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat/ogid.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat/ogxm2.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat/ogxm2_passthrough.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat/place.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat/reader.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat/share.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat/stats.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat/xg.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/.gitignore +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/LICENSE +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/README.md +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/THIRD-PARTY-NOTICES.md +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/cli/README.md +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/cli/bgf2gva.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/cli/mat2gva.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/cli/xg2gva.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/package-lock.json +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/src/basefill.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/src/bgf2gva.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/src/binary.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/src/constants.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/src/export.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/src/index.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/src/legality.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/src/mat2gva.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/src/merge.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/src/met.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/src/notation.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/src/og2gva.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/src/ogid.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/src/ogxm2.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/src/ogxm2_passthrough.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/src/place.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/src/reader.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/src/sha256.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/src/share.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/src/stats.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/src/xg2gva.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/mat/3WNK_g1Z-PLsh_HyvQ5j4a.json +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/mat/5nqfGw9bWG3deTaU.json +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/mat/B4_SrGcsKAQmoTyHlgJCbM.json +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/mat/C07OQCKyw4Pe-CnjFiAMYO.json +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/mat/MYdvw1qGuyaRUH__.json +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/mat/Sz-2PgKnvb6aFls69-qFXg.json +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/mat/UL-CV6F9jMM-E1Pu.json +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/mat/XCu3RJ0UvDg_Tldl.json +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/mat/baR-U643iUDpvzTC.json +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/mat/eXBNG5wZHS5Alu3P.json +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/mat/hQ8sVn2LbTdF4wRm.json +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/mat/rK7pXm4TqLb9NzWd.json +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/mat/uwvEbd63UvdX7SDin5o_Iw.json +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/ogxm2/annos-docs.json +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/ogxm2/annos-edits-sha256.json +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/ogxm2/annos-sha256.json +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/ogxm2/annos.expected.json +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/ogxm2/annos.ogxm +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/ogxm2/bgf-writer-sha256.json +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/ogxm2/blocks-docs.json +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/ogxm2/blocks-sha256.json +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/ogxm2/blocks.expected.json +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/ogxm2/blocks.ogxm +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/ogxm2/cube-on-two.expected.json +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/ogxm2/cube-on-two.ogxm +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/ogxm2/fields-docs.json +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/ogxm2/fields-sha256.json +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/ogxm2/fields.expected.json +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/ogxm2/fields.ogxm +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/ogxm2/foreign.ogxm +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/ogxm2/gen.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/ogxm2/match.expected.json +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/ogxm2/match.ogxm +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/ogxm2/passthrough-sha256.json +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/ogxm2/resign.expected.json +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/ogxm2/resign.ogxm +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/ogxm2/set-up.expected.json +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/ogxm2/set-up.ogxm +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/ogxm2/two-blocks.expected.json +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/ogxm2/two-blocks.ogxm +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/ogxm2/v1-chunks.gvab +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/ogxm2/writer-sha256.json +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/test-alternative-move-steps.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/test-basefill.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/test-bgf-alternatives.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/test-bgf-embedded-cube.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/test-bgf-move-steps.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/test-chunk-passthrough.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/test-equity-loss.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/test-illegal-move.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/test-illegal-play-steps.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/test-legality.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/test-mat.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/test-merge.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/test-met.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/test-og.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/test-ogid.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/test-ogxm2-annos.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/test-ogxm2-blocks.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/test-ogxm2-fields.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/test-ogxm2-limits.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/test-ogxm2-passthrough.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/test-ogxm2.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/test-place.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/test-robustness.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/test-roundtrip.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/test-share.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/test-stats.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/test-xg-cube.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/test-xg-eval-levels.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/test-xg-move-steps.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/test-xg-zero-win-eval.js +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/pyproject.toml +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/README.md +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/bgf/3WNK_g1Z-PLsh_HyvQ5j4a.bgf +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/bgf/5nqfGw9bWG3deTaU.bgf +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/bgf/B4_SrGcsKAQmoTyHlgJCbM.bgf +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/bgf/C07OQCKyw4Pe-CnjFiAMYO.bgf +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/bgf/MYdvw1qGuyaRUH__.bgf +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/bgf/Sz-2PgKnvb6aFls69-qFXg.bgf +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/bgf/UL-CV6F9jMM-E1Pu.bgf +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/bgf/XCu3RJ0UvDg_Tldl.bgf +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/bgf/baR-U643iUDpvzTC.bgf +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/bgf/eXBNG5wZHS5Alu3P.bgf +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/bgf/uwvEbd63UvdX7SDin5o_Iw.bgf +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/gv/3WNK_g1Z-PLsh_HyvQ5j4a.gvab +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/gv/5nqfGw9bWG3deTaU.gvab +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/gv/B4_SrGcsKAQmoTyHlgJCbM.gva +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/gv/B4_SrGcsKAQmoTyHlgJCbM.gvab +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/gv/C07OQCKyw4Pe-CnjFiAMYO.gvab +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/gv/MYdvw1qGuyaRUH__.gvab +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/gv/Sz-2PgKnvb6aFls69-qFXg.gvab +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/gv/UL-CV6F9jMM-E1Pu.gvab +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/gv/XCu3RJ0UvDg_Tldl.gvab +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/gv/baR-U643iUDpvzTC.gvab +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/gv/eXBNG5wZHS5Alu3P.gvab +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/gv/uwvEbd63UvdX7SDin5o_Iw.gvab +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/mat/3WNK_g1Z-PLsh_HyvQ5j4a.mat +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/mat/5nqfGw9bWG3deTaU.mat +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/mat/B4_SrGcsKAQmoTyHlgJCbM.mat +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/mat/C07OQCKyw4Pe-CnjFiAMYO.mat +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/mat/MYdvw1qGuyaRUH__.mat +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/mat/Sz-2PgKnvb6aFls69-qFXg.mat +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/mat/UL-CV6F9jMM-E1Pu.mat +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/mat/XCu3RJ0UvDg_Tldl.mat +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/mat/baR-U643iUDpvzTC.mat +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/mat/eXBNG5wZHS5Alu3P.mat +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/mat/hQ8sVn2LbTdF4wRm.mat +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/mat/rK7pXm4TqLb9NzWd.mat +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/mat/uwvEbd63UvdX7SDin5o_Iw.mat +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/xg/3WNK_g1Z-PLsh_HyvQ5j4a.xg +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/xg/5nqfGw9bWG3deTaU.xg +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/xg/B4_SrGcsKAQmoTyHlgJCbM.xg +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/xg/C07OQCKyw4Pe-CnjFiAMYO.xg +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/xg/MYdvw1qGuyaRUH__.xg +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/xg/Sz-2PgKnvb6aFls69-qFXg.xg +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/xg/UL-CV6F9jMM-E1Pu.xg +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/xg/XCu3RJ0UvDg_Tldl.xg +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/xg/baR-U643iUDpvzTC.xg +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/xg/eXBNG5wZHS5Alu3P.xg +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/xg/hQ8sVn2LbTdF4wRm.xg +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/xg/rK7pXm4TqLb9NzWd.xg +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/samples/xg/uwvEbd63UvdX7SDin5o_Iw.xg +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/audit_corpus.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/fixtures.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/gen_js_v2_fixtures.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/gen_ogxm2_annos_fixtures.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/gen_ogxm2_blocks_fixtures.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/gen_ogxm2_fields_fixtures.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/gen_ogxm2_passthrough_fixtures.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/golden/3WNK_g1Z-PLsh_HyvQ5j4a.fast.gva +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/golden/3WNK_g1Z-PLsh_HyvQ5j4a.fast.gvab +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/golden/5nqfGw9bWG3deTaU.fast.gva +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/golden/5nqfGw9bWG3deTaU.fast.gvab +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/golden/B4_SrGcsKAQmoTyHlgJCbM.fast.gva +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/golden/B4_SrGcsKAQmoTyHlgJCbM.fast.gvab +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/golden/MYdvw1qGuyaRUH__.fast.gva +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/golden/MYdvw1qGuyaRUH__.fast.gvab +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/golden/PROVENANCE.json +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/golden/baR-U643iUDpvzTC.fast.gva +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/golden/baR-U643iUDpvzTC.fast.gvab +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/ogxm2_annos_cases.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/ogxm2_blocks_cases.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/ogxm2_fields_cases.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/ogxm2_oracle.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/passthrough_cases.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/regen_golden.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/run_all.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_alternative_move_steps.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_analysis_orientation.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_analyze_position.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_basefill.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_bgf_alternatives.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_bgf_cube_response.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_bgf_move_steps.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_chunk_passthrough.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_count_illegal.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_cube_tiers.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_docs_presets.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_equity_loss.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_gvab_writer.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_illegal_move.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_illegal_play_steps.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_legality.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_loader_formats.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_luck_fill.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_met.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_ogxm2.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_ogxm2_annos.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_ogxm2_blocks.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_ogxm2_blocks_analysis.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_ogxm2_fields.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_ogxm2_fields_analysis.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_ogxm2_limits.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_ogxm2_passthrough.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_ogxm2_reference.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_ogxm2_writer.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_ogxm_conformance.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_ogxm_export.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_ogxm_pipeline.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_ogxm_stats.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_parent_watch.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_position_id.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_read_gvab.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_reconstruct_mat.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_resign_actor.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_restated_play_analysis.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_screened_checker.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_share_link.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_xg_cube.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_xg_eval_levels.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_xg_move_steps.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/tests/test_xg_zero_win_eval.py +0 -0
- {gammonview-2.0.1 → gammonview-2.0.2}/uv.lock +0 -0
|
@@ -13,7 +13,18 @@ when the repository was opened; they are kept because they record why things
|
|
|
13
13
|
are the way they are — particularly the breaking changes and the measurements
|
|
14
14
|
behind several design decisions. Dates are the tag dates.
|
|
15
15
|
|
|
16
|
-
## 2.0.
|
|
16
|
+
## 2.0.2 — 2026-10-12
|
|
17
|
+
|
|
18
|
+
**A set-up start is written once** *(fix)*
|
|
19
|
+
|
|
20
|
+
2.0.1's fix for v1 set-up starts went too far. A game whose first ply sets up
|
|
21
|
+
the board *with* dice keeps that ply as a ply, and the writers then also took
|
|
22
|
+
the game's `initial_board` as a second start, so a rewritten file read back
|
|
23
|
+
with an extra set-up ply in front and every later ply one place out. Both
|
|
24
|
+
writers now take `initial_board` as the start only when the game has no
|
|
25
|
+
leading set-up ply of either kind, which is the v1 case 2.0.1 was for.
|
|
26
|
+
|
|
27
|
+
## 2.0.1 — 2026-10-10
|
|
17
28
|
|
|
18
29
|
**Plies are counted the way v2 counts them** *(fix)*
|
|
19
30
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.5
|
|
2
2
|
Name: gammonview
|
|
3
|
-
Version: 2.0.
|
|
3
|
+
Version: 2.0.2
|
|
4
4
|
Summary: Backgammon match analysis — the pure-Python OGXM/GVA codec (`gvformat`) plus bgsage-powered match and position analysis (`gvanalysis`).
|
|
5
5
|
Project-URL: Homepage, https://github.com/ngvlamis/gammonview-analysis
|
|
6
6
|
Project-URL: Repository, https://github.com/ngvlamis/gammonview-analysis
|
|
@@ -466,10 +466,15 @@ def _bare_initial_board(g: dict, opening_abs: list, start: int):
|
|
|
466
466
|
board in the GAME header), so a v1 file rewritten as v2 would otherwise
|
|
467
467
|
lose its start -- and its plies, replayed from the opening, would be
|
|
468
468
|
flagged illegal. A leading set-up ply, where there is one, wins: a v2 read
|
|
469
|
-
states the board both ways.
|
|
469
|
+
states the board both ways. So does one *with* dice, which `_game_start`
|
|
470
|
+
keeps as a ply: the document already states its start, and taking
|
|
471
|
+
``initial_board`` too would write that start twice."""
|
|
470
472
|
ib = g.get("initial_board")
|
|
471
473
|
if start or not isinstance(ib, list) or len(ib) != 26:
|
|
472
474
|
return None
|
|
475
|
+
plies = g.get("plies") or []
|
|
476
|
+
if plies and plies[0].get("action_id") == R.ACTION_SET_POSITION:
|
|
477
|
+
return None
|
|
473
478
|
board_abs = [int(v) for v in ib]
|
|
474
479
|
return None if board_abs == opening_abs else board_abs
|
|
475
480
|
|
|
@@ -592,10 +592,14 @@ function _gameStart(g, openingAbs) {
|
|
|
592
592
|
* board in the GAME header), so a v1 file rewritten as v2 would otherwise lose
|
|
593
593
|
* its start -- and its plies, replayed from the opening, would be flagged
|
|
594
594
|
* illegal. A leading set-up ply, where there is one, wins: a v2 read states
|
|
595
|
-
* the board both ways.
|
|
595
|
+
* the board both ways. So does one *with* dice, which `_gameStart` keeps as a
|
|
596
|
+
* ply: the document already states its start, and taking `initial_board` too
|
|
597
|
+
* would write that start twice. */
|
|
596
598
|
function _bareInitialBoard(g, openingAbs, start) {
|
|
597
599
|
const ib = g.initial_board;
|
|
598
600
|
if (start || !Array.isArray(ib) || ib.length !== 26) return null;
|
|
601
|
+
const plies = g.plies || [];
|
|
602
|
+
if (plies.length && plies[0].action_id === ACTION_SET_POSITION) return null;
|
|
599
603
|
const boardAbs = ib.map(_int);
|
|
600
604
|
return boardAbs.every((v, i) => v === openingAbs[i]) ? null : boardAbs;
|
|
601
605
|
}
|
|
@@ -110,5 +110,18 @@ for (const name of bgfs) {
|
|
|
110
110
|
"a bare initial_board (a v1 read's set-up start) is written as the game's start");
|
|
111
111
|
}
|
|
112
112
|
|
|
113
|
+
// ...but not when the game already opens on a set-up ply that carries dice.
|
|
114
|
+
// That ply is kept as a ply, so it states the start, and taking
|
|
115
|
+
// `initial_board` as a second start shifted every ply after it by one.
|
|
116
|
+
{
|
|
117
|
+
const setup = readGvab(toU8(readFileSync(join(here, 'fixtures', 'ogxm2', 'set-up.ogxm'))));
|
|
118
|
+
const rolled = structuredClone(setup);
|
|
119
|
+
Object.assign(rolled.games[1].plies[0], { d1: 3, d2: 1 });
|
|
120
|
+
const back = readGvab(write_gvab(rolled));
|
|
121
|
+
assert(back.games[1].plies.length === rolled.games[1].plies.length
|
|
122
|
+
&& back.games[1].plies[0].d1 === 3,
|
|
123
|
+
'a set-up ply with dice beside initial_board is written once, not twice');
|
|
124
|
+
}
|
|
125
|
+
|
|
113
126
|
console.log(`\n${passed} passed, ${failed} failed`);
|
|
114
127
|
process.exit(failed ? 1 : 0);
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/mat/3WNK_g1Z-PLsh_HyvQ5j4a.json
RENAMED
|
File without changes
|
|
File without changes
|
{gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/mat/B4_SrGcsKAQmoTyHlgJCbM.json
RENAMED
|
File without changes
|
{gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/mat/C07OQCKyw4Pe-CnjFiAMYO.json
RENAMED
|
File without changes
|
|
File without changes
|
{gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/mat/Sz-2PgKnvb6aFls69-qFXg.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/mat/uwvEbd63UvdX7SDin5o_Iw.json
RENAMED
|
File without changes
|
|
File without changes
|
{gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/ogxm2/annos-edits-sha256.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/ogxm2/bgf-writer-sha256.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/ogxm2/cube-on-two.expected.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/ogxm2/passthrough-sha256.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{gammonview-2.0.1 → gammonview-2.0.2}/gvformat-js/test/fixtures/ogxm2/two-blocks.expected.json
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|