CHANGELOG.md
LICENSE
MANIFEST.in
README.md
pyproject.toml
setup.py
csrc/als.cpp
csrc/bindings.cpp
csrc/brute_force.cpp
csrc/canon.cpp
csrc/chains.cpp
csrc/colour.cpp
csrc/deadline.hpp
csrc/desc.cpp
csrc/direct_view.cpp
csrc/explain.cpp
csrc/forcing.cpp
csrc/listing_cache.cpp
csrc/loads.cpp
csrc/mental.cpp
csrc/model.cpp
csrc/model.hpp
csrc/move_util.hpp
csrc/nary.cpp
csrc/nary.hpp
csrc/nary_moves.cpp
csrc/notes_view.cpp
csrc/portable.hpp
csrc/pycompat.hpp
csrc/refute.cpp
csrc/set_logic.cpp
csrc/solver.cpp
csrc/solver.hpp
csrc/solver_util.hpp
csrc/sudokuwiki.cpp
csrc/uniqueness.cpp
csrc/variant_logic.cpp
docs/palette.json
docs/sudoku-grade.schema.json
docs/sudoku-puzzle.schema.json
docs/dev/code-style.md
docs/dev/release.md
docs/dev/writing-style.md
docs/examples/classic.json
docs/examples/jigsaw-6x6.json
docs/examples/killer-4x4.json
docs/examples/mini-thermo-kropki.json
docs/examples/generated/butterfly.json
docs/examples/generated/evens.json
docs/examples/generated/gentlest-xwing.json
docs/examples/generated/hardest-kropki.json
docs/examples/generated/killer-whispers.json
docs/examples/generated/kropki-8x8-capped.json
docs/examples/generated/long-lines.json
docs/examples/generated/long-whisper.json
docs/examples/generated/nine-variants.json
docs/examples/generated/samurai.json
docs/examples/generated/super-samurai.json
docs/examples/generated/tall-thermos.json
docs/examples/generated/tens.json
docs/examples/generated/tiled-6x6.json
docs/examples/generated/tiny-4x4-rot90.json
docs/examples/generated/twodoku.json
docs/examples/generated/x-only.json
docs/examples/generated/zero-clue-kropki.json
docs/examples/learning/killer-1-first-cages.json
docs/examples/learning/killer-2-more-cages.json
docs/examples/learning/killer-3-combinations.json
docs/examples/learning/killer-4-no-givens.json
docs/examples/learning/ladder-1-pointing.json
docs/examples/learning/ladder-2-naked-pair.json
docs/examples/learning/ladder-3-hidden-pair.json
docs/examples/learning/ladder-4-naked-triple.json
docs/examples/learning/ladder-5-x-wing.json
docs/examples/learning/ladder-6-swordfish.json
docs/examples/specs/README.md
docs/examples/specs/hardest_0clue_6x6_kropki.json
docs/examples/specs/killer_whispers_2givens.json
docs/examples/specs/nine_variants_9x9.json
docs/examples/specs/zero_clue_6x6_kropki.json
docs/examples/specs/reserved/displaced_jigsaw.json
docs/examples/specs/reserved/one_xwing_classic.json
docs/examples/specs/reserved/picture_mask_heart.json
docs/formats/generator-spec.md
docs/formats/grade-card.md
docs/formats/other-formats.md
docs/formats/puzzle-format.md
docs/grades/experiments.md
docs/grades/glossary.md
docs/grades/philosophy.md
docs/grades/techniques.md
docs/guides/development/add-rule-kind.md
docs/guides/development/add-technique.md
docs/guides/development/environment.md
docs/guides/development/parameters.md
docs/guides/generator/generate.md
docs/guides/grader/batch.md
docs/guides/grader/import.md
docs/guides/grader/publish-checks.md
docs/library/drawing-style.md
docs/library/engine-mapping.md
docs/library/python-api.md
docs/library/variant-naming.md
docs/start/first-puzzle.md
src/pencilmark/__init__.py
src/pencilmark/__main__.py
src/pencilmark/_data.py
src/pencilmark/api.py
src/pencilmark/band_path.py
src/pencilmark/card.py
src/pencilmark/card_score.py
src/pencilmark/cbackend.py
src/pencilmark/cpsat_verify.py
src/pencilmark/engine_records.py
src/pencilmark/export.py
src/pencilmark/grader_model.py
src/pencilmark/inputs.py
src/pencilmark/interop.py
src/pencilmark/metrics.py
src/pencilmark/model.py
src/pencilmark/publish_flags.py
src/pencilmark/puzzle_json.py
src/pencilmark/registry.py
src/pencilmark/scoring.py
src/pencilmark/se.py
src/pencilmark/solver.py
src/pencilmark/spec_format.py
src/pencilmark/usage.py
src/pencilmark/variants.py
src/pencilmark.egg-info/PKG-INFO
src/pencilmark.egg-info/SOURCES.txt
src/pencilmark.egg-info/dependency_links.txt
src/pencilmark.egg-info/entry_points.txt
src/pencilmark.egg-info/requires.txt
src/pencilmark.egg-info/top_level.txt
src/pencilmark/data/card_score.json
src/pencilmark/data/codes.csv
src/pencilmark/data/explain_links.json
src/pencilmark/data/layouts_sudoku_one.json
src/pencilmark/data/params.json
src/pencilmark/data/patterns.csv
src/pencilmark/data/techniques.csv
src/pencilmark/data/time_model.json
src/pencilmark/exchange/__init__.py
src/pencilmark/exchange/board.py
src/pencilmark/exchange/canonical.py
src/pencilmark/exchange/common.py
src/pencilmark/exchange/read.py
src/pencilmark/exchange/validate.py
src/pencilmark/exchange/write.py
src/pencilmark/explain/__init__.py
src/pencilmark/explain/base.py
src/pencilmark/explain/catalog.py
src/pencilmark/explain/chains.py
src/pencilmark/explain/combos.py
src/pencilmark/explain/dispatch.py
src/pencilmark/explain/grid.py
src/pencilmark/explain/notes.py
src/pencilmark/explain/records.py
src/pencilmark/explain/singles.py
src/pencilmark/explain/trial.py
src/pencilmark/gen/__init__.py
src/pencilmark/gen/api.py
src/pencilmark/gen/board.py
src/pencilmark/gen/checks.py
src/pencilmark/gen/elements.py
src/pencilmark/gen/search.py
src/pencilmark/rules/__init__.py
src/pencilmark/rules/cell.py
src/pencilmark/rules/edge.py
src/pencilmark/rules/line.py
src/pencilmark/sources/__init__.py
src/pencilmark/sources/_common.py
src/pencilmark/sources/_fpuz_translate.py
src/pencilmark/sources/_sp_translate.py
src/pencilmark/sources/fpuzzles.py
src/pencilmark/sources/lmd.py
src/pencilmark/sources/penpa.py
src/pencilmark/sources/sudokupad.py
tests/conftest.py
tests/smoke.py
tests/test_api.py
tests/test_benchmark_tool.py
tests/test_cell_matrix.py
tests/test_cli.py
tests/test_doc_cli.py
tests/test_doc_examples.py
tests/test_edge_matrix.py
tests/test_format.py
tests/test_fuzz.py
tests/test_generate.py
tests/test_input_matrix.py
tests/test_line_matrix.py
tests/test_listing_cache.py
tests/test_registry.py
tests/test_roundtrips.py
tests/test_rule_matrix.py
tests/test_sources.py
tests/fixtures/variants.json