Skip to content

Commit

Permalink
more coverage ...
Browse files Browse the repository at this point in the history
  • Loading branch information
nickzoic committed Aug 30, 2024
1 parent 4bf475d commit 0763d27
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 17 deletions.
24 changes: 11 additions & 13 deletions countess/core/parameters.py
Original file line number Diff line number Diff line change
Expand Up @@ -297,7 +297,7 @@ def get_file_hash(self):
try:
# Python 3.11
digest = hashlib.file_digest(file, PARAM_DIGEST_HASH)
except AttributeError:
except AttributeError: # pragma: no cover
digest = hashlib.new(PARAM_DIGEST_HASH)
while True:
data = file.read()
Expand Down Expand Up @@ -725,15 +725,15 @@ def del_row(self, position: int):
assert 0 <= position < len(self.params)

self.params.pop(position)
if len(self.params) < self.min_size:
self.params.append(self.param.copy())
self.relabel()

def del_subparam(self, param: BaseParam):
self.params.remove(param)
self.relabel()

def relabel(self):
while len(self.params) < self.min_size:
self.params.append(self.param.copy())
for n, param in enumerate(self.params):
param.label = self.param.label + f" {n+1}"

Expand All @@ -744,8 +744,6 @@ def __len__(self):
return len(self.params)

def __getitem__(self, key):
while len(self.params) <= int(key):
self.add_row()
return self.params[int(key)]

def __setitem__(self, key, value):
Expand Down Expand Up @@ -785,7 +783,7 @@ def set_parameter(self, key: str, value: Union[bool, int, float, str], base_dir:
assert isinstance(param, (HasSubParametersMixin, ArrayParam))
param.set_parameter(subkey, value, base_dir)

else:
elif self.max_size is None or int(key) < self.max_size:
while int(key) >= len(self.params):
self.params.append(self.param.copy())
param = self.params[int(key)]
Expand All @@ -810,14 +808,14 @@ def get_parameters(self, key, base_dir="."):

def set_column_choices(self, choices):
params_by_label = {p.label: p for p in self.params}
self.params = [None] * len(choices)
for num, name in enumerate(choices):
if name in params_by_label:
self.params[num] = params_by_label[name]
self.params = []
for label in choices:
if label in params_by_label:
self.params.append(params_by_label[label])
else:
self.params[num] = self.param.copy()
self.params[num].label = name
self.params[num].set_column_choices(choices)
self.params.append(self.param.copy())
self.params[-1].label = label
super().set_column_choices(choices)

def get_column_params(self):
for p in self.params:
Expand Down
50 changes: 46 additions & 4 deletions tests/test_parameters.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import io
from unittest.mock import mock_open, patch
from unittest.mock import patch

import pandas as pd
import pytest
Expand All @@ -15,10 +15,12 @@
ColumnOrNoneChoiceParam,
DataTypeChoiceParam,
DataTypeOrNoneChoiceParam,
FileArrayParam,
FileParam,
FloatParam,
IntegerParam,
MultiParam,
PerColumnArrayParam,
ScalarParam,
StringCharacterSetParam,
StringParam,
Expand Down Expand Up @@ -108,6 +110,7 @@ def test_multiparam():
)

assert "foo" in mp
assert sorted(mp.keys()) == ["bar", "foo"]

mp["foo"] = "hello"
assert mp.foo == "hello"
Expand All @@ -123,6 +126,9 @@ def test_multiparam():
mp.set_parameter("foo._label", "fnord")
assert mp["foo"].label == "fnord"

with pytest.raises(AttributeError):
assert mp.fnord


def test_scsp():
pp = StringCharacterSetParam("x", "hello", character_set=set("HelO"))
Expand Down Expand Up @@ -277,6 +283,23 @@ def dummy(*_, **__):
fp.value = "/foo/bar/baz"
assert fp.get_parameters("fnord", "/foo") == [("fnord", "bar/baz")]

assert fp.get_parameters("fnord", "") == [("fnord", "/foo/bar/baz")]

fp.value = ""
assert fp.get_parameters("fnord", "") == [("fnord", None)]


def test_filearrayparam():
ap1 = FileArrayParam("x", param=FileParam("Y"))
assert ap1.find_fileparam().label == "Y"

ap2 = FileArrayParam("x", param=MultiParam("Y", params={"z": FileParam("Z")}))
assert ap2.find_fileparam().label == "Z"

with pytest.raises(TypeError):
ap0 = FileArrayParam("x", param=IntegerParam("Y"))
ap0.find_fileparam()


def test_arrayparam_minmax():
pp = IntegerParam("x")
Expand All @@ -295,6 +318,25 @@ def test_arrayparam_minmax():
ap.del_row(1)
assert len(ap) == 2

# FIX minimum and maximum constraints!
# ap.del_subparam(ap[1])
# assert len(ap) == 2
assert ap[1] in ap
ap.del_subparam(ap[1])
assert len(ap) == 2

ap[0] = 7
assert ap[0].value == 7


def test_pcap():
pp = IntegerParam("x")
ap = PerColumnArrayParam("y", param=pp)

ap.set_column_choices(["a", "b", "c"])
assert len(ap) == 3
apa, apb, apc = list(ap)

ap.set_column_choices(["c", "d", "b", "a"])
assert len(ap) == 4
assert ap[0] is apc
assert ap[2] is apb
assert ap[3] is apa
assert ap[1] is not apb

0 comments on commit 0763d27

Please sign in to comment.