def d1_test() -> ScoreHolder[bool]: def intern(x: float, y: float) -> bool: return isclose(x, y) gold1 = [{1, 2}, {3, 4}, {5, 6}] sys1 = [{1, 3}, {2, 4}, {5, 6}] gold2 = [{1, 2}, {3, 4}, {5, 6, 7, 8}] sys2 = [{1, 3}, {2, 4}, {5, 6, 7, 8}] return ScoreHolder.apply(evaluates(gold1, sys1), intern, evaluates(gold2, sys2))
def metric_1_symetry_test(gold: Partition, sys: Partition) -> ScoreHolder[bool]: """ evaluates whether score(gold, sys) = score(sys, gold) """ def intern(x: float, y: float) -> bool: return isclose(x, y) return ScoreHolder.apply(evaluates(gold, sys), intern, evaluates(sys, gold))
def metric_4_triangle_test(a: Partition, b: Partition, c: Partition) -> ScoreHolder[bool]: """ evaluates whether the (similarity) triangle inequality is respected s(a,b) + s(b,c) <= s(b,b) + s(a,b) """ def intern(x: float, y: float) -> bool: return isclose(x, y) or x < y return ScoreHolder.apply( evaluates(a, b) + evaluates(b, c), intern, evaluates(b, b) + evaluates(a, c))
def test_ScoreHolder_pow(self): assert ScoreHolder({}) == ScoreHolder({})**2 assert ScoreHolder({'a': (1, )}) == ScoreHolder({'a': (1, )})**1 assert ScoreHolder({ 'a': (1, ), 'b': (2, 3) }) == ScoreHolder({ 'a': (1, ), 'b': (2, 3) })**1 assert ScoreHolder({ 'a': (1, ), 'b': (4, 9) }) == ScoreHolder({ 'a': (1, ), 'b': (2, 3) })**2 assert ScoreHolder({ 'a': (1, ), 'b': (2, 3) }) == ScoreHolder({ 'a': (1, ), 'b': (4, 9) })**(1 / 2)
def test_ScoreHolder_truediv(self): assert ScoreHolder({}) == ScoreHolder({}) / 2 assert ScoreHolder({'a': (1, )}) == ScoreHolder({'a': (1, )}) / 1 assert ScoreHolder({ 'a': (1, ), 'b': (2, 3) }) == ScoreHolder({ 'a': (1, ), 'b': (2, 3) }) / 1 assert ScoreHolder({ 'a': (1, ), 'b': (2, 3) }) == ScoreHolder({ 'a': (2, ), 'b': (4, 6) }) / 2
def test_ScoreHolder_mul(self): assert ScoreHolder({}) == ScoreHolder({}) * 2 assert ScoreHolder({'a': (1, )}) == ScoreHolder({'a': (1, )}) * 1 assert ScoreHolder({ 'a': (1, ), 'b': (2, 3) }) == ScoreHolder({ 'a': (1, ), 'b': (2, 3) }) * 1 assert ScoreHolder({ 'a': (2, ), 'b': (4, 6) }) == ScoreHolder({ 'a': (1, ), 'b': (2, 3) }) * 2
def metric_5_indiscernable(gold: Partition, sys: Partition) -> ScoreHolder[bool]: def intern1(x: float, y: float): return isclose(x, y) def intern2(x: bool, y: bool): return x & y a = evaluates(gold, gold) b = evaluates(sys, sys) c = evaluates(gold, sys) x = ScoreHolder.apply(a, intern1, b) y = ScoreHolder.apply(a, intern1, c) z = ScoreHolder.apply(b, intern1, c) if gold == sys: return ScoreHolder.apply(ScoreHolder.apply(x, intern2, y), intern2, z) else: return ScoreHolder.apply(ScoreHolder.apply(x, intern2, y), intern2, z).apply_to_values(lambda k: not k)
def test_ScoreHolder_compare(self): assert ScoreHolder({}) == ScoreHolder({}).compare(ScoreHolder({})) assert ScoreHolder({'a': (Growth.STRICT_INCR, )}) == ScoreHolder({ 'a': (1, ) }).compare(ScoreHolder({'a': (2, )})) assert ScoreHolder({'a': (Growth.STRICT_INCR, Growth.CONST, Growth.STRICT_DECR)}) == \ ScoreHolder({'a': (1, 3, 5)}).compare(ScoreHolder({'a': (2, 3, 4)})) assert ScoreHolder({'a': (Growth.STRICT_INCR, Growth.CONST), 'b': (Growth.STRICT_DECR,)}) == \ ScoreHolder({'a': (1, 3), 'b': (4,)}).compare(ScoreHolder({'a': (2, 3), 'b': (2,)}))
def test_ScoreHolder_avg_std(self): func = ScoreHolder.avg_std assert (ScoreHolder({}), ScoreHolder({})) == func( (ScoreHolder({}) for _ in range(1))) assert (ScoreHolder({}), ScoreHolder({})) == func( (ScoreHolder({}) for _ in range(2))) assert (ScoreHolder({'a': (1,)}), ScoreHolder({'a': (0,)})) == \ func(iter([ScoreHolder({'a': (1,)}), ScoreHolder({'a': (1,)})])) assert (ScoreHolder({'a': (3,)}), ScoreHolder({'a': (1,)})) == \ func(iter([ScoreHolder({'a': (2,)}), ScoreHolder({'a': (4,)})])) assert (ScoreHolder({'a': (3, 5)}), ScoreHolder({'a': (1, 1)})) == \ func(iter([ScoreHolder({'a': (2, 4)}), ScoreHolder({'a': (4, 6)})])) assert (ScoreHolder({'a': (4, 5), 'b': (0, 1)}), ScoreHolder({'a': (2, 1), 'b': (1, 1)})) == \ func(iter([ScoreHolder({'a': (2, 4), 'b': (-1, 2)}), ScoreHolder({'a': (6, 6), 'b': (1, 0)})])) assert (ScoreHolder({'a': (1,)}), ScoreHolder({'a': (0,)})) == \ func(iter([ScoreHolder({'a': (1,)})]))
def test_ScoreHolder_sub(self): assert ScoreHolder({}) == ScoreHolder({}) - ScoreHolder({}) assert ScoreHolder({'a': (-2,), 'b': (-3, -3)}) == \ ScoreHolder({'a': (1,), 'b': (1, 2)}) - ScoreHolder({'a': (3,), 'b': (4, 5)}) assert ScoreHolder({'a': tuple()}) == \ ScoreHolder({'a': tuple()}) - ScoreHolder({'a': tuple()})
def test_ScoreHolder_add(self): assert ScoreHolder({}) == ScoreHolder({}) + ScoreHolder({}) assert ScoreHolder({'a': (4,), 'b': (5, 7)}) == \ ScoreHolder({'a': (1,), 'b': (1, 2)}) + ScoreHolder({'a': (3,), 'b': (4, 5)}) assert ScoreHolder({'a': tuple()}) == \ ScoreHolder({'a': tuple()}) + ScoreHolder({'a': tuple()})
def test_ScoreHolder_eq(self): assert ScoreHolder({}) == ScoreHolder({}) assert ScoreHolder({}) != ScoreHolder({'a': (1, )}) assert ScoreHolder({'a': (1, )}) == ScoreHolder({'a': (1, )}) assert ScoreHolder({ 'a': (1, ), 'b': (1, 2) }) == ScoreHolder({ 'a': (1, ), 'b': (1, 2) }) assert ScoreHolder({ 'a': (1, ), 'b': (1, ) }) != ScoreHolder({ 'a': (1, ), 'b': (1, 2) }) assert ScoreHolder({ 'a': (1, ), 'b': (1, 2) }) != ScoreHolder({ 'a': (1, ), 'b': (1, 3) }) assert ScoreHolder({ 'a': (1, ), 'b': (1, 2) }) != ScoreHolder({ 'b': (1, 2), 'a': (1, ) })
def metric_3(gold: Partition, sys: Partition) -> ScoreHolder[bool]: def intern(x: float, y: float) -> bool: return isclose(x, y) or x > y return ScoreHolder.apply(evaluates(gold, gold), intern, evaluates(gold, sys))
def f_test(gold: Partition, sys: Partition) -> ScoreHolder[bool]: def intern(x: float) -> bool: return isclose(x, 0) return ScoreHolder.apply_to_values(evaluates(gold, sys), intern)