def test_custom_repair(): def replace(names: Iterable[str]): return ["a", "b", "c"] out = repair_names([1, 2, 3], repair=replace) assert out == ["a", "b", "c"] with pytest.raises(ValueError): repair_names([1, 2, 3], repair=1) out = repair_names(['a', 'b', 'c'], repair=str.upper) assert out == ['A', 'B', 'C'] out = repair_names(['a', 'b', 'c'], repair=['x', 'y', 'z']) assert out == ['x', 'y', 'z']
def test_unique_algebraic_y(): x = ["__20", "a__1", "b", "", "a__2", "d"] y = ["", "a__3", "b", "__3", "e"] ## fix names on each, catenate, fix the whole z1 = repair_names(repair_names(x, repair="unique") + repair_names(y, repair="unique"), repair="unique") z2 = repair_names(repair_names(x, repair="unique") + y, repair="unique") z3 = repair_names(x + repair_names(y, repair="unique"), repair="unique") z4 = repair_names(x + y, repair="unique") assert z1 == z2 == z3 == z4
def test_check_unique(): with pytest.raises(NameNonUniqueError): repair_names([np.nan], repair="check_unique") with pytest.raises(NameNonUniqueError): repair_names([""], repair="check_unique") with pytest.raises(NameNonUniqueError): repair_names(["a", "a"], repair="check_unique") with pytest.raises(NameNonUniqueError): repair_names(["__1"], repair="check_unique") with pytest.raises(NameNonUniqueError): repair_names(["__"], repair="check_unique") assert repair_names(["a", "b"], repair="check_unique") == ["a", "b"]
def test_universal(names, expect): assert repair_names(names, repair="universal") == expect
def test_unique(names, expect): assert repair_names(names, repair="unique") == expect
def test_minimal(names, expect): assert repair_names(names, repair="minimal") == expect
from typing import Iterable import numpy as np from string import ascii_letters from datar.core.exceptions import NameNonUniqueError from datar.core.names import ( repair_names, ) @pytest.mark.parametrize("names,expect", [ ([1, 2, 3], ["1", "2", "3"]), (["", np.nan], ["", ""]), (["", np.nan], ["", ""]), (["", "", np.nan], ["", "", ""]), (repair_names(["", "", np.nan], repair="minimal"), ["", "", ""]), ]) def test_minimal(names, expect): assert repair_names(names, repair="minimal") == expect @pytest.mark.parametrize("names,expect", [ ([np.nan, np.nan], ["__0", "__1"]), (["x", "x"], ["x__0", "x__1"]), (["x", "y"], ["x", "y"]), (["", "x", "y", "x"], ["__0", "x__1", "y", "x__3"]), ([""], ["__0"]), ([np.nan], ["__0"]), (["__20", "a__33", "b", "", "a__2__34" ], ["__0", "a__1", "b", "__3", "a__4"]), (["a__1"], ["a"]),