Skip to main content

A platial modelling library for representing human experience of place

Project description

Chora Logo

The Platial Modelling Operating System

License: MIT Python 3.10+ Status: Alpha Docs CI

"Place is not a location."

Chora is the first Python library designed to model the human experience of place. It moves beyond standard GIS (geometry + coordinates) to simulate how places emerge from memory, habit, and social interaction.

Get StartedGuidesAPI Reference


✨ Why Chora?

Standard tools ask: "What is at Lat/Lon 51.5, -0.1?" Chora asks: "Why does this park feel like 'Home' to Alice, but 'Danger' to Bob?"

🧠 Cognitive 🕰 Temporal 🕸 Relational
Models Familiarity & Memory decay over time. Places emerge and
dissolve dynamically.
A "Place" is a graph of
Encounters, not a polygon.

🛠 Features

  • Experiential Physics: Built-in decay functions (linear, exponential) simulate how memories fade without reinforcement.
  • Emergent Places: "Place" is not stored; it is computed on-the-fly from the history of interaction.
  • Practice Detection: Algorithms to detect Routines, Habits, and Rituals from GPS traces.
  • H3 Spatial Indexing: Hexagonal grids for multi-resolution place analysis.
  • Vibe Search: Vector embeddings for semantic place similarity.
  • LLM Integration: Generate place narratives with OpenAI/Anthropic/Ollama.
  • Real-time Streaming: Process live GPS traces with dwell detection.
  • Graph Native: Built on Property Graphs, exportable to Neo4j and D3.js.

⚡ Quick Start

Installation

pip install chora-geo

The "Hello Place" API

from chora.core import PlatialGraph, Agent, SpatialExtent, Encounter, PlatialEdge
from chora.derive import update_familiarity

# 1. Create the world
graph = PlatialGraph("My World")
alice = Agent.individual("Alice")
park = SpatialExtent.from_point(-0.1, 51.5, name="Hyde Park")

# 2. Add to the graph
graph.add_node(alice)
graph.add_node(park)

# 3. Alice visits the park (An Encounter)
visit = Encounter(agent_id=alice.id, extent_id=park.id)
graph.add_node(visit)
graph.add_edge(PlatialEdge.participates_in(alice.id, visit.id))

# 4. Derive Familiarity
fam = update_familiarity(graph, visit)
print(f"Alice's familiarity with Park: {fam.value:.2f}")
# -> "Alice's familiarity with Park: 0.15"

🔍 Vibe Search

Find places by semantic description:

from chora.search import vibe_search

results = vibe_search(graph, "quiet peaceful park for reading")
# Returns: [(park, 0.87), (garden, 0.72), ...]

📚 Documentation

Guide Description
GPS to Places Process traces into meaningful places
Affective Mapping Map emotions to locations
Detecting Routines Find habits & patterns
Visualization D3.js graphs & reports
H3 Indexing Hexagonal spatial analysis

🔮 Roadmap

Version Status Features
v0.5 Core, Tests, CI/CD, Docs
v0.9 CLI, Notebooks, Visualization
v1.0 H3, Embeddings, LLM, Streaming
v2.0 🚧 Social Physics, Digital Twins

🤝 Contributing

We welcome contributions from Geographers, Developers, and Philosophers. See CONTRIBUTING.md to join the project.


Built with ❤️ for the Platial Turn.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

chora_geo-0.1.0.tar.gz (308.2 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

chora_geo-0.1.0-py3-none-any.whl (98.9 kB view details)

Uploaded Python 3

File details

Details for the file chora_geo-0.1.0.tar.gz.

File metadata

  • Download URL: chora_geo-0.1.0.tar.gz
  • Upload date:
  • Size: 308.2 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for chora_geo-0.1.0.tar.gz
Algorithm Hash digest
SHA256 d874320b3d06c51a922ad96c5f7b891ab7662b8a21ef7c9f7d51ec554abdc52e
MD5 cfd6aaaad7eae74a12d035425f6078d3
BLAKE2b-256 e1133c2bb12330f79058fb86d7f06f3d9b9366c08617a36439d2244de0ce4955

See more details on using hashes here.

Provenance

The following attestation bundles were made for chora_geo-0.1.0.tar.gz:

Publisher: release.yml on jwilliamsresearch/chora

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file chora_geo-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: chora_geo-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 98.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for chora_geo-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 27348d4156bec9cf58c27e4f1c3f111da1efbb476d21a6c2e0b8a673d046e679
MD5 0dcbe96e293090a1b6cac821d798591d
BLAKE2b-256 59028c7d10725e3b351d995c86dd34d3b7bcfeac324b164aac6baba827e95d8b

See more details on using hashes here.

Provenance

The following attestation bundles were made for chora_geo-0.1.0-py3-none-any.whl:

Publisher: release.yml on jwilliamsresearch/chora

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page