| """CLI entry point for symbolic recursion coherence system.""" |
|
|
| from __future__ import annotations |
|
|
| import argparse |
| import asyncio |
| import json |
| import sys |
|
|
| from .coherence import benchmark_operators |
| from .data.public_feeds import PublicSensorFeed |
| from .integrations.atlas_bridge import AtlasBridge |
| from .integrations.primal_bridge import PrimalBridge |
| from .kernel import run_worked_examples |
|
|
|
|
| async def _run_live(args: argparse.Namespace) -> None: |
| feed = PublicSensorFeed(latitude=args.lat, longitude=args.lon) |
| if args.hours > 1: |
| series = await feed.fetch_series(hours=args.hours) |
| bridge = PrimalBridge(a=args.a, b=args.b) |
| result = bridge.from_sensor_snapshots(series) |
| atlas = AtlasBridge() |
| import numpy as np |
| from .kernel import SymbolicRecursionKernel |
|
|
| q = np.array([s.q_t for s in series]) |
| dx = SymbolicRecursionKernel(a=args.a).integrate_series(q, dt=3600.0) |
| fusion = atlas.fuse_with_symbolic_recursion(q, dx) |
| print(json.dumps({"series_points": len(series), "primal": result, "atlas": fusion}, indent=2)) |
| else: |
| snap = await feed.fetch_current() |
| print(json.dumps({ |
| "timestamp": snap.timestamp, |
| "Q_t": snap.q_t, |
| "DT": snap.dt_dev, |
| "DP": snap.dp_dev, |
| "DEM": snap.dem_dev, |
| "DW": snap.dw_dev, |
| "source": snap.source, |
| }, indent=2)) |
|
|
|
|
| def main(argv: list[str] | None = None) -> None: |
| parser = argparse.ArgumentParser(description="Symbolic Recursion Coherence Kernel") |
| sub = parser.add_subparsers(dest="command") |
|
|
| sub.add_parser("examples", help="Run worked forcing-function examples") |
| sub.add_parser("benchmark", help="Benchmark vs 20 classical operators") |
| live = sub.add_parser("live", help="Fetch public sensor data and compute") |
| live.add_argument("--lat", type=float, default=38.6270) |
| live.add_argument("--lon", type=float, default=-90.1994) |
| live.add_argument("--hours", type=int, default=24) |
| live.add_argument("--a", type=float, default=1.0) |
| live.add_argument("--b", type=float, default=0.091) |
|
|
| sub.add_parser("serve", help="Start API server on port 8080") |
|
|
| args = parser.parse_args(argv) |
| if args.command == "examples": |
| print(json.dumps(run_worked_examples(), indent=2)) |
| elif args.command == "benchmark": |
| rows = benchmark_operators() |
| print(json.dumps(rows, indent=2)) |
| elif args.command == "live": |
| asyncio.run(_run_live(args)) |
| elif args.command == "serve": |
| import uvicorn |
| uvicorn.run("symbolic_recursion.server:app", host="0.0.0.0", port=8080, reload=False) |
| else: |
| parser.print_help() |
| sys.exit(1) |