Source code for pyecsca.sca.stacked_traces.stacked_traces

from __future__ import annotations

import numpy as np
from public import public
from typing import Any, Mapping, Sequence

from ...sca.trace_set.base import TraceSet


[docs] @public class StackedTraces: """Samples of multiple traces and metadata""" meta: Mapping[str, Any] samples: np.ndarray # TODO: Split metadata into common and per-trace def __init__( self, samples: np.ndarray, meta: Mapping[str, Any] | None = None) -> None: if meta is None: meta = {} self.meta = meta self.samples = samples
[docs] @classmethod def fromarray(cls, traces: Sequence[np.ndarray], meta: Mapping[str, Any] | None = None) -> 'StackedTraces': if meta is None: meta = {} ts = list(traces) min_samples = min(map(len, ts)) for i, t in enumerate(ts): ts[i] = t[:min_samples] stacked = np.stack(ts) return cls(stacked, meta)
[docs] @classmethod def fromtraceset(cls, traceset: TraceSet) -> 'StackedTraces': traces = [t.samples for t in traceset] return cls.fromarray(traces)
def __len__(self): return self.samples.shape[0] def __getitem__(self, index): return self.samples[index] def __iter__(self): yield from self.samples