mirror of
https://github.com/zvx-echo6/navi.git
synced 2026-08-26 17:31:37 +00:00
Replace MCP_Geometric in _pathfind_wilderness with a numba-jit anisotropic A* (new astar.py): signed-slope speed (climbing != descending; tobler peaks at -0.05), hard cliff, per-edge avg context multiplier, trail-takes-both via 256-entry lookup, per-edge barriers (strict/pragmatic/emergency), multi-goal A* (first popped wins) with admissible distance/base-speed heuristic. New compute_cost_multiplier_grid (slope-free context multiplier) + exponential inflation (sigma=1.8; inf->HARD=50*p95 for blur, inf re-imposed). numba>=0.59 added (numba 0.65.1). fix: wilderness leg is always foot effort; mode parameter reserved for future flexibility. _pathfind_wilderness keeps the mode param (threaded from _route_A/B/C) but hardcodes cost_mode=foot for the cost grid, trail friction, speed function, base speed, and max grade. Off-trail math for MTB/ATV/vehicle is not well-grounded and real-world wilderness traversal is foot regardless (push the bike, walk past where the vehicle stops). User mode still drives entry-point eligibility (query_radius highway filter) and Valhalla network costing. Matches the original pre-#17 design: wilderness ALWAYS uses foot. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
42 lines
1.7 KiB
TOML
42 lines
1.7 KiB
TOML
[build-system]
|
|
requires = ["setuptools>=68"]
|
|
build-backend = "setuptools.build_meta"
|
|
|
|
[project]
|
|
name = "navi-backend"
|
|
version = "0.1.0"
|
|
description = "Echo6 navi-backend monorepo — Navi API services extracted from recon (decoupling project)."
|
|
requires-python = ">=3.10"
|
|
# Single workspace, single .venv. pytest is included so `pip install -e .` is the
|
|
# only setup step needed before running the test suite.
|
|
dependencies = [
|
|
"Flask>=3.0",
|
|
"gunicorn>=21",
|
|
"requests>=2.31",
|
|
"PyYAML>=6",
|
|
"psycopg2-binary>=2.9",
|
|
"pytest>=8",
|
|
# navi-geo (extraction #6): geocode engine + reverse bundle.
|
|
"usaddress>=0.5", # address parsing / intent classification
|
|
"rapidfuzz>=3", # reranker fuzzy string scoring
|
|
"cachetools>=5", # reverse-bundle TTLCache
|
|
"shapely>=2", # timezone point-in-polygon
|
|
"numpy>=1.24", # planet-DEM tile decode
|
|
"Pillow>=10", # planet-DEM Terrarium WebP decode
|
|
"pmtiles>=3", # planet-DEM PMTiles reader
|
|
# navi-offroute (extraction #8): off-network router + readers.
|
|
"scikit-image>=0.22", # MCP_Geometric least-cost pathfinding (router.py)
|
|
"numba>=0.59", # navi-offroute anisotropic A* JIT pathfinder (astar.py)
|
|
"rasterio>=1.3", # barriers/wilderness/trails/friction raster readers
|
|
"psutil>=5.9", # MEMORY_LIMIT_GB enforcement in router.py
|
|
# scripts/overture_import.py: Overture Places ETL (S3 Parquet -> overture PG).
|
|
"duckdb>=1.5", # S3 Parquet read for the overture import script
|
|
]
|
|
|
|
[tool.setuptools.packages.find]
|
|
where = ["."]
|
|
include = ["shared*", "services*"]
|
|
namespaces = true
|
|
|
|
[tool.pytest.ini_options]
|
|
testpaths = ["services", "shared"]
|