aboutsummaryrefslogtreecommitdiffhomepage
path: root/test/sca
diff options
context:
space:
mode:
authorJ08nY2024-01-28 20:01:10 +0100
committerJ08nY2024-01-28 20:01:10 +0100
commit4cd17c3897c64ae915d06641b6693831f7762529 (patch)
tree14610d07c82a3a7ffa71b74396716ed37065d2dc /test/sca
parentbdb187dfa9a5e9d96b3e7c80349ac8ca2a25d299 (diff)
downloadpyecsca-4cd17c3897c64ae915d06641b6693831f7762529.tar.gz
pyecsca-4cd17c3897c64ae915d06641b6693831f7762529.tar.zst
pyecsca-4cd17c3897c64ae915d06641b6693831f7762529.zip
Allow merging of config sets in dmap.
Diffstat (limited to 'test/sca')
-rw-r--r--test/sca/test_tree.py51
1 files changed, 43 insertions, 8 deletions
diff --git a/test/sca/test_tree.py b/test/sca/test_tree.py
index 7964173..6ef83a8 100644
--- a/test/sca/test_tree.py
+++ b/test/sca/test_tree.py
@@ -1,18 +1,37 @@
+import random
+import time
+
from pyecsca.sca.re.tree import Tree, Map
import pandas as pd
+def test_map():
+ cfgs = {"a", "b"}
+ binary_sets = {"a": {1, 2, 3}, "b": {2, 4}}
+ dmap = Map.from_sets(cfgs, binary_sets)
+ assert dmap.domain == [1, 2, 3, 4]
+ assert dmap.codomain == {True, False}
+ assert dmap.mapping.index.tolist() == [0, 1]
+ assert set(dmap.cfg_map.index) == cfgs
+
+ io_map = {"a": {1: 5, 2: 7}, "b": {1: 3}}
+ dmap = Map.from_io_maps(cfgs, io_map)
+ assert dmap.domain == [1, 2]
+ assert dmap.codomain == {5, 3, 7, None}
+
+
def test_build_tree():
cfgs = ["a", "b", "c"]
+ cfg_map = pd.DataFrame([0, 1, 2], index=cfgs, columns=["vals"])
inputs1 = [1, 2, 3, 4]
codomain1 = {0, 1, 3, 4, 5}
- mapping1 = pd.DataFrame([(0, 4, 5, 0), (0, 3, 0, 0), (1, 4, 0, 0)], index=cfgs)
- dmap1 = Map(mapping1, inputs1, codomain1)
+ mapping1 = pd.DataFrame([(0, 4, 5, 0), (0, 3, 0, 0), (1, 4, 0, 0)])
+ dmap1 = Map(mapping1, cfg_map, inputs1, codomain1)
inputs2 = ["f", "e", "d"]
codomain2 = {0, 1, 2, 3}
- mapping2 = pd.DataFrame([(1, 0, 0), (2, 0, 0), (3, 0, 0)], index=cfgs)
- dmap2 = Map(mapping2, inputs2, codomain2)
+ mapping2 = pd.DataFrame([(1, 0, 0), (2, 0, 0), (3, 0, 0)])
+ dmap2 = Map(mapping2, cfg_map, inputs2, codomain2)
tree = Tree.build(set(cfgs), dmap1, dmap2)
tree.render()
tree.describe()
@@ -20,15 +39,31 @@ def test_build_tree():
def test_expand_tree():
cfgs = ["a", "b", "c"]
+ cfg_map = pd.DataFrame([0, 1, 2], index=cfgs, columns=["vals"])
inputs1 = [1, 2]
codomain1 = {0, 3, 4}
- mapping1 = pd.DataFrame([(0, 4), (0, 3), (0, 4)], index=cfgs)
- dmap1 = Map(mapping1, inputs1, codomain1)
+ mapping1 = pd.DataFrame([(0, 4), (0, 3), (0, 4)])
+ dmap1 = Map(mapping1, cfg_map, inputs1, codomain1)
inputs2 = ["f", "e", "d"]
codomain2 = {0, 1, 2, 3}
- mapping2 = pd.DataFrame([(1, 0, 0), (2, 0, 0), (3, 0, 0)], index=cfgs)
- dmap2 = Map(mapping2, inputs2, codomain2)
+ mapping2 = pd.DataFrame([(1, 0, 0), (2, 0, 0), (3, 0, 0)])
+ dmap2 = Map(mapping2, cfg_map, inputs2, codomain2)
tree = Tree.build(set(cfgs), dmap1)
res = tree.expand(dmap2)
assert res.height > tree.height
+
+
+def test_df():
+ nrows = 12_000_000
+ ncols = 5
+ index = list(range(nrows))
+ df = pd.DataFrame(
+ [random.choices((True, False), k=ncols) for _ in index], index=index
+ )
+ print(df.memory_usage().sum())
+ start = time.perf_counter()
+ for row, data in df.groupby(df.columns.tolist(), as_index=False):
+ pass
+ end = time.perf_counter()
+ print(end - start)