ezmsg.sigproc.merge#
Time-aligned merge of two AxisArray streams along a non-time axis.
Classes
- class Merge(*args, settings=None, **kwargs)[source]#
Bases:
BaseProcessorUnit[MergeSettings]Merge two AxisArray streams by time-aligning and concatenating along a non-time axis.
Input A routes through the processor’s
__acall__(triggering hash-based reset when the stream structure changes). Input B routes throughpush_bwhich independently tracks its own structure.Inherits
INPUT_SETTINGSandon_settings→create_processorfromBaseProcessorUnit.- Parameters:
settings (Settings | None)
- SETTINGS#
alias of
MergeSettings
- INPUT_SIGNAL_A = InputStream:unlocated[AxisArray]()#
- INPUT_SIGNAL_B = InputStream:unlocated[AxisArray]()#
- OUTPUT_SIGNAL = OutputStream:unlocated[AxisArray](self.num_buffers=32, self.force_tcp=False)#
- class MergeProcessor(*args, **kwargs)[source]#
Bases:
BaseStatefulTransformer[MergeSettings,AxisArray,AxisArray|None,MergeState]Processor that time-aligns two AxisArray streams and concatenates them.
Input A flows through the standard
__call__/_processpath, getting automatic_hash_message/_reset_statehandling fromBaseStatefulTransformer. Input B flows throughpush_b(), which independently tracks its own structure.Invalidation rules:
Gain mismatch (either input vs stored common gain) → full reset.
Concat-axis dimensionality change → per-input buffer reset + alignment and merged-axis cache invalidation.
Non-align/non-concat axis shape change → per-input buffer reset + alignment invalidation.
- class MergeSettings(axis: 'str' = 'ch', align_axis: 'str | None' = 'time', buffer_dur: 'float' = 10.0, relabel_axis: 'bool' = True, label_a: 'str' = '_a', label_b: 'str' = '_b', new_key: 'str | None' = None)[source]#
Bases:
Settings- Parameters:
- class MergeState[source]#
Bases:
object- merged_concat_axis: CoordinateAxis | None = None#
- buf_a: HybridAxisArrayBuffer | None = None#
- concat_axis_a: CoordinateAxis | None = None#
- buf_b: HybridAxisArrayBuffer | None = None#
- concat_axis_b: CoordinateAxis | None = None#