Visualization¶
reptimeline provides four visualization types for understanding representation dynamics.
Phase Dashboard¶
Three-panel plot showing entropy, churn rate, and utilization curves with automatically detected phase transitions marked as vertical lines.
from reptimeline.viz import plot_phase_dashboard
plot_phase_dashboard(timeline, save_path="phase_dashboard.png")

What to look for:
- Entropy drops: The model is "deciding" -- committing to specific representations
- Churn spikes: Rapid reorganization of representations
- Utilization drops: Codes collapsing -- fewer unique representations
- Vertical lines: Automatically detected phase transitions
Training Phases (from TriadicGPT)¶
| Phase | Steps | Characteristic |
|---|---|---|
| Exploration | 0 -- 7,500 | High churn, all bits tested |
| Consolidation | 7,500 -- 27,500 | Churn stays high, entropy stable, active reorganization |
| Crystallization | 27,500 | Simultaneous entropy/utilization drop -- the model "decides" |
| Stabilization | 27,500 -- 50,000 | Churn drops to 0.075, representations frozen |
Churn Heatmap¶
Per-bit churn rate across training steps. Shows which bits are unstable and when.
from reptimeline.viz import plot_churn_heatmap
plot_churn_heatmap(timeline, save_path="churn_heatmap.png")

What to look for:
- Hot rows: Bits that flip frequently (unstable features)
- Hot columns: Training steps with high overall churn (reorganization events)
- Cool regions: Stable bits/periods (converged representations)
Swimlane¶
Per-concept bit activation grid across training steps. Shows how individual concepts' representations change.
from reptimeline.viz import plot_swimlane
plot_swimlane(timeline, concepts=["king", "queen", "love", "hate"],
save_path="swimlane.png")

What to look for:
- Births: Bits lighting up for the first time
- Deaths: Bits going dark permanently
- Shared patterns: Concepts that converge to similar bit patterns
- Divergence points: Steps where similar concepts start differing
Layer Emergence¶
Hierarchical layer activation order. Shows when each layer of the ontology stabilizes.
from reptimeline.viz import plot_layer_emergence
# Requires PrimitiveOverlay results
from reptimeline.overlays.primitive_overlay import PrimitiveOverlay
overlay = PrimitiveOverlay()
primitive_report = overlay.analyze(timeline, primitives)
plot_layer_emergence(primitive_report, save_path="layer_emergence.png")

What to look for:
- Bottom-up ordering: Lower layers (more abstract) should stabilize first
- Violations: Higher layers stabilizing before their dependencies
- Gaps: Layers that never stabilize (potential dead features)
Generating All Plots¶
from reptimeline.viz import (
plot_phase_dashboard,
plot_churn_heatmap,
plot_swimlane,
plot_layer_emergence,
)
# After running tracker.analyze() and overlay.analyze()
plot_phase_dashboard(timeline, save_path="plots/phase.png")
plot_churn_heatmap(timeline, save_path="plots/churn.png")
plot_swimlane(timeline, concepts=concepts, save_path="plots/swim.png")
plot_layer_emergence(primitive_report, save_path="plots/layers.png")
Or via CLI:
python -m reptimeline \
--checkpoint-dir checkpoints/ \
--primitives --overlay --plot \
--output timeline.json
This generates all four plots automatically in the output directory.