Repository navigation
Releases
v0.5.0: N-dimensional spatial canvas
Arbitrary spatial dimensions — the canvas is no longer locked to 2D.
What's new
spatial_shapeparameter:CanvasLayout,compile_schema, andcompile_programall acceptspatial_shape=(...)for 1D, 2D, 3D, or higher.- 1D time-series:
Field(spatial_shape=(128,))+compile_schema(..., spatial_shape=(200,)) - 3D volumetric:
Field(spatial_shape=(4, 4, 4))+compile_schema(..., spatial_shape=(8, 8, 8)) - N-D positional encoding:
SinusoidalPositionalEncodingNDsplits d_model evenly across all dimensions. - N-D packing: 1D linear, 2D strip (unchanged), 3D+ stacked greedy.
- N-D masks:
Rectgeneralized to hyperrectangles,rect_coverworks on any-dimensional boolean masks. - Schema format: Serializes
spatial_shapelist; reads oldH/Wformat transparently.
Backward compatible
The old H=/W= API continues to work unchanged. All 478 existing tests pass without modification.
# All of these still work exactly as before:
CanvasLayout(T=5, H=8, W=8, d_model=256)
Field(12, 12)
compile_schema(Robot(), T=8, H=16, W=16, d_model=256)529 tests passing (478 existing + 51 new)
v0.4.2: 18 examples + TRIBE v2 BCI
18 runnable examples. TRIBE v2 BCI experiment: canvas decoder 68.8% vs SVM 59.4% on real cortical predictions.
v0.4.1: Fix all examples, add Modal runner
All 13 examples verified passing on Modal. Fixes deprecated parent_child kwarg and grid sizing for coarse-grained fields.
v0.4.0: Phase 6+ — all 8 future workstreams
Phase 6+: ProgramConditioner, internal microsteps, identity slots, masks, cortex, learned scheduling, ClockExpr IR, constraints. 478 tests.
v0.3.0: Typed process layer — families, carriers, operators, scheduling, compilation
What's new
Canvas-engineering gains a typed process layer on top of the existing typed layout:
CanvasProgram layer
- 5 region families: observation, state, memory, residual, action — everything else is tags
- 5 carriers: deterministic, diffusive, filter, memory, residual — not everything follows diffusion dynamics
- Operators: semantic intent (observe, predict, correct, retrieve, write, act) separate from backend (cross_attention, mamba, perceiver, etc.)
- Auto-wiring:
compile_program()auto-sets operators from region family pairs - ClockSpec: periodic, on_event (residual threshold), boundary clocks with cooldown and max_silence
Runtime
- ResidualAccumulator: tracks running scalar EMA summaries of error signals per region
- RegionScheduler: evaluates clock rules to decide which regions fire each step
- AttentionDispatcher.active_regions: skip inactive regions, pass through unchanged
Compilation
- ProgramCompiler: freeze/constant/export/dead-elimination passes
- Per-family learning defaults: ssl_prediction for observation, posterior_match for state, retrieval for memory, calibration for residual, supervised for action
New modules
program.py— CanvasProgram, RegionProgram, ConnectionProgram, ClockSpec, LearningSpecresiduals.py— ResidualSpec, ResidualAccumulatorscheduling.py— RegionSchedulerlearning.py— FAMILY_DEFAULTS, default_learning()compiler.py— ProgramCompiler, CompiledProgram
Stats
- 361 tests, all passing
- 122 new tests for v2 features
- All 239 v0.2.0 tests pass unchanged
- Full backward compatibility:
compile_schema()unchanged, all existing code works
v0.2.0: Temporal fill modes, PeriodEmbedding, CogVideoX
What's new
- Temporal fill modes (DROP, HOLD, INTERPOLATE) for cross-frequency attention connections
- PeriodEmbedding — learned embedding indexed by log-bucketed temporal period
- Higher-order IDW interpolation via
interpolation_orderon Connection - CogVideoX backbone-native attention type
- Mamba readout refactored from pooled-mean to query-based attention
- Block-weighted mean period for coarse-grained field computation
- Period-aware fill resolution in real-time space
Behavior change
HOLD is now the default temporal fill mode. Previously, out-of-bounds temporal connections silently dropped. Use TemporalFill.DROP for the old behavior.
Stats
- 239 tests, all passing
- Full backward compatibility with v0.1.x
v0.1.1
Full Changelog: https://github.com/JacobFV/canvas-engineering/commits/v0.1.1