"""Test pattern completion for olfactory/gustatory modalities – corrected."""
import matplotlib.pyplot as plt
import numpy as np
from mercurial.simulation.engine import SimulationEngine
# Create two stored patterns (e.g., odour A and B)
N = 50
pattern_A = np.random.choice([0, 1], size=N)
pattern_B = 1 - pattern_A # orthogonal
stored = [pattern_A, pattern_B]
# Input function: 80% of pattern A (strong partial cue) for first 2 seconds
engine = SimulationEngine(dim=10)
res = engine.run_pattern_completion(
(0.0, 4.0), dt=0.001, n_neurons=N, stored_patterns=stored, input_function=partial_input
)
# Plot overlap with pattern A
plt.figure(figsize=(10, 4))
plt.plot(res["t"], res["overlap"], label="Overlap with pattern A")
plt.xlabel("Time (s)")
plt.ylabel("Overlap")
plt.title("Pattern Completion: Partial Odour Input (corrected)")
plt.axhline(y=0.5, color="r", linestyle="--", label="Chance level")
plt.ylim(0, 1)
plt.legend()
plt.grid(True, alpha=0.3)
plt.show()
# Visualise final activity pattern
final_r = res["r"][-1]
plt.figure(figsize=(12, 4))
plt.subplot(1, 3, 1)
plt.imshow(pattern_A.reshape(1, -1), cmap="gray", aspect="auto")
plt.title("Pattern A")
plt.subplot(1, 3, 2)
plt.imshow(pattern_B.reshape(1, -1), cmap="gray", aspect="auto")
plt.title("Pattern B")
plt.subplot(1, 3, 3)
plt.imshow(final_r.reshape(1, -1), cmap="hot", aspect="auto")
plt.title("Final Network State")
plt.tight_layout()
plt.show()
print(f"Final overlap with pattern A: {res['overlap'][-1]:.3f}")