Parallel#
- class braintools.cogtask.Parallel(*phases, name='Parallel')[source]#
Parallel composition - phases execute simultaneously.
Useful for multi-modality tasks where different input channels have different encoding patterns during the same time period.
Created via:
phase1 | phase2Semantics#
The parent’s duration is the maximum of its children’s durations.
Each child runs through its own
on_enter/on_exitlifecycle bound to its own duration (not the parent’s max), so noise and time-varying labels respect the child’s declared length.Inputs from all children are written into the parent slice.
Outputs come from the first child by convention. To combine outputs from multiple children, declare disjoint output features per child and compose explicitly.
Examples
>>> # Two stimuli presented simultaneously >>> parallel = StimulusA(500*u.ms) | StimulusB(500*u.ms)
- children()[source]#
Return the immediate child phases of a compound phase.
Leaf phases return
[]. Subclasses likeSequence,Repeat,Parallel,If,Switch,Whileoverride this so that theTaskcan traverse the whole tree to bind features.
- encode_inputs(ctx)[source]#
Fill ctx.inputs[phase_start:phase_end] with input encoding.
Called once per phase after duration is determined. Must modify ctx.inputs in-place.
- encode_outputs(ctx)[source]#
Fill ctx.outputs[phase_start:phase_end] with target encoding.
Called once per phase after duration is determined. Must modify ctx.outputs in-place.
- execute_packed(ctx)[source]#
Packed-mode parallel execution.
Every child starts at the same
parent_cursorslot; the parent cursor advances by the maximum of the children’s actual step counts. Child input/output writes compose via the leaf merge logic in_execute_leaf_packed(later children inherit earlier slot contents outside their active range). Only the first child’s output writes are propagated (matching the static semantic).- Return type:
- max_steps(ctx)[source]#
Static upper bound on this phase’s length in timesteps.
Must return a Python int with no dependence on traced values. Used by
Taskin variable-length mode to size shape-stable buffers. The default delegates toget_durationwhich is correct for fixed-duration phases. Variable-duration phases (e.g. those wrappingTruncExp/UniformDuration) override this to return the truncation upper bound divided byctx.dt.
- step_count(ctx)[source]#
Traced actual length of this phase in timesteps.
Returns a
jax.Arrayint32scalar. May depend onctx[...]values populated bytrial_init. Must satisfy0 <= step_count(ctx) <= max_steps(ctx)for every trial.The default returns a static value equal to
get_duration; that is correct for any phase whose actual length matches its upper bound. Variable-duration phases override this to compute the traced length fromctxstate without anyint(...)cast.- Return type:
Array