diff --git a/src/scgenerator/variableparameters.py b/src/scgenerator/variableparameters.py index c930f25..bbf08cd 100644 --- a/src/scgenerator/variableparameters.py +++ b/src/scgenerator/variableparameters.py @@ -331,9 +331,13 @@ def sequence_from_specs( raise ValueError(f"kind {kind!r} not recognized") -def get_sequence(value) -> np.ndarray: - if isinstance(value, (Sequence, np.ndarray)): - if isinstance(value[0], Sequence): +def get_sequence(value) -> np.ndarray | list[str]: + if isinstance(value, str): + return [value] + elif isinstance(value, (Sequence, np.ndarray)): + if isinstance(value[0], str): + return value + elif isinstance(value[0], Sequence): value = sequence_from_specs(*value[0]) return np.asanyarray(value) else: diff --git a/tests/test_variableparameters.py b/tests/test_variableparameters.py index 10314b7..b46958f 100644 --- a/tests/test_variableparameters.py +++ b/tests/test_variableparameters.py @@ -94,6 +94,21 @@ def test_constant_number(): conf.y(1) +def test_non_numbers(): + @vdataclass + class Conf: + x: Variable = vfield(default=["Hello", "World"]) + y: Variable = vfield() + + conf = Conf(y=("a", "b", "c")) + assert conf.x(0) == "Hello" + assert conf.y(0) == "a" + assert conf.y(1) == "b" + assert conf.y(2) == "c" + + assert conf.x(3) == "World" + + def test_constant_list(): """classes with constant fields don't increase size and always return the constant"""