Solvers¶
patiencepilot.solvers ¶
Solver contracts and implementations.
Advice
dataclass
¶
Solver advice containing zero or more ranked move alternatives.
Source code in src/patiencepilot/solvers/base.py
55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 | |
alternatives
property
¶
alternatives: tuple[RankedMove, ...]
Return recommendations after the best move.
__post_init__ ¶
__post_init__() -> None
Sort and validate advice metadata.
Source code in src/patiencepilot/solvers/base.py
67 68 69 70 71 72 73 74 75 76 77 78 | |
from_move
classmethod
¶
from_move(
move: Move,
*,
solver_name: str | None = None,
limit: SearchLimit | None = None,
score: float | None = None,
confidence: float | None = None,
reason: str | None = None,
) -> Advice
Return advice with a single recommended move.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
move
|
Move
|
Recommended move. |
required |
solver_name
|
str | None
|
Optional solver identifier. |
None
|
limit
|
SearchLimit | None
|
Optional search limits used for the recommendation. |
None
|
score
|
float | None
|
Optional solver-specific move score. |
None
|
confidence
|
float | None
|
Optional confidence from 0 to 1. |
None
|
reason
|
str | None
|
Optional human-readable reason. |
None
|
Source code in src/patiencepilot/solvers/base.py
80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 | |
AdviceProvider ¶
Bases: Protocol
Protocol for components that produce advice from player-known state.
Source code in src/patiencepilot/solvers/base.py
128 129 130 131 132 133 | |
suggest ¶
suggest(
view: PlayerView, *, limit: SearchLimit | None = None
) -> Advice
Return move advice using only the supplied player-known view.
Source code in src/patiencepilot/solvers/base.py
131 132 133 | |
RankedMove
dataclass
¶
One ranked solver move recommendation.
Source code in src/patiencepilot/solvers/base.py
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | |
__post_init__ ¶
__post_init__() -> None
Validate ranked-move metadata.
Source code in src/patiencepilot/solvers/base.py
45 46 47 48 49 50 51 52 | |
SearchLimit
dataclass
¶
Optional limits for bounded solver work.
Source code in src/patiencepilot/solvers/base.py
13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | |
__post_init__ ¶
__post_init__() -> None
Validate search-limit values.
Source code in src/patiencepilot/solvers/base.py
21 22 23 24 25 26 27 28 29 30 31 | |
Solver ¶
Bases: AdviceProvider, Protocol
Protocol for pluggable Solitaire solvers.
Source code in src/patiencepilot/solvers/base.py
136 137 138 139 | |
DummySolver
dataclass
¶
Deterministic solver that recommends the first visible legal move.
Source code in src/patiencepilot/solvers/dummy.py
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | |
suggest ¶
suggest(
view: PlayerView, *, limit: SearchLimit | None = None
) -> Advice
Return the first legal move available in view.
The solver derives legal moves only from player-visible information: foundations, waste, visible tableau cards, stock count, and redeal metadata. It does not reconstruct or inspect hidden card identities.
Source code in src/patiencepilot/solvers/dummy.py
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | |
SolverDefinition
dataclass
¶
Registered solver metadata and factory.
Source code in src/patiencepilot/solvers/registry.py
21 22 23 24 25 26 27 28 29 30 31 32 | |
create ¶
create() -> AdviceProvider
Return a new advice provider instance.
Source code in src/patiencepilot/solvers/registry.py
30 31 32 | |
SolverFactory ¶
Bases: Protocol
Callable that creates an advice provider.
Source code in src/patiencepilot/solvers/registry.py
13 14 15 16 17 18 | |
__call__ ¶
__call__() -> AdviceProvider
Return an advice provider instance.
Source code in src/patiencepilot/solvers/registry.py
16 17 18 | |
SolverRegistry
dataclass
¶
Small immutable registry of supported solvers.
Source code in src/patiencepilot/solvers/registry.py
35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 | |
__post_init__ ¶
__post_init__() -> None
Validate registry keys.
Source code in src/patiencepilot/solvers/registry.py
41 42 43 44 45 46 47 48 49 50 | |
register ¶
register(definition: SolverDefinition) -> SolverRegistry
Return a new registry that also contains definition.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
definition
|
SolverDefinition
|
Solver definition to add. |
required |
Source code in src/patiencepilot/solvers/registry.py
57 58 59 60 61 62 63 | |
definition_for ¶
definition_for(name: str) -> SolverDefinition
Return the registered definition for name or alias.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name
|
str
|
Solver name or alias. |
required |
Raises:
| Type | Description |
|---|---|
UnsupportedSolverError
|
If no solver is registered for |
Source code in src/patiencepilot/solvers/registry.py
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 | |
create ¶
create(name: str) -> AdviceProvider
Return a new advice provider by solver name.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name
|
str
|
Solver name or alias. |
required |
Source code in src/patiencepilot/solvers/registry.py
84 85 86 87 88 89 90 | |
visible_klondike_moves ¶
visible_klondike_moves(
view: PlayerView,
) -> tuple[Move, ...]
Return Klondike moves legal from player-visible state.
Source code in src/patiencepilot/solvers/dummy.py
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 | |
resolve_solver ¶
resolve_solver(
name: str = "dummy",
*,
registry: SolverRegistry | None = None,
) -> AdviceProvider
Return an advice provider for a registered solver name.
Parameters:
| Name | Type | Description | Default |
|---|---|---|---|
name
|
str
|
Solver name or alias. Defaults to |
'dummy'
|
registry
|
SolverRegistry | None
|
Registry to use. Defaults to the package registry. |
None
|
Source code in src/patiencepilot/solvers/registry.py
93 94 95 96 97 98 99 100 | |
solver_names ¶
solver_names(
*, registry: SolverRegistry | None = None
) -> tuple[str, ...]
Return canonical names of registered solvers.
Source code in src/patiencepilot/solvers/registry.py
103 104 105 | |