| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| from typing import Dict, Optional |
| from dataclasses import dataclass |
| import numpy as np |
|
|
|
|
| @dataclass |
| class AnomalyReport: |
| """Anomaly detection result.""" |
|
|
| has_anomaly: bool |
| anomaly_type: Optional[str] |
| severity: float |
| description: str |
|
|
|
|
| def compute_arousal(chamber_activations: Dict[str, float]) -> float: |
| """ |
| Compute emotional arousal level. |
| |
| Arousal = max activation (any strong emotion = high arousal). |
| High arousal = strong emotions (fear, rage, love). |
| Low arousal = flat affect (void, apathy). |
| """ |
| activations = np.array(list(chamber_activations.values())) |
| arousal = activations.max() |
| return float(arousal) |
|
|
|
|
| def detect_forced_stability( |
| chamber_activations: Dict[str, float], |
| iterations: int, |
| arousal: float, |
| ) -> Optional[AnomalyReport]: |
| """ |
| Detect forced stability: high arousal but fast convergence. |
| |
| Indicates: emotional suppression, forced calm, "I'm fine" |
| |
| Conditions: |
| - arousal > 0.8 (strong emotions present) |
| - iterations < 3 (converged too quickly) |
| """ |
| if arousal > 0.8 and iterations < 3: |
| severity = min(1.0, arousal / 0.8) |
| return AnomalyReport( |
| has_anomaly=True, |
| anomaly_type="forced_stability", |
| severity=severity, |
| description="Strong emotions converge unnaturally fast (suppression?)", |
| ) |
| return None |
|
|
|
|
| def detect_dissociative_shutdown( |
| chamber_activations: Dict[str, float], |
| iterations: int, |
| arousal: float, |
| ) -> Optional[AnomalyReport]: |
| """ |
| Detect dissociative shutdown: high VOID + high arousal. |
| |
| Indicates: trauma response, emotional overwhelm → numbness |
| |
| Conditions: |
| - VOID > 0.7 (strong dissociation) |
| - arousal > 0.5 (other emotions still present) |
| """ |
| void_level = chamber_activations.get("VOID", 0.0) |
|
|
| if void_level > 0.7 and arousal > 0.5: |
| severity = min(1.0, void_level) |
| return AnomalyReport( |
| has_anomaly=True, |
| anomaly_type="dissociative_shutdown", |
| severity=severity, |
| description="High void + arousal = dissociative response to overwhelm", |
| ) |
| return None |
|
|
|
|
| def detect_unresolved_confusion( |
| chamber_activations: Dict[str, float], |
| iterations: int, |
| arousal: float, |
| ) -> Optional[AnomalyReport]: |
| """ |
| Detect unresolved confusion: extremely low arousal + slow convergence. |
| |
| Indicates: ambivalence, indecision, "I don't know what I feel" |
| |
| Conditions: |
| - arousal < 0.10 (extremely weak/mixed emotions) |
| - iterations > 8 (slow to stabilize) |
| """ |
| if arousal < 0.10 and iterations > 8: |
| severity = 1.0 - arousal |
| return AnomalyReport( |
| has_anomaly=True, |
| anomaly_type="unresolved_confusion", |
| severity=severity, |
| description="Extremely weak emotions + slow convergence = unresolved ambivalence", |
| ) |
| return None |
|
|
|
|
| def detect_emotional_flatline( |
| chamber_activations: Dict[str, float], |
| iterations: int, |
| arousal: float, |
| ) -> Optional[AnomalyReport]: |
| """ |
| Detect emotional flatline: all chambers very low. |
| |
| Indicates: severe apathy, depression, emotional shutdown |
| |
| Conditions: |
| - all chambers < 0.05 (truly flat, no signal at all) |
| """ |
| all_low = all(v < 0.05 for v in chamber_activations.values()) |
|
|
| if all_low: |
| max_activation = max(chamber_activations.values()) |
| severity = 1.0 - max_activation / 0.05 |
| return AnomalyReport( |
| has_anomaly=True, |
| anomaly_type="emotional_flatline", |
| severity=severity, |
| description="All chambers < 0.05 = severe emotional flatline", |
| ) |
| return None |
|
|
|
|
| def detect_anomalies( |
| chamber_activations: Dict[str, float], |
| iterations: int, |
| ) -> AnomalyReport: |
| """ |
| Run all anomaly detectors. |
| |
| Returns the first detected anomaly, or None if normal. |
| Priority: flatline > dissociative > forced > confusion |
| """ |
| arousal = compute_arousal(chamber_activations) |
|
|
| |
| detectors = [ |
| detect_emotional_flatline, |
| detect_dissociative_shutdown, |
| detect_forced_stability, |
| detect_unresolved_confusion, |
| ] |
|
|
| for detector in detectors: |
| result = detector(chamber_activations, iterations, arousal) |
| if result is not None: |
| return result |
|
|
| |
| return AnomalyReport( |
| has_anomaly=False, |
| anomaly_type=None, |
| severity=0.0, |
| description="Normal emotional state", |
| ) |
|
|
|
|
| if __name__ == "__main__": |
| print("=" * 60) |
| print(" CLOUD v3.1 — Anomaly Detection") |
| print("=" * 60) |
| print() |
|
|
| |
| test_cases = [ |
| { |
| "name": "Forced stability", |
| "chambers": {"FEAR": 0.9, "LOVE": 0.1, "RAGE": 0.8, "VOID": 0.2}, |
| "iterations": 2, |
| }, |
| { |
| "name": "Dissociative shutdown", |
| "chambers": {"FEAR": 0.6, "LOVE": 0.2, "RAGE": 0.5, "VOID": 0.8}, |
| "iterations": 5, |
| }, |
| { |
| "name": "Unresolved confusion", |
| "chambers": {"FEAR": 0.4, "LOVE": 0.4, "RAGE": 0.4, "VOID": 0.4}, |
| "iterations": 9, |
| }, |
| { |
| "name": "Emotional flatline", |
| "chambers": {"FEAR": 0.1, "LOVE": 0.05, "RAGE": 0.08, "VOID": 0.12}, |
| "iterations": 5, |
| }, |
| { |
| "name": "Normal state", |
| "chambers": {"FEAR": 0.3, "LOVE": 0.6, "RAGE": 0.2, "VOID": 0.3}, |
| "iterations": 5, |
| }, |
| ] |
|
|
| for test in test_cases: |
| arousal = compute_arousal(test["chambers"]) |
| anomaly = detect_anomalies(test["chambers"], test["iterations"]) |
|
|
| print(f"{test['name']}:") |
| print(f" Chambers: {test['chambers']}") |
| print(f" Iterations: {test['iterations']}") |
| print(f" Arousal: {arousal:.3f}") |
| print(f" Anomaly: {anomaly.anomaly_type or 'None'}") |
| if anomaly.has_anomaly: |
| print(f" Severity: {anomaly.severity:.3f}") |
| print(f" Description: {anomaly.description}") |
| print() |
|
|
| print("=" * 60) |
| print(" Anomaly detection operational. 0 params.") |
| print("=" * 60) |
|
|