Source code for mercurial.impressions.persistence

"""Impression formation and entropy‑governed persistence."""

from typing import Callable

import numpy as np
from scipy.integrate import odeint


[docs] class ImpressionDynamics: """Implements MERCURIAL A.18 impression dynamics.""" def __init__( self, alpha_form: float = 0.1, gamma_form: float = 0.01, gamma0: float = 0.001, S_crit: float = 10.0, k_eff: float = 1.0, ): self.alpha = alpha_form self.gamma_form = gamma_form self.gamma0 = gamma0 self.S_crit = S_crit self.k_eff = k_eff
[docs] def formation_rate( self, emotional_salience: float, repetition: float, attention: float, current_intensity: float, ) -> float: return ( self.alpha * emotional_salience * repetition * attention - self.gamma_form * current_intensity )
[docs] def decay_rate(self, entropy: float) -> float: return self.gamma0 * (entropy / self.S_crit)
[docs] def persistence_time(self, entropy: float) -> float: tau0 = 86400.0 # 1 day in seconds return tau0 * np.exp((self.S_crit - entropy) / self.k_eff)
[docs] def evolve_impression( self, I0: float, t_span: np.ndarray, entropy_function: Callable[[float], float] ) -> np.ndarray: def dI_dt(I, t): S_t = entropy_function(t) gamma = self.decay_rate(S_t) return -gamma * I return odeint(dI_dt, I0, t_span).flatten()