Skip to content

Specialized Spaces

GraphSpace

GraphSpace(graph: dict[Any, list[tuple[Any, float]]])

Bases: Space

Space for problems defined on explicit graphs. Automatically provides successors and evaluate from the adjacency structure.

graph: dict mapping node -> list of (neighbor, edge_cost) tuples

Source code in pathos/spaces/graph.py
def __init__(self, graph: dict[Any, list[tuple[Any, float]]]) -> None:
    super().__init__()
    self._graph = graph
    self._pending_edge_cost: dict[Any, float] = {}
    self._setup_successors()
    self._setup_evaluate()

CSPSpace

CSPSpace(variables: list[Any])

Bases: Space

Space for Constraint Satisfaction Problems. Auto-provides @successors (partial-assignment expansion) and @goal. User provides @domain and @constraint decorators.

Also exposes _variables(), _domain(var), and _constraints(assignment) accessors so that AC3 and other capability-aware algorithms can use VARIABLES / DOMAINS / CONSTRAINTS capabilities directly.

Source code in pathos/spaces/csp.py
def __init__(self, variables: list[Any]) -> None:
    super().__init__()
    self._variables_list = variables
    self._domain_fn: Callable[..., Any] | None = None
    self._constraint_fn: Callable[..., Any] | None = None
    self._initial_value = {}  # empty assignment
    self._setup_goal()

TourSpace

TourSpace(nodes: list[Any], distances: dict[Any, Any] | None = None)

Bases: Space

Space for tour/routing problems (TSP and variants). Auto-provides @successors as 2-opt neighborhood. User provides @evaluate for tour cost.

Source code in pathos/spaces/tour.py
def __init__(self, nodes: list[Any], distances: dict[Any, Any] | None = None) -> None:
    super().__init__()
    self._nodes = nodes
    self._distances = distances
    # initial = random tour
    self._initial_factory = lambda: random.sample(nodes, len(nodes))
    self._setup_successors()

GameSpace

GameSpace()

Bases: Space

Space for adversarial games. Convenience wrapper — sets adversarial mode by default. User provides @successors, @terminal, @utility (and optionally @evaluate).

Source code in pathos/spaces/game.py
def __init__(self) -> None:
    super().__init__()
    self.adversarial(players=2, maximizing_player=0)