aboutsummaryrefslogtreecommitdiffhomepage
path: root/pyecsca/sca/trace
diff options
context:
space:
mode:
Diffstat (limited to 'pyecsca/sca/trace')
-rw-r--r--pyecsca/sca/trace/align.py6
-rw-r--r--pyecsca/sca/trace/combine.py6
-rw-r--r--pyecsca/sca/trace/edit.py8
-rw-r--r--pyecsca/sca/trace/filter.py2
-rw-r--r--pyecsca/sca/trace/process.py22
-rw-r--r--pyecsca/sca/trace/sampling.py6
-rw-r--r--pyecsca/sca/trace/test.py4
-rw-r--r--pyecsca/sca/trace/trace.py10
8 files changed, 31 insertions, 33 deletions
diff --git a/pyecsca/sca/trace/align.py b/pyecsca/sca/trace/align.py
index 643efcf..1c9c216 100644
--- a/pyecsca/sca/trace/align.py
+++ b/pyecsca/sca/trace/align.py
@@ -27,7 +27,7 @@ def align_reference(reference: Trace, *traces: Trace,
result_samples[:length - offset] = trace.samples[offset:]
else:
result_samples[-offset:] = trace.samples[:length + offset]
- result.append(Trace(copy(trace.title), copy(trace.data), result_samples))
+ result.append(Trace(result_samples, copy(trace.title), copy(trace.data)))
return result
@@ -198,7 +198,7 @@ def align_dtw_scale(reference: Trace, *traces: Trace, radius: int = 1,
scale[x] += 1
result_samples //= scale
del scale
- result.append(Trace(copy(trace.title), copy(trace.data), result_samples))
+ result.append(Trace(result_samples, copy(trace.title), copy(trace.data)))
return result
@@ -233,5 +233,5 @@ def align_dtw(reference: Trace, *traces: Trace, radius: int = 1, fast: bool = Tr
# or manually:
# for x, y in path:
# result_samples[x] = trace.samples[y]
- result.append(Trace(copy(trace.title), copy(trace.data), result_samples))
+ result.append(Trace(result_samples, copy(trace.title), copy(trace.data)))
return result
diff --git a/pyecsca/sca/trace/combine.py b/pyecsca/sca/trace/combine.py
index c484748..2ab552a 100644
--- a/pyecsca/sca/trace/combine.py
+++ b/pyecsca/sca/trace/combine.py
@@ -16,10 +16,10 @@ def average(*traces: Trace) -> Optional[CombinedTrace]:
if not traces:
return None
if len(traces) == 1:
- return CombinedTrace(None, None, traces[0].samples.copy(), parents=traces)
+ return CombinedTrace(traces[0].samples.copy(), None, None)
dtype = traces[0].samples.dtype
result_samples = np.mean(np.array([trace.samples for trace in traces]), axis=0).astype(dtype)
- return CombinedTrace(None, None, result_samples, parents=traces)
+ return CombinedTrace(result_samples, None, None)
@public
@@ -46,4 +46,4 @@ def standard_deviation(*traces: Trace) -> Optional[CombinedTrace]:
return None
dtype = traces[0].samples.dtype
result_samples = np.std(np.array([trace.samples for trace in traces]), axis=0).astype(dtype)
- return CombinedTrace(None, None, result_samples, parents=traces)
+ return CombinedTrace(result_samples, None, None)
diff --git a/pyecsca/sca/trace/edit.py b/pyecsca/sca/trace/edit.py
index f01a0dc..f58ad57 100644
--- a/pyecsca/sca/trace/edit.py
+++ b/pyecsca/sca/trace/edit.py
@@ -22,7 +22,7 @@ def trim(trace: Trace, start: int = None, end: int = None) -> Trace:
end = len(trace.samples)
if start > end:
raise ValueError("Invalid trim arguments.")
- return Trace(copy(trace.title), copy(trace.data), trace.samples[start:end].copy())
+ return Trace(trace.samples[start:end].copy(), copy(trace.title), copy(trace.data))
@public
@@ -33,7 +33,7 @@ def reverse(trace: Trace) -> Trace:
:param trace:
:return:
"""
- return Trace(copy(trace.title), copy(trace.data), np.flipud(trace.samples))
+ return Trace(np.flipud(trace.samples), copy(trace.title), copy(trace.data))
@public
@@ -51,5 +51,5 @@ def pad(trace: Trace, lengths: Union[Tuple[int, int], int],
lengths = (lengths, lengths)
if not isinstance(values, tuple):
values = (values, values)
- return Trace(copy(trace.title), copy(trace.data),
- np.pad(trace.samples, lengths, "constant", constant_values=values))
+ return Trace(np.pad(trace.samples, lengths, "constant", constant_values=values),
+ copy(trace.title), copy(trace.data))
diff --git a/pyecsca/sca/trace/filter.py b/pyecsca/sca/trace/filter.py
index 11cc89c..6bb17b9 100644
--- a/pyecsca/sca/trace/filter.py
+++ b/pyecsca/sca/trace/filter.py
@@ -14,7 +14,7 @@ def filter_any(trace: Trace, sampling_frequency: int,
else:
b, a = butter(6, cutoff / nyq, btype=band_type, analog=False, output='ba')
result_samples = lfilter(b, a, trace.samples)
- return Trace(copy(trace.title), copy(trace.data), result_samples)
+ return Trace(result_samples, copy(trace.title), copy(trace.data))
@public
diff --git a/pyecsca/sca/trace/process.py b/pyecsca/sca/trace/process.py
index 8e983b2..4cdbeff 100644
--- a/pyecsca/sca/trace/process.py
+++ b/pyecsca/sca/trace/process.py
@@ -13,7 +13,7 @@ def absolute(trace: Trace) -> Trace:
:param trace:
:return:
"""
- return Trace(copy(trace.title), copy(trace.data), np.absolute(trace.samples))
+ return Trace(np.absolute(trace.samples), copy(trace.title), copy(trace.data))
@public
@@ -24,7 +24,7 @@ def invert(trace: Trace) -> Trace:
:param trace:
:return:
"""
- return Trace(copy(trace.title), copy(trace.data), np.negative(trace.samples))
+ return Trace(np.negative(trace.samples), copy(trace.title), copy(trace.data))
@public
@@ -39,7 +39,7 @@ def threshold(trace: Trace, value) -> Trace:
result_samples = trace.samples.copy()
result_samples[result_samples <= value] = 0
result_samples[np.nonzero(result_samples)] = 1
- return Trace(copy(trace.title), copy(trace.data), result_samples)
+ return Trace(result_samples, copy(trace.title), copy(trace.data))
def rolling_window(samples: np.ndarray, window: int) -> np.ndarray:
@@ -57,9 +57,8 @@ def rolling_mean(trace: Trace, window: int) -> Trace:
:param window:
:return:
"""
- return Trace(copy(trace.title), copy(trace.data),
- np.mean(rolling_window(trace.samples, window), -1).astype(
- dtype=trace.samples.dtype))
+ return Trace(np.mean(rolling_window(trace.samples, window), -1).astype(
+ dtype=trace.samples.dtype), copy(trace.title), copy(trace.data))
@public
@@ -71,7 +70,7 @@ def offset(trace: Trace, offset) -> Trace:
:param offset:
:return:
"""
- return Trace(copy(trace.title), copy(trace.data), trace.samples + offset)
+ return Trace(trace.samples + offset, copy(trace.title), copy(trace.data))
def root_mean_square(trace: Trace):
@@ -92,12 +91,11 @@ def recenter(trace: Trace) -> Trace:
@public
def normalize(trace: Trace) -> Trace:
- return Trace(copy(trace.title), copy(trace.data),
- (trace.samples - np.mean(trace.samples)) / np.std(trace.samples))
+ return Trace((trace.samples - np.mean(trace.samples)) / np.std(trace.samples),
+ copy(trace.title), copy(trace.data))
@public
def normalize_wl(trace: Trace) -> Trace:
- return Trace(copy(trace.title), copy(trace.data),
- (trace.samples - np.mean(trace.samples)) / (
- np.std(trace.samples) * len(trace.samples)))
+ return Trace((trace.samples - np.mean(trace.samples)) / (
+ np.std(trace.samples) * len(trace.samples)), copy(trace.title), copy(trace.data))
diff --git a/pyecsca/sca/trace/sampling.py b/pyecsca/sca/trace/sampling.py
index 29dc251..fdd5e5b 100644
--- a/pyecsca/sca/trace/sampling.py
+++ b/pyecsca/sca/trace/sampling.py
@@ -18,7 +18,7 @@ def downsample_average(trace: Trace, factor: int = 2) -> Trace:
"""
resized = np.resize(trace.samples, len(trace.samples) - (len(trace.samples) % factor))
result_samples = resized.reshape(-1, factor).mean(axis=1).astype(trace.samples.dtype)
- return Trace(copy(trace.title), copy(trace.data), result_samples)
+ return Trace(result_samples, copy(trace.title), copy(trace.data))
@public
@@ -32,7 +32,7 @@ def downsample_pick(trace: Trace, factor: int = 2, offset: int = 0) -> Trace:
:return:
"""
result_samples = trace.samples[offset::factor].copy()
- return Trace(copy(trace.title), copy(trace.data), result_samples)
+ return Trace(result_samples, copy(trace.title), copy(trace.data))
@public
@@ -45,4 +45,4 @@ def downsample_decimate(trace: Trace, factor: int = 2) -> Trace:
:return:
"""
result_samples = decimate(trace.samples, factor)
- return Trace(copy(trace.title), copy(trace.data), result_samples)
+ return Trace(result_samples, copy(trace.title), copy(trace.data))
diff --git a/pyecsca/sca/trace/test.py b/pyecsca/sca/trace/test.py
index f2cfb33..4fc0236 100644
--- a/pyecsca/sca/trace/test.py
+++ b/pyecsca/sca/trace/test.py
@@ -14,7 +14,7 @@ def ttest_func(first_set: Sequence[Trace], second_set: Sequence[Trace],
first_stack = np.stack([first.samples for first in first_set])
second_stack = np.stack([second.samples for second in second_set])
result = ttest_ind(first_stack, second_stack, axis=0, equal_var=equal_var)
- return CombinedTrace(None, None, result[0], parents=[*first_set, *second_set])
+ return CombinedTrace(result[0], None, None)
@public
@@ -61,4 +61,4 @@ def ks_test(first_set: Sequence[Trace], second_set: Sequence[Trace]) -> Optional
results = np.empty(len(first_set[0].samples), dtype=first_set[0].samples.dtype)
for i in range(len(first_set[0].samples)):
results[i] = ks_2samp(first_stack[..., i], second_stack[..., i])[0]
- return CombinedTrace(None, None, results, parents=[*first_set, *second_set])
+ return CombinedTrace(results, None, None)
diff --git a/pyecsca/sca/trace/trace.py b/pyecsca/sca/trace/trace.py
index 5324a37..18df978 100644
--- a/pyecsca/sca/trace/trace.py
+++ b/pyecsca/sca/trace/trace.py
@@ -11,8 +11,8 @@ class Trace(object):
data: Optional[bytes]
samples: ndarray
- def __init__(self, title: Optional[str], data: Optional[bytes],
- samples: ndarray, trace_set: Any = None):
+ def __init__(self, samples: ndarray, title: Optional[str], data: Optional[bytes],
+ trace_set: Any = None):
self.title = title
self.data = data
self.samples = samples
@@ -39,9 +39,9 @@ class Trace(object):
class CombinedTrace(Trace):
"""A power trace that was combined from other traces, `parents`."""
- def __init__(self, title: Optional[str], data: Optional[bytes],
- samples: ndarray, trace_set=None, parents: Sequence[Trace] = None):
- super().__init__(title, data, samples, trace_set=trace_set)
+ def __init__(self, samples: ndarray, title: Optional[str], data: Optional[bytes],
+ trace_set=None, parents: Sequence[Trace] = None):
+ super().__init__(samples, title, data, trace_set=trace_set)
self.parents = None
if parents is not None:
self.parents = weakref.WeakSet(parents)