Skip to content

Query Interface

Chora provides a fluent query interface for finding and analysing places.

Fluent Query Builder

from chora.query import PlatialQuery

# Find familiar, positive places
places = (PlatialQuery(graph)
    .for_agent(alice.id)
    .with_familiarity(min_value=0.5)
    .with_positive_affect()
    .execute())

for place in places:
    print(f"{place.extent.name}: {place.character}")

Convenience Functions

from chora.query import (
    find_familiar_places,
    find_positive_places,
    find_routine_places,
    query_encounters
)

# Familiar places
familiar = find_familiar_places(graph, alice.id, min_familiarity=0.5)

# Positive places
positive = find_positive_places(graph, alice.id)

# Routine places (high encounter count)
routines = find_routine_places(graph, alice.id, min_encounters=10)

# Query encounters with filters
for enc in query_encounters(graph, agent_id=alice.id, extent_id=park.id):
    print(f"{enc.start_time}: {enc.activity}")

Pattern Matching

from chora.query import find_practices_like, match_pattern

# Find practices similar to a template
similar = find_practices_like(graph, template_practice, min_similarity=0.7)

# Match named patterns
morning_routines = match_pattern(graph, "morning_routine")
avoidances = match_pattern(graph, "avoidance")
explorations = match_pattern(graph, "exploration")

Similarity Measures

from chora.query import place_similarity, practice_similarity

# Compare two places
sim = place_similarity(place_a, place_b)
print(f"Similarity: {sim:.2f}")

# Compare practices
sim = practice_similarity(routine_a, routine_b)

Graph Traversal

from chora.query import traverse_from, find_connected, find_path
from chora.core import EdgeType

# BFS from a node
for node, depth in traverse_from(graph, start_id, max_depth=3):
    print(f"Depth {depth}: {node}")

# Find connected nodes
connected = find_connected(graph, encounter_id, 
                          edge_types=[EdgeType.HAS_CONTEXT])

# Find path between nodes
path = find_path(graph, start_id, end_id)
if path:
    print(" → ".join(str(n) for n in path))

Temporal Queries

from chora.query import snapshot_query, temporal_range_query
from datetime import datetime, timedelta

# Snapshot at a point in time
past = datetime.now() - timedelta(days=30)
snapshot = snapshot_query(graph, at=past)
print(f"Nodes at {past}: {snapshot.node_count}")

# Nodes active during a range
start = datetime(2024, 1, 1)
end = datetime(2024, 6, 30)
for node in temporal_range_query(graph, start, end):
    print(node)