Spaces:
Running
Running
| """Tinkuy — flow-state synchronization operator (Kuramoto order parameter). | |
| Quechua *tinkuy* = "meeting / convergence". Used here STRICTLY as a label for a | |
| game-theoretic / dynamical synchronization manifold across organs. No mysticism. | |
| Math: each organ runs a control loop with an instantaneous phase theta_o(t). The | |
| empire's global synchrony is the Kuramoto (1975) order parameter | |
| r * e^{i psi} = (1/N) * sum_o e^{i theta_o} | |
| r in [0,1]: r->0 incoherent, r->1 fully phase-locked. When r > 0.85 the system is in | |
| TINKUY (a coherent flow window). During flow we suppress Reflexion ticks (cf. | |
| Csikszentmihalyi 1975 flow: minimize interruption during deep coherence) and log + | |
| publish the event. | |
| Citations: Kuramoto 1975 (coupled oscillators); Csikszentmihalyi 1975 (flow); | |
| Strogatz, "Sync" (2003). Open-source: stdlib `cmath` only. | |
| """ | |
| from __future__ import annotations | |
| import cmath | |
| import math | |
| import time as _time | |
| from dataclasses import dataclass | |
| from typing import Iterable, Optional | |
| from .ledger import ORGANS | |
| TINKUY_R_THRESHOLD = 0.85 | |
| class TinkuyState: | |
| r: float # Kuramoto order parameter magnitude in [0,1] | |
| psi: float # mean phase (radians) | |
| in_tinkuy: bool # r > threshold | |
| threshold: float | |
| n_organs: int | |
| suppress_reflexion: bool # True during flow window | |
| ts: float | |
| def order_parameter(phases: Iterable[float]) -> tuple[float, float]: | |
| """Return (r, psi) for the Kuramoto order parameter over organ phases.""" | |
| phases = list(phases) | |
| n = len(phases) | |
| if n == 0: | |
| return 0.0, 0.0 | |
| z = sum(cmath.exp(1j * theta) for theta in phases) / n | |
| return abs(z), cmath.phase(z) | |
| def compute(phases: Iterable[float], threshold: float = TINKUY_R_THRESHOLD, | |
| now: Optional[float] = None) -> TinkuyState: | |
| r, psi = order_parameter(phases) | |
| in_tinkuy = r > threshold | |
| return TinkuyState( | |
| r=round(r, 6), psi=round(psi, 6), in_tinkuy=in_tinkuy, | |
| threshold=threshold, n_organs=len(list(phases)) if not isinstance(phases, list) else len(phases), | |
| suppress_reflexion=in_tinkuy, | |
| ts=now if now is not None else _time.time(), | |
| ) | |
| class TinkuyMonitor: | |
| """Tracks organ-loop phases and exposes the current Kuramoto r. | |
| suppress_reflexion(): during a flow window (r>threshold), Reflexion ticks are | |
| suppressed so the coherent state is not interrupted; events are logged/published. | |
| """ | |
| def __init__(self, threshold: float = TINKUY_R_THRESHOLD) -> None: | |
| self.threshold = threshold | |
| self._phases: dict[str, float] = {o: 0.0 for o in ORGANS} | |
| self._log: list[TinkuyState] = [] | |
| def set_phase(self, organ: str, theta: float) -> None: | |
| if organ not in self._phases: | |
| raise ValueError(f"unknown organ {organ!r}") | |
| # normalize to [0, 2pi) | |
| self._phases[organ] = theta % (2 * math.pi) | |
| def update_phases(self, mapping: dict) -> None: | |
| for o, th in mapping.items(): | |
| self.set_phase(o, th) | |
| def state(self, now: Optional[float] = None) -> TinkuyState: | |
| st = compute(list(self._phases.values()), self.threshold, now=now) | |
| st = TinkuyState(**{**st.__dict__, "n_organs": len(self._phases)}) | |
| if st.in_tinkuy: | |
| self._log.append(st) # log + publish on flow | |
| return st | |
| def should_suppress_reflexion(self) -> bool: | |
| return self.state().in_tinkuy | |
| def flow_log(self) -> list[TinkuyState]: | |
| return list(self._log) | |